/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2014 QLogic Corporation
* The contents of this file are subject to the terms of the
* QLogic End User License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the License at
* See the License for the specific language governing permissions
* and limitations under the License.
*/
/*
*/
#include "bnxe.h"
#include <sys/mac_ether.h>
#endif /* not __S11 or __S12 */
/*
* Reconfiguring the network devices parameters require net_config
* privilege starting Solaris 10. Only root user is allowed to
* update device parameter in Solaris 9 and earlier version. Following
* declaration allows single binary image to run on all OS versions.
*/
#ifdef MC_SETPROP
char * bnxeLink_priv_props[] =
{
"_adv_2500fdx_cap",
"_en_2500fdx_cap",
"_adv_txpause_cap",
"_en_txpause_cap",
"_txpause",
"_adv_rxpause_cap",
"_en_rxpause_cap",
"_rxpause",
"_autoneg_flow",
"_checksum",
"_num_rings",
"_rx_descs",
"_rx_free_reclaim",
"_rx_copy_threshold",
"_tx_descs",
"_tx_free_reclaim",
"_tx_copy_threshold",
"_tx_ring_policy",
"_interrupt_coalesce",
"_rx_interrupt_coalesce_usec",
"_tx_interrupt_coalesce_usec",
"_disable_msix",
"_l2_fw_flow_ctrl",
"_autogreeen_enable",
"_lso_enable",
"_log_enable",
"_fcoe_enable",
};
#endif /* MC_SETPROP */
{
{
return EINVAL;
}
{
return EAGAIN;
}
*pVal = 0;
switch (stat)
{
case MAC_STAT_IFSPEED:
break;
case MAC_STAT_MULTIRCV:
break;
case MAC_STAT_BRDCSTRCV:
break;
case MAC_STAT_MULTIXMT:
break;
case MAC_STAT_BRDCSTXMT:
break;
case MAC_STAT_NORCVBUF:
break;
case MAC_STAT_NOXMTBUF:
*pVal = 0;
{
}
break;
case MAC_STAT_IERRORS:
case ETHER_STAT_MACRCV_ERRORS:
break;
case MAC_STAT_OERRORS:
/* XXX not available */
break;
case MAC_STAT_COLLISIONS:
break;
case MAC_STAT_RBYTES:
break;
case MAC_STAT_IPACKETS:
break;
case MAC_STAT_OBYTES:
break;
case MAC_STAT_OPACKETS:
break;
case ETHER_STAT_ALIGN_ERRORS:
break;
case ETHER_STAT_FCS_ERRORS:
break;
break;
break;
case ETHER_STAT_DEFER_XMTS:
break;
break;
case ETHER_STAT_EX_COLLISIONS:
break;
case ETHER_STAT_MACXMT_ERRORS:
break;
break;
break;
#if (MAC_VERSION > 1)
break;
#endif
case ETHER_STAT_XCVR_ADDR:
break;
case ETHER_STAT_XCVR_ID:
*pVal = 0;
break;
case ETHER_STAT_XCVR_INUSE:
{
case 0: /* no speed then status is down */
break;
case 1000:
*pVal = XCVR_1000X;
break;
case 100:
break;
case 10:
break;
default:
/* catches 2500/10000 */
*pVal = XCVR_UNDEFINED;
}
break;
#if (MAC_VERSION > 1)
case ETHER_STAT_CAP_10GFDX:
*pVal = 1;
break;
#endif
case ETHER_STAT_CAP_1000FDX:
*pVal = 1;
break;
#if 0
case ETHER_STAT_CAP_1000HDX:
//*pVal = linkconf->param_1000hdx;
*pVal = 0;
break;
#endif
case ETHER_STAT_CAP_100FDX:
//*pVal = linkconf->param_100fdx;
*pVal = 1;
break;
case ETHER_STAT_CAP_100HDX:
//*pVal = linkconf->param_100hdx;
*pVal = 1;
break;
case ETHER_STAT_CAP_10FDX:
//*pVal = linkconf->param_10fdx;
*pVal = 1;
break;
case ETHER_STAT_CAP_10HDX:
//*pVal = linkconf->param_10hdx;
*pVal = 1;
break;
case ETHER_STAT_CAP_ASMPAUSE:
*pVal = 1;
break;
case ETHER_STAT_CAP_PAUSE:
*pVal = 1;
break;
case ETHER_STAT_CAP_AUTONEG:
*pVal = 1;
break;
#if (MAC_VERSION > 1)
case ETHER_STAT_CAP_REMFAULT:
*pVal = 1;
break;
#endif
#if (MAC_VERSION > 1)
break;
#endif
break;
#if 0
//*pVal = pUM->curcfg.lnkcfg.param_1000hdx;
*pVal = 0;
break;
#endif
break;
break;
case ETHER_STAT_ADV_CAP_10FDX:
break;
case ETHER_STAT_ADV_CAP_10HDX:
break;
*pVal = 1;
break;
case ETHER_STAT_ADV_CAP_PAUSE:
*pVal = 1;
break;
break;
#if (MAC_VERSION > 1)
case ETHER_STAT_ADV_REMFAULT:
*pVal = 1;
break;
#endif
#if 0 /* LP caps not supported */
#if (MAC_VERSION > 1)
case ETHER_STAT_LP_CAP_10GFDX:
break;
#endif
break;
#if 0
//*pVal = pUM->remote.param_1000hdx;
*pVal = 0;
break;
#endif
case ETHER_STAT_LP_CAP_100FDX:
break;
case ETHER_STAT_LP_CAP_100HDX:
break;
case ETHER_STAT_LP_CAP_10FDX:
break;
case ETHER_STAT_LP_CAP_10HDX:
break;
#if 0
/* XXX implement LP_ASYM_PAUSE stat */
break;
case ETHER_STAT_LP_CAP_PAUSE:
/* XXX implement LP_PAUSE stat */
break;
#endif
break;
case ETHER_STAT_LP_REMFAULT:
/* XXX implement LP_REMFAULT stat */
break;
#endif /* LP caps not supported */
#if 0
case ETHER_STAT_LINK_ASMPAUSE:
/* XXX implement ASMPAUSE stat */
break;
case ETHER_STAT_LINK_PAUSE:
/* XXX implement PAUSE stat */
break;
#endif
case ETHER_STAT_LINK_AUTONEG:
break;
case ETHER_STAT_LINK_DUPLEX:
break;
default:
}
return rc;
}
/*
* This routine is called by GLD to enable device for packet reception and
* enable interrupts.
*/
{
{
/* already started */
return EAGAIN;
}
/* Always report the initial link state as unknown. */
if (BnxeHwStartL2(pUM))
{
return EIO;
}
return 0;
}
/*
* This routine stops packet reception by clearing RX MASK register. Also
* interrupts are disabled for this device.
*/
{
{
/* Report the link state back to unknown. */
}
}
/* (flag) TRUE = on, FALSE = off */
{
{
return EAGAIN;
}
if (flag)
{
}
else
{
}
{
return ECANCELED;
}
return 0;
}
/*
* This function is used to enable or disable multicast packet reception for
* particular multicast addresses.
* (flag) TRUE = add, FALSE = remove
*/
const uint8_t * pMcastAddr)
{
int rc;
{
return EAGAIN;
}
return rc;
}
#ifdef BNXE_RINGS
#else
static int BnxeRxRingGroupAddMac(void * groupHandle,
#endif
{
//u32_t idx = pRxQGroup->idx;
int rc;
#endif
{
return ECANCELED;
}
/* Validate MAC address */
if (IS_ETH_MULTICAST(pMacAddr))
{
return EINVAL;
}
{
return ENOMEM;
}
if (rc < 0)
{
return ECANCELED;
}
pUM->ucastTableLen++;
return 0;
}
{
//u32_t idx = pRxQGroup->idx;
int rc;
{
return ECANCELED;
}
if (pUM->ucastTableLen == 0)
{
return EINVAL;
}
{
/* XXX */
}
if (rc < 0)
{
return ECANCELED;
}
pUM->ucastTableLen--;
return 0;
}
{
int rc;
while (pMblk)
{
if (rc == BNXE_TX_GOODXMIT)
{
continue;
}
else if (rc == BNXE_TX_DEFERPKT)
{
}
else
{
}
break;
}
return pMblk;
}
#endif /* BNXE_RINGS */
{
int rc;
{
return 0;
}
/* Validate MAC address */
if (IS_ETH_MULTICAST(pMacAddr))
{
return EINVAL;
}
if (rc < 0)
{
return EAGAIN;
}
return 0;
}
{
{
return NULL;
}
while (pMblk)
{
//rc = BnxeTxSendMblk(pUM, NDIS_CID(&pUM->lm_dev), pMblk, 0, 0);
if (rc == BNXE_TX_GOODXMIT)
{
continue;
}
else if (rc == BNXE_TX_DEFERPKT)
{
}
else
{
}
break;
}
return pMblk;
}
#ifdef MC_RESOURCES
{
{
return;
}
/* XXX
* Need to dynamically reconfigure the hw with new interrupt
* coalescing params...
*/
}
{
int idx;
{
}
}
#endif /* MC_RESOURCES */
struct bnxe_reg_data * pData)
{
{
return B_FALSE;
}
return B_TRUE;
}
struct bnxe_reg_data * pData)
{
{
return B_FALSE;
}
return B_TRUE;
}
struct bnxe_nvram_data * pData)
{
{
return B_FALSE;
}
{
return B_FALSE;
}
return B_TRUE;
}
struct bnxe_nvram_data * pData)
{
{
return B_FALSE;
}
{
return B_FALSE;
}
return B_TRUE;
}
struct bnxe_reg_data * pData)
{
return B_TRUE;
}
typedef enum {
typedef union _b10_stats_show_data_t
{
struct
{
} desc;
/* variable length... */
struct
{
} cnt;
{
/*
* All stats names MUST conform to STATS_STR_LEN length!!!
*/
/* XXX
* Note: these strings must be updated whenever any of
* b10_l2_chip_statistics_t, b10_l4_chip_statistics_t,
* b10_l2_driver_statistics_t or b10_l4_driver_statistics_t
* are changed, or additional statistics are required.
*/
const char p_stat_str[] =
// b10_l2_chip_statistics_t
"l2_chip_stats_ver_num\0 "
"IfHCInOctets\0 "
"IfHCInBadOctets\0 "
"IfHCOutOctets\0 "
"IfHCOutBadOctets\0 "
"IfHCOutPkts\0 "
"IfHCInPkts\0 "
"IfHCInUcastPkts\0 "
"IfHCInMulticastPkts\0 "
"IfHCInBroadcastPkts\0 "
"IfHCOutUcastPkts\0 "
"IfHCOutMulticastPkts\0 "
"IfHCOutBroadcastPkts\0 "
"IfHCInUcastOctets\0 "
"IfHCInMulticastOctets\0 "
"IfHCInBroadcastOctets\0 "
"IfHCOutUcastOctets\0 "
"IfHCOutMulticastOctets\0 "
"IfHCOutBroadcastOctets\0 "
"IfHCOutDiscards\0 "
"IfHCInFalseCarrierErrors\0 "
"Dot3StatsInternalMacTransmitErrors\0 "
"Dot3StatsCarrierSenseErrors\0 "
"Dot3StatsFCSErrors\0 "
"Dot3StatsAlignmentErrors\0 "
"Dot3StatsSingleCollisionFrames\0 "
"Dot3StatsMultipleCollisionFrames\0 "
"Dot3StatsDeferredTransmissions\0 "
"Dot3StatsExcessiveCollisions\0 "
"Dot3StatsLateCollisions\0 "
"EtherStatsCollisions\0 "
"EtherStatsFragments\0 "
"EtherStatsJabbers\0 "
"EtherStatsUndersizePkts\0 "
"EtherStatsOverrsizePkts\0 "
"EtherStatsPktsTx64Octets\0 "
"EtherStatsPktsTx65Octetsto127Octets\0 "
"EtherStatsPktsTx128Octetsto255Octets\0 "
"EtherStatsPktsTx256Octetsto511Octets\0 "
"EtherStatsPktsTx512Octetsto1023Octets\0 "
"EtherStatsPktsTx1024Octetsto1522Octets\0"
"EtherStatsPktsTxOver1522Octets\0 "
"XonPauseFramesReceived\0 "
"XoffPauseFramesReceived\0 "
"OutXonSent\0 "
"OutXoffSent\0 "
"FlowControlDone\0 "
"MacControlFramesReceived\0 "
"XoffStateEntered\0 "
"IfInFramesL2FilterDiscards\0 "
"IfInTTL0Discards\0 "
"IfInxxOverflowDiscards\0 "
"IfInMBUFDiscards\0 "
"IfInErrors\0 "
"IfInErrorsOctets\0 "
"IfInNoBrbBuffer\0 "
"Nig_brb_packet\0 "
"Nig_brb_truncate\0 "
"Nig_flow_ctrl_discard\0 "
"Nig_flow_ctrl_octets\0 "
"Nig_flow_ctrl_packet\0 "
"Nig_mng_discard\0 "
"Nig_mng_octet_inp\0 "
"Nig_mng_octet_out\0 "
"Nig_mng_packet_inp\0 "
"Nig_mng_packet_out\0 "
"Nig_pbf_octets\0 "
"Nig_pbf_packet\0 "
"Nig_safc_inp\0 "
"Tx_Lpi_Count\0 " // This counter counts the number of timers the debounced version of EEE link idle is asserted
// b10_l4_chip_statistics_t
"l4_chip_stats_ver_num\0 "
"NoTxCqes\0 "
"InTCP4Segments\0 "
"OutTCP4Segments\0 "
"RetransmittedTCP4Segments\0 "
"InTCP4Errors\0 "
"InIP4Receives\0 "
"InIP4HeaderErrors\0 "
"InIP4Discards\0 "
"InIP4Delivers\0 "
"InIP4Octets\0 "
"OutIP4Octets\0 "
"InIP4TruncatedPackets\0 "
"InTCP6Segments\0 "
"OutTCP6Segments\0 "
"RetransmittedTCP6Segments\0 "
"InTCP6Errors\0 "
"InIP6Receives\0 "
"InIP6HeaderErrors\0 "
"InIP6Discards\0 "
"InIP6Delivers\0 "
"InIP6Octets\0 "
"OutIP6Octets\0 "
"InIP6TruncatedPackets\0 "
// b10_l2_driver_statistics_t
"l2_driver_stats_ver_num\0 "
"RxIPv4FragCount\0 "
"RxIpCsErrorCount\0 "
"RxTcpCsErrorCount\0 "
"RxLlcSnapCount\0 "
"RxPhyErrorCount\0 "
"RxIpv6ExtCount\0 "
"TxNoL2Bd\0 "
"TxNoSqWqe\0 "
"TxL2AssemblyBufUse\0 "
// b10_l4_driver_statistics_t
"l4_driver_stats_ver_num\0 "
"CurrentlyIpv4Established\0 "
"OutIpv4Resets\0 "
"OutIpv4Fin\0 "
"InIpv4Reset\0 "
"InIpv4Fin\0 "
"CurrentlyIpv6Established\0 "
"OutIpv6Resets\0 "
"OutIpv6Fin\0 "
"InIpv6Reset\0 "
"InIpv6Fin\0 "
"RxIndicateReturnPendingCnt\0 "
"RxIndicateReturnDoneCnt\0 "
"RxActiveGenBufCnt\0 "
"TxNoL4Bd\0 "
"TxL4AssemblyBufUse\0 "
;
(stats_size / sizeof(u64_t)));
switch (op)
{
case STATS_SHOW_TYPE_NUM:
{
return B_FALSE;
}
return B_TRUE;
case STATS_SHOW_TYPE_STR:
if (statsLen != sizeof(p_stat_str))
{
return B_FALSE;
}
return B_TRUE;
case STATS_SHOW_TYPE_CNT:
if (statsLen != stats_size)
{
return B_FALSE;
}
return B_TRUE;
default:
return B_FALSE;
}
}
{
int rc;
{
return;
}
{
return;
}
{
case GIOCBNXELLDP:
{
break;
}
{
break;
}
{
break;
}
break;
case GIOCBNXEDCBX:
{
break;
}
{
break;
}
{
break;
}
break;
case SIOCBNXEDCBX:
/* XXX */
break;
case GIOCBNXEREG:
{
break;
}
{
}
else
{
}
break;
case SIOCBNXEREG:
{
break;
}
{
}
else
{
}
break;
case GIOCBNXENVRM:
{
break;
}
{
}
else
{
}
break;
case SIOCBNXENVRM:
{
break;
}
{
}
else
{
}
break;
case GIOCBNXEPCI:
{
break;
}
{
}
else
{
}
break;
case GIOCBNXESTATS:
/* min size = sizeof(op) in b10_stats_show_data_t */
{
break;
}
if (!BnxeStatsShow(pUM,
{
}
else
{
}
break;
default:
break;
}
}
#ifdef BNXE_RINGS
int numBytes,
int numPkts)
#else
int numBytes)
#endif
{
#endif
if (numBytes <= 0)
{
return NULL;
}
{
return NULL;
}
/*
* This is here for the off chance that all rings are in polling
* mode and the default interrupt hasn't fired recently to handle
* the sq.
*/
return pMblk;
}
#endif
)
{
#endif
pRxQ->intrDisableCnt = 0;
pRxQ->intrEnableCnt = 0;
return 0;
}
{
switch (stat)
{
case MAC_STAT_OERRORS:
case MAC_STAT_OBYTES:
case MAC_STAT_OPACKETS:
case MAC_STAT_IERRORS:
case MAC_STAT_RBYTES: /* MAC_STAT_IBYTES */
case MAC_STAT_IPACKETS:
default:
return ENOTSUP;
}
return 0;
}
#endif /* __S11 or __S12 */
#else
#endif
{
/* polling not allowed on LM_NON_RSS_SB when overlapped with FCoE */
{
return 0; /* ok, already enabled */
}
return 0;
}
#else
#endif
{
/* polling not allowed on LM_NON_RSS_SB when overlapped with FCoE */
{
return -1; /* NO, keep enabled! */
}
return 0;
}
/* callback function for MAC layer to register rings */
const int ringGroupIndex,
const int ringIndex,
{
switch (ringType)
{
case MAC_RING_TYPE_RX:
ASSERT(ringGroupIndex == 0);
#endif
#endif
break;
case MAC_RING_TYPE_TX:
ASSERT(ringGroupIndex == 0);
#endif
break;
default:
break;
}
}
/* callback function for MAC layer to register groups */
const int ringGroupIndex,
{
switch (ringType)
{
case MAC_RING_TYPE_RX:
#endif
break;
case MAC_RING_TYPE_TX:
default:
break;
}
}
#endif /* BNXE_RINGS */
void * pCapabilityData)
{
switch (capability)
{
case MAC_CAPAB_HCKSUM:
*((u32_t *)pCapabilityData) = 0;
{
}
{
}
break;
case MAC_CAPAB_LSO:
{
break;
}
return B_FALSE;
#ifdef BNXE_RINGS
case MAC_CAPAB_RINGS:
{
return B_FALSE;
}
#endif
#endif
{
case MAC_RING_TYPE_RX:
break;
case MAC_RING_TYPE_TX:
#else
#endif
break;
default:
return B_FALSE;
}
break;
#endif /* BNXE_RINGS */
case MAC_CAPAB_POLL:
/*
* There's nothing for us to fill in, simply returning B_TRUE stating
* that we support polling is sufficient.
*/
break;
#endif /* not __S11 or __S12 */
default:
return B_FALSE;
}
return B_TRUE;
}
#ifdef MC_SETPROP
const char * pr_name,
const void * pr_val)
{
int err = 0;
long result;
{
{
return EINVAL;
}
{
return EINVAL;
}
}
{
{
return EINVAL;
}
{
return EINVAL;
}
}
{
{
return EINVAL;
}
{
return EINVAL;
}
}
{
{
return EINVAL;
}
{
return EINVAL;
}
}
{
{
return EBUSY;
}
{
return EINVAL;
}
switch (result)
{
case USER_OPTION_CKSUM_NONE:
break;
case USER_OPTION_CKSUM_L3:
break;
case USER_OPTION_CKSUM_L3_L4:
break;
default:
return EINVAL;
}
}
{
{
return EINVAL;
}
switch (result)
{
case BNXE_ROUTE_RING_NONE:
case BNXE_ROUTE_RING_TCPUDP:
case BNXE_ROUTE_RING_DEST_MAC:
case BNXE_ROUTE_RING_MSG_PRIO:
break;
default:
return EINVAL;
}
}
{
{
return EBUSY;
}
{
return EINVAL;
}
if ((result < USER_OPTION_NUM_RINGS_MIN) ||
{
return EINVAL;
}
}
{
{
return EBUSY;
}
{
return EINVAL;
}
{
return EINVAL;
}
}
{
{
return EINVAL;
}
{
return EINVAL;
}
}
{
{
return EBUSY;
}
{
return EINVAL;
}
{
return EINVAL;
}
}
{
{
return EINVAL;
}
{
return EINVAL;
}
}
{
{
return EINVAL;
}
}
{
{
return EINVAL;
}
}
{
{
return EBUSY;
}
{
return EINVAL;
}
{
return EINVAL;
}
}
{
{
return EBUSY;
}
{
return EINVAL;
}
if ((result < USER_OPTION_INTR_COALESCE_MIN) ||
{
return EINVAL;
}
}
{
{
return EBUSY;
}
{
return EINVAL;
}
if ((result < USER_OPTION_INTR_COALESCE_MIN) ||
{
return EINVAL;
}
}
{
{
return EBUSY;
}
{
return EINVAL;
}
{
return EINVAL;
}
}
{
{
return EBUSY;
}
{
return EINVAL;
}
{
return EINVAL;
}
}
{
{
return EINVAL;
}
{
return EINVAL;
}
}
{
{
return EBUSY;
}
{
return EINVAL;
}
{
return EINVAL;
}
}
{
{
return EINVAL;
}
{
return EINVAL;
}
}
{
{
return EINVAL;
}
{
return EINVAL;
}
{
}
}
else
{
}
return err;
}
const char * pr_name,
const void * pr_val)
{
int err = 0;
switch (pr_num)
{
/* read-only props */
case MAC_PROP_STATUS:
case MAC_PROP_SPEED:
case MAC_PROP_DUPLEX:
case MAC_PROP_ADV_10GFDX_CAP:
case MAC_PROP_ADV_1000FDX_CAP:
case MAC_PROP_ADV_1000HDX_CAP:
case MAC_PROP_ADV_100FDX_CAP:
case MAC_PROP_ADV_100HDX_CAP:
case MAC_PROP_ADV_10FDX_CAP:
case MAC_PROP_ADV_10HDX_CAP:
case MAC_PROP_ADV_100T4_CAP:
case MAC_PROP_EN_1000HDX_CAP:
case MAC_PROP_EN_100T4_CAP:
default:
break;
case MAC_PROP_EN_10GFDX_CAP:
break;
case MAC_PROP_EN_1000FDX_CAP:
break;
case MAC_PROP_EN_100FDX_CAP:
break;
case MAC_PROP_EN_100HDX_CAP:
break;
case MAC_PROP_EN_10FDX_CAP:
break;
case MAC_PROP_EN_10HDX_CAP:
break;
case MAC_PROP_AUTONEG:
break;
case MAC_PROP_FLOWCTRL:
switch (fl)
{
case LINK_FLOWCTRL_NONE:
break;
case LINK_FLOWCTRL_RX:
break;
case LINK_FLOWCTRL_TX:
break;
case LINK_FLOWCTRL_BI:
break;
default:
break;
}
if (err == 0)
{
}
break;
case MAC_PROP_MTU:
{
break;
}
{
break;
}
{
break;
}
break;
case MAC_PROP_PRIVATE:
break;
}
{
}
return err;
}
#endif /* MC_SETPROP */
#ifdef MC_GETPROP
const char * pr_name,
void * pr_val)
{
int value;
int err = 0;
{
}
{
}
{
}
{
}
{
}
{
}
{
}
{
}
{
}
{
}
{
}
{
}
{
}
{
}
{
}
{
}
{
}
{
}
{
}
{
}
{
}
{
}
{
}
{
}
{
}
{
}
{
}
else
{
}
if (!err)
{
}
return err;
}
const char * pr_name,
void * pr_val)
{
switch (pr_num)
{
case MAC_PROP_MTU:
break;
case MAC_PROP_DUPLEX:
break;
case MAC_PROP_SPEED:
break;
case MAC_PROP_STATUS:
break;
case MAC_PROP_AUTONEG:
break;
case MAC_PROP_FLOWCTRL:
{
}
{
}
{
}
{
}
break;
case MAC_PROP_ADV_10GFDX_CAP:
break;
case MAC_PROP_EN_10GFDX_CAP:
break;
case MAC_PROP_ADV_1000FDX_CAP:
break;
case MAC_PROP_EN_1000FDX_CAP:
break;
case MAC_PROP_ADV_1000HDX_CAP:
case MAC_PROP_EN_1000HDX_CAP:
break;
case MAC_PROP_ADV_100FDX_CAP:
break;
case MAC_PROP_EN_100FDX_CAP:
break;
case MAC_PROP_ADV_100HDX_CAP:
break;
case MAC_PROP_EN_100HDX_CAP:
break;
case MAC_PROP_ADV_100T4_CAP:
case MAC_PROP_EN_100T4_CAP:
break;
case MAC_PROP_ADV_10FDX_CAP:
break;
case MAC_PROP_EN_10FDX_CAP:
break;
case MAC_PROP_ADV_10HDX_CAP:
break;
case MAC_PROP_EN_10HDX_CAP:
break;
case MAC_PROP_PRIVATE:
return BnxeGetPrivateProperty(pUM,
pr_val);
default:
return ENOTSUP;
}
return 0;
}
#endif /* MC_GETPROP */
#ifdef MC_PROPINFO
const char * pr_name,
{
int default_val;
{
return;
}
{
}
{
}
{
}
{
}
{
}
{
}
{
}
{
}
{
}
else
{
return;
}
}
const char * pr_name,
{
switch (pr_num)
{
case MAC_PROP_STATUS:
case MAC_PROP_SPEED:
case MAC_PROP_DUPLEX:
case MAC_PROP_ADV_10GFDX_CAP:
case MAC_PROP_ADV_1000FDX_CAP:
case MAC_PROP_ADV_1000HDX_CAP:
case MAC_PROP_ADV_100FDX_CAP:
case MAC_PROP_ADV_100HDX_CAP:
case MAC_PROP_ADV_100T4_CAP:
case MAC_PROP_ADV_10FDX_CAP:
case MAC_PROP_ADV_10HDX_CAP:
case MAC_PROP_EN_1000HDX_CAP:
case MAC_PROP_EN_100T4_CAP:
break;
case MAC_PROP_EN_10GFDX_CAP:
break;
case MAC_PROP_EN_1000FDX_CAP:
break;
case MAC_PROP_EN_100FDX_CAP:
break;
case MAC_PROP_EN_100HDX_CAP:
break;
case MAC_PROP_EN_10FDX_CAP:
break;
case MAC_PROP_EN_10HDX_CAP:
break;
case MAC_PROP_MTU:
break;
case MAC_PROP_AUTONEG:
break;
case MAC_PROP_FLOWCTRL:
{
}
{
}
{
}
{
}
break;
case MAC_PROP_PRIVATE:
break;
}
}
#endif /* MC_PROPINFO */
{
(
#ifdef MC_RESOURCES
#endif
#ifdef MC_SETPROP
#endif
#ifdef MC_GETPROP
#endif
#ifdef MC_PROPINFO
#endif
),
NULL,
#ifdef MC_RESOURCES
#else
NULL,
#endif
#ifdef MC_OPEN
NULL,
NULL,
#endif
#ifdef MC_SETPROP
#endif
#ifdef MC_GETPROP
#endif
#ifdef MC_PROPINFO
#endif
};
{
int rc;
{
return B_FALSE;
}
#ifdef MC_OPEN
#endif
#ifdef MC_SETPROP
#endif
#else
#endif
if (rc != 0)
{
return B_FALSE;
}
/* Always report the initial link state as unknown. */
return B_TRUE;
}
{
int cnt;
{
return B_FALSE;
}
/* We must not detach until all packets held by stack are retrieved. */
{
return B_FALSE;
}
{
{
return B_FALSE;
}
}
return B_TRUE;
}
{
}