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