1da14cebeSEric Cheng /* 2da14cebeSEric Cheng * CDDL HEADER START 3da14cebeSEric Cheng * 4da14cebeSEric Cheng * The contents of this file are subject to the terms of the 5da14cebeSEric Cheng * Common Development and Distribution License (the "License"). 6da14cebeSEric Cheng * You may not use this file except in compliance with the License. 7da14cebeSEric Cheng * 8da14cebeSEric Cheng * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9da14cebeSEric Cheng * or http://www.opensolaris.org/os/licensing. 10da14cebeSEric Cheng * See the License for the specific language governing permissions 11da14cebeSEric Cheng * and limitations under the License. 12da14cebeSEric Cheng * 13da14cebeSEric Cheng * When distributing Covered Code, include this CDDL HEADER in each 14da14cebeSEric Cheng * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15da14cebeSEric Cheng * If applicable, add the following below this CDDL HEADER, with the 16da14cebeSEric Cheng * fields enclosed by brackets "[]" replaced with your own identifying 17da14cebeSEric Cheng * information: Portions Copyright [yyyy] [name of copyright owner] 18da14cebeSEric Cheng * 19da14cebeSEric Cheng * CDDL HEADER END 20da14cebeSEric Cheng */ 21da14cebeSEric Cheng 22da14cebeSEric Cheng /* 230dc2366fSVenugopal Iyer * Copyright 2010 Sun Microsystems, Inc. All rights reserved. 24da14cebeSEric Cheng * Use is subject to license terms. 2584de666eSRyan Zezeski * Copyright 2018 Joyent, Inc. 26da14cebeSEric Cheng */ 27da14cebeSEric Cheng 28da14cebeSEric Cheng /* 29da14cebeSEric Cheng * This file contains *private* MAC API definitions. This header file 30da14cebeSEric Cheng * should only be included by kernel components which are part of the 31da14cebeSEric Cheng * GLDv3 stack (dld, dls, aggr, softmac). 32da14cebeSEric Cheng */ 33da14cebeSEric Cheng 34da14cebeSEric Cheng #ifndef _SYS_MAC_CLIENT_PRIV_H 35da14cebeSEric Cheng #define _SYS_MAC_CLIENT_PRIV_H 36da14cebeSEric Cheng 37da14cebeSEric Cheng #include <sys/mac.h> 38da14cebeSEric Cheng #include <sys/mac_flow.h> 39da14cebeSEric Cheng 40da14cebeSEric Cheng #ifdef __cplusplus 41da14cebeSEric Cheng extern "C" { 42da14cebeSEric Cheng #endif 43da14cebeSEric Cheng 44da14cebeSEric Cheng #ifdef _KERNEL 45da14cebeSEric Cheng 46da14cebeSEric Cheng #ifdef DEBUG 47da14cebeSEric Cheng #define MAC_PERIM_HELD(mph) mac_perim_held(mph) 48da14cebeSEric Cheng #else 49da14cebeSEric Cheng #define MAC_PERIM_HELD(mph) 50da14cebeSEric Cheng #endif 51da14cebeSEric Cheng 52da14cebeSEric Cheng extern boolean_t mac_rx_bypass_set(mac_client_handle_t, mac_direct_rx_t, 53da14cebeSEric Cheng void *); 548d4cf8d8S extern void mac_rx_bypass_enable(mac_client_handle_t); 558d4cf8d8S extern void mac_rx_bypass_disable(mac_client_handle_t); 56da14cebeSEric Cheng 57da14cebeSEric Cheng extern const mac_info_t *mac_info(mac_handle_t); 58da14cebeSEric Cheng extern boolean_t mac_info_get(const char *, mac_info_t *); 59d91a22bfSGirish Moodalbail extern boolean_t mac_promisc_get(mac_handle_t); 60da14cebeSEric Cheng 613bdd2dd4SMichael Lim extern int mac_start(mac_handle_t); 623bdd2dd4SMichael Lim extern void mac_stop(mac_handle_t); 633bdd2dd4SMichael Lim 64da14cebeSEric Cheng extern void mac_ioctl(mac_handle_t, queue_t *, mblk_t *); 65da14cebeSEric Cheng extern link_state_t mac_link_get(mac_handle_t); 66da14cebeSEric Cheng extern void mac_resource_set(mac_client_handle_t, mac_resource_add_t, void *); 67da14cebeSEric Cheng extern dev_info_t *mac_devinfo_get(mac_handle_t); 685d460eafSCathy Zhou extern void *mac_driver(mac_handle_t); 69da14cebeSEric Cheng extern boolean_t mac_capab_get(mac_handle_t, mac_capab_t, void *); 70da14cebeSEric Cheng extern boolean_t mac_sap_verify(mac_handle_t, uint32_t, uint32_t *); 71da14cebeSEric Cheng extern mblk_t *mac_header(mac_handle_t, const uint8_t *, uint32_t, mblk_t *, 72da14cebeSEric Cheng size_t); 73da14cebeSEric Cheng extern int mac_header_info(mac_handle_t, mblk_t *, mac_header_info_t *); 7425ec3e3dSEric Cheng extern int mac_vlan_header_info(mac_handle_t, mblk_t *, mac_header_info_t *); 75da14cebeSEric Cheng extern mblk_t *mac_header_cook(mac_handle_t, mblk_t *); 76da14cebeSEric Cheng extern mblk_t *mac_header_uncook(mac_handle_t, mblk_t *); 77da14cebeSEric Cheng 78da14cebeSEric Cheng extern void mac_resource_set_common(mac_client_handle_t, 79da14cebeSEric Cheng mac_resource_add_t, mac_resource_remove_t, mac_resource_quiesce_t, 80da14cebeSEric Cheng mac_resource_restart_t, mac_resource_bind_t, void *); 81da14cebeSEric Cheng 82da14cebeSEric Cheng extern void mac_perim_enter_by_mh(mac_handle_t, mac_perim_handle_t *); 83da14cebeSEric Cheng extern int mac_perim_enter_by_macname(const char *, mac_perim_handle_t *); 84da14cebeSEric Cheng extern int mac_perim_enter_by_linkid(datalink_id_t, mac_perim_handle_t *); 85da14cebeSEric Cheng extern void mac_perim_exit(mac_perim_handle_t); 86da14cebeSEric Cheng extern boolean_t mac_perim_held(mac_handle_t); 87da14cebeSEric Cheng 88da14cebeSEric Cheng extern uint16_t mac_client_vid(mac_client_handle_t); 89da14cebeSEric Cheng extern int mac_vnic_unicast_set(mac_client_handle_t, const uint8_t *); 9072782355SNicolas Droux extern boolean_t mac_client_is_vlan_vnic(mac_client_handle_t); 91da14cebeSEric Cheng 92da14cebeSEric Cheng extern void mac_client_poll_enable(mac_client_handle_t); 93da14cebeSEric Cheng extern void mac_client_poll_disable(mac_client_handle_t); 94da14cebeSEric Cheng 95da14cebeSEric Cheng /* 96da14cebeSEric Cheng * Flow-related APIs for MAC clients. 97da14cebeSEric Cheng */ 98da14cebeSEric Cheng 99da14cebeSEric Cheng extern void mac_link_init_flows(mac_client_handle_t); 100da14cebeSEric Cheng extern void mac_link_release_flows(mac_client_handle_t); 101da14cebeSEric Cheng extern int mac_link_flow_add(datalink_id_t, char *, flow_desc_t *, 102da14cebeSEric Cheng mac_resource_props_t *); 103da14cebeSEric Cheng extern int mac_link_flow_remove(char *); 104da14cebeSEric Cheng extern int mac_link_flow_modify(char *, mac_resource_props_t *); 105da14cebeSEric Cheng extern boolean_t mac_link_has_flows(mac_client_handle_t); 106da14cebeSEric Cheng 107da14cebeSEric Cheng typedef struct { 108da000602SGirish Moodalbail char fi_flow_name[MAXFLOWNAMELEN]; 109da14cebeSEric Cheng datalink_id_t fi_link_id; 110da14cebeSEric Cheng flow_desc_t fi_flow_desc; 111da14cebeSEric Cheng mac_resource_props_t fi_resource_props; 112da14cebeSEric Cheng } mac_flowinfo_t; 113da14cebeSEric Cheng 114da14cebeSEric Cheng extern int mac_link_flow_walk(datalink_id_t, 115da14cebeSEric Cheng int (*)(mac_flowinfo_t *, void *), void *); 116da14cebeSEric Cheng extern int mac_link_flow_info(char *, mac_flowinfo_t *); 117da14cebeSEric Cheng 118da14cebeSEric Cheng extern void mac_rx_client_quiesce(mac_client_handle_t); 119da14cebeSEric Cheng extern void mac_rx_client_restart(mac_client_handle_t); 1200dc2366fSVenugopal Iyer extern void mac_tx_client_quiesce(mac_client_handle_t); 1210dc2366fSVenugopal Iyer extern void mac_tx_client_condemn(mac_client_handle_t); 1220dc2366fSVenugopal Iyer extern void mac_tx_client_restart(mac_client_handle_t); 123da14cebeSEric Cheng extern void mac_srs_perm_quiesce(mac_client_handle_t, boolean_t); 12445948e49SRyan Zezeski extern uint_t mac_hwrings_idx_get(mac_handle_t, uint_t, mac_group_handle_t *, 12545948e49SRyan Zezeski mac_ring_handle_t *, mac_ring_type_t); 126da14cebeSEric Cheng extern int mac_hwrings_get(mac_client_handle_t, mac_group_handle_t *, 12763f531d1SSriharsha Basavapatna mac_ring_handle_t *, mac_ring_type_t); 1280dc2366fSVenugopal Iyer extern uint_t mac_hwring_getinfo(mac_ring_handle_t); 12945948e49SRyan Zezeski extern void mac_hwring_set_passthru(mac_ring_handle_t, mac_rx_t, void *, 13045948e49SRyan Zezeski mac_resource_handle_t); 13145948e49SRyan Zezeski extern void mac_hwring_clear_passthru(mac_ring_handle_t); 13245948e49SRyan Zezeski extern void mac_client_set_flow_cb(mac_client_handle_t, mac_rx_t, void *); 13345948e49SRyan Zezeski extern void mac_client_clear_flow_cb(mac_client_handle_t); 13445948e49SRyan Zezeski 1350dc2366fSVenugopal Iyer extern void mac_hwring_setup(mac_ring_handle_t, mac_resource_handle_t, 1360dc2366fSVenugopal Iyer mac_ring_handle_t); 137da14cebeSEric Cheng extern void mac_hwring_teardown(mac_ring_handle_t); 138da14cebeSEric Cheng extern int mac_hwring_disable_intr(mac_ring_handle_t); 139da14cebeSEric Cheng extern int mac_hwring_enable_intr(mac_ring_handle_t); 140da14cebeSEric Cheng extern int mac_hwring_start(mac_ring_handle_t); 141da14cebeSEric Cheng extern void mac_hwring_stop(mac_ring_handle_t); 14245948e49SRyan Zezeski extern int mac_hwring_activate(mac_ring_handle_t); 14345948e49SRyan Zezeski extern void mac_hwring_quiesce(mac_ring_handle_t); 144da14cebeSEric Cheng extern mblk_t *mac_hwring_poll(mac_ring_handle_t, int); 1450dc2366fSVenugopal Iyer extern mblk_t *mac_hwring_tx(mac_ring_handle_t, mblk_t *); 1460dc2366fSVenugopal Iyer extern int mac_hwring_getstat(mac_ring_handle_t, uint_t, uint64_t *); 1470dc2366fSVenugopal Iyer extern mblk_t *mac_hwring_send_priv(mac_client_handle_t, 1480dc2366fSVenugopal Iyer mac_ring_handle_t, mblk_t *); 14909b7f21aSRobert Mustacchi extern void mac_hwring_set_default(mac_handle_t, mac_ring_handle_t); 1500dc2366fSVenugopal Iyer 151da14cebeSEric Cheng #define MAC_HWRING_POLL(ring, bytes) \ 152da14cebeSEric Cheng (((ring)->mr_info.mri_poll) \ 153da14cebeSEric Cheng ((ring)->mr_info.mri_driver, (bytes))) 154da14cebeSEric Cheng 155da14cebeSEric Cheng extern int mac_hwgroup_addmac(mac_group_handle_t, const uint8_t *); 156da14cebeSEric Cheng extern int mac_hwgroup_remmac(mac_group_handle_t, const uint8_t *); 15784de666eSRyan Zezeski extern int mac_hwgroup_addvlan(mac_group_handle_t, uint16_t); 15884de666eSRyan Zezeski extern int mac_hwgroup_remvlan(mac_group_handle_t, uint16_t); 15984de666eSRyan Zezeski 16084de666eSRyan Zezeski extern boolean_t mac_has_hw_vlan(mac_handle_t); 161da14cebeSEric Cheng 16245948e49SRyan Zezeski extern uint_t mac_get_num_rx_groups(mac_handle_t); 16345948e49SRyan Zezeski extern int mac_set_promisc(mac_handle_t, boolean_t); 16445948e49SRyan Zezeski 1650dc2366fSVenugopal Iyer extern void mac_set_upper_mac(mac_client_handle_t, mac_handle_t, 1660dc2366fSVenugopal Iyer mac_resource_props_t *); 167da14cebeSEric Cheng 168da14cebeSEric Cheng extern int mac_mark_exclusive(mac_handle_t); 169da14cebeSEric Cheng extern void mac_unmark_exclusive(mac_handle_t); 170da14cebeSEric Cheng 1710dc2366fSVenugopal Iyer extern uint_t mac_hwgrp_num(mac_handle_t, int); 1720dc2366fSVenugopal Iyer extern void mac_get_hwrxgrp_info(mac_handle_t, int, uint_t *, uint_t *, 1730dc2366fSVenugopal Iyer uint_t *, uint_t *, uint_t *, char *); 1740dc2366fSVenugopal Iyer extern void mac_get_hwtxgrp_info(mac_handle_t, int, uint_t *, uint_t *, 1750dc2366fSVenugopal Iyer uint_t *, uint_t *, uint_t *, char *); 1760dc2366fSVenugopal Iyer 1770dc2366fSVenugopal Iyer extern uint_t mac_txavail_get(mac_handle_t); 1780dc2366fSVenugopal Iyer extern uint_t mac_rxavail_get(mac_handle_t); 1790dc2366fSVenugopal Iyer extern uint_t mac_txrsvd_get(mac_handle_t); 1800dc2366fSVenugopal Iyer extern uint_t mac_rxrsvd_get(mac_handle_t); 1810dc2366fSVenugopal Iyer extern uint_t mac_rxhwlnksavail_get(mac_handle_t); 1820dc2366fSVenugopal Iyer extern uint_t mac_rxhwlnksrsvd_get(mac_handle_t); 1830dc2366fSVenugopal Iyer extern uint_t mac_txhwlnksavail_get(mac_handle_t); 1840dc2366fSVenugopal Iyer extern uint_t mac_txhwlnksrsvd_get(mac_handle_t); 1850dc2366fSVenugopal Iyer 186da14cebeSEric Cheng extern int32_t mac_client_intr_cpu(mac_client_handle_t); 187da14cebeSEric Cheng extern void mac_client_set_intr_cpu(void *, mac_client_handle_t, int32_t); 188da14cebeSEric Cheng extern void *mac_get_devinfo(mac_handle_t); 189da14cebeSEric Cheng 1900dc2366fSVenugopal Iyer extern boolean_t mac_is_vnic(mac_handle_t); 191*36589d6bSRobert Mustacchi extern boolean_t mac_is_overlay(mac_handle_t); 1920dc2366fSVenugopal Iyer extern uint32_t mac_no_notification(mac_handle_t); 1930dc2366fSVenugopal Iyer 1940dc2366fSVenugopal Iyer extern int mac_set_prop(mac_handle_t, mac_prop_id_t, char *, void *, uint_t); 1950dc2366fSVenugopal Iyer extern int mac_get_prop(mac_handle_t, mac_prop_id_t, char *, void *, uint_t); 1960dc2366fSVenugopal Iyer extern int mac_prop_info(mac_handle_t, mac_prop_id_t, char *, void *, 1970dc2366fSVenugopal Iyer uint_t, mac_propval_range_t *, uint_t *); 1980dc2366fSVenugopal Iyer extern boolean_t mac_prop_check_size(mac_prop_id_t, uint_t, boolean_t); 1990dc2366fSVenugopal Iyer 2000dc2366fSVenugopal Iyer extern uint64_t mac_pseudo_rx_ring_stat_get(mac_ring_handle_t, uint_t); 2010dc2366fSVenugopal Iyer extern uint64_t mac_pseudo_tx_ring_stat_get(mac_ring_handle_t, uint_t); 2020dc2366fSVenugopal Iyer 203da14cebeSEric Cheng #endif /* _KERNEL */ 204da14cebeSEric Cheng 205da14cebeSEric Cheng #ifdef __cplusplus 206da14cebeSEric Cheng } 207da14cebeSEric Cheng #endif 208da14cebeSEric Cheng 209da14cebeSEric Cheng #endif /* _SYS_MAC_CLIENT_PRIV_H */ 210