blob: 71de91b6735ddb3b9e309abf211af6d9577fe93f [file] [log] [blame]
/*
* 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
* or http://www.opensolaris.org/os/licensing.
* 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
* http://www.qlogic.com/Resources/Documents/DriverDownloadHelp/
* QLogic_End_User_Software_License.txt
* See the License for the specific language governing permissions
* and limitations under the License.
*/
/*
* Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
*/
#include "bnxe.h"
typedef struct _BnxeKstat
{
kstat_named_t umdev_hi;
kstat_named_t umdev_lo;
kstat_named_t version;
kstat_named_t versionFW;
kstat_named_t versionBC;
kstat_named_t chipName;
kstat_named_t chipID;
kstat_named_t devBDF;
kstat_named_t devID;
kstat_named_t multiFunction;
kstat_named_t multiFunctionVnics;
kstat_named_t macAddr;
kstat_named_t hwInitDone;
kstat_named_t clientsHw;
kstat_named_t clientsDevi;
kstat_named_t clientsBound;
kstat_named_t txMsgPullUp;
kstat_named_t intrAlloc;
kstat_named_t intrFired;
kstat_named_t timerFired;
kstat_named_t timerReply;
kstat_named_t timerNoReplyTotal;
kstat_named_t timerNoReplyCurrent;
kstat_named_t timerDone;
kstat_named_t workQueueInstCnt;
kstat_named_t workItemInstQueued;
kstat_named_t workItemInstError;
kstat_named_t workItemInstComplete;
kstat_named_t workItemInstHighWater;
kstat_named_t workQueueDelayCnt;
kstat_named_t workItemDelayQueued;
kstat_named_t workItemDelayError;
kstat_named_t workItemDelayComplete;
kstat_named_t workItemDelayHighWater;
kstat_named_t memAllocBlocks;
kstat_named_t memAllocDMAs;
kstat_named_t memAllocBARs;
} BnxeKstat;
#define BNXE_KSTAT_SIZE (sizeof(BnxeKstat) / sizeof(kstat_named_t))
typedef struct _BnxeKstatLink
{
kstat_named_t clients;
kstat_named_t uptime;
kstat_named_t mtuL2;
kstat_named_t mtuFCOE;
kstat_named_t speed;
kstat_named_t link;
kstat_named_t duplex;
kstat_named_t pauseRx;
kstat_named_t pauseTx;
} BnxeKstatLink;
#define BNXE_KSTAT_LINK_SIZE (sizeof(BnxeKstatLink) / sizeof(kstat_named_t))
typedef struct _BnxeKstatIntr
{
kstat_named_t intrAlloc;
kstat_named_t intrFired;
kstat_named_t intrWrongState;
kstat_named_t intrInDisabled;
kstat_named_t intrZeroStatus;
kstat_named_t sb_00;
kstat_named_t sb_01;
kstat_named_t sb_02;
kstat_named_t sb_03;
kstat_named_t sb_04;
kstat_named_t sb_05;
kstat_named_t sb_06;
kstat_named_t sb_07;
kstat_named_t sb_08;
kstat_named_t sb_09;
kstat_named_t sb_10;
kstat_named_t sb_11;
kstat_named_t sb_12;
kstat_named_t sb_13;
kstat_named_t sb_14;
kstat_named_t sb_15;
kstat_named_t sb_16;
kstat_named_t sb_nc_00;
kstat_named_t sb_nc_01;
kstat_named_t sb_nc_02;
kstat_named_t sb_nc_03;
kstat_named_t sb_nc_04;
kstat_named_t sb_nc_05;
kstat_named_t sb_nc_06;
kstat_named_t sb_nc_07;
kstat_named_t sb_nc_08;
kstat_named_t sb_nc_09;
kstat_named_t sb_nc_10;
kstat_named_t sb_nc_11;
kstat_named_t sb_nc_12;
kstat_named_t sb_nc_13;
kstat_named_t sb_nc_14;
kstat_named_t sb_nc_15;
kstat_named_t sb_nc_16;
kstat_named_t sb_poll_00;
kstat_named_t sb_poll_01;
kstat_named_t sb_poll_02;
kstat_named_t sb_poll_03;
kstat_named_t sb_poll_04;
kstat_named_t sb_poll_05;
kstat_named_t sb_poll_06;
kstat_named_t sb_poll_07;
kstat_named_t sb_poll_08;
kstat_named_t sb_poll_09;
kstat_named_t sb_poll_10;
kstat_named_t sb_poll_11;
kstat_named_t sb_poll_12;
kstat_named_t sb_poll_13;
kstat_named_t sb_poll_14;
kstat_named_t sb_poll_15;
kstat_named_t sb_poll_16;
kstat_named_t sb_poll_nc_00;
kstat_named_t sb_poll_nc_01;
kstat_named_t sb_poll_nc_02;
kstat_named_t sb_poll_nc_03;
kstat_named_t sb_poll_nc_04;
kstat_named_t sb_poll_nc_05;
kstat_named_t sb_poll_nc_06;
kstat_named_t sb_poll_nc_07;
kstat_named_t sb_poll_nc_08;
kstat_named_t sb_poll_nc_09;
kstat_named_t sb_poll_nc_10;
kstat_named_t sb_poll_nc_11;
kstat_named_t sb_poll_nc_12;
kstat_named_t sb_poll_nc_13;
kstat_named_t sb_poll_nc_14;
kstat_named_t sb_poll_nc_15;
kstat_named_t sb_poll_nc_16;
} BnxeKstatIntr;
#define BNXE_KSTAT_INTR_SIZE (sizeof(BnxeKstatIntr) / sizeof(kstat_named_t))
typedef struct _BnxeKstatL2Chip
{
kstat_named_t IfHCInOctets;
kstat_named_t IfHCInBadOctets;
kstat_named_t IfHCOutOctets;
kstat_named_t IfHCOutBadOctets;
kstat_named_t IfHCOutPkts;
kstat_named_t IfHCInPkts;
kstat_named_t IfHCInUcastPkts;
kstat_named_t IfHCInMulticastPkts;
kstat_named_t IfHCInBroadcastPkts;
kstat_named_t IfHCOutUcastPkts;
kstat_named_t IfHCOutMulticastPkts;
kstat_named_t IfHCOutBroadcastPkts;
kstat_named_t IfHCInUcastOctets;
kstat_named_t IfHCInMulticastOctets;
kstat_named_t IfHCInBroadcastOctets;
kstat_named_t IfHCOutUcastOctets;
kstat_named_t IfHCOutMulticastOctets;
kstat_named_t IfHCOutBroadcastOctets;
kstat_named_t IfHCOutDiscards;
kstat_named_t IfHCInFalseCarrierErrors;
kstat_named_t Dot3StatsInternalMacTransmitErrors;
kstat_named_t Dot3StatsCarrierSenseErrors;
kstat_named_t Dot3StatsFCSErrors;
kstat_named_t Dot3StatsAlignmentErrors;
kstat_named_t Dot3StatsSingleCollisionFrames;
kstat_named_t Dot3StatsMultipleCollisionFrames;
kstat_named_t Dot3StatsDeferredTransmissions;
kstat_named_t Dot3StatsExcessiveCollisions;
kstat_named_t Dot3StatsLateCollisions;
kstat_named_t EtherStatsCollisions;
kstat_named_t EtherStatsFragments;
kstat_named_t EtherStatsJabbers;
kstat_named_t EtherStatsUndersizePkts;
kstat_named_t EtherStatsOverrsizePkts;
kstat_named_t EtherStatsTx64Octets;
kstat_named_t EtherStatsTx65to127Octets;
kstat_named_t EtherStatsTx128to255Octets;
kstat_named_t EtherStatsTx256to511Octets;
kstat_named_t EtherStatsTx512to1023Octets;
kstat_named_t EtherStatsTx1024to1522Octets;
kstat_named_t EtherStatsTxOver1522Octets;
kstat_named_t XonPauseFramesReceived;
kstat_named_t XoffPauseFramesReceived;
kstat_named_t OutXonSent;
kstat_named_t OutXoffSent;
kstat_named_t FlowControlDone;
kstat_named_t MacControlFramesReceived;
kstat_named_t XoffStateEntered;
kstat_named_t IfInFramesL2FilterDiscards;
kstat_named_t IfInTTL0Discards;
kstat_named_t IfInxxOverflowDiscards;
kstat_named_t IfInMBUFDiscards;
kstat_named_t IfInErrors;
kstat_named_t IfInErrorsOctets;
kstat_named_t IfInNoBrbBuffer;
kstat_named_t NigBrbPacket;
kstat_named_t NigBrbTruncate;
kstat_named_t NigFlowCtrlDiscard;
kstat_named_t NigFlowCtrlOctets;
kstat_named_t NigFlowCtrlPacket;
kstat_named_t NigMngDiscard;
kstat_named_t NigMngOctetInp;
kstat_named_t NigMngOctetOut;
kstat_named_t NigMngPacketInp;
kstat_named_t NigMngPacketOut;
kstat_named_t NigPbfOctets;
kstat_named_t NigPbfPacket;
kstat_named_t NigSafcInp;
} BnxeKstatL2Chip;
#define BNXE_KSTAT_L2_CHIP_SIZE (sizeof(BnxeKstatL2Chip) / sizeof(kstat_named_t))
typedef struct _BnxeKstatL2Driver
{
kstat_named_t RxIPv4FragCount;
kstat_named_t RxIpCsErrorCount;
kstat_named_t RxTcpCsErrorCount;
kstat_named_t RxLlcSnapCount;
kstat_named_t RxPhyErrorCount;
kstat_named_t RxIpv6ExtCount;
kstat_named_t TxNoL2Bd;
kstat_named_t TxNoSqWqe;
kstat_named_t TxL2AssemblyBufUse;
} BnxeKstatL2Driver;
#define BNXE_KSTAT_L2_DRIVER_SIZE (sizeof(BnxeKstatL2Driver) / sizeof(kstat_named_t))
typedef struct _BnxeKstatEthStats
{
/* lm_stats_t */
kstat_named_t txFramesOk; // LM_STATS_FRAMES_XMITTED_OK
kstat_named_t rxFramesOk; // LM_STATS_FRAMES_RECEIVED_OK
kstat_named_t txErr; // LM_STATS_ERRORED_TRANSMIT_CNT
kstat_named_t rxErr; // LM_STATS_ERRORED_RECEIVE_CNT
kstat_named_t rxCrcErr; // LM_STATS_RCV_CRC_ERROR
kstat_named_t alignErr; // LM_STATS_ALIGNMENT_ERROR
kstat_named_t collisionsSingle; // LM_STATS_SINGLE_COLLISION_FRAMES
kstat_named_t collisionsMultiple; // LM_STATS_MULTIPLE_COLLISION_FRAMES
kstat_named_t framesDeferred; // LM_STATS_FRAMES_DEFERRED
kstat_named_t collisonsMax; // LM_STATS_MAX_COLLISIONS
kstat_named_t rxOverrun; // LM_STATS_RCV_OVERRUN
kstat_named_t txOverrun; // LM_STATS_XMIT_UNDERRUN
kstat_named_t txFramesUnicast; // LM_STATS_UNICAST_FRAMES_XMIT
kstat_named_t txFramesMulticast; // LM_STATS_MULTICAST_FRAMES_XMIT
kstat_named_t txFramesBroadcast; // LM_STATS_BROADCAST_FRAMES_XMIT
kstat_named_t rxFramesUnicast; // LM_STATS_UNICAST_FRAMES_RCV
kstat_named_t rxFramesMulticast; // LM_STATS_MULTICAST_FRAMES_RCV
kstat_named_t rxFramesBroadcast; // LM_STATS_BROADCAST_FRAMES_RCV
kstat_named_t rxNoBufferDrop; // LM_STATS_RCV_NO_BUFFER_DROP
kstat_named_t rxBytes; // LM_STATS_BYTES_RCV
kstat_named_t txBytes; // LM_STATS_BYTES_XMIT
kstat_named_t offloadIP4; // LM_STATS_IP4_OFFLOAD
kstat_named_t offloadTCP; // LM_STATS_TCP_OFFLOAD
kstat_named_t ifInDiscards; // LM_STATS_IF_IN_DISCARDS
kstat_named_t ifInErrors; // LM_STATS_IF_IN_ERRORS
kstat_named_t ifOutErrors; // LM_STATS_IF_OUT_ERRORS
kstat_named_t offloadIP6; // LM_STATS_IP6_OFFLOAD
kstat_named_t offloadTCP6; // LM_STATS_TCP6_OFFLOAD
kstat_named_t txDiscards; // LM_STATS_XMIT_DISCARDS
kstat_named_t rxBytesUnicast; // LM_STATS_DIRECTED_BYTES_RCV
kstat_named_t rxBytesMulticast; // LM_STATS_MULTICAST_BYTES_RCV
kstat_named_t rxBytesBroadcast; // LM_STATS_BROADCAST_BYTES_RCV
kstat_named_t txBytesUnicast; // LM_STATS_DIRECTED_BYTES_XMIT
kstat_named_t txBytesMulticast; // LM_STATS_MULTICAST_BYTES_XMIT
kstat_named_t txBytesBroadcast; // LM_STATS_BROADCAST_BYTES_XMIT
} BnxeKstatEthStats;
#define BNXE_KSTAT_ETH_STATS_SIZE (sizeof(BnxeKstatEthStats) / sizeof(kstat_named_t))
typedef struct _BnxeKstatFcoe
{
kstat_named_t pdev_hi;
kstat_named_t pdev_lo;
kstat_named_t instance;
kstat_named_t macAddr;
kstat_named_t pwwn_hi;
kstat_named_t pwwn_lo;
kstat_named_t mtu;
kstat_named_t initWqeTx;
kstat_named_t initWqeTxErr;
kstat_named_t initCqeRx;
kstat_named_t initCqeRxErr;
kstat_named_t offloadConnWqeTx;
kstat_named_t offloadConnWqeTxErr;
kstat_named_t offloadConnCqeRx;
kstat_named_t offloadConnCqeRxErr;
kstat_named_t enableConnWqeTx;
kstat_named_t enableConnWqeTxErr;
kstat_named_t enableConnCqeRx;
kstat_named_t enableConnCqeRxErr;
kstat_named_t disableConnWqeTx;
kstat_named_t disableConnWqeTxErr;
kstat_named_t disableConnCqeRx;
kstat_named_t disableConnCqeRxErr;
kstat_named_t destroyConnWqeTx;
kstat_named_t destroyConnWqeTxErr;
kstat_named_t destroyConnCqeRx;
kstat_named_t destroyConnCqeRxErr;
kstat_named_t destroyWqeTx;
kstat_named_t destroyWqeTxErr;
kstat_named_t destroyCqeRx;
kstat_named_t destroyCqeRxErr;
kstat_named_t compRequestCqeRx;
kstat_named_t compRequestCqeRxErr;
kstat_named_t statWqeTx;
kstat_named_t statWqeTxErr;
kstat_named_t statCqeRx;
kstat_named_t statCqeRxErr;
} BnxeKstatFcoe;
#define BNXE_KSTAT_FCOE_SIZE (sizeof(BnxeKstatFcoe) / sizeof(kstat_named_t))
typedef struct _BnxeKstatDcbx
{
kstat_named_t dcbx_sync;
kstat_named_t dcbx_vers;
kstat_named_t overwrite_settings;
kstat_named_t prio_tag;
kstat_named_t prio_tag_fcoe;
kstat_named_t prio_tag_iscsi;
kstat_named_t prio_tag_net;
kstat_named_t pfc;
kstat_named_t pfc_prio_0;
kstat_named_t pfc_prio_1;
kstat_named_t pfc_prio_2;
kstat_named_t pfc_prio_3;
kstat_named_t pfc_prio_4;
kstat_named_t pfc_prio_5;
kstat_named_t pfc_prio_6;
kstat_named_t pfc_prio_7;
kstat_named_t ets;
kstat_named_t ets_prio_0_pg;
kstat_named_t ets_prio_1_pg;
kstat_named_t ets_prio_2_pg;
kstat_named_t ets_prio_3_pg;
kstat_named_t ets_prio_4_pg;
kstat_named_t ets_prio_5_pg;
kstat_named_t ets_prio_6_pg;
kstat_named_t ets_prio_7_pg;
kstat_named_t ets_pg_0_bw;
kstat_named_t ets_pg_1_bw;
kstat_named_t ets_pg_2_bw;
kstat_named_t ets_pg_3_bw;
kstat_named_t ets_pg_4_bw;
kstat_named_t ets_pg_5_bw;
kstat_named_t ets_pg_6_bw;
kstat_named_t ets_pg_7_bw;
kstat_named_t lldp;
kstat_named_t lldp_tx_interval;
kstat_named_t lldp_tx_fast_interval;
kstat_named_t amib_apptlv_willing;
kstat_named_t amib_apptlv_tx;
kstat_named_t amib_apptlv_net_prio;
kstat_named_t amib_apptlv_tbl_0_prio;
kstat_named_t amib_apptlv_tbl_0_appid;
kstat_named_t amib_apptlv_tbl_1_prio;
kstat_named_t amib_apptlv_tbl_1_appid;
kstat_named_t amib_apptlv_tbl_2_prio;
kstat_named_t amib_apptlv_tbl_2_appid;
kstat_named_t amib_apptlv_tbl_3_prio;
kstat_named_t amib_apptlv_tbl_3_appid;
kstat_named_t amib_pgtlv_willing;
kstat_named_t amib_pgtlv_tx;
kstat_named_t amib_pgtlv_tc_supported;
kstat_named_t amib_pgtlv_ets;
kstat_named_t amib_pgtlv_pg_0_bw;
kstat_named_t amib_pgtlv_pg_1_bw;
kstat_named_t amib_pgtlv_pg_2_bw;
kstat_named_t amib_pgtlv_pg_3_bw;
kstat_named_t amib_pgtlv_pg_4_bw;
kstat_named_t amib_pgtlv_pg_5_bw;
kstat_named_t amib_pgtlv_pg_6_bw;
kstat_named_t amib_pgtlv_pg_7_bw;
kstat_named_t amib_pgtlv_prio_0_map;
kstat_named_t amib_pgtlv_prio_1_map;
kstat_named_t amib_pgtlv_prio_2_map;
kstat_named_t amib_pgtlv_prio_3_map;
kstat_named_t amib_pgtlv_prio_4_map;
kstat_named_t amib_pgtlv_prio_5_map;
kstat_named_t amib_pgtlv_prio_6_map;
kstat_named_t amib_pgtlv_prio_7_map;
kstat_named_t amib_pfctlv_willing;
kstat_named_t amib_pfctlv_tx;
kstat_named_t amib_pfctlv_pfc;
kstat_named_t amib_pfctlv_pfc_map;
kstat_named_t rmib_apptlv_willing;
kstat_named_t rmib_apptlv_tbl_0_prio;
kstat_named_t rmib_apptlv_tbl_0_appid;
kstat_named_t rmib_apptlv_tbl_1_prio;
kstat_named_t rmib_apptlv_tbl_1_appid;
kstat_named_t rmib_apptlv_tbl_2_prio;
kstat_named_t rmib_apptlv_tbl_2_appid;
kstat_named_t rmib_apptlv_tbl_3_prio;
kstat_named_t rmib_apptlv_tbl_3_appid;
kstat_named_t rmib_pgtlv_willing;
kstat_named_t rmib_pgtlv_tc_supported;
kstat_named_t rmib_pgtlv_pg_0_bw;
kstat_named_t rmib_pgtlv_pg_1_bw;
kstat_named_t rmib_pgtlv_pg_2_bw;
kstat_named_t rmib_pgtlv_pg_3_bw;
kstat_named_t rmib_pgtlv_pg_4_bw;
kstat_named_t rmib_pgtlv_pg_5_bw;
kstat_named_t rmib_pgtlv_pg_6_bw;
kstat_named_t rmib_pgtlv_pg_7_bw;
kstat_named_t rmib_pgtlv_prio_0_map;
kstat_named_t rmib_pgtlv_prio_1_map;
kstat_named_t rmib_pgtlv_prio_2_map;
kstat_named_t rmib_pgtlv_prio_3_map;
kstat_named_t rmib_pgtlv_prio_4_map;
kstat_named_t rmib_pgtlv_prio_5_map;
kstat_named_t rmib_pgtlv_prio_6_map;
kstat_named_t rmib_pgtlv_prio_7_map;
kstat_named_t rmib_pfctlv_willing;
kstat_named_t rmib_pfctlv_pfc_map;
kstat_named_t rmib_pfctlv_capable;
kstat_named_t lmib_apptlv_tbl_0_prio;
kstat_named_t lmib_apptlv_tbl_0_appid;
kstat_named_t lmib_apptlv_tbl_1_prio;
kstat_named_t lmib_apptlv_tbl_1_appid;
kstat_named_t lmib_apptlv_tbl_2_prio;
kstat_named_t lmib_apptlv_tbl_2_appid;
kstat_named_t lmib_apptlv_tbl_3_prio;
kstat_named_t lmib_apptlv_tbl_3_appid;
kstat_named_t lmib_apptlv_mismatch;
kstat_named_t lmib_pgtlv_ets;
kstat_named_t lmib_pgtlv_tc_supported;
kstat_named_t lmib_pgtlv_pg_0_bw;
kstat_named_t lmib_pgtlv_pg_1_bw;
kstat_named_t lmib_pgtlv_pg_2_bw;
kstat_named_t lmib_pgtlv_pg_3_bw;
kstat_named_t lmib_pgtlv_pg_4_bw;
kstat_named_t lmib_pgtlv_pg_5_bw;
kstat_named_t lmib_pgtlv_pg_6_bw;
kstat_named_t lmib_pgtlv_pg_7_bw;
kstat_named_t lmib_pgtlv_prio_0_map;
kstat_named_t lmib_pgtlv_prio_1_map;
kstat_named_t lmib_pgtlv_prio_2_map;
kstat_named_t lmib_pgtlv_prio_3_map;
kstat_named_t lmib_pgtlv_prio_4_map;
kstat_named_t lmib_pgtlv_prio_5_map;
kstat_named_t lmib_pgtlv_prio_6_map;
kstat_named_t lmib_pgtlv_prio_7_map;
kstat_named_t lmib_pfctlv_pfc;
kstat_named_t lmib_pfctlv_pfc_map;
kstat_named_t lmib_pfctlv_capable;
kstat_named_t lmib_pfctlv_mismatch;
kstat_named_t dcbx_frames_rx;
kstat_named_t dcbx_frames_tx;
kstat_named_t pfc_frames_rx;
kstat_named_t pfc_frames_tx;
} BnxeKstatDcbx;
#define BNXE_KSTAT_DCBX_SIZE (sizeof(BnxeKstatDcbx) / sizeof(kstat_named_t))
typedef struct _BnxeKstatRxq
{
kstat_named_t rxqBdTotal;
kstat_named_t rxqBdLeft;
kstat_named_t rxqBdPageCnt;
kstat_named_t rxqBdsPerPage;
kstat_named_t rxqBdSize;
kstat_named_t rxqBdsSkipEop;
kstat_named_t rxqBdProdIdx;
kstat_named_t rxqBdConsIdx;
kstat_named_t hwRxqConIdx;
kstat_named_t sgeBdTotal;
kstat_named_t sgeBdLeft;
kstat_named_t sgeBdPageCnt;
kstat_named_t sgeBdsPerPage;
kstat_named_t sgeBdSize;
kstat_named_t sgeBdsSkipEop;
kstat_named_t sgeBdProdIdx;
kstat_named_t sgeBdConsIdx;
kstat_named_t rcqBdTotal;
kstat_named_t rcqBdLeft;
kstat_named_t rcqBdPageCnt;
kstat_named_t rcqBdsPerPage;
kstat_named_t rcqBdSize;
kstat_named_t rcqBdsSkipEop;
kstat_named_t rcqBdProdIdx;
kstat_named_t rcqBdConsIdx;
kstat_named_t hwRcqConIdx;
kstat_named_t rxFreeDescs;
kstat_named_t rxActiveDescs;
kstat_named_t rxDoneDescs;
kstat_named_t rxWaitingDescs;
kstat_named_t rxCopied;
kstat_named_t rxDiscards;
kstat_named_t rxBufUpInStack;
kstat_named_t rxLowWater;
kstat_named_t inPollMode;
kstat_named_t pollCnt;
kstat_named_t intrDisableCnt;
kstat_named_t intrEnableCnt;
kstat_named_t genNumber;
} BnxeKstatRxq;
#define BNXE_KSTAT_RXQ_SIZE (sizeof(BnxeKstatRxq) / sizeof(kstat_named_t))
typedef struct _BnxeKstatTxq
{
kstat_named_t txBdTotal;
kstat_named_t txBdLeft;
kstat_named_t txBdPageCnt;
kstat_named_t txBdsPerPage;
kstat_named_t txBdSize;
kstat_named_t txBdsSkipEop;
kstat_named_t hwTxqConIdx;
kstat_named_t txPktIdx;
kstat_named_t txBdProdIdx;
kstat_named_t txBdConsIdx;
kstat_named_t txSentPkts;
kstat_named_t txFreeDesc;
kstat_named_t txWaitingPkts;
kstat_named_t txLowWater;
kstat_named_t txFailed;
kstat_named_t txDiscards;
kstat_named_t txRecycle;
kstat_named_t txCopied;
kstat_named_t txBlocked;
kstat_named_t txWait;
} BnxeKstatTxq;
#define BNXE_KSTAT_TXQ_SIZE (sizeof(BnxeKstatTxq) / sizeof(kstat_named_t))
static int BnxeKstatUpdate(kstat_t * kstats,
int rw)
{
BnxeKstat * pStats = (BnxeKstat *)kstats->ks_data;
um_device_t * pUM = (um_device_t *)kstats->ks_private;
lm_device_t * pLM = (lm_device_t *)pUM;
char buf[17]; /* 16 max for kstat string */
if (rw == KSTAT_WRITE)
{
return EACCES;
}
BNXE_LOCK_ENTER_STATS(pUM);
snprintf(buf, sizeof(buf), "%p", (void *)pUM);
strncpy(pStats->umdev_hi.value.c, &buf[0], 8);
pStats->umdev_hi.value.c[8] = 0;
strncpy(pStats->umdev_lo.value.c, &buf[8], 8);
pStats->umdev_lo.value.c[8] = 0;
strncpy(pStats->version.value.c, pUM->version, sizeof(pStats->version.value.c));
strncpy(pStats->versionFW.value.c, pUM->versionFW, sizeof(pStats->versionFW.value.c));
strncpy(pStats->versionBC.value.c, pUM->versionBC, sizeof(pStats->versionBC.value.c));
strncpy(pStats->chipName.value.c, pUM->chipName, sizeof(pStats->chipName.value.c));
strncpy(pStats->chipID.value.c, pUM->chipID, sizeof(pStats->chipID.value.c));
strncpy(pStats->devBDF.value.c, pUM->bus_dev_func, sizeof(pStats->devBDF.value.c));
strncpy(pStats->devID.value.c, pUM->vendor_device, sizeof(pStats->devID.value.c));
strncpy(pStats->multiFunction.value.c,
((pUM->lm_dev.params.mf_mode == SINGLE_FUNCTION) ? "Single" :
(pUM->lm_dev.params.mf_mode == MULTI_FUNCTION_SD) ? "MF-SD" :
(pUM->lm_dev.params.mf_mode == MULTI_FUNCTION_SI) ? "MF-SI" :
(pUM->lm_dev.params.mf_mode == MULTI_FUNCTION_AFEX) ? "MF-AFEX" :
"Unknown"),
sizeof(pStats->multiFunction.value.c));
pStats->multiFunctionVnics.value.ui64 = IS_MULTI_VNIC(&pUM->lm_dev) ? pLM->params.vnics_per_port : 0;
snprintf(pStats->macAddr.value.c, 16, "%02x%02x%02x%02x%02x%02x",
pLM->params.mac_addr[0], pLM->params.mac_addr[1],
pLM->params.mac_addr[2], pLM->params.mac_addr[3],
pLM->params.mac_addr[4], pLM->params.mac_addr[5]);
pStats->hwInitDone.value.ui64 = pUM->hwInitDone;
snprintf(pStats->clientsHw.value.c, 16, BnxeClientsHw(pUM));
snprintf(pStats->clientsDevi.value.c, 16, BnxeClientsDevi(pUM));
snprintf(pStats->clientsBound.value.c, 16, BnxeClientsBound(pUM));
pStats->txMsgPullUp.value.ui64 = pUM->txMsgPullUp;
strncpy(pStats->intrAlloc.value.c, pUM->intrAlloc, sizeof(pStats->intrAlloc.value.c));
pStats->intrFired.value.ui64 = pUM->intrFired;
pStats->timerFired.value.ui64 = pLM->vars.stats.stats_collect.timer_wakeup;
pStats->timerReply.value.ui64 = pLM->vars.stats.stats_collect.stats_fw.drv_counter;
pStats->timerNoReplyTotal.value.ui64 = pLM->vars.stats.stats_collect.stats_fw.timer_wakeup_no_completion_total;
pStats->timerNoReplyCurrent.value.ui64 = pLM->vars.stats.stats_collect.stats_fw.timer_wakeup_no_completion_current;
pStats->timerDone.value.ui64 = pLM->vars.stats.stats_collect.stats_fw.b_completion_done;
pStats->workQueueInstCnt.value.ui64 = s_list_entry_cnt(&pUM->workqs.instq.workQueue);
pStats->workItemInstQueued.value.ui64 = pUM->workqs.instq.workItemQueued;
pStats->workItemInstError.value.ui64 = pUM->workqs.instq.workItemError;
pStats->workItemInstComplete.value.ui64 = pUM->workqs.instq.workItemComplete;
pStats->workItemInstHighWater.value.ui64 = pUM->workqs.instq.highWater;
pStats->workQueueDelayCnt.value.ui64 = s_list_entry_cnt(&pUM->workqs.delayq.workQueue);
pStats->workItemDelayQueued.value.ui64 = pUM->workqs.delayq.workItemQueued;
pStats->workItemDelayError.value.ui64 = pUM->workqs.delayq.workItemError;
pStats->workItemDelayComplete.value.ui64 = pUM->workqs.delayq.workItemComplete;
pStats->workItemDelayHighWater.value.ui64 = pUM->workqs.delayq.highWater;
pStats->memAllocBlocks.value.ui64 = d_list_entry_cnt(&pUM->memBlockList);
pStats->memAllocDMAs.value.ui64 = d_list_entry_cnt(&pUM->memDmaList);
pStats->memAllocBARs.value.ui64 = d_list_entry_cnt(&pUM->memRegionList);
BNXE_LOCK_EXIT_STATS(pUM);
return 0;
}
static int BnxeKstatLinkUpdate(kstat_t * kstats,
int rw)
{
BnxeKstatLink * pStats = (BnxeKstatLink *)kstats->ks_data;
um_device_t * pUM = (um_device_t *)kstats->ks_private;
lm_device_t * pLM = (lm_device_t *)pUM;
if (rw == KSTAT_WRITE)
{
return EACCES;
}
BNXE_LOCK_ENTER_STATS(pUM);
snprintf(pStats->clients.value.c, 16, BnxeClientsBound(pUM));
pStats->uptime.value.ui64 = (pUM->props.link_speed) ?
(ddi_get_time() - pUM->props.uptime) : 0;
pStats->mtuL2.value.ui64 = pUM->lm_dev.params.mtu[LM_CLI_IDX_NDIS];
pStats->mtuFCOE.value.ui64 = (BNXE_FCOE(pUM)) ?
pUM->lm_dev.params.mtu[LM_CLI_IDX_FCOE] :
0;
pStats->speed.value.ui64 = pUM->props.link_speed;
pStats->link.value.ui64 = (!pUM->props.link_speed) ? 0 : 1;
pStats->duplex.value.ui64 = pUM->props.link_duplex;
pStats->pauseRx.value.ui64 = pUM->props.link_rxpause;
pStats->pauseTx.value.ui64 = pUM->props.link_txpause;
BNXE_LOCK_EXIT_STATS(pUM);
return 0;
}
static int BnxeKstatIntrUpdate(kstat_t * kstats,
int rw)
{
BnxeKstatIntr * pStats = (BnxeKstatIntr *)kstats->ks_data;
um_device_t * pUM = (um_device_t *)kstats->ks_private;
lm_device_t * pLM = (lm_device_t *)pUM;
if (rw == KSTAT_WRITE)
{
return EACCES;
}
BNXE_LOCK_ENTER_STATS(pUM);
strncpy(pStats->intrAlloc.value.c, pUM->intrAlloc, sizeof(pStats->intrAlloc.value.c));
pStats->intrFired.value.ui64 = pUM->intrFired;
pStats->intrWrongState.value.ui64 = pLM->vars.dbg_intr_in_wrong_state;
pStats->intrInDisabled.value.ui64 = pLM->vars.dbg_intr_in_disabled;
pStats->intrZeroStatus.value.ui64 = pLM->vars.dbg_intr_zero_status;
pStats->sb_00.value.ui64 = pUM->intrSbCnt[0];
pStats->sb_01.value.ui64 = pUM->intrSbCnt[1];
pStats->sb_02.value.ui64 = pUM->intrSbCnt[2];
pStats->sb_03.value.ui64 = pUM->intrSbCnt[3];
pStats->sb_04.value.ui64 = pUM->intrSbCnt[4];
pStats->sb_05.value.ui64 = pUM->intrSbCnt[5];
pStats->sb_06.value.ui64 = pUM->intrSbCnt[6];
pStats->sb_07.value.ui64 = pUM->intrSbCnt[7];
pStats->sb_08.value.ui64 = pUM->intrSbCnt[8];
pStats->sb_09.value.ui64 = pUM->intrSbCnt[9];
pStats->sb_10.value.ui64 = pUM->intrSbCnt[10];
pStats->sb_11.value.ui64 = pUM->intrSbCnt[11];
pStats->sb_12.value.ui64 = pUM->intrSbCnt[12];
pStats->sb_13.value.ui64 = pUM->intrSbCnt[13];
pStats->sb_14.value.ui64 = pUM->intrSbCnt[14];
pStats->sb_15.value.ui64 = pUM->intrSbCnt[15];
pStats->sb_16.value.ui64 = pUM->intrSbCnt[16];
pStats->sb_nc_00.value.ui64 = pUM->intrSbNoChangeCnt[0];
pStats->sb_nc_01.value.ui64 = pUM->intrSbNoChangeCnt[1];
pStats->sb_nc_02.value.ui64 = pUM->intrSbNoChangeCnt[2];
pStats->sb_nc_03.value.ui64 = pUM->intrSbNoChangeCnt[3];
pStats->sb_nc_04.value.ui64 = pUM->intrSbNoChangeCnt[4];
pStats->sb_nc_05.value.ui64 = pUM->intrSbNoChangeCnt[5];
pStats->sb_nc_06.value.ui64 = pUM->intrSbNoChangeCnt[6];
pStats->sb_nc_07.value.ui64 = pUM->intrSbNoChangeCnt[7];
pStats->sb_nc_08.value.ui64 = pUM->intrSbNoChangeCnt[8];
pStats->sb_nc_09.value.ui64 = pUM->intrSbNoChangeCnt[9];
pStats->sb_nc_10.value.ui64 = pUM->intrSbNoChangeCnt[10];
pStats->sb_nc_11.value.ui64 = pUM->intrSbNoChangeCnt[11];
pStats->sb_nc_12.value.ui64 = pUM->intrSbNoChangeCnt[12];
pStats->sb_nc_13.value.ui64 = pUM->intrSbNoChangeCnt[13];
pStats->sb_nc_14.value.ui64 = pUM->intrSbNoChangeCnt[14];
pStats->sb_nc_15.value.ui64 = pUM->intrSbNoChangeCnt[15];
pStats->sb_nc_16.value.ui64 = pUM->intrSbNoChangeCnt[16];
pStats->sb_poll_00.value.ui64 = pUM->intrSbPollCnt[0];
pStats->sb_poll_01.value.ui64 = pUM->intrSbPollCnt[1];
pStats->sb_poll_02.value.ui64 = pUM->intrSbPollCnt[2];
pStats->sb_poll_03.value.ui64 = pUM->intrSbPollCnt[3];
pStats->sb_poll_04.value.ui64 = pUM->intrSbPollCnt[4];
pStats->sb_poll_05.value.ui64 = pUM->intrSbPollCnt[5];
pStats->sb_poll_06.value.ui64 = pUM->intrSbPollCnt[6];
pStats->sb_poll_07.value.ui64 = pUM->intrSbPollCnt[7];
pStats->sb_poll_08.value.ui64 = pUM->intrSbPollCnt[8];
pStats->sb_poll_09.value.ui64 = pUM->intrSbPollCnt[9];
pStats->sb_poll_10.value.ui64 = pUM->intrSbPollCnt[10];
pStats->sb_poll_11.value.ui64 = pUM->intrSbPollCnt[11];
pStats->sb_poll_12.value.ui64 = pUM->intrSbPollCnt[12];
pStats->sb_poll_13.value.ui64 = pUM->intrSbPollCnt[13];
pStats->sb_poll_14.value.ui64 = pUM->intrSbPollCnt[14];
pStats->sb_poll_15.value.ui64 = pUM->intrSbPollCnt[15];
pStats->sb_poll_16.value.ui64 = pUM->intrSbPollCnt[16];
pStats->sb_poll_nc_00.value.ui64 = pUM->intrSbPollNoChangeCnt[0];
pStats->sb_poll_nc_01.value.ui64 = pUM->intrSbPollNoChangeCnt[1];
pStats->sb_poll_nc_02.value.ui64 = pUM->intrSbPollNoChangeCnt[2];
pStats->sb_poll_nc_03.value.ui64 = pUM->intrSbPollNoChangeCnt[3];
pStats->sb_poll_nc_04.value.ui64 = pUM->intrSbPollNoChangeCnt[4];
pStats->sb_poll_nc_05.value.ui64 = pUM->intrSbPollNoChangeCnt[5];
pStats->sb_poll_nc_06.value.ui64 = pUM->intrSbPollNoChangeCnt[6];
pStats->sb_poll_nc_07.value.ui64 = pUM->intrSbPollNoChangeCnt[7];
pStats->sb_poll_nc_08.value.ui64 = pUM->intrSbPollNoChangeCnt[8];
pStats->sb_poll_nc_09.value.ui64 = pUM->intrSbPollNoChangeCnt[9];
pStats->sb_poll_nc_10.value.ui64 = pUM->intrSbPollNoChangeCnt[10];
pStats->sb_poll_nc_11.value.ui64 = pUM->intrSbPollNoChangeCnt[11];
pStats->sb_poll_nc_12.value.ui64 = pUM->intrSbPollNoChangeCnt[12];
pStats->sb_poll_nc_13.value.ui64 = pUM->intrSbPollNoChangeCnt[13];
pStats->sb_poll_nc_14.value.ui64 = pUM->intrSbPollNoChangeCnt[14];
pStats->sb_poll_nc_15.value.ui64 = pUM->intrSbPollNoChangeCnt[15];
pStats->sb_poll_nc_16.value.ui64 = pUM->intrSbPollNoChangeCnt[16];
BNXE_LOCK_EXIT_STATS(pUM);
return 0;
}
static int BnxeKstatL2ChipUpdate(kstat_t * kstats,
int rw)
{
BnxeKstatL2Chip * pStats = (BnxeKstatL2Chip *)kstats->ks_data;
um_device_t * pUM = (um_device_t *)kstats->ks_private;
lm_device_t * pLM = (lm_device_t *)pUM;
b10_l2_chip_statistics_t b10_l2_stats;
if (rw == KSTAT_WRITE)
{
return EACCES;
}
BNXE_LOCK_ENTER_STATS(pUM);
lm_stats_get_l2_chip_stats(pLM, &b10_l2_stats,
L2_CHIP_STATISTICS_VER_NUM_1);
pStats->IfHCInOctets.value.ui64 = b10_l2_stats.IfHCInOctets;
pStats->IfHCInBadOctets.value.ui64 = b10_l2_stats.IfHCInBadOctets;
pStats->IfHCOutOctets.value.ui64 = b10_l2_stats.IfHCOutOctets;
pStats->IfHCOutBadOctets.value.ui64 = b10_l2_stats.IfHCOutBadOctets;
pStats->IfHCOutPkts.value.ui64 = b10_l2_stats.IfHCOutPkts;
pStats->IfHCInPkts.value.ui64 = b10_l2_stats.IfHCInPkts;
pStats->IfHCInUcastPkts.value.ui64 = b10_l2_stats.IfHCInUcastPkts;
pStats->IfHCInMulticastPkts.value.ui64 = b10_l2_stats.IfHCInMulticastPkts;
pStats->IfHCInBroadcastPkts.value.ui64 = b10_l2_stats.IfHCInBroadcastPkts;
pStats->IfHCOutUcastPkts.value.ui64 = b10_l2_stats.IfHCOutUcastPkts;
pStats->IfHCOutMulticastPkts.value.ui64 = b10_l2_stats.IfHCOutMulticastPkts;
pStats->IfHCOutBroadcastPkts.value.ui64 = b10_l2_stats.IfHCOutBroadcastPkts;
pStats->IfHCInUcastOctets.value.ui64 = b10_l2_stats.IfHCInUcastOctets;
pStats->IfHCInMulticastOctets.value.ui64 = b10_l2_stats.IfHCInMulticastOctets;
pStats->IfHCInBroadcastOctets.value.ui64 = b10_l2_stats.IfHCInBroadcastOctets;
pStats->IfHCOutUcastOctets.value.ui64 = b10_l2_stats.IfHCOutUcastOctets;
pStats->IfHCOutMulticastOctets.value.ui64 = b10_l2_stats.IfHCOutMulticastOctets;
pStats->IfHCOutBroadcastOctets.value.ui64 = b10_l2_stats.IfHCOutBroadcastOctets;
pStats->IfHCOutDiscards.value.ui64 = b10_l2_stats.IfHCOutDiscards;
pStats->IfHCInFalseCarrierErrors.value.ui64 = b10_l2_stats.IfHCInFalseCarrierErrors;
pStats->Dot3StatsInternalMacTransmitErrors.value.ui64 = b10_l2_stats.Dot3StatsInternalMacTransmitErrors;
pStats->Dot3StatsCarrierSenseErrors.value.ui64 = b10_l2_stats.Dot3StatsCarrierSenseErrors;
pStats->Dot3StatsFCSErrors.value.ui64 = b10_l2_stats.Dot3StatsFCSErrors;
pStats->Dot3StatsAlignmentErrors.value.ui64 = b10_l2_stats.Dot3StatsAlignmentErrors;
pStats->Dot3StatsSingleCollisionFrames.value.ui64 = b10_l2_stats.Dot3StatsSingleCollisionFrames;
pStats->Dot3StatsMultipleCollisionFrames.value.ui64 = b10_l2_stats.Dot3StatsMultipleCollisionFrames;
pStats->Dot3StatsDeferredTransmissions.value.ui64 = b10_l2_stats.Dot3StatsDeferredTransmissions;
pStats->Dot3StatsExcessiveCollisions.value.ui64 = b10_l2_stats.Dot3StatsExcessiveCollisions;
pStats->Dot3StatsLateCollisions.value.ui64 = b10_l2_stats.Dot3StatsLateCollisions;
pStats->EtherStatsCollisions.value.ui64 = b10_l2_stats.EtherStatsCollisions;
pStats->EtherStatsFragments.value.ui64 = b10_l2_stats.EtherStatsFragments;
pStats->EtherStatsJabbers.value.ui64 = b10_l2_stats.EtherStatsJabbers;
pStats->EtherStatsUndersizePkts.value.ui64 = b10_l2_stats.EtherStatsUndersizePkts;
pStats->EtherStatsOverrsizePkts.value.ui64 = b10_l2_stats.EtherStatsOverrsizePkts;
pStats->EtherStatsTx64Octets.value.ui64 = b10_l2_stats.EtherStatsPktsTx64Octets;
pStats->EtherStatsTx65to127Octets.value.ui64 = b10_l2_stats.EtherStatsPktsTx65Octetsto127Octets;
pStats->EtherStatsTx128to255Octets.value.ui64 = b10_l2_stats.EtherStatsPktsTx128Octetsto255Octets;
pStats->EtherStatsTx256to511Octets.value.ui64 = b10_l2_stats.EtherStatsPktsTx256Octetsto511Octets;
pStats->EtherStatsTx512to1023Octets.value.ui64 = b10_l2_stats.EtherStatsPktsTx512Octetsto1023Octets;
pStats->EtherStatsTx1024to1522Octets.value.ui64 = b10_l2_stats.EtherStatsPktsTx1024Octetsto1522Octets;
pStats->EtherStatsTxOver1522Octets.value.ui64 = b10_l2_stats.EtherStatsPktsTxOver1522Octets;
pStats->XonPauseFramesReceived.value.ui64 = b10_l2_stats.XonPauseFramesReceived;
pStats->XoffPauseFramesReceived.value.ui64 = b10_l2_stats.XoffPauseFramesReceived;
pStats->OutXonSent.value.ui64 = b10_l2_stats.OutXonSent;
pStats->OutXoffSent.value.ui64 = b10_l2_stats.OutXoffSent;
pStats->FlowControlDone.value.ui64 = b10_l2_stats.FlowControlDone;
pStats->MacControlFramesReceived.value.ui64 = b10_l2_stats.MacControlFramesReceived;
pStats->XoffStateEntered.value.ui64 = b10_l2_stats.XoffStateEntered;
pStats->IfInFramesL2FilterDiscards.value.ui64 = b10_l2_stats.IfInFramesL2FilterDiscards;
pStats->IfInTTL0Discards.value.ui64 = b10_l2_stats.IfInTTL0Discards;
pStats->IfInxxOverflowDiscards.value.ui64 = b10_l2_stats.IfInxxOverflowDiscards;
pStats->IfInMBUFDiscards.value.ui64 = b10_l2_stats.IfInMBUFDiscards;
pStats->IfInErrors.value.ui64 = b10_l2_stats.IfInErrors;
pStats->IfInErrorsOctets.value.ui64 = b10_l2_stats.IfInErrorsOctets;
pStats->IfInNoBrbBuffer.value.ui64 = b10_l2_stats.IfInNoBrbBuffer;
pStats->NigBrbPacket.value.ui64 = b10_l2_stats.Nig_brb_packet;
pStats->NigBrbTruncate.value.ui64 = b10_l2_stats.Nig_brb_truncate;
pStats->NigFlowCtrlDiscard.value.ui64 = b10_l2_stats.Nig_flow_ctrl_discard;
pStats->NigFlowCtrlOctets.value.ui64 = b10_l2_stats.Nig_flow_ctrl_octets;
pStats->NigFlowCtrlPacket.value.ui64 = b10_l2_stats.Nig_flow_ctrl_packet;
pStats->NigMngDiscard.value.ui64 = b10_l2_stats.Nig_mng_discard;
pStats->NigMngOctetInp.value.ui64 = b10_l2_stats.Nig_mng_octet_inp;
pStats->NigMngOctetOut.value.ui64 = b10_l2_stats.Nig_mng_octet_out;
pStats->NigMngPacketInp.value.ui64 = b10_l2_stats.Nig_mng_packet_inp;
pStats->NigMngPacketOut.value.ui64 = b10_l2_stats.Nig_mng_packet_out;
pStats->NigPbfOctets.value.ui64 = b10_l2_stats.Nig_pbf_octets;
pStats->NigPbfPacket.value.ui64 = b10_l2_stats.Nig_pbf_packet;
pStats->NigSafcInp.value.ui64 = b10_l2_stats.Nig_safc_inp;
BNXE_LOCK_EXIT_STATS(pUM);
return 0;
}
static int BnxeKstatL2DriverUpdate(kstat_t * kstats,
int rw)
{
BnxeKstatL2Driver * pStats = (BnxeKstatL2Driver *)kstats->ks_data;
um_device_t * pUM = (um_device_t *)kstats->ks_private;
lm_device_t * pLM = (lm_device_t *)pUM;
b10_l2_driver_statistics_t b10_l2_stats;
if (rw == KSTAT_WRITE)
{
return EACCES;
}
BNXE_LOCK_ENTER_STATS(pUM);
lm_stats_get_l2_driver_stats(pLM, &b10_l2_stats);
pStats->RxIPv4FragCount.value.ui64 = b10_l2_stats.RxIPv4FragCount;
pStats->RxIpCsErrorCount.value.ui64 = b10_l2_stats.RxIpCsErrorCount;
pStats->RxTcpCsErrorCount.value.ui64 = b10_l2_stats.RxTcpCsErrorCount;
pStats->RxLlcSnapCount.value.ui64 = b10_l2_stats.RxLlcSnapCount;
pStats->RxPhyErrorCount.value.ui64 = b10_l2_stats.RxPhyErrorCount;
pStats->RxIpv6ExtCount.value.ui64 = b10_l2_stats.RxIpv6ExtCount;
pStats->TxNoL2Bd.value.ui64 = b10_l2_stats.TxNoL2Bd;
pStats->TxNoSqWqe.value.ui64 = b10_l2_stats.TxNoSqWqe;
pStats->TxL2AssemblyBufUse.value.ui64 = b10_l2_stats.TxL2AssemblyBufUse;
BNXE_LOCK_EXIT_STATS(pUM);
return 0;
}
static int BnxeKstatL2StatsUpdate(kstat_t * kstats,
int rw)
{
BnxeKstatEthStats * pStats = (BnxeKstatEthStats *)kstats->ks_data;
um_device_t * pUM = (um_device_t *)kstats->ks_private;
lm_device_t * pLM = (lm_device_t *)pUM;
if (rw == KSTAT_WRITE)
{
return EACCES;
}
BNXE_LOCK_ENTER_STATS(pUM);
lm_get_stats(pLM, LM_STATS_FRAMES_XMITTED_OK, (u64_t *)&pStats->txFramesOk.value.ui64);
lm_get_stats(pLM, LM_STATS_FRAMES_RECEIVED_OK, (u64_t *)&pStats->rxFramesOk.value.ui64);
lm_get_stats(pLM, LM_STATS_ERRORED_TRANSMIT_CNT, (u64_t *)&pStats->txErr.value.ui64);
lm_get_stats(pLM, LM_STATS_ERRORED_RECEIVE_CNT, (u64_t *)&pStats->rxErr.value.ui64);
lm_get_stats(pLM, LM_STATS_RCV_CRC_ERROR, (u64_t *)&pStats->rxCrcErr.value.ui64);
lm_get_stats(pLM, LM_STATS_ALIGNMENT_ERROR, (u64_t *)&pStats->alignErr.value.ui64);
lm_get_stats(pLM, LM_STATS_SINGLE_COLLISION_FRAMES, (u64_t *)&pStats->collisionsSingle.value.ui64);
lm_get_stats(pLM, LM_STATS_MULTIPLE_COLLISION_FRAMES, (u64_t *)&pStats->collisionsMultiple.value.ui64);
lm_get_stats(pLM, LM_STATS_FRAMES_DEFERRED, (u64_t *)&pStats->framesDeferred.value.ui64);
lm_get_stats(pLM, LM_STATS_MAX_COLLISIONS, (u64_t *)&pStats->collisonsMax.value.ui64);
lm_get_stats(pLM, LM_STATS_RCV_OVERRUN, (u64_t *)&pStats->rxOverrun.value.ui64);
lm_get_stats(pLM, LM_STATS_XMIT_UNDERRUN, (u64_t *)&pStats->txOverrun.value.ui64);
lm_get_stats(pLM, LM_STATS_UNICAST_FRAMES_XMIT, (u64_t *)&pStats->txFramesUnicast.value.ui64);
lm_get_stats(pLM, LM_STATS_MULTICAST_FRAMES_XMIT, (u64_t *)&pStats->txFramesMulticast.value.ui64);
lm_get_stats(pLM, LM_STATS_BROADCAST_FRAMES_XMIT, (u64_t *)&pStats->txFramesBroadcast.value.ui64);
lm_get_stats(pLM, LM_STATS_UNICAST_FRAMES_RCV, (u64_t *)&pStats->rxFramesUnicast.value.ui64);
lm_get_stats(pLM, LM_STATS_MULTICAST_FRAMES_RCV, (u64_t *)&pStats->rxFramesMulticast.value.ui64);
lm_get_stats(pLM, LM_STATS_BROADCAST_FRAMES_RCV, (u64_t *)&pStats->rxFramesBroadcast.value.ui64);
lm_get_stats(pLM, LM_STATS_RCV_NO_BUFFER_DROP, (u64_t *)&pStats->rxNoBufferDrop.value.ui64);
lm_get_stats(pLM, LM_STATS_BYTES_RCV, (u64_t *)&pStats->rxBytes.value.ui64);
lm_get_stats(pLM, LM_STATS_BYTES_XMIT, (u64_t *)&pStats->txBytes.value.ui64);
lm_get_stats(pLM, LM_STATS_IP4_OFFLOAD, (u64_t *)&pStats->offloadIP4.value.ui64);
lm_get_stats(pLM, LM_STATS_TCP_OFFLOAD, (u64_t *)&pStats->offloadTCP.value.ui64);
lm_get_stats(pLM, LM_STATS_IF_IN_DISCARDS, (u64_t *)&pStats->ifInDiscards.value.ui64);
lm_get_stats(pLM, LM_STATS_IF_IN_ERRORS, (u64_t *)&pStats->ifInErrors.value.ui64);
lm_get_stats(pLM, LM_STATS_IF_OUT_ERRORS, (u64_t *)&pStats->ifOutErrors.value.ui64);
lm_get_stats(pLM, LM_STATS_IP6_OFFLOAD, (u64_t *)&pStats->offloadIP6.value.ui64);
lm_get_stats(pLM, LM_STATS_TCP6_OFFLOAD, (u64_t *)&pStats->offloadTCP6.value.ui64);
lm_get_stats(pLM, LM_STATS_XMIT_DISCARDS, (u64_t *)&pStats->txDiscards.value.ui64);
lm_get_stats(pLM, LM_STATS_DIRECTED_BYTES_RCV, (u64_t *)&pStats->rxBytesUnicast.value.ui64);
lm_get_stats(pLM, LM_STATS_MULTICAST_BYTES_RCV, (u64_t *)&pStats->rxBytesMulticast.value.ui64);
lm_get_stats(pLM, LM_STATS_BROADCAST_BYTES_RCV, (u64_t *)&pStats->rxBytesBroadcast.value.ui64);
lm_get_stats(pLM, LM_STATS_DIRECTED_BYTES_XMIT, (u64_t *)&pStats->txBytesUnicast.value.ui64);
lm_get_stats(pLM, LM_STATS_MULTICAST_BYTES_XMIT, (u64_t *)&pStats->txBytesMulticast.value.ui64);
lm_get_stats(pLM, LM_STATS_BROADCAST_BYTES_XMIT, (u64_t *)&pStats->txBytesBroadcast.value.ui64);
BNXE_LOCK_EXIT_STATS(pUM);
return 0;
}
static int BnxeKstatFcoeUpdate(kstat_t * kstats,
int rw)
{
BnxeKstatFcoe * pStats = (BnxeKstatFcoe *)kstats->ks_data;
um_device_t * pUM = (um_device_t *)kstats->ks_private;
lm_device_t * pLM = (lm_device_t *)pUM;
char buf[17]; /* 16 max for kstat string */
if (rw == KSTAT_WRITE)
{
return EACCES;
}
BNXE_LOCK_ENTER_STATS(pUM);
if (pUM->fcoe.pDev)
{
snprintf(buf, sizeof(buf), "%p", (void *)pUM->fcoe.pDev);
strncpy(pStats->pdev_hi.value.c, &buf[0], 8);
pStats->pdev_hi.value.c[8] = 0;
strncpy(pStats->pdev_lo.value.c, &buf[8], 8);
pStats->pdev_lo.value.c[8] = 0;
snprintf(pStats->instance.value.c, 16, "bnxef%d",
ddi_get_instance(pUM->fcoe.pDev));
if ((pUM->fcoe.wwn.fcp_pwwn[0] == 0) &&
(pUM->fcoe.wwn.fcp_pwwn[1] == 0) &&
(pUM->fcoe.wwn.fcp_pwwn[2] == 0) &&
(pUM->fcoe.wwn.fcp_pwwn[3] == 0) &&
(pUM->fcoe.wwn.fcp_pwwn[4] == 0) &&
(pUM->fcoe.wwn.fcp_pwwn[5] == 0) &&
(pUM->fcoe.wwn.fcp_pwwn[6] == 0) &&
(pUM->fcoe.wwn.fcp_pwwn[7] == 0))
{
snprintf(buf, sizeof(buf), "%02x%02x%02x%02x%02x%02x%02x%02x",
0x20, 0x00,
pLM->hw_info.fcoe_mac_addr[0],
pLM->hw_info.fcoe_mac_addr[1],
pLM->hw_info.fcoe_mac_addr[2],
pLM->hw_info.fcoe_mac_addr[3],
pLM->hw_info.fcoe_mac_addr[4],
pLM->hw_info.fcoe_mac_addr[5]);
}
else
{
snprintf(buf, sizeof(buf), "%02x%02x%02x%02x%02x%02x%02x%02x",
pUM->fcoe.wwn.fcp_pwwn[0],
pUM->fcoe.wwn.fcp_pwwn[1],
pUM->fcoe.wwn.fcp_pwwn[2],
pUM->fcoe.wwn.fcp_pwwn[3],
pUM->fcoe.wwn.fcp_pwwn[4],
pUM->fcoe.wwn.fcp_pwwn[5],
pUM->fcoe.wwn.fcp_pwwn[7],
pUM->fcoe.wwn.fcp_pwwn[7]);
}
strncpy(pStats->pwwn_hi.value.c, &buf[0], 8);
pStats->pwwn_hi.value.c[8] = 0;
strncpy(pStats->pwwn_lo.value.c, &buf[8], 8);
pStats->pwwn_lo.value.c[8] = 0;
}
else
{
strncpy(pStats->pdev_hi.value.c, "none", sizeof(pStats->pdev_hi.value.c));
strncpy(pStats->pdev_lo.value.c, "none", sizeof(pStats->pdev_lo.value.c));
strncpy(pStats->instance.value.c, "none", sizeof(pStats->instance.value.c));
strncpy(pStats->pwwn_hi.value.c, "none", sizeof(pStats->pwwn_hi.value.c));
strncpy(pStats->pwwn_lo.value.c, "none", sizeof(pStats->pwwn_lo.value.c));
}
snprintf(pStats->macAddr.value.c, 16, "%02x%02x%02x%02x%02x%02x",
pLM->hw_info.fcoe_mac_addr[0], pLM->hw_info.fcoe_mac_addr[1],
pLM->hw_info.fcoe_mac_addr[2], pLM->hw_info.fcoe_mac_addr[3],
pLM->hw_info.fcoe_mac_addr[4], pLM->hw_info.fcoe_mac_addr[5]);
pStats->mtu.value.ui64 = pUM->lm_dev.params.mtu[LM_CLI_IDX_FCOE];
pStats->initWqeTx.value.ui64 = pUM->fcoe.stats.initWqeTx;
pStats->initWqeTxErr.value.ui64 = pUM->fcoe.stats.initWqeTxErr;
pStats->initCqeRx.value.ui64 = pUM->fcoe.stats.initCqeRx;
pStats->initCqeRxErr.value.ui64 = pUM->fcoe.stats.initCqeRxErr;
pStats->offloadConnWqeTx.value.ui64 = pUM->fcoe.stats.offloadConnWqeTx;
pStats->offloadConnWqeTxErr.value.ui64 = pUM->fcoe.stats.offloadConnWqeTxErr;
pStats->offloadConnCqeRx.value.ui64 = pUM->fcoe.stats.offloadConnCqeRx;
pStats->offloadConnCqeRxErr.value.ui64 = pUM->fcoe.stats.offloadConnCqeRxErr;
pStats->enableConnWqeTx.value.ui64 = pUM->fcoe.stats.enableConnWqeTx;
pStats->enableConnWqeTxErr.value.ui64 = pUM->fcoe.stats.enableConnWqeTxErr;
pStats->enableConnCqeRx.value.ui64 = pUM->fcoe.stats.enableConnCqeRx;
pStats->enableConnCqeRxErr.value.ui64 = pUM->fcoe.stats.enableConnCqeRxErr;
pStats->disableConnWqeTx.value.ui64 = pUM->fcoe.stats.disableConnWqeTx;
pStats->disableConnWqeTxErr.value.ui64 = pUM->fcoe.stats.disableConnWqeTxErr;
pStats->disableConnCqeRx.value.ui64 = pUM->fcoe.stats.disableConnCqeRx;
pStats->disableConnCqeRxErr.value.ui64 = pUM->fcoe.stats.disableConnCqeRxErr;
pStats->destroyConnWqeTx.value.ui64 = pUM->fcoe.stats.destroyConnWqeTx;
pStats->destroyConnWqeTxErr.value.ui64 = pUM->fcoe.stats.destroyConnWqeTxErr;
pStats->destroyConnCqeRx.value.ui64 = pUM->fcoe.stats.destroyConnCqeRx;
pStats->destroyConnCqeRxErr.value.ui64 = pUM->fcoe.stats.destroyConnCqeRxErr;
pStats->destroyWqeTx.value.ui64 = pUM->fcoe.stats.destroyWqeTx;
pStats->destroyWqeTxErr.value.ui64 = pUM->fcoe.stats.destroyWqeTxErr;
pStats->destroyCqeRx.value.ui64 = pUM->fcoe.stats.destroyCqeRx;
pStats->destroyCqeRxErr.value.ui64 = pUM->fcoe.stats.destroyCqeRxErr;
pStats->compRequestCqeRx.value.ui64 = pUM->fcoe.stats.compRequestCqeRx;
pStats->compRequestCqeRxErr.value.ui64 = pUM->fcoe.stats.compRequestCqeRxErr;
pStats->statWqeTx.value.ui64 = pUM->fcoe.stats.statWqeTx;
pStats->statWqeTxErr.value.ui64 = pUM->fcoe.stats.statWqeTxErr;
pStats->statCqeRx.value.ui64 = pUM->fcoe.stats.statCqeRx;
pStats->statCqeRxErr.value.ui64 = pUM->fcoe.stats.statCqeRxErr;
BNXE_LOCK_EXIT_STATS(pUM);
return 0;
}
static int count_trailing_zeros(int number)
{
int x, y, z;
x = y = z = 0;
for (y = 7; y >= 0; y--)
{
x = number / (1 << y);
number = number - x * (1 << y);
z++;
if (x == 1)
{
z = 0;
}
}
/* Add fix for all zero value */
if (z == 8)
{
z = 0;
}
return z;
}
static int BnxeKstatDcbxUpdate(kstat_t * kstats,
int rw)
{
BnxeKstatDcbx * pStats = (BnxeKstatDcbx *)kstats->ks_data;
um_device_t * pUM = (um_device_t *)kstats->ks_private;
lm_device_t * pLM = (lm_device_t *)pUM;
b10_lldp_params_get_t lldp_params;
b10_dcbx_params_get_t dcbx_params;
int fcoe_priority = -1;
int iscsi_priority = -1;
admin_priority_app_table_t * app_table;
char buf[17]; /* 16 max for kstat string */
int i;
if (rw == KSTAT_WRITE)
{
return EACCES;
}
lm_dcbx_lldp_read_params(pLM, &lldp_params);
lm_dcbx_read_params(pLM, &dcbx_params);
BNXE_LOCK_ENTER_STATS(pUM);
snprintf(pStats->dcbx_sync.value.c, 16, "%s",
(!dcbx_params.config_dcbx_params.dcb_enable) ? "disabled" :
(dcbx_params.dcb_current_oper_state_bitmap &
DCBX_CURRENT_STATE_IS_SYNC) ? "IN SYNC" : "OUT OF SYNC");
snprintf(pStats->dcbx_vers.value.c, 16, "%s",
(dcbx_params.config_dcbx_params.admin_dcbx_version) ?
"IEEE" : "CEE");
snprintf(pStats->overwrite_settings.value.c, 16, "%s",
(dcbx_params.config_dcbx_params.overwrite_settings) ?
"yes" : "no");
if (dcbx_params.dcb_current_oper_state_bitmap &
PRIORITY_TAGGING_IS_CURRENTLY_OPERATIONAL)
{
snprintf(pStats->prio_tag.value.c, 16, "operational");
app_table = dcbx_params.local_priority_app_table;
for (i = 0; i <= 3; i++)
{
if (app_table[i].valid)
{
if ((app_table[i].traffic_type == TRAFFIC_TYPE_ETH) &&
(app_table[i].app_id == 0x8906))
{
fcoe_priority = count_trailing_zeros(app_table[i].priority);
}
if ((app_table[i].traffic_type != TRAFFIC_TYPE_ETH) &&
(app_table[i].app_id == 3260))
{
iscsi_priority = count_trailing_zeros(app_table[i].priority);
}
}
}
snprintf(pStats->prio_tag_fcoe.value.c, 16, "%d", fcoe_priority);
snprintf(pStats->prio_tag_iscsi.value.c, 16, "%d", iscsi_priority);
snprintf(pStats->prio_tag_net.value.c, 16, "%d",
dcbx_params.config_dcbx_params.admin_default_priority);
}
else
{
snprintf(pStats->prio_tag.value.c, 16, "not operational");
snprintf(pStats->prio_tag_fcoe.value.c, 16, "-");
snprintf(pStats->prio_tag_iscsi.value.c, 16, "-");
snprintf(pStats->prio_tag_net.value.c, 16, "-");
}
if (dcbx_params.dcb_current_oper_state_bitmap &
PFC_IS_CURRENTLY_OPERATIONAL)
{
snprintf(pStats->pfc.value.c, 16, "operational");
#define GET_PFC_PRIO(f, p) \
snprintf(pStats->f.value.c, 16, "%s", \
((dcbx_params.local_pfc_bitmap >> (p)) & 1) ? \
"enabled" : "disabled")
GET_PFC_PRIO(pfc_prio_0, 0);
GET_PFC_PRIO(pfc_prio_1, 1);
GET_PFC_PRIO(pfc_prio_2, 2);
GET_PFC_PRIO(pfc_prio_3, 3);
GET_PFC_PRIO(pfc_prio_4, 4);
GET_PFC_PRIO(pfc_prio_5, 5);
GET_PFC_PRIO(pfc_prio_6, 6);
GET_PFC_PRIO(pfc_prio_7, 7);
}
else
{
snprintf(pStats->pfc.value.c, 16, "not operational");
#define NO_PFC_PRIO(f) \
snprintf(pStats->f.value.c, 16, "-")
NO_PFC_PRIO(pfc_prio_0);
NO_PFC_PRIO(pfc_prio_1);
NO_PFC_PRIO(pfc_prio_2);
NO_PFC_PRIO(pfc_prio_3);
NO_PFC_PRIO(pfc_prio_4);
NO_PFC_PRIO(pfc_prio_5);
NO_PFC_PRIO(pfc_prio_6);
NO_PFC_PRIO(pfc_prio_7);
}
if (dcbx_params.dcb_current_oper_state_bitmap &
ETS_IS_CURRENTLY_OPERATIONAL)
{
snprintf(pStats->ets.value.c, 16, "operational");
#define GET_PRIO_PG(f, p) \
snprintf(pStats->f.value.c, 16, "%d", \
dcbx_params.local_configuration_ets_pg[p])
GET_PRIO_PG(ets_prio_0_pg, 0);
GET_PRIO_PG(ets_prio_1_pg, 1);
GET_PRIO_PG(ets_prio_2_pg, 2);
GET_PRIO_PG(ets_prio_3_pg, 3);
GET_PRIO_PG(ets_prio_4_pg, 4);
GET_PRIO_PG(ets_prio_5_pg, 5);
GET_PRIO_PG(ets_prio_6_pg, 6);
GET_PRIO_PG(ets_prio_7_pg, 7);
#define GET_PG_BW(f, p) \
snprintf(pStats->f.value.c, 16, "%d", \
dcbx_params.local_configuration_bw_percentage[p])
GET_PG_BW(ets_pg_0_bw, 0);
GET_PG_BW(ets_pg_1_bw, 1);
GET_PG_BW(ets_pg_2_bw, 2);
GET_PG_BW(ets_pg_3_bw, 3);
GET_PG_BW(ets_pg_4_bw, 4);
GET_PG_BW(ets_pg_5_bw, 5);
GET_PG_BW(ets_pg_6_bw, 6);
GET_PG_BW(ets_pg_7_bw, 7);
}
else
{
snprintf(pStats->ets.value.c, 16, "not operational");
#define NO_PRIO_PG(f) \
snprintf(pStats->f.value.c, 16, "-")
NO_PRIO_PG(ets_prio_0_pg);
NO_PRIO_PG(ets_prio_1_pg);
NO_PRIO_PG(ets_prio_2_pg);
NO_PRIO_PG(ets_prio_3_pg);
NO_PRIO_PG(ets_prio_4_pg);
NO_PRIO_PG(ets_prio_5_pg);
NO_PRIO_PG(ets_prio_6_pg);
NO_PRIO_PG(ets_prio_7_pg);
#define NO_PG_BW(f) \
snprintf(pStats->f.value.c, 16, "-")
NO_PG_BW(ets_pg_0_bw);
NO_PG_BW(ets_pg_1_bw);
NO_PG_BW(ets_pg_2_bw);
NO_PG_BW(ets_pg_3_bw);
NO_PG_BW(ets_pg_4_bw);
NO_PG_BW(ets_pg_5_bw);
NO_PG_BW(ets_pg_6_bw);
NO_PG_BW(ets_pg_7_bw);
}
if (lldp_params.admin_status && (lldp_params.admin_status != LLDP_DISABLED))
{
snprintf(pStats->lldp.value.c, 16, "%s",
(lldp_params.admin_status == LLDP_TX_ONLY) ? "tx only" :
(lldp_params.admin_status == LLDP_RX_ONLY) ? "rx only" :
(lldp_params.admin_status == LLDP_TX_RX) ? "tx and rx" :
"unknown");
snprintf(pStats->lldp_tx_interval.value.c, 16, "%d seconds",
lldp_params.config_lldp_params.msg_tx_interval);
snprintf(pStats->lldp_tx_fast_interval.value.c, 16, "%d seconds",
lldp_params.config_lldp_params.msg_fast_tx);
}
else
{
snprintf(pStats->lldp.value.c, 16, "disabled");
snprintf(pStats->lldp_tx_interval.value.c, 16, "-");
snprintf(pStats->lldp_tx_fast_interval.value.c, 16, "-");
}
/* -------------------- ADMIN MIB -------------------- */
snprintf(pStats->amib_apptlv_willing.value.c, 16, "%s",
(dcbx_params.config_dcbx_params.admin_app_priority_willing) ?
"willing" : "not willing");
snprintf(pStats->amib_apptlv_tx.value.c, 16, "%s",
(dcbx_params.config_dcbx_params.admin_application_priority_tx_enable) ?
"enabled" : "disabled");
snprintf(pStats->amib_apptlv_net_prio.value.c, 16, "%d",
dcbx_params.config_dcbx_params.admin_default_priority);
#define GET_PRIO_APP_TABLE(table, f1, f2) \
if (table.valid) \
{ \
snprintf(pStats->f1.value.c, 16, "%d", \
count_trailing_zeros(table.priority)); \
snprintf(pStats->f2.value.c, 16, \
(table.traffic_type == TRAFFIC_TYPE_ETH) ? \
"ether=0x%x" : "port=%d", \
table.app_id); \
} \
else \
{ \
snprintf(pStats->f1.value.c, 16, "-"); \
snprintf(pStats->f2.value.c, 16, "-"); \
}
GET_PRIO_APP_TABLE(dcbx_params.config_dcbx_params.
admin_priority_app_table[0],
amib_apptlv_tbl_0_prio,
amib_apptlv_tbl_0_appid);
GET_PRIO_APP_TABLE(dcbx_params.config_dcbx_params.
admin_priority_app_table[1],
amib_apptlv_tbl_1_prio,
amib_apptlv_tbl_1_appid);
GET_PRIO_APP_TABLE(dcbx_params.config_dcbx_params.
admin_priority_app_table[2],
amib_apptlv_tbl_2_prio,
amib_apptlv_tbl_2_appid);
GET_PRIO_APP_TABLE(dcbx_params.config_dcbx_params.
admin_priority_app_table[3],
amib_apptlv_tbl_3_prio,
amib_apptlv_tbl_3_appid);
snprintf(pStats->amib_pgtlv_willing.value.c, 16, "%s",
(dcbx_params.config_dcbx_params.admin_ets_willing) ?
"willing" : "not willing");
snprintf(pStats->amib_pgtlv_tx.value.c, 16, "%s",
(dcbx_params.config_dcbx_params.admin_ets_configuration_tx_enable) ?
"enabled" : "disabled");
snprintf(pStats->amib_pgtlv_tc_supported.value.c, 16, "%s",
(dcbx_params.config_dcbx_params.admin_tc_supported_tx_enable) ?
"advertised" : "not advertised");
snprintf(pStats->amib_pgtlv_ets.value.c, 16, "%s",
(dcbx_params.config_dcbx_params.admin_ets_enable) ?
"enabled" : "disabled");
#define AMIB_GET_PG_TLV_BW(f, p) \
snprintf(pStats->f.value.c, 16, "%d", \
dcbx_params.config_dcbx_params. \
admin_configuration_bw_percentage[p])
AMIB_GET_PG_TLV_BW(amib_pgtlv_pg_0_bw, 0);
AMIB_GET_PG_TLV_BW(amib_pgtlv_pg_1_bw, 1);
AMIB_GET_PG_TLV_BW(amib_pgtlv_pg_2_bw, 2);
AMIB_GET_PG_TLV_BW(amib_pgtlv_pg_3_bw, 3);
AMIB_GET_PG_TLV_BW(amib_pgtlv_pg_4_bw, 4);
AMIB_GET_PG_TLV_BW(amib_pgtlv_pg_5_bw, 5);
AMIB_GET_PG_TLV_BW(amib_pgtlv_pg_6_bw, 6);
AMIB_GET_PG_TLV_BW(amib_pgtlv_pg_7_bw, 7);
#define AMIB_GET_PG_TLV_MAP(f, p) \
snprintf(pStats->f.value.c, 16, "%d", \
dcbx_params.config_dcbx_params. \
admin_configuration_ets_pg[p])
AMIB_GET_PG_TLV_MAP(amib_pgtlv_prio_0_map, 0);
AMIB_GET_PG_TLV_MAP(amib_pgtlv_prio_1_map, 1);
AMIB_GET_PG_TLV_MAP(amib_pgtlv_prio_2_map, 2);
AMIB_GET_PG_TLV_MAP(amib_pgtlv_prio_3_map, 3);
AMIB_GET_PG_TLV_MAP(amib_pgtlv_prio_4_map, 4);
AMIB_GET_PG_TLV_MAP(amib_pgtlv_prio_5_map, 5);
AMIB_GET_PG_TLV_MAP(amib_pgtlv_prio_6_map, 6);
AMIB_GET_PG_TLV_MAP(amib_pgtlv_prio_7_map, 7);
snprintf(pStats->amib_pfctlv_willing.value.c, 16, "%s",
(dcbx_params.config_dcbx_params.admin_pfc_willing) ?
"willing" : "not willing");
snprintf(pStats->amib_pfctlv_tx.value.c, 16, "%s",
(dcbx_params.config_dcbx_params.admin_pfc_tx_enable) ?
"enabled" : "disabled");
if (dcbx_params.config_dcbx_params.admin_pfc_enable)
{
snprintf(pStats->amib_pfctlv_pfc.value.c, 16, "enabled");
snprintf(pStats->amib_pfctlv_pfc_map.value.c, 16, "%d%d%d%d%d%d%d%d",
(dcbx_params.config_dcbx_params.admin_pfc_bitmap % 2),
((dcbx_params.config_dcbx_params.admin_pfc_bitmap / 2) % 2),
((dcbx_params.config_dcbx_params.admin_pfc_bitmap / 4) % 2),
((dcbx_params.config_dcbx_params.admin_pfc_bitmap / 8) % 2),
((dcbx_params.config_dcbx_params.admin_pfc_bitmap / 16) % 2),
((dcbx_params.config_dcbx_params.admin_pfc_bitmap / 32) % 2),
((dcbx_params.config_dcbx_params.admin_pfc_bitmap / 64) % 2),
((dcbx_params.config_dcbx_params.admin_pfc_bitmap / 128) % 2));
}
else
{
snprintf(pStats->amib_pfctlv_pfc.value.c, 16, "disabled");
snprintf(pStats->amib_pfctlv_pfc_map.value.c, 16, "-");
}
/* -------------------- REMOTE MIB -------------------- */
snprintf(pStats->rmib_apptlv_willing.value.c, 16, "%s",
(dcbx_params.remote_app_priority_willing) ?
"willing" : "not willing");
GET_PRIO_APP_TABLE(dcbx_params.remote_priority_app_table[0],
rmib_apptlv_tbl_0_prio,
rmib_apptlv_tbl_0_appid);
GET_PRIO_APP_TABLE(dcbx_params.remote_priority_app_table[1],
rmib_apptlv_tbl_1_prio,
rmib_apptlv_tbl_1_appid);
GET_PRIO_APP_TABLE(dcbx_params.remote_priority_app_table[2],
rmib_apptlv_tbl_2_prio,
rmib_apptlv_tbl_2_appid);
GET_PRIO_APP_TABLE(dcbx_params.remote_priority_app_table[3],
rmib_apptlv_tbl_3_prio,
rmib_apptlv_tbl_3_appid);
snprintf(pStats->rmib_pgtlv_willing.value.c, 16, "%s",
(dcbx_params.remote_ets_willing) ?
"willing" : "not willing");
#define RMIB_GET_PG_TLV_BW(f, p) \
snprintf(pStats->f.value.c, 16, "%d", \
dcbx_params.remote_configuration_bw_percentage[p])
RMIB_GET_PG_TLV_BW(rmib_pgtlv_pg_0_bw, 0);
RMIB_GET_PG_TLV_BW(rmib_pgtlv_pg_1_bw, 1);
RMIB_GET_PG_TLV_BW(rmib_pgtlv_pg_2_bw, 2);
RMIB_GET_PG_TLV_BW(rmib_pgtlv_pg_3_bw, 3);
RMIB_GET_PG_TLV_BW(rmib_pgtlv_pg_4_bw, 4);
RMIB_GET_PG_TLV_BW(rmib_pgtlv_pg_5_bw, 5);
RMIB_GET_PG_TLV_BW(rmib_pgtlv_pg_6_bw, 6);
RMIB_GET_PG_TLV_BW(rmib_pgtlv_pg_7_bw, 7);
#define RMIB_GET_PG_TLV_MAP(f, p) \
snprintf(pStats->f.value.c, 16, "%d", \
dcbx_params.remote_configuration_ets_pg[p])
RMIB_GET_PG_TLV_MAP(rmib_pgtlv_prio_0_map, 0);
RMIB_GET_PG_TLV_MAP(rmib_pgtlv_prio_1_map, 1);
RMIB_GET_PG_TLV_MAP(rmib_pgtlv_prio_2_map, 2);
RMIB_GET_PG_TLV_MAP(rmib_pgtlv_prio_3_map, 3);
RMIB_GET_PG_TLV_MAP(rmib_pgtlv_prio_4_map, 4);
RMIB_GET_PG_TLV_MAP(rmib_pgtlv_prio_5_map, 5);
RMIB_GET_PG_TLV_MAP(rmib_pgtlv_prio_6_map, 6);
RMIB_GET_PG_TLV_MAP(rmib_pgtlv_prio_7_map, 7);
snprintf(pStats->rmib_pgtlv_tc_supported.value.c, 16, "%d",
dcbx_params.remote_tc_supported);
snprintf(pStats->rmib_pfctlv_willing.value.c, 16, "%s",
(dcbx_params.remote_pfc_willing) ?
"willing" : "not willing");
snprintf(pStats->rmib_pfctlv_pfc_map.value.c, 16, "%d%d%d%d%d%d%d%d",
(dcbx_params.remote_pfc_bitmap % 2),
((dcbx_params.remote_pfc_bitmap / 2) % 2),
((dcbx_params.remote_pfc_bitmap / 4) % 2),
((dcbx_params.remote_pfc_bitmap / 8) % 2),
((dcbx_params.remote_pfc_bitmap / 16) % 2),
((dcbx_params.remote_pfc_bitmap / 32) % 2),
((dcbx_params.remote_pfc_bitmap / 64) % 2),
((dcbx_params.remote_pfc_bitmap / 128) % 2));
snprintf(pStats->rmib_pfctlv_capable.value.c, 16, "%d",
dcbx_params.remote_pfc_cap);
/* -------------------- LOCAL MIB -------------------- */
GET_PRIO_APP_TABLE(dcbx_params.local_priority_app_table[0],
lmib_apptlv_tbl_0_prio,
lmib_apptlv_tbl_0_appid);
GET_PRIO_APP_TABLE(dcbx_params.local_priority_app_table[1],
lmib_apptlv_tbl_1_prio,
lmib_apptlv_tbl_1_appid);
GET_PRIO_APP_TABLE(dcbx_params.local_priority_app_table[2],
lmib_apptlv_tbl_2_prio,
lmib_apptlv_tbl_2_appid);
GET_PRIO_APP_TABLE(dcbx_params.local_priority_app_table[3],
lmib_apptlv_tbl_3_prio,
lmib_apptlv_tbl_3_appid);
snprintf(pStats->lmib_apptlv_mismatch.value.c, 16, "%s",
(dcbx_params.priority_app_mismatch) ? "yes" : "no");
snprintf(pStats->lmib_pgtlv_ets.value.c, 16, "%s",
(dcbx_params.local_ets_enable) ?
"enabled" : "disabled");
#define LMIB_GET_PG_TLV_BW(f, p) \
snprintf(pStats->f.value.c, 16, "%d", \
dcbx_params.local_configuration_bw_percentage[p])
LMIB_GET_PG_TLV_BW(lmib_pgtlv_pg_0_bw, 0);
LMIB_GET_PG_TLV_BW(lmib_pgtlv_pg_1_bw, 1);
LMIB_GET_PG_TLV_BW(lmib_pgtlv_pg_2_bw, 2);
LMIB_GET_PG_TLV_BW(lmib_pgtlv_pg_3_bw, 3);
LMIB_GET_PG_TLV_BW(lmib_pgtlv_pg_4_bw, 4);
LMIB_GET_PG_TLV_BW(lmib_pgtlv_pg_5_bw, 5);
LMIB_GET_PG_TLV_BW(lmib_pgtlv_pg_6_bw, 6);
LMIB_GET_PG_TLV_BW(lmib_pgtlv_pg_7_bw, 7);
#define LMIB_GET_PG_TLV_MAP(f, p) \
snprintf(pStats->f.value.c, 16, "%d", \
dcbx_params.local_configuration_ets_pg[p])
LMIB_GET_PG_TLV_MAP(lmib_pgtlv_prio_0_map, 0);
LMIB_GET_PG_TLV_MAP(lmib_pgtlv_prio_1_map, 1);
LMIB_GET_PG_TLV_MAP(lmib_pgtlv_prio_2_map, 2);
LMIB_GET_PG_TLV_MAP(lmib_pgtlv_prio_3_map, 3);
LMIB_GET_PG_TLV_MAP(lmib_pgtlv_prio_4_map, 4);
LMIB_GET_PG_TLV_MAP(lmib_pgtlv_prio_5_map, 5);
LMIB_GET_PG_TLV_MAP(lmib_pgtlv_prio_6_map, 6);
LMIB_GET_PG_TLV_MAP(lmib_pgtlv_prio_7_map, 7);
snprintf(pStats->lmib_pgtlv_tc_supported.value.c, 16, "%d",
dcbx_params.local_tc_supported);
if (dcbx_params.local_pfc_enable)
{
snprintf(pStats->lmib_pfctlv_pfc.value.c, 16, "enabled");
snprintf(pStats->lmib_pfctlv_pfc_map.value.c, 16, "%d%d%d%d%d%d%d%d",
(dcbx_params.local_pfc_bitmap % 2),
((dcbx_params.local_pfc_bitmap / 2) % 2),
((dcbx_params.local_pfc_bitmap / 4) % 2),
((dcbx_params.local_pfc_bitmap / 8) % 2),
((dcbx_params.local_pfc_bitmap / 16) % 2),
((dcbx_params.local_pfc_bitmap / 32) % 2),
((dcbx_params.local_pfc_bitmap / 64) % 2),
((dcbx_params.local_pfc_bitmap / 128) % 2));
snprintf(pStats->lmib_pfctlv_capable.value.c, 16, "%d",
dcbx_params.local_pfc_caps);
snprintf(pStats->lmib_pfctlv_mismatch.value.c, 16, "%s",
(dcbx_params.pfc_mismatch) ? "yes" : "no");
}
else
{
snprintf(pStats->lmib_pfctlv_pfc.value.c, 16, "disabled");
snprintf(pStats->lmib_pfctlv_pfc_map.value.c, 16, "-");
snprintf(pStats->lmib_pfctlv_capable.value.c, 16, "-");
snprintf(pStats->lmib_pfctlv_mismatch.value.c, 16, "-");
}
/* --------------------------------------------------- */
pStats->dcbx_frames_rx.value.ui64 = dcbx_params.dcbx_frames_received;
pStats->dcbx_frames_tx.value.ui64 = dcbx_params.dcbx_frames_sent;
pStats->pfc_frames_rx.value.ui64 = dcbx_params.pfc_frames_received;
pStats->pfc_frames_tx.value.ui64 = dcbx_params.pfc_frames_sent;
BNXE_LOCK_EXIT_STATS(pUM);
return 0;
}
static int BnxeKstatRxRingUpdate(kstat_t * kstats,
int rw)
{
BnxeKstatRxq * pStats = (BnxeKstatRxq *)kstats->ks_data;
KstatRingMap * pMap = (KstatRingMap *)kstats->ks_private;
um_device_t * pUM = (um_device_t *)pMap->pUM;
int idx = pMap->idx;
lm_device_t * pLM = (lm_device_t *)pUM;
lm_tx_chain_t * pTxq = &LM_TXQ(pLM, idx);
lm_rx_chain_t * pRxq = &LM_RXQ(pLM, idx);
lm_rcq_chain_t * pRcq = &LM_RCQ(pLM, idx);
if (rw == KSTAT_WRITE)
{
return EACCES;
}
BNXE_LOCK_ENTER_STATS(pUM);
pStats->rxqBdTotal.value.ui64 = pRxq->chain_arr[LM_RXQ_CHAIN_IDX_BD].capacity;
pStats->rxqBdLeft.value.ui64 = pRxq->chain_arr[LM_RXQ_CHAIN_IDX_BD].bd_left;
pStats->rxqBdPageCnt.value.ui64 = pRxq->chain_arr[LM_RXQ_CHAIN_IDX_BD].page_cnt;
pStats->rxqBdsPerPage.value.ui64 = pRxq->chain_arr[LM_RXQ_CHAIN_IDX_BD].bds_per_page;
pStats->rxqBdSize.value.ui64 = pRxq->chain_arr[LM_RXQ_CHAIN_IDX_BD].bd_size;
pStats->rxqBdsSkipEop.value.ui64 = pRxq->chain_arr[LM_RXQ_CHAIN_IDX_BD].bds_skip_eop;
pStats->rxqBdProdIdx.value.ui64 = pRxq->chain_arr[LM_RXQ_CHAIN_IDX_BD].prod_idx;
pStats->rxqBdConsIdx.value.ui64 = pRxq->chain_arr[LM_RXQ_CHAIN_IDX_BD].cons_idx;
pStats->hwRxqConIdx.value.ui64 =
(pRxq->hw_con_idx_ptr != NULL) ?
mm_le16_to_cpu(*pRxq->hw_con_idx_ptr) : 0;
pStats->sgeBdTotal.value.ui64 = pRxq->chain_arr[LM_RXQ_CHAIN_IDX_SGE].capacity;
pStats->sgeBdLeft.value.ui64 = pRxq->chain_arr[LM_RXQ_CHAIN_IDX_SGE].bd_left;
pStats->sgeBdPageCnt.value.ui64 = pRxq->chain_arr[LM_RXQ_CHAIN_IDX_SGE].page_cnt;
pStats->sgeBdsPerPage.value.ui64 = pRxq->chain_arr[LM_RXQ_CHAIN_IDX_SGE].bds_per_page;
pStats->sgeBdSize.value.ui64 = pRxq->chain_arr[LM_RXQ_CHAIN_IDX_SGE].bd_size;
pStats->sgeBdsSkipEop.value.ui64 = pRxq->chain_arr[LM_RXQ_CHAIN_IDX_SGE].bds_skip_eop;
pStats->sgeBdProdIdx.value.ui64 = pRxq->chain_arr[LM_RXQ_CHAIN_IDX_SGE].prod_idx;
pStats->sgeBdConsIdx.value.ui64 = pRxq->chain_arr[LM_RXQ_CHAIN_IDX_SGE].cons_idx;
pStats->rcqBdTotal.value.ui64 = pRcq->bd_chain.capacity;
pStats->rcqBdLeft.value.ui64 = pRcq->bd_chain.bd_left;
pStats->rcqBdPageCnt.value.ui64 = pRcq->bd_chain.page_cnt;
pStats->rcqBdsPerPage.value.ui64 = pRcq->bd_chain.bds_per_page;
pStats->rcqBdSize.value.ui64 = pRcq->bd_chain.bd_size;
pStats->rcqBdsSkipEop.value.ui64 = pRcq->bd_chain.bds_skip_eop;
pStats->rcqBdProdIdx.value.ui64 = pRcq->bd_chain.prod_idx;
pStats->rcqBdConsIdx.value.ui64 = pRcq->bd_chain.cons_idx;
pStats->hwRcqConIdx.value.ui64 =
(pRcq->hw_con_idx_ptr != NULL) ?
mm_le16_to_cpu(*pRcq->hw_con_idx_ptr) : 0;
pStats->rxFreeDescs.value.ui64 = s_list_entry_cnt(&LM_RXQ(pLM, idx).common.free_descq);
pStats->rxActiveDescs.value.ui64 = s_list_entry_cnt(&LM_RXQ(pLM, idx).active_descq);
pStats->rxDoneDescs.value.ui64 = s_list_entry_cnt(&pUM->rxq[idx].doneRxQ);
pStats->rxWaitingDescs.value.ui64 = s_list_entry_cnt(&pUM->rxq[idx].waitRxQ);
pStats->rxCopied.value.ui64 = pUM->rxq[idx].rxCopied;
pStats->rxDiscards.value.ui64 = pUM->rxq[idx].rxDiscards;
pStats->rxBufUpInStack.value.ui64 = pUM->rxq[idx].rxBufUpInStack;
pStats->rxLowWater.value.ui64 = pUM->rxq[idx].rxLowWater;
pStats->inPollMode.value.ui64 = pUM->rxq[idx].inPollMode;
pStats->pollCnt.value.ui64 = pUM->rxq[idx].pollCnt;
pStats->intrDisableCnt.value.ui64 = pUM->rxq[idx].intrDisableCnt;
pStats->intrEnableCnt.value.ui64 = pUM->rxq[idx].intrEnableCnt;
pStats->genNumber.value.ui64 = pUM->rxq[idx].genNumber;
BNXE_LOCK_EXIT_STATS(pUM);
return 0;
}
static int BnxeKstatTxRingUpdate(kstat_t * kstats,
int rw)
{
BnxeKstatTxq * pStats = (BnxeKstatTxq *)kstats->ks_data;
KstatRingMap * pMap = (KstatRingMap *)kstats->ks_private;
um_device_t * pUM = (um_device_t *)pMap->pUM;
int idx = pMap->idx;
lm_device_t * pLM = (lm_device_t *)pUM;
if (rw == KSTAT_WRITE)
{
return EACCES;
}
BNXE_LOCK_ENTER_STATS(pUM);
pStats->txBdTotal.value.ui64 = LM_TXQ(pLM, idx).bd_chain.capacity;
pStats->txBdLeft.value.ui64 = LM_TXQ(pLM, idx).bd_chain.bd_left;
pStats->txBdPageCnt.value.ui64 = LM_TXQ(pLM, idx).bd_chain.page_cnt;
pStats->txBdsPerPage.value.ui64 = LM_TXQ(pLM, idx).bd_chain.bds_per_page;
pStats->txBdSize.value.ui64 = LM_TXQ(pLM, idx).bd_chain.bd_size;
pStats->txBdsSkipEop.value.ui64 = LM_TXQ(pLM, idx).bd_chain.bds_skip_eop;
pStats->hwTxqConIdx.value.ui64 =
(LM_TXQ(pLM, idx).hw_con_idx_ptr != NULL) ?
mm_le16_to_cpu(*LM_TXQ(pLM, idx).hw_con_idx_ptr) : 0;
pStats->txPktIdx.value.ui64 = LM_TXQ(pLM, idx).pkt_idx;
pStats->txBdProdIdx.value.ui64 = LM_TXQ(pLM, idx).bd_chain.prod_idx;
pStats->txBdConsIdx.value.ui64 = LM_TXQ(pLM, idx).bd_chain.cons_idx;
pStats->txSentPkts.value.ui64 = s_list_entry_cnt(&pUM->txq[idx].sentTxQ);
pStats->txFreeDesc.value.ui64 = s_list_entry_cnt(&pUM->txq[idx].freeTxDescQ);
pStats->txWaitingPkts.value.ui64 = s_list_entry_cnt(&pUM->txq[idx].waitTxDescQ);
pStats->txLowWater.value.ui64 = pUM->txq[idx].txLowWater;
pStats->txFailed.value.ui64 = pUM->txq[idx].txFailed;
pStats->txDiscards.value.ui64 = pUM->txq[idx].txDiscards;
pStats->txRecycle.value.ui64 = pUM->txq[idx].txRecycle;
pStats->txCopied.value.ui64 = pUM->txq[idx].txCopied;
pStats->txBlocked.value.ui64 = pUM->txq[idx].txBlocked;
pStats->txWait.value.ui64 = pUM->txq[idx].txWait;
BNXE_LOCK_EXIT_STATS(pUM);
return 0;
}
boolean_t BnxeKstatInitRxQ(um_device_t * pUM,
int idx)
{
char buf[32];
BnxeKstatRxq * pStatsRxq;
#define BNXE_KSTAT_RXQ(f, t) kstat_named_init(&pStatsRxq->f, #f, t)
snprintf(buf, sizeof(buf), "rxq%d", idx);
if ((pUM->kstats_rxq[idx] = kstat_create("bnxe",
pUM->instance,
buf,
"net",
KSTAT_TYPE_NAMED,
BNXE_KSTAT_RXQ_SIZE,
0)) == NULL)
{
BnxeLogWarn(pUM, "Failed to create rxq%d kstat", idx);
return B_FALSE;
}
pStatsRxq = (BnxeKstatRxq *)pUM->kstats_rxq[idx]->ks_data;
BNXE_KSTAT_RXQ(rxqBdTotal, KSTAT_DATA_UINT64);
BNXE_KSTAT_RXQ(rxqBdLeft, KSTAT_DATA_UINT64);
BNXE_KSTAT_RXQ(rxqBdPageCnt, KSTAT_DATA_UINT64);
BNXE_KSTAT_RXQ(rxqBdsPerPage, KSTAT_DATA_UINT64);
BNXE_KSTAT_RXQ(rxqBdSize, KSTAT_DATA_UINT64);
BNXE_KSTAT_RXQ(rxqBdsSkipEop, KSTAT_DATA_UINT64);
BNXE_KSTAT_RXQ(rxqBdProdIdx, KSTAT_DATA_UINT64);
BNXE_KSTAT_RXQ(rxqBdConsIdx, KSTAT_DATA_UINT64);
BNXE_KSTAT_RXQ(hwRxqConIdx, KSTAT_DATA_UINT64);
BNXE_KSTAT_RXQ(sgeBdTotal, KSTAT_DATA_UINT64);
BNXE_KSTAT_RXQ(sgeBdLeft, KSTAT_DATA_UINT64);
BNXE_KSTAT_RXQ(sgeBdPageCnt, KSTAT_DATA_UINT64);
BNXE_KSTAT_RXQ(sgeBdsPerPage, KSTAT_DATA_UINT64);
BNXE_KSTAT_RXQ(sgeBdSize, KSTAT_DATA_UINT64);
BNXE_KSTAT_RXQ(sgeBdsSkipEop, KSTAT_DATA_UINT64);
BNXE_KSTAT_RXQ(sgeBdProdIdx, KSTAT_DATA_UINT64);
BNXE_KSTAT_RXQ(sgeBdConsIdx, KSTAT_DATA_UINT64);
BNXE_KSTAT_RXQ(rcqBdTotal, KSTAT_DATA_UINT64);
BNXE_KSTAT_RXQ(rcqBdLeft, KSTAT_DATA_UINT64);
BNXE_KSTAT_RXQ(rcqBdPageCnt, KSTAT_DATA_UINT64);
BNXE_KSTAT_RXQ(rcqBdsPerPage, KSTAT_DATA_UINT64);
BNXE_KSTAT_RXQ(rcqBdSize, KSTAT_DATA_UINT64);
BNXE_KSTAT_RXQ(rcqBdsSkipEop, KSTAT_DATA_UINT64);
BNXE_KSTAT_RXQ(rcqBdProdIdx, KSTAT_DATA_UINT64);
BNXE_KSTAT_RXQ(rcqBdConsIdx, KSTAT_DATA_UINT64);
BNXE_KSTAT_RXQ(hwRcqConIdx, KSTAT_DATA_UINT64);
BNXE_KSTAT_RXQ(rxFreeDescs, KSTAT_DATA_UINT64);
BNXE_KSTAT_RXQ(rxActiveDescs, KSTAT_DATA_UINT64);
BNXE_KSTAT_RXQ(rxDoneDescs, KSTAT_DATA_UINT64);
BNXE_KSTAT_RXQ(rxWaitingDescs, KSTAT_DATA_UINT64);
BNXE_KSTAT_RXQ(rxCopied, KSTAT_DATA_UINT64);
BNXE_KSTAT_RXQ(rxDiscards, KSTAT_DATA_UINT64);
BNXE_KSTAT_RXQ(rxBufUpInStack, KSTAT_DATA_UINT64);
BNXE_KSTAT_RXQ(rxLowWater, KSTAT_DATA_UINT64);
BNXE_KSTAT_RXQ(inPollMode, KSTAT_DATA_UINT64);
BNXE_KSTAT_RXQ(pollCnt, KSTAT_DATA_UINT64);
BNXE_KSTAT_RXQ(intrDisableCnt, KSTAT_DATA_UINT64);
BNXE_KSTAT_RXQ(intrEnableCnt, KSTAT_DATA_UINT64);
BNXE_KSTAT_RXQ(genNumber, KSTAT_DATA_UINT64);
pUM->kstats_rxq_map[idx].idx = idx;
pUM->kstats_rxq_map[idx].pUM = pUM;
pUM->kstats_rxq[idx]->ks_update = BnxeKstatRxRingUpdate;
pUM->kstats_rxq[idx]->ks_private = (void *)&pUM->kstats_rxq_map[idx];
kstat_install(pUM->kstats_rxq[idx]);
return B_TRUE;
}
boolean_t BnxeKstatInitTxQ(um_device_t * pUM,
int idx)
{
char buf[32];
BnxeKstatTxq * pStatsTxq;
#define BNXE_KSTAT_TXQ(f, t) kstat_named_init(&pStatsTxq->f, #f, t)
snprintf(buf, sizeof(buf), "txq%d", idx);
if ((pUM->kstats_txq[idx] = kstat_create("bnxe",
pUM->instance,
buf,
"net",
KSTAT_TYPE_NAMED,
BNXE_KSTAT_TXQ_SIZE,
0)) == NULL)
{
BnxeLogWarn(pUM, "Failed to create txq%d kstat", idx);
return B_FALSE;
}
pStatsTxq = (BnxeKstatTxq *)pUM->kstats_txq[idx]->ks_data;
BNXE_KSTAT_TXQ(txBdTotal, KSTAT_DATA_UINT64);
BNXE_KSTAT_TXQ(txBdLeft, KSTAT_DATA_UINT64);
BNXE_KSTAT_TXQ(txBdPageCnt, KSTAT_DATA_UINT64);
BNXE_KSTAT_TXQ(txBdsPerPage, KSTAT_DATA_UINT64);
BNXE_KSTAT_TXQ(txBdSize, KSTAT_DATA_UINT64);
BNXE_KSTAT_TXQ(txBdsSkipEop, KSTAT_DATA_UINT64);
BNXE_KSTAT_TXQ(hwTxqConIdx, KSTAT_DATA_UINT64);
BNXE_KSTAT_TXQ(txPktIdx, KSTAT_DATA_UINT64);
BNXE_KSTAT_TXQ(txBdProdIdx, KSTAT_DATA_UINT64);
BNXE_KSTAT_TXQ(txBdConsIdx, KSTAT_DATA_UINT64);
BNXE_KSTAT_TXQ(txSentPkts, KSTAT_DATA_UINT64);
BNXE_KSTAT_TXQ(txFreeDesc, KSTAT_DATA_UINT64);
BNXE_KSTAT_TXQ(txWaitingPkts, KSTAT_DATA_UINT64);
BNXE_KSTAT_TXQ(txLowWater, KSTAT_DATA_UINT64);
BNXE_KSTAT_TXQ(txFailed, KSTAT_DATA_UINT64);
BNXE_KSTAT_TXQ(txDiscards, KSTAT_DATA_UINT64);
BNXE_KSTAT_TXQ(txRecycle, KSTAT_DATA_UINT64);
BNXE_KSTAT_TXQ(txCopied, KSTAT_DATA_UINT64);
BNXE_KSTAT_TXQ(txBlocked, KSTAT_DATA_UINT64);
BNXE_KSTAT_TXQ(txWait, KSTAT_DATA_UINT64);
pUM->kstats_txq_map[idx].idx = idx;
pUM->kstats_txq_map[idx].pUM = pUM;
pUM->kstats_txq[idx]->ks_update = BnxeKstatTxRingUpdate;
pUM->kstats_txq[idx]->ks_private = (void *)&pUM->kstats_txq_map[idx];
kstat_install(pUM->kstats_txq[idx]);
return B_TRUE;
}
boolean_t BnxeKstatInit(um_device_t * pUM)
{
lm_device_t * pLM = (lm_device_t *)pUM;
char buf[32];
int idx;
BnxeKstat * pStats;
BnxeKstatLink * pStatsLink;
BnxeKstatIntr * pStatsIntr;
BnxeKstatL2Chip * pStatsL2Chip;
BnxeKstatL2Driver * pStatsL2Driver;
BnxeKstatEthStats * pStatsL2Stats;
BnxeKstatFcoe * pStatsFcoe;
BnxeKstatDcbx * pStatsDcbx;
#define BNXE_KSTAT(f, t) kstat_named_init(&pStats->f, #f, t)
#define BNXE_KSTAT_LINK(f, t) kstat_named_init(&pStatsLink->f, #f, t)
#define BNXE_KSTAT_INTR(f, t) kstat_named_init(&pStatsIntr->f, #f, t)
#define BNXE_KSTAT_L2_CHIP(f, t) kstat_named_init(&pStatsL2Chip->f, #f, t)
#define BNXE_KSTAT_L2_DRIVER(f, t) kstat_named_init(&pStatsL2Driver->f, #f, t)
#define BNXE_KSTAT_L2_STATS(f, t) kstat_named_init(&pStatsL2Stats->f, #f, t)
#define BNXE_KSTAT_FCOE(f, t) kstat_named_init(&pStatsFcoe->f, #f, t)
#define BNXE_KSTAT_DCBX(f, t) kstat_named_init(&pStatsDcbx->f, #f, t)
/****************************************************************/
if ((pUM->kstats = kstat_create("bnxe",
pUM->instance,
"stats",
"net",
KSTAT_TYPE_NAMED,
BNXE_KSTAT_SIZE,
0)) == NULL)
{
BnxeLogWarn(pUM, "Failed to create kstat");
return B_FALSE;
}
pStats = (BnxeKstat *)pUM->kstats->ks_data;
BNXE_KSTAT(umdev_hi, KSTAT_DATA_CHAR);
BNXE_KSTAT(umdev_lo, KSTAT_DATA_CHAR);
BNXE_KSTAT(version, KSTAT_DATA_CHAR);
BNXE_KSTAT(versionFW, KSTAT_DATA_CHAR);
BNXE_KSTAT(versionBC, KSTAT_DATA_CHAR);
BNXE_KSTAT(chipName, KSTAT_DATA_CHAR);
BNXE_KSTAT(chipID, KSTAT_DATA_CHAR);
BNXE_KSTAT(devBDF, KSTAT_DATA_CHAR);
BNXE_KSTAT(devID, KSTAT_DATA_CHAR);
BNXE_KSTAT(multiFunction, KSTAT_DATA_CHAR);
BNXE_KSTAT(multiFunctionVnics, KSTAT_DATA_UINT64);
BNXE_KSTAT(macAddr, KSTAT_DATA_CHAR);
BNXE_KSTAT(hwInitDone, KSTAT_DATA_UINT64);
BNXE_KSTAT(clientsHw, KSTAT_DATA_CHAR);
BNXE_KSTAT(clientsDevi, KSTAT_DATA_CHAR);
BNXE_KSTAT(clientsBound, KSTAT_DATA_CHAR);
BNXE_KSTAT(txMsgPullUp, KSTAT_DATA_UINT64);
BNXE_KSTAT(intrAlloc, KSTAT_DATA_CHAR);
BNXE_KSTAT(intrFired, KSTAT_DATA_UINT64);
BNXE_KSTAT(timerFired, KSTAT_DATA_UINT64);
BNXE_KSTAT(timerReply, KSTAT_DATA_UINT64);
BNXE_KSTAT(timerNoReplyTotal, KSTAT_DATA_UINT64);
BNXE_KSTAT(timerNoReplyCurrent, KSTAT_DATA_UINT64);
BNXE_KSTAT(timerDone, KSTAT_DATA_UINT64);
BNXE_KSTAT(workQueueInstCnt, KSTAT_DATA_UINT64);
BNXE_KSTAT(workItemInstQueued, KSTAT_DATA_UINT64);
BNXE_KSTAT(workItemInstError, KSTAT_DATA_UINT64);
BNXE_KSTAT(workItemInstComplete, KSTAT_DATA_UINT64);
BNXE_KSTAT(workItemInstHighWater, KSTAT_DATA_UINT64);
BNXE_KSTAT(workQueueDelayCnt, KSTAT_DATA_UINT64);
BNXE_KSTAT(workItemDelayQueued, KSTAT_DATA_UINT64);
BNXE_KSTAT(workItemDelayError, KSTAT_DATA_UINT64);
BNXE_KSTAT(workItemDelayComplete, KSTAT_DATA_UINT64);
BNXE_KSTAT(workItemDelayHighWater, KSTAT_DATA_UINT64);
BNXE_KSTAT(memAllocBlocks, KSTAT_DATA_UINT64);
BNXE_KSTAT(memAllocDMAs, KSTAT_DATA_UINT64);
BNXE_KSTAT(memAllocBARs, KSTAT_DATA_UINT64);
pUM->kstats->ks_update = BnxeKstatUpdate;
pUM->kstats->ks_private = (void *)pUM;
kstat_install(pUM->kstats);
/****************************************************************/
if ((pUM->kstatsLink = kstat_create("bnxe",
pUM->instance,
"link",
"net",
KSTAT_TYPE_NAMED,
BNXE_KSTAT_LINK_SIZE,
0)) == NULL)
{
BnxeLogWarn(pUM, "Failed to create link kstat");
return B_FALSE;
}
pStatsLink = (BnxeKstatLink *)pUM->kstatsLink->ks_data;
BNXE_KSTAT_LINK(clients, KSTAT_DATA_CHAR);
BNXE_KSTAT_LINK(uptime, KSTAT_DATA_UINT64);
BNXE_KSTAT_LINK(mtuL2, KSTAT_DATA_UINT64);
BNXE_KSTAT_LINK(mtuFCOE, KSTAT_DATA_UINT64);
BNXE_KSTAT_LINK(speed, KSTAT_DATA_UINT64);
BNXE_KSTAT_LINK(link, KSTAT_DATA_UINT64);
BNXE_KSTAT_LINK(duplex, KSTAT_DATA_UINT64);
BNXE_KSTAT_LINK(pauseRx, KSTAT_DATA_UINT64);
BNXE_KSTAT_LINK(pauseTx, KSTAT_DATA_UINT64);
pUM->kstatsLink->ks_update = BnxeKstatLinkUpdate;
pUM->kstatsLink->ks_private = (void *)pUM;
kstat_install(pUM->kstatsLink);
/****************************************************************/
if ((pUM->kstatsIntr = kstat_create("bnxe",
pUM->instance,
"intr",
"net",
KSTAT_TYPE_NAMED,
BNXE_KSTAT_INTR_SIZE,
0)) == NULL)
{
BnxeLogWarn(pUM, "Failed to create intr kstat");
return B_FALSE;
}
pStatsIntr = (BnxeKstatIntr *)pUM->kstatsIntr->ks_data;
BNXE_KSTAT_INTR(intrAlloc, KSTAT_DATA_CHAR);
BNXE_KSTAT_INTR(intrFired, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(intrWrongState, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(intrInDisabled, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(intrZeroStatus, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_00, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_01, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_02, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_03, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_04, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_05, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_06, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_07, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_08, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_09, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_10, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_11, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_12, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_13, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_14, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_15, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_16, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_nc_00, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_nc_01, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_nc_02, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_nc_03, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_nc_04, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_nc_05, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_nc_06, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_nc_07, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_nc_08, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_nc_09, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_nc_10, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_nc_11, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_nc_12, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_nc_13, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_nc_14, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_nc_15, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_nc_16, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_poll_00, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_poll_01, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_poll_02, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_poll_03, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_poll_04, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_poll_05, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_poll_06, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_poll_07, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_poll_08, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_poll_09, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_poll_10, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_poll_11, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_poll_12, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_poll_13, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_poll_14, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_poll_15, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_poll_16, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_poll_nc_00, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_poll_nc_01, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_poll_nc_02, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_poll_nc_03, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_poll_nc_04, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_poll_nc_05, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_poll_nc_06, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_poll_nc_07, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_poll_nc_08, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_poll_nc_09, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_poll_nc_10, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_poll_nc_11, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_poll_nc_12, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_poll_nc_13, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_poll_nc_14, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_poll_nc_15, KSTAT_DATA_UINT64);
BNXE_KSTAT_INTR(sb_poll_nc_16, KSTAT_DATA_UINT64);
pUM->kstatsIntr->ks_update = BnxeKstatIntrUpdate;
pUM->kstatsIntr->ks_private = (void *)pUM;
kstat_install(pUM->kstatsIntr);
/****************************************************************/
if ((pUM->kstatsL2Chip = kstat_create("bnxe",
pUM->instance,
"l2chip",
"net",
KSTAT_TYPE_NAMED,
BNXE_KSTAT_L2_CHIP_SIZE,
0)) == NULL)
{
BnxeLogWarn(pUM, "Failed to create l2chip kstat");
return B_FALSE;
}
pStatsL2Chip = (BnxeKstatL2Chip *)pUM->kstatsL2Chip->ks_data;
BNXE_KSTAT_L2_CHIP(IfHCInOctets, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(IfHCInBadOctets, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(IfHCOutOctets, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(IfHCOutBadOctets, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(IfHCOutPkts, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(IfHCInPkts, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(IfHCInUcastPkts, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(IfHCInMulticastPkts, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(IfHCInBroadcastPkts, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(IfHCOutUcastPkts, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(IfHCOutMulticastPkts, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(IfHCOutBroadcastPkts, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(IfHCInUcastOctets, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(IfHCInMulticastOctets, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(IfHCInBroadcastOctets, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(IfHCOutUcastOctets, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(IfHCOutMulticastOctets, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(IfHCOutBroadcastOctets, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(IfHCOutDiscards, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(IfHCInFalseCarrierErrors, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(Dot3StatsInternalMacTransmitErrors, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(Dot3StatsCarrierSenseErrors, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(Dot3StatsFCSErrors, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(Dot3StatsAlignmentErrors, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(Dot3StatsSingleCollisionFrames, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(Dot3StatsMultipleCollisionFrames, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(Dot3StatsDeferredTransmissions, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(Dot3StatsExcessiveCollisions, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(Dot3StatsLateCollisions, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(EtherStatsCollisions, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(EtherStatsFragments, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(EtherStatsJabbers, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(EtherStatsUndersizePkts, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(EtherStatsOverrsizePkts, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(EtherStatsTx64Octets, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(EtherStatsTx65to127Octets, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(EtherStatsTx128to255Octets, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(EtherStatsTx256to511Octets, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(EtherStatsTx512to1023Octets, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(EtherStatsTx1024to1522Octets, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(EtherStatsTxOver1522Octets, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(XonPauseFramesReceived, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(XoffPauseFramesReceived, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(OutXonSent, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(OutXoffSent, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(FlowControlDone, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(MacControlFramesReceived, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(XoffStateEntered, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(IfInFramesL2FilterDiscards, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(IfInTTL0Discards, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(IfInxxOverflowDiscards, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(IfInMBUFDiscards, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(IfInErrors, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(IfInErrorsOctets, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(IfInNoBrbBuffer, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(NigBrbPacket, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(NigBrbTruncate, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(NigFlowCtrlDiscard, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(NigFlowCtrlOctets, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(NigFlowCtrlPacket, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(NigMngDiscard, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(NigMngOctetInp, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(NigMngOctetOut, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(NigMngPacketInp, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(NigMngPacketOut, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(NigPbfOctets, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(NigPbfPacket, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_CHIP(NigSafcInp, KSTAT_DATA_UINT64);
pUM->kstatsL2Chip->ks_update = BnxeKstatL2ChipUpdate;
pUM->kstatsL2Chip->ks_private = (void *)pUM;
kstat_install(pUM->kstatsL2Chip);
/****************************************************************/
if ((pUM->kstatsL2Driver = kstat_create("bnxe",
pUM->instance,
"l2driver",
"net",
KSTAT_TYPE_NAMED,
BNXE_KSTAT_L2_DRIVER_SIZE,
0)) == NULL)
{
BnxeLogWarn(pUM, "Failed to create l2driver kstat");
return B_FALSE;
}
pStatsL2Driver = (BnxeKstatL2Driver *)pUM->kstatsL2Driver->ks_data;
BNXE_KSTAT_L2_DRIVER(RxIPv4FragCount, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_DRIVER(RxIpCsErrorCount, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_DRIVER(RxTcpCsErrorCount, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_DRIVER(RxLlcSnapCount, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_DRIVER(RxPhyErrorCount, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_DRIVER(RxIpv6ExtCount, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_DRIVER(TxNoL2Bd, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_DRIVER(TxNoSqWqe, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_DRIVER(TxL2AssemblyBufUse, KSTAT_DATA_UINT64);
pUM->kstatsL2Driver->ks_update = BnxeKstatL2DriverUpdate;
pUM->kstatsL2Driver->ks_private = (void *)pUM;
kstat_install(pUM->kstatsL2Driver);
/****************************************************************/
if ((pUM->kstatsL2Stats = kstat_create("bnxe",
pUM->instance,
"l2stats",
"net",
KSTAT_TYPE_NAMED,
BNXE_KSTAT_ETH_STATS_SIZE,
0)) == NULL)
{
BnxeLogWarn(pUM, "Failed to create l2stats kstat");
return B_FALSE;
}
pStatsL2Stats = (BnxeKstatEthStats *)pUM->kstatsL2Stats->ks_data;
BNXE_KSTAT_L2_STATS(txFramesOk, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_STATS(rxFramesOk, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_STATS(txErr, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_STATS(rxErr, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_STATS(rxCrcErr, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_STATS(alignErr, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_STATS(collisionsSingle, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_STATS(collisionsMultiple, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_STATS(framesDeferred, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_STATS(collisonsMax, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_STATS(rxOverrun, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_STATS(txOverrun, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_STATS(txFramesUnicast, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_STATS(txFramesMulticast, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_STATS(txFramesBroadcast, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_STATS(rxFramesUnicast, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_STATS(rxFramesMulticast, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_STATS(rxFramesBroadcast, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_STATS(rxNoBufferDrop, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_STATS(rxBytes, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_STATS(txBytes, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_STATS(offloadIP4, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_STATS(offloadTCP, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_STATS(ifInDiscards, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_STATS(ifInErrors, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_STATS(ifOutErrors, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_STATS(offloadIP6, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_STATS(offloadTCP6, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_STATS(txDiscards, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_STATS(rxBytesUnicast, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_STATS(rxBytesMulticast, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_STATS(rxBytesBroadcast, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_STATS(txBytesUnicast, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_STATS(txBytesMulticast, KSTAT_DATA_UINT64);
BNXE_KSTAT_L2_STATS(txBytesBroadcast, KSTAT_DATA_UINT64);
pUM->kstatsL2Stats->ks_update = BnxeKstatL2StatsUpdate;
pUM->kstatsL2Stats->ks_private = (void *)pUM;
kstat_install(pUM->kstatsL2Stats);
/****************************************************************/
if (BNXE_FCOE(pUM))
{
if ((pUM->kstatsFcoe = kstat_create("bnxe",
pUM->instance,
"fcoe",
"net",
KSTAT_TYPE_NAMED,
BNXE_KSTAT_FCOE_SIZE,
0)) == NULL)
{
BnxeLogWarn(pUM, "Failed to create fcoe kstat");
BnxeKstatFini(pUM);
return B_FALSE;
}
pStatsFcoe = (BnxeKstatFcoe *)pUM->kstatsFcoe->ks_data;
BNXE_KSTAT_FCOE(pdev_hi, KSTAT_DATA_CHAR);
BNXE_KSTAT_FCOE(pdev_lo, KSTAT_DATA_CHAR);
BNXE_KSTAT_FCOE(instance, KSTAT_DATA_CHAR);
BNXE_KSTAT_FCOE(macAddr, KSTAT_DATA_CHAR);
BNXE_KSTAT_FCOE(pwwn_hi, KSTAT_DATA_CHAR);
BNXE_KSTAT_FCOE(pwwn_lo, KSTAT_DATA_CHAR);
BNXE_KSTAT_FCOE(mtu, KSTAT_DATA_UINT64);
BNXE_KSTAT_FCOE(initWqeTx, KSTAT_DATA_UINT64);
BNXE_KSTAT_FCOE(initWqeTxErr, KSTAT_DATA_UINT64);
BNXE_KSTAT_FCOE(initCqeRx, KSTAT_DATA_UINT64);
BNXE_KSTAT_FCOE(initCqeRxErr, KSTAT_DATA_UINT64);
BNXE_KSTAT_FCOE(offloadConnWqeTx, KSTAT_DATA_UINT64);
BNXE_KSTAT_FCOE(offloadConnWqeTxErr, KSTAT_DATA_UINT64);
BNXE_KSTAT_FCOE(offloadConnCqeRx, KSTAT_DATA_UINT64);
BNXE_KSTAT_FCOE(offloadConnCqeRxErr, KSTAT_DATA_UINT64);
BNXE_KSTAT_FCOE(enableConnWqeTx, KSTAT_DATA_UINT64);
BNXE_KSTAT_FCOE(enableConnWqeTxErr, KSTAT_DATA_UINT64);
BNXE_KSTAT_FCOE(enableConnCqeRx, KSTAT_DATA_UINT64);
BNXE_KSTAT_FCOE(enableConnCqeRxErr, KSTAT_DATA_UINT64);
BNXE_KSTAT_FCOE(disableConnWqeTx, KSTAT_DATA_UINT64);
BNXE_KSTAT_FCOE(disableConnWqeTxErr, KSTAT_DATA_UINT64);
BNXE_KSTAT_FCOE(disableConnCqeRx, KSTAT_DATA_UINT64);
BNXE_KSTAT_FCOE(disableConnCqeRxErr, KSTAT_DATA_UINT64);
BNXE_KSTAT_FCOE(destroyConnWqeTx, KSTAT_DATA_UINT64);
BNXE_KSTAT_FCOE(destroyConnWqeTxErr, KSTAT_DATA_UINT64);
BNXE_KSTAT_FCOE(destroyConnCqeRx, KSTAT_DATA_UINT64);
BNXE_KSTAT_FCOE(destroyConnCqeRxErr, KSTAT_DATA_UINT64);
BNXE_KSTAT_FCOE(destroyWqeTx, KSTAT_DATA_UINT64);
BNXE_KSTAT_FCOE(destroyWqeTxErr, KSTAT_DATA_UINT64);
BNXE_KSTAT_FCOE(destroyCqeRx, KSTAT_DATA_UINT64);
BNXE_KSTAT_FCOE(destroyCqeRxErr, KSTAT_DATA_UINT64);
BNXE_KSTAT_FCOE(compRequestCqeRx, KSTAT_DATA_UINT64);
BNXE_KSTAT_FCOE(compRequestCqeRxErr, KSTAT_DATA_UINT64);
BNXE_KSTAT_FCOE(statWqeTx, KSTAT_DATA_UINT64);
BNXE_KSTAT_FCOE(statWqeTxErr, KSTAT_DATA_UINT64);
BNXE_KSTAT_FCOE(statCqeRx, KSTAT_DATA_UINT64);
BNXE_KSTAT_FCOE(statCqeRxErr, KSTAT_DATA_UINT64);
pUM->kstatsFcoe->ks_update = BnxeKstatFcoeUpdate;
pUM->kstatsFcoe->ks_private = (void *)pUM;
kstat_install(pUM->kstatsFcoe);
if (!BnxeKstatInitRxQ(pUM, FCOE_CID(pLM)))
{
BnxeKstatFini(pUM);
return B_FALSE;
}
if (!BnxeKstatInitTxQ(pUM, FCOE_CID(pLM)))
{
BnxeKstatFini(pUM);
return B_FALSE;
}
}
/****************************************************************/
if (IS_DCB_SUPPORTED(pLM))
{
if ((pUM->kstatsDcbx = kstat_create("bnxe",
pUM->instance,
"dcbx",
"net",
KSTAT_TYPE_NAMED,
BNXE_KSTAT_DCBX_SIZE,
0)) == NULL)
{
BnxeLogWarn(pUM, "Failed to create dcbx kstat");
BnxeKstatFini(pUM);
return B_FALSE;
}
pStatsDcbx = (BnxeKstatDcbx *)pUM->kstatsDcbx->ks_data;
BNXE_KSTAT_DCBX(dcbx_sync, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(dcbx_vers, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(overwrite_settings, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(prio_tag, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(prio_tag_fcoe, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(prio_tag_iscsi, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(prio_tag_net, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(pfc, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(pfc_prio_0, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(pfc_prio_1, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(pfc_prio_2, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(pfc_prio_3, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(pfc_prio_4, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(pfc_prio_5, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(pfc_prio_6, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(pfc_prio_7, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(ets, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(ets_prio_0_pg, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(ets_prio_1_pg, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(ets_prio_2_pg, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(ets_prio_3_pg, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(ets_prio_4_pg, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(ets_prio_5_pg, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(ets_prio_6_pg, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(ets_prio_7_pg, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(ets_pg_0_bw, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(ets_pg_1_bw, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(ets_pg_2_bw, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(ets_pg_3_bw, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(ets_pg_4_bw, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(ets_pg_5_bw, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(ets_pg_6_bw, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(ets_pg_7_bw, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(lldp, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(lldp_tx_interval, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(lldp_tx_fast_interval, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(amib_apptlv_willing, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(amib_apptlv_tx, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(amib_apptlv_net_prio, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(amib_apptlv_tbl_0_prio, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(amib_apptlv_tbl_0_appid, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(amib_apptlv_tbl_1_prio, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(amib_apptlv_tbl_1_appid, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(amib_apptlv_tbl_2_prio, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(amib_apptlv_tbl_2_appid, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(amib_apptlv_tbl_3_prio, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(amib_apptlv_tbl_3_appid, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(amib_pgtlv_willing, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(amib_pgtlv_tx, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(amib_pgtlv_tc_supported, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(amib_pgtlv_ets, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(amib_pgtlv_pg_0_bw, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(amib_pgtlv_pg_1_bw, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(amib_pgtlv_pg_2_bw, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(amib_pgtlv_pg_3_bw, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(amib_pgtlv_pg_4_bw, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(amib_pgtlv_pg_5_bw, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(amib_pgtlv_pg_6_bw, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(amib_pgtlv_pg_7_bw, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(amib_pgtlv_prio_0_map, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(amib_pgtlv_prio_1_map, KSTAT_DATA_CHAR);
BNXE_KSTAT_DCBX(amib_pgtlv_prio_2_map, KSTAT_DATA_CHAR);