3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * CDDL HEADER START
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs *
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * The contents of this file are subject to the terms of the
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Common Development and Distribution License (the "License").
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * You may not use this file except in compliance with the License.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs *
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * or http://www.opensolaris.org/os/licensing.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * See the License for the specific language governing permissions
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * and limitations under the License.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs *
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * When distributing Covered Code, include this CDDL HEADER in each
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * If applicable, add the following below this CDDL HEADER, with the
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * fields enclosed by brackets "[]" replaced with your own identifying
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * information: Portions Copyright [yyyy] [name of copyright owner]
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs *
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * CDDL HEADER END
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
f043ebed17bd76d258204de498eeedb6f8f7eebfMichael Speer
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*
f043ebed17bd76d258204de498eeedb6f8f7eebfMichael Speer * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Use is subject to license terms.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#include <hxge_impl.h>
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#include <hxge_vmac.h>
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_status_t hxge_vmac_init(p_hxge_t hxgep);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_status_t hxge_tx_vmac_init(p_hxge_t hxgep);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_status_t hxge_rx_vmac_init(p_hxge_t hxgep);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_status_t hxge_tx_vmac_enable(p_hxge_t hxgep);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_status_t hxge_tx_vmac_disable(p_hxge_t hxgep);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_status_t hxge_rx_vmac_enable(p_hxge_t hxgep);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_status_t hxge_rx_vmac_disable(p_hxge_t hxgep);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_status_t hxge_tx_vmac_reset(p_hxge_t hxgep);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_status_t hxge_rx_vmac_reset(p_hxge_t hxgep);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsuint_t hxge_vmac_intr(caddr_t arg1, caddr_t arg2);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_status_t hxge_set_promisc(p_hxge_t hxgep, boolean_t on);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_status_t
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_link_init(p_hxge_t hxgep)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs{
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs p_hxge_stats_t statsp;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, MAC_CTL, "==> hxge_link_init>"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs statsp = hxgep->statsp;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs statsp->mac_stats.cap_10gfdx = 1;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs statsp->mac_stats.lp_cap_10gfdx = 1;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * The driver doesn't control the link.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * It is always 10Gb full duplex.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs statsp->mac_stats.link_duplex = 2;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs statsp->mac_stats.link_speed = 10000;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, MAC_CTL, "<== hxge_link_init"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (HXGE_OK);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs}
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_status_t
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_vmac_init(p_hxge_t hxgep)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs{
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxge_status_t status = HXGE_OK;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, MAC_CTL, "==> hxge_vmac_init:"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if ((status = hxge_tx_vmac_reset(hxgep)) != HXGE_OK)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs goto fail;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if ((status = hxge_rx_vmac_reset(hxgep)) != HXGE_OK)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs goto fail;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if ((status = hxge_tx_vmac_enable(hxgep)) != HXGE_OK)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs goto fail;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if ((status = hxge_rx_vmac_enable(hxgep)) != HXGE_OK)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs goto fail;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /* Clear the interrupt status registers */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs (void) hpi_vmac_clear_rx_int_stat(hxgep->hpi_handle);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs (void) hpi_vmac_clear_tx_int_stat(hxgep->hpi_handle);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Take the masks off the overflow counters. Interrupt the system when
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * any counts overflow. Don't interrupt the system for each frame.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * The current counts are retrieved when the "kstat" command is used.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs (void) hpi_pfc_set_rx_int_stat_mask(hxgep->hpi_handle, 0, 1);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs (void) hpi_pfc_set_tx_int_stat_mask(hxgep->hpi_handle, 0, 1);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, MAC_CTL, "<== hxge_vmac_init:"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (HXGE_OK);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsfail:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, MAC_CTL,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs "hxge_vmac_init: failed to initialize VMAC>"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (status);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs}
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/* Initialize the TxVMAC sub-block */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_status_t
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_tx_vmac_init(p_hxge_t hxgep)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs{
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint64_t config;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hpi_handle_t handle = hxgep->hpi_handle;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /* CFG_VMAC_TX_EN is done separately */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs config = CFG_VMAC_TX_CRC_INSERT | CFG_VMAC_TX_PAD;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (hpi_vmac_tx_config(handle, INIT, config,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxgep->vmac.maxframesize) != HPI_SUCCESS)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (HXGE_ERROR);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxgep->vmac.tx_config = config;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (HXGE_OK);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs}
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/* Initialize the RxVMAC sub-block */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_status_t
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_rx_vmac_init(p_hxge_t hxgep)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs{
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint64_t xconfig;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hpi_handle_t handle = hxgep->hpi_handle;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint16_t max_frame_length = hxgep->vmac.maxframesize;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * NOTE: CFG_VMAC_RX_ENABLE is done separately. Do not enable
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * strip CRC. Bug ID 11451 -- enable strip CRC will cause
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * rejection on minimum sized packets.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
1c29f7e382074ff2792b7f30c9be898ead487a30Qiyan Sun - Sun Microsystems - San Diego United States xconfig = CFG_VMAC_RX_PASS_FLOW_CTRL_FR;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (hxgep->filter.all_phys_cnt != 0)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs xconfig |= CFG_VMAC_RX_PROMISCUOUS_MODE;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (hxgep->filter.all_multicast_cnt != 0)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs xconfig |= CFG_VMAC_RX_PROMIXCUOUS_GROUP;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (hxgep->statsp->port_stats.lb_mode != hxge_lb_normal)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs xconfig |= CFG_VMAC_RX_LOOP_BACK;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
f043ebed17bd76d258204de498eeedb6f8f7eebfMichael Speer if (hpi_vmac_rx_config(handle, INIT, xconfig,
f043ebed17bd76d258204de498eeedb6f8f7eebfMichael Speer max_frame_length) != HPI_SUCCESS)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (HXGE_ERROR);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxgep->vmac.rx_config = xconfig;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (HXGE_OK);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs}
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/* Enable TxVMAC */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_status_t
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_tx_vmac_enable(p_hxge_t hxgep)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs{
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hpi_status_t rv;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxge_status_t status = HXGE_OK;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hpi_handle_t handle = hxgep->hpi_handle;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, MAC_CTL, "==> hxge_tx_vmac_enable"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs rv = hxge_tx_vmac_init(hxgep);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (rv != HXGE_OK)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (rv);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /* Based on speed */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxgep->msg_min = ETHERMIN;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs rv = hpi_vmac_tx_config(handle, ENABLE, CFG_VMAC_TX_EN, 0);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs status = (rv == HPI_SUCCESS) ? HXGE_OK : HXGE_ERROR;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, MAC_CTL, "<== hxge_tx_vmac_enable"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (status);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs}
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/* Disable TxVMAC */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_status_t
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_tx_vmac_disable(p_hxge_t hxgep)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs{
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hpi_status_t rv;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxge_status_t status = HXGE_OK;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hpi_handle_t handle = hxgep->hpi_handle;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, MAC_CTL, "==> hxge_tx_vmac_disable"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs rv = hpi_vmac_tx_config(handle, DISABLE, CFG_VMAC_TX_EN, 0);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs status = (rv == HPI_SUCCESS) ? HXGE_OK : HXGE_ERROR;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, MAC_CTL, "<== hxge_tx_vmac_disable"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (status);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs}
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/* Enable RxVMAC */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_status_t
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_rx_vmac_enable(p_hxge_t hxgep)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs{
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hpi_status_t rv;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxge_status_t status = HXGE_OK;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hpi_handle_t handle = hxgep->hpi_handle;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, MAC_CTL, "==> hxge_rx_vmac_enable"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
6afd6cae9f08dc0b5e9999820ce01095af9d2eabMichael Speer /*
6afd6cae9f08dc0b5e9999820ce01095af9d2eabMichael Speer * Because of hardware bug document with CR6770577, need
6afd6cae9f08dc0b5e9999820ce01095af9d2eabMichael Speer * reprogram max framesize when enabling/disabling RX
6afd6cae9f08dc0b5e9999820ce01095af9d2eabMichael Speer * vmac. Max framesize is programed here in
6afd6cae9f08dc0b5e9999820ce01095af9d2eabMichael Speer * hxge_rx_vmac_init().
6afd6cae9f08dc0b5e9999820ce01095af9d2eabMichael Speer */
f043ebed17bd76d258204de498eeedb6f8f7eebfMichael Speer rv = hpi_vmac_rx_set_framesize(HXGE_DEV_HPI_HANDLE(hxgep),
f043ebed17bd76d258204de498eeedb6f8f7eebfMichael Speer (uint16_t)hxgep->vmac.maxframesize);
f043ebed17bd76d258204de498eeedb6f8f7eebfMichael Speer if (rv != HPI_SUCCESS) {
f043ebed17bd76d258204de498eeedb6f8f7eebfMichael Speer HXGE_DEBUG_MSG((hxgep, MAC_CTL, "<== hxge_rx_vmac_enable"));
f043ebed17bd76d258204de498eeedb6f8f7eebfMichael Speer return (HXGE_ERROR);
f043ebed17bd76d258204de498eeedb6f8f7eebfMichael Speer }
f043ebed17bd76d258204de498eeedb6f8f7eebfMichael Speer
f043ebed17bd76d258204de498eeedb6f8f7eebfMichael Speer /*
f043ebed17bd76d258204de498eeedb6f8f7eebfMichael Speer * Wait for a period of time.
f043ebed17bd76d258204de498eeedb6f8f7eebfMichael Speer */
f043ebed17bd76d258204de498eeedb6f8f7eebfMichael Speer HXGE_DELAY(10);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
f043ebed17bd76d258204de498eeedb6f8f7eebfMichael Speer /*
f043ebed17bd76d258204de498eeedb6f8f7eebfMichael Speer * Enable the vmac.
f043ebed17bd76d258204de498eeedb6f8f7eebfMichael Speer */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs rv = hpi_vmac_rx_config(handle, ENABLE, CFG_VMAC_RX_EN, 0);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs status = (rv == HPI_SUCCESS) ? HXGE_OK : HXGE_ERROR;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, MAC_CTL, "<== hxge_rx_vmac_enable"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (status);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs}
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/* Disable RxVMAC */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_status_t
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_rx_vmac_disable(p_hxge_t hxgep)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs{
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hpi_status_t rv;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxge_status_t status = HXGE_OK;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hpi_handle_t handle = hxgep->hpi_handle;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, MAC_CTL, "==> hxge_rx_vmac_disable"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
6afd6cae9f08dc0b5e9999820ce01095af9d2eabMichael Speer /*
6afd6cae9f08dc0b5e9999820ce01095af9d2eabMichael Speer * Because of hardware bug document with CR6770577, need
6afd6cae9f08dc0b5e9999820ce01095af9d2eabMichael Speer * reprogram max framesize when enabling/disabling RX
6afd6cae9f08dc0b5e9999820ce01095af9d2eabMichael Speer * vmac. Max framesize is programed here in
6afd6cae9f08dc0b5e9999820ce01095af9d2eabMichael Speer * hxge_rx_vmac_init().
6afd6cae9f08dc0b5e9999820ce01095af9d2eabMichael Speer */
6afd6cae9f08dc0b5e9999820ce01095af9d2eabMichael Speer (void) hpi_vmac_rx_set_framesize(HXGE_DEV_HPI_HANDLE(hxgep),
6afd6cae9f08dc0b5e9999820ce01095af9d2eabMichael Speer (uint16_t)0);
6afd6cae9f08dc0b5e9999820ce01095af9d2eabMichael Speer
f043ebed17bd76d258204de498eeedb6f8f7eebfMichael Speer /*
f043ebed17bd76d258204de498eeedb6f8f7eebfMichael Speer * Wait for 10us before doing disable.
f043ebed17bd76d258204de498eeedb6f8f7eebfMichael Speer */
f043ebed17bd76d258204de498eeedb6f8f7eebfMichael Speer HXGE_DELAY(10);
f043ebed17bd76d258204de498eeedb6f8f7eebfMichael Speer
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs rv = hpi_vmac_rx_config(handle, DISABLE, CFG_VMAC_RX_EN, 0);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs status = (rv == HPI_SUCCESS) ? HXGE_OK : HXGE_ERROR;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, MAC_CTL, "<== hxge_rx_vmac_disable"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (status);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs}
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/* Reset TxVMAC */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_status_t
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_tx_vmac_reset(p_hxge_t hxgep)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs{
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hpi_handle_t handle = hxgep->hpi_handle;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs (void) hpi_tx_vmac_reset(handle);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (HXGE_OK);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs}
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/* Reset RxVMAC */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_status_t
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_rx_vmac_reset(p_hxge_t hxgep)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs{
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hpi_handle_t handle = hxgep->hpi_handle;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
f043ebed17bd76d258204de498eeedb6f8f7eebfMichael Speer (void) hpi_vmac_rx_set_framesize(HXGE_DEV_HPI_HANDLE(hxgep),
f043ebed17bd76d258204de498eeedb6f8f7eebfMichael Speer (uint16_t)0);
f043ebed17bd76d258204de498eeedb6f8f7eebfMichael Speer
f043ebed17bd76d258204de498eeedb6f8f7eebfMichael Speer /*
f043ebed17bd76d258204de498eeedb6f8f7eebfMichael Speer * Wait for 10us before doing reset.
f043ebed17bd76d258204de498eeedb6f8f7eebfMichael Speer */
f043ebed17bd76d258204de498eeedb6f8f7eebfMichael Speer HXGE_DELAY(10);
f043ebed17bd76d258204de498eeedb6f8f7eebfMichael Speer
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs (void) hpi_rx_vmac_reset(handle);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (HXGE_OK);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs}
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*ARGSUSED*/
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsuint_t
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_vmac_intr(caddr_t arg1, caddr_t arg2)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs{
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs p_hxge_t hxgep = (p_hxge_t)arg2;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hpi_handle_t handle;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, INT_CTL, "==> hxge_vmac_intr"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs handle = HXGE_DEV_HPI_HANDLE(hxgep);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxge_save_cntrs(hxgep);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /* Clear the interrupt status registers */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs (void) hpi_vmac_clear_rx_int_stat(handle);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs (void) hpi_vmac_clear_tx_int_stat(handle);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, INT_CTL, "<== hxge_vmac_intr"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (DDI_INTR_CLAIMED);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs}
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Set promiscous mode
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_status_t
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_set_promisc(p_hxge_t hxgep, boolean_t on)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs{
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxge_status_t status = HXGE_OK;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, MAC_CTL, "==> hxge_set_promisc: on %d", on));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxgep->filter.all_phys_cnt = ((on) ? 1 : 0);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs RW_ENTER_WRITER(&hxgep->filter_lock);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if ((status = hxge_rx_vmac_disable(hxgep)) != HXGE_OK)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs goto fail;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if ((status = hxge_rx_vmac_enable(hxgep)) != HXGE_OK)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs goto fail;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs RW_EXIT(&hxgep->filter_lock);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (on)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxgep->statsp->mac_stats.promisc = B_TRUE;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs else
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxgep->statsp->mac_stats.promisc = B_FALSE;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, MAC_CTL, "<== hxge_set_promisc"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (HXGE_OK);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsfail:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs RW_EXIT(&hxgep->filter_lock);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_ERROR_MSG((hxgep, HXGE_ERR_CTL, "hxge_set_promisc: "
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs "Unable to set promisc (%d)", on));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (status);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs}
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsvoid
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_save_cntrs(p_hxge_t hxgep)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs{
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs p_hxge_stats_t statsp;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hpi_handle_t handle;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs vmac_tx_frame_cnt_t tx_frame_cnt;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs vmac_tx_byte_cnt_t tx_byte_cnt;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs vmac_rx_frame_cnt_t rx_frame_cnt;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs vmac_rx_byte_cnt_t rx_byte_cnt;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs vmac_rx_drop_fr_cnt_t rx_drop_fr_cnt;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs vmac_rx_drop_byte_cnt_t rx_drop_byte_cnt;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs vmac_rx_crc_cnt_t rx_crc_cnt;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs vmac_rx_pause_cnt_t rx_pause_cnt;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs vmac_rx_bcast_fr_cnt_t rx_bcast_fr_cnt;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs vmac_rx_mcast_fr_cnt_t rx_mcast_fr_cnt;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, INT_CTL, "==> hxge_save_cntrs"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs statsp = (p_hxge_stats_t)hxgep->statsp;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs handle = hxgep->hpi_handle;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_REG_RD64(handle, VMAC_TX_FRAME_CNT, &tx_frame_cnt.value);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_REG_RD64(handle, VMAC_TX_BYTE_CNT, &tx_byte_cnt.value);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_REG_RD64(handle, VMAC_RX_FRAME_CNT, &rx_frame_cnt.value);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_REG_RD64(handle, VMAC_RX_BYTE_CNT, &rx_byte_cnt.value);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_REG_RD64(handle, VMAC_RX_DROP_FR_CNT, &rx_drop_fr_cnt.value);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_REG_RD64(handle, VMAC_RX_DROP_BYTE_CNT, &rx_drop_byte_cnt.value);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_REG_RD64(handle, VMAC_RX_CRC_CNT, &rx_crc_cnt.value);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_REG_RD64(handle, VMAC_RX_PAUSE_CNT, &rx_pause_cnt.value);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_REG_RD64(handle, VMAC_RX_BCAST_FR_CNT, &rx_bcast_fr_cnt.value);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_REG_RD64(handle, VMAC_RX_MCAST_FR_CNT, &rx_mcast_fr_cnt.value);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs statsp->vmac_stats.tx_frame_cnt += tx_frame_cnt.bits.tx_frame_cnt;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs statsp->vmac_stats.tx_byte_cnt += tx_byte_cnt.bits.tx_byte_cnt;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs statsp->vmac_stats.rx_frame_cnt += rx_frame_cnt.bits.rx_frame_cnt;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs statsp->vmac_stats.rx_byte_cnt += rx_byte_cnt.bits.rx_byte_cnt;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs statsp->vmac_stats.rx_drop_frame_cnt +=
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs rx_drop_fr_cnt.bits.rx_drop_frame_cnt;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs statsp->vmac_stats.rx_drop_byte_cnt +=
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs rx_drop_byte_cnt.bits.rx_drop_byte_cnt;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs statsp->vmac_stats.rx_crc_cnt += rx_crc_cnt.bits.rx_crc_cnt;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs statsp->vmac_stats.rx_pause_cnt += rx_pause_cnt.bits.rx_pause_cnt;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs statsp->vmac_stats.rx_bcast_fr_cnt +=
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs rx_bcast_fr_cnt.bits.rx_bcast_fr_cnt;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs statsp->vmac_stats.rx_mcast_fr_cnt +=
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs rx_mcast_fr_cnt.bits.rx_mcast_fr_cnt;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_save_cntrs_exit:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, INT_CTL, "<== hxge_save_cntrs"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs}
a512c5d1f2908d965887ad5494954ba2cf904bd2Qiyan Sun - Sun Microsystems - San Diego United States
a512c5d1f2908d965887ad5494954ba2cf904bd2Qiyan Sun - Sun Microsystems - San Diego United Statesint
a512c5d1f2908d965887ad5494954ba2cf904bd2Qiyan Sun - Sun Microsystems - San Diego United Stateshxge_vmac_set_framesize(p_hxge_t hxgep)
a512c5d1f2908d965887ad5494954ba2cf904bd2Qiyan Sun - Sun Microsystems - San Diego United States{
a512c5d1f2908d965887ad5494954ba2cf904bd2Qiyan Sun - Sun Microsystems - San Diego United States int status = 0;
a512c5d1f2908d965887ad5494954ba2cf904bd2Qiyan Sun - Sun Microsystems - San Diego United States
a512c5d1f2908d965887ad5494954ba2cf904bd2Qiyan Sun - Sun Microsystems - San Diego United States HXGE_DEBUG_MSG((hxgep, NDD_CTL, "==> hxge_vmac_set_framesize"));
a512c5d1f2908d965887ad5494954ba2cf904bd2Qiyan Sun - Sun Microsystems - San Diego United States
a512c5d1f2908d965887ad5494954ba2cf904bd2Qiyan Sun - Sun Microsystems - San Diego United States RW_ENTER_WRITER(&hxgep->filter_lock);
a512c5d1f2908d965887ad5494954ba2cf904bd2Qiyan Sun - Sun Microsystems - San Diego United States (void) hxge_rx_vmac_disable(hxgep);
a512c5d1f2908d965887ad5494954ba2cf904bd2Qiyan Sun - Sun Microsystems - San Diego United States (void) hxge_tx_vmac_disable(hxgep);
a512c5d1f2908d965887ad5494954ba2cf904bd2Qiyan Sun - Sun Microsystems - San Diego United States
a512c5d1f2908d965887ad5494954ba2cf904bd2Qiyan Sun - Sun Microsystems - San Diego United States /*
a512c5d1f2908d965887ad5494954ba2cf904bd2Qiyan Sun - Sun Microsystems - San Diego United States * Apply the new jumbo parameter here which is contained in hxgep
a512c5d1f2908d965887ad5494954ba2cf904bd2Qiyan Sun - Sun Microsystems - San Diego United States * data structure (hxgep->vmac.maxframesize);
a512c5d1f2908d965887ad5494954ba2cf904bd2Qiyan Sun - Sun Microsystems - San Diego United States * The order of the following two calls is important.
a512c5d1f2908d965887ad5494954ba2cf904bd2Qiyan Sun - Sun Microsystems - San Diego United States */
a512c5d1f2908d965887ad5494954ba2cf904bd2Qiyan Sun - Sun Microsystems - San Diego United States (void) hxge_tx_vmac_enable(hxgep);
a512c5d1f2908d965887ad5494954ba2cf904bd2Qiyan Sun - Sun Microsystems - San Diego United States (void) hxge_rx_vmac_enable(hxgep);
a512c5d1f2908d965887ad5494954ba2cf904bd2Qiyan Sun - Sun Microsystems - San Diego United States RW_EXIT(&hxgep->filter_lock);
a512c5d1f2908d965887ad5494954ba2cf904bd2Qiyan Sun - Sun Microsystems - San Diego United States
a512c5d1f2908d965887ad5494954ba2cf904bd2Qiyan Sun - Sun Microsystems - San Diego United States HXGE_DEBUG_MSG((hxgep, NDD_CTL, "<== hxge_vmac_set_framesize"));
a512c5d1f2908d965887ad5494954ba2cf904bd2Qiyan Sun - Sun Microsystems - San Diego United States return (status);
a512c5d1f2908d965887ad5494954ba2cf904bd2Qiyan Sun - Sun Microsystems - San Diego United States}