da14cebe459d3275048785f25bd869cb09b5307fEric Cheng/*
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng * CDDL HEADER START
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng *
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng * The contents of this file are subject to the terms of the
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng * Common Development and Distribution License (the "License").
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng * You may not use this file except in compliance with the License.
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng *
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng * or http://www.opensolaris.org/os/licensing.
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng * See the License for the specific language governing permissions
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng * and limitations under the License.
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng *
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng * When distributing Covered Code, include this CDDL HEADER in each
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng * If applicable, add the following below this CDDL HEADER, with the
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng * fields enclosed by brackets "[]" replaced with your own identifying
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng * information: Portions Copyright [yyyy] [name of copyright owner]
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng *
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng * CDDL HEADER END
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng */
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng/*
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng * Use is subject to license terms.
1a41ca239310955ae95b2569b707432432a58580Jerry Jelinek * Copyright 2013 Joyent, Inc. All rights reserved.
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng */
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng/*
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng * This file contains *private* MAC API definitions. This header file
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng * should only be included by kernel components which are part of the
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng * GLDv3 stack (dld, dls, aggr, softmac).
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng */
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng#ifndef _SYS_MAC_CLIENT_PRIV_H
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng#define _SYS_MAC_CLIENT_PRIV_H
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng#include <sys/mac.h>
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng#include <sys/mac_flow.h>
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng#ifdef __cplusplus
da14cebe459d3275048785f25bd869cb09b5307fEric Chengextern "C" {
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng#endif
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng#ifdef _KERNEL
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng#ifdef DEBUG
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng#define MAC_PERIM_HELD(mph) mac_perim_held(mph)
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng#else
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng#define MAC_PERIM_HELD(mph)
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng#endif
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng
da14cebe459d3275048785f25bd869cb09b5307fEric Chengextern boolean_t mac_rx_bypass_set(mac_client_handle_t, mac_direct_rx_t,
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng void *);
8d4cf8d8d2965ea43bccdc838f15c18634fee02dextern void mac_rx_bypass_enable(mac_client_handle_t);
8d4cf8d8d2965ea43bccdc838f15c18634fee02dextern void mac_rx_bypass_disable(mac_client_handle_t);
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng
da14cebe459d3275048785f25bd869cb09b5307fEric Chengextern const mac_info_t *mac_info(mac_handle_t);
da14cebe459d3275048785f25bd869cb09b5307fEric Chengextern boolean_t mac_info_get(const char *, mac_info_t *);
d91a22bf861369519d0ffea75334e362f20a8a3cGirish Moodalbailextern boolean_t mac_promisc_get(mac_handle_t);
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng
3bdd2dd4fc8beea042304c5176c22b2ca6038223Michael Limextern int mac_start(mac_handle_t);
3bdd2dd4fc8beea042304c5176c22b2ca6038223Michael Limextern void mac_stop(mac_handle_t);
3bdd2dd4fc8beea042304c5176c22b2ca6038223Michael Lim
da14cebe459d3275048785f25bd869cb09b5307fEric Chengextern void mac_ioctl(mac_handle_t, queue_t *, mblk_t *);
da14cebe459d3275048785f25bd869cb09b5307fEric Chengextern link_state_t mac_link_get(mac_handle_t);
da14cebe459d3275048785f25bd869cb09b5307fEric Chengextern void mac_resource_set(mac_client_handle_t, mac_resource_add_t, void *);
da14cebe459d3275048785f25bd869cb09b5307fEric Chengextern dev_info_t *mac_devinfo_get(mac_handle_t);
5d460eafffba936e81c4dd5ebe0f59b238f09121Cathy Zhouextern void *mac_driver(mac_handle_t);
da14cebe459d3275048785f25bd869cb09b5307fEric Chengextern boolean_t mac_capab_get(mac_handle_t, mac_capab_t, void *);
da14cebe459d3275048785f25bd869cb09b5307fEric Chengextern boolean_t mac_sap_verify(mac_handle_t, uint32_t, uint32_t *);
da14cebe459d3275048785f25bd869cb09b5307fEric Chengextern mblk_t *mac_header(mac_handle_t, const uint8_t *, uint32_t, mblk_t *,
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng size_t);
da14cebe459d3275048785f25bd869cb09b5307fEric Chengextern int mac_header_info(mac_handle_t, mblk_t *, mac_header_info_t *);
25ec3e3dd27cc1038c10efa18ed08f064eab5fbeEric Chengextern int mac_vlan_header_info(mac_handle_t, mblk_t *, mac_header_info_t *);
da14cebe459d3275048785f25bd869cb09b5307fEric Chengextern mblk_t *mac_header_cook(mac_handle_t, mblk_t *);
da14cebe459d3275048785f25bd869cb09b5307fEric Chengextern mblk_t *mac_header_uncook(mac_handle_t, mblk_t *);
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng
da14cebe459d3275048785f25bd869cb09b5307fEric Chengextern void mac_resource_set_common(mac_client_handle_t,
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng mac_resource_add_t, mac_resource_remove_t, mac_resource_quiesce_t,
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng mac_resource_restart_t, mac_resource_bind_t, void *);
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng
da14cebe459d3275048785f25bd869cb09b5307fEric Chengextern void mac_perim_enter_by_mh(mac_handle_t, mac_perim_handle_t *);
da14cebe459d3275048785f25bd869cb09b5307fEric Chengextern int mac_perim_enter_by_macname(const char *, mac_perim_handle_t *);
da14cebe459d3275048785f25bd869cb09b5307fEric Chengextern int mac_perim_enter_by_linkid(datalink_id_t, mac_perim_handle_t *);
da14cebe459d3275048785f25bd869cb09b5307fEric Chengextern void mac_perim_exit(mac_perim_handle_t);
da14cebe459d3275048785f25bd869cb09b5307fEric Chengextern boolean_t mac_perim_held(mac_handle_t);
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng
da14cebe459d3275048785f25bd869cb09b5307fEric Chengextern uint16_t mac_client_vid(mac_client_handle_t);
da14cebe459d3275048785f25bd869cb09b5307fEric Chengextern int mac_vnic_unicast_set(mac_client_handle_t, const uint8_t *);
72782355275c9b21b1f48e54c4be0581adb21839Nicolas Drouxextern boolean_t mac_client_is_vlan_vnic(mac_client_handle_t);
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng
da14cebe459d3275048785f25bd869cb09b5307fEric Chengextern void mac_client_poll_enable(mac_client_handle_t);
da14cebe459d3275048785f25bd869cb09b5307fEric Chengextern void mac_client_poll_disable(mac_client_handle_t);
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng/*
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng * Flow-related APIs for MAC clients.
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng */
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng
da14cebe459d3275048785f25bd869cb09b5307fEric Chengextern void mac_link_init_flows(mac_client_handle_t);
da14cebe459d3275048785f25bd869cb09b5307fEric Chengextern void mac_link_release_flows(mac_client_handle_t);
da14cebe459d3275048785f25bd869cb09b5307fEric Chengextern int mac_link_flow_add(datalink_id_t, char *, flow_desc_t *,
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng mac_resource_props_t *);
da14cebe459d3275048785f25bd869cb09b5307fEric Chengextern int mac_link_flow_remove(char *);
da14cebe459d3275048785f25bd869cb09b5307fEric Chengextern int mac_link_flow_modify(char *, mac_resource_props_t *);
da14cebe459d3275048785f25bd869cb09b5307fEric Chengextern boolean_t mac_link_has_flows(mac_client_handle_t);
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng
da14cebe459d3275048785f25bd869cb09b5307fEric Chengtypedef struct {
da0006029e69465355313f503741ac6ebe0d513bGirish Moodalbail char fi_flow_name[MAXFLOWNAMELEN];
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng datalink_id_t fi_link_id;
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng flow_desc_t fi_flow_desc;
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng mac_resource_props_t fi_resource_props;
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng} mac_flowinfo_t;
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng
da14cebe459d3275048785f25bd869cb09b5307fEric Chengextern int mac_link_flow_walk(datalink_id_t,
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng int (*)(mac_flowinfo_t *, void *), void *);
da14cebe459d3275048785f25bd869cb09b5307fEric Chengextern int mac_link_flow_info(char *, mac_flowinfo_t *);
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern void mac_rx_client_quiesce(mac_client_handle_t);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern void mac_rx_client_restart(mac_client_handle_t);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern void mac_tx_client_quiesce(mac_client_handle_t);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern void mac_tx_client_condemn(mac_client_handle_t);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern void mac_tx_client_restart(mac_client_handle_t);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern void mac_srs_perm_quiesce(mac_client_handle_t, boolean_t);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern int mac_hwrings_get(mac_client_handle_t, mac_group_handle_t *,
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer mac_ring_handle_t *, mac_ring_type_t);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern uint_t mac_hwring_getinfo(mac_ring_handle_t);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern void mac_hwring_setup(mac_ring_handle_t, mac_resource_handle_t,
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer mac_ring_handle_t);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern void mac_hwring_teardown(mac_ring_handle_t);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern int mac_hwring_disable_intr(mac_ring_handle_t);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern int mac_hwring_enable_intr(mac_ring_handle_t);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern int mac_hwring_start(mac_ring_handle_t);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern void mac_hwring_stop(mac_ring_handle_t);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern mblk_t *mac_hwring_poll(mac_ring_handle_t, int);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern mblk_t *mac_hwring_tx(mac_ring_handle_t, mblk_t *);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern int mac_hwring_getstat(mac_ring_handle_t, uint_t, uint64_t *);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern mblk_t *mac_hwring_send_priv(mac_client_handle_t,
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer mac_ring_handle_t, mblk_t *);
09b7f21a0999a8ceb9f3e517fff7c39c52405ba2Robert Mustacchiextern void mac_hwring_set_default(mac_handle_t, mac_ring_handle_t);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer#define MAC_HWRING_POLL(ring, bytes) \
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer (((ring)->mr_info.mri_poll) \
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer ((ring)->mr_info.mri_driver, (bytes)))
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern int mac_hwgroup_addmac(mac_group_handle_t, const uint8_t *);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern int mac_hwgroup_remmac(mac_group_handle_t, const uint8_t *);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern void mac_set_upper_mac(mac_client_handle_t, mac_handle_t,
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer mac_resource_props_t *);
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng
da14cebe459d3275048785f25bd869cb09b5307fEric Chengextern int mac_mark_exclusive(mac_handle_t);
da14cebe459d3275048785f25bd869cb09b5307fEric Chengextern void mac_unmark_exclusive(mac_handle_t);
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern uint_t mac_hwgrp_num(mac_handle_t, int);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern void mac_get_hwrxgrp_info(mac_handle_t, int, uint_t *, uint_t *,
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer uint_t *, uint_t *, uint_t *, char *);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern void mac_get_hwtxgrp_info(mac_handle_t, int, uint_t *, uint_t *,
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer uint_t *, uint_t *, uint_t *, char *);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern uint_t mac_txavail_get(mac_handle_t);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern uint_t mac_rxavail_get(mac_handle_t);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern uint_t mac_txrsvd_get(mac_handle_t);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern uint_t mac_rxrsvd_get(mac_handle_t);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern uint_t mac_rxhwlnksavail_get(mac_handle_t);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern uint_t mac_rxhwlnksrsvd_get(mac_handle_t);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern uint_t mac_txhwlnksavail_get(mac_handle_t);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern uint_t mac_txhwlnksrsvd_get(mac_handle_t);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern int32_t mac_client_intr_cpu(mac_client_handle_t);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern void mac_client_set_intr_cpu(void *, mac_client_handle_t, int32_t);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern void *mac_get_devinfo(mac_handle_t);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern boolean_t mac_is_vnic(mac_handle_t);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern uint32_t mac_no_notification(mac_handle_t);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern int mac_set_prop(mac_handle_t, mac_prop_id_t, char *, void *, uint_t);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern int mac_get_prop(mac_handle_t, mac_prop_id_t, char *, void *, uint_t);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern int mac_prop_info(mac_handle_t, mac_prop_id_t, char *, void *,
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer uint_t, mac_propval_range_t *, uint_t *);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern boolean_t mac_prop_check_size(mac_prop_id_t, uint_t, boolean_t);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern uint64_t mac_pseudo_rx_ring_stat_get(mac_ring_handle_t, uint_t);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerextern uint64_t mac_pseudo_tx_ring_stat_get(mac_ring_handle_t, uint_t);
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng#endif /* _KERNEL */
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng#ifdef __cplusplus
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng}
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng#endif
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng#endif /* _SYS_MAC_CLIENT_PRIV_H */