1d14abf15SRobert Mustacchi /*
2d14abf15SRobert Mustacchi  * CDDL HEADER START
3d14abf15SRobert Mustacchi  *
4d14abf15SRobert Mustacchi  * The contents of this file are subject to the terms of the
5d14abf15SRobert Mustacchi  * Common Development and Distribution License (the "License").
6d14abf15SRobert Mustacchi  * You may not use this file except in compliance with the License.
7d14abf15SRobert Mustacchi  *
8d14abf15SRobert Mustacchi  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9d14abf15SRobert Mustacchi  * or http://www.opensolaris.org/os/licensing.
10d14abf15SRobert Mustacchi  * See the License for the specific language governing permissions
11d14abf15SRobert Mustacchi  * and limitations under the License.
12d14abf15SRobert Mustacchi  *
13d14abf15SRobert Mustacchi  * When distributing Covered Code, include this CDDL HEADER in each
14d14abf15SRobert Mustacchi  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15d14abf15SRobert Mustacchi  * If applicable, add the following below this CDDL HEADER, with the
16d14abf15SRobert Mustacchi  * fields enclosed by brackets "[]" replaced with your own identifying
17d14abf15SRobert Mustacchi  * information: Portions Copyright [yyyy] [name of copyright owner]
18d14abf15SRobert Mustacchi  *
19d14abf15SRobert Mustacchi  * CDDL HEADER END
20d14abf15SRobert Mustacchi  */
21d14abf15SRobert Mustacchi 
22d14abf15SRobert Mustacchi /*
23d14abf15SRobert Mustacchi  * Copyright 2014 QLogic Corporation
24d14abf15SRobert Mustacchi  * The contents of this file are subject to the terms of the
25d14abf15SRobert Mustacchi  * QLogic End User License (the "License").
26d14abf15SRobert Mustacchi  * You may not use this file except in compliance with the License.
27d14abf15SRobert Mustacchi  *
28d14abf15SRobert Mustacchi  * You can obtain a copy of the License at
29d14abf15SRobert Mustacchi  * http://www.qlogic.com/Resources/Documents/DriverDownloadHelp/
30d14abf15SRobert Mustacchi  * QLogic_End_User_Software_License.txt
31d14abf15SRobert Mustacchi  * See the License for the specific language governing permissions
32d14abf15SRobert Mustacchi  * and limitations under the License.
33d14abf15SRobert Mustacchi  */
34d14abf15SRobert Mustacchi 
35d14abf15SRobert Mustacchi /*
36d14abf15SRobert Mustacchi  * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
37d14abf15SRobert Mustacchi  */
38d14abf15SRobert Mustacchi 
39d14abf15SRobert Mustacchi #include "bnxe.h"
40d14abf15SRobert Mustacchi 
41d14abf15SRobert Mustacchi typedef struct _BnxeKstat
42d14abf15SRobert Mustacchi {
43d14abf15SRobert Mustacchi     kstat_named_t umdev_hi;
44d14abf15SRobert Mustacchi     kstat_named_t umdev_lo;
45d14abf15SRobert Mustacchi     kstat_named_t version;
46d14abf15SRobert Mustacchi     kstat_named_t versionFW;
47d14abf15SRobert Mustacchi     kstat_named_t versionBC;
48d14abf15SRobert Mustacchi     kstat_named_t chipName;
49d14abf15SRobert Mustacchi     kstat_named_t chipID;
50d14abf15SRobert Mustacchi     kstat_named_t devBDF;
51d14abf15SRobert Mustacchi     kstat_named_t devID;
52d14abf15SRobert Mustacchi     kstat_named_t multiFunction;
53d14abf15SRobert Mustacchi     kstat_named_t multiFunctionVnics;
54d14abf15SRobert Mustacchi     kstat_named_t macAddr;
55d14abf15SRobert Mustacchi     kstat_named_t hwInitDone;
56d14abf15SRobert Mustacchi     kstat_named_t clientsHw;
57d14abf15SRobert Mustacchi     kstat_named_t clientsDevi;
58d14abf15SRobert Mustacchi     kstat_named_t clientsBound;
59d14abf15SRobert Mustacchi     kstat_named_t txMsgPullUp;
60d14abf15SRobert Mustacchi     kstat_named_t intrAlloc;
61d14abf15SRobert Mustacchi     kstat_named_t intrFired;
62d14abf15SRobert Mustacchi     kstat_named_t timerFired;
63d14abf15SRobert Mustacchi     kstat_named_t timerReply;
64d14abf15SRobert Mustacchi     kstat_named_t timerNoReplyTotal;
65d14abf15SRobert Mustacchi     kstat_named_t timerNoReplyCurrent;
66d14abf15SRobert Mustacchi     kstat_named_t timerDone;
67d14abf15SRobert Mustacchi     kstat_named_t workQueueInstCnt;
68d14abf15SRobert Mustacchi     kstat_named_t workItemInstQueued;
69d14abf15SRobert Mustacchi     kstat_named_t workItemInstError;
70d14abf15SRobert Mustacchi     kstat_named_t workItemInstComplete;
71d14abf15SRobert Mustacchi     kstat_named_t workItemInstHighWater;
72d14abf15SRobert Mustacchi     kstat_named_t workQueueDelayCnt;
73d14abf15SRobert Mustacchi     kstat_named_t workItemDelayQueued;
74d14abf15SRobert Mustacchi     kstat_named_t workItemDelayError;
75d14abf15SRobert Mustacchi     kstat_named_t workItemDelayComplete;
76d14abf15SRobert Mustacchi     kstat_named_t workItemDelayHighWater;
77d14abf15SRobert Mustacchi     kstat_named_t memAllocBlocks;
78d14abf15SRobert Mustacchi     kstat_named_t memAllocDMAs;
79d14abf15SRobert Mustacchi     kstat_named_t memAllocBARs;
80d14abf15SRobert Mustacchi } BnxeKstat;
81d14abf15SRobert Mustacchi 
82d14abf15SRobert Mustacchi #define BNXE_KSTAT_SIZE (sizeof(BnxeKstat) / sizeof(kstat_named_t))
83d14abf15SRobert Mustacchi 
84d14abf15SRobert Mustacchi typedef struct _BnxeKstatLink
85d14abf15SRobert Mustacchi {
86d14abf15SRobert Mustacchi     kstat_named_t clients;
87d14abf15SRobert Mustacchi     kstat_named_t uptime;
88d14abf15SRobert Mustacchi     kstat_named_t mtuL2;
89d14abf15SRobert Mustacchi     kstat_named_t mtuFCOE;
90d14abf15SRobert Mustacchi     kstat_named_t speed;
91d14abf15SRobert Mustacchi     kstat_named_t link;
92d14abf15SRobert Mustacchi     kstat_named_t duplex;
93d14abf15SRobert Mustacchi     kstat_named_t pauseRx;
94d14abf15SRobert Mustacchi     kstat_named_t pauseTx;
95d14abf15SRobert Mustacchi } BnxeKstatLink;
96d14abf15SRobert Mustacchi 
97d14abf15SRobert Mustacchi #define BNXE_KSTAT_LINK_SIZE (sizeof(BnxeKstatLink) / sizeof(kstat_named_t))
98d14abf15SRobert Mustacchi 
99d14abf15SRobert Mustacchi typedef struct _BnxeKstatIntr
100d14abf15SRobert Mustacchi {
101d14abf15SRobert Mustacchi     kstat_named_t intrAlloc;
102d14abf15SRobert Mustacchi     kstat_named_t intrFired;
103d14abf15SRobert Mustacchi     kstat_named_t intrWrongState;
104d14abf15SRobert Mustacchi     kstat_named_t intrInDisabled;
105d14abf15SRobert Mustacchi     kstat_named_t intrZeroStatus;
106d14abf15SRobert Mustacchi     kstat_named_t sb_00;
107d14abf15SRobert Mustacchi     kstat_named_t sb_01;
108d14abf15SRobert Mustacchi     kstat_named_t sb_02;
109d14abf15SRobert Mustacchi     kstat_named_t sb_03;
110d14abf15SRobert Mustacchi     kstat_named_t sb_04;
111d14abf15SRobert Mustacchi     kstat_named_t sb_05;
112d14abf15SRobert Mustacchi     kstat_named_t sb_06;
113d14abf15SRobert Mustacchi     kstat_named_t sb_07;
114d14abf15SRobert Mustacchi     kstat_named_t sb_08;
115d14abf15SRobert Mustacchi     kstat_named_t sb_09;
116d14abf15SRobert Mustacchi     kstat_named_t sb_10;
117d14abf15SRobert Mustacchi     kstat_named_t sb_11;
118d14abf15SRobert Mustacchi     kstat_named_t sb_12;
119d14abf15SRobert Mustacchi     kstat_named_t sb_13;
120d14abf15SRobert Mustacchi     kstat_named_t sb_14;
121d14abf15SRobert Mustacchi     kstat_named_t sb_15;
122d14abf15SRobert Mustacchi     kstat_named_t sb_16;
123d14abf15SRobert Mustacchi     kstat_named_t sb_nc_00;
124d14abf15SRobert Mustacchi     kstat_named_t sb_nc_01;
125d14abf15SRobert Mustacchi     kstat_named_t sb_nc_02;
126d14abf15SRobert Mustacchi     kstat_named_t sb_nc_03;
127d14abf15SRobert Mustacchi     kstat_named_t sb_nc_04;
128d14abf15SRobert Mustacchi     kstat_named_t sb_nc_05;
129d14abf15SRobert Mustacchi     kstat_named_t sb_nc_06;
130d14abf15SRobert Mustacchi     kstat_named_t sb_nc_07;
131d14abf15SRobert Mustacchi     kstat_named_t sb_nc_08;
132d14abf15SRobert Mustacchi     kstat_named_t sb_nc_09;
133d14abf15SRobert Mustacchi     kstat_named_t sb_nc_10;
134d14abf15SRobert Mustacchi     kstat_named_t sb_nc_11;
135d14abf15SRobert Mustacchi     kstat_named_t sb_nc_12;
136d14abf15SRobert Mustacchi     kstat_named_t sb_nc_13;
137d14abf15SRobert Mustacchi     kstat_named_t sb_nc_14;
138d14abf15SRobert Mustacchi     kstat_named_t sb_nc_15;
139d14abf15SRobert Mustacchi     kstat_named_t sb_nc_16;
140d14abf15SRobert Mustacchi     kstat_named_t sb_poll_00;
141d14abf15SRobert Mustacchi     kstat_named_t sb_poll_01;
142d14abf15SRobert Mustacchi     kstat_named_t sb_poll_02;
143d14abf15SRobert Mustacchi     kstat_named_t sb_poll_03;
144d14abf15SRobert Mustacchi     kstat_named_t sb_poll_04;
145d14abf15SRobert Mustacchi     kstat_named_t sb_poll_05;
146d14abf15SRobert Mustacchi     kstat_named_t sb_poll_06;
147d14abf15SRobert Mustacchi     kstat_named_t sb_poll_07;
148d14abf15SRobert Mustacchi     kstat_named_t sb_poll_08;
149d14abf15SRobert Mustacchi     kstat_named_t sb_poll_09;
150d14abf15SRobert Mustacchi     kstat_named_t sb_poll_10;
151d14abf15SRobert Mustacchi     kstat_named_t sb_poll_11;
152d14abf15SRobert Mustacchi     kstat_named_t sb_poll_12;
153d14abf15SRobert Mustacchi     kstat_named_t sb_poll_13;
154d14abf15SRobert Mustacchi     kstat_named_t sb_poll_14;
155d14abf15SRobert Mustacchi     kstat_named_t sb_poll_15;
156d14abf15SRobert Mustacchi     kstat_named_t sb_poll_16;
157d14abf15SRobert Mustacchi     kstat_named_t sb_poll_nc_00;
158d14abf15SRobert Mustacchi     kstat_named_t sb_poll_nc_01;
159d14abf15SRobert Mustacchi     kstat_named_t sb_poll_nc_02;
160d14abf15SRobert Mustacchi     kstat_named_t sb_poll_nc_03;
161d14abf15SRobert Mustacchi     kstat_named_t sb_poll_nc_04;
162d14abf15SRobert Mustacchi     kstat_named_t sb_poll_nc_05;
163d14abf15SRobert Mustacchi     kstat_named_t sb_poll_nc_06;
164d14abf15SRobert Mustacchi     kstat_named_t sb_poll_nc_07;
165d14abf15SRobert Mustacchi     kstat_named_t sb_poll_nc_08;
166d14abf15SRobert Mustacchi     kstat_named_t sb_poll_nc_09;
167d14abf15SRobert Mustacchi     kstat_named_t sb_poll_nc_10;
168d14abf15SRobert Mustacchi     kstat_named_t sb_poll_nc_11;
169d14abf15SRobert Mustacchi     kstat_named_t sb_poll_nc_12;
170d14abf15SRobert Mustacchi     kstat_named_t sb_poll_nc_13;
171d14abf15SRobert Mustacchi     kstat_named_t sb_poll_nc_14;
172d14abf15SRobert Mustacchi     kstat_named_t sb_poll_nc_15;
173d14abf15SRobert Mustacchi     kstat_named_t sb_poll_nc_16;
174d14abf15SRobert Mustacchi } BnxeKstatIntr;
175d14abf15SRobert Mustacchi 
176d14abf15SRobert Mustacchi #define BNXE_KSTAT_INTR_SIZE (sizeof(BnxeKstatIntr) / sizeof(kstat_named_t))
177d14abf15SRobert Mustacchi 
178d14abf15SRobert Mustacchi typedef struct _BnxeKstatL2Chip
179d14abf15SRobert Mustacchi {
180d14abf15SRobert Mustacchi     kstat_named_t IfHCInOctets;
181d14abf15SRobert Mustacchi     kstat_named_t IfHCInBadOctets;
182d14abf15SRobert Mustacchi     kstat_named_t IfHCOutOctets;
183d14abf15SRobert Mustacchi     kstat_named_t IfHCOutBadOctets;
184d14abf15SRobert Mustacchi     kstat_named_t IfHCOutPkts;
185d14abf15SRobert Mustacchi     kstat_named_t IfHCInPkts;
186d14abf15SRobert Mustacchi     kstat_named_t IfHCInUcastPkts;
187d14abf15SRobert Mustacchi     kstat_named_t IfHCInMulticastPkts;
188d14abf15SRobert Mustacchi     kstat_named_t IfHCInBroadcastPkts;
189d14abf15SRobert Mustacchi     kstat_named_t IfHCOutUcastPkts;
190d14abf15SRobert Mustacchi     kstat_named_t IfHCOutMulticastPkts;
191d14abf15SRobert Mustacchi     kstat_named_t IfHCOutBroadcastPkts;
192d14abf15SRobert Mustacchi     kstat_named_t IfHCInUcastOctets;
193d14abf15SRobert Mustacchi     kstat_named_t IfHCInMulticastOctets;
194d14abf15SRobert Mustacchi     kstat_named_t IfHCInBroadcastOctets;
195d14abf15SRobert Mustacchi     kstat_named_t IfHCOutUcastOctets;
196d14abf15SRobert Mustacchi     kstat_named_t IfHCOutMulticastOctets;
197d14abf15SRobert Mustacchi     kstat_named_t IfHCOutBroadcastOctets;
198d14abf15SRobert Mustacchi     kstat_named_t IfHCOutDiscards;
199d14abf15SRobert Mustacchi     kstat_named_t IfHCInFalseCarrierErrors;
200d14abf15SRobert Mustacchi     kstat_named_t Dot3StatsInternalMacTransmitErrors;
201d14abf15SRobert Mustacchi     kstat_named_t Dot3StatsCarrierSenseErrors;
202d14abf15SRobert Mustacchi     kstat_named_t Dot3StatsFCSErrors;
203d14abf15SRobert Mustacchi     kstat_named_t Dot3StatsAlignmentErrors;
204d14abf15SRobert Mustacchi     kstat_named_t Dot3StatsSingleCollisionFrames;
205d14abf15SRobert Mustacchi     kstat_named_t Dot3StatsMultipleCollisionFrames;
206d14abf15SRobert Mustacchi     kstat_named_t Dot3StatsDeferredTransmissions;
207d14abf15SRobert Mustacchi     kstat_named_t Dot3StatsExcessiveCollisions;
208d14abf15SRobert Mustacchi     kstat_named_t Dot3StatsLateCollisions;
209d14abf15SRobert Mustacchi     kstat_named_t EtherStatsCollisions;
210d14abf15SRobert Mustacchi     kstat_named_t EtherStatsFragments;
211d14abf15SRobert Mustacchi     kstat_named_t EtherStatsJabbers;
212d14abf15SRobert Mustacchi     kstat_named_t EtherStatsUndersizePkts;
213d14abf15SRobert Mustacchi     kstat_named_t EtherStatsOverrsizePkts;
214d14abf15SRobert Mustacchi     kstat_named_t EtherStatsTx64Octets;
215d14abf15SRobert Mustacchi     kstat_named_t EtherStatsTx65to127Octets;
216d14abf15SRobert Mustacchi     kstat_named_t EtherStatsTx128to255Octets;
217d14abf15SRobert Mustacchi     kstat_named_t EtherStatsTx256to511Octets;
218d14abf15SRobert Mustacchi     kstat_named_t EtherStatsTx512to1023Octets;
219d14abf15SRobert Mustacchi     kstat_named_t EtherStatsTx1024to1522Octets;
220d14abf15SRobert Mustacchi     kstat_named_t EtherStatsTxOver1522Octets;
221d14abf15SRobert Mustacchi     kstat_named_t XonPauseFramesReceived;
222d14abf15SRobert Mustacchi     kstat_named_t XoffPauseFramesReceived;
223d14abf15SRobert Mustacchi     kstat_named_t OutXonSent;
224d14abf15SRobert Mustacchi     kstat_named_t OutXoffSent;
225d14abf15SRobert Mustacchi     kstat_named_t FlowControlDone;
226d14abf15SRobert Mustacchi     kstat_named_t MacControlFramesReceived;
227d14abf15SRobert Mustacchi     kstat_named_t XoffStateEntered;
228d14abf15SRobert Mustacchi     kstat_named_t IfInFramesL2FilterDiscards;
229d14abf15SRobert Mustacchi     kstat_named_t IfInTTL0Discards;
230d14abf15SRobert Mustacchi     kstat_named_t IfInxxOverflowDiscards;
231d14abf15SRobert Mustacchi     kstat_named_t IfInMBUFDiscards;
232d14abf15SRobert Mustacchi     kstat_named_t IfInErrors;
233d14abf15SRobert Mustacchi     kstat_named_t IfInErrorsOctets;
234d14abf15SRobert Mustacchi     kstat_named_t IfInNoBrbBuffer;
235d14abf15SRobert Mustacchi     kstat_named_t NigBrbPacket;
236d14abf15SRobert Mustacchi     kstat_named_t NigBrbTruncate;
237d14abf15SRobert Mustacchi     kstat_named_t NigFlowCtrlDiscard;
238d14abf15SRobert Mustacchi     kstat_named_t NigFlowCtrlOctets;
239d14abf15SRobert Mustacchi     kstat_named_t NigFlowCtrlPacket;
240d14abf15SRobert Mustacchi     kstat_named_t NigMngDiscard;
241d14abf15SRobert Mustacchi     kstat_named_t NigMngOctetInp;
242d14abf15SRobert Mustacchi     kstat_named_t NigMngOctetOut;
243d14abf15SRobert Mustacchi     kstat_named_t NigMngPacketInp;
244d14abf15SRobert Mustacchi     kstat_named_t NigMngPacketOut;
245d14abf15SRobert Mustacchi     kstat_named_t NigPbfOctets;
246d14abf15SRobert Mustacchi     kstat_named_t NigPbfPacket;
247d14abf15SRobert Mustacchi     kstat_named_t NigSafcInp;
248d14abf15SRobert Mustacchi } BnxeKstatL2Chip;
249d14abf15SRobert Mustacchi 
250d14abf15SRobert Mustacchi #define BNXE_KSTAT_L2_CHIP_SIZE (sizeof(BnxeKstatL2Chip) / sizeof(kstat_named_t))
251d14abf15SRobert Mustacchi 
252d14abf15SRobert Mustacchi typedef struct _BnxeKstatL2Driver
253d14abf15SRobert Mustacchi {
254d14abf15SRobert Mustacchi     kstat_named_t RxIPv4FragCount;
255d14abf15SRobert Mustacchi     kstat_named_t RxIpCsErrorCount;
256d14abf15SRobert Mustacchi     kstat_named_t RxTcpCsErrorCount;
257d14abf15SRobert Mustacchi     kstat_named_t RxLlcSnapCount;
258d14abf15SRobert Mustacchi     kstat_named_t RxPhyErrorCount;
259d14abf15SRobert Mustacchi     kstat_named_t RxIpv6ExtCount;
260d14abf15SRobert Mustacchi     kstat_named_t TxNoL2Bd;
261d14abf15SRobert Mustacchi     kstat_named_t TxNoSqWqe;
262d14abf15SRobert Mustacchi     kstat_named_t TxL2AssemblyBufUse;
263d14abf15SRobert Mustacchi } BnxeKstatL2Driver;
264d14abf15SRobert Mustacchi 
265d14abf15SRobert Mustacchi #define BNXE_KSTAT_L2_DRIVER_SIZE (sizeof(BnxeKstatL2Driver) / sizeof(kstat_named_t))
266d14abf15SRobert Mustacchi 
267d14abf15SRobert Mustacchi typedef struct _BnxeKstatEthStats
268d14abf15SRobert Mustacchi {
269d14abf15SRobert Mustacchi     /* lm_stats_t */
270d14abf15SRobert Mustacchi     kstat_named_t txFramesOk;         // LM_STATS_FRAMES_XMITTED_OK
271d14abf15SRobert Mustacchi     kstat_named_t rxFramesOk;         // LM_STATS_FRAMES_RECEIVED_OK
272d14abf15SRobert Mustacchi     kstat_named_t txErr;              // LM_STATS_ERRORED_TRANSMIT_CNT
273d14abf15SRobert Mustacchi     kstat_named_t rxErr;              // LM_STATS_ERRORED_RECEIVE_CNT
274d14abf15SRobert Mustacchi     kstat_named_t rxCrcErr;           // LM_STATS_RCV_CRC_ERROR
275d14abf15SRobert Mustacchi     kstat_named_t alignErr;           // LM_STATS_ALIGNMENT_ERROR
276d14abf15SRobert Mustacchi     kstat_named_t collisionsSingle;   // LM_STATS_SINGLE_COLLISION_FRAMES
277d14abf15SRobert Mustacchi     kstat_named_t collisionsMultiple; // LM_STATS_MULTIPLE_COLLISION_FRAMES
278d14abf15SRobert Mustacchi     kstat_named_t framesDeferred;     // LM_STATS_FRAMES_DEFERRED
279d14abf15SRobert Mustacchi     kstat_named_t collisonsMax;       // LM_STATS_MAX_COLLISIONS
280d14abf15SRobert Mustacchi     kstat_named_t rxOverrun;          // LM_STATS_RCV_OVERRUN
281d14abf15SRobert Mustacchi     kstat_named_t txOverrun;          // LM_STATS_XMIT_UNDERRUN
282d14abf15SRobert Mustacchi     kstat_named_t txFramesUnicast;    // LM_STATS_UNICAST_FRAMES_XMIT
283d14abf15SRobert Mustacchi     kstat_named_t txFramesMulticast;  // LM_STATS_MULTICAST_FRAMES_XMIT
284d14abf15SRobert Mustacchi     kstat_named_t txFramesBroadcast;  // LM_STATS_BROADCAST_FRAMES_XMIT
285d14abf15SRobert Mustacchi     kstat_named_t rxFramesUnicast;    // LM_STATS_UNICAST_FRAMES_RCV
286d14abf15SRobert Mustacchi     kstat_named_t rxFramesMulticast;  // LM_STATS_MULTICAST_FRAMES_RCV
287d14abf15SRobert Mustacchi     kstat_named_t rxFramesBroadcast;  // LM_STATS_BROADCAST_FRAMES_RCV
288d14abf15SRobert Mustacchi     kstat_named_t rxNoBufferDrop;     // LM_STATS_RCV_NO_BUFFER_DROP
289d14abf15SRobert Mustacchi     kstat_named_t rxBytes;            // LM_STATS_BYTES_RCV
290d14abf15SRobert Mustacchi     kstat_named_t txBytes;            // LM_STATS_BYTES_XMIT
291d14abf15SRobert Mustacchi     kstat_named_t offloadIP4;         // LM_STATS_IP4_OFFLOAD
292d14abf15SRobert Mustacchi     kstat_named_t offloadTCP;         // LM_STATS_TCP_OFFLOAD
293d14abf15SRobert Mustacchi     kstat_named_t ifInDiscards;       // LM_STATS_IF_IN_DISCARDS
294d14abf15SRobert Mustacchi     kstat_named_t ifInErrors;         // LM_STATS_IF_IN_ERRORS
295d14abf15SRobert Mustacchi     kstat_named_t ifOutErrors;        // LM_STATS_IF_OUT_ERRORS
296d14abf15SRobert Mustacchi     kstat_named_t offloadIP6;         // LM_STATS_IP6_OFFLOAD
297d14abf15SRobert Mustacchi     kstat_named_t offloadTCP6;        // LM_STATS_TCP6_OFFLOAD
298d14abf15SRobert Mustacchi     kstat_named_t txDiscards;         // LM_STATS_XMIT_DISCARDS
299d14abf15SRobert Mustacchi     kstat_named_t rxBytesUnicast;     // LM_STATS_DIRECTED_BYTES_RCV
300d14abf15SRobert Mustacchi     kstat_named_t rxBytesMulticast;   // LM_STATS_MULTICAST_BYTES_RCV
301d14abf15SRobert Mustacchi     kstat_named_t rxBytesBroadcast;   // LM_STATS_BROADCAST_BYTES_RCV
302d14abf15SRobert Mustacchi     kstat_named_t txBytesUnicast;     // LM_STATS_DIRECTED_BYTES_XMIT
303d14abf15SRobert Mustacchi     kstat_named_t txBytesMulticast;   // LM_STATS_MULTICAST_BYTES_XMIT
304d14abf15SRobert Mustacchi     kstat_named_t txBytesBroadcast;   // LM_STATS_BROADCAST_BYTES_XMIT
305d14abf15SRobert Mustacchi } BnxeKstatEthStats;
306d14abf15SRobert Mustacchi 
307d14abf15SRobert Mustacchi #define BNXE_KSTAT_ETH_STATS_SIZE (sizeof(BnxeKstatEthStats) / sizeof(kstat_named_t))
308d14abf15SRobert Mustacchi 
309d14abf15SRobert Mustacchi typedef struct _BnxeKstatFcoe
310d14abf15SRobert Mustacchi {
311d14abf15SRobert Mustacchi     kstat_named_t pdev_hi;
312d14abf15SRobert Mustacchi     kstat_named_t pdev_lo;
313d14abf15SRobert Mustacchi     kstat_named_t instance;
314d14abf15SRobert Mustacchi     kstat_named_t macAddr;
315d14abf15SRobert Mustacchi     kstat_named_t pwwn_hi;
316d14abf15SRobert Mustacchi     kstat_named_t pwwn_lo;
317d14abf15SRobert Mustacchi     kstat_named_t mtu;
318d14abf15SRobert Mustacchi     kstat_named_t initWqeTx;
319d14abf15SRobert Mustacchi     kstat_named_t initWqeTxErr;
320d14abf15SRobert Mustacchi     kstat_named_t initCqeRx;
321d14abf15SRobert Mustacchi     kstat_named_t initCqeRxErr;
322d14abf15SRobert Mustacchi     kstat_named_t offloadConnWqeTx;
323d14abf15SRobert Mustacchi     kstat_named_t offloadConnWqeTxErr;
324d14abf15SRobert Mustacchi     kstat_named_t offloadConnCqeRx;
325d14abf15SRobert Mustacchi     kstat_named_t offloadConnCqeRxErr;
326d14abf15SRobert Mustacchi     kstat_named_t enableConnWqeTx;
327d14abf15SRobert Mustacchi     kstat_named_t enableConnWqeTxErr;
328d14abf15SRobert Mustacchi     kstat_named_t enableConnCqeRx;
329d14abf15SRobert Mustacchi     kstat_named_t enableConnCqeRxErr;
330d14abf15SRobert Mustacchi     kstat_named_t disableConnWqeTx;
331d14abf15SRobert Mustacchi     kstat_named_t disableConnWqeTxErr;
332d14abf15SRobert Mustacchi     kstat_named_t disableConnCqeRx;
333d14abf15SRobert Mustacchi     kstat_named_t disableConnCqeRxErr;
334d14abf15SRobert Mustacchi     kstat_named_t destroyConnWqeTx;
335d14abf15SRobert Mustacchi     kstat_named_t destroyConnWqeTxErr;
336d14abf15SRobert Mustacchi     kstat_named_t destroyConnCqeRx;
337d14abf15SRobert Mustacchi     kstat_named_t destroyConnCqeRxErr;
338d14abf15SRobert Mustacchi     kstat_named_t destroyWqeTx;
339d14abf15SRobert Mustacchi     kstat_named_t destroyWqeTxErr;
340d14abf15SRobert Mustacchi     kstat_named_t destroyCqeRx;
341d14abf15SRobert Mustacchi     kstat_named_t destroyCqeRxErr;
342d14abf15SRobert Mustacchi     kstat_named_t compRequestCqeRx;
343d14abf15SRobert Mustacchi     kstat_named_t compRequestCqeRxErr;
344d14abf15SRobert Mustacchi     kstat_named_t statWqeTx;
345d14abf15SRobert Mustacchi     kstat_named_t statWqeTxErr;
346d14abf15SRobert Mustacchi     kstat_named_t statCqeRx;
347d14abf15SRobert Mustacchi     kstat_named_t statCqeRxErr;
348d14abf15SRobert Mustacchi } BnxeKstatFcoe;
349d14abf15SRobert Mustacchi 
350d14abf15SRobert Mustacchi #define BNXE_KSTAT_FCOE_SIZE (sizeof(BnxeKstatFcoe) / sizeof(kstat_named_t))
351d14abf15SRobert Mustacchi 
352d14abf15SRobert Mustacchi typedef struct _BnxeKstatDcbx
353d14abf15SRobert Mustacchi {
354d14abf15SRobert Mustacchi     kstat_named_t dcbx_sync;
355d14abf15SRobert Mustacchi     kstat_named_t dcbx_vers;
356d14abf15SRobert Mustacchi     kstat_named_t overwrite_settings;
357d14abf15SRobert Mustacchi     kstat_named_t prio_tag;
358d14abf15SRobert Mustacchi     kstat_named_t prio_tag_fcoe;
359d14abf15SRobert Mustacchi     kstat_named_t prio_tag_iscsi;
360d14abf15SRobert Mustacchi     kstat_named_t prio_tag_net;
361d14abf15SRobert Mustacchi     kstat_named_t pfc;
362d14abf15SRobert Mustacchi     kstat_named_t pfc_prio_0;
363d14abf15SRobert Mustacchi     kstat_named_t pfc_prio_1;
364d14abf15SRobert Mustacchi     kstat_named_t pfc_prio_2;
365d14abf15SRobert Mustacchi     kstat_named_t pfc_prio_3;
366d14abf15SRobert Mustacchi     kstat_named_t pfc_prio_4;
367d14abf15SRobert Mustacchi     kstat_named_t pfc_prio_5;
368d14abf15SRobert Mustacchi     kstat_named_t pfc_prio_6;
369d14abf15SRobert Mustacchi     kstat_named_t pfc_prio_7;
370d14abf15SRobert Mustacchi     kstat_named_t ets;
371d14abf15SRobert Mustacchi     kstat_named_t ets_prio_0_pg;
372d14abf15SRobert Mustacchi     kstat_named_t ets_prio_1_pg;
373d14abf15SRobert Mustacchi     kstat_named_t ets_prio_2_pg;
374d14abf15SRobert Mustacchi     kstat_named_t ets_prio_3_pg;
375d14abf15SRobert Mustacchi     kstat_named_t ets_prio_4_pg;
376d14abf15SRobert Mustacchi     kstat_named_t ets_prio_5_pg;
377d14abf15SRobert Mustacchi     kstat_named_t ets_prio_6_pg;
378d14abf15SRobert Mustacchi     kstat_named_t ets_prio_7_pg;
379d14abf15SRobert Mustacchi     kstat_named_t ets_pg_0_bw;
380d14abf15SRobert Mustacchi     kstat_named_t ets_pg_1_bw;
381d14abf15SRobert Mustacchi     kstat_named_t ets_pg_2_bw;
382d14abf15SRobert Mustacchi     kstat_named_t ets_pg_3_bw;
383d14abf15SRobert Mustacchi     kstat_named_t ets_pg_4_bw;
384d14abf15SRobert Mustacchi     kstat_named_t ets_pg_5_bw;
385d14abf15SRobert Mustacchi     kstat_named_t ets_pg_6_bw;
386d14abf15SRobert Mustacchi     kstat_named_t ets_pg_7_bw;
387d14abf15SRobert Mustacchi     kstat_named_t lldp;
388d14abf15SRobert Mustacchi     kstat_named_t lldp_tx_interval;
389d14abf15SRobert Mustacchi     kstat_named_t lldp_tx_fast_interval;
390d14abf15SRobert Mustacchi     kstat_named_t amib_apptlv_willing;
391d14abf15SRobert Mustacchi     kstat_named_t amib_apptlv_tx;
392d14abf15SRobert Mustacchi     kstat_named_t amib_apptlv_net_prio;
393d14abf15SRobert Mustacchi     kstat_named_t amib_apptlv_tbl_0_prio;
394d14abf15SRobert Mustacchi     kstat_named_t amib_apptlv_tbl_0_appid;
395d14abf15SRobert Mustacchi     kstat_named_t amib_apptlv_tbl_1_prio;
396d14abf15SRobert Mustacchi     kstat_named_t amib_apptlv_tbl_1_appid;
397d14abf15SRobert Mustacchi     kstat_named_t amib_apptlv_tbl_2_prio;
398d14abf15SRobert Mustacchi     kstat_named_t amib_apptlv_tbl_2_appid;
399d14abf15SRobert Mustacchi     kstat_named_t amib_apptlv_tbl_3_prio;
400d14abf15SRobert Mustacchi     kstat_named_t amib_apptlv_tbl_3_appid;
401d14abf15SRobert Mustacchi     kstat_named_t amib_pgtlv_willing;
402d14abf15SRobert Mustacchi     kstat_named_t amib_pgtlv_tx;
403d14abf15SRobert Mustacchi     kstat_named_t amib_pgtlv_tc_supported;
404d14abf15SRobert Mustacchi     kstat_named_t amib_pgtlv_ets;
405d14abf15SRobert Mustacchi     kstat_named_t amib_pgtlv_pg_0_bw;
406d14abf15SRobert Mustacchi     kstat_named_t amib_pgtlv_pg_1_bw;
407d14abf15SRobert Mustacchi     kstat_named_t amib_pgtlv_pg_2_bw;
408d14abf15SRobert Mustacchi     kstat_named_t amib_pgtlv_pg_3_bw;
409d14abf15SRobert Mustacchi     kstat_named_t amib_pgtlv_pg_4_bw;
410d14abf15SRobert Mustacchi     kstat_named_t amib_pgtlv_pg_5_bw;
411d14abf15SRobert Mustacchi     kstat_named_t amib_pgtlv_pg_6_bw;
412d14abf15SRobert Mustacchi     kstat_named_t amib_pgtlv_pg_7_bw;
413d14abf15SRobert Mustacchi     kstat_named_t amib_pgtlv_prio_0_map;
414d14abf15SRobert Mustacchi     kstat_named_t amib_pgtlv_prio_1_map;
415d14abf15SRobert Mustacchi     kstat_named_t amib_pgtlv_prio_2_map;
416d14abf15SRobert Mustacchi     kstat_named_t amib_pgtlv_prio_3_map;
417d14abf15SRobert Mustacchi     kstat_named_t amib_pgtlv_prio_4_map;
418d14abf15SRobert Mustacchi     kstat_named_t amib_pgtlv_prio_5_map;
419d14abf15SRobert Mustacchi     kstat_named_t amib_pgtlv_prio_6_map;
420d14abf15SRobert Mustacchi     kstat_named_t amib_pgtlv_prio_7_map;
421d14abf15SRobert Mustacchi     kstat_named_t amib_pfctlv_willing;
422d14abf15SRobert Mustacchi     kstat_named_t amib_pfctlv_tx;
423d14abf15SRobert Mustacchi     kstat_named_t amib_pfctlv_pfc;
424d14abf15SRobert Mustacchi     kstat_named_t amib_pfctlv_pfc_map;
425d14abf15SRobert Mustacchi     kstat_named_t rmib_apptlv_willing;
426d14abf15SRobert Mustacchi     kstat_named_t rmib_apptlv_tbl_0_prio;
427d14abf15SRobert Mustacchi     kstat_named_t rmib_apptlv_tbl_0_appid;
428d14abf15SRobert Mustacchi     kstat_named_t rmib_apptlv_tbl_1_prio;
429d14abf15SRobert Mustacchi     kstat_named_t rmib_apptlv_tbl_1_appid;
430d14abf15SRobert Mustacchi     kstat_named_t rmib_apptlv_tbl_2_prio;
431d14abf15SRobert Mustacchi     kstat_named_t rmib_apptlv_tbl_2_appid;
432d14abf15SRobert Mustacchi     kstat_named_t rmib_apptlv_tbl_3_prio;
433d14abf15SRobert Mustacchi     kstat_named_t rmib_apptlv_tbl_3_appid;
434d14abf15SRobert Mustacchi     kstat_named_t rmib_pgtlv_willing;
435d14abf15SRobert Mustacchi     kstat_named_t rmib_pgtlv_tc_supported;
436d14abf15SRobert Mustacchi     kstat_named_t rmib_pgtlv_pg_0_bw;
437d14abf15SRobert Mustacchi     kstat_named_t rmib_pgtlv_pg_1_bw;
438d14abf15SRobert Mustacchi     kstat_named_t rmib_pgtlv_pg_2_bw;
439d14abf15SRobert Mustacchi     kstat_named_t rmib_pgtlv_pg_3_bw;
440d14abf15SRobert Mustacchi     kstat_named_t rmib_pgtlv_pg_4_bw;
441d14abf15SRobert Mustacchi     kstat_named_t rmib_pgtlv_pg_5_bw;
442d14abf15SRobert Mustacchi     kstat_named_t rmib_pgtlv_pg_6_bw;
443d14abf15SRobert Mustacchi     kstat_named_t rmib_pgtlv_pg_7_bw;
444d14abf15SRobert Mustacchi     kstat_named_t rmib_pgtlv_prio_0_map;
445d14abf15SRobert Mustacchi     kstat_named_t rmib_pgtlv_prio_1_map;
446d14abf15SRobert Mustacchi     kstat_named_t rmib_pgtlv_prio_2_map;
447d14abf15SRobert Mustacchi     kstat_named_t rmib_pgtlv_prio_3_map;
448d14abf15SRobert Mustacchi     kstat_named_t rmib_pgtlv_prio_4_map;
449d14abf15SRobert Mustacchi     kstat_named_t rmib_pgtlv_prio_5_map;
450d14abf15SRobert Mustacchi     kstat_named_t rmib_pgtlv_prio_6_map;
451d14abf15SRobert Mustacchi     kstat_named_t rmib_pgtlv_prio_7_map;
452d14abf15SRobert Mustacchi     kstat_named_t rmib_pfctlv_willing;
453d14abf15SRobert Mustacchi     kstat_named_t rmib_pfctlv_pfc_map;
454d14abf15SRobert Mustacchi     kstat_named_t rmib_pfctlv_capable;
455d14abf15SRobert Mustacchi     kstat_named_t lmib_apptlv_tbl_0_prio;
456d14abf15SRobert Mustacchi     kstat_named_t lmib_apptlv_tbl_0_appid;
457d14abf15SRobert Mustacchi     kstat_named_t lmib_apptlv_tbl_1_prio;
458d14abf15SRobert Mustacchi     kstat_named_t lmib_apptlv_tbl_1_appid;
459d14abf15SRobert Mustacchi     kstat_named_t lmib_apptlv_tbl_2_prio;
460d14abf15SRobert Mustacchi     kstat_named_t lmib_apptlv_tbl_2_appid;
461d14abf15SRobert Mustacchi     kstat_named_t lmib_apptlv_tbl_3_prio;
462d14abf15SRobert Mustacchi     kstat_named_t lmib_apptlv_tbl_3_appid;
463d14abf15SRobert Mustacchi     kstat_named_t lmib_apptlv_mismatch;
464d14abf15SRobert Mustacchi     kstat_named_t lmib_pgtlv_ets;
465d14abf15SRobert Mustacchi     kstat_named_t lmib_pgtlv_tc_supported;
466d14abf15SRobert Mustacchi     kstat_named_t lmib_pgtlv_pg_0_bw;
467d14abf15SRobert Mustacchi     kstat_named_t lmib_pgtlv_pg_1_bw;
468d14abf15SRobert Mustacchi     kstat_named_t lmib_pgtlv_pg_2_bw;
469d14abf15SRobert Mustacchi     kstat_named_t lmib_pgtlv_pg_3_bw;
470d14abf15SRobert Mustacchi     kstat_named_t lmib_pgtlv_pg_4_bw;
471d14abf15SRobert Mustacchi     kstat_named_t lmib_pgtlv_pg_5_bw;
472d14abf15SRobert Mustacchi     kstat_named_t lmib_pgtlv_pg_6_bw;
473d14abf15SRobert Mustacchi     kstat_named_t lmib_pgtlv_pg_7_bw;
474d14abf15SRobert Mustacchi     kstat_named_t lmib_pgtlv_prio_0_map;
475d14abf15SRobert Mustacchi     kstat_named_t lmib_pgtlv_prio_1_map;
476d14abf15SRobert Mustacchi     kstat_named_t lmib_pgtlv_prio_2_map;
477d14abf15SRobert Mustacchi     kstat_named_t lmib_pgtlv_prio_3_map;
478d14abf15SRobert Mustacchi     kstat_named_t lmib_pgtlv_prio_4_map;
479d14abf15SRobert Mustacchi     kstat_named_t lmib_pgtlv_prio_5_map;
480d14abf15SRobert Mustacchi     kstat_named_t lmib_pgtlv_prio_6_map;
481d14abf15SRobert Mustacchi     kstat_named_t lmib_pgtlv_prio_7_map;
482d14abf15SRobert Mustacchi     kstat_named_t lmib_pfctlv_pfc;
483d14abf15SRobert Mustacchi     kstat_named_t lmib_pfctlv_pfc_map;
484d14abf15SRobert Mustacchi     kstat_named_t lmib_pfctlv_capable;
485d14abf15SRobert Mustacchi     kstat_named_t lmib_pfctlv_mismatch;
486d14abf15SRobert Mustacchi     kstat_named_t dcbx_frames_rx;
487d14abf15SRobert Mustacchi     kstat_named_t dcbx_frames_tx;
488d14abf15SRobert Mustacchi     kstat_named_t pfc_frames_rx;
489d14abf15SRobert Mustacchi     kstat_named_t pfc_frames_tx;
490d14abf15SRobert Mustacchi } BnxeKstatDcbx;
491d14abf15SRobert Mustacchi 
492d14abf15SRobert Mustacchi #define BNXE_KSTAT_DCBX_SIZE (sizeof(BnxeKstatDcbx) / sizeof(kstat_named_t))
493d14abf15SRobert Mustacchi 
494d14abf15SRobert Mustacchi typedef struct _BnxeKstatRxq
495d14abf15SRobert Mustacchi {
496d14abf15SRobert Mustacchi     kstat_named_t rxqBdTotal;
497d14abf15SRobert Mustacchi     kstat_named_t rxqBdLeft;
498d14abf15SRobert Mustacchi     kstat_named_t rxqBdPageCnt;
499d14abf15SRobert Mustacchi     kstat_named_t rxqBdsPerPage;
500d14abf15SRobert Mustacchi     kstat_named_t rxqBdSize;
501d14abf15SRobert Mustacchi     kstat_named_t rxqBdsSkipEop;
502d14abf15SRobert Mustacchi     kstat_named_t rxqBdProdIdx;
503d14abf15SRobert Mustacchi     kstat_named_t rxqBdConsIdx;
504d14abf15SRobert Mustacchi     kstat_named_t hwRxqConIdx;
505d14abf15SRobert Mustacchi     kstat_named_t sgeBdTotal;
506d14abf15SRobert Mustacchi     kstat_named_t sgeBdLeft;
507d14abf15SRobert Mustacchi     kstat_named_t sgeBdPageCnt;
508d14abf15SRobert Mustacchi     kstat_named_t sgeBdsPerPage;
509d14abf15SRobert Mustacchi     kstat_named_t sgeBdSize;
510d14abf15SRobert Mustacchi     kstat_named_t sgeBdsSkipEop;
511d14abf15SRobert Mustacchi     kstat_named_t sgeBdProdIdx;
512d14abf15SRobert Mustacchi     kstat_named_t sgeBdConsIdx;
513d14abf15SRobert Mustacchi     kstat_named_t rcqBdTotal;
514d14abf15SRobert Mustacchi     kstat_named_t rcqBdLeft;
515d14abf15SRobert Mustacchi     kstat_named_t rcqBdPageCnt;
516d14abf15SRobert Mustacchi     kstat_named_t rcqBdsPerPage;
517d14abf15SRobert Mustacchi     kstat_named_t rcqBdSize;
518d14abf15SRobert Mustacchi     kstat_named_t rcqBdsSkipEop;
519d14abf15SRobert Mustacchi     kstat_named_t rcqBdProdIdx;
520d14abf15SRobert Mustacchi     kstat_named_t rcqBdConsIdx;
521d14abf15SRobert Mustacchi     kstat_named_t hwRcqConIdx;
522d14abf15SRobert Mustacchi     kstat_named_t rxFreeDescs;
523d14abf15SRobert Mustacchi     kstat_named_t rxActiveDescs;
524d14abf15SRobert Mustacchi     kstat_named_t rxDoneDescs;
525d14abf15SRobert Mustacchi     kstat_named_t rxWaitingDescs;
526d14abf15SRobert Mustacchi     kstat_named_t rxCopied;
527d14abf15SRobert Mustacchi     kstat_named_t rxDiscards;
528d14abf15SRobert Mustacchi     kstat_named_t rxBufUpInStack;
529d14abf15SRobert Mustacchi     kstat_named_t rxLowWater;
530d14abf15SRobert Mustacchi     kstat_named_t inPollMode;
531d14abf15SRobert Mustacchi     kstat_named_t pollCnt;
532d14abf15SRobert Mustacchi     kstat_named_t intrDisableCnt;
533d14abf15SRobert Mustacchi     kstat_named_t intrEnableCnt;
534d14abf15SRobert Mustacchi     kstat_named_t genNumber;
535d14abf15SRobert Mustacchi } BnxeKstatRxq;
536d14abf15SRobert Mustacchi 
537d14abf15SRobert Mustacchi #define BNXE_KSTAT_RXQ_SIZE (sizeof(BnxeKstatRxq) / sizeof(kstat_named_t))
538d14abf15SRobert Mustacchi 
539d14abf15SRobert Mustacchi typedef struct _BnxeKstatTxq
540d14abf15SRobert Mustacchi {
541d14abf15SRobert Mustacchi     kstat_named_t txBdTotal;
542d14abf15SRobert Mustacchi     kstat_named_t txBdLeft;
543d14abf15SRobert Mustacchi     kstat_named_t txBdPageCnt;
544d14abf15SRobert Mustacchi     kstat_named_t txBdsPerPage;
545d14abf15SRobert Mustacchi     kstat_named_t txBdSize;
546d14abf15SRobert Mustacchi     kstat_named_t txBdsSkipEop;
547d14abf15SRobert Mustacchi     kstat_named_t hwTxqConIdx;
548d14abf15SRobert Mustacchi     kstat_named_t txPktIdx;
549d14abf15SRobert Mustacchi     kstat_named_t txBdProdIdx;
550d14abf15SRobert Mustacchi     kstat_named_t txBdConsIdx;
551d14abf15SRobert Mustacchi     kstat_named_t txSentPkts;
552d14abf15SRobert Mustacchi     kstat_named_t txFreeDesc;
553d14abf15SRobert Mustacchi     kstat_named_t txWaitingPkts;
554d14abf15SRobert Mustacchi     kstat_named_t txLowWater;
555d14abf15SRobert Mustacchi     kstat_named_t txFailed;
556d14abf15SRobert Mustacchi     kstat_named_t txDiscards;
557d14abf15SRobert Mustacchi     kstat_named_t txRecycle;
558d14abf15SRobert Mustacchi     kstat_named_t txCopied;
559d14abf15SRobert Mustacchi     kstat_named_t txBlocked;
560d14abf15SRobert Mustacchi     kstat_named_t txWait;
561d14abf15SRobert Mustacchi } BnxeKstatTxq;
562d14abf15SRobert Mustacchi 
563d14abf15SRobert Mustacchi #define BNXE_KSTAT_TXQ_SIZE (sizeof(BnxeKstatTxq) / sizeof(kstat_named_t))
564d14abf15SRobert Mustacchi 
565d14abf15SRobert Mustacchi 
BnxeKstatUpdate(kstat_t * kstats,int rw)566d14abf15SRobert Mustacchi static int BnxeKstatUpdate(kstat_t * kstats,
567d14abf15SRobert Mustacchi                            int       rw)
568d14abf15SRobert Mustacchi {
569d14abf15SRobert Mustacchi     BnxeKstat *   pStats = (BnxeKstat *)kstats->ks_data;
570d14abf15SRobert Mustacchi     um_device_t * pUM    = (um_device_t *)kstats->ks_private;
571d14abf15SRobert Mustacchi     lm_device_t * pLM    = (lm_device_t *)pUM;
572d14abf15SRobert Mustacchi     char buf[17]; /* 16 max for kstat string */
573d14abf15SRobert Mustacchi 
574d14abf15SRobert Mustacchi     if (rw == KSTAT_WRITE)
575d14abf15SRobert Mustacchi     {
576d14abf15SRobert Mustacchi         return EACCES;
577d14abf15SRobert Mustacchi     }
578d14abf15SRobert Mustacchi 
579d14abf15SRobert Mustacchi     BNXE_LOCK_ENTER_STATS(pUM);
580d14abf15SRobert Mustacchi 
581d14abf15SRobert Mustacchi     snprintf(buf, sizeof(buf), "%p", (void *)pUM);
582d14abf15SRobert Mustacchi     strncpy(pStats->umdev_hi.value.c, &buf[0], 8);
583d14abf15SRobert Mustacchi     pStats->umdev_hi.value.c[8] = 0;
584d14abf15SRobert Mustacchi     strncpy(pStats->umdev_lo.value.c, &buf[8], 8);
585d14abf15SRobert Mustacchi     pStats->umdev_lo.value.c[8] = 0;
586d14abf15SRobert Mustacchi 
587d14abf15SRobert Mustacchi     strncpy(pStats->version.value.c,   pUM->version,   sizeof(pStats->version.value.c));
588d14abf15SRobert Mustacchi     strncpy(pStats->versionFW.value.c, pUM->versionFW, sizeof(pStats->versionFW.value.c));
589d14abf15SRobert Mustacchi     strncpy(pStats->versionBC.value.c, pUM->versionBC, sizeof(pStats->versionBC.value.c));
590d14abf15SRobert Mustacchi 
591d14abf15SRobert Mustacchi     strncpy(pStats->chipName.value.c, pUM->chipName, sizeof(pStats->chipName.value.c));
592d14abf15SRobert Mustacchi     strncpy(pStats->chipID.value.c,   pUM->chipID,   sizeof(pStats->chipID.value.c));
593d14abf15SRobert Mustacchi 
594d14abf15SRobert Mustacchi     strncpy(pStats->devBDF.value.c, pUM->bus_dev_func,  sizeof(pStats->devBDF.value.c));
595d14abf15SRobert Mustacchi     strncpy(pStats->devID.value.c,  pUM->vendor_device, sizeof(pStats->devID.value.c));
596d14abf15SRobert Mustacchi 
597d14abf15SRobert Mustacchi     strncpy(pStats->multiFunction.value.c,
598d14abf15SRobert Mustacchi             ((pUM->lm_dev.params.mf_mode == SINGLE_FUNCTION)     ? "Single"  :
599d14abf15SRobert Mustacchi              (pUM->lm_dev.params.mf_mode == MULTI_FUNCTION_SD)   ? "MF-SD"   :
600d14abf15SRobert Mustacchi              (pUM->lm_dev.params.mf_mode == MULTI_FUNCTION_SI)   ? "MF-SI"   :
601d14abf15SRobert Mustacchi              (pUM->lm_dev.params.mf_mode == MULTI_FUNCTION_AFEX) ? "MF-AFEX" :
602d14abf15SRobert Mustacchi                                                                    "Unknown"),
603d14abf15SRobert Mustacchi             sizeof(pStats->multiFunction.value.c));
604d14abf15SRobert Mustacchi     pStats->multiFunctionVnics.value.ui64 = IS_MULTI_VNIC(&pUM->lm_dev) ? pLM->params.vnics_per_port : 0;
605d14abf15SRobert Mustacchi 
606d14abf15SRobert Mustacchi     snprintf(pStats->macAddr.value.c, 16, "%02x%02x%02x%02x%02x%02x",
607d14abf15SRobert Mustacchi              pLM->params.mac_addr[0], pLM->params.mac_addr[1],
608d14abf15SRobert Mustacchi              pLM->params.mac_addr[2], pLM->params.mac_addr[3],
609d14abf15SRobert Mustacchi              pLM->params.mac_addr[4], pLM->params.mac_addr[5]);
610d14abf15SRobert Mustacchi 
611d14abf15SRobert Mustacchi     pStats->hwInitDone.value.ui64 = pUM->hwInitDone;
612d14abf15SRobert Mustacchi 
613d14abf15SRobert Mustacchi     snprintf(pStats->clientsHw.value.c, 16, BnxeClientsHw(pUM));
614d14abf15SRobert Mustacchi     snprintf(pStats->clientsDevi.value.c, 16, BnxeClientsDevi(pUM));
615d14abf15SRobert Mustacchi     snprintf(pStats->clientsBound.value.c, 16, BnxeClientsBound(pUM));
616d14abf15SRobert Mustacchi 
617d14abf15SRobert Mustacchi     pStats->txMsgPullUp.value.ui64 = pUM->txMsgPullUp;
618d14abf15SRobert Mustacchi 
619d14abf15SRobert Mustacchi     strncpy(pStats->intrAlloc.value.c, pUM->intrAlloc, sizeof(pStats->intrAlloc.value.c));
620d14abf15SRobert Mustacchi     pStats->intrFired.value.ui64 = pUM->intrFired;
621d14abf15SRobert Mustacchi 
622d14abf15SRobert Mustacchi     pStats->timerFired.value.ui64          = pLM->vars.stats.stats_collect.timer_wakeup;
623d14abf15SRobert Mustacchi     pStats->timerReply.value.ui64          = pLM->vars.stats.stats_collect.stats_fw.drv_counter;
624d14abf15SRobert Mustacchi     pStats->timerNoReplyTotal.value.ui64   = pLM->vars.stats.stats_collect.stats_fw.timer_wakeup_no_completion_total;
625d14abf15SRobert Mustacchi     pStats->timerNoReplyCurrent.value.ui64 = pLM->vars.stats.stats_collect.stats_fw.timer_wakeup_no_completion_current;
626d14abf15SRobert Mustacchi     pStats->timerDone.value.ui64           = pLM->vars.stats.stats_collect.stats_fw.b_completion_done;
627d14abf15SRobert Mustacchi 
628d14abf15SRobert Mustacchi     pStats->workQueueInstCnt.value.ui64      = s_list_entry_cnt(&pUM->workqs.instq.workQueue);
629d14abf15SRobert Mustacchi     pStats->workItemInstQueued.value.ui64    = pUM->workqs.instq.workItemQueued;
630d14abf15SRobert Mustacchi     pStats->workItemInstError.value.ui64     = pUM->workqs.instq.workItemError;
631d14abf15SRobert Mustacchi     pStats->workItemInstComplete.value.ui64  = pUM->workqs.instq.workItemComplete;
632d14abf15SRobert Mustacchi     pStats->workItemInstHighWater.value.ui64 = pUM->workqs.instq.highWater;
633d14abf15SRobert Mustacchi 
634d14abf15SRobert Mustacchi     pStats->workQueueDelayCnt.value.ui64      = s_list_entry_cnt(&pUM->workqs.delayq.workQueue);
635d14abf15SRobert Mustacchi     pStats->workItemDelayQueued.value.ui64    = pUM->workqs.delayq.workItemQueued;
636d14abf15SRobert Mustacchi     pStats->workItemDelayError.value.ui64     = pUM->workqs.delayq.workItemError;
637d14abf15SRobert Mustacchi     pStats->workItemDelayComplete.value.ui64  = pUM->workqs.delayq.workItemComplete;
638d14abf15SRobert Mustacchi     pStats->workItemDelayHighWater.value.ui64 = pUM->workqs.delayq.highWater;
639d14abf15SRobert Mustacchi 
640d14abf15SRobert Mustacchi     pStats->memAllocBlocks.value.ui64 = d_list_entry_cnt(&pUM->memBlockList);
641d14abf15SRobert Mustacchi     pStats->memAllocDMAs.value.ui64   = d_list_entry_cnt(&pUM->memDmaList);
642d14abf15SRobert Mustacchi     pStats->memAllocBARs.value.ui64   = d_list_entry_cnt(&pUM->memRegionList);
643d14abf15SRobert Mustacchi 
644d14abf15SRobert Mustacchi     BNXE_LOCK_EXIT_STATS(pUM);
645d14abf15SRobert Mustacchi 
646d14abf15SRobert Mustacchi     return 0;
647d14abf15SRobert Mustacchi }
648d14abf15SRobert Mustacchi 
649d14abf15SRobert Mustacchi 
BnxeKstatLinkUpdate(kstat_t * kstats,int rw)650d14abf15SRobert Mustacchi static int BnxeKstatLinkUpdate(kstat_t * kstats,
651d14abf15SRobert Mustacchi                                int       rw)
652d14abf15SRobert Mustacchi {
653d14abf15SRobert Mustacchi     BnxeKstatLink * pStats = (BnxeKstatLink *)kstats->ks_data;
654d14abf15SRobert Mustacchi     um_device_t *   pUM    = (um_device_t *)kstats->ks_private;
655d14abf15SRobert Mustacchi     lm_device_t *   pLM    = (lm_device_t *)pUM;
656d14abf15SRobert Mustacchi 
657d14abf15SRobert Mustacchi     if (rw == KSTAT_WRITE)
658d14abf15SRobert Mustacchi     {
659d14abf15SRobert Mustacchi         return EACCES;
660d14abf15SRobert Mustacchi     }
661d14abf15SRobert Mustacchi 
662d14abf15SRobert Mustacchi     BNXE_LOCK_ENTER_STATS(pUM);
663d14abf15SRobert Mustacchi 
664d14abf15SRobert Mustacchi     snprintf(pStats->clients.value.c, 16, BnxeClientsBound(pUM));
665d14abf15SRobert Mustacchi     pStats->uptime.value.ui64  = (pUM->props.link_speed) ?
666d14abf15SRobert Mustacchi                                      (ddi_get_time() - pUM->props.uptime) : 0;
667d14abf15SRobert Mustacchi     pStats->mtuL2.value.ui64   = pUM->lm_dev.params.mtu[LM_CLI_IDX_NDIS];
668d14abf15SRobert Mustacchi     pStats->mtuFCOE.value.ui64 = (BNXE_FCOE(pUM)) ?
669d14abf15SRobert Mustacchi                                      pUM->lm_dev.params.mtu[LM_CLI_IDX_FCOE] :
670d14abf15SRobert Mustacchi                                      0;
671d14abf15SRobert Mustacchi     pStats->speed.value.ui64   = pUM->props.link_speed;
672d14abf15SRobert Mustacchi     pStats->link.value.ui64    = (!pUM->props.link_speed) ? 0 : 1;
673d14abf15SRobert Mustacchi     pStats->duplex.value.ui64  = pUM->props.link_duplex;
674d14abf15SRobert Mustacchi     pStats->pauseRx.value.ui64 = pUM->props.link_rxpause;
675d14abf15SRobert Mustacchi     pStats->pauseTx.value.ui64 = pUM->props.link_txpause;
676d14abf15SRobert Mustacchi 
677d14abf15SRobert Mustacchi     BNXE_LOCK_EXIT_STATS(pUM);
678d14abf15SRobert Mustacchi 
679d14abf15SRobert Mustacchi     return 0;
680d14abf15SRobert Mustacchi }
681d14abf15SRobert Mustacchi 
682d14abf15SRobert Mustacchi 
BnxeKstatIntrUpdate(kstat_t * kstats,int rw)683d14abf15SRobert Mustacchi static int BnxeKstatIntrUpdate(kstat_t * kstats,
684d14abf15SRobert Mustacchi                                int       rw)
685d14abf15SRobert Mustacchi {
686d14abf15SRobert Mustacchi     BnxeKstatIntr * pStats = (BnxeKstatIntr *)kstats->ks_data;
687d14abf15SRobert Mustacchi     um_device_t *   pUM    = (um_device_t *)kstats->ks_private;
688d14abf15SRobert Mustacchi     lm_device_t *   pLM    = (lm_device_t *)pUM;
689d14abf15SRobert Mustacchi 
690d14abf15SRobert Mustacchi     if (rw == KSTAT_WRITE)
691d14abf15SRobert Mustacchi     {
692d14abf15SRobert Mustacchi         return EACCES;
693d14abf15SRobert Mustacchi     }
694d14abf15SRobert Mustacchi 
695d14abf15SRobert Mustacchi     BNXE_LOCK_ENTER_STATS(pUM);
696d14abf15SRobert Mustacchi 
697d14abf15SRobert Mustacchi     strncpy(pStats->intrAlloc.value.c, pUM->intrAlloc, sizeof(pStats->intrAlloc.value.c));
698d14abf15SRobert Mustacchi     pStats->intrFired.value.ui64      = pUM->intrFired;
699d14abf15SRobert Mustacchi     pStats->intrWrongState.value.ui64 = pLM->vars.dbg_intr_in_wrong_state;
700d14abf15SRobert Mustacchi     pStats->intrInDisabled.value.ui64 = pLM->vars.dbg_intr_in_disabled;
701d14abf15SRobert Mustacchi     pStats->intrZeroStatus.value.ui64 = pLM->vars.dbg_intr_zero_status;
702d14abf15SRobert Mustacchi     pStats->sb_00.value.ui64          = pUM->intrSbCnt[0];
703d14abf15SRobert Mustacchi     pStats->sb_01.value.ui64          = pUM->intrSbCnt[1];
704d14abf15SRobert Mustacchi     pStats->sb_02.value.ui64          = pUM->intrSbCnt[2];
705d14abf15SRobert Mustacchi     pStats->sb_03.value.ui64          = pUM->intrSbCnt[3];
706d14abf15SRobert Mustacchi     pStats->sb_04.value.ui64          = pUM->intrSbCnt[4];
707d14abf15SRobert Mustacchi     pStats->sb_05.value.ui64          = pUM->intrSbCnt[5];
708d14abf15SRobert Mustacchi     pStats->sb_06.value.ui64          = pUM->intrSbCnt[6];
709d14abf15SRobert Mustacchi     pStats->sb_07.value.ui64          = pUM->intrSbCnt[7];
710d14abf15SRobert Mustacchi     pStats->sb_08.value.ui64          = pUM->intrSbCnt[8];
711d14abf15SRobert Mustacchi     pStats->sb_09.value.ui64          = pUM->intrSbCnt[9];
712d14abf15SRobert Mustacchi     pStats->sb_10.value.ui64          = pUM->intrSbCnt[10];
713d14abf15SRobert Mustacchi     pStats->sb_11.value.ui64          = pUM->intrSbCnt[11];
714d14abf15SRobert Mustacchi     pStats->sb_12.value.ui64          = pUM->intrSbCnt[12];
715d14abf15SRobert Mustacchi     pStats->sb_13.value.ui64          = pUM->intrSbCnt[13];
716d14abf15SRobert Mustacchi     pStats->sb_14.value.ui64          = pUM->intrSbCnt[14];
717d14abf15SRobert Mustacchi     pStats->sb_15.value.ui64          = pUM->intrSbCnt[15];
718d14abf15SRobert Mustacchi     pStats->sb_16.value.ui64          = pUM->intrSbCnt[16];
719d14abf15SRobert Mustacchi     pStats->sb_nc_00.value.ui64       = pUM->intrSbNoChangeCnt[0];
720d14abf15SRobert Mustacchi     pStats->sb_nc_01.value.ui64       = pUM->intrSbNoChangeCnt[1];
721d14abf15SRobert Mustacchi     pStats->sb_nc_02.value.ui64       = pUM->intrSbNoChangeCnt[2];
722d14abf15SRobert Mustacchi     pStats->sb_nc_03.value.ui64       = pUM->intrSbNoChangeCnt[3];
723d14abf15SRobert Mustacchi     pStats->sb_nc_04.value.ui64       = pUM->intrSbNoChangeCnt[4];
724d14abf15SRobert Mustacchi     pStats->sb_nc_05.value.ui64       = pUM->intrSbNoChangeCnt[5];
725d14abf15SRobert Mustacchi     pStats->sb_nc_06.value.ui64       = pUM->intrSbNoChangeCnt[6];
726d14abf15SRobert Mustacchi     pStats->sb_nc_07.value.ui64       = pUM->intrSbNoChangeCnt[7];
727d14abf15SRobert Mustacchi     pStats->sb_nc_08.value.ui64       = pUM->intrSbNoChangeCnt[8];
728d14abf15SRobert Mustacchi     pStats->sb_nc_09.value.ui64       = pUM->intrSbNoChangeCnt[9];
729d14abf15SRobert Mustacchi     pStats->sb_nc_10.value.ui64       = pUM->intrSbNoChangeCnt[10];
730d14abf15SRobert Mustacchi     pStats->sb_nc_11.value.ui64       = pUM->intrSbNoChangeCnt[11];
731d14abf15SRobert Mustacchi     pStats->sb_nc_12.value.ui64       = pUM->intrSbNoChangeCnt[12];
732d14abf15SRobert Mustacchi     pStats->sb_nc_13.value.ui64       = pUM->intrSbNoChangeCnt[13];
733d14abf15SRobert Mustacchi     pStats->sb_nc_14.value.ui64       = pUM->intrSbNoChangeCnt[14];
734d14abf15SRobert Mustacchi     pStats->sb_nc_15.value.ui64       = pUM->intrSbNoChangeCnt[15];
735d14abf15SRobert Mustacchi     pStats->sb_nc_16.value.ui64       = pUM->intrSbNoChangeCnt[16];
736d14abf15SRobert Mustacchi     pStats->sb_poll_00.value.ui64     = pUM->intrSbPollCnt[0];
737d14abf15SRobert Mustacchi     pStats->sb_poll_01.value.ui64     = pUM->intrSbPollCnt[1];
738d14abf15SRobert Mustacchi     pStats->sb_poll_02.value.ui64     = pUM->intrSbPollCnt[2];
739d14abf15SRobert Mustacchi     pStats->sb_poll_03.value.ui64     = pUM->intrSbPollCnt[3];
740d14abf15SRobert Mustacchi     pStats->sb_poll_04.value.ui64     = pUM->intrSbPollCnt[4];
741d14abf15SRobert Mustacchi     pStats->sb_poll_05.value.ui64     = pUM->intrSbPollCnt[5];
742d14abf15SRobert Mustacchi     pStats->sb_poll_06.value.ui64     = pUM->intrSbPollCnt[6];
743d14abf15SRobert Mustacchi     pStats->sb_poll_07.value.ui64     = pUM->intrSbPollCnt[7];
744d14abf15SRobert Mustacchi     pStats->sb_poll_08.value.ui64     = pUM->intrSbPollCnt[8];
745d14abf15SRobert Mustacchi     pStats->sb_poll_09.value.ui64     = pUM->intrSbPollCnt[9];
746d14abf15SRobert Mustacchi     pStats->sb_poll_10.value.ui64     = pUM->intrSbPollCnt[10];
747d14abf15SRobert Mustacchi     pStats->sb_poll_11.value.ui64     = pUM->intrSbPollCnt[11];
748d14abf15SRobert Mustacchi     pStats->sb_poll_12.value.ui64     = pUM->intrSbPollCnt[12];
749d14abf15SRobert Mustacchi     pStats->sb_poll_13.value.ui64     = pUM->intrSbPollCnt[13];
750d14abf15SRobert Mustacchi     pStats->sb_poll_14.value.ui64     = pUM->intrSbPollCnt[14];
751d14abf15SRobert Mustacchi     pStats->sb_poll_15.value.ui64     = pUM->intrSbPollCnt[15];
752d14abf15SRobert Mustacchi     pStats->sb_poll_16.value.ui64     = pUM->intrSbPollCnt[16];
753d14abf15SRobert Mustacchi     pStats->sb_poll_nc_00.value.ui64  = pUM->intrSbPollNoChangeCnt[0];
754d14abf15SRobert Mustacchi     pStats->sb_poll_nc_01.value.ui64  = pUM->intrSbPollNoChangeCnt[1];
755d14abf15SRobert Mustacchi     pStats->sb_poll_nc_02.value.ui64  = pUM->intrSbPollNoChangeCnt[2];
756d14abf15SRobert Mustacchi     pStats->sb_poll_nc_03.value.ui64  = pUM->intrSbPollNoChangeCnt[3];
757d14abf15SRobert Mustacchi     pStats->sb_poll_nc_04.value.ui64  = pUM->intrSbPollNoChangeCnt[4];
758d14abf15SRobert Mustacchi     pStats->sb_poll_nc_05.value.ui64  = pUM->intrSbPollNoChangeCnt[5];
759d14abf15SRobert Mustacchi     pStats->sb_poll_nc_06.value.ui64  = pUM->intrSbPollNoChangeCnt[6];
760d14abf15SRobert Mustacchi     pStats->sb_poll_nc_07.value.ui64  = pUM->intrSbPollNoChangeCnt[7];
761d14abf15SRobert Mustacchi     pStats->sb_poll_nc_08.value.ui64  = pUM->intrSbPollNoChangeCnt[8];
762d14abf15SRobert Mustacchi     pStats->sb_poll_nc_09.value.ui64  = pUM->intrSbPollNoChangeCnt[9];
763d14abf15SRobert Mustacchi     pStats->sb_poll_nc_10.value.ui64  = pUM->intrSbPollNoChangeCnt[10];
764d14abf15SRobert Mustacchi     pStats->sb_poll_nc_11.value.ui64  = pUM->intrSbPollNoChangeCnt[11];
765d14abf15SRobert Mustacchi     pStats->sb_poll_nc_12.value.ui64  = pUM->intrSbPollNoChangeCnt[12];
766d14abf15SRobert Mustacchi     pStats->sb_poll_nc_13.value.ui64  = pUM->intrSbPollNoChangeCnt[13];
767d14abf15SRobert Mustacchi     pStats->sb_poll_nc_14.value.ui64  = pUM->intrSbPollNoChangeCnt[14];
768d14abf15SRobert Mustacchi     pStats->sb_poll_nc_15.value.ui64  = pUM->intrSbPollNoChangeCnt[15];
769d14abf15SRobert Mustacchi     pStats->sb_poll_nc_16.value.ui64  = pUM->intrSbPollNoChangeCnt[16];
770d14abf15SRobert Mustacchi 
771d14abf15SRobert Mustacchi     BNXE_LOCK_EXIT_STATS(pUM);
772d14abf15SRobert Mustacchi 
773d14abf15SRobert Mustacchi     return 0;
774d14abf15SRobert Mustacchi }
775d14abf15SRobert Mustacchi 
776d14abf15SRobert Mustacchi 
BnxeKstatL2ChipUpdate(kstat_t * kstats,int rw)777d14abf15SRobert Mustacchi static int BnxeKstatL2ChipUpdate(kstat_t * kstats,
778d14abf15SRobert Mustacchi                                  int       rw)
779d14abf15SRobert Mustacchi {
780d14abf15SRobert Mustacchi     BnxeKstatL2Chip * pStats = (BnxeKstatL2Chip *)kstats->ks_data;
781d14abf15SRobert Mustacchi     um_device_t *     pUM    = (um_device_t *)kstats->ks_private;
782d14abf15SRobert Mustacchi     lm_device_t *     pLM    = (lm_device_t *)pUM;
783d14abf15SRobert Mustacchi     b10_l2_chip_statistics_t b10_l2_stats;
784d14abf15SRobert Mustacchi 
785d14abf15SRobert Mustacchi     if (rw == KSTAT_WRITE)
786d14abf15SRobert Mustacchi     {
787d14abf15SRobert Mustacchi         return EACCES;
788d14abf15SRobert Mustacchi     }
789d14abf15SRobert Mustacchi 
790d14abf15SRobert Mustacchi     BNXE_LOCK_ENTER_STATS(pUM);
791d14abf15SRobert Mustacchi 
792d14abf15SRobert Mustacchi     lm_stats_get_l2_chip_stats(pLM, &b10_l2_stats,
793d14abf15SRobert Mustacchi                                L2_CHIP_STATISTICS_VER_NUM_1);
794d14abf15SRobert Mustacchi 
795d14abf15SRobert Mustacchi     pStats->IfHCInOctets.value.ui64                       = b10_l2_stats.IfHCInOctets;
796d14abf15SRobert Mustacchi     pStats->IfHCInBadOctets.value.ui64                    = b10_l2_stats.IfHCInBadOctets;
797d14abf15SRobert Mustacchi     pStats->IfHCOutOctets.value.ui64                      = b10_l2_stats.IfHCOutOctets;
798d14abf15SRobert Mustacchi     pStats->IfHCOutBadOctets.value.ui64                   = b10_l2_stats.IfHCOutBadOctets;
799d14abf15SRobert Mustacchi     pStats->IfHCOutPkts.value.ui64                        = b10_l2_stats.IfHCOutPkts;
800d14abf15SRobert Mustacchi     pStats->IfHCInPkts.value.ui64                         = b10_l2_stats.IfHCInPkts;
801d14abf15SRobert Mustacchi     pStats->IfHCInUcastPkts.value.ui64                    = b10_l2_stats.IfHCInUcastPkts;
802d14abf15SRobert Mustacchi     pStats->IfHCInMulticastPkts.value.ui64                = b10_l2_stats.IfHCInMulticastPkts;
803d14abf15SRobert Mustacchi     pStats->IfHCInBroadcastPkts.value.ui64                = b10_l2_stats.IfHCInBroadcastPkts;
804d14abf15SRobert Mustacchi     pStats->IfHCOutUcastPkts.value.ui64                   = b10_l2_stats.IfHCOutUcastPkts;
805d14abf15SRobert Mustacchi     pStats->IfHCOutMulticastPkts.value.ui64               = b10_l2_stats.IfHCOutMulticastPkts;
806d14abf15SRobert Mustacchi     pStats->IfHCOutBroadcastPkts.value.ui64               = b10_l2_stats.IfHCOutBroadcastPkts;
807d14abf15SRobert Mustacchi     pStats->IfHCInUcastOctets.value.ui64                  = b10_l2_stats.IfHCInUcastOctets;
808d14abf15SRobert Mustacchi     pStats->IfHCInMulticastOctets.value.ui64              = b10_l2_stats.IfHCInMulticastOctets;
809d14abf15SRobert Mustacchi     pStats->IfHCInBroadcastOctets.value.ui64              = b10_l2_stats.IfHCInBroadcastOctets;
810d14abf15SRobert Mustacchi     pStats->IfHCOutUcastOctets.value.ui64                 = b10_l2_stats.IfHCOutUcastOctets;
811d14abf15SRobert Mustacchi     pStats->IfHCOutMulticastOctets.value.ui64             = b10_l2_stats.IfHCOutMulticastOctets;
812d14abf15SRobert Mustacchi     pStats->IfHCOutBroadcastOctets.value.ui64             = b10_l2_stats.IfHCOutBroadcastOctets;
813d14abf15SRobert Mustacchi     pStats->IfHCOutDiscards.value.ui64                    = b10_l2_stats.IfHCOutDiscards;
814d14abf15SRobert Mustacchi     pStats->IfHCInFalseCarrierErrors.value.ui64           = b10_l2_stats.IfHCInFalseCarrierErrors;
815d14abf15SRobert Mustacchi     pStats->Dot3StatsInternalMacTransmitErrors.value.ui64 = b10_l2_stats.Dot3StatsInternalMacTransmitErrors;
816d14abf15SRobert Mustacchi     pStats->Dot3StatsCarrierSenseErrors.value.ui64        = b10_l2_stats.Dot3StatsCarrierSenseErrors;
817d14abf15SRobert Mustacchi     pStats->Dot3StatsFCSErrors.value.ui64                 = b10_l2_stats.Dot3StatsFCSErrors;
818d14abf15SRobert Mustacchi     pStats->Dot3StatsAlignmentErrors.value.ui64           = b10_l2_stats.Dot3StatsAlignmentErrors;
819d14abf15SRobert Mustacchi     pStats->Dot3StatsSingleCollisionFrames.value.ui64     = b10_l2_stats.Dot3StatsSingleCollisionFrames;
820d14abf15SRobert Mustacchi     pStats->Dot3StatsMultipleCollisionFrames.value.ui64   = b10_l2_stats.Dot3StatsMultipleCollisionFrames;
821d14abf15SRobert Mustacchi     pStats->Dot3StatsDeferredTransmissions.value.ui64     = b10_l2_stats.Dot3StatsDeferredTransmissions;
822d14abf15SRobert Mustacchi     pStats->Dot3StatsExcessiveCollisions.value.ui64       = b10_l2_stats.Dot3StatsExcessiveCollisions;
823d14abf15SRobert Mustacchi     pStats->Dot3StatsLateCollisions.value.ui64            = b10_l2_stats.Dot3StatsLateCollisions;
824d14abf15SRobert Mustacchi     pStats->EtherStatsCollisions.value.ui64               = b10_l2_stats.EtherStatsCollisions;
825d14abf15SRobert Mustacchi     pStats->EtherStatsFragments.value.ui64                = b10_l2_stats.EtherStatsFragments;
826d14abf15SRobert Mustacchi     pStats->EtherStatsJabbers.value.ui64                  = b10_l2_stats.EtherStatsJabbers;
827d14abf15SRobert Mustacchi     pStats->EtherStatsUndersizePkts.value.ui64            = b10_l2_stats.EtherStatsUndersizePkts;
828d14abf15SRobert Mustacchi     pStats->EtherStatsOverrsizePkts.value.ui64            = b10_l2_stats.EtherStatsOverrsizePkts;
829d14abf15SRobert Mustacchi     pStats->EtherStatsTx64Octets.value.ui64               = b10_l2_stats.EtherStatsPktsTx64Octets;
830d14abf15SRobert Mustacchi     pStats->EtherStatsTx65to127Octets.value.ui64          = b10_l2_stats.EtherStatsPktsTx65Octetsto127Octets;
831d14abf15SRobert Mustacchi     pStats->EtherStatsTx128to255Octets.value.ui64         = b10_l2_stats.EtherStatsPktsTx128Octetsto255Octets;
832d14abf15SRobert Mustacchi     pStats->EtherStatsTx256to511Octets.value.ui64         = b10_l2_stats.EtherStatsPktsTx256Octetsto511Octets;
833d14abf15SRobert Mustacchi     pStats->EtherStatsTx512to1023Octets.value.ui64        = b10_l2_stats.EtherStatsPktsTx512Octetsto1023Octets;
834d14abf15SRobert Mustacchi     pStats->EtherStatsTx1024to1522Octets.value.ui64       = b10_l2_stats.EtherStatsPktsTx1024Octetsto1522Octets;
835d14abf15SRobert Mustacchi     pStats->EtherStatsTxOver1522Octets.value.ui64         = b10_l2_stats.EtherStatsPktsTxOver1522Octets;
836d14abf15SRobert Mustacchi     pStats->XonPauseFramesReceived.value.ui64             = b10_l2_stats.XonPauseFramesReceived;
837d14abf15SRobert Mustacchi     pStats->XoffPauseFramesReceived.value.ui64            = b10_l2_stats.XoffPauseFramesReceived;
838d14abf15SRobert Mustacchi     pStats->OutXonSent.value.ui64                         = b10_l2_stats.OutXonSent;
839d14abf15SRobert Mustacchi     pStats->OutXoffSent.value.ui64                        = b10_l2_stats.OutXoffSent;
840d14abf15SRobert Mustacchi     pStats->FlowControlDone.value.ui64                    = b10_l2_stats.FlowControlDone;
841d14abf15SRobert Mustacchi     pStats->MacControlFramesReceived.value.ui64           = b10_l2_stats.MacControlFramesReceived;
842d14abf15SRobert Mustacchi     pStats->XoffStateEntered.value.ui64                   = b10_l2_stats.XoffStateEntered;
843d14abf15SRobert Mustacchi     pStats->IfInFramesL2FilterDiscards.value.ui64         = b10_l2_stats.IfInFramesL2FilterDiscards;
844d14abf15SRobert Mustacchi     pStats->IfInTTL0Discards.value.ui64                   = b10_l2_stats.IfInTTL0Discards;
845d14abf15SRobert Mustacchi     pStats->IfInxxOverflowDiscards.value.ui64             = b10_l2_stats.IfInxxOverflowDiscards;
846d14abf15SRobert Mustacchi     pStats->IfInMBUFDiscards.value.ui64                   = b10_l2_stats.IfInMBUFDiscards;
847d14abf15SRobert Mustacchi     pStats->IfInErrors.value.ui64                         = b10_l2_stats.IfInErrors;
848d14abf15SRobert Mustacchi     pStats->IfInErrorsOctets.value.ui64                   = b10_l2_stats.IfInErrorsOctets;
849d14abf15SRobert Mustacchi     pStats->IfInNoBrbBuffer.value.ui64                    = b10_l2_stats.IfInNoBrbBuffer;
850d14abf15SRobert Mustacchi     pStats->NigBrbPacket.value.ui64                       = b10_l2_stats.Nig_brb_packet;
851d14abf15SRobert Mustacchi     pStats->NigBrbTruncate.value.ui64                     = b10_l2_stats.Nig_brb_truncate;
852d14abf15SRobert Mustacchi     pStats->NigFlowCtrlDiscard.value.ui64                 = b10_l2_stats.Nig_flow_ctrl_discard;
853d14abf15SRobert Mustacchi     pStats->NigFlowCtrlOctets.value.ui64                  = b10_l2_stats.Nig_flow_ctrl_octets;
854d14abf15SRobert Mustacchi     pStats->NigFlowCtrlPacket.value.ui64                  = b10_l2_stats.Nig_flow_ctrl_packet;
855d14abf15SRobert Mustacchi     pStats->NigMngDiscard.value.ui64                      = b10_l2_stats.Nig_mng_discard;
856d14abf15SRobert Mustacchi     pStats->NigMngOctetInp.value.ui64                     = b10_l2_stats.Nig_mng_octet_inp;
857d14abf15SRobert Mustacchi     pStats->NigMngOctetOut.value.ui64                     = b10_l2_stats.Nig_mng_octet_out;
858d14abf15SRobert Mustacchi     pStats->NigMngPacketInp.value.ui64                    = b10_l2_stats.Nig_mng_packet_inp;
859d14abf15SRobert Mustacchi     pStats->NigMngPacketOut.value.ui64                    = b10_l2_stats.Nig_mng_packet_out;
860d14abf15SRobert Mustacchi     pStats->NigPbfOctets.value.ui64                       = b10_l2_stats.Nig_pbf_octets;
861d14abf15SRobert Mustacchi     pStats->NigPbfPacket.value.ui64                       = b10_l2_stats.Nig_pbf_packet;
862d14abf15SRobert Mustacchi     pStats->NigSafcInp.value.ui64                         = b10_l2_stats.Nig_safc_inp;
863d14abf15SRobert Mustacchi 
864d14abf15SRobert Mustacchi     BNXE_LOCK_EXIT_STATS(pUM);
865d14abf15SRobert Mustacchi 
866d14abf15SRobert Mustacchi     return 0;
867d14abf15SRobert Mustacchi }
868d14abf15SRobert Mustacchi 
869d14abf15SRobert Mustacchi 
BnxeKstatL2DriverUpdate(kstat_t * kstats,int rw)870d14abf15SRobert Mustacchi static int BnxeKstatL2DriverUpdate(kstat_t * kstats,
871d14abf15SRobert Mustacchi                                    int       rw)
872d14abf15SRobert Mustacchi {
873d14abf15SRobert Mustacchi     BnxeKstatL2Driver * pStats = (BnxeKstatL2Driver *)kstats->ks_data;
874d14abf15SRobert Mustacchi     um_device_t *       pUM    = (um_device_t *)kstats->ks_private;
875d14abf15SRobert Mustacchi     lm_device_t *       pLM    = (lm_device_t *)pUM;
876d14abf15SRobert Mustacchi     b10_l2_driver_statistics_t b10_l2_stats;
877d14abf15SRobert Mustacchi 
878d14abf15SRobert Mustacchi     if (rw == KSTAT_WRITE)
879d14abf15SRobert Mustacchi     {
880d14abf15SRobert Mustacchi         return EACCES;
881d14abf15SRobert Mustacchi     }
882d14abf15SRobert Mustacchi 
883d14abf15SRobert Mustacchi     BNXE_LOCK_ENTER_STATS(pUM);
884d14abf15SRobert Mustacchi 
885d14abf15SRobert Mustacchi     lm_stats_get_l2_driver_stats(pLM, &b10_l2_stats);
886d14abf15SRobert Mustacchi 
887d14abf15SRobert Mustacchi     pStats->RxIPv4FragCount.value.ui64    = b10_l2_stats.RxIPv4FragCount;
888d14abf15SRobert Mustacchi     pStats->RxIpCsErrorCount.value.ui64   = b10_l2_stats.RxIpCsErrorCount;
889d14abf15SRobert Mustacchi     pStats->RxTcpCsErrorCount.value.ui64  = b10_l2_stats.RxTcpCsErrorCount;
890d14abf15SRobert Mustacchi     pStats->RxLlcSnapCount.value.ui64     = b10_l2_stats.RxLlcSnapCount;
891d14abf15SRobert Mustacchi     pStats->RxPhyErrorCount.value.ui64    = b10_l2_stats.RxPhyErrorCount;
892d14abf15SRobert Mustacchi     pStats->RxIpv6ExtCount.value.ui64     = b10_l2_stats.RxIpv6ExtCount;
893d14abf15SRobert Mustacchi     pStats->TxNoL2Bd.value.ui64           = b10_l2_stats.TxNoL2Bd;
894d14abf15SRobert Mustacchi     pStats->TxNoSqWqe.value.ui64          = b10_l2_stats.TxNoSqWqe;
895d14abf15SRobert Mustacchi     pStats->TxL2AssemblyBufUse.value.ui64 = b10_l2_stats.TxL2AssemblyBufUse;
896d14abf15SRobert Mustacchi 
897d14abf15SRobert Mustacchi     BNXE_LOCK_EXIT_STATS(pUM);
898d14abf15SRobert Mustacchi 
899d14abf15SRobert Mustacchi     return 0;
900d14abf15SRobert Mustacchi }
901d14abf15SRobert Mustacchi 
902d14abf15SRobert Mustacchi 
BnxeKstatL2StatsUpdate(kstat_t * kstats,int rw)903d14abf15SRobert Mustacchi static int BnxeKstatL2StatsUpdate(kstat_t * kstats,
904d14abf15SRobert Mustacchi                                   int       rw)
905d14abf15SRobert Mustacchi {
906d14abf15SRobert Mustacchi     BnxeKstatEthStats * pStats = (BnxeKstatEthStats *)kstats->ks_data;
907d14abf15SRobert Mustacchi     um_device_t *       pUM    = (um_device_t *)kstats->ks_private;
908d14abf15SRobert Mustacchi     lm_device_t *       pLM    = (lm_device_t *)pUM;
909d14abf15SRobert Mustacchi 
910d14abf15SRobert Mustacchi     if (rw == KSTAT_WRITE)
911d14abf15SRobert Mustacchi     {
912d14abf15SRobert Mustacchi         return EACCES;
913d14abf15SRobert Mustacchi     }
914d14abf15SRobert Mustacchi 
915d14abf15SRobert Mustacchi     BNXE_LOCK_ENTER_STATS(pUM);
916d14abf15SRobert Mustacchi 
917d14abf15SRobert Mustacchi     lm_get_stats(pLM, LM_STATS_FRAMES_XMITTED_OK,         (u64_t *)&pStats->txFramesOk.value.ui64);
918d14abf15SRobert Mustacchi     lm_get_stats(pLM, LM_STATS_FRAMES_RECEIVED_OK,        (u64_t *)&pStats->rxFramesOk.value.ui64);
919d14abf15SRobert Mustacchi     lm_get_stats(pLM, LM_STATS_ERRORED_TRANSMIT_CNT,      (u64_t *)&pStats->txErr.value.ui64);
920d14abf15SRobert Mustacchi     lm_get_stats(pLM, LM_STATS_ERRORED_RECEIVE_CNT,       (u64_t *)&pStats->rxErr.value.ui64);
921d14abf15SRobert Mustacchi     lm_get_stats(pLM, LM_STATS_RCV_CRC_ERROR,             (u64_t *)&pStats->rxCrcErr.value.ui64);
922d14abf15SRobert Mustacchi     lm_get_stats(pLM, LM_STATS_ALIGNMENT_ERROR,           (u64_t *)&pStats->alignErr.value.ui64);
923d14abf15SRobert Mustacchi     lm_get_stats(pLM, LM_STATS_SINGLE_COLLISION_FRAMES,   (u64_t *)&pStats->collisionsSingle.value.ui64);
924d14abf15SRobert Mustacchi     lm_get_stats(pLM, LM_STATS_MULTIPLE_COLLISION_FRAMES, (u64_t *)&pStats->collisionsMultiple.value.ui64);
925d14abf15SRobert Mustacchi     lm_get_stats(pLM, LM_STATS_FRAMES_DEFERRED,           (u64_t *)&pStats->framesDeferred.value.ui64);
926d14abf15SRobert Mustacchi     lm_get_stats(pLM, LM_STATS_MAX_COLLISIONS,            (u64_t *)&pStats->collisonsMax.value.ui64);
927d14abf15SRobert Mustacchi     lm_get_stats(pLM, LM_STATS_RCV_OVERRUN,               (u64_t *)&pStats->rxOverrun.value.ui64);
928d14abf15SRobert Mustacchi     lm_get_stats(pLM, LM_STATS_XMIT_UNDERRUN,             (u64_t *)&pStats->txOverrun.value.ui64);
929d14abf15SRobert Mustacchi     lm_get_stats(pLM, LM_STATS_UNICAST_FRAMES_XMIT,       (u64_t *)&pStats->txFramesUnicast.value.ui64);
930d14abf15SRobert Mustacchi     lm_get_stats(pLM, LM_STATS_MULTICAST_FRAMES_XMIT,     (u64_t *)&pStats->txFramesMulticast.value.ui64);
931d14abf15SRobert Mustacchi     lm_get_stats(pLM, LM_STATS_BROADCAST_FRAMES_XMIT,     (u64_t *)&pStats->txFramesBroadcast.value.ui64);
932d14abf15SRobert Mustacchi     lm_get_stats(pLM, LM_STATS_UNICAST_FRAMES_RCV,        (u64_t *)&pStats->rxFramesUnicast.value.ui64);
933d14abf15SRobert Mustacchi     lm_get_stats(pLM, LM_STATS_MULTICAST_FRAMES_RCV,      (u64_t *)&pStats->rxFramesMulticast.value.ui64);
934d14abf15SRobert Mustacchi     lm_get_stats(pLM, LM_STATS_BROADCAST_FRAMES_RCV,      (u64_t *)&pStats->rxFramesBroadcast.value.ui64);
935d14abf15SRobert Mustacchi     lm_get_stats(pLM, LM_STATS_RCV_NO_BUFFER_DROP,        (u64_t *)&pStats->rxNoBufferDrop.value.ui64);
936d14abf15SRobert Mustacchi     lm_get_stats(pLM, LM_STATS_BYTES_RCV,                 (u64_t *)&pStats->rxBytes.value.ui64);
937d14abf15SRobert Mustacchi     lm_get_stats(pLM, LM_STATS_BYTES_XMIT,                (u64_t *)&pStats->txBytes.value.ui64);
938d14abf15SRobert Mustacchi     lm_get_stats(pLM, LM_STATS_IP4_OFFLOAD,               (u64_t *)&pStats->offloadIP4.value.ui64);
939d14abf15SRobert Mustacchi     lm_get_stats(pLM, LM_STATS_TCP_OFFLOAD,               (u64_t *)&pStats->offloadTCP.value.ui64);
940d14abf15SRobert Mustacchi     lm_get_stats(pLM, LM_STATS_IF_IN_DISCARDS,            (u64_t *)&pStats->ifInDiscards.value.ui64);
941d14abf15SRobert Mustacchi     lm_get_stats(pLM, LM_STATS_IF_IN_ERRORS,              (u64_t *)&pStats->ifInErrors.value.ui64);
942d14abf15SRobert Mustacchi     lm_get_stats(pLM, LM_STATS_IF_OUT_ERRORS,             (u64_t *)&pStats->ifOutErrors.value.ui64);
943d14abf15SRobert Mustacchi     lm_get_stats(pLM, LM_STATS_IP6_OFFLOAD,               (u64_t *)&pStats->offloadIP6.value.ui64);
944d14abf15SRobert Mustacchi     lm_get_stats(pLM, LM_STATS_TCP6_OFFLOAD,              (u64_t *)&pStats->offloadTCP6.value.ui64);
945d14abf15SRobert Mustacchi     lm_get_stats(pLM, LM_STATS_XMIT_DISCARDS,             (u64_t *)&pStats->txDiscards.value.ui64);
946d14abf15SRobert Mustacchi     lm_get_stats(pLM, LM_STATS_DIRECTED_BYTES_RCV,        (u64_t *)&pStats->rxBytesUnicast.value.ui64);
947d14abf15SRobert Mustacchi     lm_get_stats(pLM, LM_STATS_MULTICAST_BYTES_RCV,       (u64_t *)&pStats->rxBytesMulticast.value.ui64);
948d14abf15SRobert Mustacchi     lm_get_stats(pLM, LM_STATS_BROADCAST_BYTES_RCV,       (u64_t *)&pStats->rxBytesBroadcast.value.ui64);
949d14abf15SRobert Mustacchi     lm_get_stats(pLM, LM_STATS_DIRECTED_BYTES_XMIT,       (u64_t *)&pStats->txBytesUnicast.value.ui64);
950d14abf15SRobert Mustacchi     lm_get_stats(pLM, LM_STATS_MULTICAST_BYTES_XMIT,      (u64_t *)&pStats->txBytesMulticast.value.ui64);
951d14abf15SRobert Mustacchi     lm_get_stats(pLM, LM_STATS_BROADCAST_BYTES_XMIT,      (u64_t *)&pStats->txBytesBroadcast.value.ui64);
952d14abf15SRobert Mustacchi 
953d14abf15SRobert Mustacchi     BNXE_LOCK_EXIT_STATS(pUM);
954d14abf15SRobert Mustacchi 
955d14abf15SRobert Mustacchi     return 0;
956d14abf15SRobert Mustacchi }
957d14abf15SRobert Mustacchi 
958d14abf15SRobert Mustacchi 
BnxeKstatFcoeUpdate(kstat_t * kstats,int rw)959d14abf15SRobert Mustacchi static int BnxeKstatFcoeUpdate(kstat_t * kstats,
960d14abf15SRobert Mustacchi                                int       rw)
961d14abf15SRobert Mustacchi {
962d14abf15SRobert Mustacchi     BnxeKstatFcoe * pStats = (BnxeKstatFcoe *)kstats->ks_data;
963d14abf15SRobert Mustacchi     um_device_t * pUM      = (um_device_t *)kstats->ks_private;
964d14abf15SRobert Mustacchi     lm_device_t * pLM      = (lm_device_t *)pUM;
965d14abf15SRobert Mustacchi     char buf[17]; /* 16 max for kstat string */
966d14abf15SRobert Mustacchi 
967d14abf15SRobert Mustacchi     if (rw == KSTAT_WRITE)
968d14abf15SRobert Mustacchi     {
969d14abf15SRobert Mustacchi         return EACCES;
970d14abf15SRobert Mustacchi     }
971d14abf15SRobert Mustacchi 
972d14abf15SRobert Mustacchi     BNXE_LOCK_ENTER_STATS(pUM);
973d14abf15SRobert Mustacchi 
974d14abf15SRobert Mustacchi     if (pUM->fcoe.pDev)
975d14abf15SRobert Mustacchi     {
976d14abf15SRobert Mustacchi         snprintf(buf, sizeof(buf), "%p", (void *)pUM->fcoe.pDev);
977d14abf15SRobert Mustacchi         strncpy(pStats->pdev_hi.value.c, &buf[0], 8);
978d14abf15SRobert Mustacchi         pStats->pdev_hi.value.c[8] = 0;
979d14abf15SRobert Mustacchi         strncpy(pStats->pdev_lo.value.c, &buf[8], 8);
980d14abf15SRobert Mustacchi         pStats->pdev_lo.value.c[8] = 0;
981d14abf15SRobert Mustacchi 
982d14abf15SRobert Mustacchi         snprintf(pStats->instance.value.c, 16, "bnxef%d",
983d14abf15SRobert Mustacchi                  ddi_get_instance(pUM->fcoe.pDev));
984d14abf15SRobert Mustacchi 
985d14abf15SRobert Mustacchi         if ((pUM->fcoe.wwn.fcp_pwwn[0] == 0) &&
986d14abf15SRobert Mustacchi             (pUM->fcoe.wwn.fcp_pwwn[1] == 0) &&
987d14abf15SRobert Mustacchi             (pUM->fcoe.wwn.fcp_pwwn[2] == 0) &&
988d14abf15SRobert Mustacchi             (pUM->fcoe.wwn.fcp_pwwn[3] == 0) &&
989d14abf15SRobert Mustacchi             (pUM->fcoe.wwn.fcp_pwwn[4] == 0) &&
990d14abf15SRobert Mustacchi             (pUM->fcoe.wwn.fcp_pwwn[5] == 0) &&
991d14abf15SRobert Mustacchi             (pUM->fcoe.wwn.fcp_pwwn[6] == 0) &&
992d14abf15SRobert Mustacchi             (pUM->fcoe.wwn.fcp_pwwn[7] == 0))
993d14abf15SRobert Mustacchi         {
994d14abf15SRobert Mustacchi             snprintf(buf, sizeof(buf), "%02x%02x%02x%02x%02x%02x%02x%02x",
995d14abf15SRobert Mustacchi                      0x20, 0x00,
996d14abf15SRobert Mustacchi                      pLM->hw_info.fcoe_mac_addr[0],
997d14abf15SRobert Mustacchi                      pLM->hw_info.fcoe_mac_addr[1],
998d14abf15SRobert Mustacchi                      pLM->hw_info.fcoe_mac_addr[2],
999d14abf15SRobert Mustacchi                      pLM->hw_info.fcoe_mac_addr[3],
1000d14abf15SRobert Mustacchi                      pLM->hw_info.fcoe_mac_addr[4],
1001d14abf15SRobert Mustacchi                      pLM->hw_info.fcoe_mac_addr[5]);
1002d14abf15SRobert Mustacchi         }
1003d14abf15SRobert Mustacchi         else
1004d14abf15SRobert Mustacchi         {
1005d14abf15SRobert Mustacchi             snprintf(buf, sizeof(buf), "%02x%02x%02x%02x%02x%02x%02x%02x",
1006d14abf15SRobert Mustacchi                      pUM->fcoe.wwn.fcp_pwwn[0],
1007d14abf15SRobert Mustacchi                      pUM->fcoe.wwn.fcp_pwwn[1],
1008d14abf15SRobert Mustacchi                      pUM->fcoe.wwn.fcp_pwwn[2],
1009d14abf15SRobert Mustacchi                      pUM->fcoe.wwn.fcp_pwwn[3],
1010d14abf15SRobert Mustacchi                      pUM->fcoe.wwn.fcp_pwwn[4],
1011d14abf15SRobert Mustacchi                      pUM->fcoe.wwn.fcp_pwwn[5],
1012d14abf15SRobert Mustacchi                      pUM->fcoe.wwn.fcp_pwwn[7],
1013d14abf15SRobert Mustacchi                      pUM->fcoe.wwn.fcp_pwwn[7]);
1014d14abf15SRobert Mustacchi         }
1015d14abf15SRobert Mustacchi         strncpy(pStats->pwwn_hi.value.c, &buf[0], 8);
1016d14abf15SRobert Mustacchi         pStats->pwwn_hi.value.c[8] = 0;
1017d14abf15SRobert Mustacchi         strncpy(pStats->pwwn_lo.value.c, &buf[8], 8);
1018d14abf15SRobert Mustacchi         pStats->pwwn_lo.value.c[8] = 0;
1019d14abf15SRobert Mustacchi     }
1020d14abf15SRobert Mustacchi     else
1021d14abf15SRobert Mustacchi     {
1022d14abf15SRobert Mustacchi         strncpy(pStats->pdev_hi.value.c,  "none", sizeof(pStats->pdev_hi.value.c));
1023d14abf15SRobert Mustacchi         strncpy(pStats->pdev_lo.value.c,  "none", sizeof(pStats->pdev_lo.value.c));
1024d14abf15SRobert Mustacchi         strncpy(pStats->instance.value.c, "none", sizeof(pStats->instance.value.c));
1025d14abf15SRobert Mustacchi         strncpy(pStats->pwwn_hi.value.c,  "none", sizeof(pStats->pwwn_hi.value.c));
1026d14abf15SRobert Mustacchi         strncpy(pStats->pwwn_lo.value.c,  "none", sizeof(pStats->pwwn_lo.value.c));
1027d14abf15SRobert Mustacchi     }
1028d14abf15SRobert Mustacchi 
1029d14abf15SRobert Mustacchi     snprintf(pStats->macAddr.value.c, 16, "%02x%02x%02x%02x%02x%02x",
1030d14abf15SRobert Mustacchi              pLM->hw_info.fcoe_mac_addr[0], pLM->hw_info.fcoe_mac_addr[1],
1031d14abf15SRobert Mustacchi              pLM->hw_info.fcoe_mac_addr[2], pLM->hw_info.fcoe_mac_addr[3],
1032d14abf15SRobert Mustacchi              pLM->hw_info.fcoe_mac_addr[4], pLM->hw_info.fcoe_mac_addr[5]);
1033d14abf15SRobert Mustacchi 
1034d14abf15SRobert Mustacchi     pStats->mtu.value.ui64                 = pUM->lm_dev.params.mtu[LM_CLI_IDX_FCOE];
1035d14abf15SRobert Mustacchi     pStats->initWqeTx.value.ui64           = pUM->fcoe.stats.initWqeTx;
1036d14abf15SRobert Mustacchi     pStats->initWqeTxErr.value.ui64        = pUM->fcoe.stats.initWqeTxErr;
1037d14abf15SRobert Mustacchi     pStats->initCqeRx.value.ui64           = pUM->fcoe.stats.initCqeRx;
1038d14abf15SRobert Mustacchi     pStats->initCqeRxErr.value.ui64        = pUM->fcoe.stats.initCqeRxErr;
1039d14abf15SRobert Mustacchi     pStats->offloadConnWqeTx.value.ui64    = pUM->fcoe.stats.offloadConnWqeTx;
1040d14abf15SRobert Mustacchi     pStats->offloadConnWqeTxErr.value.ui64 = pUM->fcoe.stats.offloadConnWqeTxErr;
1041d14abf15SRobert Mustacchi     pStats->offloadConnCqeRx.value.ui64    = pUM->fcoe.stats.offloadConnCqeRx;
1042d14abf15SRobert Mustacchi     pStats->offloadConnCqeRxErr.value.ui64 = pUM->fcoe.stats.offloadConnCqeRxErr;
1043d14abf15SRobert Mustacchi     pStats->enableConnWqeTx.value.ui64     = pUM->fcoe.stats.enableConnWqeTx;
1044d14abf15SRobert Mustacchi     pStats->enableConnWqeTxErr.value.ui64  = pUM->fcoe.stats.enableConnWqeTxErr;
1045d14abf15SRobert Mustacchi     pStats->enableConnCqeRx.value.ui64     = pUM->fcoe.stats.enableConnCqeRx;
1046d14abf15SRobert Mustacchi     pStats->enableConnCqeRxErr.value.ui64  = pUM->fcoe.stats.enableConnCqeRxErr;
1047d14abf15SRobert Mustacchi     pStats->disableConnWqeTx.value.ui64    = pUM->fcoe.stats.disableConnWqeTx;
1048d14abf15SRobert Mustacchi     pStats->disableConnWqeTxErr.value.ui64 = pUM->fcoe.stats.disableConnWqeTxErr;
1049d14abf15SRobert Mustacchi     pStats->disableConnCqeRx.value.ui64    = pUM->fcoe.stats.disableConnCqeRx;
1050d14abf15SRobert Mustacchi     pStats->disableConnCqeRxErr.value.ui64 = pUM->fcoe.stats.disableConnCqeRxErr;
1051d14abf15SRobert Mustacchi     pStats->destroyConnWqeTx.value.ui64    = pUM->fcoe.stats.destroyConnWqeTx;
1052d14abf15SRobert Mustacchi     pStats->destroyConnWqeTxErr.value.ui64 = pUM->fcoe.stats.destroyConnWqeTxErr;
1053d14abf15SRobert Mustacchi     pStats->destroyConnCqeRx.value.ui64    = pUM->fcoe.stats.destroyConnCqeRx;
1054d14abf15SRobert Mustacchi     pStats->destroyConnCqeRxErr.value.ui64 = pUM->fcoe.stats.destroyConnCqeRxErr;
1055d14abf15SRobert Mustacchi     pStats->destroyWqeTx.value.ui64        = pUM->fcoe.stats.destroyWqeTx;
1056d14abf15SRobert Mustacchi     pStats->destroyWqeTxErr.value.ui64     = pUM->fcoe.stats.destroyWqeTxErr;
1057d14abf15SRobert Mustacchi     pStats->destroyCqeRx.value.ui64        = pUM->fcoe.stats.destroyCqeRx;
1058d14abf15SRobert Mustacchi     pStats->destroyCqeRxErr.value.ui64     = pUM->fcoe.stats.destroyCqeRxErr;
1059d14abf15SRobert Mustacchi     pStats->compRequestCqeRx.value.ui64    = pUM->fcoe.stats.compRequestCqeRx;
1060d14abf15SRobert Mustacchi     pStats->compRequestCqeRxErr.value.ui64 = pUM->fcoe.stats.compRequestCqeRxErr;
1061d14abf15SRobert Mustacchi     pStats->statWqeTx.value.ui64           = pUM->fcoe.stats.statWqeTx;
1062d14abf15SRobert Mustacchi     pStats->statWqeTxErr.value.ui64        = pUM->fcoe.stats.statWqeTxErr;
1063d14abf15SRobert Mustacchi     pStats->statCqeRx.value.ui64           = pUM->fcoe.stats.statCqeRx;
1064d14abf15SRobert Mustacchi     pStats->statCqeRxErr.value.ui64        = pUM->fcoe.stats.statCqeRxErr;
1065d14abf15SRobert Mustacchi 
1066d14abf15SRobert Mustacchi     BNXE_LOCK_EXIT_STATS(pUM);
1067d14abf15SRobert Mustacchi 
1068d14abf15SRobert Mustacchi     return 0;
1069d14abf15SRobert Mustacchi }
1070d14abf15SRobert Mustacchi 
1071d14abf15SRobert Mustacchi 
count_trailing_zeros(int number)1072d14abf15SRobert Mustacchi static int count_trailing_zeros(int number)
1073d14abf15SRobert Mustacchi {
1074d14abf15SRobert Mustacchi     int x, y, z;
1075d14abf15SRobert Mustacchi 
1076d14abf15SRobert Mustacchi     x = y = z = 0;
1077d14abf15SRobert Mustacchi 
1078d14abf15SRobert Mustacchi     for (y = 7; y >= 0; y--)
1079d14abf15SRobert Mustacchi     {
1080d14abf15SRobert Mustacchi         x = number / (1 << y);
1081d14abf15SRobert Mustacchi         number = number - x * (1 << y);
1082d14abf15SRobert Mustacchi         z++;
1083d14abf15SRobert Mustacchi 
1084d14abf15SRobert Mustacchi         if (x == 1)
1085d14abf15SRobert Mustacchi         {
1086d14abf15SRobert Mustacchi             z = 0;
1087d14abf15SRobert Mustacchi         }
1088d14abf15SRobert Mustacchi     }
1089d14abf15SRobert Mustacchi 
1090d14abf15SRobert Mustacchi     /* Add fix for all zero value */
1091d14abf15SRobert Mustacchi     if (z == 8)
1092d14abf15SRobert Mustacchi     {
1093d14abf15SRobert Mustacchi         z = 0;
1094d14abf15SRobert Mustacchi     }
1095d14abf15SRobert Mustacchi 
1096d14abf15SRobert Mustacchi     return z;
1097d14abf15SRobert Mustacchi }
1098d14abf15SRobert Mustacchi 
1099d14abf15SRobert Mustacchi 
BnxeKstatDcbxUpdate(kstat_t * kstats,int rw)1100d14abf15SRobert Mustacchi static int BnxeKstatDcbxUpdate(kstat_t * kstats,
1101d14abf15SRobert Mustacchi                                int       rw)
1102d14abf15SRobert Mustacchi {
1103d14abf15SRobert Mustacchi     BnxeKstatDcbx * pStats = (BnxeKstatDcbx *)kstats->ks_data;
1104d14abf15SRobert Mustacchi     um_device_t * pUM      = (um_device_t *)kstats->ks_private;
1105d14abf15SRobert Mustacchi     lm_device_t * pLM      = (lm_device_t *)pUM;
1106d14abf15SRobert Mustacchi     b10_lldp_params_get_t lldp_params;
1107d14abf15SRobert Mustacchi     b10_dcbx_params_get_t dcbx_params;
1108d14abf15SRobert Mustacchi     int fcoe_priority = -1;
1109d14abf15SRobert Mustacchi     int iscsi_priority = -1;
1110d14abf15SRobert Mustacchi     admin_priority_app_table_t * app_table;
1111d14abf15SRobert Mustacchi     char buf[17]; /* 16 max for kstat string */
1112d14abf15SRobert Mustacchi     int i;
1113d14abf15SRobert Mustacchi 
1114d14abf15SRobert Mustacchi     if (rw == KSTAT_WRITE)
1115d14abf15SRobert Mustacchi     {
1116d14abf15SRobert Mustacchi         return EACCES;
1117d14abf15SRobert Mustacchi     }
1118d14abf15SRobert Mustacchi 
1119d14abf15SRobert Mustacchi     lm_dcbx_lldp_read_params(pLM, &lldp_params);
1120d14abf15SRobert Mustacchi     lm_dcbx_read_params(pLM, &dcbx_params);
1121d14abf15SRobert Mustacchi 
1122d14abf15SRobert Mustacchi     BNXE_LOCK_ENTER_STATS(pUM);
1123d14abf15SRobert Mustacchi 
1124d14abf15SRobert Mustacchi     snprintf(pStats->dcbx_sync.value.c, 16, "%s",
1125d14abf15SRobert Mustacchi              (!dcbx_params.config_dcbx_params.dcb_enable) ? "disabled" :
1126d14abf15SRobert Mustacchi              (dcbx_params.dcb_current_oper_state_bitmap &
1127d14abf15SRobert Mustacchi               DCBX_CURRENT_STATE_IS_SYNC) ? "IN SYNC" : "OUT OF SYNC");
1128d14abf15SRobert Mustacchi 
1129d14abf15SRobert Mustacchi     snprintf(pStats->dcbx_vers.value.c, 16, "%s",
1130d14abf15SRobert Mustacchi              (dcbx_params.config_dcbx_params.admin_dcbx_version) ?
1131d14abf15SRobert Mustacchi                  "IEEE" : "CEE");
1132d14abf15SRobert Mustacchi 
1133d14abf15SRobert Mustacchi     snprintf(pStats->overwrite_settings.value.c, 16, "%s",
1134d14abf15SRobert Mustacchi              (dcbx_params.config_dcbx_params.overwrite_settings) ?
1135d14abf15SRobert Mustacchi                  "yes" : "no");
1136d14abf15SRobert Mustacchi 
1137d14abf15SRobert Mustacchi     if (dcbx_params.dcb_current_oper_state_bitmap &
1138d14abf15SRobert Mustacchi         PRIORITY_TAGGING_IS_CURRENTLY_OPERATIONAL)
1139d14abf15SRobert Mustacchi     {
1140d14abf15SRobert Mustacchi         snprintf(pStats->prio_tag.value.c, 16, "operational");
1141*55fea89dSDan Cross 
1142d14abf15SRobert Mustacchi         app_table = dcbx_params.local_priority_app_table;
1143d14abf15SRobert Mustacchi 
1144d14abf15SRobert Mustacchi         for (i = 0; i <= 3; i++)
1145d14abf15SRobert Mustacchi         {
1146d14abf15SRobert Mustacchi             if (app_table[i].valid)
1147d14abf15SRobert Mustacchi             {
1148d14abf15SRobert Mustacchi                 if ((app_table[i].traffic_type == TRAFFIC_TYPE_ETH) &&
1149d14abf15SRobert Mustacchi                     (app_table[i].app_id == 0x8906))
1150d14abf15SRobert Mustacchi                 {
1151d14abf15SRobert Mustacchi                     fcoe_priority = count_trailing_zeros(app_table[i].priority);
1152d14abf15SRobert Mustacchi                 }
1153d14abf15SRobert Mustacchi 
1154d14abf15SRobert Mustacchi                 if ((app_table[i].traffic_type != TRAFFIC_TYPE_ETH) &&
1155d14abf15SRobert Mustacchi                     (app_table[i].app_id == 3260))
1156d14abf15SRobert Mustacchi                 {
1157d14abf15SRobert Mustacchi                     iscsi_priority = count_trailing_zeros(app_table[i].priority);
1158d14abf15SRobert Mustacchi                 }
1159d14abf15SRobert Mustacchi             }
1160d14abf15SRobert Mustacchi         }
1161d14abf15SRobert Mustacchi 
1162d14abf15SRobert Mustacchi         snprintf(pStats->prio_tag_fcoe.value.c,  16, "%d", fcoe_priority);
1163d14abf15SRobert Mustacchi         snprintf(pStats->prio_tag_iscsi.value.c, 16, "%d", iscsi_priority);
1164d14abf15SRobert Mustacchi         snprintf(pStats->prio_tag_net.value.c,   16, "%d",
1165d14abf15SRobert Mustacchi                  dcbx_params.config_dcbx_params.admin_default_priority);
1166d14abf15SRobert Mustacchi     }
1167d14abf15SRobert Mustacchi     else
1168d14abf15SRobert Mustacchi     {
1169d14abf15SRobert Mustacchi         snprintf(pStats->prio_tag.value.c, 16, "not operational");
1170d14abf15SRobert Mustacchi 
1171d14abf15SRobert Mustacchi         snprintf(pStats->prio_tag_fcoe.value.c,  16, "-");
1172d14abf15SRobert Mustacchi         snprintf(pStats->prio_tag_iscsi.value.c, 16, "-");
1173d14abf15SRobert Mustacchi         snprintf(pStats->prio_tag_net.value.c,   16, "-");
1174d14abf15SRobert Mustacchi     }
1175d14abf15SRobert Mustacchi 
1176d14abf15SRobert Mustacchi     if (dcbx_params.dcb_current_oper_state_bitmap &
1177d14abf15SRobert Mustacchi         PFC_IS_CURRENTLY_OPERATIONAL)
1178d14abf15SRobert Mustacchi     {
1179d14abf15SRobert Mustacchi         snprintf(pStats->pfc.value.c, 16, "operational");
1180d14abf15SRobert Mustacchi 
1181d14abf15SRobert Mustacchi #define GET_PFC_PRIO(f, p)                                     \
1182d14abf15SRobert Mustacchi         snprintf(pStats->f.value.c, 16, "%s",                  \
1183d14abf15SRobert Mustacchi                  ((dcbx_params.local_pfc_bitmap >> (p)) & 1) ? \
1184d14abf15SRobert Mustacchi                      "enabled" : "disabled")
1185d14abf15SRobert Mustacchi 
1186d14abf15SRobert Mustacchi         GET_PFC_PRIO(pfc_prio_0, 0);
1187d14abf15SRobert Mustacchi         GET_PFC_PRIO(pfc_prio_1, 1);
1188d14abf15SRobert Mustacchi         GET_PFC_PRIO(pfc_prio_2, 2);
1189d14abf15SRobert Mustacchi         GET_PFC_PRIO(pfc_prio_3, 3);
1190d14abf15SRobert Mustacchi         GET_PFC_PRIO(pfc_prio_4, 4);
1191d14abf15SRobert Mustacchi         GET_PFC_PRIO(pfc_prio_5, 5);
1192d14abf15SRobert Mustacchi         GET_PFC_PRIO(pfc_prio_6, 6);
1193d14abf15SRobert Mustacchi         GET_PFC_PRIO(pfc_prio_7, 7);
1194d14abf15SRobert Mustacchi     }
1195d14abf15SRobert Mustacchi     else
1196d14abf15SRobert Mustacchi     {
1197d14abf15SRobert Mustacchi         snprintf(pStats->pfc.value.c, 16, "not operational");
1198d14abf15SRobert Mustacchi 
1199d14abf15SRobert Mustacchi #define NO_PFC_PRIO(f)                       \
1200d14abf15SRobert Mustacchi         snprintf(pStats->f.value.c, 16, "-")
1201d14abf15SRobert Mustacchi 
1202d14abf15SRobert Mustacchi         NO_PFC_PRIO(pfc_prio_0);
1203d14abf15SRobert Mustacchi         NO_PFC_PRIO(pfc_prio_1);
1204d14abf15SRobert Mustacchi         NO_PFC_PRIO(pfc_prio_2);
1205d14abf15SRobert Mustacchi         NO_PFC_PRIO(pfc_prio_3);
1206d14abf15SRobert Mustacchi         NO_PFC_PRIO(pfc_prio_4);
1207d14abf15SRobert Mustacchi         NO_PFC_PRIO(pfc_prio_5);
1208d14abf15SRobert Mustacchi         NO_PFC_PRIO(pfc_prio_6);
1209d14abf15SRobert Mustacchi         NO_PFC_PRIO(pfc_prio_7);
1210d14abf15SRobert Mustacchi     }
1211d14abf15SRobert Mustacchi 
1212d14abf15SRobert Mustacchi     if (dcbx_params.dcb_current_oper_state_bitmap &
1213d14abf15SRobert Mustacchi         ETS_IS_CURRENTLY_OPERATIONAL)
1214d14abf15SRobert Mustacchi     {
1215d14abf15SRobert Mustacchi         snprintf(pStats->ets.value.c, 16, "operational");
1216d14abf15SRobert Mustacchi 
1217d14abf15SRobert Mustacchi #define GET_PRIO_PG(f, p)                                   \
1218d14abf15SRobert Mustacchi         snprintf(pStats->f.value.c, 16, "%d",               \
1219d14abf15SRobert Mustacchi                  dcbx_params.local_configuration_ets_pg[p])
1220d14abf15SRobert Mustacchi 
1221d14abf15SRobert Mustacchi         GET_PRIO_PG(ets_prio_0_pg, 0);
1222d14abf15SRobert Mustacchi         GET_PRIO_PG(ets_prio_1_pg, 1);
1223d14abf15SRobert Mustacchi         GET_PRIO_PG(ets_prio_2_pg, 2);
1224d14abf15SRobert Mustacchi         GET_PRIO_PG(ets_prio_3_pg, 3);
1225d14abf15SRobert Mustacchi         GET_PRIO_PG(ets_prio_4_pg, 4);
1226d14abf15SRobert Mustacchi         GET_PRIO_PG(ets_prio_5_pg, 5);
1227d14abf15SRobert Mustacchi         GET_PRIO_PG(ets_prio_6_pg, 6);
1228d14abf15SRobert Mustacchi         GET_PRIO_PG(ets_prio_7_pg, 7);
1229d14abf15SRobert Mustacchi 
1230d14abf15SRobert Mustacchi #define GET_PG_BW(f, p)                                            \
1231d14abf15SRobert Mustacchi         snprintf(pStats->f.value.c, 16, "%d",                      \
1232d14abf15SRobert Mustacchi                  dcbx_params.local_configuration_bw_percentage[p])
1233d14abf15SRobert Mustacchi 
1234d14abf15SRobert Mustacchi         GET_PG_BW(ets_pg_0_bw, 0);
1235d14abf15SRobert Mustacchi         GET_PG_BW(ets_pg_1_bw, 1);
1236d14abf15SRobert Mustacchi         GET_PG_BW(ets_pg_2_bw, 2);
1237d14abf15SRobert Mustacchi         GET_PG_BW(ets_pg_3_bw, 3);
1238d14abf15SRobert Mustacchi         GET_PG_BW(ets_pg_4_bw, 4);
1239d14abf15SRobert Mustacchi         GET_PG_BW(ets_pg_5_bw, 5);
1240d14abf15SRobert Mustacchi         GET_PG_BW(ets_pg_6_bw, 6);
1241d14abf15SRobert Mustacchi         GET_PG_BW(ets_pg_7_bw, 7);
1242d14abf15SRobert Mustacchi     }
1243d14abf15SRobert Mustacchi     else
1244d14abf15SRobert Mustacchi     {
1245d14abf15SRobert Mustacchi         snprintf(pStats->ets.value.c, 16, "not operational");
1246d14abf15SRobert Mustacchi 
1247d14abf15SRobert Mustacchi #define NO_PRIO_PG(f)                        \
1248d14abf15SRobert Mustacchi         snprintf(pStats->f.value.c, 16, "-")
1249d14abf15SRobert Mustacchi 
1250d14abf15SRobert Mustacchi         NO_PRIO_PG(ets_prio_0_pg);
1251d14abf15SRobert Mustacchi         NO_PRIO_PG(ets_prio_1_pg);
1252d14abf15SRobert Mustacchi         NO_PRIO_PG(ets_prio_2_pg);
1253d14abf15SRobert Mustacchi         NO_PRIO_PG(ets_prio_3_pg);
1254d14abf15SRobert Mustacchi         NO_PRIO_PG(ets_prio_4_pg);
1255d14abf15SRobert Mustacchi         NO_PRIO_PG(ets_prio_5_pg);
1256d14abf15SRobert Mustacchi         NO_PRIO_PG(ets_prio_6_pg);
1257d14abf15SRobert Mustacchi         NO_PRIO_PG(ets_prio_7_pg);
1258d14abf15SRobert Mustacchi 
1259d14abf15SRobert Mustacchi #define NO_PG_BW(f)                          \
1260d14abf15SRobert Mustacchi         snprintf(pStats->f.value.c, 16, "-")
1261d14abf15SRobert Mustacchi 
1262d14abf15SRobert Mustacchi         NO_PG_BW(ets_pg_0_bw);
1263d14abf15SRobert Mustacchi         NO_PG_BW(ets_pg_1_bw);
1264d14abf15SRobert Mustacchi         NO_PG_BW(ets_pg_2_bw);
1265d14abf15SRobert Mustacchi         NO_PG_BW(ets_pg_3_bw);
1266d14abf15SRobert Mustacchi         NO_PG_BW(ets_pg_4_bw);
1267d14abf15SRobert Mustacchi         NO_PG_BW(ets_pg_5_bw);
1268d14abf15SRobert Mustacchi         NO_PG_BW(ets_pg_6_bw);
1269d14abf15SRobert Mustacchi         NO_PG_BW(ets_pg_7_bw);
1270d14abf15SRobert Mustacchi     }
1271d14abf15SRobert Mustacchi 
1272d14abf15SRobert Mustacchi     if (lldp_params.admin_status && (lldp_params.admin_status != LLDP_DISABLED))
1273d14abf15SRobert Mustacchi     {
1274d14abf15SRobert Mustacchi         snprintf(pStats->lldp.value.c, 16, "%s",
1275d14abf15SRobert Mustacchi                  (lldp_params.admin_status == LLDP_TX_ONLY)  ? "tx only"   :
1276d14abf15SRobert Mustacchi                  (lldp_params.admin_status == LLDP_RX_ONLY)  ? "rx only"   :
1277d14abf15SRobert Mustacchi                  (lldp_params.admin_status == LLDP_TX_RX)    ? "tx and rx" :
1278d14abf15SRobert Mustacchi                                                                "unknown");
1279d14abf15SRobert Mustacchi         snprintf(pStats->lldp_tx_interval.value.c, 16, "%d seconds",
1280d14abf15SRobert Mustacchi                  lldp_params.config_lldp_params.msg_tx_interval);
1281d14abf15SRobert Mustacchi         snprintf(pStats->lldp_tx_fast_interval.value.c, 16, "%d seconds",
1282d14abf15SRobert Mustacchi                  lldp_params.config_lldp_params.msg_fast_tx);
1283d14abf15SRobert Mustacchi     }
1284d14abf15SRobert Mustacchi     else
1285d14abf15SRobert Mustacchi     {
1286d14abf15SRobert Mustacchi         snprintf(pStats->lldp.value.c, 16, "disabled");
1287d14abf15SRobert Mustacchi         snprintf(pStats->lldp_tx_interval.value.c, 16, "-");
1288d14abf15SRobert Mustacchi         snprintf(pStats->lldp_tx_fast_interval.value.c, 16, "-");
1289d14abf15SRobert Mustacchi     }
1290d14abf15SRobert Mustacchi 
1291d14abf15SRobert Mustacchi     /* -------------------- ADMIN MIB -------------------- */
1292d14abf15SRobert Mustacchi 
1293d14abf15SRobert Mustacchi     snprintf(pStats->amib_apptlv_willing.value.c, 16, "%s",
1294d14abf15SRobert Mustacchi              (dcbx_params.config_dcbx_params.admin_app_priority_willing) ?
1295d14abf15SRobert Mustacchi                  "willing" : "not willing");
1296d14abf15SRobert Mustacchi     snprintf(pStats->amib_apptlv_tx.value.c, 16, "%s",
1297d14abf15SRobert Mustacchi              (dcbx_params.config_dcbx_params.admin_application_priority_tx_enable) ?
1298d14abf15SRobert Mustacchi                  "enabled" : "disabled");
1299d14abf15SRobert Mustacchi     snprintf(pStats->amib_apptlv_net_prio.value.c, 16, "%d",
1300d14abf15SRobert Mustacchi              dcbx_params.config_dcbx_params.admin_default_priority);
1301d14abf15SRobert Mustacchi 
1302d14abf15SRobert Mustacchi #define GET_PRIO_APP_TABLE(table, f1, f2)                   \
1303d14abf15SRobert Mustacchi     if (table.valid)                                        \
1304d14abf15SRobert Mustacchi     {                                                       \
1305d14abf15SRobert Mustacchi         snprintf(pStats->f1.value.c, 16, "%d",              \
1306d14abf15SRobert Mustacchi                  count_trailing_zeros(table.priority));     \
1307d14abf15SRobert Mustacchi         snprintf(pStats->f2.value.c, 16,                    \
1308d14abf15SRobert Mustacchi                  (table.traffic_type == TRAFFIC_TYPE_ETH) ? \
1309d14abf15SRobert Mustacchi                      "ether=0x%x" : "port=%d",              \
1310d14abf15SRobert Mustacchi                  table.app_id);                             \
1311d14abf15SRobert Mustacchi     }                                                       \
1312d14abf15SRobert Mustacchi     else                                                    \
1313d14abf15SRobert Mustacchi     {                                                       \
1314d14abf15SRobert Mustacchi         snprintf(pStats->f1.value.c, 16, "-");              \
1315d14abf15SRobert Mustacchi         snprintf(pStats->f2.value.c, 16, "-");              \
1316d14abf15SRobert Mustacchi     }
1317d14abf15SRobert Mustacchi 
1318d14abf15SRobert Mustacchi     GET_PRIO_APP_TABLE(dcbx_params.config_dcbx_params.
1319d14abf15SRobert Mustacchi                        admin_priority_app_table[0],
1320d14abf15SRobert Mustacchi                        amib_apptlv_tbl_0_prio,
1321d14abf15SRobert Mustacchi                        amib_apptlv_tbl_0_appid);
1322d14abf15SRobert Mustacchi     GET_PRIO_APP_TABLE(dcbx_params.config_dcbx_params.
1323d14abf15SRobert Mustacchi                        admin_priority_app_table[1],
1324d14abf15SRobert Mustacchi                        amib_apptlv_tbl_1_prio,
1325d14abf15SRobert Mustacchi                        amib_apptlv_tbl_1_appid);
1326d14abf15SRobert Mustacchi     GET_PRIO_APP_TABLE(dcbx_params.config_dcbx_params.
1327d14abf15SRobert Mustacchi                        admin_priority_app_table[2],
1328d14abf15SRobert Mustacchi                        amib_apptlv_tbl_2_prio,
1329d14abf15SRobert Mustacchi                        amib_apptlv_tbl_2_appid);
1330d14abf15SRobert Mustacchi     GET_PRIO_APP_TABLE(dcbx_params.config_dcbx_params.
1331d14abf15SRobert Mustacchi                        admin_priority_app_table[3],
1332d14abf15SRobert Mustacchi                        amib_apptlv_tbl_3_prio,
1333d14abf15SRobert Mustacchi                        amib_apptlv_tbl_3_appid);
1334d14abf15SRobert Mustacchi 
1335d14abf15SRobert Mustacchi     snprintf(pStats->amib_pgtlv_willing.value.c, 16, "%s",
1336d14abf15SRobert Mustacchi              (dcbx_params.config_dcbx_params.admin_ets_willing) ?
1337d14abf15SRobert Mustacchi                  "willing" : "not willing");
1338d14abf15SRobert Mustacchi     snprintf(pStats->amib_pgtlv_tx.value.c, 16, "%s",
1339d14abf15SRobert Mustacchi              (dcbx_params.config_dcbx_params.admin_ets_configuration_tx_enable) ?
1340d14abf15SRobert Mustacchi                  "enabled" : "disabled");
1341d14abf15SRobert Mustacchi     snprintf(pStats->amib_pgtlv_tc_supported.value.c, 16, "%s",
1342d14abf15SRobert Mustacchi              (dcbx_params.config_dcbx_params.admin_tc_supported_tx_enable) ?
1343d14abf15SRobert Mustacchi                  "advertised" : "not advertised");
1344d14abf15SRobert Mustacchi     snprintf(pStats->amib_pgtlv_ets.value.c, 16, "%s",
1345d14abf15SRobert Mustacchi              (dcbx_params.config_dcbx_params.admin_ets_enable) ?
1346d14abf15SRobert Mustacchi                  "enabled" : "disabled");
1347d14abf15SRobert Mustacchi 
1348d14abf15SRobert Mustacchi #define AMIB_GET_PG_TLV_BW(f, p)                       \
1349d14abf15SRobert Mustacchi         snprintf(pStats->f.value.c, 16, "%d",          \
1350d14abf15SRobert Mustacchi                  dcbx_params.config_dcbx_params.       \
1351d14abf15SRobert Mustacchi                  admin_configuration_bw_percentage[p])
1352d14abf15SRobert Mustacchi 
1353d14abf15SRobert Mustacchi     AMIB_GET_PG_TLV_BW(amib_pgtlv_pg_0_bw, 0);
1354d14abf15SRobert Mustacchi     AMIB_GET_PG_TLV_BW(amib_pgtlv_pg_1_bw, 1);
1355d14abf15SRobert Mustacchi     AMIB_GET_PG_TLV_BW(amib_pgtlv_pg_2_bw, 2);
1356d14abf15SRobert Mustacchi     AMIB_GET_PG_TLV_BW(amib_pgtlv_pg_3_bw, 3);
1357d14abf15SRobert Mustacchi     AMIB_GET_PG_TLV_BW(amib_pgtlv_pg_4_bw, 4);
1358d14abf15SRobert Mustacchi     AMIB_GET_PG_TLV_BW(amib_pgtlv_pg_5_bw, 5);
1359d14abf15SRobert Mustacchi     AMIB_GET_PG_TLV_BW(amib_pgtlv_pg_6_bw, 6);
1360d14abf15SRobert Mustacchi     AMIB_GET_PG_TLV_BW(amib_pgtlv_pg_7_bw, 7);
1361d14abf15SRobert Mustacchi 
1362d14abf15SRobert Mustacchi #define AMIB_GET_PG_TLV_MAP(f, p)                \
1363d14abf15SRobert Mustacchi         snprintf(pStats->f.value.c, 16, "%d",    \
1364d14abf15SRobert Mustacchi                  dcbx_params.config_dcbx_params. \
1365d14abf15SRobert Mustacchi                  admin_configuration_ets_pg[p])
1366d14abf15SRobert Mustacchi 
1367d14abf15SRobert Mustacchi     AMIB_GET_PG_TLV_MAP(amib_pgtlv_prio_0_map, 0);
1368d14abf15SRobert Mustacchi     AMIB_GET_PG_TLV_MAP(amib_pgtlv_prio_1_map, 1);
1369d14abf15SRobert Mustacchi     AMIB_GET_PG_TLV_MAP(amib_pgtlv_prio_2_map, 2);
1370d14abf15SRobert Mustacchi     AMIB_GET_PG_TLV_MAP(amib_pgtlv_prio_3_map, 3);
1371d14abf15SRobert Mustacchi     AMIB_GET_PG_TLV_MAP(amib_pgtlv_prio_4_map, 4);
1372d14abf15SRobert Mustacchi     AMIB_GET_PG_TLV_MAP(amib_pgtlv_prio_5_map, 5);
1373d14abf15SRobert Mustacchi     AMIB_GET_PG_TLV_MAP(amib_pgtlv_prio_6_map, 6);
1374d14abf15SRobert Mustacchi     AMIB_GET_PG_TLV_MAP(amib_pgtlv_prio_7_map, 7);
1375d14abf15SRobert Mustacchi 
1376d14abf15SRobert Mustacchi     snprintf(pStats->amib_pfctlv_willing.value.c, 16, "%s",
1377d14abf15SRobert Mustacchi              (dcbx_params.config_dcbx_params.admin_pfc_willing) ?
1378d14abf15SRobert Mustacchi                  "willing" : "not willing");
1379d14abf15SRobert Mustacchi     snprintf(pStats->amib_pfctlv_tx.value.c, 16, "%s",
1380d14abf15SRobert Mustacchi              (dcbx_params.config_dcbx_params.admin_pfc_tx_enable) ?
1381d14abf15SRobert Mustacchi                  "enabled" : "disabled");
1382d14abf15SRobert Mustacchi 
1383d14abf15SRobert Mustacchi     if (dcbx_params.config_dcbx_params.admin_pfc_enable)
1384d14abf15SRobert Mustacchi     {
1385d14abf15SRobert Mustacchi         snprintf(pStats->amib_pfctlv_pfc.value.c, 16, "enabled");
1386d14abf15SRobert Mustacchi         snprintf(pStats->amib_pfctlv_pfc_map.value.c, 16, "%d%d%d%d%d%d%d%d",
1387d14abf15SRobert Mustacchi                  (dcbx_params.config_dcbx_params.admin_pfc_bitmap         % 2),
1388d14abf15SRobert Mustacchi                  ((dcbx_params.config_dcbx_params.admin_pfc_bitmap /   2) % 2),
1389d14abf15SRobert Mustacchi                  ((dcbx_params.config_dcbx_params.admin_pfc_bitmap /   4) % 2),
1390d14abf15SRobert Mustacchi                  ((dcbx_params.config_dcbx_params.admin_pfc_bitmap /   8) % 2),
1391d14abf15SRobert Mustacchi                  ((dcbx_params.config_dcbx_params.admin_pfc_bitmap /  16) % 2),
1392d14abf15SRobert Mustacchi                  ((dcbx_params.config_dcbx_params.admin_pfc_bitmap /  32) % 2),
1393d14abf15SRobert Mustacchi                  ((dcbx_params.config_dcbx_params.admin_pfc_bitmap /  64) % 2),
1394d14abf15SRobert Mustacchi                  ((dcbx_params.config_dcbx_params.admin_pfc_bitmap / 128) % 2));
1395d14abf15SRobert Mustacchi     }
1396d14abf15SRobert Mustacchi     else
1397d14abf15SRobert Mustacchi     {
1398d14abf15SRobert Mustacchi         snprintf(pStats->amib_pfctlv_pfc.value.c, 16, "disabled");
1399d14abf15SRobert Mustacchi         snprintf(pStats->amib_pfctlv_pfc_map.value.c, 16, "-");
1400d14abf15SRobert Mustacchi     }
1401d14abf15SRobert Mustacchi 
1402d14abf15SRobert Mustacchi     /* -------------------- REMOTE MIB -------------------- */
1403d14abf15SRobert Mustacchi 
1404d14abf15SRobert Mustacchi     snprintf(pStats->rmib_apptlv_willing.value.c, 16, "%s",
1405d14abf15SRobert Mustacchi              (dcbx_params.remote_app_priority_willing) ?
1406d14abf15SRobert Mustacchi                  "willing" : "not willing");
1407d14abf15SRobert Mustacchi 
1408d14abf15SRobert Mustacchi     GET_PRIO_APP_TABLE(dcbx_params.remote_priority_app_table[0],
1409d14abf15SRobert Mustacchi                        rmib_apptlv_tbl_0_prio,
1410d14abf15SRobert Mustacchi                        rmib_apptlv_tbl_0_appid);
1411d14abf15SRobert Mustacchi     GET_PRIO_APP_TABLE(dcbx_params.remote_priority_app_table[1],
1412d14abf15SRobert Mustacchi                        rmib_apptlv_tbl_1_prio,
1413d14abf15SRobert Mustacchi                        rmib_apptlv_tbl_1_appid);
1414d14abf15SRobert Mustacchi     GET_PRIO_APP_TABLE(dcbx_params.remote_priority_app_table[2],
1415d14abf15SRobert Mustacchi                        rmib_apptlv_tbl_2_prio,
1416d14abf15SRobert Mustacchi                        rmib_apptlv_tbl_2_appid);
1417d14abf15SRobert Mustacchi     GET_PRIO_APP_TABLE(dcbx_params.remote_priority_app_table[3],
1418d14abf15SRobert Mustacchi                        rmib_apptlv_tbl_3_prio,
1419d14abf15SRobert Mustacchi                        rmib_apptlv_tbl_3_appid);
1420d14abf15SRobert Mustacchi 
1421d14abf15SRobert Mustacchi     snprintf(pStats->rmib_pgtlv_willing.value.c, 16, "%s",
1422d14abf15SRobert Mustacchi              (dcbx_params.remote_ets_willing) ?
1423d14abf15SRobert Mustacchi                  "willing" : "not willing");
1424d14abf15SRobert Mustacchi 
1425d14abf15SRobert Mustacchi #define RMIB_GET_PG_TLV_BW(f, p)                                    \
1426d14abf15SRobert Mustacchi         snprintf(pStats->f.value.c, 16, "%d",                       \
1427d14abf15SRobert Mustacchi                  dcbx_params.remote_configuration_bw_percentage[p])
1428d14abf15SRobert Mustacchi 
1429d14abf15SRobert Mustacchi     RMIB_GET_PG_TLV_BW(rmib_pgtlv_pg_0_bw, 0);
1430d14abf15SRobert Mustacchi     RMIB_GET_PG_TLV_BW(rmib_pgtlv_pg_1_bw, 1);
1431d14abf15SRobert Mustacchi     RMIB_GET_PG_TLV_BW(rmib_pgtlv_pg_2_bw, 2);
1432d14abf15SRobert Mustacchi     RMIB_GET_PG_TLV_BW(rmib_pgtlv_pg_3_bw, 3);
1433d14abf15SRobert Mustacchi     RMIB_GET_PG_TLV_BW(rmib_pgtlv_pg_4_bw, 4);
1434d14abf15SRobert Mustacchi     RMIB_GET_PG_TLV_BW(rmib_pgtlv_pg_5_bw, 5);
1435d14abf15SRobert Mustacchi     RMIB_GET_PG_TLV_BW(rmib_pgtlv_pg_6_bw, 6);
1436d14abf15SRobert Mustacchi     RMIB_GET_PG_TLV_BW(rmib_pgtlv_pg_7_bw, 7);
1437d14abf15SRobert Mustacchi 
1438d14abf15SRobert Mustacchi #define RMIB_GET_PG_TLV_MAP(f, p)                            \
1439d14abf15SRobert Mustacchi         snprintf(pStats->f.value.c, 16, "%d",                \
1440d14abf15SRobert Mustacchi                  dcbx_params.remote_configuration_ets_pg[p])
1441d14abf15SRobert Mustacchi 
1442d14abf15SRobert Mustacchi     RMIB_GET_PG_TLV_MAP(rmib_pgtlv_prio_0_map, 0);
1443d14abf15SRobert Mustacchi     RMIB_GET_PG_TLV_MAP(rmib_pgtlv_prio_1_map, 1);
1444d14abf15SRobert Mustacchi     RMIB_GET_PG_TLV_MAP(rmib_pgtlv_prio_2_map, 2);
1445d14abf15SRobert Mustacchi     RMIB_GET_PG_TLV_MAP(rmib_pgtlv_prio_3_map, 3);
1446d14abf15SRobert Mustacchi     RMIB_GET_PG_TLV_MAP(rmib_pgtlv_prio_4_map, 4);
1447d14abf15SRobert Mustacchi     RMIB_GET_PG_TLV_MAP(rmib_pgtlv_prio_5_map, 5);
1448d14abf15SRobert Mustacchi     RMIB_GET_PG_TLV_MAP(rmib_pgtlv_prio_6_map, 6);
1449d14abf15SRobert Mustacchi     RMIB_GET_PG_TLV_MAP(rmib_pgtlv_prio_7_map, 7);
1450d14abf15SRobert Mustacchi 
1451d14abf15SRobert Mustacchi     snprintf(pStats->rmib_pgtlv_tc_supported.value.c, 16, "%d",
1452d14abf15SRobert Mustacchi              dcbx_params.remote_tc_supported);
1453d14abf15SRobert Mustacchi 
1454d14abf15SRobert Mustacchi     snprintf(pStats->rmib_pfctlv_willing.value.c, 16, "%s",
1455d14abf15SRobert Mustacchi              (dcbx_params.remote_pfc_willing) ?
1456d14abf15SRobert Mustacchi                  "willing" : "not willing");
1457d14abf15SRobert Mustacchi 
1458d14abf15SRobert Mustacchi     snprintf(pStats->rmib_pfctlv_pfc_map.value.c, 16, "%d%d%d%d%d%d%d%d",
1459d14abf15SRobert Mustacchi              (dcbx_params.remote_pfc_bitmap         % 2),
1460d14abf15SRobert Mustacchi              ((dcbx_params.remote_pfc_bitmap /   2) % 2),
1461d14abf15SRobert Mustacchi              ((dcbx_params.remote_pfc_bitmap /   4) % 2),
1462d14abf15SRobert Mustacchi              ((dcbx_params.remote_pfc_bitmap /   8) % 2),
1463d14abf15SRobert Mustacchi              ((dcbx_params.remote_pfc_bitmap /  16) % 2),
1464d14abf15SRobert Mustacchi              ((dcbx_params.remote_pfc_bitmap /  32) % 2),
1465d14abf15SRobert Mustacchi              ((dcbx_params.remote_pfc_bitmap /  64) % 2),
1466d14abf15SRobert Mustacchi              ((dcbx_params.remote_pfc_bitmap / 128) % 2));
1467d14abf15SRobert Mustacchi 
1468d14abf15SRobert Mustacchi     snprintf(pStats->rmib_pfctlv_capable.value.c, 16, "%d",
1469d14abf15SRobert Mustacchi              dcbx_params.remote_pfc_cap);
1470d14abf15SRobert Mustacchi 
1471d14abf15SRobert Mustacchi     /* -------------------- LOCAL MIB -------------------- */
1472d14abf15SRobert Mustacchi 
1473d14abf15SRobert Mustacchi     GET_PRIO_APP_TABLE(dcbx_params.local_priority_app_table[0],
1474d14abf15SRobert Mustacchi                        lmib_apptlv_tbl_0_prio,
1475d14abf15SRobert Mustacchi                        lmib_apptlv_tbl_0_appid);
1476d14abf15SRobert Mustacchi     GET_PRIO_APP_TABLE(dcbx_params.local_priority_app_table[1],
1477d14abf15SRobert Mustacchi                        lmib_apptlv_tbl_1_prio,
1478d14abf15SRobert Mustacchi                        lmib_apptlv_tbl_1_appid);
1479d14abf15SRobert Mustacchi     GET_PRIO_APP_TABLE(dcbx_params.local_priority_app_table[2],
1480d14abf15SRobert Mustacchi                        lmib_apptlv_tbl_2_prio,
1481d14abf15SRobert Mustacchi                        lmib_apptlv_tbl_2_appid);
1482d14abf15SRobert Mustacchi     GET_PRIO_APP_TABLE(dcbx_params.local_priority_app_table[3],
1483d14abf15SRobert Mustacchi                        lmib_apptlv_tbl_3_prio,
1484d14abf15SRobert Mustacchi                        lmib_apptlv_tbl_3_appid);
1485d14abf15SRobert Mustacchi 
1486d14abf15SRobert Mustacchi     snprintf(pStats->lmib_apptlv_mismatch.value.c, 16, "%s",
1487d14abf15SRobert Mustacchi              (dcbx_params.priority_app_mismatch) ? "yes" : "no");
1488d14abf15SRobert Mustacchi 
1489d14abf15SRobert Mustacchi     snprintf(pStats->lmib_pgtlv_ets.value.c, 16, "%s",
1490d14abf15SRobert Mustacchi              (dcbx_params.local_ets_enable) ?
1491d14abf15SRobert Mustacchi                  "enabled" : "disabled");
1492d14abf15SRobert Mustacchi 
1493d14abf15SRobert Mustacchi #define LMIB_GET_PG_TLV_BW(f, p)                                   \
1494d14abf15SRobert Mustacchi         snprintf(pStats->f.value.c, 16, "%d",                      \
1495d14abf15SRobert Mustacchi                  dcbx_params.local_configuration_bw_percentage[p])
1496d14abf15SRobert Mustacchi 
1497d14abf15SRobert Mustacchi     LMIB_GET_PG_TLV_BW(lmib_pgtlv_pg_0_bw, 0);
1498d14abf15SRobert Mustacchi     LMIB_GET_PG_TLV_BW(lmib_pgtlv_pg_1_bw, 1);
1499d14abf15SRobert Mustacchi     LMIB_GET_PG_TLV_BW(lmib_pgtlv_pg_2_bw, 2);
1500d14abf15SRobert Mustacchi     LMIB_GET_PG_TLV_BW(lmib_pgtlv_pg_3_bw, 3);
1501d14abf15SRobert Mustacchi     LMIB_GET_PG_TLV_BW(lmib_pgtlv_pg_4_bw, 4);
1502d14abf15SRobert Mustacchi     LMIB_GET_PG_TLV_BW(lmib_pgtlv_pg_5_bw, 5);
1503d14abf15SRobert Mustacchi     LMIB_GET_PG_TLV_BW(lmib_pgtlv_pg_6_bw, 6);
1504d14abf15SRobert Mustacchi     LMIB_GET_PG_TLV_BW(lmib_pgtlv_pg_7_bw, 7);
1505d14abf15SRobert Mustacchi 
1506d14abf15SRobert Mustacchi #define LMIB_GET_PG_TLV_MAP(f, p)                            \
1507d14abf15SRobert Mustacchi         snprintf(pStats->f.value.c, 16, "%d",                \
1508d14abf15SRobert Mustacchi                  dcbx_params.local_configuration_ets_pg[p])
1509d14abf15SRobert Mustacchi 
1510d14abf15SRobert Mustacchi     LMIB_GET_PG_TLV_MAP(lmib_pgtlv_prio_0_map, 0);
1511d14abf15SRobert Mustacchi     LMIB_GET_PG_TLV_MAP(lmib_pgtlv_prio_1_map, 1);
1512d14abf15SRobert Mustacchi     LMIB_GET_PG_TLV_MAP(lmib_pgtlv_prio_2_map, 2);
1513d14abf15SRobert Mustacchi     LMIB_GET_PG_TLV_MAP(lmib_pgtlv_prio_3_map, 3);
1514d14abf15SRobert Mustacchi     LMIB_GET_PG_TLV_MAP(lmib_pgtlv_prio_4_map, 4);
1515d14abf15SRobert Mustacchi     LMIB_GET_PG_TLV_MAP(lmib_pgtlv_prio_5_map, 5);
1516d14abf15SRobert Mustacchi     LMIB_GET_PG_TLV_MAP(lmib_pgtlv_prio_6_map, 6);
1517d14abf15SRobert Mustacchi     LMIB_GET_PG_TLV_MAP(lmib_pgtlv_prio_7_map, 7);
1518d14abf15SRobert Mustacchi 
1519d14abf15SRobert Mustacchi     snprintf(pStats->lmib_pgtlv_tc_supported.value.c, 16, "%d",
1520d14abf15SRobert Mustacchi              dcbx_params.local_tc_supported);
1521d14abf15SRobert Mustacchi 
1522d14abf15SRobert Mustacchi     if (dcbx_params.local_pfc_enable)
1523d14abf15SRobert Mustacchi     {
1524d14abf15SRobert Mustacchi         snprintf(pStats->lmib_pfctlv_pfc.value.c, 16, "enabled");
1525d14abf15SRobert Mustacchi         snprintf(pStats->lmib_pfctlv_pfc_map.value.c, 16, "%d%d%d%d%d%d%d%d",
1526d14abf15SRobert Mustacchi                  (dcbx_params.local_pfc_bitmap         % 2),
1527d14abf15SRobert Mustacchi                  ((dcbx_params.local_pfc_bitmap /   2) % 2),
1528d14abf15SRobert Mustacchi                  ((dcbx_params.local_pfc_bitmap /   4) % 2),
1529d14abf15SRobert Mustacchi                  ((dcbx_params.local_pfc_bitmap /   8) % 2),
1530d14abf15SRobert Mustacchi                  ((dcbx_params.local_pfc_bitmap /  16) % 2),
1531d14abf15SRobert Mustacchi                  ((dcbx_params.local_pfc_bitmap /  32) % 2),
1532d14abf15SRobert Mustacchi                  ((dcbx_params.local_pfc_bitmap /  64) % 2),
1533d14abf15SRobert Mustacchi                  ((dcbx_params.local_pfc_bitmap / 128) % 2));
1534d14abf15SRobert Mustacchi 
1535d14abf15SRobert Mustacchi         snprintf(pStats->lmib_pfctlv_capable.value.c, 16, "%d",
1536d14abf15SRobert Mustacchi                  dcbx_params.local_pfc_caps);
1537d14abf15SRobert Mustacchi 
1538d14abf15SRobert Mustacchi         snprintf(pStats->lmib_pfctlv_mismatch.value.c, 16, "%s",
1539d14abf15SRobert Mustacchi                  (dcbx_params.pfc_mismatch) ? "yes" : "no");
1540d14abf15SRobert Mustacchi     }
1541d14abf15SRobert Mustacchi     else
1542d14abf15SRobert Mustacchi     {
1543d14abf15SRobert Mustacchi         snprintf(pStats->lmib_pfctlv_pfc.value.c, 16, "disabled");
1544d14abf15SRobert Mustacchi         snprintf(pStats->lmib_pfctlv_pfc_map.value.c, 16, "-");
1545d14abf15SRobert Mustacchi         snprintf(pStats->lmib_pfctlv_capable.value.c, 16, "-");
1546d14abf15SRobert Mustacchi         snprintf(pStats->lmib_pfctlv_mismatch.value.c, 16, "-");
1547d14abf15SRobert Mustacchi     }
1548d14abf15SRobert Mustacchi 
1549d14abf15SRobert Mustacchi     /* --------------------------------------------------- */
1550d14abf15SRobert Mustacchi 
1551d14abf15SRobert Mustacchi     pStats->dcbx_frames_rx.value.ui64 = dcbx_params.dcbx_frames_received;
1552d14abf15SRobert Mustacchi     pStats->dcbx_frames_tx.value.ui64 = dcbx_params.dcbx_frames_sent;
1553d14abf15SRobert Mustacchi     pStats->pfc_frames_rx.value.ui64  = dcbx_params.pfc_frames_received;
1554d14abf15SRobert Mustacchi     pStats->pfc_frames_tx.value.ui64  = dcbx_params.pfc_frames_sent;
1555d14abf15SRobert Mustacchi 
1556d14abf15SRobert Mustacchi     BNXE_LOCK_EXIT_STATS(pUM);
1557d14abf15SRobert Mustacchi 
1558d14abf15SRobert Mustacchi     return 0;
1559d14abf15SRobert Mustacchi }
1560d14abf15SRobert Mustacchi 
1561d14abf15SRobert Mustacchi 
BnxeKstatRxRingUpdate(kstat_t * kstats,int rw)1562d14abf15SRobert Mustacchi static int BnxeKstatRxRingUpdate(kstat_t * kstats,
1563d14abf15SRobert Mustacchi                                  int       rw)
1564d14abf15SRobert Mustacchi {
1565d14abf15SRobert Mustacchi     BnxeKstatRxq *   pStats = (BnxeKstatRxq *)kstats->ks_data;
1566d14abf15SRobert Mustacchi     KstatRingMap *   pMap   = (KstatRingMap *)kstats->ks_private;
1567d14abf15SRobert Mustacchi     um_device_t *    pUM    = (um_device_t *)pMap->pUM;
1568d14abf15SRobert Mustacchi     int              idx    = pMap->idx;
1569d14abf15SRobert Mustacchi     lm_device_t *    pLM    = (lm_device_t *)pUM;
1570d14abf15SRobert Mustacchi     lm_tx_chain_t *  pTxq   = &LM_TXQ(pLM, idx);
1571d14abf15SRobert Mustacchi     lm_rx_chain_t *  pRxq   = &LM_RXQ(pLM, idx);
1572d14abf15SRobert Mustacchi     lm_rcq_chain_t * pRcq   = &LM_RCQ(pLM, idx);
1573d14abf15SRobert Mustacchi 
1574d14abf15SRobert Mustacchi     if (rw == KSTAT_WRITE)
1575d14abf15SRobert Mustacchi     {
1576d14abf15SRobert Mustacchi         return EACCES;
1577d14abf15SRobert Mustacchi     }
1578d14abf15SRobert Mustacchi 
1579d14abf15SRobert Mustacchi     BNXE_LOCK_ENTER_STATS(pUM);
1580d14abf15SRobert Mustacchi 
1581d14abf15SRobert Mustacchi     pStats->rxqBdTotal.value.ui64     = pRxq->chain_arr[LM_RXQ_CHAIN_IDX_BD].capacity;
1582d14abf15SRobert Mustacchi     pStats->rxqBdLeft.value.ui64      = pRxq->chain_arr[LM_RXQ_CHAIN_IDX_BD].bd_left;
1583d14abf15SRobert Mustacchi     pStats->rxqBdPageCnt.value.ui64   = pRxq->chain_arr[LM_RXQ_CHAIN_IDX_BD].page_cnt;
1584d14abf15SRobert Mustacchi     pStats->rxqBdsPerPage.value.ui64  = pRxq->chain_arr[LM_RXQ_CHAIN_IDX_BD].bds_per_page;
1585d14abf15SRobert Mustacchi     pStats->rxqBdSize.value.ui64      = pRxq->chain_arr[LM_RXQ_CHAIN_IDX_BD].bd_size;
1586d14abf15SRobert Mustacchi     pStats->rxqBdsSkipEop.value.ui64  = pRxq->chain_arr[LM_RXQ_CHAIN_IDX_BD].bds_skip_eop;
1587d14abf15SRobert Mustacchi     pStats->rxqBdProdIdx.value.ui64   = pRxq->chain_arr[LM_RXQ_CHAIN_IDX_BD].prod_idx;
1588d14abf15SRobert Mustacchi     pStats->rxqBdConsIdx.value.ui64   = pRxq->chain_arr[LM_RXQ_CHAIN_IDX_BD].cons_idx;
1589d14abf15SRobert Mustacchi     pStats->hwRxqConIdx.value.ui64    =
1590d14abf15SRobert Mustacchi         (pRxq->hw_con_idx_ptr != NULL) ?
1591d14abf15SRobert Mustacchi             mm_le16_to_cpu(*pRxq->hw_con_idx_ptr) : 0;
1592d14abf15SRobert Mustacchi     pStats->sgeBdTotal.value.ui64     = pRxq->chain_arr[LM_RXQ_CHAIN_IDX_SGE].capacity;
1593d14abf15SRobert Mustacchi     pStats->sgeBdLeft.value.ui64      = pRxq->chain_arr[LM_RXQ_CHAIN_IDX_SGE].bd_left;
1594d14abf15SRobert Mustacchi     pStats->sgeBdPageCnt.value.ui64   = pRxq->chain_arr[LM_RXQ_CHAIN_IDX_SGE].page_cnt;
1595d14abf15SRobert Mustacchi     pStats->sgeBdsPerPage.value.ui64  = pRxq->chain_arr[LM_RXQ_CHAIN_IDX_SGE].bds_per_page;
1596d14abf15SRobert Mustacchi     pStats->sgeBdSize.value.ui64      = pRxq->chain_arr[LM_RXQ_CHAIN_IDX_SGE].bd_size;
1597d14abf15SRobert Mustacchi     pStats->sgeBdsSkipEop.value.ui64  = pRxq->chain_arr[LM_RXQ_CHAIN_IDX_SGE].bds_skip_eop;
1598d14abf15SRobert Mustacchi     pStats->sgeBdProdIdx.value.ui64   = pRxq->chain_arr[LM_RXQ_CHAIN_IDX_SGE].prod_idx;
1599d14abf15SRobert Mustacchi     pStats->sgeBdConsIdx.value.ui64   = pRxq->chain_arr[LM_RXQ_CHAIN_IDX_SGE].cons_idx;
1600d14abf15SRobert Mustacchi     pStats->rcqBdTotal.value.ui64     = pRcq->bd_chain.capacity;
1601d14abf15SRobert Mustacchi     pStats->rcqBdLeft.value.ui64      = pRcq->bd_chain.bd_left;
1602d14abf15SRobert Mustacchi     pStats->rcqBdPageCnt.value.ui64   = pRcq->bd_chain.page_cnt;
1603d14abf15SRobert Mustacchi     pStats->rcqBdsPerPage.value.ui64  = pRcq->bd_chain.bds_per_page;
1604d14abf15SRobert Mustacchi     pStats->rcqBdSize.value.ui64      = pRcq->bd_chain.bd_size;
1605d14abf15SRobert Mustacchi     pStats->rcqBdsSkipEop.value.ui64  = pRcq->bd_chain.bds_skip_eop;
1606d14abf15SRobert Mustacchi     pStats->rcqBdProdIdx.value.ui64   = pRcq->bd_chain.prod_idx;
1607d14abf15SRobert Mustacchi     pStats->rcqBdConsIdx.value.ui64   = pRcq->bd_chain.cons_idx;
1608d14abf15SRobert Mustacchi     pStats->hwRcqConIdx.value.ui64    =
1609d14abf15SRobert Mustacchi         (pRcq->hw_con_idx_ptr != NULL) ?
1610d14abf15SRobert Mustacchi             mm_le16_to_cpu(*pRcq->hw_con_idx_ptr) : 0;
1611d14abf15SRobert Mustacchi 
1612d14abf15SRobert Mustacchi     pStats->rxFreeDescs.value.ui64    = s_list_entry_cnt(&LM_RXQ(pLM, idx).common.free_descq);
1613d14abf15SRobert Mustacchi     pStats->rxActiveDescs.value.ui64  = s_list_entry_cnt(&LM_RXQ(pLM, idx).active_descq);
1614d14abf15SRobert Mustacchi     pStats->rxDoneDescs.value.ui64    = s_list_entry_cnt(&pUM->rxq[idx].doneRxQ);
1615d14abf15SRobert Mustacchi     pStats->rxWaitingDescs.value.ui64 = s_list_entry_cnt(&pUM->rxq[idx].waitRxQ);
1616d14abf15SRobert Mustacchi     pStats->rxCopied.value.ui64       = pUM->rxq[idx].rxCopied;
1617d14abf15SRobert Mustacchi     pStats->rxDiscards.value.ui64     = pUM->rxq[idx].rxDiscards;
1618d14abf15SRobert Mustacchi     pStats->rxBufUpInStack.value.ui64 = pUM->rxq[idx].rxBufUpInStack;
1619d14abf15SRobert Mustacchi     pStats->rxLowWater.value.ui64     = pUM->rxq[idx].rxLowWater;
1620d14abf15SRobert Mustacchi     pStats->inPollMode.value.ui64     = pUM->rxq[idx].inPollMode;
1621d14abf15SRobert Mustacchi     pStats->pollCnt.value.ui64        = pUM->rxq[idx].pollCnt;
1622d14abf15SRobert Mustacchi     pStats->intrDisableCnt.value.ui64 = pUM->rxq[idx].intrDisableCnt;
1623d14abf15SRobert Mustacchi     pStats->intrEnableCnt.value.ui64  = pUM->rxq[idx].intrEnableCnt;
1624d14abf15SRobert Mustacchi     pStats->genNumber.value.ui64      = pUM->rxq[idx].genNumber;
1625d14abf15SRobert Mustacchi 
1626d14abf15SRobert Mustacchi     BNXE_LOCK_EXIT_STATS(pUM);
1627d14abf15SRobert Mustacchi 
1628d14abf15SRobert Mustacchi     return 0;
1629d14abf15SRobert Mustacchi }
1630d14abf15SRobert Mustacchi 
1631d14abf15SRobert Mustacchi 
BnxeKstatTxRingUpdate(kstat_t * kstats,int rw)1632d14abf15SRobert Mustacchi static int BnxeKstatTxRingUpdate(kstat_t * kstats,
1633d14abf15SRobert Mustacchi                                  int       rw)
1634d14abf15SRobert Mustacchi {
1635d14abf15SRobert Mustacchi     BnxeKstatTxq * pStats = (BnxeKstatTxq *)kstats->ks_data;
1636d14abf15SRobert Mustacchi     KstatRingMap * pMap   = (KstatRingMap *)kstats->ks_private;
1637d14abf15SRobert Mustacchi     um_device_t *  pUM    = (um_device_t *)pMap->pUM;
1638d14abf15SRobert Mustacchi     int            idx    = pMap->idx;
1639d14abf15SRobert Mustacchi     lm_device_t *  pLM    = (lm_device_t *)pUM;
1640d14abf15SRobert Mustacchi 
1641d14abf15SRobert Mustacchi     if (rw == KSTAT_WRITE)
1642d14abf15SRobert Mustacchi     {
1643d14abf15SRobert Mustacchi         return EACCES;
1644d14abf15SRobert Mustacchi     }
1645d14abf15SRobert Mustacchi 
1646d14abf15SRobert Mustacchi     BNXE_LOCK_ENTER_STATS(pUM);
1647d14abf15SRobert Mustacchi 
1648d14abf15SRobert Mustacchi     pStats->txBdTotal.value.ui64     = LM_TXQ(pLM, idx).bd_chain.capacity;
1649d14abf15SRobert Mustacchi     pStats->txBdLeft.value.ui64      = LM_TXQ(pLM, idx).bd_chain.bd_left;
1650d14abf15SRobert Mustacchi     pStats->txBdPageCnt.value.ui64   = LM_TXQ(pLM, idx).bd_chain.page_cnt;
1651d14abf15SRobert Mustacchi     pStats->txBdsPerPage.value.ui64  = LM_TXQ(pLM, idx).bd_chain.bds_per_page;
1652d14abf15SRobert Mustacchi     pStats->txBdSize.value.ui64      = LM_TXQ(pLM, idx).bd_chain.bd_size;
1653d14abf15SRobert Mustacchi     pStats->txBdsSkipEop.value.ui64  = LM_TXQ(pLM, idx).bd_chain.bds_skip_eop;
1654d14abf15SRobert Mustacchi     pStats->hwTxqConIdx.value.ui64   =
1655d14abf15SRobert Mustacchi         (LM_TXQ(pLM, idx).hw_con_idx_ptr != NULL) ?
1656d14abf15SRobert Mustacchi             mm_le16_to_cpu(*LM_TXQ(pLM, idx).hw_con_idx_ptr) : 0;
1657d14abf15SRobert Mustacchi     pStats->txPktIdx.value.ui64      = LM_TXQ(pLM, idx).pkt_idx;
1658d14abf15SRobert Mustacchi     pStats->txBdProdIdx.value.ui64   = LM_TXQ(pLM, idx).bd_chain.prod_idx;
1659d14abf15SRobert Mustacchi     pStats->txBdConsIdx.value.ui64   = LM_TXQ(pLM, idx).bd_chain.cons_idx;
1660d14abf15SRobert Mustacchi     pStats->txSentPkts.value.ui64    = s_list_entry_cnt(&pUM->txq[idx].sentTxQ);
1661d14abf15SRobert Mustacchi     pStats->txFreeDesc.value.ui64    = s_list_entry_cnt(&pUM->txq[idx].freeTxDescQ);
1662d14abf15SRobert Mustacchi     pStats->txWaitingPkts.value.ui64 = s_list_entry_cnt(&pUM->txq[idx].waitTxDescQ);
1663d14abf15SRobert Mustacchi     pStats->txLowWater.value.ui64    = pUM->txq[idx].txLowWater;
1664d14abf15SRobert Mustacchi     pStats->txFailed.value.ui64      = pUM->txq[idx].txFailed;
1665d14abf15SRobert Mustacchi     pStats->txDiscards.value.ui64    = pUM->txq[idx].txDiscards;
1666d14abf15SRobert Mustacchi     pStats->txRecycle.value.ui64     = pUM->txq[idx].txRecycle;
1667d14abf15SRobert Mustacchi     pStats->txCopied.value.ui64      = pUM->txq[idx].txCopied;
1668d14abf15SRobert Mustacchi     pStats->txBlocked.value.ui64     = pUM->txq[idx].txBlocked;
1669d14abf15SRobert Mustacchi     pStats->txWait.value.ui64        = pUM->txq[idx].txWait;
1670d14abf15SRobert Mustacchi 
1671d14abf15SRobert Mustacchi     BNXE_LOCK_EXIT_STATS(pUM);
1672d14abf15SRobert Mustacchi 
1673d14abf15SRobert Mustacchi     return 0;
1674d14abf15SRobert Mustacchi }
1675d14abf15SRobert Mustacchi 
1676d14abf15SRobert Mustacchi 
BnxeKstatInitRxQ(um_device_t * pUM,int idx)1677d14abf15SRobert Mustacchi boolean_t BnxeKstatInitRxQ(um_device_t * pUM,
1678d14abf15SRobert Mustacchi                            int           idx)
1679d14abf15SRobert Mustacchi {
1680d14abf15SRobert Mustacchi     char buf[32];
1681d14abf15SRobert Mustacchi 
1682d14abf15SRobert Mustacchi     BnxeKstatRxq * pStatsRxq;
1683d14abf15SRobert Mustacchi #define BNXE_KSTAT_RXQ(f, t)  kstat_named_init(&pStatsRxq->f, #f, t)
1684d14abf15SRobert Mustacchi 
1685d14abf15SRobert Mustacchi     snprintf(buf, sizeof(buf), "rxq%d", idx);
1686d14abf15SRobert Mustacchi 
1687d14abf15SRobert Mustacchi     if ((pUM->kstats_rxq[idx] = kstat_create("bnxe",
1688d14abf15SRobert Mustacchi                                              pUM->instance,
1689d14abf15SRobert Mustacchi                                              buf,
1690d14abf15SRobert Mustacchi                                              "net",
1691d14abf15SRobert Mustacchi                                              KSTAT_TYPE_NAMED,
1692d14abf15SRobert Mustacchi                                              BNXE_KSTAT_RXQ_SIZE,
1693d14abf15SRobert Mustacchi                                              0)) == NULL)
1694d14abf15SRobert Mustacchi     {
1695d14abf15SRobert Mustacchi         BnxeLogWarn(pUM, "Failed to create rxq%d kstat", idx);
1696d14abf15SRobert Mustacchi         return B_FALSE;
1697d14abf15SRobert Mustacchi     }
1698d14abf15SRobert Mustacchi 
1699d14abf15SRobert Mustacchi     pStatsRxq = (BnxeKstatRxq *)pUM->kstats_rxq[idx]->ks_data;
1700d14abf15SRobert Mustacchi 
1701d14abf15SRobert Mustacchi     BNXE_KSTAT_RXQ(rxqBdTotal,     KSTAT_DATA_UINT64);
1702d14abf15SRobert Mustacchi     BNXE_KSTAT_RXQ(rxqBdLeft,      KSTAT_DATA_UINT64);
1703d14abf15SRobert Mustacchi     BNXE_KSTAT_RXQ(rxqBdPageCnt,   KSTAT_DATA_UINT64);
1704d14abf15SRobert Mustacchi     BNXE_KSTAT_RXQ(rxqBdsPerPage,  KSTAT_DATA_UINT64);
1705d14abf15SRobert Mustacchi     BNXE_KSTAT_RXQ(rxqBdSize,      KSTAT_DATA_UINT64);
1706d14abf15SRobert Mustacchi     BNXE_KSTAT_RXQ(rxqBdsSkipEop,  KSTAT_DATA_UINT64);
1707d14abf15SRobert Mustacchi     BNXE_KSTAT_RXQ(rxqBdProdIdx,   KSTAT_DATA_UINT64);
1708d14abf15SRobert Mustacchi     BNXE_KSTAT_RXQ(rxqBdConsIdx,   KSTAT_DATA_UINT64);
1709d14abf15SRobert Mustacchi     BNXE_KSTAT_RXQ(hwRxqConIdx,    KSTAT_DATA_UINT64);
1710d14abf15SRobert Mustacchi     BNXE_KSTAT_RXQ(sgeBdTotal,     KSTAT_DATA_UINT64);
1711d14abf15SRobert Mustacchi     BNXE_KSTAT_RXQ(sgeBdLeft,      KSTAT_DATA_UINT64);
1712d14abf15SRobert Mustacchi     BNXE_KSTAT_RXQ(sgeBdPageCnt,   KSTAT_DATA_UINT64);
1713d14abf15SRobert Mustacchi     BNXE_KSTAT_RXQ(sgeBdsPerPage,  KSTAT_DATA_UINT64);
1714d14abf15SRobert Mustacchi     BNXE_KSTAT_RXQ(sgeBdSize,      KSTAT_DATA_UINT64);
1715d14abf15SRobert Mustacchi     BNXE_KSTAT_RXQ(sgeBdsSkipEop,  KSTAT_DATA_UINT64);
1716d14abf15SRobert Mustacchi     BNXE_KSTAT_RXQ(sgeBdProdIdx,   KSTAT_DATA_UINT64);
1717d14abf15SRobert Mustacchi     BNXE_KSTAT_RXQ(sgeBdConsIdx,   KSTAT_DATA_UINT64);
1718d14abf15SRobert Mustacchi     BNXE_KSTAT_RXQ(rcqBdTotal,     KSTAT_DATA_UINT64);
1719d14abf15SRobert Mustacchi     BNXE_KSTAT_RXQ(rcqBdLeft,      KSTAT_DATA_UINT64);
1720d14abf15SRobert Mustacchi     BNXE_KSTAT_RXQ(rcqBdPageCnt,   KSTAT_DATA_UINT64);
1721d14abf15SRobert Mustacchi     BNXE_KSTAT_RXQ(rcqBdsPerPage,  KSTAT_DATA_UINT64);
1722d14abf15SRobert Mustacchi     BNXE_KSTAT_RXQ(rcqBdSize,      KSTAT_DATA_UINT64);
1723d14abf15SRobert Mustacchi     BNXE_KSTAT_RXQ(rcqBdsSkipEop,  KSTAT_DATA_UINT64);
1724d14abf15SRobert Mustacchi     BNXE_KSTAT_RXQ(rcqBdProdIdx,   KSTAT_DATA_UINT64);
1725d14abf15SRobert Mustacchi     BNXE_KSTAT_RXQ(rcqBdConsIdx,   KSTAT_DATA_UINT64);
1726d14abf15SRobert Mustacchi     BNXE_KSTAT_RXQ(hwRcqConIdx,    KSTAT_DATA_UINT64);
1727d14abf15SRobert Mustacchi     BNXE_KSTAT_RXQ(rxFreeDescs,    KSTAT_DATA_UINT64);
1728d14abf15SRobert Mustacchi     BNXE_KSTAT_RXQ(rxActiveDescs,  KSTAT_DATA_UINT64);
1729d14abf15SRobert Mustacchi     BNXE_KSTAT_RXQ(rxDoneDescs,    KSTAT_DATA_UINT64);
1730d14abf15SRobert Mustacchi     BNXE_KSTAT_RXQ(rxWaitingDescs, KSTAT_DATA_UINT64);
1731d14abf15SRobert Mustacchi     BNXE_KSTAT_RXQ(rxCopied,       KSTAT_DATA_UINT64);
1732d14abf15SRobert Mustacchi     BNXE_KSTAT_RXQ(rxDiscards,     KSTAT_DATA_UINT64);
1733d14abf15SRobert Mustacchi     BNXE_KSTAT_RXQ(rxBufUpInStack, KSTAT_DATA_UINT64);
1734d14abf15SRobert Mustacchi     BNXE_KSTAT_RXQ(rxLowWater,     KSTAT_DATA_UINT64);
1735d14abf15SRobert Mustacchi     BNXE_KSTAT_RXQ(inPollMode,     KSTAT_DATA_UINT64);
1736d14abf15SRobert Mustacchi     BNXE_KSTAT_RXQ(pollCnt,        KSTAT_DATA_UINT64);
1737d14abf15SRobert Mustacchi     BNXE_KSTAT_RXQ(intrDisableCnt, KSTAT_DATA_UINT64);
1738d14abf15SRobert Mustacchi     BNXE_KSTAT_RXQ(intrEnableCnt,  KSTAT_DATA_UINT64);
1739d14abf15SRobert Mustacchi     BNXE_KSTAT_RXQ(genNumber,      KSTAT_DATA_UINT64);
1740d14abf15SRobert Mustacchi 
1741d14abf15SRobert Mustacchi     pUM->kstats_rxq_map[idx].idx = idx;
1742d14abf15SRobert Mustacchi     pUM->kstats_rxq_map[idx].pUM = pUM;
1743d14abf15SRobert Mustacchi 
1744d14abf15SRobert Mustacchi     pUM->kstats_rxq[idx]->ks_update  = BnxeKstatRxRingUpdate;
1745d14abf15SRobert Mustacchi     pUM->kstats_rxq[idx]->ks_private = (void *)&pUM->kstats_rxq_map[idx];
1746d14abf15SRobert Mustacchi 
1747d14abf15SRobert Mustacchi     kstat_install(pUM->kstats_rxq[idx]);
1748d14abf15SRobert Mustacchi 
1749d14abf15SRobert Mustacchi     return B_TRUE;
1750d14abf15SRobert Mustacchi }
1751d14abf15SRobert Mustacchi 
1752d14abf15SRobert Mustacchi 
BnxeKstatInitTxQ(um_device_t * pUM,int idx)1753d14abf15SRobert Mustacchi boolean_t BnxeKstatInitTxQ(um_device_t * pUM,
1754d14abf15SRobert Mustacchi                            int           idx)
1755d14abf15SRobert Mustacchi {
1756d14abf15SRobert Mustacchi     char buf[32];
1757d14abf15SRobert Mustacchi 
1758d14abf15SRobert Mustacchi     BnxeKstatTxq * pStatsTxq;
1759d14abf15SRobert Mustacchi #define BNXE_KSTAT_TXQ(f, t)  kstat_named_init(&pStatsTxq->f, #f, t)
1760d14abf15SRobert Mustacchi 
1761d14abf15SRobert Mustacchi     snprintf(buf, sizeof(buf), "txq%d", idx);
1762d14abf15SRobert Mustacchi 
1763d14abf15SRobert Mustacchi     if ((pUM->kstats_txq[idx] = kstat_create("bnxe",
1764d14abf15SRobert Mustacchi                                              pUM->instance,
1765d14abf15SRobert Mustacchi                                              buf,
1766d14abf15SRobert Mustacchi                                              "net",
1767d14abf15SRobert Mustacchi                                              KSTAT_TYPE_NAMED,
1768d14abf15SRobert Mustacchi                                              BNXE_KSTAT_TXQ_SIZE,
1769d14abf15SRobert Mustacchi                                              0)) == NULL)
1770d14abf15SRobert Mustacchi     {
1771d14abf15SRobert Mustacchi         BnxeLogWarn(pUM, "Failed to create txq%d kstat", idx);
1772d14abf15SRobert Mustacchi         return B_FALSE;
1773d14abf15SRobert Mustacchi     }
1774d14abf15SRobert Mustacchi 
1775d14abf15SRobert Mustacchi     pStatsTxq = (BnxeKstatTxq *)pUM->kstats_txq[idx]->ks_data;
1776d14abf15SRobert Mustacchi 
1777d14abf15SRobert Mustacchi     BNXE_KSTAT_TXQ(txBdTotal,     KSTAT_DATA_UINT64);
1778d14abf15SRobert Mustacchi     BNXE_KSTAT_TXQ(txBdLeft,      KSTAT_DATA_UINT64);
1779d14abf15SRobert Mustacchi     BNXE_KSTAT_TXQ(txBdPageCnt,   KSTAT_DATA_UINT64);
1780d14abf15SRobert Mustacchi     BNXE_KSTAT_TXQ(txBdsPerPage,  KSTAT_DATA_UINT64);
1781d14abf15SRobert Mustacchi     BNXE_KSTAT_TXQ(txBdSize,      KSTAT_DATA_UINT64);
1782d14abf15SRobert Mustacchi     BNXE_KSTAT_TXQ(txBdsSkipEop,  KSTAT_DATA_UINT64);
1783d14abf15SRobert Mustacchi     BNXE_KSTAT_TXQ(hwTxqConIdx,   KSTAT_DATA_UINT64);
1784d14abf15SRobert Mustacchi     BNXE_KSTAT_TXQ(txPktIdx,      KSTAT_DATA_UINT64);
1785d14abf15SRobert Mustacchi     BNXE_KSTAT_TXQ(txBdProdIdx,   KSTAT_DATA_UINT64);
1786d14abf15SRobert Mustacchi     BNXE_KSTAT_TXQ(txBdConsIdx,   KSTAT_DATA_UINT64);
1787d14abf15SRobert Mustacchi     BNXE_KSTAT_TXQ(txSentPkts,    KSTAT_DATA_UINT64);
1788d14abf15SRobert Mustacchi     BNXE_KSTAT_TXQ(txFreeDesc,    KSTAT_DATA_UINT64);
1789d14abf15SRobert Mustacchi     BNXE_KSTAT_TXQ(txWaitingPkts, KSTAT_DATA_UINT64);
1790d14abf15SRobert Mustacchi     BNXE_KSTAT_TXQ(txLowWater,    KSTAT_DATA_UINT64);
1791d14abf15SRobert Mustacchi     BNXE_KSTAT_TXQ(txFailed,      KSTAT_DATA_UINT64);
1792d14abf15SRobert Mustacchi     BNXE_KSTAT_TXQ(txDiscards,    KSTAT_DATA_UINT64);
1793d14abf15SRobert Mustacchi     BNXE_KSTAT_TXQ(txRecycle,     KSTAT_DATA_UINT64);
1794d14abf15SRobert Mustacchi     BNXE_KSTAT_TXQ(txCopied,      KSTAT_DATA_UINT64);
1795d14abf15SRobert Mustacchi     BNXE_KSTAT_TXQ(txBlocked,     KSTAT_DATA_UINT64);
1796d14abf15SRobert Mustacchi     BNXE_KSTAT_TXQ(txWait,        KSTAT_DATA_UINT64);
1797d14abf15SRobert Mustacchi 
1798d14abf15SRobert Mustacchi     pUM->kstats_txq_map[idx].idx = idx;
1799d14abf15SRobert Mustacchi     pUM->kstats_txq_map[idx].pUM = pUM;
1800d14abf15SRobert Mustacchi 
1801d14abf15SRobert Mustacchi     pUM->kstats_txq[idx]->ks_update  = BnxeKstatTxRingUpdate;
1802d14abf15SRobert Mustacchi     pUM->kstats_txq[idx]->ks_private = (void *)&pUM->kstats_txq_map[idx];
1803d14abf15SRobert Mustacchi 
1804d14abf15SRobert Mustacchi     kstat_install(pUM->kstats_txq[idx]);
1805d14abf15SRobert Mustacchi 
1806d14abf15SRobert Mustacchi     return B_TRUE;
1807d14abf15SRobert Mustacchi }
1808d14abf15SRobert Mustacchi 
1809d14abf15SRobert Mustacchi 
BnxeKstatInit(um_device_t * pUM)1810d14abf15SRobert Mustacchi boolean_t BnxeKstatInit(um_device_t * pUM)
1811d14abf15SRobert Mustacchi {
1812d14abf15SRobert Mustacchi     lm_device_t * pLM = (lm_device_t *)pUM;
1813d14abf15SRobert Mustacchi     char buf[32];
1814d14abf15SRobert Mustacchi     int idx;
1815d14abf15SRobert Mustacchi 
1816d14abf15SRobert Mustacchi     BnxeKstat *         pStats;
1817d14abf15SRobert Mustacchi     BnxeKstatLink *     pStatsLink;
1818d14abf15SRobert Mustacchi     BnxeKstatIntr *     pStatsIntr;
1819d14abf15SRobert Mustacchi     BnxeKstatL2Chip *   pStatsL2Chip;
1820d14abf15SRobert Mustacchi     BnxeKstatL2Driver * pStatsL2Driver;
1821d14abf15SRobert Mustacchi     BnxeKstatEthStats * pStatsL2Stats;
1822d14abf15SRobert Mustacchi     BnxeKstatFcoe *     pStatsFcoe;
1823d14abf15SRobert Mustacchi     BnxeKstatDcbx *     pStatsDcbx;
1824d14abf15SRobert Mustacchi #define BNXE_KSTAT(f, t)            kstat_named_init(&pStats->f, #f, t)
1825d14abf15SRobert Mustacchi #define BNXE_KSTAT_LINK(f, t)       kstat_named_init(&pStatsLink->f, #f, t)
1826d14abf15SRobert Mustacchi #define BNXE_KSTAT_INTR(f, t)       kstat_named_init(&pStatsIntr->f, #f, t)
1827d14abf15SRobert Mustacchi #define BNXE_KSTAT_L2_CHIP(f, t)    kstat_named_init(&pStatsL2Chip->f, #f, t)
1828d14abf15SRobert Mustacchi #define BNXE_KSTAT_L2_DRIVER(f, t)  kstat_named_init(&pStatsL2Driver->f, #f, t)
1829d14abf15SRobert Mustacchi #define BNXE_KSTAT_L2_STATS(f, t)   kstat_named_init(&pStatsL2Stats->f, #f, t)
1830d14abf15SRobert Mustacchi #define BNXE_KSTAT_FCOE(f, t)       kstat_named_init(&pStatsFcoe->f, #f, t)
1831d14abf15SRobert Mustacchi #define BNXE_KSTAT_DCBX(f, t)       kstat_named_init(&pStatsDcbx->f, #f, t)
1832d14abf15SRobert Mustacchi 
1833d14abf15SRobert Mustacchi     /****************************************************************/
1834d14abf15SRobert Mustacchi 
1835d14abf15SRobert Mustacchi     if ((pUM->kstats = kstat_create("bnxe",
1836d14abf15SRobert Mustacchi                                     pUM->instance,
1837d14abf15SRobert Mustacchi                                     "stats",
1838d14abf15SRobert Mustacchi                                     "net",
1839d14abf15SRobert Mustacchi                                     KSTAT_TYPE_NAMED,
1840d14abf15SRobert Mustacchi                                     BNXE_KSTAT_SIZE,
1841d14abf15SRobert Mustacchi                                     0)) == NULL)
1842d14abf15SRobert Mustacchi     {
1843d14abf15SRobert Mustacchi         BnxeLogWarn(pUM, "Failed to create kstat");
1844d14abf15SRobert Mustacchi         return B_FALSE;
1845d14abf15SRobert Mustacchi     }
1846d14abf15SRobert Mustacchi 
1847d14abf15SRobert Mustacchi     pStats = (BnxeKstat *)pUM->kstats->ks_data;
1848d14abf15SRobert Mustacchi 
1849d14abf15SRobert Mustacchi     BNXE_KSTAT(umdev_hi,               KSTAT_DATA_CHAR);
1850d14abf15SRobert Mustacchi     BNXE_KSTAT(umdev_lo,               KSTAT_DATA_CHAR);
1851d14abf15SRobert Mustacchi     BNXE_KSTAT(version,                KSTAT_DATA_CHAR);
1852d14abf15SRobert Mustacchi     BNXE_KSTAT(versionFW,              KSTAT_DATA_CHAR);
1853d14abf15SRobert Mustacchi     BNXE_KSTAT(versionBC,              KSTAT_DATA_CHAR);
1854d14abf15SRobert Mustacchi     BNXE_KSTAT(chipName,               KSTAT_DATA_CHAR);
1855d14abf15SRobert Mustacchi     BNXE_KSTAT(chipID,                 KSTAT_DATA_CHAR);
1856d14abf15SRobert Mustacchi     BNXE_KSTAT(devBDF,                 KSTAT_DATA_CHAR);
1857d14abf15SRobert Mustacchi     BNXE_KSTAT(devID,                  KSTAT_DATA_CHAR);
1858d14abf15SRobert Mustacchi     BNXE_KSTAT(multiFunction,          KSTAT_DATA_CHAR);
1859d14abf15SRobert Mustacchi     BNXE_KSTAT(multiFunctionVnics,     KSTAT_DATA_UINT64);
1860d14abf15SRobert Mustacchi     BNXE_KSTAT(macAddr,                KSTAT_DATA_CHAR);
1861d14abf15SRobert Mustacchi     BNXE_KSTAT(hwInitDone,             KSTAT_DATA_UINT64);
1862d14abf15SRobert Mustacchi     BNXE_KSTAT(clientsHw,              KSTAT_DATA_CHAR);
1863d14abf15SRobert Mustacchi     BNXE_KSTAT(clientsDevi,            KSTAT_DATA_CHAR);
1864d14abf15SRobert Mustacchi     BNXE_KSTAT(clientsBound,           KSTAT_DATA_CHAR);
1865d14abf15SRobert Mustacchi     BNXE_KSTAT(txMsgPullUp,            KSTAT_DATA_UINT64);
1866d14abf15SRobert Mustacchi     BNXE_KSTAT(intrAlloc,              KSTAT_DATA_CHAR);
1867d14abf15SRobert Mustacchi     BNXE_KSTAT(intrFired,              KSTAT_DATA_UINT64);
1868d14abf15SRobert Mustacchi     BNXE_KSTAT(timerFired,             KSTAT_DATA_UINT64);
1869d14abf15SRobert Mustacchi     BNXE_KSTAT(timerReply,             KSTAT_DATA_UINT64);
1870d14abf15SRobert Mustacchi     BNXE_KSTAT(timerNoReplyTotal,      KSTAT_DATA_UINT64);
1871d14abf15SRobert Mustacchi     BNXE_KSTAT(timerNoReplyCurrent,    KSTAT_DATA_UINT64);
1872d14abf15SRobert Mustacchi     BNXE_KSTAT(timerDone,              KSTAT_DATA_UINT64);
1873d14abf15SRobert Mustacchi     BNXE_KSTAT(workQueueInstCnt,       KSTAT_DATA_UINT64);
1874d14abf15SRobert Mustacchi     BNXE_KSTAT(workItemInstQueued,     KSTAT_DATA_UINT64);
1875d14abf15SRobert Mustacchi     BNXE_KSTAT(workItemInstError,      KSTAT_DATA_UINT64);
1876d14abf15SRobert Mustacchi     BNXE_KSTAT(workItemInstComplete,   KSTAT_DATA_UINT64);
1877d14abf15SRobert Mustacchi     BNXE_KSTAT(workItemInstHighWater,  KSTAT_DATA_UINT64);
1878d14abf15SRobert Mustacchi     BNXE_KSTAT(workQueueDelayCnt,      KSTAT_DATA_UINT64);
1879d14abf15SRobert Mustacchi     BNXE_KSTAT(workItemDelayQueued,    KSTAT_DATA_UINT64);
1880d14abf15SRobert Mustacchi     BNXE_KSTAT(workItemDelayError,     KSTAT_DATA_UINT64);
1881d14abf15SRobert Mustacchi     BNXE_KSTAT(workItemDelayComplete,  KSTAT_DATA_UINT64);
1882d14abf15SRobert Mustacchi     BNXE_KSTAT(workItemDelayHighWater, KSTAT_DATA_UINT64);
1883d14abf15SRobert Mustacchi     BNXE_KSTAT(memAllocBlocks,         KSTAT_DATA_UINT64);
1884d14abf15SRobert Mustacchi     BNXE_KSTAT(memAllocDMAs,           KSTAT_DATA_UINT64);
1885d14abf15SRobert Mustacchi     BNXE_KSTAT(memAllocBARs,           KSTAT_DATA_UINT64);
1886d14abf15SRobert Mustacchi 
1887d14abf15SRobert Mustacchi     pUM->kstats->ks_update  = BnxeKstatUpdate;
1888d14abf15SRobert Mustacchi     pUM->kstats->ks_private = (void *)pUM;
1889d14abf15SRobert Mustacchi 
1890d14abf15SRobert Mustacchi     kstat_install(pUM->kstats);
1891d14abf15SRobert Mustacchi 
1892d14abf15SRobert Mustacchi     /****************************************************************/
1893d14abf15SRobert Mustacchi 
1894d14abf15SRobert Mustacchi     if ((pUM->kstatsLink = kstat_create("bnxe",
1895d14abf15SRobert Mustacchi                                         pUM->instance,
1896d14abf15SRobert Mustacchi                                         "link",
1897d14abf15SRobert Mustacchi                                         "net",
1898d14abf15SRobert Mustacchi                                         KSTAT_TYPE_NAMED,
1899d14abf15SRobert Mustacchi                                         BNXE_KSTAT_LINK_SIZE,
1900d14abf15SRobert Mustacchi                                         0)) == NULL)
1901d14abf15SRobert Mustacchi     {
1902d14abf15SRobert Mustacchi         BnxeLogWarn(pUM, "Failed to create link kstat");
1903d14abf15SRobert Mustacchi         return B_FALSE;
1904d14abf15SRobert Mustacchi     }
1905d14abf15SRobert Mustacchi 
1906d14abf15SRobert Mustacchi     pStatsLink = (BnxeKstatLink *)pUM->kstatsLink->ks_data;
1907d14abf15SRobert Mustacchi 
1908d14abf15SRobert Mustacchi     BNXE_KSTAT_LINK(clients, KSTAT_DATA_CHAR);
1909d14abf15SRobert Mustacchi     BNXE_KSTAT_LINK(uptime,  KSTAT_DATA_UINT64);
1910d14abf15SRobert Mustacchi     BNXE_KSTAT_LINK(mtuL2,   KSTAT_DATA_UINT64);
1911d14abf15SRobert Mustacchi     BNXE_KSTAT_LINK(mtuFCOE, KSTAT_DATA_UINT64);
1912d14abf15SRobert Mustacchi     BNXE_KSTAT_LINK(speed,   KSTAT_DATA_UINT64);
1913d14abf15SRobert Mustacchi     BNXE_KSTAT_LINK(link,    KSTAT_DATA_UINT64);
1914d14abf15SRobert Mustacchi     BNXE_KSTAT_LINK(duplex,  KSTAT_DATA_UINT64);
1915d14abf15SRobert Mustacchi     BNXE_KSTAT_LINK(pauseRx, KSTAT_DATA_UINT64);
1916d14abf15SRobert Mustacchi     BNXE_KSTAT_LINK(pauseTx, KSTAT_DATA_UINT64);
1917d14abf15SRobert Mustacchi 
1918d14abf15SRobert Mustacchi     pUM->kstatsLink->ks_update  = BnxeKstatLinkUpdate;
1919d14abf15SRobert Mustacchi     pUM->kstatsLink->ks_private = (void *)pUM;
1920d14abf15SRobert Mustacchi 
1921d14abf15SRobert Mustacchi     kstat_install(pUM->kstatsLink);
1922d14abf15SRobert Mustacchi 
1923d14abf15SRobert Mustacchi     /****************************************************************/
1924d14abf15SRobert Mustacchi 
1925d14abf15SRobert Mustacchi     if ((pUM->kstatsIntr = kstat_create("bnxe",
1926d14abf15SRobert Mustacchi                                         pUM->instance,
1927d14abf15SRobert Mustacchi                                         "intr",
1928d14abf15SRobert Mustacchi                                         "net",
1929d14abf15SRobert Mustacchi                                         KSTAT_TYPE_NAMED,
1930d14abf15SRobert Mustacchi                                         BNXE_KSTAT_INTR_SIZE,
1931d14abf15SRobert Mustacchi                                         0)) == NULL)
1932d14abf15SRobert Mustacchi     {
1933d14abf15SRobert Mustacchi         BnxeLogWarn(pUM, "Failed to create intr kstat");
1934d14abf15SRobert Mustacchi         return B_FALSE;
1935d14abf15SRobert Mustacchi     }
1936d14abf15SRobert Mustacchi 
1937d14abf15SRobert Mustacchi     pStatsIntr = (BnxeKstatIntr *)pUM->kstatsIntr->ks_data;
1938d14abf15SRobert Mustacchi 
1939d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(intrAlloc,      KSTAT_DATA_CHAR);
1940d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(intrFired,      KSTAT_DATA_UINT64);
1941d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(intrWrongState, KSTAT_DATA_UINT64);
1942d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(intrInDisabled, KSTAT_DATA_UINT64);
1943d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(intrZeroStatus, KSTAT_DATA_UINT64);
1944d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_00,          KSTAT_DATA_UINT64);
1945d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_01,          KSTAT_DATA_UINT64);
1946d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_02,          KSTAT_DATA_UINT64);
1947d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_03,          KSTAT_DATA_UINT64);
1948d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_04,          KSTAT_DATA_UINT64);
1949d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_05,          KSTAT_DATA_UINT64);
1950d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_06,          KSTAT_DATA_UINT64);
1951d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_07,          KSTAT_DATA_UINT64);
1952d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_08,          KSTAT_DATA_UINT64);
1953d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_09,          KSTAT_DATA_UINT64);
1954d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_10,          KSTAT_DATA_UINT64);
1955d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_11,          KSTAT_DATA_UINT64);
1956d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_12,          KSTAT_DATA_UINT64);
1957d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_13,          KSTAT_DATA_UINT64);
1958d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_14,          KSTAT_DATA_UINT64);
1959d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_15,          KSTAT_DATA_UINT64);
1960d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_16,          KSTAT_DATA_UINT64);
1961d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_nc_00,       KSTAT_DATA_UINT64);
1962d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_nc_01,       KSTAT_DATA_UINT64);
1963d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_nc_02,       KSTAT_DATA_UINT64);
1964d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_nc_03,       KSTAT_DATA_UINT64);
1965d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_nc_04,       KSTAT_DATA_UINT64);
1966d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_nc_05,       KSTAT_DATA_UINT64);
1967d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_nc_06,       KSTAT_DATA_UINT64);
1968d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_nc_07,       KSTAT_DATA_UINT64);
1969d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_nc_08,       KSTAT_DATA_UINT64);
1970d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_nc_09,       KSTAT_DATA_UINT64);
1971d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_nc_10,       KSTAT_DATA_UINT64);
1972d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_nc_11,       KSTAT_DATA_UINT64);
1973d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_nc_12,       KSTAT_DATA_UINT64);
1974d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_nc_13,       KSTAT_DATA_UINT64);
1975d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_nc_14,       KSTAT_DATA_UINT64);
1976d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_nc_15,       KSTAT_DATA_UINT64);
1977d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_nc_16,       KSTAT_DATA_UINT64);
1978d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_poll_00,     KSTAT_DATA_UINT64);
1979d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_poll_01,     KSTAT_DATA_UINT64);
1980d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_poll_02,     KSTAT_DATA_UINT64);
1981d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_poll_03,     KSTAT_DATA_UINT64);
1982d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_poll_04,     KSTAT_DATA_UINT64);
1983d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_poll_05,     KSTAT_DATA_UINT64);
1984d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_poll_06,     KSTAT_DATA_UINT64);
1985d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_poll_07,     KSTAT_DATA_UINT64);
1986d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_poll_08,     KSTAT_DATA_UINT64);
1987d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_poll_09,     KSTAT_DATA_UINT64);
1988d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_poll_10,     KSTAT_DATA_UINT64);
1989d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_poll_11,     KSTAT_DATA_UINT64);
1990d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_poll_12,     KSTAT_DATA_UINT64);
1991d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_poll_13,     KSTAT_DATA_UINT64);
1992d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_poll_14,     KSTAT_DATA_UINT64);
1993d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_poll_15,     KSTAT_DATA_UINT64);
1994d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_poll_16,     KSTAT_DATA_UINT64);
1995d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_poll_nc_00,  KSTAT_DATA_UINT64);
1996d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_poll_nc_01,  KSTAT_DATA_UINT64);
1997d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_poll_nc_02,  KSTAT_DATA_UINT64);
1998d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_poll_nc_03,  KSTAT_DATA_UINT64);
1999d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_poll_nc_04,  KSTAT_DATA_UINT64);
2000d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_poll_nc_05,  KSTAT_DATA_UINT64);
2001d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_poll_nc_06,  KSTAT_DATA_UINT64);
2002d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_poll_nc_07,  KSTAT_DATA_UINT64);
2003d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_poll_nc_08,  KSTAT_DATA_UINT64);
2004d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_poll_nc_09,  KSTAT_DATA_UINT64);
2005d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_poll_nc_10,  KSTAT_DATA_UINT64);
2006d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_poll_nc_11,  KSTAT_DATA_UINT64);
2007d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_poll_nc_12,  KSTAT_DATA_UINT64);
2008d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_poll_nc_13,  KSTAT_DATA_UINT64);
2009d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_poll_nc_14,  KSTAT_DATA_UINT64);
2010d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_poll_nc_15,  KSTAT_DATA_UINT64);
2011d14abf15SRobert Mustacchi     BNXE_KSTAT_INTR(sb_poll_nc_16,  KSTAT_DATA_UINT64);
2012d14abf15SRobert Mustacchi 
2013d14abf15SRobert Mustacchi     pUM->kstatsIntr->ks_update  = BnxeKstatIntrUpdate;
2014d14abf15SRobert Mustacchi     pUM->kstatsIntr->ks_private = (void *)pUM;
2015d14abf15SRobert Mustacchi 
2016d14abf15SRobert Mustacchi     kstat_install(pUM->kstatsIntr);
2017d14abf15SRobert Mustacchi 
2018d14abf15SRobert Mustacchi     /****************************************************************/
2019d14abf15SRobert Mustacchi 
2020d14abf15SRobert Mustacchi     if ((pUM->kstatsL2Chip = kstat_create("bnxe",
2021d14abf15SRobert Mustacchi                                           pUM->instance,
2022d14abf15SRobert Mustacchi                                           "l2chip",
2023d14abf15SRobert Mustacchi                                           "net",
2024d14abf15SRobert Mustacchi                                           KSTAT_TYPE_NAMED,
2025d14abf15SRobert Mustacchi                                           BNXE_KSTAT_L2_CHIP_SIZE,
2026d14abf15SRobert Mustacchi                                           0)) == NULL)
2027d14abf15SRobert Mustacchi     {
2028d14abf15SRobert Mustacchi         BnxeLogWarn(pUM, "Failed to create l2chip kstat");
2029d14abf15SRobert Mustacchi         return B_FALSE;
2030d14abf15SRobert Mustacchi     }
2031d14abf15SRobert Mustacchi 
2032d14abf15SRobert Mustacchi     pStatsL2Chip = (BnxeKstatL2Chip *)pUM->kstatsL2Chip->ks_data;
2033d14abf15SRobert Mustacchi 
2034d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(IfHCInOctets,                       KSTAT_DATA_UINT64);
2035d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(IfHCInBadOctets,                    KSTAT_DATA_UINT64);
2036d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(IfHCOutOctets,                      KSTAT_DATA_UINT64);
2037d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(IfHCOutBadOctets,                   KSTAT_DATA_UINT64);
2038d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(IfHCOutPkts,                        KSTAT_DATA_UINT64);
2039d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(IfHCInPkts,                         KSTAT_DATA_UINT64);
2040d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(IfHCInUcastPkts,                    KSTAT_DATA_UINT64);
2041d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(IfHCInMulticastPkts,                KSTAT_DATA_UINT64);
2042d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(IfHCInBroadcastPkts,                KSTAT_DATA_UINT64);
2043d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(IfHCOutUcastPkts,                   KSTAT_DATA_UINT64);
2044d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(IfHCOutMulticastPkts,               KSTAT_DATA_UINT64);
2045d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(IfHCOutBroadcastPkts,               KSTAT_DATA_UINT64);
2046d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(IfHCInUcastOctets,                  KSTAT_DATA_UINT64);
2047d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(IfHCInMulticastOctets,              KSTAT_DATA_UINT64);
2048d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(IfHCInBroadcastOctets,              KSTAT_DATA_UINT64);
2049d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(IfHCOutUcastOctets,                 KSTAT_DATA_UINT64);
2050d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(IfHCOutMulticastOctets,             KSTAT_DATA_UINT64);
2051d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(IfHCOutBroadcastOctets,             KSTAT_DATA_UINT64);
2052d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(IfHCOutDiscards,                    KSTAT_DATA_UINT64);
2053d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(IfHCInFalseCarrierErrors,           KSTAT_DATA_UINT64);
2054d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(Dot3StatsInternalMacTransmitErrors, KSTAT_DATA_UINT64);
2055d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(Dot3StatsCarrierSenseErrors,        KSTAT_DATA_UINT64);
2056d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(Dot3StatsFCSErrors,                 KSTAT_DATA_UINT64);
2057d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(Dot3StatsAlignmentErrors,           KSTAT_DATA_UINT64);
2058d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(Dot3StatsSingleCollisionFrames,     KSTAT_DATA_UINT64);
2059d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(Dot3StatsMultipleCollisionFrames,   KSTAT_DATA_UINT64);
2060d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(Dot3StatsDeferredTransmissions,     KSTAT_DATA_UINT64);
2061d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(Dot3StatsExcessiveCollisions,       KSTAT_DATA_UINT64);
2062d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(Dot3StatsLateCollisions,            KSTAT_DATA_UINT64);
2063d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(EtherStatsCollisions,               KSTAT_DATA_UINT64);
2064d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(EtherStatsFragments,                KSTAT_DATA_UINT64);
2065d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(EtherStatsJabbers,                  KSTAT_DATA_UINT64);
2066d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(EtherStatsUndersizePkts,            KSTAT_DATA_UINT64);
2067d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(EtherStatsOverrsizePkts,            KSTAT_DATA_UINT64);
2068d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(EtherStatsTx64Octets,               KSTAT_DATA_UINT64);
2069d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(EtherStatsTx65to127Octets,          KSTAT_DATA_UINT64);
2070d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(EtherStatsTx128to255Octets,         KSTAT_DATA_UINT64);
2071d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(EtherStatsTx256to511Octets,         KSTAT_DATA_UINT64);
2072d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(EtherStatsTx512to1023Octets,        KSTAT_DATA_UINT64);
2073d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(EtherStatsTx1024to1522Octets,       KSTAT_DATA_UINT64);
2074d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(EtherStatsTxOver1522Octets,         KSTAT_DATA_UINT64);
2075d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(XonPauseFramesReceived,             KSTAT_DATA_UINT64);
2076d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(XoffPauseFramesReceived,            KSTAT_DATA_UINT64);
2077d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(OutXonSent,                         KSTAT_DATA_UINT64);
2078d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(OutXoffSent,                        KSTAT_DATA_UINT64);
2079d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(FlowControlDone,                    KSTAT_DATA_UINT64);
2080d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(MacControlFramesReceived,           KSTAT_DATA_UINT64);
2081d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(XoffStateEntered,                   KSTAT_DATA_UINT64);
2082d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(IfInFramesL2FilterDiscards,         KSTAT_DATA_UINT64);
2083d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(IfInTTL0Discards,                   KSTAT_DATA_UINT64);
2084d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(IfInxxOverflowDiscards,             KSTAT_DATA_UINT64);
2085d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(IfInMBUFDiscards,                   KSTAT_DATA_UINT64);
2086d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(IfInErrors,                         KSTAT_DATA_UINT64);
2087d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(IfInErrorsOctets,                   KSTAT_DATA_UINT64);
2088d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(IfInNoBrbBuffer,                    KSTAT_DATA_UINT64);
2089d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(NigBrbPacket,                       KSTAT_DATA_UINT64);
2090d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(NigBrbTruncate,                     KSTAT_DATA_UINT64);
2091d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(NigFlowCtrlDiscard,                 KSTAT_DATA_UINT64);
2092d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(NigFlowCtrlOctets,                  KSTAT_DATA_UINT64);
2093d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(NigFlowCtrlPacket,                  KSTAT_DATA_UINT64);
2094d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(NigMngDiscard,                      KSTAT_DATA_UINT64);
2095d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(NigMngOctetInp,                     KSTAT_DATA_UINT64);
2096d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(NigMngOctetOut,                     KSTAT_DATA_UINT64);
2097d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(NigMngPacketInp,                    KSTAT_DATA_UINT64);
2098d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(NigMngPacketOut,                    KSTAT_DATA_UINT64);
2099d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(NigPbfOctets,                       KSTAT_DATA_UINT64);
2100d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(NigPbfPacket,                       KSTAT_DATA_UINT64);
2101d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_CHIP(NigSafcInp,                         KSTAT_DATA_UINT64);
2102d14abf15SRobert Mustacchi 
2103d14abf15SRobert Mustacchi     pUM->kstatsL2Chip->ks_update  = BnxeKstatL2ChipUpdate;
2104d14abf15SRobert Mustacchi     pUM->kstatsL2Chip->ks_private = (void *)pUM;
2105d14abf15SRobert Mustacchi 
2106d14abf15SRobert Mustacchi     kstat_install(pUM->kstatsL2Chip);
2107d14abf15SRobert Mustacchi 
2108d14abf15SRobert Mustacchi     /****************************************************************/
2109d14abf15SRobert Mustacchi 
2110d14abf15SRobert Mustacchi     if ((pUM->kstatsL2Driver = kstat_create("bnxe",
2111d14abf15SRobert Mustacchi                                             pUM->instance,
2112d14abf15SRobert Mustacchi                                             "l2driver",
2113d14abf15SRobert Mustacchi                                             "net",
2114d14abf15SRobert Mustacchi                                             KSTAT_TYPE_NAMED,
2115d14abf15SRobert Mustacchi                                             BNXE_KSTAT_L2_DRIVER_SIZE,
2116d14abf15SRobert Mustacchi                                             0)) == NULL)
2117d14abf15SRobert Mustacchi     {
2118d14abf15SRobert Mustacchi         BnxeLogWarn(pUM, "Failed to create l2driver kstat");
2119d14abf15SRobert Mustacchi         return B_FALSE;
2120d14abf15SRobert Mustacchi     }
2121d14abf15SRobert Mustacchi 
2122d14abf15SRobert Mustacchi     pStatsL2Driver = (BnxeKstatL2Driver *)pUM->kstatsL2Driver->ks_data;
2123d14abf15SRobert Mustacchi 
2124d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_DRIVER(RxIPv4FragCount,    KSTAT_DATA_UINT64);
2125d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_DRIVER(RxIpCsErrorCount,   KSTAT_DATA_UINT64);
2126d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_DRIVER(RxTcpCsErrorCount,  KSTAT_DATA_UINT64);
2127d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_DRIVER(RxLlcSnapCount,     KSTAT_DATA_UINT64);
2128d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_DRIVER(RxPhyErrorCount,    KSTAT_DATA_UINT64);
2129d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_DRIVER(RxIpv6ExtCount,     KSTAT_DATA_UINT64);
2130d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_DRIVER(TxNoL2Bd,           KSTAT_DATA_UINT64);
2131d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_DRIVER(TxNoSqWqe,          KSTAT_DATA_UINT64);
2132d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_DRIVER(TxL2AssemblyBufUse, KSTAT_DATA_UINT64);
2133d14abf15SRobert Mustacchi 
2134d14abf15SRobert Mustacchi     pUM->kstatsL2Driver->ks_update  = BnxeKstatL2DriverUpdate;
2135d14abf15SRobert Mustacchi     pUM->kstatsL2Driver->ks_private = (void *)pUM;
2136d14abf15SRobert Mustacchi 
2137d14abf15SRobert Mustacchi     kstat_install(pUM->kstatsL2Driver);
2138d14abf15SRobert Mustacchi 
2139d14abf15SRobert Mustacchi     /****************************************************************/
2140d14abf15SRobert Mustacchi 
2141d14abf15SRobert Mustacchi     if ((pUM->kstatsL2Stats = kstat_create("bnxe",
2142d14abf15SRobert Mustacchi                                            pUM->instance,
2143d14abf15SRobert Mustacchi                                            "l2stats",
2144d14abf15SRobert Mustacchi                                            "net",
2145d14abf15SRobert Mustacchi                                            KSTAT_TYPE_NAMED,
2146d14abf15SRobert Mustacchi                                            BNXE_KSTAT_ETH_STATS_SIZE,
2147d14abf15SRobert Mustacchi                                            0)) == NULL)
2148d14abf15SRobert Mustacchi     {
2149d14abf15SRobert Mustacchi         BnxeLogWarn(pUM, "Failed to create l2stats kstat");
2150d14abf15SRobert Mustacchi         return B_FALSE;
2151d14abf15SRobert Mustacchi     }
2152d14abf15SRobert Mustacchi 
2153d14abf15SRobert Mustacchi     pStatsL2Stats = (BnxeKstatEthStats *)pUM->kstatsL2Stats->ks_data;
2154d14abf15SRobert Mustacchi 
2155d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_STATS(txFramesOk,         KSTAT_DATA_UINT64);
2156d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_STATS(rxFramesOk,         KSTAT_DATA_UINT64);
2157d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_STATS(txErr,              KSTAT_DATA_UINT64);
2158d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_STATS(rxErr,              KSTAT_DATA_UINT64);
2159d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_STATS(rxCrcErr,           KSTAT_DATA_UINT64);
2160d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_STATS(alignErr,           KSTAT_DATA_UINT64);
2161d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_STATS(collisionsSingle,   KSTAT_DATA_UINT64);
2162d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_STATS(collisionsMultiple, KSTAT_DATA_UINT64);
2163d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_STATS(framesDeferred,     KSTAT_DATA_UINT64);
2164d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_STATS(collisonsMax,       KSTAT_DATA_UINT64);
2165d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_STATS(rxOverrun,          KSTAT_DATA_UINT64);
2166d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_STATS(txOverrun,          KSTAT_DATA_UINT64);
2167d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_STATS(txFramesUnicast,    KSTAT_DATA_UINT64);
2168d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_STATS(txFramesMulticast,  KSTAT_DATA_UINT64);
2169d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_STATS(txFramesBroadcast,  KSTAT_DATA_UINT64);
2170d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_STATS(rxFramesUnicast,    KSTAT_DATA_UINT64);
2171d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_STATS(rxFramesMulticast,  KSTAT_DATA_UINT64);
2172d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_STATS(rxFramesBroadcast,  KSTAT_DATA_UINT64);
2173d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_STATS(rxNoBufferDrop,     KSTAT_DATA_UINT64);
2174d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_STATS(rxBytes,            KSTAT_DATA_UINT64);
2175d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_STATS(txBytes,            KSTAT_DATA_UINT64);
2176d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_STATS(offloadIP4,         KSTAT_DATA_UINT64);
2177d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_STATS(offloadTCP,         KSTAT_DATA_UINT64);
2178d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_STATS(ifInDiscards,       KSTAT_DATA_UINT64);
2179d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_STATS(ifInErrors,         KSTAT_DATA_UINT64);
2180d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_STATS(ifOutErrors,        KSTAT_DATA_UINT64);
2181d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_STATS(offloadIP6,         KSTAT_DATA_UINT64);
2182d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_STATS(offloadTCP6,        KSTAT_DATA_UINT64);
2183d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_STATS(txDiscards,         KSTAT_DATA_UINT64);
2184d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_STATS(rxBytesUnicast,     KSTAT_DATA_UINT64);
2185d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_STATS(rxBytesMulticast,   KSTAT_DATA_UINT64);
2186d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_STATS(rxBytesBroadcast,   KSTAT_DATA_UINT64);
2187d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_STATS(txBytesUnicast,     KSTAT_DATA_UINT64);
2188d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_STATS(txBytesMulticast,   KSTAT_DATA_UINT64);
2189d14abf15SRobert Mustacchi     BNXE_KSTAT_L2_STATS(txBytesBroadcast,   KSTAT_DATA_UINT64);
2190d14abf15SRobert Mustacchi 
2191d14abf15SRobert Mustacchi     pUM->kstatsL2Stats->ks_update  = BnxeKstatL2StatsUpdate;
2192d14abf15SRobert Mustacchi     pUM->kstatsL2Stats->ks_private = (void *)pUM;
2193d14abf15SRobert Mustacchi 
2194d14abf15SRobert Mustacchi     kstat_install(pUM->kstatsL2Stats);
2195d14abf15SRobert Mustacchi 
2196d14abf15SRobert Mustacchi     /****************************************************************/
2197d14abf15SRobert Mustacchi 
2198d14abf15SRobert Mustacchi     if (BNXE_FCOE(pUM))
2199d14abf15SRobert Mustacchi     {
2200d14abf15SRobert Mustacchi         if ((pUM->kstatsFcoe = kstat_create("bnxe",
2201d14abf15SRobert Mustacchi                                             pUM->instance,
2202d14abf15SRobert Mustacchi                                             "fcoe",
2203d14abf15SRobert Mustacchi                                             "net",
2204d14abf15SRobert Mustacchi                                             KSTAT_TYPE_NAMED,
2205d14abf15SRobert Mustacchi                                             BNXE_KSTAT_FCOE_SIZE,
2206d14abf15SRobert Mustacchi                                             0)) == NULL)
2207d14abf15SRobert Mustacchi         {
2208d14abf15SRobert Mustacchi             BnxeLogWarn(pUM, "Failed to create fcoe kstat");
2209d14abf15SRobert Mustacchi             BnxeKstatFini(pUM);
2210d14abf15SRobert Mustacchi             return B_FALSE;
2211d14abf15SRobert Mustacchi         }
2212d14abf15SRobert Mustacchi 
2213d14abf15SRobert Mustacchi         pStatsFcoe = (BnxeKstatFcoe *)pUM->kstatsFcoe->ks_data;
2214d14abf15SRobert Mustacchi 
2215d14abf15SRobert Mustacchi         BNXE_KSTAT_FCOE(pdev_hi,             KSTAT_DATA_CHAR);
2216d14abf15SRobert Mustacchi         BNXE_KSTAT_FCOE(pdev_lo,             KSTAT_DATA_CHAR);
2217d14abf15SRobert Mustacchi         BNXE_KSTAT_FCOE(instance,            KSTAT_DATA_CHAR);
2218d14abf15SRobert Mustacchi         BNXE_KSTAT_FCOE(macAddr,             KSTAT_DATA_CHAR);
2219d14abf15SRobert Mustacchi         BNXE_KSTAT_FCOE(pwwn_hi,             KSTAT_DATA_CHAR);
2220d14abf15SRobert Mustacchi         BNXE_KSTAT_FCOE(pwwn_lo,             KSTAT_DATA_CHAR);
2221d14abf15SRobert Mustacchi         BNXE_KSTAT_FCOE(mtu,                 KSTAT_DATA_UINT64);
2222d14abf15SRobert Mustacchi         BNXE_KSTAT_FCOE(initWqeTx,           KSTAT_DATA_UINT64);
2223d14abf15SRobert Mustacchi         BNXE_KSTAT_FCOE(initWqeTxErr,        KSTAT_DATA_UINT64);
2224d14abf15SRobert Mustacchi         BNXE_KSTAT_FCOE(initCqeRx,           KSTAT_DATA_UINT64);
2225d14abf15SRobert Mustacchi         BNXE_KSTAT_FCOE(initCqeRxErr,        KSTAT_DATA_UINT64);
2226d14abf15SRobert Mustacchi         BNXE_KSTAT_FCOE(offloadConnWqeTx,    KSTAT_DATA_UINT64);
2227d14abf15SRobert Mustacchi         BNXE_KSTAT_FCOE(offloadConnWqeTxErr, KSTAT_DATA_UINT64);
2228d14abf15SRobert Mustacchi         BNXE_KSTAT_FCOE(offloadConnCqeRx,    KSTAT_DATA_UINT64);
2229d14abf15SRobert Mustacchi         BNXE_KSTAT_FCOE(offloadConnCqeRxErr, KSTAT_DATA_UINT64);
2230d14abf15SRobert Mustacchi         BNXE_KSTAT_FCOE(enableConnWqeTx,     KSTAT_DATA_UINT64);
2231d14abf15SRobert Mustacchi         BNXE_KSTAT_FCOE(enableConnWqeTxErr,  KSTAT_DATA_UINT64);
2232d14abf15SRobert Mustacchi         BNXE_KSTAT_FCOE(enableConnCqeRx,     KSTAT_DATA_UINT64);
2233d14abf15SRobert Mustacchi         BNXE_KSTAT_FCOE(enableConnCqeRxErr,  KSTAT_DATA_UINT64);
2234d14abf15SRobert Mustacchi         BNXE_KSTAT_FCOE(disableConnWqeTx,    KSTAT_DATA_UINT64);
2235d14abf15SRobert Mustacchi         BNXE_KSTAT_FCOE(disableConnWqeTxErr, KSTAT_DATA_UINT64);
2236d14abf15SRobert Mustacchi         BNXE_KSTAT_FCOE(disableConnCqeRx,    KSTAT_DATA_UINT64);
2237d14abf15SRobert Mustacchi         BNXE_KSTAT_FCOE(disableConnCqeRxErr, KSTAT_DATA_UINT64);
2238d14abf15SRobert Mustacchi         BNXE_KSTAT_FCOE(destroyConnWqeTx,    KSTAT_DATA_UINT64);
2239d14abf15SRobert Mustacchi         BNXE_KSTAT_FCOE(destroyConnWqeTxErr, KSTAT_DATA_UINT64);
2240d14abf15SRobert Mustacchi         BNXE_KSTAT_FCOE(destroyConnCqeRx,    KSTAT_DATA_UINT64);
2241d14abf15SRobert Mustacchi         BNXE_KSTAT_FCOE(destroyConnCqeRxErr, KSTAT_DATA_UINT64);
2242d14abf15SRobert Mustacchi         BNXE_KSTAT_FCOE(destroyWqeTx,        KSTAT_DATA_UINT64);
2243d14abf15SRobert Mustacchi         BNXE_KSTAT_FCOE(destroyWqeTxErr,     KSTAT_DATA_UINT64);
2244d14abf15SRobert Mustacchi         BNXE_KSTAT_FCOE(destroyCqeRx,        KSTAT_DATA_UINT64);
2245d14abf15SRobert Mustacchi         BNXE_KSTAT_FCOE(destroyCqeRxErr,     KSTAT_DATA_UINT64);
2246d14abf15SRobert Mustacchi         BNXE_KSTAT_FCOE(compRequestCqeRx,    KSTAT_DATA_UINT64);
2247d14abf15SRobert Mustacchi         BNXE_KSTAT_FCOE(compRequestCqeRxErr, KSTAT_DATA_UINT64);
2248d14abf15SRobert Mustacchi         BNXE_KSTAT_FCOE(statWqeTx,           KSTAT_DATA_UINT64);
2249d14abf15SRobert Mustacchi         BNXE_KSTAT_FCOE(statWqeTxErr,        KSTAT_DATA_UINT64);
2250d14abf15SRobert Mustacchi         BNXE_KSTAT_FCOE(statCqeRx,           KSTAT_DATA_UINT64);
2251d14abf15SRobert Mustacchi         BNXE_KSTAT_FCOE(statCqeRxErr,        KSTAT_DATA_UINT64);
2252d14abf15SRobert Mustacchi 
2253d14abf15SRobert Mustacchi         pUM->kstatsFcoe->ks_update  = BnxeKstatFcoeUpdate;
2254d14abf15SRobert Mustacchi         pUM->kstatsFcoe->ks_private = (void *)pUM;
2255d14abf15SRobert Mustacchi 
2256d14abf15SRobert Mustacchi         kstat_install(pUM->kstatsFcoe);
2257d14abf15SRobert Mustacchi 
2258d14abf15SRobert Mustacchi         if (!BnxeKstatInitRxQ(pUM, FCOE_CID(pLM)))
2259d14abf15SRobert Mustacchi         {
2260d14abf15SRobert Mustacchi             BnxeKstatFini(pUM);
2261d14abf15SRobert Mustacchi             return B_FALSE;
2262d14abf15SRobert Mustacchi         }
2263d14abf15SRobert Mustacchi 
2264d14abf15SRobert Mustacchi         if (!BnxeKstatInitTxQ(pUM, FCOE_CID(pLM)))
2265d14abf15SRobert Mustacchi         {
2266d14abf15SRobert Mustacchi             BnxeKstatFini(pUM);
2267d14abf15SRobert Mustacchi             return B_FALSE;
2268d14abf15SRobert Mustacchi         }
2269d14abf15SRobert Mustacchi     }
2270d14abf15SRobert Mustacchi 
2271d14abf15SRobert Mustacchi     /****************************************************************/
2272d14abf15SRobert Mustacchi 
2273d14abf15SRobert Mustacchi     if (IS_DCB_SUPPORTED(pLM))
2274d14abf15SRobert Mustacchi     {
2275d14abf15SRobert Mustacchi         if ((pUM->kstatsDcbx = kstat_create("bnxe",
2276d14abf15SRobert Mustacchi                                             pUM->instance,
2277d14abf15SRobert Mustacchi                                             "dcbx",
2278d14abf15SRobert Mustacchi                                             "net",
2279d14abf15SRobert Mustacchi                                             KSTAT_TYPE_NAMED,
2280d14abf15SRobert Mustacchi                                             BNXE_KSTAT_DCBX_SIZE,
2281d14abf15SRobert Mustacchi                                             0)) == NULL)
2282d14abf15SRobert Mustacchi         {
2283d14abf15SRobert Mustacchi             BnxeLogWarn(pUM, "Failed to create dcbx kstat");
2284d14abf15SRobert Mustacchi             BnxeKstatFini(pUM);
2285d14abf15SRobert Mustacchi             return B_FALSE;
2286d14abf15SRobert Mustacchi         }
2287d14abf15SRobert Mustacchi 
2288d14abf15SRobert Mustacchi         pStatsDcbx = (BnxeKstatDcbx *)pUM->kstatsDcbx->ks_data;
2289d14abf15SRobert Mustacchi 
2290d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(dcbx_sync, KSTAT_DATA_CHAR);
2291d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(dcbx_vers, KSTAT_DATA_CHAR);
2292d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(overwrite_settings, KSTAT_DATA_CHAR);
2293d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(prio_tag, KSTAT_DATA_CHAR);
2294d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(prio_tag_fcoe, KSTAT_DATA_CHAR);
2295d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(prio_tag_iscsi, KSTAT_DATA_CHAR);
2296d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(prio_tag_net, KSTAT_DATA_CHAR);
2297d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(pfc, KSTAT_DATA_CHAR);
2298d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(pfc_prio_0, KSTAT_DATA_CHAR);
2299d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(pfc_prio_1, KSTAT_DATA_CHAR);
2300d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(pfc_prio_2, KSTAT_DATA_CHAR);
2301d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(pfc_prio_3, KSTAT_DATA_CHAR);
2302d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(pfc_prio_4, KSTAT_DATA_CHAR);
2303d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(pfc_prio_5, KSTAT_DATA_CHAR);
2304d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(pfc_prio_6, KSTAT_DATA_CHAR);
2305d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(pfc_prio_7, KSTAT_DATA_CHAR);
2306d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(ets, KSTAT_DATA_CHAR);
2307d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(ets_prio_0_pg, KSTAT_DATA_CHAR);
2308d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(ets_prio_1_pg, KSTAT_DATA_CHAR);
2309d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(ets_prio_2_pg, KSTAT_DATA_CHAR);
2310d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(ets_prio_3_pg, KSTAT_DATA_CHAR);
2311d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(ets_prio_4_pg, KSTAT_DATA_CHAR);
2312d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(ets_prio_5_pg, KSTAT_DATA_CHAR);
2313d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(ets_prio_6_pg, KSTAT_DATA_CHAR);
2314d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(ets_prio_7_pg, KSTAT_DATA_CHAR);
2315d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(ets_pg_0_bw, KSTAT_DATA_CHAR);
2316d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(ets_pg_1_bw, KSTAT_DATA_CHAR);
2317d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(ets_pg_2_bw, KSTAT_DATA_CHAR);
2318d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(ets_pg_3_bw, KSTAT_DATA_CHAR);
2319d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(ets_pg_4_bw, KSTAT_DATA_CHAR);
2320d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(ets_pg_5_bw, KSTAT_DATA_CHAR);
2321d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(ets_pg_6_bw, KSTAT_DATA_CHAR);
2322d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(ets_pg_7_bw, KSTAT_DATA_CHAR);
2323d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(lldp, KSTAT_DATA_CHAR);
2324d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(lldp_tx_interval, KSTAT_DATA_CHAR);
2325d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(lldp_tx_fast_interval, KSTAT_DATA_CHAR);
2326d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(amib_apptlv_willing, KSTAT_DATA_CHAR);
2327d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(amib_apptlv_tx, KSTAT_DATA_CHAR);
2328d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(amib_apptlv_net_prio, KSTAT_DATA_CHAR);
2329d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(amib_apptlv_tbl_0_prio, KSTAT_DATA_CHAR);
2330d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(amib_apptlv_tbl_0_appid, KSTAT_DATA_CHAR);
2331d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(amib_apptlv_tbl_1_prio, KSTAT_DATA_CHAR);
2332d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(amib_apptlv_tbl_1_appid, KSTAT_DATA_CHAR);
2333d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(amib_apptlv_tbl_2_prio, KSTAT_DATA_CHAR);
2334d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(amib_apptlv_tbl_2_appid, KSTAT_DATA_CHAR);
2335d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(amib_apptlv_tbl_3_prio, KSTAT_DATA_CHAR);
2336d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(amib_apptlv_tbl_3_appid, KSTAT_DATA_CHAR);
2337d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(amib_pgtlv_willing, KSTAT_DATA_CHAR);
2338d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(amib_pgtlv_tx, KSTAT_DATA_CHAR);
2339d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(amib_pgtlv_tc_supported, KSTAT_DATA_CHAR);
2340d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(amib_pgtlv_ets, KSTAT_DATA_CHAR);
2341d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(amib_pgtlv_pg_0_bw, KSTAT_DATA_CHAR);
2342d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(amib_pgtlv_pg_1_bw, KSTAT_DATA_CHAR);
2343d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(amib_pgtlv_pg_2_bw, KSTAT_DATA_CHAR);
2344d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(amib_pgtlv_pg_3_bw, KSTAT_DATA_CHAR);
2345d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(amib_pgtlv_pg_4_bw, KSTAT_DATA_CHAR);
2346d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(amib_pgtlv_pg_5_bw, KSTAT_DATA_CHAR);
2347d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(amib_pgtlv_pg_6_bw, KSTAT_DATA_CHAR);
2348d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(amib_pgtlv_pg_7_bw, KSTAT_DATA_CHAR);
2349d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(amib_pgtlv_prio_0_map, KSTAT_DATA_CHAR);
2350d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(amib_pgtlv_prio_1_map, KSTAT_DATA_CHAR);
2351d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(amib_pgtlv_prio_2_map, KSTAT_DATA_CHAR);
2352d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(amib_pgtlv_prio_3_map, KSTAT_DATA_CHAR);
2353d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(amib_pgtlv_prio_4_map, KSTAT_DATA_CHAR);
2354d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(amib_pgtlv_prio_5_map, KSTAT_DATA_CHAR);
2355d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(amib_pgtlv_prio_6_map, KSTAT_DATA_CHAR);
2356d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(amib_pgtlv_prio_7_map, KSTAT_DATA_CHAR);
2357d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(amib_pfctlv_willing, KSTAT_DATA_CHAR);
2358d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(amib_pfctlv_tx, KSTAT_DATA_CHAR);
2359d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(amib_pfctlv_pfc, KSTAT_DATA_CHAR);
2360d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(amib_pfctlv_pfc_map, KSTAT_DATA_CHAR);
2361d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(rmib_apptlv_willing, KSTAT_DATA_CHAR);
2362d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(rmib_apptlv_tbl_0_prio, KSTAT_DATA_CHAR);
2363d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(rmib_apptlv_tbl_0_appid, KSTAT_DATA_CHAR);
2364d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(rmib_apptlv_tbl_1_prio, KSTAT_DATA_CHAR);
2365d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(rmib_apptlv_tbl_1_appid, KSTAT_DATA_CHAR);
2366d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(rmib_apptlv_tbl_2_prio, KSTAT_DATA_CHAR);
2367d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(rmib_apptlv_tbl_2_appid, KSTAT_DATA_CHAR);
2368d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(rmib_apptlv_tbl_3_prio, KSTAT_DATA_CHAR);
2369d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(rmib_apptlv_tbl_3_appid, KSTAT_DATA_CHAR);
2370d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(rmib_pgtlv_willing, KSTAT_DATA_CHAR);
2371d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(rmib_pgtlv_tc_supported, KSTAT_DATA_CHAR);
2372d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(rmib_pgtlv_pg_0_bw, KSTAT_DATA_CHAR);
2373d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(rmib_pgtlv_pg_1_bw, KSTAT_DATA_CHAR);
2374d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(rmib_pgtlv_pg_2_bw, KSTAT_DATA_CHAR);
2375d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(rmib_pgtlv_pg_3_bw, KSTAT_DATA_CHAR);
2376d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(rmib_pgtlv_pg_4_bw, KSTAT_DATA_CHAR);
2377d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(rmib_pgtlv_pg_5_bw, KSTAT_DATA_CHAR);
2378d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(rmib_pgtlv_pg_6_bw, KSTAT_DATA_CHAR);
2379d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(rmib_pgtlv_pg_7_bw, KSTAT_DATA_CHAR);
2380d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(rmib_pgtlv_prio_0_map, KSTAT_DATA_CHAR);
2381d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(rmib_pgtlv_prio_1_map, KSTAT_DATA_CHAR);
2382d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(rmib_pgtlv_prio_2_map, KSTAT_DATA_CHAR);
2383d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(rmib_pgtlv_prio_3_map, KSTAT_DATA_CHAR);
2384d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(rmib_pgtlv_prio_4_map, KSTAT_DATA_CHAR);
2385d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(rmib_pgtlv_prio_5_map, KSTAT_DATA_CHAR);
2386d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(rmib_pgtlv_prio_6_map, KSTAT_DATA_CHAR);
2387d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(rmib_pgtlv_prio_7_map, KSTAT_DATA_CHAR);
2388d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(rmib_pfctlv_willing, KSTAT_DATA_CHAR);
2389d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(rmib_pfctlv_pfc_map, KSTAT_DATA_CHAR);
2390d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(rmib_pfctlv_capable, KSTAT_DATA_CHAR);
2391d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(lmib_apptlv_tbl_0_prio, KSTAT_DATA_CHAR);
2392d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(lmib_apptlv_tbl_0_appid, KSTAT_DATA_CHAR);
2393d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(lmib_apptlv_tbl_1_prio, KSTAT_DATA_CHAR);
2394d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(lmib_apptlv_tbl_1_appid, KSTAT_DATA_CHAR);
2395d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(lmib_apptlv_tbl_2_prio, KSTAT_DATA_CHAR);
2396d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(lmib_apptlv_tbl_2_appid, KSTAT_DATA_CHAR);
2397d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(lmib_apptlv_tbl_3_prio, KSTAT_DATA_CHAR);
2398d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(lmib_apptlv_tbl_3_appid, KSTAT_DATA_CHAR);
2399d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(lmib_apptlv_mismatch, KSTAT_DATA_CHAR);
2400d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(lmib_pgtlv_ets, KSTAT_DATA_CHAR);
2401d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(lmib_pgtlv_tc_supported, KSTAT_DATA_CHAR);
2402d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(lmib_pgtlv_pg_0_bw, KSTAT_DATA_CHAR);
2403d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(lmib_pgtlv_pg_1_bw, KSTAT_DATA_CHAR);
2404d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(lmib_pgtlv_pg_2_bw, KSTAT_DATA_CHAR);
2405d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(lmib_pgtlv_pg_3_bw, KSTAT_DATA_CHAR);
2406d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(lmib_pgtlv_pg_4_bw, KSTAT_DATA_CHAR);
2407d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(lmib_pgtlv_pg_5_bw, KSTAT_DATA_CHAR);
2408d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(lmib_pgtlv_pg_6_bw, KSTAT_DATA_CHAR);
2409d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(lmib_pgtlv_pg_7_bw, KSTAT_DATA_CHAR);
2410d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(lmib_pgtlv_prio_0_map, KSTAT_DATA_CHAR);
2411d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(lmib_pgtlv_prio_1_map, KSTAT_DATA_CHAR);
2412d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(lmib_pgtlv_prio_2_map, KSTAT_DATA_CHAR);
2413d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(lmib_pgtlv_prio_3_map, KSTAT_DATA_CHAR);
2414d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(lmib_pgtlv_prio_4_map, KSTAT_DATA_CHAR);
2415d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(lmib_pgtlv_prio_5_map, KSTAT_DATA_CHAR);
2416d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(lmib_pgtlv_prio_6_map, KSTAT_DATA_CHAR);
2417d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(lmib_pgtlv_prio_7_map, KSTAT_DATA_CHAR);
2418d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(lmib_pfctlv_pfc, KSTAT_DATA_CHAR);
2419d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(lmib_pfctlv_pfc_map, KSTAT_DATA_CHAR);
2420d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(lmib_pfctlv_capable, KSTAT_DATA_CHAR);
2421d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(lmib_pfctlv_mismatch, KSTAT_DATA_CHAR);
2422d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(dcbx_frames_rx, KSTAT_DATA_UINT64);
2423d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(dcbx_frames_tx, KSTAT_DATA_UINT64);
2424d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(pfc_frames_rx, KSTAT_DATA_UINT64);
2425d14abf15SRobert Mustacchi         BNXE_KSTAT_DCBX(pfc_frames_tx, KSTAT_DATA_UINT64);
2426d14abf15SRobert Mustacchi 
2427d14abf15SRobert Mustacchi         pUM->kstatsDcbx->ks_update  = BnxeKstatDcbxUpdate;
2428d14abf15SRobert Mustacchi         pUM->kstatsDcbx->ks_private = (void *)pUM;
2429d14abf15SRobert Mustacchi 
2430d14abf15SRobert Mustacchi         kstat_install(pUM->kstatsDcbx);
2431d14abf15SRobert Mustacchi     }
2432d14abf15SRobert Mustacchi 
2433d14abf15SRobert Mustacchi     /****************************************************************/
2434d14abf15SRobert Mustacchi 
2435d14abf15SRobert Mustacchi     if (!BnxeProtoFcoeAfex(pUM))
2436d14abf15SRobert Mustacchi     {
2437d14abf15SRobert Mustacchi         LM_FOREACH_RSS_IDX(pLM, idx)
2438d14abf15SRobert Mustacchi         {
2439d14abf15SRobert Mustacchi             if (!BnxeKstatInitRxQ(pUM, idx))
2440d14abf15SRobert Mustacchi             {
2441d14abf15SRobert Mustacchi                 BnxeKstatFini(pUM);
2442d14abf15SRobert Mustacchi                 return B_FALSE;
2443d14abf15SRobert Mustacchi             }
2444d14abf15SRobert Mustacchi         }
2445d14abf15SRobert Mustacchi 
2446d14abf15SRobert Mustacchi         LM_FOREACH_TSS_IDX(pLM, idx)
2447d14abf15SRobert Mustacchi         {
2448d14abf15SRobert Mustacchi             if (!BnxeKstatInitTxQ(pUM, idx))
2449d14abf15SRobert Mustacchi             {
2450d14abf15SRobert Mustacchi                 BnxeKstatFini(pUM);
2451d14abf15SRobert Mustacchi                 return B_FALSE;
2452d14abf15SRobert Mustacchi             }
2453d14abf15SRobert Mustacchi         }
2454d14abf15SRobert Mustacchi     }
2455d14abf15SRobert Mustacchi 
2456d14abf15SRobert Mustacchi     /****************************************************************/
2457d14abf15SRobert Mustacchi 
2458d14abf15SRobert Mustacchi     return B_TRUE;
2459d14abf15SRobert Mustacchi }
2460d14abf15SRobert Mustacchi 
2461d14abf15SRobert Mustacchi 
BnxeKstatFini(um_device_t * pUM)2462d14abf15SRobert Mustacchi void BnxeKstatFini(um_device_t * pUM)
2463d14abf15SRobert Mustacchi {
2464d14abf15SRobert Mustacchi     lm_device_t * pLM = (lm_device_t *)pUM;
2465d14abf15SRobert Mustacchi     int idx;
2466d14abf15SRobert Mustacchi 
2467d14abf15SRobert Mustacchi     if (pUM->kstats)
2468d14abf15SRobert Mustacchi     {
2469d14abf15SRobert Mustacchi         kstat_delete(pUM->kstats);
2470d14abf15SRobert Mustacchi         pUM->kstats = NULL;
2471d14abf15SRobert Mustacchi     }
2472d14abf15SRobert Mustacchi 
2473d14abf15SRobert Mustacchi     if (pUM->kstatsLink)
2474d14abf15SRobert Mustacchi     {
2475d14abf15SRobert Mustacchi         kstat_delete(pUM->kstatsLink);
2476d14abf15SRobert Mustacchi         pUM->kstatsLink = NULL;
2477d14abf15SRobert Mustacchi     }
2478d14abf15SRobert Mustacchi 
2479d14abf15SRobert Mustacchi     if (pUM->kstatsIntr)
2480d14abf15SRobert Mustacchi     {
2481d14abf15SRobert Mustacchi         kstat_delete(pUM->kstatsIntr);
2482d14abf15SRobert Mustacchi         pUM->kstatsIntr = NULL;
2483d14abf15SRobert Mustacchi     }
2484d14abf15SRobert Mustacchi 
2485d14abf15SRobert Mustacchi     if (pUM->kstatsL2Chip)
2486d14abf15SRobert Mustacchi     {
2487d14abf15SRobert Mustacchi         kstat_delete(pUM->kstatsL2Chip);
2488d14abf15SRobert Mustacchi         pUM->kstatsL2Chip = NULL;
2489d14abf15SRobert Mustacchi     }
2490d14abf15SRobert Mustacchi 
2491d14abf15SRobert Mustacchi     if (pUM->kstatsL2Driver)
2492d14abf15SRobert Mustacchi     {
2493d14abf15SRobert Mustacchi         kstat_delete(pUM->kstatsL2Driver);
2494d14abf15SRobert Mustacchi         pUM->kstatsL2Driver = NULL;
2495d14abf15SRobert Mustacchi     }
2496d14abf15SRobert Mustacchi 
2497d14abf15SRobert Mustacchi     if (pUM->kstatsL2Stats)
2498d14abf15SRobert Mustacchi     {
2499d14abf15SRobert Mustacchi         kstat_delete(pUM->kstatsL2Stats);
2500d14abf15SRobert Mustacchi         pUM->kstatsL2Stats = NULL;
2501d14abf15SRobert Mustacchi     }
2502d14abf15SRobert Mustacchi 
2503d14abf15SRobert Mustacchi     if (BNXE_FCOE(pUM))
2504d14abf15SRobert Mustacchi     {
2505d14abf15SRobert Mustacchi         if (pUM->kstatsFcoe)
2506d14abf15SRobert Mustacchi         {
2507d14abf15SRobert Mustacchi             kstat_delete(pUM->kstatsFcoe);
2508d14abf15SRobert Mustacchi             pUM->kstatsFcoe = NULL;
2509d14abf15SRobert Mustacchi         }
2510d14abf15SRobert Mustacchi 
2511d14abf15SRobert Mustacchi         idx = FCOE_CID(pLM);
2512d14abf15SRobert Mustacchi 
2513d14abf15SRobert Mustacchi         if (pUM->kstats_rxq[idx])
2514d14abf15SRobert Mustacchi         {
2515d14abf15SRobert Mustacchi             kstat_delete(pUM->kstats_rxq[idx]);
2516d14abf15SRobert Mustacchi             pUM->kstats_rxq[idx] = NULL;
2517d14abf15SRobert Mustacchi         }
2518d14abf15SRobert Mustacchi 
2519d14abf15SRobert Mustacchi         pUM->kstats_rxq_map[idx].idx = 0;
2520d14abf15SRobert Mustacchi         pUM->kstats_rxq_map[idx].pUM = NULL;
2521d14abf15SRobert Mustacchi 
2522d14abf15SRobert Mustacchi         if (pUM->kstats_txq[idx])
2523d14abf15SRobert Mustacchi         {
2524d14abf15SRobert Mustacchi             kstat_delete(pUM->kstats_txq[idx]);
2525d14abf15SRobert Mustacchi             pUM->kstats_txq[idx] = NULL;
2526d14abf15SRobert Mustacchi         }
2527d14abf15SRobert Mustacchi 
2528d14abf15SRobert Mustacchi         pUM->kstats_txq_map[idx].idx = 0;
2529d14abf15SRobert Mustacchi         pUM->kstats_txq_map[idx].pUM = NULL;
2530d14abf15SRobert Mustacchi     }
2531d14abf15SRobert Mustacchi 
2532d14abf15SRobert Mustacchi     if (IS_DCB_SUPPORTED(pLM))
2533d14abf15SRobert Mustacchi     {
2534d14abf15SRobert Mustacchi         if (pUM->kstatsDcbx)
2535d14abf15SRobert Mustacchi         {
2536d14abf15SRobert Mustacchi             kstat_delete(pUM->kstatsDcbx);
2537d14abf15SRobert Mustacchi             pUM->kstatsDcbx = NULL;
2538d14abf15SRobert Mustacchi         }
2539d14abf15SRobert Mustacchi     }
2540d14abf15SRobert Mustacchi 
2541d14abf15SRobert Mustacchi     if (!BnxeProtoFcoeAfex(pUM))
2542d14abf15SRobert Mustacchi     {
2543d14abf15SRobert Mustacchi         LM_FOREACH_RSS_IDX(pLM, idx)
2544d14abf15SRobert Mustacchi         {
2545d14abf15SRobert Mustacchi             if (pUM->kstats_rxq[idx])
2546d14abf15SRobert Mustacchi             {
2547d14abf15SRobert Mustacchi                 kstat_delete(pUM->kstats_rxq[idx]);
2548d14abf15SRobert Mustacchi                 pUM->kstats_rxq[idx] = NULL;
2549d14abf15SRobert Mustacchi             }
2550d14abf15SRobert Mustacchi 
2551d14abf15SRobert Mustacchi             pUM->kstats_rxq_map[idx].idx = 0;
2552d14abf15SRobert Mustacchi             pUM->kstats_rxq_map[idx].pUM = NULL;
2553d14abf15SRobert Mustacchi         }
2554d14abf15SRobert Mustacchi 
2555d14abf15SRobert Mustacchi         LM_FOREACH_TSS_IDX(pLM, idx)
2556d14abf15SRobert Mustacchi         {
2557d14abf15SRobert Mustacchi             if (pUM->kstats_txq[idx])
2558d14abf15SRobert Mustacchi             {
2559d14abf15SRobert Mustacchi                 kstat_delete(pUM->kstats_txq[idx]);
2560d14abf15SRobert Mustacchi                 pUM->kstats_txq[idx] = NULL;
2561d14abf15SRobert Mustacchi             }
2562d14abf15SRobert Mustacchi 
2563d14abf15SRobert Mustacchi             pUM->kstats_txq_map[idx].idx = 0;
2564d14abf15SRobert Mustacchi             pUM->kstats_txq_map[idx].pUM = NULL;
2565d14abf15SRobert Mustacchi         }
2566d14abf15SRobert Mustacchi     }
2567d14abf15SRobert Mustacchi }
2568d14abf15SRobert Mustacchi 
2569