mac_client_priv.h revision 72782355275c9b21b1f48e54c4be0581adb21839
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk/*
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * CDDL HEADER START
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk *
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * The contents of this file are subject to the terms of the
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * Common Development and Distribution License (the "License").
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * You may not use this file except in compliance with the License.
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk *
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * or http://www.opensolaris.org/os/licensing.
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * See the License for the specific language governing permissions
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * and limitations under the License.
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk *
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * When distributing Covered Code, include this CDDL HEADER in each
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * If applicable, add the following below this CDDL HEADER, with the
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * fields enclosed by brackets "[]" replaced with your own identifying
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * information: Portions Copyright [yyyy] [name of copyright owner]
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk *
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * CDDL HEADER END
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk/*
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * Use is subject to license terms.
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk/*
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * This file contains *private* MAC API definitions. This header file
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * should only be included by kernel components which are part of the
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * GLDv3 stack (dld, dls, aggr, softmac).
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#ifndef _SYS_MAC_CLIENT_PRIV_H
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#define _SYS_MAC_CLIENT_PRIV_H
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#include <sys/mac.h>
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#include <sys/mac_flow.h>
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#ifdef __cplusplus
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern "C" {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#endif
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#ifdef _KERNEL
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#ifdef DEBUG
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#define MAC_PERIM_HELD(mph) mac_perim_held(mph)
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#else
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#define MAC_PERIM_HELD(mph)
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#endif
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern boolean_t mac_rx_bypass_set(mac_client_handle_t, mac_direct_rx_t,
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk void *);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern const mac_info_t *mac_info(mac_handle_t);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern boolean_t mac_info_get(const char *, mac_info_t *);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern boolean_t mac_promisc_get(mac_handle_t);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern int mac_start(mac_handle_t);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern void mac_stop(mac_handle_t);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern void mac_ioctl(mac_handle_t, queue_t *, mblk_t *);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern link_state_t mac_link_get(mac_handle_t);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern void mac_resource_set(mac_client_handle_t, mac_resource_add_t, void *);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern dev_info_t *mac_devinfo_get(mac_handle_t);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern void *mac_driver(mac_handle_t);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern boolean_t mac_capab_get(mac_handle_t, mac_capab_t, void *);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern boolean_t mac_sap_verify(mac_handle_t, uint32_t, uint32_t *);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern mblk_t *mac_header(mac_handle_t, const uint8_t *, uint32_t, mblk_t *,
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk size_t);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern int mac_header_info(mac_handle_t, mblk_t *, mac_header_info_t *);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern mblk_t *mac_header_cook(mac_handle_t, mblk_t *);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern mblk_t *mac_header_uncook(mac_handle_t, mblk_t *);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern void mac_resource_set_common(mac_client_handle_t,
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk mac_resource_add_t, mac_resource_remove_t, mac_resource_quiesce_t,
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk mac_resource_restart_t, mac_resource_bind_t, void *);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern void mac_perim_enter_by_mh(mac_handle_t, mac_perim_handle_t *);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern int mac_perim_enter_by_macname(const char *, mac_perim_handle_t *);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern int mac_perim_enter_by_linkid(datalink_id_t, mac_perim_handle_t *);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern void mac_perim_exit(mac_perim_handle_t);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern boolean_t mac_perim_held(mac_handle_t);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern uint16_t mac_client_vid(mac_client_handle_t);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern int mac_vnic_unicast_set(mac_client_handle_t, const uint8_t *);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern boolean_t mac_client_is_vlan_vnic(mac_client_handle_t);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern void mac_client_poll_enable(mac_client_handle_t);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern void mac_client_poll_disable(mac_client_handle_t);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern int mac_resource_ctl_set(mac_client_handle_t, mac_resource_props_t *);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern void mac_resource_ctl_get(mac_client_handle_t, mac_resource_props_t *);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk/*
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * Flow-related APIs for MAC clients.
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern void mac_link_init_flows(mac_client_handle_t);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern void mac_link_release_flows(mac_client_handle_t);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern int mac_link_flow_add(datalink_id_t, char *, flow_desc_t *,
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk mac_resource_props_t *);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern int mac_link_flow_remove(char *);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern int mac_link_flow_modify(char *, mac_resource_props_t *);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern boolean_t mac_link_has_flows(mac_client_handle_t);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenktypedef struct {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk char fi_flow_name[MAXFLOWNAMELEN];
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk datalink_id_t fi_link_id;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk flow_desc_t fi_flow_desc;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk mac_resource_props_t fi_resource_props;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk} mac_flowinfo_t;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern int mac_link_flow_walk(datalink_id_t,
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk int (*)(mac_flowinfo_t *, void *), void *);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern int mac_link_flow_info(char *, mac_flowinfo_t *);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern void *mac_tx_hold(mac_client_handle_t);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern void mac_tx_rele(mac_client_handle_t, void *);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern void mac_rx_client_quiesce(mac_client_handle_t);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern void mac_rx_client_restart(mac_client_handle_t);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern void mac_srs_perm_quiesce(mac_client_handle_t, boolean_t);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern int mac_hwrings_get(mac_client_handle_t, mac_group_handle_t *,
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk mac_ring_handle_t *);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern void mac_hwring_setup(mac_ring_handle_t, mac_resource_handle_t);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern void mac_hwring_teardown(mac_ring_handle_t);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern int mac_hwring_disable_intr(mac_ring_handle_t);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern int mac_hwring_enable_intr(mac_ring_handle_t);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern int mac_hwring_start(mac_ring_handle_t);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern void mac_hwring_stop(mac_ring_handle_t);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern mblk_t *mac_hwring_poll(mac_ring_handle_t, int);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#define MAC_HWRING_POLL(ring, bytes) \
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk (((ring)->mr_info.mri_poll) \
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk ((ring)->mr_info.mri_driver, (bytes)))
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern int mac_hwgroup_addmac(mac_group_handle_t, const uint8_t *);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern int mac_hwgroup_remmac(mac_group_handle_t, const uint8_t *);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern void mac_set_upper_mac(mac_client_handle_t, mac_handle_t);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern int mac_mark_exclusive(mac_handle_t);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern void mac_unmark_exclusive(mac_handle_t);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern int32_t mac_client_intr_cpu(mac_client_handle_t);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern void mac_client_set_intr_cpu(void *, mac_client_handle_t, int32_t);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkextern void *mac_get_devinfo(mac_handle_t);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#endif /* _KERNEL */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#ifdef __cplusplus
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk}
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#endif
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk#endif /* _SYS_MAC_CLIENT_PRIV_H */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk