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 | extern void mac_rx_bypass_enable(mac_client_handle_t);
|
---|
54 | extern void mac_rx_bypass_disable(mac_client_handle_t);
|
---|
55 |
|
---|
56 | extern const mac_info_t *mac_info(mac_handle_t);
|
---|
57 | extern boolean_t mac_info_get(const char *, mac_info_t *);
|
---|
58 | extern boolean_t mac_promisc_get(mac_handle_t);
|
---|
59 |
|
---|
60 | extern int mac_start(mac_handle_t);
|
---|
61 | extern void mac_stop(mac_handle_t);
|
---|
62 |
|
---|
63 | extern void mac_ioctl(mac_handle_t, queue_t *, mblk_t *);
|
---|
64 | extern link_state_t mac_link_get(mac_handle_t);
|
---|
65 | extern void mac_resource_set(mac_client_handle_t, mac_resource_add_t, void *);
|
---|
66 | extern dev_info_t *mac_devinfo_get(mac_handle_t);
|
---|
67 | extern void *mac_driver(mac_handle_t);
|
---|
68 | extern boolean_t mac_capab_get(mac_handle_t, mac_capab_t, void *);
|
---|
69 | extern boolean_t mac_sap_verify(mac_handle_t, uint32_t, uint32_t *);
|
---|
70 | extern mblk_t *mac_header(mac_handle_t, const uint8_t *, uint32_t, mblk_t *,
|
---|
71 | size_t);
|
---|
72 | extern int mac_header_info(mac_handle_t, mblk_t *, mac_header_info_t *);
|
---|
73 | extern int mac_vlan_header_info(mac_handle_t, mblk_t *, mac_header_info_t *);
|
---|
74 | extern mblk_t *mac_header_cook(mac_handle_t, mblk_t *);
|
---|
75 | extern mblk_t *mac_header_uncook(mac_handle_t, mblk_t *);
|
---|
76 |
|
---|
77 | extern void mac_resource_set_common(mac_client_handle_t,
|
---|
78 | mac_resource_add_t, mac_resource_remove_t, mac_resource_quiesce_t,
|
---|
79 | mac_resource_restart_t, mac_resource_bind_t, void *);
|
---|
80 |
|
---|
81 | extern void mac_perim_enter_by_mh(mac_handle_t, mac_perim_handle_t *);
|
---|
82 | extern int mac_perim_enter_by_macname(const char *, mac_perim_handle_t *);
|
---|
83 | extern int mac_perim_enter_by_linkid(datalink_id_t, mac_perim_handle_t *);
|
---|
84 | extern void mac_perim_exit(mac_perim_handle_t);
|
---|
85 | extern boolean_t mac_perim_held(mac_handle_t);
|
---|
86 |
|
---|
87 | extern uint16_t mac_client_vid(mac_client_handle_t);
|
---|
88 | extern int mac_vnic_unicast_set(mac_client_handle_t, const uint8_t *);
|
---|
89 | extern boolean_t mac_client_is_vlan_vnic(mac_client_handle_t);
|
---|
90 |
|
---|
91 | extern void mac_client_poll_enable(mac_client_handle_t);
|
---|
92 | extern void mac_client_poll_disable(mac_client_handle_t);
|
---|
93 |
|
---|
94 | extern int mac_resource_ctl_set(mac_client_handle_t, mac_resource_props_t *);
|
---|
95 | extern void mac_resource_ctl_get(mac_client_handle_t, mac_resource_props_t *);
|
---|
96 |
|
---|
97 | /*
|
---|
98 | * Flow-related APIs for MAC clients.
|
---|
99 | */
|
---|
100 |
|
---|
101 | extern void mac_link_init_flows(mac_client_handle_t);
|
---|
102 | extern void mac_link_release_flows(mac_client_handle_t);
|
---|
103 | extern int mac_link_flow_add(datalink_id_t, char *, flow_desc_t *,
|
---|
104 | mac_resource_props_t *);
|
---|
105 | extern int mac_link_flow_remove(char *);
|
---|
106 | extern int mac_link_flow_modify(char *, mac_resource_props_t *);
|
---|
107 | extern boolean_t mac_link_has_flows(mac_client_handle_t);
|
---|
108 |
|
---|
109 | typedef struct {
|
---|
110 | char fi_flow_name[MAXFLOWNAMELEN];
|
---|
111 | datalink_id_t fi_link_id;
|
---|
112 | flow_desc_t fi_flow_desc;
|
---|
113 | mac_resource_props_t fi_resource_props;
|
---|
114 | } mac_flowinfo_t;
|
---|
115 |
|
---|
116 | extern int mac_link_flow_walk(datalink_id_t,
|
---|
117 | int (*)(mac_flowinfo_t *, void *), void *);
|
---|
118 | extern int mac_link_flow_info(char *, mac_flowinfo_t *);
|
---|
119 |
|
---|
120 | extern void *mac_tx_hold(mac_client_handle_t);
|
---|
121 | extern void mac_tx_rele(mac_client_handle_t, void *);
|
---|
122 | extern void mac_rx_client_quiesce(mac_client_handle_t);
|
---|
123 | extern void mac_rx_client_restart(mac_client_handle_t);
|
---|
124 | extern void mac_srs_perm_quiesce(mac_client_handle_t, boolean_t);
|
---|
125 | extern int mac_hwrings_get(mac_client_handle_t, mac_group_handle_t *,
|
---|
126 | mac_ring_handle_t *, mac_ring_type_t);
|
---|
127 | extern void mac_hwring_setup(mac_ring_handle_t, mac_resource_handle_t);
|
---|
128 | extern void mac_hwring_teardown(mac_ring_handle_t);
|
---|
129 | extern int mac_hwring_disable_intr(mac_ring_handle_t);
|
---|
130 | extern int mac_hwring_enable_intr(mac_ring_handle_t);
|
---|
131 | extern int mac_hwring_start(mac_ring_handle_t);
|
---|
132 | extern void mac_hwring_stop(mac_ring_handle_t);
|
---|
133 | extern mblk_t *mac_hwring_poll(mac_ring_handle_t, int);
|
---|
134 | #define MAC_HWRING_POLL(ring, bytes) \
|
---|
135 | (((ring)->mr_info.mri_poll) \
|
---|
136 | ((ring)->mr_info.mri_driver, (bytes)))
|
---|
137 |
|
---|
138 | extern int mac_hwgroup_addmac(mac_group_handle_t, const uint8_t *);
|
---|
139 | extern int mac_hwgroup_remmac(mac_group_handle_t, const uint8_t *);
|
---|
140 |
|
---|
141 | extern void mac_set_upper_mac(mac_client_handle_t, mac_handle_t);
|
---|
142 |
|
---|
143 | extern int mac_mark_exclusive(mac_handle_t);
|
---|
144 | extern void mac_unmark_exclusive(mac_handle_t);
|
---|
145 |
|
---|
146 | extern int32_t mac_client_intr_cpu(mac_client_handle_t);
|
---|
147 | extern void mac_client_set_intr_cpu(void *, mac_client_handle_t, int32_t);
|
---|
148 | extern void *mac_get_devinfo(mac_handle_t);
|
---|
149 |
|
---|
150 | #endif /* _KERNEL */
|
---|
151 |
|
---|
152 | #ifdef __cplusplus
|
---|
153 | }
|
---|
154 | #endif
|
---|
155 |
|
---|
156 | #endif /* _SYS_MAC_CLIENT_PRIV_H */
|
---|