xref: /titanic_52/usr/src/uts/common/sys/mac_client_priv.h (revision a66bd0d75509aa415c4e4a96f235669b87376308)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 
22 /*
23  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 
27 /*
28  * This file contains *private* MAC API definitions. This header file
29  * should only be included by kernel components which are part of the
30  * GLDv3 stack (dld, dls, aggr, softmac).
31  */
32 
33 #ifndef	_SYS_MAC_CLIENT_PRIV_H
34 #define	_SYS_MAC_CLIENT_PRIV_H
35 
36 #include <sys/mac.h>
37 #include <sys/mac_flow.h>
38 
39 #ifdef	__cplusplus
40 extern "C" {
41 #endif
42 
43 #ifdef	_KERNEL
44 
45 #ifdef DEBUG
46 #define	MAC_PERIM_HELD(mph)		mac_perim_held(mph)
47 #else
48 #define	MAC_PERIM_HELD(mph)
49 #endif
50 
51 extern boolean_t mac_rx_bypass_set(mac_client_handle_t, mac_direct_rx_t,
52     void *);
53 
54 extern const mac_info_t *mac_info(mac_handle_t);
55 extern boolean_t mac_info_get(const char *, mac_info_t *);
56 extern int mac_promisc_set(mac_handle_t, boolean_t, mac_promisc_type_t);
57 extern boolean_t mac_promisc_get(mac_handle_t, mac_promisc_type_t);
58 
59 extern int mac_start(mac_handle_t);
60 extern void mac_stop(mac_handle_t);
61 
62 extern void mac_ioctl(mac_handle_t, queue_t *, mblk_t *);
63 extern link_state_t mac_link_get(mac_handle_t);
64 extern void mac_resource_set(mac_client_handle_t, mac_resource_add_t, void *);
65 extern dev_info_t *mac_devinfo_get(mac_handle_t);
66 extern boolean_t mac_capab_get(mac_handle_t, mac_capab_t, void *);
67 extern boolean_t mac_sap_verify(mac_handle_t, uint32_t, uint32_t *);
68 extern mblk_t *mac_header(mac_handle_t, const uint8_t *, uint32_t, mblk_t *,
69     size_t);
70 extern int mac_header_info(mac_handle_t, mblk_t *, mac_header_info_t *);
71 extern mblk_t *mac_header_cook(mac_handle_t, mblk_t *);
72 extern mblk_t *mac_header_uncook(mac_handle_t, mblk_t *);
73 
74 extern void mac_resource_set_common(mac_client_handle_t,
75     mac_resource_add_t, mac_resource_remove_t, mac_resource_quiesce_t,
76     mac_resource_restart_t, mac_resource_bind_t, void *);
77 
78 extern	void mac_perim_enter_by_mh(mac_handle_t, mac_perim_handle_t *);
79 extern	int mac_perim_enter_by_macname(const char *, mac_perim_handle_t *);
80 extern	int mac_perim_enter_by_linkid(datalink_id_t, mac_perim_handle_t *);
81 extern	void mac_perim_exit(mac_perim_handle_t);
82 extern	boolean_t mac_perim_held(mac_handle_t);
83 
84 extern	uint16_t mac_client_vid(mac_client_handle_t);
85 extern int mac_vnic_unicast_set(mac_client_handle_t, const uint8_t *);
86 
87 extern void mac_client_poll_enable(mac_client_handle_t);
88 extern void mac_client_poll_disable(mac_client_handle_t);
89 
90 extern int mac_resource_ctl_set(mac_client_handle_t, mac_resource_props_t *);
91 extern void mac_resource_ctl_get(mac_client_handle_t, mac_resource_props_t *);
92 
93 /*
94  * Flow-related APIs for MAC clients.
95  */
96 
97 extern void mac_link_init_flows(mac_client_handle_t);
98 extern void mac_link_release_flows(mac_client_handle_t);
99 extern int mac_link_flow_add(datalink_id_t, char *, flow_desc_t *,
100     mac_resource_props_t *);
101 extern int mac_link_flow_remove(char *);
102 extern int mac_link_flow_modify(char *, mac_resource_props_t *);
103 extern boolean_t mac_link_has_flows(mac_client_handle_t);
104 
105 typedef struct {
106 	char			fi_flow_name[MAXFLOWNAMELEN];
107 	datalink_id_t		fi_link_id;
108 	flow_desc_t		fi_flow_desc;
109 	mac_resource_props_t	fi_resource_props;
110 } mac_flowinfo_t;
111 
112 extern int mac_link_flow_walk(datalink_id_t,
113     int (*)(mac_flowinfo_t *, void *), void *);
114 extern int mac_link_flow_info(char *, mac_flowinfo_t *);
115 
116 extern void	*mac_tx_hold(mac_client_handle_t);
117 extern void	mac_tx_rele(mac_client_handle_t, void *);
118 extern void	mac_rx_client_quiesce(mac_client_handle_t);
119 extern void	mac_rx_client_restart(mac_client_handle_t);
120 extern void	mac_srs_perm_quiesce(mac_client_handle_t, boolean_t);
121 extern int	mac_hwrings_get(mac_client_handle_t, mac_group_handle_t *,
122 		    mac_ring_handle_t *);
123 extern void	mac_hwring_setup(mac_ring_handle_t, mac_resource_handle_t);
124 extern void	mac_hwring_teardown(mac_ring_handle_t);
125 extern int	mac_hwring_disable_intr(mac_ring_handle_t);
126 extern int	mac_hwring_enable_intr(mac_ring_handle_t);
127 extern int	mac_hwring_start(mac_ring_handle_t);
128 extern void	mac_hwring_stop(mac_ring_handle_t);
129 extern mblk_t	*mac_hwring_poll(mac_ring_handle_t, int);
130 #define		MAC_HWRING_POLL(ring, bytes)		\
131 		(((ring)->mr_info.mri_poll)		\
132 		((ring)->mr_info.mri_driver, (bytes)))
133 
134 extern int	mac_hwgroup_addmac(mac_group_handle_t, const uint8_t *);
135 extern int	mac_hwgroup_remmac(mac_group_handle_t, const uint8_t *);
136 
137 extern void	mac_set_upper_mac(mac_client_handle_t, mac_handle_t);
138 
139 extern int mac_mark_exclusive(mac_handle_t);
140 extern void mac_unmark_exclusive(mac_handle_t);
141 
142 extern int32_t	mac_client_intr_cpu(mac_client_handle_t);
143 extern void	mac_client_set_intr_cpu(void *, mac_client_handle_t, int32_t);
144 extern void	*mac_get_devinfo(mac_handle_t);
145 
146 #endif	/* _KERNEL */
147 
148 #ifdef	__cplusplus
149 }
150 #endif
151 
152 #endif /* _SYS_MAC_CLIENT_PRIV_H */
153