d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * CDDL HEADER START
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * The contents of this file are subject to the terms of the
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Common Development and Distribution License (the "License").
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * You may not use this file except in compliance with the License.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * or http://www.opensolaris.org/os/licensing.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * See the License for the specific language governing permissions
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * and limitations under the License.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * When distributing Covered Code, include this CDDL HEADER in each
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * If applicable, add the following below this CDDL HEADER, with the
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * fields enclosed by brackets "[]" replaced with your own identifying
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * information: Portions Copyright [yyyy] [name of copyright owner]
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * CDDL HEADER END
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Copyright 2014 QLogic Corporation
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * The contents of this file are subject to the terms of the
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * QLogic End User License (the "License").
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * You may not use this file except in compliance with the License.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * You can obtain a copy of the License at
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * http://www.qlogic.com/Resources/Documents/DriverDownloadHelp/
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * See the License for the specific language governing permissions
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * and limitations under the License.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif /* not __S11 or __S12 */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Reconfiguring the network devices parameters require net_config
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * privilege starting Solaris 10. Only root user is allowed to
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * update device parameter in Solaris 9 and earlier version. Following
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * declaration allows single binary image to run on all OS versions.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiextern int secpolicy_net_config(const cred_t *, boolean_t);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "_adv_2500fdx_cap",
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "_en_2500fdx_cap",
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "_adv_txpause_cap",
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "_en_txpause_cap",
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "_adv_rxpause_cap",
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "_en_rxpause_cap",
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "_autoneg_flow",
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "_num_rings",
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "_rx_free_reclaim",
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "_rx_copy_threshold",
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "_tx_free_reclaim",
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "_tx_copy_threshold",
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "_tx_ring_policy",
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "_interrupt_coalesce",
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "_rx_interrupt_coalesce_usec",
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "_tx_interrupt_coalesce_usec",
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "_disable_msix",
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "_l2_fw_flow_ctrl",
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "_autogreeen_enable",
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "_lso_enable",
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "_log_enable",
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "_fcoe_enable",
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif /* MC_SETPROP */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *pVal = (pUM->props.link_speed * 1000000ULL);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_stats_get_l2_chip_stats(pLM, &b10_l2_stats,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_stats_get_l2_chip_stats(pLM, &b10_l2_stats,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_stats_get_l2_chip_stats(pLM, &b10_l2_stats,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_stats_get_l2_chip_stats(pLM, &b10_l2_stats,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_get_stats(pLM, LM_STATS_RCV_NO_BUFFER_DROP, (u64_t *)pVal);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_stats_get_l2_chip_stats(pLM, &b10_l2_stats,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* XXX not available */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_stats_get_l2_chip_stats(pLM, &b10_l2_stats,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_stats_get_l2_chip_stats(pLM, &b10_l2_stats,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_stats_get_l2_chip_stats(pLM, &b10_l2_stats,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_stats_get_l2_chip_stats(pLM, &b10_l2_stats,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_stats_get_l2_chip_stats(pLM, &b10_l2_stats,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_stats_get_l2_chip_stats(pLM, &b10_l2_stats,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *pVal = b10_l2_stats.Dot3StatsAlignmentErrors;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_stats_get_l2_chip_stats(pLM, &b10_l2_stats,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_stats_get_l2_chip_stats(pLM, &b10_l2_stats,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *pVal = b10_l2_stats.Dot3StatsSingleCollisionFrames;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_stats_get_l2_chip_stats(pLM, &b10_l2_stats,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *pVal = b10_l2_stats.Dot3StatsMultipleCollisionFrames;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_stats_get_l2_chip_stats(pLM, &b10_l2_stats,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *pVal = b10_l2_stats.Dot3StatsDeferredTransmissions;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_stats_get_l2_chip_stats(pLM, &b10_l2_stats,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *pVal = b10_l2_stats.Dot3StatsLateCollisions;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_stats_get_l2_chip_stats(pLM, &b10_l2_stats,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *pVal = b10_l2_stats.Dot3StatsExcessiveCollisions;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_stats_get_l2_chip_stats(pLM, &b10_l2_stats,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *pVal = b10_l2_stats.Dot3StatsInternalMacTransmitErrors;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_stats_get_l2_chip_stats(pLM, &b10_l2_stats,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *pVal = b10_l2_stats.Dot3StatsCarrierSenseErrors;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_stats_get_l2_chip_stats(pLM, &b10_l2_stats,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *pVal = b10_l2_stats.EtherStatsOverrsizePkts;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_stats_get_l2_chip_stats(pLM, &b10_l2_stats,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *pVal = b10_l2_stats.EtherStatsUndersizePkts;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi case 0: /* no speed then status is down */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* catches 2500/10000 */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi //*pVal = linkconf->param_1000hdx;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi //*pVal = linkconf->param_100fdx;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi //*pVal = linkconf->param_100hdx;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi //*pVal = linkconf->param_10fdx;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi //*pVal = linkconf->param_10hdx;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi //*pVal = pUM->curcfg.lnkcfg.param_1000hdx;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#if 0 /* LP caps not supported */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi //*pVal = pUM->remote.param_1000hdx;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* XXX implement LP_ASYM_PAUSE stat */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* XXX implement LP_PAUSE stat */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* XXX implement LP_REMFAULT stat */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif /* LP caps not supported */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* XXX implement ASMPAUSE stat */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* XXX implement PAUSE stat */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *pVal = (pUM->props.link_duplex == B_TRUE) ?
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * This routine is called by GLD to enable device for packet reception and
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * enable interrupts.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* already started */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* Always report the initial link state as unknown. */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi mac_link_update(pUM->pMac, LINK_STATE_UNKNOWN);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * This routine stops packet reception by clearing RX MASK register. Also
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * interrupts are disabled for this device.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* Report the link state back to unknown. */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi mac_link_update(pUM->pMac, LINK_STATE_UNKNOWN);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* (flag) TRUE = on, FALSE = off */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->devParams.rx_filter_mask[LM_CLI_IDX_NDIS] |=
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->devParams.rx_filter_mask[LM_CLI_IDX_NDIS] &=
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->devParams.rx_filter_mask[LM_CLI_IDX_NDIS]) < 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * This function is used to enable or disable multicast packet reception for
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * particular multicast addresses.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * (flag) TRUE = add, FALSE = remove
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi rc = BnxeMulticast(pUM, LM_CLI_IDX_NDIS, flag, pMcastAddr, B_TRUE);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#if (defined(__S11) || defined(__S12)) && !defined(ILLUMOS)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistatic int BnxeRxRingGroupAddMac(void * groupHandle,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistatic int BnxeRxRingGroupAddMac(void * groupHandle,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi RxQueueGroup * pRxQGroup = (RxQueueGroup *)groupHandle;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi um_device_t * pUM = (um_device_t *)pRxQGroup->pUM;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi //u32_t idx = pRxQGroup->idx;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#if (defined(__S11) || defined(__S12)) && !defined(ILLUMOS)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* Validate MAC address */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeLogWarn(pUM, "Cannot program a mcast/bcast address as a MAC Address.");
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (pUM->ucastTableLen == LM_MAX_UC_TABLE_SIZE)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi COPY_ETH_ADDRESS(pMacAddr, pUM->lm_dev.params.mac_addr);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi rc = BnxeMacAddress(pUM, LM_CLI_IDX_NDIS, B_TRUE,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistatic int BnxeRxRingGroupRemMac(void * groupHandle,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi RxQueueGroup * pRxQGroup = (RxQueueGroup *)groupHandle;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi um_device_t * pUM = (um_device_t *)pRxQGroup->pUM;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi //u32_t idx = pRxQGroup->idx;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (!IS_ETH_ADDRESS_EQUAL(pMacAddr, pUM->lm_dev.params.mac_addr))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeLogWarn(pUM, "Deleting MAC address that doesn't match default");
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi rc = BnxeMacAddress(pUM, LM_CLI_IDX_NDIS, B_FALSE,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi memset(pUM->lm_dev.params.mac_addr, 0, sizeof(pUM->lm_dev.params.mac_addr));
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistatic mblk_t * BnxeTxRingSend(void * ringHandle,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi um_device_t * pUM = (um_device_t *)pTxQ->pUM;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi rc = BnxeTxSendMblk(pUM, idx, pMblk, 0, 0);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif /* BNXE_RINGS */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi memcpy(pUM->gldMac, pMacAddr, ETHERNET_ADDRESS_SIZE);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* Validate MAC address */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeLogWarn(pUM, "Cannot program a mcast/bcast address as a MAC Address.");
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi COPY_ETH_ADDRESS(pMacAddr, pUM->lm_dev.params.mac_addr);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi rc = BnxeMacAddress(pUM, LM_CLI_IDX_NDIS, B_TRUE,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi //rc = BnxeTxSendMblk(pUM, NDIS_CID(&pUM->lm_dev), pMblk, 0, 0);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi rc = BnxeTxSendMblk(pUM, ring, pMblk, 0, 0);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Need to dynamically reconfigure the hw with new interrupt
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * coalescing params...
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi mac_resource_add(pUM->pMac, (mac_resource_t *)&mrf);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif /* MC_RESOURCES */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistatic boolean_t BnxeReadReg(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeLogWarn(pUM, "Invalid register offset for GIOCBNXEREG ioctl");
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi LM_BAR_RD32_OFFSET(&pUM->lm_dev, 0, pData->offset, &pData->value);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistatic boolean_t BnxeWriteReg(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeLogWarn(pUM, "Invalid register offset for SIOCBNXEREG ioctl");
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi LM_BAR_WR32_OFFSET(&pUM->lm_dev, 0, pData->offset, pData->value);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistatic boolean_t BnxeReadNvm(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeLogWarn(pUM, "Invalid register offset for GIOCBNXENVRM ioctl");
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistatic boolean_t BnxeWriteNvm(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeLogWarn(pUM, "Invalid register offset for SIOCBNXENVRM ioctl");
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistatic boolean_t BnxeReadPciCfg(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pData->value = pci_config_get32(pUM->pPciCfg, (off_t)pData->offset);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef enum {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t len; /* length of each string item */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* variable length... */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi char str[1]; /* holds names of desc.num stats, each desc.len in length */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistatic boolean_t BnxeStatsShow(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi const size_t stats_size = sizeof(pStats->cnt);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * All stats names MUST conform to STATS_STR_LEN length!!!
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Note: these strings must be updated whenever any of
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * b10_l2_chip_statistics_t, b10_l4_chip_statistics_t,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * b10_l2_driver_statistics_t or b10_l4_driver_statistics_t
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * are changed, or additional statistics are required.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi // b10_l2_chip_statistics_t
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "l2_chip_stats_ver_num\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "IfHCInOctets\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "IfHCInBadOctets\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "IfHCOutOctets\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "IfHCOutBadOctets\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "IfHCOutPkts\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "IfHCInPkts\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "IfHCInUcastPkts\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "IfHCInMulticastPkts\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "IfHCInBroadcastPkts\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "IfHCOutUcastPkts\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "IfHCOutMulticastPkts\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "IfHCOutBroadcastPkts\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "IfHCInUcastOctets\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "IfHCInMulticastOctets\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "IfHCInBroadcastOctets\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "IfHCOutUcastOctets\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "IfHCOutMulticastOctets\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "IfHCOutBroadcastOctets\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "IfHCOutDiscards\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "IfHCInFalseCarrierErrors\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "Dot3StatsInternalMacTransmitErrors\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "Dot3StatsCarrierSenseErrors\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "Dot3StatsFCSErrors\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "Dot3StatsAlignmentErrors\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "Dot3StatsSingleCollisionFrames\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "Dot3StatsMultipleCollisionFrames\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "Dot3StatsDeferredTransmissions\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "Dot3StatsExcessiveCollisions\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "Dot3StatsLateCollisions\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "EtherStatsCollisions\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "EtherStatsFragments\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "EtherStatsJabbers\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "EtherStatsUndersizePkts\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "EtherStatsOverrsizePkts\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "EtherStatsPktsTx64Octets\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "EtherStatsPktsTx65Octetsto127Octets\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "EtherStatsPktsTx128Octetsto255Octets\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "EtherStatsPktsTx256Octetsto511Octets\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "EtherStatsPktsTx512Octetsto1023Octets\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "EtherStatsPktsTx1024Octetsto1522Octets\0"
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "EtherStatsPktsTxOver1522Octets\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "XonPauseFramesReceived\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "XoffPauseFramesReceived\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "OutXonSent\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "OutXoffSent\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "FlowControlDone\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "MacControlFramesReceived\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "XoffStateEntered\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "IfInFramesL2FilterDiscards\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "IfInTTL0Discards\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "IfInxxOverflowDiscards\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "IfInMBUFDiscards\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "IfInErrors\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "IfInErrorsOctets\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "IfInNoBrbBuffer\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "Nig_brb_packet\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "Nig_brb_truncate\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "Nig_flow_ctrl_discard\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "Nig_flow_ctrl_octets\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "Nig_flow_ctrl_packet\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "Nig_mng_discard\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "Nig_mng_octet_inp\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "Nig_mng_octet_out\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "Nig_mng_packet_inp\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "Nig_mng_packet_out\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "Nig_pbf_octets\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "Nig_pbf_packet\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "Nig_safc_inp\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "Tx_Lpi_Count\0 " // This counter counts the number of timers the debounced version of EEE link idle is asserted
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi // b10_l4_chip_statistics_t
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "l4_chip_stats_ver_num\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "NoTxCqes\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "InTCP4Segments\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "OutTCP4Segments\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "RetransmittedTCP4Segments\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "InTCP4Errors\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "InIP4Receives\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "InIP4HeaderErrors\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "InIP4Discards\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "InIP4Delivers\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "InIP4Octets\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "OutIP4Octets\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "InIP4TruncatedPackets\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "InTCP6Segments\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "OutTCP6Segments\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "RetransmittedTCP6Segments\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "InTCP6Errors\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "InIP6Receives\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "InIP6HeaderErrors\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "InIP6Discards\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "InIP6Delivers\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "InIP6Octets\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "OutIP6Octets\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "InIP6TruncatedPackets\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi // b10_l2_driver_statistics_t
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "l2_driver_stats_ver_num\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "RxIPv4FragCount\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "RxIpCsErrorCount\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "RxTcpCsErrorCount\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "RxLlcSnapCount\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "RxPhyErrorCount\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "RxIpv6ExtCount\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "TxNoL2Bd\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "TxNoSqWqe\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "TxL2AssemblyBufUse\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi // b10_l4_driver_statistics_t
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "l4_driver_stats_ver_num\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "CurrentlyIpv4Established\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "OutIpv4Resets\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "OutIpv4Fin\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "InIpv4Reset\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "InIpv4Fin\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "CurrentlyIpv6Established\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "OutIpv6Resets\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "OutIpv6Fin\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "InIpv6Reset\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "InIpv6Fin\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "RxIndicateReturnPendingCnt\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "RxIndicateReturnDoneCnt\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "RxActiveGenBufCnt\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "TxNoL4Bd\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "TxL4AssemblyBufUse\0 "
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ASSERT_STATIC((sizeof(p_stat_str) / STATS_STR_LEN) ==
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pStats->desc.num = (stats_size / sizeof(u64_t));
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi memcpy(pStats->str, p_stat_str, sizeof(p_stat_str));
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if ((pIoctl->ioc_count != sizeof(b10_lldp_params_get_t)) ||
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (pMblk->b_cont == NULL) || (pMblk->b_cont->b_rptr == NULL) ||
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (miocpullup(pMblk, sizeof(b10_lldp_params_get_t)) < 0))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (((b10_lldp_params_get_t *)pMblk->b_cont->b_rptr)->ver_num !=
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (b10_lldp_params_get_t *)pMblk->b_cont->b_rptr) !=
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (!IS_DCB_ENABLED(&pUM->lm_dev)) ? ENOTSUP : EINVAL);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if ((pIoctl->ioc_count != sizeof(b10_dcbx_params_get_t)) ||
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (pMblk->b_cont == NULL) || (pMblk->b_cont->b_rptr == NULL) ||
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (miocpullup(pMblk, sizeof(b10_dcbx_params_get_t)) < 0))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (((b10_dcbx_params_get_t *)pMblk->b_cont->b_rptr)->ver_num !=
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (b10_dcbx_params_get_t *)pMblk->b_cont->b_rptr) !=
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (!IS_DCB_ENABLED(&pUM->lm_dev)) ? ENOTSUP : EINVAL);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if ((pIoctl->ioc_count != sizeof(struct bnxe_reg_data)) ||
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (pMblk->b_cont == NULL) || (pMblk->b_cont->b_rptr == NULL) ||
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (miocpullup(pMblk, sizeof(struct bnxe_reg_data)) < 0))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (!BnxeReadReg(pUM, (struct bnxe_reg_data *)pMblk->b_cont->b_rptr))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if ((pIoctl->ioc_count != sizeof(struct bnxe_reg_data)) ||
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (pMblk->b_cont == NULL) || (pMblk->b_cont->b_rptr == NULL) ||
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (miocpullup(pMblk, sizeof(struct bnxe_reg_data)) < 0))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (!BnxeWriteReg(pUM, (struct bnxe_reg_data *)pMblk->b_cont->b_rptr))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if ((pIoctl->ioc_count < sizeof(struct bnxe_nvram_data)) ||
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (pMblk->b_cont == NULL) || (pMblk->b_cont->b_rptr == NULL) ||
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (miocpullup(pMblk, pIoctl->ioc_count) < 0))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (!BnxeReadNvm(pUM, (struct bnxe_nvram_data *)pMblk->b_cont->b_rptr))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if ((pIoctl->ioc_count < sizeof(struct bnxe_nvram_data)) ||
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (pMblk->b_cont == NULL) || (pMblk->b_cont->b_rptr == NULL) ||
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (miocpullup(pMblk, pIoctl->ioc_count) < 0))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (!BnxeWriteNvm(pUM, (struct bnxe_nvram_data *)pMblk->b_cont->b_rptr))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if ((pIoctl->ioc_count != sizeof(struct bnxe_reg_data)) ||
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (pMblk->b_cont == NULL) || (pMblk->b_cont->b_rptr == NULL) ||
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (miocpullup(pMblk, sizeof(struct bnxe_reg_data)) < 0))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (!BnxeReadPciCfg(pUM, (struct bnxe_reg_data *)pMblk->b_cont->b_rptr))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* min size = sizeof(op) in b10_stats_show_data_t */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (pMblk->b_cont == NULL) || (pMblk->b_cont->b_rptr == NULL) ||
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (miocpullup(pMblk, pIoctl->ioc_count) < 0))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (b10_stats_show_data_t *)pMblk->b_cont->b_rptr,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#if (defined(__S11) || defined(__S12)) && !defined(ILLUMOS)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistatic mblk_t * BnxeRxRingPoll(void * ringHandle,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistatic mblk_t * BnxeRxRingPoll(void * ringHandle,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi um_device_t * pUM = (um_device_t *)pRxQ->pUM;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#if (defined(__S11) || defined(__S12)) && !defined(ILLUMOS)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeLogWarn(pUM, "Polling on ring %d when NOT in poll mode!", idx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxePollRxRing(pUM, idx, &pktsRxed, &pktsTxed);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (pktsRxed) pMblk = BnxeRxRingProcess(pUM, idx, TRUE, numBytes);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * This is here for the off chance that all rings are in polling
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * mode and the default interrupt hasn't fired recently to handle
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistatic int BnxeRxRingStart(mac_ring_driver_t ringHandle
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi um_device_t * pUM = (um_device_t *)pRxQ->pUM;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeLogDbg(pUM, "Starting Rx Ring %d", idx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistatic int BnxeRingStat(mac_ring_driver_t ringHandle,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi um_device_t * pUM = (um_device_t *)pRxQ->pUM;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi case MAC_STAT_RBYTES: /* MAC_STAT_IBYTES */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif /* __S11 or __S12 */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistatic int BnxeRxRingIntrEnable(mac_ring_driver_t ringHandle)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistatic int BnxeRxRingIntrEnable(mac_intr_handle_t ringHandle)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi um_device_t * pUM = (um_device_t *)pRxQ->pUM;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeLogDbg(pUM, "Enabling Interrupt for Rx Ring %d", pRxQ->idx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* polling not allowed on LM_NON_RSS_SB when overlapped with FCoE */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if ((pRxQ->idx == LM_NON_RSS_SB(&pUM->lm_dev)) &&
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (pUM->rssIntr.intrCount == LM_MAX_RSS_CHAINS(&pUM->lm_dev)))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi return 0; /* ok, already enabled */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeIntrIguSbEnable(pUM, pRxQ->idx, B_FALSE);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistatic int BnxeRxRingIntrDisable(mac_ring_driver_t ringHandle)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistatic int BnxeRxRingIntrDisable(mac_intr_handle_t ringHandle)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi um_device_t * pUM = (um_device_t *)pRxQ->pUM;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeLogDbg(pUM, "Disabling Interrupt for Rx Ring %d", pRxQ->idx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* polling not allowed on LM_NON_RSS_SB when overlapped with FCoE */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if ((pRxQ->idx == LM_NON_RSS_SB(&pUM->lm_dev)) &&
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (pUM->rssIntr.intrCount == LM_MAX_RSS_CHAINS(&pUM->lm_dev)))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeIntrIguSbDisable(pUM, pRxQ->idx, B_FALSE);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* callback function for MAC layer to register rings */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeLogInfo(pUM, "Initializing Rx Ring %d (Ring Group %d)",
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ASSERT(ringIndex < pUM->devParams.numRings);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pRingInfo->mri_driver = (mac_ring_driver_t)pRxQ;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pRingInfo->mri_intr.mi_handle = (mac_intr_handle_t)pRxQ;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pRingInfo->mri_intr.mi_enable = (mac_intr_enable_t)BnxeRxRingIntrEnable;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pRingInfo->mri_intr.mi_disable = (mac_intr_disable_t)BnxeRxRingIntrDisable;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeLogInfo(pUM, "Initializing Tx Ring %d (Ring Group %d)",
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ASSERT(ringIndex < pUM->devParams.numRings);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pRingInfo->mri_driver = (mac_ring_driver_t)pTxQ;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pRingInfo->mri_tx = (mac_ring_send_t)BnxeTxRingSend;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* callback function for MAC layer to register groups */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeLogInfo(pUM, "Initializing Rx Group %d", ringGroupIndex);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pRxQGroup = &pUM->rxqGroup[ringGroupIndex];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pGroupInfo->mgi_driver = (mac_group_driver_t)pRxQGroup;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pGroupInfo->mgi_addmac = BnxeRxRingGroupAddMac;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pGroupInfo->mgi_remmac = BnxeRxRingGroupRemMac;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pGroupInfo->mgi_count = (pUM->devParams.numRings /
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#if (defined(__S11) || defined(__S12)) && !defined(ILLUMOS)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif /* BNXE_RINGS */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistatic boolean_t BnxeMacGetCapability(void * pArg,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (LM_OFFLOAD_TX_IP_CKSUM | LM_OFFLOAD_RX_IP_CKSUM))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *((u32_t *)pCapabilityData) |= HCKSUM_IPHDRCKSUM;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (LM_OFFLOAD_TX_TCP_CKSUM | LM_OFFLOAD_TX_UDP_CKSUM |
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi LM_OFFLOAD_RX_TCP_CKSUM | LM_OFFLOAD_RX_UDP_CKSUM))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *((u32_t *)pCapabilityData) |= HCKSUM_INET_PARTIAL;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pCapLSO = (mac_capab_lso_t *)pCapabilityData;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pCapLSO->lso_flags = LSO_TX_BASIC_TCP_IPV4;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pCapLSO->lso_basic_tcp_ipv4.lso_max = BNXE_LSO_MAXLEN;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pCapRings = (mac_capab_rings_t *)pCapabilityData;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#if (defined(__S11) || defined(__S12)) && !defined(ILLUMOS)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pCapRings->mr_version = MAC_RINGS_VERSION_1;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pCapRings->mr_flags = MAC_RINGS_FLAGS_NONE;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pCapRings->mr_group_type = MAC_GROUP_TYPE_STATIC;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pCapRings->mr_rnum = pUM->devParams.numRings;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#if (defined(__S11) || defined(__S12)) && !defined(ILLUMOS)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pCapRings->mr_gnum = USER_OPTION_RX_RING_GROUPS_DEFAULT;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#if (defined(__S11) || defined(__S12)) && !defined(ILLUMOS)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif /* BNXE_RINGS */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * There's nothing for us to fill in, simply returning B_TRUE stating
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * that we support polling is sufficient.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif /* not __S11 or __S12 */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistatic int BnxeSetPrivateProperty(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (strcmp(pr_name, "_en_2500fdx_cap") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (ddi_strtol(pr_val, (char **)NULL, 0, &result))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->hwinit.lnkcfg.param_2500fdx = (uint32_t)result;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->curcfg.lnkcfg.param_2500fdx = (uint32_t)result;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_en_txpause_cap") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (ddi_strtol(pr_val, (char **)NULL, 0, &result))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->hwinit.lnkcfg.param_txpause = (uint32_t)result;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->curcfg.lnkcfg.param_txpause = (uint32_t)result;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_en_rxpause_cap") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (ddi_strtol(pr_val, (char **)NULL, 0, &result))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->hwinit.lnkcfg.param_rxpause = (uint32_t)result;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->curcfg.lnkcfg.param_rxpause = (uint32_t)result;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_autoneg_flow") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (ddi_strtol(pr_val, (char **)NULL, 0, &result))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->hwinit.flow_autoneg = (uint32_t)result;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->curcfg.flow_autoneg = (uint32_t)result;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_checksum") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (ddi_strtol(pr_val, (char **)NULL, 0, &result))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->devParams.enabled_oflds = LM_OFFLOAD_NONE;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->devParams.enabled_oflds = (LM_OFFLOAD_TX_IP_CKSUM |
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->devParams.enabled_oflds = (LM_OFFLOAD_TX_IP_CKSUM |
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->devParams.checksum = (uint32_t)result;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_tx_ring_policy") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (ddi_strtol(pr_val, (char **)NULL, 0, &result))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->devParams.routeTxRingPolicy = (uint32_t)result;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_num_rings") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (ddi_strtol(pr_val, (char **)NULL, 0, &result))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if ((result < USER_OPTION_NUM_RINGS_MIN) ||
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->devParams.numRings = (uint32_t)result;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_rx_descs") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (ddi_strtol(pr_val, (char **)NULL, 0, &result))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if ((result < USER_OPTION_BDS_MIN) || (result > USER_OPTION_BDS_MAX))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->devParams.numRxDesc[LM_CLI_IDX_NDIS] = (uint32_t)result;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_rx_free_reclaim") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (ddi_strtol(pr_val, (char **)NULL, 0, &result))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if ((result < USER_OPTION_BDS_MIN) || (result > USER_OPTION_BDS_MAX))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->devParams.maxRxFree = (uint32_t)result;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_tx_descs") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (ddi_strtol(pr_val, (char **)NULL, 0, &result))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if ((result < USER_OPTION_BDS_MIN) || (result > USER_OPTION_BDS_MAX))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->devParams.numTxDesc[LM_CLI_IDX_NDIS] = (uint32_t)result;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_tx_free_reclaim") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (ddi_strtol(pr_val, (char **)NULL, 0, &result))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if ((result < USER_OPTION_BDS_MIN) || (result > USER_OPTION_BDS_MAX))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->devParams.maxTxFree = (uint32_t)result;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_rx_copy_threshold") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (ddi_strtol(pr_val, (char **)NULL, 0, &result))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->devParams.rxCopyThreshold = (uint32_t)result;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_tx_copy_threshold") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (ddi_strtol(pr_val, (char **)NULL, 0, &result))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->devParams.txCopyThreshold = (uint32_t)result;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_interrupt_coalesce") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (ddi_strtol(pr_val, (char **)NULL, 0, &result))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->devParams.intrCoalesce = (uint32_t)result;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_rx_interrupt_coalesce_usec") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (ddi_strtol(pr_val, (char **)NULL, 0, &result))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if ((result < USER_OPTION_INTR_COALESCE_MIN) ||
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->devParams.intrRxPerSec = (uint32_t)(1000000 / result);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_tx_interrupt_coalesce_usec") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (ddi_strtol(pr_val, (char **)NULL, 0, &result))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if ((result < USER_OPTION_INTR_COALESCE_MIN) ||
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->devParams.intrTxPerSec = (uint32_t)(1000000 / result);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_disable_msix") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (ddi_strtol(pr_val, (char **)NULL, 0, &result))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->devParams.disableMsix = (uint32_t)result;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_l2_fw_flow_ctrl") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (ddi_strtol(pr_val, (char **)NULL, 0, &result))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->devParams.l2_fw_flow_ctrl = (uint32_t)result;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_autogreeen_enable") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (ddi_strtol(pr_val, (char **)NULL, 0, &result))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->devParams.autogreeenEnable = (uint32_t)result;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_lso_enable") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (ddi_strtol(pr_val, (char **)NULL, 0, &result))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->devParams.lsoEnable = (uint32_t)result;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_log_enable") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (ddi_strtol(pr_val, (char **)NULL, 0, &result))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->devParams.logEnable = (uint32_t)result;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_fcoe_enable") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (ddi_strtol(pr_val, (char **)NULL, 0, &result))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->devParams.fcoeEnable = (uint32_t)result;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* read-only props */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->hwinit.lnkcfg.param_10000fdx = *(uint8_t *)pr_val;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->curcfg.lnkcfg.param_10000fdx = *(uint8_t *)pr_val;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->hwinit.lnkcfg.param_1000fdx = *(uint8_t *)pr_val;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->curcfg.lnkcfg.param_1000fdx = *(uint8_t *)pr_val;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->hwinit.lnkcfg.param_100fdx = *(uint8_t *)pr_val;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->curcfg.lnkcfg.param_100fdx = *(uint8_t *)pr_val;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->hwinit.lnkcfg.param_100hdx = *(uint8_t *)pr_val;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->curcfg.lnkcfg.param_100hdx = *(uint8_t *)pr_val;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->hwinit.lnkcfg.param_10fdx = *(uint8_t *)pr_val;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->curcfg.lnkcfg.param_10fdx = *(uint8_t *)pr_val;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->hwinit.lnkcfg.param_10hdx = *(uint8_t *)pr_val;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->curcfg.lnkcfg.param_10hdx = *(uint8_t *)pr_val;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->hwinit.lnkcfg.link_autoneg = *(uint8_t *)pr_val;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->curcfg.lnkcfg.link_autoneg = *(uint8_t *)pr_val;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->hwinit.lnkcfg.param_rxpause = rxpause;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->hwinit.lnkcfg.param_txpause = txpause;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->curcfg.lnkcfg.param_rxpause = rxpause;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->curcfg.lnkcfg.param_txpause = txpause;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if ((mtu < USER_OPTION_MTU_MIN) || (mtu > USER_OPTION_MTU_MAX))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (pUM->devParams.mtu[LM_CLI_IDX_NDIS] == mtu)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi err = mac_maxsdu_update(pUM->pMac, pUM->devParams.mtu[LM_CLI_IDX_NDIS]);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pUM->lm_dev.params.mtu[LM_CLI_IDX_NDIS] = pUM->devParams.mtu[LM_CLI_IDX_NDIS];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi err = BnxeSetPrivateProperty(pUM, pr_name, pr_valsize, pr_val);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif /* MC_SETPROP */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistatic int BnxeGetPrivateProperty(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeLinkCfg * lnk_cfg = &pUM->curcfg.lnkcfg;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeLinkCfg * hw_cfg = &pUM->hwinit.lnkcfg;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (strcmp(pr_name, "_adv_2500fdx_cap") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_en_2500fdx_cap") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_adv_txpause_cap") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_en_txpause_cap") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_adv_rxpause_cap") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_en_rxpause_cap") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_autoneg_flow") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_checksum") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_tx_ring_policy") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_num_rings") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_rx_descs") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi value = pUM->devParams.numRxDesc[LM_CLI_IDX_NDIS];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_rx_free_reclaim") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_tx_descs") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi value = pUM->devParams.numTxDesc[LM_CLI_IDX_NDIS];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_tx_free_reclaim") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_rx_copy_threshold") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_tx_copy_threshold") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_interrupt_coalesce") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_rx_interrupt_coalesce_usec") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_tx_interrupt_coalesce_usec") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_disable_msix") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_l2_fw_flow_ctrl") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_autogreeen_enable") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_lso_enable") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_log_enable") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_fcoe_enable") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (void)snprintf(pr_val, pr_valsize, "%d", value);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeLinkCfg * lnk_cfg = &pUM->curcfg.lnkcfg;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeLinkCfg * hw_cfg = &pUM->hwinit.lnkcfg;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi bcopy(&pUM->devParams.mtu[LM_CLI_IDX_NDIS], pr_val, sizeof(u32_t));
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ASSERT(pr_valsize >= sizeof(link_duplex_t));
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi bcopy(&link_duplex, pr_val, sizeof(link_duplex_t));
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi link_speed = (pUM->props.link_speed * 1000000ULL);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi bcopy(&link_speed, pr_val, sizeof(link_speed));
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ASSERT(pr_valsize >= sizeof(link_state_t));
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi bcopy(&link_state, pr_val, sizeof(link_state_t));
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *(uint8_t *)pr_val = lnk_cfg->link_autoneg;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ASSERT(pr_valsize >= sizeof(link_flowctrl_t));
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (!lnk_cfg->param_rxpause && !lnk_cfg->param_txpause)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (lnk_cfg->param_rxpause && !lnk_cfg->param_txpause)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (!lnk_cfg->param_rxpause && lnk_cfg->param_txpause)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (lnk_cfg->param_rxpause && lnk_cfg->param_txpause)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi bcopy(&link_flowctrl, pr_val, sizeof(link_flowctrl_t));
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *(uint8_t *)pr_val = lnk_cfg->param_10000fdx;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *(uint8_t *)pr_val = hw_cfg->param_10000fdx;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *(uint8_t *)pr_val = lnk_cfg->param_1000fdx;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *(uint8_t *)pr_val = hw_cfg->param_1000fdx;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *(uint8_t *)pr_val = lnk_cfg->param_100fdx;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *(uint8_t *)pr_val = lnk_cfg->param_100hdx;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif /* MC_GETPROP */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistatic void BnxeMacPrivatePropertyInfo(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if ((strcmp(pr_name, "_adv_2500fdx_cap") == 0) ||
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (strcmp(pr_name, "_adv_txpause_cap") == 0) ||
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (strcmp(pr_name, "_adv_rxpause_cap") == 0) ||
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (strcmp(pr_name, "_interrupt_coalesce") == 0) ||
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (strcmp(pr_name, "_rx_interrupt_coalesce_usec") == 0) ||
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (strcmp(pr_name, "_tx_interrupt_coalesce_usec") == 0) ||
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (strcmp(pr_name, "_l2_fw_flow_ctrl") == 0) ||
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi mac_prop_info_set_perm(prh, MAC_PROP_PERM_READ);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_tx_ring_policy") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_rx_free_reclaim") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi default_val = USER_OPTION_RX_MAX_FREE_DEFAULT;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_tx_free_reclaim") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi default_val = USER_OPTION_TX_MAX_FREE_DEFAULT;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_rx_copy_threshold") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi default_val = USER_OPTION_RX_DCOPY_THRESH_DEFAULT;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_tx_copy_threshold") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi default_val = USER_OPTION_TX_DCOPY_THRESH_DEFAULT;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_autogreeen_enable") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_log_enable") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (strcmp(pr_name, "_fcoe_enable") == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi snprintf(valstr, sizeof (valstr), "%d", default_val);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi mac_prop_info_set_default_str(prh, valstr);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistatic void BnxeMacPropertyInfo(void * barg,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi mac_prop_info_set_perm(prh, MAC_PROP_PERM_READ);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi mac_prop_info_set_default_uint8(prh, default_cfg->param_10000fdx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi mac_prop_info_set_default_uint8(prh, default_cfg->param_1000fdx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi mac_prop_info_set_default_uint8(prh, default_cfg->param_100fdx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi mac_prop_info_set_default_uint8(prh, default_cfg->param_100hdx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi mac_prop_info_set_default_uint8(prh, default_cfg->param_10fdx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi mac_prop_info_set_default_uint8(prh, default_cfg->param_10hdx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi mac_prop_info_set_default_uint8(prh, default_cfg->link_autoneg);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (!default_cfg->param_rxpause && !default_cfg->param_txpause)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (default_cfg->param_rxpause && !default_cfg->param_txpause)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (!default_cfg->param_rxpause && default_cfg->param_txpause)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (default_cfg->param_rxpause && default_cfg->param_txpause)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi mac_prop_info_set_default_link_flowctrl(prh, link_flowctrl);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeMacPrivatePropertyInfo(pUM, pr_name, prh);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif /* MC_PROPINFO */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if ((pMac = mac_alloc(MAC_VERSION)) == NULL)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeLogWarn(pUM, "Failed to allocate GLD MAC memory");
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pMac->m_type_ident = MAC_PLUGIN_IDENT_ETHER;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pMac->m_max_sdu = pUM->devParams.mtu[LM_CLI_IDX_NDIS];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pMac->m_src_addr = &(pUM->lm_dev.params.mac_addr[0]);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#if (defined(__S11) || defined(__S12)) && !defined(ILLUMOS)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (!pUM->devParams.numRings) ? BnxeMacUnicast : NULL;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeLogWarn(pUM, "Failed to register with GLD (%d)", rc);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* Always report the initial link state as unknown. */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi mac_link_update(pUM->pMac, LINK_STATE_UNKNOWN);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeLogWarn(pUM, "Detaching device from GLD that is started!");
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* We must not detach until all packets held by stack are retrieved. */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (!BnxeWaitForPacketsFromClient(pUM, LM_CLI_IDX_NDIS))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeLogWarn(pUM, "Failed to unregister with the GLD");