1*14b24e2bSVaishali Kulkarni /*
2*14b24e2bSVaishali Kulkarni * CDDL HEADER START
3*14b24e2bSVaishali Kulkarni *
4*14b24e2bSVaishali Kulkarni * The contents of this file are subject to the terms of the
5*14b24e2bSVaishali Kulkarni * Common Development and Distribution License, v.1,  (the "License").
6*14b24e2bSVaishali Kulkarni * You may not use this file except in compliance with the License.
7*14b24e2bSVaishali Kulkarni *
8*14b24e2bSVaishali Kulkarni * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*14b24e2bSVaishali Kulkarni * or http://opensource.org/licenses/CDDL-1.0.
10*14b24e2bSVaishali Kulkarni * See the License for the specific language governing permissions
11*14b24e2bSVaishali Kulkarni * and limitations under the License.
12*14b24e2bSVaishali Kulkarni *
13*14b24e2bSVaishali Kulkarni * When distributing Covered Code, include this CDDL HEADER in each
14*14b24e2bSVaishali Kulkarni * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*14b24e2bSVaishali Kulkarni * If applicable, add the following below this CDDL HEADER, with the
16*14b24e2bSVaishali Kulkarni * fields enclosed by brackets "[]" replaced with your own identifying
17*14b24e2bSVaishali Kulkarni * information: Portions Copyright [yyyy] [name of copyright owner]
18*14b24e2bSVaishali Kulkarni *
19*14b24e2bSVaishali Kulkarni * CDDL HEADER END
20*14b24e2bSVaishali Kulkarni */
21*14b24e2bSVaishali Kulkarni 
22*14b24e2bSVaishali Kulkarni /*
23*14b24e2bSVaishali Kulkarni * Copyright 2014-2017 Cavium, Inc.
24*14b24e2bSVaishali Kulkarni * The contents of this file are subject to the terms of the Common Development
25*14b24e2bSVaishali Kulkarni * and Distribution License, v.1,  (the "License").
26*14b24e2bSVaishali Kulkarni 
27*14b24e2bSVaishali Kulkarni * You may not use this file except in compliance with the License.
28*14b24e2bSVaishali Kulkarni 
29*14b24e2bSVaishali Kulkarni * You can obtain a copy of the License at available
30*14b24e2bSVaishali Kulkarni * at http://opensource.org/licenses/CDDL-1.0
31*14b24e2bSVaishali Kulkarni 
32*14b24e2bSVaishali Kulkarni * See the License for the specific language governing permissions and
33*14b24e2bSVaishali Kulkarni * limitations under the License.
34*14b24e2bSVaishali Kulkarni */
35*14b24e2bSVaishali Kulkarni 
36*14b24e2bSVaishali Kulkarni 
37*14b24e2bSVaishali Kulkarni #include "qede.h"
38*14b24e2bSVaishali Kulkarni 
39*14b24e2bSVaishali Kulkarni typedef struct  _qede_kstat {
40*14b24e2bSVaishali Kulkarni 	kstat_named_t qede_hi;
41*14b24e2bSVaishali Kulkarni 	kstat_named_t qede_lo;
42*14b24e2bSVaishali Kulkarni 	kstat_named_t version;
43*14b24e2bSVaishali Kulkarni 	kstat_named_t versionFW;
44*14b24e2bSVaishali Kulkarni 	kstat_named_t versionMFW;
45*14b24e2bSVaishali Kulkarni 	kstat_named_t chipID;
46*14b24e2bSVaishali Kulkarni 	kstat_named_t chipName;
47*14b24e2bSVaishali Kulkarni 	kstat_named_t devBDF;
48*14b24e2bSVaishali Kulkarni 	kstat_named_t devID;
49*14b24e2bSVaishali Kulkarni 	kstat_named_t multiFunction;
50*14b24e2bSVaishali Kulkarni 	kstat_named_t multiFunctionVnics;
51*14b24e2bSVaishali Kulkarni 	kstat_named_t macAddr;
52*14b24e2bSVaishali Kulkarni 	kstat_named_t hwInitDone;
53*14b24e2bSVaishali Kulkarni 	kstat_named_t numVports;
54*14b24e2bSVaishali Kulkarni 	kstat_named_t vportID;
55*14b24e2bSVaishali Kulkarni 	kstat_named_t intrAlloc;
56*14b24e2bSVaishali Kulkarni 	kstat_named_t intrFired;
57*14b24e2bSVaishali Kulkarni 	kstat_named_t lroEnabled;
58*14b24e2bSVaishali Kulkarni 	kstat_named_t lsoEnabled;
59*14b24e2bSVaishali Kulkarni 	kstat_named_t jumboEnabled;
60*14b24e2bSVaishali Kulkarni 	kstat_named_t txTotalPkts;
61*14b24e2bSVaishali Kulkarni 	kstat_named_t txTotalBytes;
62*14b24e2bSVaishali Kulkarni 	kstat_named_t txTotalDiscards;
63*14b24e2bSVaishali Kulkarni 	kstat_named_t rxTotalPkts;
64*14b24e2bSVaishali Kulkarni 	kstat_named_t rxTotalBytes;
65*14b24e2bSVaishali Kulkarni 	kstat_named_t rxTotalDiscards;
66*14b24e2bSVaishali Kulkarni 	kstat_named_t allocbFailures;
67*14b24e2bSVaishali Kulkarni } qede_kstat_t;
68*14b24e2bSVaishali Kulkarni 
69*14b24e2bSVaishali Kulkarni #define QEDE_KSTAT_SIZE (sizeof (qede_kstat_t) / sizeof (kstat_named_t))
70*14b24e2bSVaishali Kulkarni 
71*14b24e2bSVaishali Kulkarni typedef struct _qede_kstat_link {
72*14b24e2bSVaishali Kulkarni 	kstat_named_t vportID;
73*14b24e2bSVaishali Kulkarni     	kstat_named_t uptime;
74*14b24e2bSVaishali Kulkarni     	kstat_named_t mtuL2;
75*14b24e2bSVaishali Kulkarni     	kstat_named_t speed;
76*14b24e2bSVaishali Kulkarni     	kstat_named_t link;
77*14b24e2bSVaishali Kulkarni     	kstat_named_t duplex;
78*14b24e2bSVaishali Kulkarni     	kstat_named_t pauseRx;
79*14b24e2bSVaishali Kulkarni     	kstat_named_t pauseTx;
80*14b24e2bSVaishali Kulkarni } qede_kstat_link_t;
81*14b24e2bSVaishali Kulkarni 
82*14b24e2bSVaishali Kulkarni #define QEDE_KSTAT_LINK_SIZE \
83*14b24e2bSVaishali Kulkarni 	(sizeof (qede_kstat_link_t) / sizeof (kstat_named_t))
84*14b24e2bSVaishali Kulkarni 
85*14b24e2bSVaishali Kulkarni typedef struct _qede_kstat_intr {
86*14b24e2bSVaishali Kulkarni 	kstat_named_t intrAlloc;
87*14b24e2bSVaishali Kulkarni 	kstat_named_t intrFired;
88*14b24e2bSVaishali Kulkarni     	kstat_named_t sb_00;
89*14b24e2bSVaishali Kulkarni     	kstat_named_t sb_01;
90*14b24e2bSVaishali Kulkarni     	kstat_named_t sb_02;
91*14b24e2bSVaishali Kulkarni     	kstat_named_t sb_03;
92*14b24e2bSVaishali Kulkarni     	kstat_named_t sb_04;
93*14b24e2bSVaishali Kulkarni     	kstat_named_t sb_05;
94*14b24e2bSVaishali Kulkarni     	kstat_named_t sb_06;
95*14b24e2bSVaishali Kulkarni     	kstat_named_t sb_nc_00;
96*14b24e2bSVaishali Kulkarni     	kstat_named_t sb_nc_01;
97*14b24e2bSVaishali Kulkarni 	kstat_named_t sb_nc_02;
98*14b24e2bSVaishali Kulkarni     	kstat_named_t sb_nc_03;
99*14b24e2bSVaishali Kulkarni     	kstat_named_t sb_nc_04;
100*14b24e2bSVaishali Kulkarni     	kstat_named_t sb_nc_05;
101*14b24e2bSVaishali Kulkarni     	kstat_named_t sb_nc_06;
102*14b24e2bSVaishali Kulkarni     	kstat_named_t sb_poll_00;
103*14b24e2bSVaishali Kulkarni     	kstat_named_t sb_poll_01;
104*14b24e2bSVaishali Kulkarni     	kstat_named_t sb_poll_02;
105*14b24e2bSVaishali Kulkarni     	kstat_named_t sb_poll_03;
106*14b24e2bSVaishali Kulkarni     	kstat_named_t sb_poll_04;
107*14b24e2bSVaishali Kulkarni     	kstat_named_t sb_poll_05;
108*14b24e2bSVaishali Kulkarni     	kstat_named_t sb_poll_06;
109*14b24e2bSVaishali Kulkarni     	kstat_named_t sb_poll_nc_00;
110*14b24e2bSVaishali Kulkarni     	kstat_named_t sb_poll_nc_01;
111*14b24e2bSVaishali Kulkarni     	kstat_named_t sb_poll_nc_02;
112*14b24e2bSVaishali Kulkarni     	kstat_named_t sb_poll_nc_03;
113*14b24e2bSVaishali Kulkarni     	kstat_named_t sb_poll_nc_04;
114*14b24e2bSVaishali Kulkarni     	kstat_named_t sb_poll_nc_05;
115*14b24e2bSVaishali Kulkarni     kstat_named_t sb_poll_nc_06;
116*14b24e2bSVaishali Kulkarni } qede_kstat_intr_t;
117*14b24e2bSVaishali Kulkarni 
118*14b24e2bSVaishali Kulkarni #define QEDE_KSTAT_INTR_SIZE \
119*14b24e2bSVaishali Kulkarni 	(sizeof (qede_kstat_intr_t) / sizeof (kstat_named_t))
120*14b24e2bSVaishali Kulkarni 
121*14b24e2bSVaishali Kulkarni typedef struct _qede_kstat_vport_stats {
122*14b24e2bSVaishali Kulkarni 	kstat_named_t	rxUcastBytes;
123*14b24e2bSVaishali Kulkarni 	kstat_named_t   rxMcastBytes;
124*14b24e2bSVaishali Kulkarni 	kstat_named_t   rxBcastBytes;
125*14b24e2bSVaishali Kulkarni 	kstat_named_t	rxUcastPkts;
126*14b24e2bSVaishali Kulkarni 	kstat_named_t   rxMcastPkts;
127*14b24e2bSVaishali Kulkarni 	kstat_named_t   rxBcastPkts;
128*14b24e2bSVaishali Kulkarni 	kstat_named_t   txUcastBytes;
129*14b24e2bSVaishali Kulkarni 	kstat_named_t	txMcastBytes;
130*14b24e2bSVaishali Kulkarni 	kstat_named_t	txBcastBytes;
131*14b24e2bSVaishali Kulkarni 	kstat_named_t   txUcastPkts;
132*14b24e2bSVaishali Kulkarni 	kstat_named_t	txMcastPkts;
133*14b24e2bSVaishali Kulkarni 	kstat_named_t	txBcastPkts;
134*14b24e2bSVaishali Kulkarni 	kstat_named_t	rx64bytePkts;
135*14b24e2bSVaishali Kulkarni 	kstat_named_t   rx127bytePkts;
136*14b24e2bSVaishali Kulkarni 	kstat_named_t   rx255bytePkts;
137*14b24e2bSVaishali Kulkarni 	kstat_named_t   rx511bytePkts;
138*14b24e2bSVaishali Kulkarni 	kstat_named_t   rx1023bytePkts;
139*14b24e2bSVaishali Kulkarni 	kstat_named_t   rx1518bytePkts;
140*14b24e2bSVaishali Kulkarni 	kstat_named_t   rx1522bytePkts;
141*14b24e2bSVaishali Kulkarni 	kstat_named_t   rx2047bytePkts;
142*14b24e2bSVaishali Kulkarni 	kstat_named_t   rx4095bytePkts;
143*14b24e2bSVaishali Kulkarni 	kstat_named_t   rx9216bytePkts;
144*14b24e2bSVaishali Kulkarni 	kstat_named_t   rx16383bytePkts;
145*14b24e2bSVaishali Kulkarni 	kstat_named_t   tx64bytePkts;
146*14b24e2bSVaishali Kulkarni 	kstat_named_t   tx64to127bytePkts;
147*14b24e2bSVaishali Kulkarni 	kstat_named_t   tx128to255bytePkts;
148*14b24e2bSVaishali Kulkarni 	kstat_named_t   tx256to511bytePkts;
149*14b24e2bSVaishali Kulkarni 	kstat_named_t   tx512to1023bytePkts;
150*14b24e2bSVaishali Kulkarni 	kstat_named_t   tx1024to1518bytePkts;
151*14b24e2bSVaishali Kulkarni 	kstat_named_t   tx1519to2047bytePkts;
152*14b24e2bSVaishali Kulkarni 	kstat_named_t   tx2048to4095bytePkts;
153*14b24e2bSVaishali Kulkarni 	kstat_named_t   tx4096to9216bytePkts;
154*14b24e2bSVaishali Kulkarni 	kstat_named_t   tx9217to16383bytePkts;
155*14b24e2bSVaishali Kulkarni 	kstat_named_t	rxMacCtrlFrames;
156*14b24e2bSVaishali Kulkarni 	kstat_named_t   rxPauseFrames;
157*14b24e2bSVaishali Kulkarni 	kstat_named_t   txPauseFrames;
158*14b24e2bSVaishali Kulkarni 	kstat_named_t   rxCRCerrors;
159*14b24e2bSVaishali Kulkarni 	kstat_named_t   rxAlignErrors;
160*14b24e2bSVaishali Kulkarni 	kstat_named_t   rxCarrierErrors;
161*14b24e2bSVaishali Kulkarni  	kstat_named_t	rxOversizeErrors;
162*14b24e2bSVaishali Kulkarni 	kstat_named_t   rxJabbers;
163*14b24e2bSVaishali Kulkarni 	kstat_named_t   rxUndersizePkts;
164*14b24e2bSVaishali Kulkarni 	kstat_named_t   rxFragments;
165*14b24e2bSVaishali Kulkarni 	kstat_named_t   txLpiEntryCnt;
166*14b24e2bSVaishali Kulkarni 	kstat_named_t   txTotalCollisions;
167*14b24e2bSVaishali Kulkarni 	kstat_named_t   brbTruncates;
168*14b24e2bSVaishali Kulkarni 	kstat_named_t   noBuffDiscards;
169*14b24e2bSVaishali Kulkarni 	kstat_named_t   mftagFilterDiscards;
170*14b24e2bSVaishali Kulkarni 	kstat_named_t   macFilterDiscards;
171*14b24e2bSVaishali Kulkarni 	kstat_named_t   txErrDropPkts;
172*14b24e2bSVaishali Kulkarni 	kstat_named_t   coalescedPkts;
173*14b24e2bSVaishali Kulkarni 	kstat_named_t	coalescedEvents;
174*14b24e2bSVaishali Kulkarni 	kstat_named_t   coalescedAbortsNum;
175*14b24e2bSVaishali Kulkarni 	kstat_named_t	nonCoalescedPkts;
176*14b24e2bSVaishali Kulkarni 	kstat_named_t	coalescedBytes;
177*14b24e2bSVaishali Kulkarni } qede_kstat_vport_stats_t;
178*14b24e2bSVaishali Kulkarni 
179*14b24e2bSVaishali Kulkarni #define QEDE_KSTAT_VPORT_STATS_SIZE \
180*14b24e2bSVaishali Kulkarni 	(sizeof (qede_kstat_vport_stats_t) / sizeof (kstat_named_t))
181*14b24e2bSVaishali Kulkarni 
182*14b24e2bSVaishali Kulkarni typedef struct _qede_kstat_rxq  {
183*14b24e2bSVaishali Kulkarni 	kstat_named_t rxqBdTotal;
184*14b24e2bSVaishali Kulkarni     	kstat_named_t rxqBdLeft;
185*14b24e2bSVaishali Kulkarni     	kstat_named_t rxqBdPageCnt;
186*14b24e2bSVaishali Kulkarni     	kstat_named_t rxqBdsPerPage;
187*14b24e2bSVaishali Kulkarni     	kstat_named_t rxqBdSize;
188*14b24e2bSVaishali Kulkarni     	kstat_named_t rxqBdProdIdx;
189*14b24e2bSVaishali Kulkarni     	kstat_named_t rxqBdConsIdx;
190*14b24e2bSVaishali Kulkarni     	kstat_named_t rcqBdTotal;
191*14b24e2bSVaishali Kulkarni     	kstat_named_t rcqBdLeft;
192*14b24e2bSVaishali Kulkarni     	kstat_named_t rcqBdPageCnt;
193*14b24e2bSVaishali Kulkarni     	kstat_named_t rcqBdsPerPage;
194*14b24e2bSVaishali Kulkarni 	kstat_named_t rcqBdSize;
195*14b24e2bSVaishali Kulkarni     	kstat_named_t rcqBdProdIdx;
196*14b24e2bSVaishali Kulkarni     	kstat_named_t rcqBdConsIdx;
197*14b24e2bSVaishali Kulkarni     	kstat_named_t hwRcqConIdx;
198*14b24e2bSVaishali Kulkarni     	kstat_named_t rxFreeDescs;
199*14b24e2bSVaishali Kulkarni     	kstat_named_t rxActiveDescs;
200*14b24e2bSVaishali Kulkarni     	kstat_named_t rxCopyPkts;
201*14b24e2bSVaishali Kulkarni     	kstat_named_t rxDropPkts;
202*14b24e2bSVaishali Kulkarni     	kstat_named_t rxBufUpInStack;
203*14b24e2bSVaishali Kulkarni     	kstat_named_t rxLowWater;
204*14b24e2bSVaishali Kulkarni     	kstat_named_t rxLowWaterCnt;
205*14b24e2bSVaishali Kulkarni     	kstat_named_t inPollMode;
206*14b24e2bSVaishali Kulkarni     	kstat_named_t rxPollCnt;
207*14b24e2bSVaishali Kulkarni     	kstat_named_t intrDisableCnt;
208*14b24e2bSVaishali Kulkarni     	kstat_named_t intrEnableCnt;
209*14b24e2bSVaishali Kulkarni     	kstat_named_t genNumber;
210*14b24e2bSVaishali Kulkarni     	kstat_named_t rxRegPkts;
211*14b24e2bSVaishali Kulkarni     	kstat_named_t rxJumboPkts;
212*14b24e2bSVaishali Kulkarni     	kstat_named_t rxLroPkts;
213*14b24e2bSVaishali Kulkarni     	kstat_named_t rxRingTotalPkts;
214*14b24e2bSVaishali Kulkarni     	kstat_named_t rxRingTotalBytes;
215*14b24e2bSVaishali Kulkarni } qede_kstat_rxq_t;
216*14b24e2bSVaishali Kulkarni 
217*14b24e2bSVaishali Kulkarni #define QEDE_KSTAT_RXQ_SIZE \
218*14b24e2bSVaishali Kulkarni 	(sizeof (qede_kstat_rxq_t) / sizeof (kstat_named_t))
219*14b24e2bSVaishali Kulkarni 
220*14b24e2bSVaishali Kulkarni typedef struct _qede_kstat_txq {
221*14b24e2bSVaishali Kulkarni 	kstat_named_t txBdTotal;
222*14b24e2bSVaishali Kulkarni     	kstat_named_t txBdLeft;
223*14b24e2bSVaishali Kulkarni     	kstat_named_t txBdPageCnt;
224*14b24e2bSVaishali Kulkarni     	kstat_named_t txBdsPerPage;
225*14b24e2bSVaishali Kulkarni     	kstat_named_t txBdSize;
226*14b24e2bSVaishali Kulkarni     	kstat_named_t hwTxqConIdx;
227*14b24e2bSVaishali Kulkarni     	kstat_named_t txBdProdIdx;
228*14b24e2bSVaishali Kulkarni     	kstat_named_t txBdConsIdx;
229*14b24e2bSVaishali Kulkarni     	kstat_named_t txLowWater;
230*14b24e2bSVaishali Kulkarni     	kstat_named_t txRingPause;
231*14b24e2bSVaishali Kulkarni     	kstat_named_t txDropPkts;
232*14b24e2bSVaishali Kulkarni     	kstat_named_t txCopyPkts;
233*14b24e2bSVaishali Kulkarni     	kstat_named_t txBind;
234*14b24e2bSVaishali Kulkarni     	kstat_named_t txBindFail;
235*14b24e2bSVaishali Kulkarni     	kstat_named_t txPremapped;
236*14b24e2bSVaishali Kulkarni     	kstat_named_t txPremappedFail;
237*14b24e2bSVaishali Kulkarni     	kstat_named_t txTooManyCookies;
238*14b24e2bSVaishali Kulkarni     	kstat_named_t txPullupPkts;
239*14b24e2bSVaishali Kulkarni     	kstat_named_t txLsoPkts;
240*14b24e2bSVaishali Kulkarni     	kstat_named_t txTooManyMblks;
241*14b24e2bSVaishali Kulkarni     	kstat_named_t txMappedPkts;
242*14b24e2bSVaishali Kulkarni     	kstat_named_t txJumboPkts;
243*14b24e2bSVaishali Kulkarni     	kstat_named_t txRingTotalPkts;
244*14b24e2bSVaishali Kulkarni     	kstat_named_t txRingTotalBytes;
245*14b24e2bSVaishali Kulkarni } qede_kstat_txq_t;
246*14b24e2bSVaishali Kulkarni 
247*14b24e2bSVaishali Kulkarni #define  QEDE_KSTAT_TXQ_SIZE \
248*14b24e2bSVaishali Kulkarni 	(sizeof (qede_kstat_txq_t) / sizeof (kstat_named_t))
249*14b24e2bSVaishali Kulkarni 
250*14b24e2bSVaishali Kulkarni 
251*14b24e2bSVaishali Kulkarni static int
qede_kstat_update(kstat_t * kstats,int rw)252*14b24e2bSVaishali Kulkarni qede_kstat_update(kstat_t *kstats,
253*14b24e2bSVaishali Kulkarni     int rw)
254*14b24e2bSVaishali Kulkarni {
255*14b24e2bSVaishali Kulkarni 
256*14b24e2bSVaishali Kulkarni 	qede_kstat_t *pStats = (qede_kstat_t *)kstats->ks_data;
257*14b24e2bSVaishali Kulkarni 	qede_t *qede = (qede_t *)kstats->ks_private;
258*14b24e2bSVaishali Kulkarni 	struct ecore_dev *edev = &qede->edev;
259*14b24e2bSVaishali Kulkarni         qede_fastpath_t *fp = &qede->fp_array[0];
260*14b24e2bSVaishali Kulkarni 	qede_rx_ring_t *rx_ring;
261*14b24e2bSVaishali Kulkarni 	qede_tx_ring_t *tx_ring;
262*14b24e2bSVaishali Kulkarni 	int i, j;
263*14b24e2bSVaishali Kulkarni 	char buf[17];
264*14b24e2bSVaishali Kulkarni 
265*14b24e2bSVaishali Kulkarni 	if (rw == KSTAT_WRITE) {
266*14b24e2bSVaishali Kulkarni         	return EACCES;
267*14b24e2bSVaishali Kulkarni 	}
268*14b24e2bSVaishali Kulkarni 
269*14b24e2bSVaishali Kulkarni 	mutex_enter(&qede->kstat_lock);
270*14b24e2bSVaishali Kulkarni 
271*14b24e2bSVaishali Kulkarni 	snprintf(buf, sizeof (buf), "%16p", (void *)qede);
272*14b24e2bSVaishali Kulkarni 	strncpy(pStats->qede_hi.value.c, &buf[0], 8);
273*14b24e2bSVaishali Kulkarni 	pStats->qede_hi.value.c[8] = 0;
274*14b24e2bSVaishali Kulkarni 	strncpy(pStats->qede_lo.value.c, &buf[8], 8);
275*14b24e2bSVaishali Kulkarni 	pStats->qede_lo.value.c[8] = 0;
276*14b24e2bSVaishali Kulkarni 
277*14b24e2bSVaishali Kulkarni 
278*14b24e2bSVaishali Kulkarni 	strncpy(pStats->version.value.c,
279*14b24e2bSVaishali Kulkarni 	    qede->version,   sizeof (pStats->version.value.c));
280*14b24e2bSVaishali Kulkarni 	strncpy(pStats->versionFW.value.c,
281*14b24e2bSVaishali Kulkarni 	    qede->versionFW, sizeof (pStats->versionFW.value.c));
282*14b24e2bSVaishali Kulkarni     	strncpy(pStats->versionMFW.value.c,
283*14b24e2bSVaishali Kulkarni 	    qede->versionMFW, sizeof (pStats->versionMFW.value.c));
284*14b24e2bSVaishali Kulkarni 
285*14b24e2bSVaishali Kulkarni 	strncpy(pStats->chipName.value.c,
286*14b24e2bSVaishali Kulkarni 	    qede->chip_name, sizeof (pStats->chipName.value.c));
287*14b24e2bSVaishali Kulkarni 	strncpy(pStats->chipID.value.c,
288*14b24e2bSVaishali Kulkarni 	    qede->chipID,   sizeof (pStats->chipID.value.c));
289*14b24e2bSVaishali Kulkarni 
290*14b24e2bSVaishali Kulkarni 	strncpy(pStats->devBDF.value.c,
291*14b24e2bSVaishali Kulkarni 	    qede->bus_dev_func,  sizeof (pStats->devBDF.value.c));
292*14b24e2bSVaishali Kulkarni 	strncpy(pStats->devID.value.c,
293*14b24e2bSVaishali Kulkarni 	    qede->vendor_device, sizeof (pStats->devID.value.c));
294*14b24e2bSVaishali Kulkarni 
295*14b24e2bSVaishali Kulkarni 	strncpy(pStats->multiFunction.value.c,
296*14b24e2bSVaishali Kulkarni 	    ((edev->mf_mode == ECORE_MF_DEFAULT)    ? "DEFAULT"  :
297*14b24e2bSVaishali Kulkarni 	    (edev->mf_mode == ECORE_MF_OVLAN)   ? "MF-OVLAN" : "Unknown"),
298*14b24e2bSVaishali Kulkarni 	    sizeof (pStats->multiFunction.value.c));
299*14b24e2bSVaishali Kulkarni 
300*14b24e2bSVaishali Kulkarni 	pStats->multiFunctionVnics.value.ui64 = 0;
301*14b24e2bSVaishali Kulkarni 
302*14b24e2bSVaishali Kulkarni 	snprintf(pStats->macAddr.value.c, 16, "%02x%02x%02x%02x%02x%02x",
303*14b24e2bSVaishali Kulkarni 	    qede->ether_addr[0],qede->ether_addr[1],
304*14b24e2bSVaishali Kulkarni 	    qede->ether_addr[2], qede->ether_addr[3],
305*14b24e2bSVaishali Kulkarni 	    qede->ether_addr[4],qede->ether_addr[5]);
306*14b24e2bSVaishali Kulkarni 
307*14b24e2bSVaishali Kulkarni 
308*14b24e2bSVaishali Kulkarni 	pStats->hwInitDone.value.ui64 =
309*14b24e2bSVaishali Kulkarni 	    (qede->attach_resources & QEDE_ECORE_HW_INIT)? 1 :  0;
310*14b24e2bSVaishali Kulkarni 	  /*pStats->numVports.value.ui64 =
311*14b24e2bSVaishali Kulkarni 	    p_hwfn->hw_info.resc_num[ECORE_VPORT]; */
312*14b24e2bSVaishali Kulkarni 	pStats->numVports.value.ui64 =  edev->num_hwfns;
313*14b24e2bSVaishali Kulkarni 	pStats->vportID.value.ui64 = qede->vport_params[0].vport_id;
314*14b24e2bSVaishali Kulkarni 
315*14b24e2bSVaishali Kulkarni 
316*14b24e2bSVaishali Kulkarni 	strncpy(pStats->intrAlloc.value.c,
317*14b24e2bSVaishali Kulkarni 	    qede->intrAlloc, sizeof (pStats->intrAlloc.value.c));
318*14b24e2bSVaishali Kulkarni 
319*14b24e2bSVaishali Kulkarni 	pStats->intrFired.value.ui64 = qede->intrFired;
320*14b24e2bSVaishali Kulkarni 	pStats->lroEnabled.value.ui64 = qede->lro_enable;
321*14b24e2bSVaishali Kulkarni 	pStats->lsoEnabled.value.ui64 = qede->lso_enable;
322*14b24e2bSVaishali Kulkarni 	pStats->jumboEnabled.value.ui64 = qede->jumbo_enable;
323*14b24e2bSVaishali Kulkarni 
324*14b24e2bSVaishali Kulkarni 	qede->rxTotalPkts = 0;
325*14b24e2bSVaishali Kulkarni 	qede->rxTotalBytes = 0;
326*14b24e2bSVaishali Kulkarni 	qede->rxTotalDiscards = 0;
327*14b24e2bSVaishali Kulkarni 	qede->txTotalPkts = 0;
328*14b24e2bSVaishali Kulkarni 	qede->txTotalBytes = 0;
329*14b24e2bSVaishali Kulkarni 	qede->txTotalDiscards = 0;
330*14b24e2bSVaishali Kulkarni 	qede->allocbFailures = 0;
331*14b24e2bSVaishali Kulkarni 	for (i = 0; i < qede->num_fp; i++, fp++) {
332*14b24e2bSVaishali Kulkarni 		rx_ring = fp->rx_ring;
333*14b24e2bSVaishali Kulkarni 		qede->rxTotalPkts += rx_ring->rx_pkt_cnt;
334*14b24e2bSVaishali Kulkarni 		qede->rxTotalBytes += rx_ring->rx_byte_cnt;
335*14b24e2bSVaishali Kulkarni 		qede->rxTotalDiscards += rx_ring->rx_drop_cnt;
336*14b24e2bSVaishali Kulkarni 		for (j = 0; j < qede->num_tc; j++) {
337*14b24e2bSVaishali Kulkarni 			tx_ring = fp->tx_ring[j];
338*14b24e2bSVaishali Kulkarni 			qede->txTotalPkts += tx_ring->tx_pkt_count;
339*14b24e2bSVaishali Kulkarni 			qede->txTotalBytes += tx_ring->tx_byte_count;
340*14b24e2bSVaishali Kulkarni 			qede->txTotalDiscards += tx_ring->tx_pkt_dropped;
341*14b24e2bSVaishali Kulkarni 		}
342*14b24e2bSVaishali Kulkarni 	}
343*14b24e2bSVaishali Kulkarni 	pStats->rxTotalPkts.value.ui64 = qede->rxTotalPkts;
344*14b24e2bSVaishali Kulkarni 	pStats->rxTotalBytes.value.ui64 = qede->rxTotalBytes;
345*14b24e2bSVaishali Kulkarni 	pStats->rxTotalDiscards.value.ui64 = qede->rxTotalDiscards;
346*14b24e2bSVaishali Kulkarni 	pStats->txTotalPkts.value.ui64 = qede->txTotalPkts;
347*14b24e2bSVaishali Kulkarni 	pStats->txTotalBytes.value.ui64 = qede->txTotalBytes;
348*14b24e2bSVaishali Kulkarni 	pStats->txTotalDiscards.value.ui64 = qede->txTotalDiscards;
349*14b24e2bSVaishali Kulkarni 	pStats->allocbFailures.value.ui64 = qede->allocbFailures;
350*14b24e2bSVaishali Kulkarni 
351*14b24e2bSVaishali Kulkarni        mutex_exit(&qede->kstat_lock);
352*14b24e2bSVaishali Kulkarni        return (0);
353*14b24e2bSVaishali Kulkarni 
354*14b24e2bSVaishali Kulkarni }
355*14b24e2bSVaishali Kulkarni 
356*14b24e2bSVaishali Kulkarni static int
qede_kstat_link_update(kstat_t * kstats,int rw)357*14b24e2bSVaishali Kulkarni qede_kstat_link_update(kstat_t *kstats, int rw)
358*14b24e2bSVaishali Kulkarni {
359*14b24e2bSVaishali Kulkarni 	qede_kstat_link_t *pStats = (qede_kstat_link_t *)kstats->ks_data;
360*14b24e2bSVaishali Kulkarni 	qede_t *qede = (qede_t *)kstats->ks_private;
361*14b24e2bSVaishali Kulkarni 	struct ecore_dev *edev = &qede->edev;
362*14b24e2bSVaishali Kulkarni 
363*14b24e2bSVaishali Kulkarni 	if (rw == KSTAT_WRITE) {
364*14b24e2bSVaishali Kulkarni 		return EACCES;
365*14b24e2bSVaishali Kulkarni 	}
366*14b24e2bSVaishali Kulkarni 	mutex_enter(&qede->kstat_lock);
367*14b24e2bSVaishali Kulkarni 
368*14b24e2bSVaishali Kulkarni 	pStats->vportID.value.ui64 = qede->vport_params[0].vport_id;
369*14b24e2bSVaishali Kulkarni 	pStats->uptime.value.ui64  = (qede->props.link_speed) ?
370*14b24e2bSVaishali Kulkarni                                      (ddi_get_time() - qede->props.uptime) : 0;
371*14b24e2bSVaishali Kulkarni 	pStats->mtuL2.value.ui64   = qede->mtu;
372*14b24e2bSVaishali Kulkarni 	pStats->speed.value.ui64   = qede->props.link_speed;
373*14b24e2bSVaishali Kulkarni 	pStats->link.value.ui64    = qede->params.link_state;
374*14b24e2bSVaishali Kulkarni 	pStats->duplex.value.ui64  = qede->props.link_duplex;
375*14b24e2bSVaishali Kulkarni 	pStats->pauseRx.value.ui64 = qede->props.rx_pause;
376*14b24e2bSVaishali Kulkarni 	pStats->pauseTx.value.ui64 = qede->props.tx_pause;
377*14b24e2bSVaishali Kulkarni 
378*14b24e2bSVaishali Kulkarni 	mutex_exit(&qede->kstat_lock);
379*14b24e2bSVaishali Kulkarni 	return (0);
380*14b24e2bSVaishali Kulkarni }
381*14b24e2bSVaishali Kulkarni 
382*14b24e2bSVaishali Kulkarni static int
qede_kstat_intr_update(kstat_t * kstats,int rw)383*14b24e2bSVaishali Kulkarni qede_kstat_intr_update(kstat_t *kstats, int rw)
384*14b24e2bSVaishali Kulkarni {
385*14b24e2bSVaishali Kulkarni 
386*14b24e2bSVaishali Kulkarni 	qede_kstat_intr_t * pStats = (qede_kstat_intr_t *)kstats->ks_data;
387*14b24e2bSVaishali Kulkarni 	qede_t *qede = (qede_t *)kstats->ks_private;
388*14b24e2bSVaishali Kulkarni 	struct ecore_dev *edev = &qede->edev;
389*14b24e2bSVaishali Kulkarni 
390*14b24e2bSVaishali Kulkarni 	if (rw == KSTAT_WRITE) {
391*14b24e2bSVaishali Kulkarni 		return EACCES;
392*14b24e2bSVaishali Kulkarni 	}
393*14b24e2bSVaishali Kulkarni 
394*14b24e2bSVaishali Kulkarni 	mutex_enter(&qede->kstat_lock);
395*14b24e2bSVaishali Kulkarni 
396*14b24e2bSVaishali Kulkarni 
397*14b24e2bSVaishali Kulkarni 	strncpy(pStats->intrAlloc.value.c,
398*14b24e2bSVaishali Kulkarni 	    qede->intrAlloc, sizeof (pStats->intrAlloc.value.c));
399*14b24e2bSVaishali Kulkarni 
400*14b24e2bSVaishali Kulkarni 	pStats->intrFired.value.ui64      = qede->intrFired;
401*14b24e2bSVaishali Kulkarni 
402*14b24e2bSVaishali Kulkarni 	pStats->sb_00.value.ui64          = qede->intrSbCnt[0];
403*14b24e2bSVaishali Kulkarni 	pStats->sb_01.value.ui64          = qede->intrSbCnt[1];
404*14b24e2bSVaishali Kulkarni 	pStats->sb_02.value.ui64          = qede->intrSbCnt[2];
405*14b24e2bSVaishali Kulkarni 	pStats->sb_03.value.ui64          = qede->intrSbCnt[3];
406*14b24e2bSVaishali Kulkarni 	pStats->sb_04.value.ui64          = qede->intrSbCnt[4];
407*14b24e2bSVaishali Kulkarni 	pStats->sb_05.value.ui64          = qede->intrSbCnt[5];
408*14b24e2bSVaishali Kulkarni 	pStats->sb_06.value.ui64          = qede->intrSbCnt[6];
409*14b24e2bSVaishali Kulkarni 
410*14b24e2bSVaishali Kulkarni 	pStats->sb_nc_00.value.ui64       = qede->intrSbNoChangeCnt[0];
411*14b24e2bSVaishali Kulkarni 	pStats->sb_nc_01.value.ui64       = qede->intrSbNoChangeCnt[1];
412*14b24e2bSVaishali Kulkarni 	pStats->sb_nc_02.value.ui64       = qede->intrSbNoChangeCnt[2];
413*14b24e2bSVaishali Kulkarni 	pStats->sb_nc_03.value.ui64       = qede->intrSbNoChangeCnt[3];
414*14b24e2bSVaishali Kulkarni 	pStats->sb_nc_04.value.ui64       = qede->intrSbNoChangeCnt[4];
415*14b24e2bSVaishali Kulkarni 	pStats->sb_nc_05.value.ui64       = qede->intrSbNoChangeCnt[5];
416*14b24e2bSVaishali Kulkarni 	pStats->sb_nc_06.value.ui64       = qede->intrSbNoChangeCnt[6];
417*14b24e2bSVaishali Kulkarni 
418*14b24e2bSVaishali Kulkarni 
419*14b24e2bSVaishali Kulkarni 	pStats->sb_poll_00.value.ui64     = qede->intrSbPollCnt[0];
420*14b24e2bSVaishali Kulkarni 	pStats->sb_poll_01.value.ui64     = qede->intrSbPollCnt[1];
421*14b24e2bSVaishali Kulkarni 	pStats->sb_poll_02.value.ui64     = qede->intrSbPollCnt[2];
422*14b24e2bSVaishali Kulkarni 	pStats->sb_poll_03.value.ui64     = qede->intrSbPollCnt[3];
423*14b24e2bSVaishali Kulkarni 	pStats->sb_poll_04.value.ui64     = qede->intrSbPollCnt[4];
424*14b24e2bSVaishali Kulkarni 	pStats->sb_poll_05.value.ui64     = qede->intrSbPollCnt[5];
425*14b24e2bSVaishali Kulkarni 	pStats->sb_poll_06.value.ui64     = qede->intrSbPollCnt[6];
426*14b24e2bSVaishali Kulkarni 
427*14b24e2bSVaishali Kulkarni 	pStats->sb_poll_nc_00.value.ui64  = qede->intrSbPollNoChangeCnt[0];
428*14b24e2bSVaishali Kulkarni 	pStats->sb_poll_nc_01.value.ui64  = qede->intrSbPollNoChangeCnt[1];
429*14b24e2bSVaishali Kulkarni 	pStats->sb_poll_nc_02.value.ui64  = qede->intrSbPollNoChangeCnt[2];
430*14b24e2bSVaishali Kulkarni 	pStats->sb_poll_nc_03.value.ui64  = qede->intrSbPollNoChangeCnt[3];
431*14b24e2bSVaishali Kulkarni 	pStats->sb_poll_nc_04.value.ui64  = qede->intrSbPollNoChangeCnt[4];
432*14b24e2bSVaishali Kulkarni 	pStats->sb_poll_nc_05.value.ui64  = qede->intrSbPollNoChangeCnt[5];
433*14b24e2bSVaishali Kulkarni 	pStats->sb_poll_nc_06.value.ui64  = qede->intrSbPollNoChangeCnt[6];
434*14b24e2bSVaishali Kulkarni 
435*14b24e2bSVaishali Kulkarni 
436*14b24e2bSVaishali Kulkarni     mutex_exit(&qede->kstat_lock);
437*14b24e2bSVaishali Kulkarni 
438*14b24e2bSVaishali Kulkarni     return (0);
439*14b24e2bSVaishali Kulkarni }
440*14b24e2bSVaishali Kulkarni 
441*14b24e2bSVaishali Kulkarni static int
qede_kstat_vport_stats_update(kstat_t * kstats,int rw)442*14b24e2bSVaishali Kulkarni qede_kstat_vport_stats_update(kstat_t *kstats, int rw)
443*14b24e2bSVaishali Kulkarni {
444*14b24e2bSVaishali Kulkarni 
445*14b24e2bSVaishali Kulkarni 	qede_kstat_vport_stats_t *pStats =
446*14b24e2bSVaishali Kulkarni 	    (qede_kstat_vport_stats_t *)kstats->ks_data;
447*14b24e2bSVaishali Kulkarni 	qede_t *qede = (qede_t *)kstats->ks_private;
448*14b24e2bSVaishali Kulkarni 	struct ecore_dev * edev = &qede->edev;
449*14b24e2bSVaishali Kulkarni 	struct ecore_eth_stats vstats;
450*14b24e2bSVaishali Kulkarni 
451*14b24e2bSVaishali Kulkarni 
452*14b24e2bSVaishali Kulkarni 	if (rw == KSTAT_WRITE) {
453*14b24e2bSVaishali Kulkarni 		return EACCES;
454*14b24e2bSVaishali Kulkarni 	}
455*14b24e2bSVaishali Kulkarni 
456*14b24e2bSVaishali Kulkarni 
457*14b24e2bSVaishali Kulkarni 	mutex_enter(&qede->kstat_lock);
458*14b24e2bSVaishali Kulkarni 
459*14b24e2bSVaishali Kulkarni 	memset(&vstats, 0, sizeof (struct ecore_eth_stats));
460*14b24e2bSVaishali Kulkarni 	if(qede->qede_state == QEDE_STATE_STARTED) {
461*14b24e2bSVaishali Kulkarni 		ecore_get_vport_stats(edev, &vstats);
462*14b24e2bSVaishali Kulkarni 		memcpy(&qede->save_stats, &vstats,
463*14b24e2bSVaishali Kulkarni 		    sizeof (struct ecore_eth_stats));
464*14b24e2bSVaishali Kulkarni 	}
465*14b24e2bSVaishali Kulkarni 
466*14b24e2bSVaishali Kulkarni 	pStats->rxUcastBytes.value.ui64 = vstats.common.rx_ucast_bytes;
467*14b24e2bSVaishali Kulkarni 	pStats->rxMcastBytes.value.ui64 = vstats.common.rx_mcast_bytes;
468*14b24e2bSVaishali Kulkarni 	pStats->rxBcastBytes.value.ui64 = vstats.common.rx_bcast_bytes;
469*14b24e2bSVaishali Kulkarni 	pStats->rxUcastPkts.value.ui64 = vstats.common.rx_ucast_pkts;
470*14b24e2bSVaishali Kulkarni 	pStats->rxMcastPkts.value.ui64 = vstats.common.rx_mcast_pkts;
471*14b24e2bSVaishali Kulkarni 	pStats->rxBcastPkts.value.ui64 = vstats.common.rx_bcast_pkts;
472*14b24e2bSVaishali Kulkarni 	pStats->txUcastBytes.value.ui64 = vstats.common.tx_ucast_bytes;
473*14b24e2bSVaishali Kulkarni 	pStats->txMcastBytes.value.ui64 = vstats.common.tx_mcast_bytes;
474*14b24e2bSVaishali Kulkarni 	pStats->txBcastBytes.value.ui64 = vstats.common.tx_bcast_bytes;
475*14b24e2bSVaishali Kulkarni 	pStats->txUcastPkts.value.ui64 = vstats.common.tx_ucast_pkts;
476*14b24e2bSVaishali Kulkarni 	pStats->txMcastPkts.value.ui64 = vstats.common.tx_mcast_pkts;
477*14b24e2bSVaishali Kulkarni 	pStats->txBcastPkts.value.ui64 = vstats.common.tx_bcast_pkts;
478*14b24e2bSVaishali Kulkarni 	pStats->rx64bytePkts.value.ui64 = vstats.common.rx_64_byte_packets;
479*14b24e2bSVaishali Kulkarni 	pStats->rx127bytePkts.value.ui64 =
480*14b24e2bSVaishali Kulkarni 	    vstats.common.rx_65_to_127_byte_packets;
481*14b24e2bSVaishali Kulkarni 	pStats->rx255bytePkts.value.ui64 =
482*14b24e2bSVaishali Kulkarni 	    vstats.common.rx_128_to_255_byte_packets;
483*14b24e2bSVaishali Kulkarni 	pStats->rx511bytePkts.value.ui64 =
484*14b24e2bSVaishali Kulkarni 	    vstats.common.rx_256_to_511_byte_packets;
485*14b24e2bSVaishali Kulkarni 	pStats->rx1023bytePkts.value.ui64 =
486*14b24e2bSVaishali Kulkarni 	    vstats.common.rx_512_to_1023_byte_packets;
487*14b24e2bSVaishali Kulkarni 	pStats->rx1518bytePkts.value.ui64 =
488*14b24e2bSVaishali Kulkarni 	    vstats.common.rx_1024_to_1518_byte_packets;
489*14b24e2bSVaishali Kulkarni 	pStats->rx1522bytePkts.value.ui64 =
490*14b24e2bSVaishali Kulkarni 	    vstats.bb.rx_1519_to_1522_byte_packets;
491*14b24e2bSVaishali Kulkarni 	pStats->rx2047bytePkts.value.ui64 =
492*14b24e2bSVaishali Kulkarni 	    vstats.bb.rx_1519_to_2047_byte_packets;
493*14b24e2bSVaishali Kulkarni 	pStats->rx4095bytePkts.value.ui64 =
494*14b24e2bSVaishali Kulkarni 	    vstats.bb.rx_2048_to_4095_byte_packets;
495*14b24e2bSVaishali Kulkarni 	pStats->rx9216bytePkts.value.ui64 =
496*14b24e2bSVaishali Kulkarni 	    vstats.bb.rx_4096_to_9216_byte_packets;
497*14b24e2bSVaishali Kulkarni 	pStats->rx16383bytePkts.value.ui64 =
498*14b24e2bSVaishali Kulkarni 	    vstats.bb.rx_9217_to_16383_byte_packets;
499*14b24e2bSVaishali Kulkarni 	pStats->tx64bytePkts.value.ui64 =
500*14b24e2bSVaishali Kulkarni 	    vstats.common.tx_64_byte_packets;
501*14b24e2bSVaishali Kulkarni 	pStats->tx64to127bytePkts.value.ui64 =
502*14b24e2bSVaishali Kulkarni 	    vstats.common.tx_65_to_127_byte_packets;
503*14b24e2bSVaishali Kulkarni 	pStats->tx128to255bytePkts.value.ui64 =
504*14b24e2bSVaishali Kulkarni 	    vstats.common.tx_128_to_255_byte_packets;
505*14b24e2bSVaishali Kulkarni 	pStats->tx256to511bytePkts.value.ui64 =
506*14b24e2bSVaishali Kulkarni 	    vstats.common.tx_256_to_511_byte_packets;
507*14b24e2bSVaishali Kulkarni 	pStats->tx512to1023bytePkts.value.ui64 =
508*14b24e2bSVaishali Kulkarni 	    vstats.common.tx_512_to_1023_byte_packets;
509*14b24e2bSVaishali Kulkarni 	pStats->tx1024to1518bytePkts.value.ui64 =
510*14b24e2bSVaishali Kulkarni 	    vstats.common.tx_1024_to_1518_byte_packets;
511*14b24e2bSVaishali Kulkarni 	pStats->tx1519to2047bytePkts.value.ui64 =
512*14b24e2bSVaishali Kulkarni 	    vstats.bb.tx_1519_to_2047_byte_packets;
513*14b24e2bSVaishali Kulkarni 	pStats->tx2048to4095bytePkts.value.ui64 =
514*14b24e2bSVaishali Kulkarni 	    vstats.bb.tx_2048_to_4095_byte_packets;
515*14b24e2bSVaishali Kulkarni 	pStats->tx4096to9216bytePkts.value.ui64 =
516*14b24e2bSVaishali Kulkarni 	    vstats.bb.tx_4096_to_9216_byte_packets;
517*14b24e2bSVaishali Kulkarni 	pStats->tx9217to16383bytePkts.value.ui64 =
518*14b24e2bSVaishali Kulkarni 	    vstats.bb.tx_9217_to_16383_byte_packets;
519*14b24e2bSVaishali Kulkarni 	pStats->rxMacCtrlFrames.value.ui64 =
520*14b24e2bSVaishali Kulkarni 	    vstats.common.rx_mac_crtl_frames;
521*14b24e2bSVaishali Kulkarni 	pStats->rxPauseFrames.value.ui64 =
522*14b24e2bSVaishali Kulkarni 	    vstats.common.rx_pause_frames;
523*14b24e2bSVaishali Kulkarni 	pStats->txPauseFrames.value.ui64 =
524*14b24e2bSVaishali Kulkarni 	    vstats.common.tx_pause_frames;
525*14b24e2bSVaishali Kulkarni 	pStats->rxCRCerrors.value.ui64 =
526*14b24e2bSVaishali Kulkarni 	    vstats.common.rx_crc_errors;
527*14b24e2bSVaishali Kulkarni 	pStats->rxAlignErrors.value.ui64 =
528*14b24e2bSVaishali Kulkarni 	    vstats.common.rx_align_errors;
529*14b24e2bSVaishali Kulkarni 	pStats->rxCarrierErrors.value.ui64 =
530*14b24e2bSVaishali Kulkarni 	    vstats.common.rx_carrier_errors;
531*14b24e2bSVaishali Kulkarni 	pStats->rxOversizeErrors.value.ui64 =
532*14b24e2bSVaishali Kulkarni 	    vstats.common.rx_oversize_packets;
533*14b24e2bSVaishali Kulkarni 	pStats->rxJabbers.value.ui64 =
534*14b24e2bSVaishali Kulkarni 	    vstats.common.rx_jabbers;
535*14b24e2bSVaishali Kulkarni 	pStats->rxUndersizePkts.value.ui64 =
536*14b24e2bSVaishali Kulkarni 	    vstats.common.rx_undersize_packets;
537*14b24e2bSVaishali Kulkarni 	pStats->rxFragments.value.ui64 =
538*14b24e2bSVaishali Kulkarni 	    vstats.common.rx_fragments;
539*14b24e2bSVaishali Kulkarni 	pStats->txLpiEntryCnt.value.ui64 =
540*14b24e2bSVaishali Kulkarni 	    vstats.bb.tx_lpi_entry_count;
541*14b24e2bSVaishali Kulkarni 	pStats->txTotalCollisions.value.ui64 =
542*14b24e2bSVaishali Kulkarni 	    vstats.bb.tx_total_collisions;
543*14b24e2bSVaishali Kulkarni 	pStats->brbTruncates.value.ui64 =
544*14b24e2bSVaishali Kulkarni 	    vstats.common.brb_truncates;
545*14b24e2bSVaishali Kulkarni 	pStats->noBuffDiscards.value.ui64 =
546*14b24e2bSVaishali Kulkarni 	    vstats.common.no_buff_discards;
547*14b24e2bSVaishali Kulkarni 	pStats->mftagFilterDiscards.value.ui64 =
548*14b24e2bSVaishali Kulkarni 	    vstats.common.mftag_filter_discards;
549*14b24e2bSVaishali Kulkarni 	pStats->macFilterDiscards.value.ui64 =
550*14b24e2bSVaishali Kulkarni 	    vstats.common.mac_filter_discards;
551*14b24e2bSVaishali Kulkarni 	pStats->txErrDropPkts.value.ui64 =
552*14b24e2bSVaishali Kulkarni 	    vstats.common.tx_err_drop_pkts;
553*14b24e2bSVaishali Kulkarni 	pStats->coalescedPkts.value.ui64 =
554*14b24e2bSVaishali Kulkarni 	    vstats.common.tpa_coalesced_pkts;
555*14b24e2bSVaishali Kulkarni 	pStats->coalescedEvents.value.ui64 =
556*14b24e2bSVaishali Kulkarni 	    vstats.common.tpa_coalesced_events;
557*14b24e2bSVaishali Kulkarni 	pStats->coalescedAbortsNum.value.ui64 =
558*14b24e2bSVaishali Kulkarni 	    vstats.common.tpa_aborts_num;
559*14b24e2bSVaishali Kulkarni 	pStats->nonCoalescedPkts.value.ui64 =
560*14b24e2bSVaishali Kulkarni 	    vstats.common.tpa_not_coalesced_pkts;
561*14b24e2bSVaishali Kulkarni 	pStats->coalescedBytes.value.ui64 =
562*14b24e2bSVaishali Kulkarni 	    vstats.common.tpa_coalesced_bytes;
563*14b24e2bSVaishali Kulkarni 
564*14b24e2bSVaishali Kulkarni 	mutex_exit(&qede->kstat_lock);
565*14b24e2bSVaishali Kulkarni 
566*14b24e2bSVaishali Kulkarni 	return (0);
567*14b24e2bSVaishali Kulkarni }
568*14b24e2bSVaishali Kulkarni 
569*14b24e2bSVaishali Kulkarni static int
qede_kstat_rxq_update(kstat_t * kstats,int rw)570*14b24e2bSVaishali Kulkarni qede_kstat_rxq_update(kstat_t *kstats, int rw)
571*14b24e2bSVaishali Kulkarni {
572*14b24e2bSVaishali Kulkarni 
573*14b24e2bSVaishali Kulkarni 	qede_kstat_rxq_t *pStats = (qede_kstat_rxq_t *)kstats->ks_data;
574*14b24e2bSVaishali Kulkarni 	KstatRingMap *pMap   = (KstatRingMap *)kstats->ks_private;
575*14b24e2bSVaishali Kulkarni 	qede_t *qede    = (qede_t *)pMap->qede;
576*14b24e2bSVaishali Kulkarni 	int idx    = pMap->idx;
577*14b24e2bSVaishali Kulkarni 	struct ecore_dev *edev = &qede->edev;
578*14b24e2bSVaishali Kulkarni 	qede_rx_ring_t *rx_ring = &qede->rx_array[idx];
579*14b24e2bSVaishali Kulkarni 
580*14b24e2bSVaishali Kulkarni 
581*14b24e2bSVaishali Kulkarni 	if (rw == KSTAT_WRITE) {
582*14b24e2bSVaishali Kulkarni 		return EACCES;
583*14b24e2bSVaishali Kulkarni 	}
584*14b24e2bSVaishali Kulkarni 
585*14b24e2bSVaishali Kulkarni 
586*14b24e2bSVaishali Kulkarni 	mutex_enter(&qede->kstat_lock);
587*14b24e2bSVaishali Kulkarni 
588*14b24e2bSVaishali Kulkarni 	pStats->rxqBdTotal.value.ui64     = qede->rx_ring_size;
589*14b24e2bSVaishali Kulkarni 	pStats->rcqBdTotal.value.ui64  = qede->rx_ring_size;
590*14b24e2bSVaishali Kulkarni 	pStats->rxLowWater.value.ui64     = rx_ring->rx_low_buffer_threshold;
591*14b24e2bSVaishali Kulkarni 
592*14b24e2bSVaishali Kulkarni 	if(qede->qede_state == QEDE_STATE_STARTED) {
593*14b24e2bSVaishali Kulkarni 
594*14b24e2bSVaishali Kulkarni 	pStats->rxqBdLeft.value.ui64     =
595*14b24e2bSVaishali Kulkarni 	    ecore_chain_get_elem_left(&rx_ring->rx_bd_ring);
596*14b24e2bSVaishali Kulkarni 	pStats->rxqBdPageCnt.value.ui64   =
597*14b24e2bSVaishali Kulkarni 	    ECORE_CHAIN_PAGE_CNT(qede->rx_ring_size,
598*14b24e2bSVaishali Kulkarni 	    sizeof (struct eth_rx_bd), ECORE_CHAIN_MODE_NEXT_PTR);
599*14b24e2bSVaishali Kulkarni 	pStats->rxqBdsPerPage.value.ui64  =
600*14b24e2bSVaishali Kulkarni 	    ELEMS_PER_PAGE(sizeof (struct eth_rx_bd));
601*14b24e2bSVaishali Kulkarni 	pStats->rxqBdSize.value.ui64     = sizeof (struct eth_rx_bd);
602*14b24e2bSVaishali Kulkarni 	pStats->rxqBdProdIdx.value.ui64     =
603*14b24e2bSVaishali Kulkarni 	    ecore_chain_get_prod_idx(&rx_ring->rx_bd_ring) &
604*14b24e2bSVaishali Kulkarni 	    (rx_ring->qede->rx_ring_size - 1);
605*14b24e2bSVaishali Kulkarni 	pStats->rxqBdConsIdx.value.ui64     =
606*14b24e2bSVaishali Kulkarni 	    ecore_chain_get_cons_idx(&rx_ring->rx_bd_ring) &
607*14b24e2bSVaishali Kulkarni 	    (rx_ring->qede->rx_ring_size - 1);
608*14b24e2bSVaishali Kulkarni 	pStats->rcqBdLeft.value.ui64      =
609*14b24e2bSVaishali Kulkarni 	    ecore_chain_get_elem_left(&rx_ring->rx_cqe_ring);
610*14b24e2bSVaishali Kulkarni 	pStats->rcqBdPageCnt.value.ui64   =
611*14b24e2bSVaishali Kulkarni 	    ECORE_CHAIN_PAGE_CNT(qede->rx_ring_size,
612*14b24e2bSVaishali Kulkarni 	    sizeof (union eth_rx_cqe), ECORE_CHAIN_MODE_PBL);
613*14b24e2bSVaishali Kulkarni 	pStats->rcqBdsPerPage.value.ui64  =
614*14b24e2bSVaishali Kulkarni 	    ELEMS_PER_PAGE(sizeof (union eth_rx_cqe));
615*14b24e2bSVaishali Kulkarni 	pStats->rcqBdSize.value.ui64      = sizeof (union eth_rx_cqe);
616*14b24e2bSVaishali Kulkarni 	pStats->rcqBdProdIdx.value.ui64   =
617*14b24e2bSVaishali Kulkarni 	    ecore_chain_get_prod_idx(&rx_ring->rx_cqe_ring) &
618*14b24e2bSVaishali Kulkarni 	    (rx_ring->qede->rx_ring_size - 1);
619*14b24e2bSVaishali Kulkarni 	pStats->rcqBdConsIdx.value.ui64   =
620*14b24e2bSVaishali Kulkarni 	    ecore_chain_get_cons_idx(&rx_ring->rx_cqe_ring) &
621*14b24e2bSVaishali Kulkarni 	    (rx_ring->qede->rx_ring_size - 1);
622*14b24e2bSVaishali Kulkarni 	pStats->hwRcqConIdx.value.ui64    =
623*14b24e2bSVaishali Kulkarni 	    (rx_ring->hw_cons_ptr != NULL) ?
624*14b24e2bSVaishali Kulkarni 	    HOST_TO_LE_16(*rx_ring->hw_cons_ptr) &
625*14b24e2bSVaishali Kulkarni 	    (rx_ring->qede->rx_ring_size - 1): 0;
626*14b24e2bSVaishali Kulkarni 	pStats->rxFreeDescs.value.ui64    =
627*14b24e2bSVaishali Kulkarni 	    rx_ring->rx_buf_area->passive_buf_list.num_entries;
628*14b24e2bSVaishali Kulkarni 	pStats->rxActiveDescs.value.ui64  =
629*14b24e2bSVaishali Kulkarni 	    rx_ring->rx_buf_area->active_buf_list.num_entries;
630*14b24e2bSVaishali Kulkarni 	pStats->rxBufUpInStack.value.ui64 =
631*14b24e2bSVaishali Kulkarni 	    rx_ring->rx_buf_area->buf_upstream;
632*14b24e2bSVaishali Kulkarni 	pStats->rxCopyPkts.value.ui64       =
633*14b24e2bSVaishali Kulkarni 	    rx_ring->rx_copy_cnt;
634*14b24e2bSVaishali Kulkarni 	pStats->rxDropPkts.value.ui64     =
635*14b24e2bSVaishali Kulkarni 	    rx_ring->rx_drop_cnt;
636*14b24e2bSVaishali Kulkarni 	pStats->rxLowWaterCnt.value.ui64     =
637*14b24e2bSVaishali Kulkarni 	    rx_ring->rx_low_water_cnt;
638*14b24e2bSVaishali Kulkarni 	pStats->inPollMode.value.ui64     =
639*14b24e2bSVaishali Kulkarni 	    rx_ring->fp->disabled_by_poll;
640*14b24e2bSVaishali Kulkarni 	pStats->rxPollCnt.value.ui64      =
641*14b24e2bSVaishali Kulkarni 	    rx_ring->rx_poll_cnt;;
642*14b24e2bSVaishali Kulkarni 	pStats->intrDisableCnt.value.ui64 =
643*14b24e2bSVaishali Kulkarni 	    rx_ring->intrDisableCnt;
644*14b24e2bSVaishali Kulkarni 	pStats->intrEnableCnt.value.ui64  =
645*14b24e2bSVaishali Kulkarni 	    rx_ring->intrEnableCnt;
646*14b24e2bSVaishali Kulkarni 	pStats->genNumber.value.ui64      =
647*14b24e2bSVaishali Kulkarni 	    rx_ring->mr_gen_num;
648*14b24e2bSVaishali Kulkarni 	pStats->rxLroPkts.value.ui64    =
649*14b24e2bSVaishali Kulkarni 	    rx_ring->rx_lro_pkt_cnt;
650*14b24e2bSVaishali Kulkarni 	pStats->rxRingTotalPkts.value.ui64    =
651*14b24e2bSVaishali Kulkarni 	    rx_ring->rx_pkt_cnt;
652*14b24e2bSVaishali Kulkarni 	pStats->rxRingTotalBytes.value.ui64    =
653*14b24e2bSVaishali Kulkarni 	    rx_ring->rx_byte_cnt;
654*14b24e2bSVaishali Kulkarni 	pStats->rxRegPkts.value.ui64    =
655*14b24e2bSVaishali Kulkarni 	    rx_ring->rx_reg_pkt_cnt;
656*14b24e2bSVaishali Kulkarni 	pStats->rxJumboPkts.value.ui64    =
657*14b24e2bSVaishali Kulkarni 	    rx_ring->rx_jumbo_pkt_cnt;
658*14b24e2bSVaishali Kulkarni 
659*14b24e2bSVaishali Kulkarni 	} else {
660*14b24e2bSVaishali Kulkarni 
661*14b24e2bSVaishali Kulkarni 	pStats->rxqBdLeft.value.ui64     = 0;
662*14b24e2bSVaishali Kulkarni 	pStats->rxqBdPageCnt.value.ui64   = 0;
663*14b24e2bSVaishali Kulkarni 	pStats->rxqBdsPerPage.value.ui64  = 0;
664*14b24e2bSVaishali Kulkarni 	pStats->rxqBdSize.value.ui64     = 0;
665*14b24e2bSVaishali Kulkarni 	pStats->rxqBdProdIdx.value.ui64     = 0;
666*14b24e2bSVaishali Kulkarni 	pStats->rxqBdConsIdx.value.ui64     = 0;
667*14b24e2bSVaishali Kulkarni 	pStats->rcqBdLeft.value.ui64      = 0;
668*14b24e2bSVaishali Kulkarni 	pStats->rcqBdPageCnt.value.ui64   = 0;
669*14b24e2bSVaishali Kulkarni 	pStats->rcqBdsPerPage.value.ui64  = 0;
670*14b24e2bSVaishali Kulkarni 	pStats->rcqBdSize.value.ui64      = 0;
671*14b24e2bSVaishali Kulkarni 	pStats->rcqBdProdIdx.value.ui64   = 0;
672*14b24e2bSVaishali Kulkarni 	pStats->rcqBdConsIdx.value.ui64   = 0;
673*14b24e2bSVaishali Kulkarni 	pStats->hwRcqConIdx.value.ui64    = 0;
674*14b24e2bSVaishali Kulkarni 	pStats->rxFreeDescs.value.ui64    = 0;
675*14b24e2bSVaishali Kulkarni 	pStats->rxActiveDescs.value.ui64  = 0;
676*14b24e2bSVaishali Kulkarni 	pStats->rxBufUpInStack.value.ui64 = 0;
677*14b24e2bSVaishali Kulkarni 	pStats->rxCopyPkts.value.ui64       = 0;
678*14b24e2bSVaishali Kulkarni 	pStats->rxDropPkts.value.ui64     = 0;
679*14b24e2bSVaishali Kulkarni 	pStats->rxLowWaterCnt.value.ui64     = 0;
680*14b24e2bSVaishali Kulkarni 	pStats->inPollMode.value.ui64     = 0;
681*14b24e2bSVaishali Kulkarni 	pStats->rxPollCnt.value.ui64      = 0;
682*14b24e2bSVaishali Kulkarni 	pStats->intrDisableCnt.value.ui64 = 0;
683*14b24e2bSVaishali Kulkarni 	pStats->intrEnableCnt.value.ui64  = 0;
684*14b24e2bSVaishali Kulkarni 	pStats->genNumber.value.ui64      = 0;
685*14b24e2bSVaishali Kulkarni 	pStats->rxLroPkts.value.ui64    = 0;
686*14b24e2bSVaishali Kulkarni 	pStats->rxRingTotalPkts.value.ui64  = 0;
687*14b24e2bSVaishali Kulkarni 	pStats->rxRingTotalBytes.value.ui64       = 0;
688*14b24e2bSVaishali Kulkarni 	pStats->rxRegPkts.value.ui64    = 0;
689*14b24e2bSVaishali Kulkarni 	pStats->rxJumboPkts.value.ui64  = 0;
690*14b24e2bSVaishali Kulkarni 	}
691*14b24e2bSVaishali Kulkarni 
692*14b24e2bSVaishali Kulkarni 	mutex_exit(&qede->kstat_lock);
693*14b24e2bSVaishali Kulkarni 	return (0);
694*14b24e2bSVaishali Kulkarni }
695*14b24e2bSVaishali Kulkarni 
696*14b24e2bSVaishali Kulkarni 
697*14b24e2bSVaishali Kulkarni static int
qede_kstat_txq_update(kstat_t * kstats,int rw)698*14b24e2bSVaishali Kulkarni qede_kstat_txq_update(kstat_t *kstats, int rw)
699*14b24e2bSVaishali Kulkarni {
700*14b24e2bSVaishali Kulkarni 
701*14b24e2bSVaishali Kulkarni 	qede_kstat_txq_t *pStats = (qede_kstat_txq_t *)kstats->ks_data;
702*14b24e2bSVaishali Kulkarni 	KstatRingMap *pMap   = (KstatRingMap *)kstats->ks_private;
703*14b24e2bSVaishali Kulkarni 	qede_t *qede    = (qede_t *)pMap->qede;
704*14b24e2bSVaishali Kulkarni 	int idx    = pMap->idx;
705*14b24e2bSVaishali Kulkarni 	struct ecore_dev * edev = &qede->edev;
706*14b24e2bSVaishali Kulkarni 	qede_tx_ring_t *tx_ring = &qede->tx_array[0][idx];
707*14b24e2bSVaishali Kulkarni 
708*14b24e2bSVaishali Kulkarni 
709*14b24e2bSVaishali Kulkarni 	if (rw == KSTAT_WRITE) {
710*14b24e2bSVaishali Kulkarni         	return EACCES;
711*14b24e2bSVaishali Kulkarni 	}
712*14b24e2bSVaishali Kulkarni 	mutex_enter(&qede->kstat_lock);
713*14b24e2bSVaishali Kulkarni 
714*14b24e2bSVaishali Kulkarni 	pStats->txBdTotal.value.ui64     =  qede->tx_ring_size;
715*14b24e2bSVaishali Kulkarni 	pStats->txBdSize.value.ui64 = sizeof (union eth_tx_bd_types);
716*14b24e2bSVaishali Kulkarni 	pStats->txLowWater.value.ui64    = qede->tx_recycle_threshold;
717*14b24e2bSVaishali Kulkarni 
718*14b24e2bSVaishali Kulkarni 	if(qede->qede_state == QEDE_STATE_STARTED) {
719*14b24e2bSVaishali Kulkarni 
720*14b24e2bSVaishali Kulkarni 	pStats->txBdLeft.value.ui64     =
721*14b24e2bSVaishali Kulkarni 	    ecore_chain_get_elem_left(&tx_ring->tx_bd_ring);
722*14b24e2bSVaishali Kulkarni 	pStats->txBdPageCnt.value.ui64  =
723*14b24e2bSVaishali Kulkarni 	    ECORE_CHAIN_PAGE_CNT(tx_ring->bd_ring_size,
724*14b24e2bSVaishali Kulkarni 	    sizeof (union eth_tx_bd_types), ECORE_CHAIN_MODE_PBL);
725*14b24e2bSVaishali Kulkarni 	pStats->txBdsPerPage.value.ui64 =
726*14b24e2bSVaishali Kulkarni 	    ELEMS_PER_PAGE(sizeof (union eth_tx_bd_types));
727*14b24e2bSVaishali Kulkarni 	pStats->hwTxqConIdx.value.ui64 =
728*14b24e2bSVaishali Kulkarni 	    (tx_ring->hw_cons_ptr != NULL) ?
729*14b24e2bSVaishali Kulkarni 	    HOST_TO_LE_16(*tx_ring->hw_cons_ptr) & TX_RING_MASK : 0;
730*14b24e2bSVaishali Kulkarni 	pStats->txBdProdIdx.value.ui64 =
731*14b24e2bSVaishali Kulkarni 	    ecore_chain_get_prod_idx(&tx_ring->tx_bd_ring) & TX_RING_MASK;
732*14b24e2bSVaishali Kulkarni 	pStats->txBdConsIdx.value.ui64 =
733*14b24e2bSVaishali Kulkarni 	    ecore_chain_get_cons_idx(&tx_ring->tx_bd_ring) & TX_RING_MASK;
734*14b24e2bSVaishali Kulkarni  	pStats->txRingPause.value.ui64      =
735*14b24e2bSVaishali Kulkarni 	    tx_ring->tx_ring_pause;
736*14b24e2bSVaishali Kulkarni 	pStats->txDropPkts.value.ui64    = tx_ring->tx_pkt_dropped;
737*14b24e2bSVaishali Kulkarni 	pStats->txCopyPkts.value.ui64      = tx_ring->tx_copy_count;
738*14b24e2bSVaishali Kulkarni 	pStats->txBind.value.ui64        = tx_ring->tx_bind_count;
739*14b24e2bSVaishali Kulkarni 	pStats->txBindFail.value.ui64    = tx_ring->tx_bind_fail;
740*14b24e2bSVaishali Kulkarni 	pStats->txPremapped.value.ui64      = tx_ring->tx_premap_count;
741*14b24e2bSVaishali Kulkarni 	pStats->txPremappedFail.value.ui64   = tx_ring->tx_premap_fail;
742*14b24e2bSVaishali Kulkarni 	pStats->txTooManyCookies.value.ui64   = tx_ring->tx_too_many_cookies;
743*14b24e2bSVaishali Kulkarni 	pStats->txPullupPkts.value.ui64   = tx_ring->tx_pullup_count;
744*14b24e2bSVaishali Kulkarni 	pStats->txLsoPkts.value.ui64   = tx_ring->tx_lso_pkt_count;
745*14b24e2bSVaishali Kulkarni 	pStats->txTooManyMblks.value.ui64   = tx_ring->tx_too_many_mblks;
746*14b24e2bSVaishali Kulkarni 	pStats->txMappedPkts.value.ui64   = tx_ring->tx_mapped_pkts;
747*14b24e2bSVaishali Kulkarni 	pStats->txRingTotalPkts.value.ui64    = tx_ring->tx_pkt_count;
748*14b24e2bSVaishali Kulkarni 	pStats->txRingTotalBytes.value.ui64    = tx_ring->tx_byte_count;
749*14b24e2bSVaishali Kulkarni 	pStats->txJumboPkts.value.ui64   = tx_ring->tx_jumbo_pkt_count;
750*14b24e2bSVaishali Kulkarni 
751*14b24e2bSVaishali Kulkarni 
752*14b24e2bSVaishali Kulkarni   	} else {
753*14b24e2bSVaishali Kulkarni 
754*14b24e2bSVaishali Kulkarni 
755*14b24e2bSVaishali Kulkarni 	pStats->txBdLeft.value.ui64     = 0;
756*14b24e2bSVaishali Kulkarni 	pStats->txBdPageCnt.value.ui64     = 0;
757*14b24e2bSVaishali Kulkarni 	pStats->txBdsPerPage.value.ui64     = 0;
758*14b24e2bSVaishali Kulkarni 	pStats->hwTxqConIdx.value.ui64 = 0;
759*14b24e2bSVaishali Kulkarni 	pStats->txBdProdIdx.value.ui64   = 0;
760*14b24e2bSVaishali Kulkarni 	pStats->txBdConsIdx.value.ui64   = 0;
761*14b24e2bSVaishali Kulkarni 	pStats->txRingPause.value.ui64        = 0;
762*14b24e2bSVaishali Kulkarni 	pStats->txDropPkts.value.ui64    = 0;
763*14b24e2bSVaishali Kulkarni 	pStats->txCopyPkts.value.ui64      = 0;
764*14b24e2bSVaishali Kulkarni 	pStats->txBind.value.ui64        = 0;
765*14b24e2bSVaishali Kulkarni 	pStats->txBindFail.value.ui64    = 0;
766*14b24e2bSVaishali Kulkarni 	pStats->txPremapped.value.ui64   = 0;
767*14b24e2bSVaishali Kulkarni 	pStats->txPremappedFail.value.ui64  = 0;
768*14b24e2bSVaishali Kulkarni 	pStats->txTooManyCookies.value.ui64  = 0;
769*14b24e2bSVaishali Kulkarni 	pStats->txPullupPkts.value.ui64   = 0;
770*14b24e2bSVaishali Kulkarni 	pStats->txLsoPkts.value.ui64   = 0;
771*14b24e2bSVaishali Kulkarni 	pStats->txTooManyMblks.value.ui64  = 0;
772*14b24e2bSVaishali Kulkarni 	pStats->txMappedPkts.value.ui64   = 0;
773*14b24e2bSVaishali Kulkarni 	pStats->txJumboPkts.value.ui64   = 0;
774*14b24e2bSVaishali Kulkarni 	pStats->txRingTotalPkts.value.ui64    = 0;
775*14b24e2bSVaishali Kulkarni 	pStats->txRingTotalBytes.value.ui64    = 0;
776*14b24e2bSVaishali Kulkarni 	}
777*14b24e2bSVaishali Kulkarni 
778*14b24e2bSVaishali Kulkarni 	mutex_exit(&qede->kstat_lock);
779*14b24e2bSVaishali Kulkarni 	return (0);
780*14b24e2bSVaishali Kulkarni }
781*14b24e2bSVaishali Kulkarni 
782*14b24e2bSVaishali Kulkarni boolean_t
qede_kstat_init_rxq(qede_t * qede,int idx)783*14b24e2bSVaishali Kulkarni qede_kstat_init_rxq(qede_t *qede, int idx)
784*14b24e2bSVaishali Kulkarni {
785*14b24e2bSVaishali Kulkarni 
786*14b24e2bSVaishali Kulkarni 	char buf[32];
787*14b24e2bSVaishali Kulkarni 
788*14b24e2bSVaishali Kulkarni 	qede_kstat_rxq_t *pStatsRxq;
789*14b24e2bSVaishali Kulkarni 
790*14b24e2bSVaishali Kulkarni #define QEDE_KSTAT_RXQ(f, t)  kstat_named_init(&pStatsRxq->f, #f, t)
791*14b24e2bSVaishali Kulkarni 
792*14b24e2bSVaishali Kulkarni 	snprintf(buf, sizeof (buf), "rxq%d", idx);
793*14b24e2bSVaishali Kulkarni 
794*14b24e2bSVaishali Kulkarni 	if ((qede->kstats_rxq[idx] = kstat_create("qede",
795*14b24e2bSVaishali Kulkarni 	    qede->instance,
796*14b24e2bSVaishali Kulkarni 	    buf,
797*14b24e2bSVaishali Kulkarni 	    "net",
798*14b24e2bSVaishali Kulkarni 	    KSTAT_TYPE_NAMED,
799*14b24e2bSVaishali Kulkarni 	    QEDE_KSTAT_RXQ_SIZE,
800*14b24e2bSVaishali Kulkarni 	    0)) == NULL)
801*14b24e2bSVaishali Kulkarni 	{
802*14b24e2bSVaishali Kulkarni         	/*BnxeLogWarn(qede, "Failed to create rxq%d kstat", idx);*/
803*14b24e2bSVaishali Kulkarni 		cmn_err(CE_WARN, "Failed to create rxq%d kstat", idx);
804*14b24e2bSVaishali Kulkarni         	return (B_FALSE);
805*14b24e2bSVaishali Kulkarni 	}
806*14b24e2bSVaishali Kulkarni         pStatsRxq = (qede_kstat_rxq_t *)qede->kstats_rxq[idx]->ks_data;
807*14b24e2bSVaishali Kulkarni 
808*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_RXQ(rxqBdTotal,     KSTAT_DATA_UINT64);
809*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_RXQ(rxqBdLeft,      KSTAT_DATA_UINT64);
810*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_RXQ(rxqBdPageCnt,   KSTAT_DATA_UINT64);
811*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_RXQ(rxqBdsPerPage,  KSTAT_DATA_UINT64);
812*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_RXQ(rxqBdSize,      KSTAT_DATA_UINT64);
813*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_RXQ(rxqBdProdIdx,   KSTAT_DATA_UINT64);
814*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_RXQ(rxqBdConsIdx,   KSTAT_DATA_UINT64);
815*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_RXQ(rcqBdTotal,     KSTAT_DATA_UINT64);
816*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_RXQ(rcqBdLeft,      KSTAT_DATA_UINT64);
817*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_RXQ(rcqBdPageCnt,   KSTAT_DATA_UINT64);
818*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_RXQ(rcqBdsPerPage,  KSTAT_DATA_UINT64);
819*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_RXQ(rcqBdSize,      KSTAT_DATA_UINT64);
820*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_RXQ(rcqBdProdIdx,   KSTAT_DATA_UINT64);
821*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_RXQ(rcqBdConsIdx,   KSTAT_DATA_UINT64);
822*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_RXQ(hwRcqConIdx,    KSTAT_DATA_UINT64);
823*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_RXQ(rxFreeDescs,    KSTAT_DATA_UINT64);
824*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_RXQ(rxActiveDescs,  KSTAT_DATA_UINT64);
825*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_RXQ(rxCopyPkts,       KSTAT_DATA_UINT64);
826*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_RXQ(rxDropPkts,     KSTAT_DATA_UINT64);
827*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_RXQ(rxBufUpInStack, KSTAT_DATA_UINT64);
828*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_RXQ(rxLowWater,     KSTAT_DATA_UINT64);
829*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_RXQ(rxLowWaterCnt,     KSTAT_DATA_UINT64);
830*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_RXQ(inPollMode,     KSTAT_DATA_UINT64);
831*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_RXQ(rxPollCnt,        KSTAT_DATA_UINT64);
832*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_RXQ(intrDisableCnt, KSTAT_DATA_UINT64);
833*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_RXQ(intrEnableCnt,  KSTAT_DATA_UINT64);
834*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_RXQ(genNumber,      KSTAT_DATA_UINT64);
835*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_RXQ(rxRegPkts,      KSTAT_DATA_UINT64);
836*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_RXQ(rxJumboPkts,      KSTAT_DATA_UINT64);
837*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_RXQ(rxLroPkts,      KSTAT_DATA_UINT64);
838*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_RXQ(rxRingTotalPkts,      KSTAT_DATA_UINT64);
839*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_RXQ(rxRingTotalBytes,      KSTAT_DATA_UINT64);
840*14b24e2bSVaishali Kulkarni 
841*14b24e2bSVaishali Kulkarni 
842*14b24e2bSVaishali Kulkarni 	qede->kstats_rxq_map[idx].idx = idx;
843*14b24e2bSVaishali Kulkarni 	qede->kstats_rxq_map[idx].qede = qede;
844*14b24e2bSVaishali Kulkarni 
845*14b24e2bSVaishali Kulkarni 	qede->kstats_rxq[idx]->ks_update  = qede_kstat_rxq_update;
846*14b24e2bSVaishali Kulkarni 	qede->kstats_rxq[idx]->ks_private = (void *)&qede->kstats_rxq_map[idx];
847*14b24e2bSVaishali Kulkarni 
848*14b24e2bSVaishali Kulkarni 	kstat_install(qede->kstats_rxq[idx]);
849*14b24e2bSVaishali Kulkarni 
850*14b24e2bSVaishali Kulkarni 	return (B_TRUE);
851*14b24e2bSVaishali Kulkarni }
852*14b24e2bSVaishali Kulkarni 
853*14b24e2bSVaishali Kulkarni 
854*14b24e2bSVaishali Kulkarni boolean_t
qede_kstat_init_txq(qede_t * qede,int idx)855*14b24e2bSVaishali Kulkarni qede_kstat_init_txq(qede_t *qede, int idx)
856*14b24e2bSVaishali Kulkarni {
857*14b24e2bSVaishali Kulkarni 	char buf[32];
858*14b24e2bSVaishali Kulkarni 
859*14b24e2bSVaishali Kulkarni 	qede_kstat_txq_t *pStatsTxq;
860*14b24e2bSVaishali Kulkarni 
861*14b24e2bSVaishali Kulkarni #define QEDE_KSTAT_TXQ(f, t)  kstat_named_init(&pStatsTxq->f, #f, t)
862*14b24e2bSVaishali Kulkarni 
863*14b24e2bSVaishali Kulkarni 	snprintf(buf, sizeof (buf), "txq%d", idx);
864*14b24e2bSVaishali Kulkarni 
865*14b24e2bSVaishali Kulkarni         if ((qede->kstats_txq[idx] = kstat_create("qede",
866*14b24e2bSVaishali Kulkarni 	    qede->instance,
867*14b24e2bSVaishali Kulkarni 	    buf,
868*14b24e2bSVaishali Kulkarni 	    "net",
869*14b24e2bSVaishali Kulkarni 	    KSTAT_TYPE_NAMED,
870*14b24e2bSVaishali Kulkarni 	    QEDE_KSTAT_TXQ_SIZE,
871*14b24e2bSVaishali Kulkarni 	    0)) == NULL)  {
872*14b24e2bSVaishali Kulkarni         	/*BnxeLogWarn(qede, "Failed to create txq%d kstat", idx);*/
873*14b24e2bSVaishali Kulkarni 		cmn_err(CE_WARN, "Failed to create txq%d kstat", idx);
874*14b24e2bSVaishali Kulkarni         	return (B_FALSE);
875*14b24e2bSVaishali Kulkarni 	}
876*14b24e2bSVaishali Kulkarni 
877*14b24e2bSVaishali Kulkarni 
878*14b24e2bSVaishali Kulkarni 	pStatsTxq = (qede_kstat_txq_t *)qede->kstats_txq[idx]->ks_data;
879*14b24e2bSVaishali Kulkarni 
880*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_TXQ(txBdTotal,     KSTAT_DATA_UINT64);
881*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_TXQ(txBdLeft,      KSTAT_DATA_UINT64);
882*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_TXQ(txBdPageCnt,   KSTAT_DATA_UINT64);
883*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_TXQ(txBdsPerPage,  KSTAT_DATA_UINT64);
884*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_TXQ(txBdSize,      KSTAT_DATA_UINT64);
885*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_TXQ(hwTxqConIdx,   KSTAT_DATA_UINT64);
886*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_TXQ(txBdProdIdx,   KSTAT_DATA_UINT64);
887*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_TXQ(txBdConsIdx,   KSTAT_DATA_UINT64);
888*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_TXQ(txLowWater,    KSTAT_DATA_UINT64);
889*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_TXQ(txDropPkts,    KSTAT_DATA_UINT64);
890*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_TXQ(txCopyPkts,      KSTAT_DATA_UINT64);
891*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_TXQ(txRingPause,        KSTAT_DATA_UINT64);
892*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_TXQ(txDropPkts,    KSTAT_DATA_UINT64);
893*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_TXQ(txBind,    KSTAT_DATA_UINT64);
894*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_TXQ(txBindFail,    KSTAT_DATA_UINT64);
895*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_TXQ(txPremapped,    KSTAT_DATA_UINT64);
896*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_TXQ(txPremappedFail,    KSTAT_DATA_UINT64);
897*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_TXQ(txTooManyCookies,    KSTAT_DATA_UINT64);
898*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_TXQ(txPullupPkts,    KSTAT_DATA_UINT64);
899*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_TXQ(txLsoPkts,    KSTAT_DATA_UINT64);
900*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_TXQ(txTooManyMblks,    KSTAT_DATA_UINT64);
901*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_TXQ(txMappedPkts,    KSTAT_DATA_UINT64);
902*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_TXQ(txJumboPkts,    KSTAT_DATA_UINT64);
903*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_TXQ(txRingTotalPkts,      KSTAT_DATA_UINT64);
904*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_TXQ(txRingTotalBytes,      KSTAT_DATA_UINT64);
905*14b24e2bSVaishali Kulkarni 
906*14b24e2bSVaishali Kulkarni 	qede->kstats_txq_map[idx].idx = idx;
907*14b24e2bSVaishali Kulkarni 	qede->kstats_txq_map[idx].qede = qede;
908*14b24e2bSVaishali Kulkarni 
909*14b24e2bSVaishali Kulkarni 	qede->kstats_txq[idx]->ks_update  = qede_kstat_txq_update;
910*14b24e2bSVaishali Kulkarni 	qede->kstats_txq[idx]->ks_private = (void *)&qede->kstats_txq_map[idx];
911*14b24e2bSVaishali Kulkarni 
912*14b24e2bSVaishali Kulkarni 	kstat_install(qede->kstats_txq[idx]);
913*14b24e2bSVaishali Kulkarni 
914*14b24e2bSVaishali Kulkarni 	return (B_TRUE);
915*14b24e2bSVaishali Kulkarni 
916*14b24e2bSVaishali Kulkarni }
917*14b24e2bSVaishali Kulkarni 
918*14b24e2bSVaishali Kulkarni boolean_t
qede_kstat_init(qede_t * qede)919*14b24e2bSVaishali Kulkarni qede_kstat_init(qede_t *qede)
920*14b24e2bSVaishali Kulkarni {
921*14b24e2bSVaishali Kulkarni 	qede_kstat_t *pStats;
922*14b24e2bSVaishali Kulkarni 	qede_kstat_link_t *pStatsLink;
923*14b24e2bSVaishali Kulkarni 	qede_kstat_intr_t *pStatsIntr;
924*14b24e2bSVaishali Kulkarni 	qede_kstat_vport_stats_t *pStatsVport;
925*14b24e2bSVaishali Kulkarni 	int i;
926*14b24e2bSVaishali Kulkarni 
927*14b24e2bSVaishali Kulkarni #define QEDE_KSTAT(f, t)            kstat_named_init(&pStats->f, #f, t)
928*14b24e2bSVaishali Kulkarni #define QEDE_KSTAT_LINK(f, t)       kstat_named_init(&pStatsLink->f, #f, t)
929*14b24e2bSVaishali Kulkarni #define QEDE_KSTAT_INTR(f, t)       kstat_named_init(&pStatsIntr->f, #f, t)
930*14b24e2bSVaishali Kulkarni #define QEDE_KSTAT_VPORT(f,t)	    kstat_named_init(&pStatsVport->f, #f, t)
931*14b24e2bSVaishali Kulkarni 
932*14b24e2bSVaishali Kulkarni 
933*14b24e2bSVaishali Kulkarni 	if ((qede->kstats = kstat_create("qede",
934*14b24e2bSVaishali Kulkarni 	    qede->instance,
935*14b24e2bSVaishali Kulkarni 	    "stats",
936*14b24e2bSVaishali Kulkarni 	    "net",
937*14b24e2bSVaishali Kulkarni 	    KSTAT_TYPE_NAMED,
938*14b24e2bSVaishali Kulkarni 	    QEDE_KSTAT_SIZE,
939*14b24e2bSVaishali Kulkarni 	    0)) == NULL) {
940*14b24e2bSVaishali Kulkarni         	/*QedeLogWarn(qede, "Failed to create kstat");*/
941*14b24e2bSVaishali Kulkarni 		cmn_err(CE_WARN, "Failed to create kstat");
942*14b24e2bSVaishali Kulkarni         	return (B_FALSE);
943*14b24e2bSVaishali Kulkarni 	}
944*14b24e2bSVaishali Kulkarni 
945*14b24e2bSVaishali Kulkarni 	pStats = (qede_kstat_t *)qede->kstats->ks_data;
946*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT(qede_hi, KSTAT_DATA_CHAR);
947*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT(qede_lo, KSTAT_DATA_CHAR);
948*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT(version, KSTAT_DATA_CHAR);
949*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT(versionFW, KSTAT_DATA_CHAR);
950*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT(versionMFW, KSTAT_DATA_CHAR);
951*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT(chipID, KSTAT_DATA_CHAR);
952*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT(chipName, KSTAT_DATA_CHAR);
953*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT(devBDF, KSTAT_DATA_CHAR);
954*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT(devID, KSTAT_DATA_CHAR);
955*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT(multiFunction, KSTAT_DATA_CHAR);
956*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT(multiFunctionVnics, KSTAT_DATA_UINT64);
957*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT(macAddr, KSTAT_DATA_CHAR);
958*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT(hwInitDone, KSTAT_DATA_UINT64);
959*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT(numVports, KSTAT_DATA_UINT64);
960*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT(vportID, KSTAT_DATA_UINT64);
961*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT(intrAlloc, KSTAT_DATA_CHAR);
962*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT(intrFired, KSTAT_DATA_UINT64);
963*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT(lroEnabled, KSTAT_DATA_UINT64);
964*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT(lsoEnabled, KSTAT_DATA_UINT64);
965*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT(jumboEnabled, KSTAT_DATA_UINT64);
966*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT(txTotalPkts, KSTAT_DATA_UINT64);
967*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT(txTotalBytes, KSTAT_DATA_UINT64);
968*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT(txTotalDiscards, KSTAT_DATA_UINT64);
969*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT(rxTotalPkts, KSTAT_DATA_UINT64);
970*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT(rxTotalBytes, KSTAT_DATA_UINT64);
971*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT(rxTotalDiscards, KSTAT_DATA_UINT64);
972*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT(allocbFailures, KSTAT_DATA_UINT64);
973*14b24e2bSVaishali Kulkarni 
974*14b24e2bSVaishali Kulkarni 	qede->kstats->ks_update  = qede_kstat_update;
975*14b24e2bSVaishali Kulkarni 	qede->kstats->ks_private = (void *)qede;
976*14b24e2bSVaishali Kulkarni 
977*14b24e2bSVaishali Kulkarni 	kstat_install(qede->kstats);
978*14b24e2bSVaishali Kulkarni 
979*14b24e2bSVaishali Kulkarni 	/****************************************************************/
980*14b24e2bSVaishali Kulkarni 	if ((qede->kstats_link = kstat_create("qede",
981*14b24e2bSVaishali Kulkarni 	    qede->instance,
982*14b24e2bSVaishali Kulkarni 	    "link",
983*14b24e2bSVaishali Kulkarni 	    "net",
984*14b24e2bSVaishali Kulkarni 	    KSTAT_TYPE_NAMED,
985*14b24e2bSVaishali Kulkarni 	    QEDE_KSTAT_LINK_SIZE,
986*14b24e2bSVaishali Kulkarni 	    0)) == NULL) {
987*14b24e2bSVaishali Kulkarni         	/*BnxeLogWarn(qede, "Failed to create link kstat");*/
988*14b24e2bSVaishali Kulkarni 		cmn_err(CE_WARN, "Failed to create link kstat");
989*14b24e2bSVaishali Kulkarni 		qede_kstat_fini(qede);
990*14b24e2bSVaishali Kulkarni         	return (B_FALSE);
991*14b24e2bSVaishali Kulkarni 	}
992*14b24e2bSVaishali Kulkarni 
993*14b24e2bSVaishali Kulkarni 	pStatsLink = (qede_kstat_link_t *)qede->kstats_link->ks_data;
994*14b24e2bSVaishali Kulkarni 
995*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_LINK(vportID, KSTAT_DATA_UINT64);
996*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_LINK(uptime,  KSTAT_DATA_UINT64);
997*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_LINK(mtuL2,   KSTAT_DATA_UINT64);
998*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_LINK(speed,   KSTAT_DATA_UINT64);
999*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_LINK(link,    KSTAT_DATA_UINT64);
1000*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_LINK(duplex,  KSTAT_DATA_UINT64);
1001*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_LINK(pauseRx, KSTAT_DATA_UINT64);
1002*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_LINK(pauseTx, KSTAT_DATA_UINT64);
1003*14b24e2bSVaishali Kulkarni 
1004*14b24e2bSVaishali Kulkarni 	qede->kstats_link->ks_update  = qede_kstat_link_update;
1005*14b24e2bSVaishali Kulkarni 	qede->kstats_link->ks_private = (void *)qede;
1006*14b24e2bSVaishali Kulkarni 
1007*14b24e2bSVaishali Kulkarni 	kstat_install(qede->kstats_link);
1008*14b24e2bSVaishali Kulkarni 
1009*14b24e2bSVaishali Kulkarni 	/****************************************************************/
1010*14b24e2bSVaishali Kulkarni 
1011*14b24e2bSVaishali Kulkarni         if ((qede->kstats_intr = kstat_create("qede",
1012*14b24e2bSVaishali Kulkarni 	    qede->instance,
1013*14b24e2bSVaishali Kulkarni 	    "intr",
1014*14b24e2bSVaishali Kulkarni 	    "net",
1015*14b24e2bSVaishali Kulkarni 	    KSTAT_TYPE_NAMED,
1016*14b24e2bSVaishali Kulkarni 	    QEDE_KSTAT_INTR_SIZE,
1017*14b24e2bSVaishali Kulkarni 	    0)) == NULL) {
1018*14b24e2bSVaishali Kulkarni         	/*BnxeLogWarn(qede, "Failed to create intr kstat");*/
1019*14b24e2bSVaishali Kulkarni 		cmn_err(CE_WARN, "Failed to create intr kstat");
1020*14b24e2bSVaishali Kulkarni 		qede_kstat_fini(qede);
1021*14b24e2bSVaishali Kulkarni         	return (B_FALSE);
1022*14b24e2bSVaishali Kulkarni 	}
1023*14b24e2bSVaishali Kulkarni 
1024*14b24e2bSVaishali Kulkarni 
1025*14b24e2bSVaishali Kulkarni 	pStatsIntr = (qede_kstat_intr_t *)qede->kstats_intr->ks_data;
1026*14b24e2bSVaishali Kulkarni 
1027*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_INTR(intrAlloc,      KSTAT_DATA_CHAR);
1028*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_INTR(intrFired,      KSTAT_DATA_UINT64);
1029*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_INTR(sb_00,          KSTAT_DATA_UINT64);
1030*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_INTR(sb_01,          KSTAT_DATA_UINT64);
1031*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_INTR(sb_02,          KSTAT_DATA_UINT64);
1032*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_INTR(sb_03,          KSTAT_DATA_UINT64);
1033*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_INTR(sb_04,          KSTAT_DATA_UINT64);
1034*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_INTR(sb_05,          KSTAT_DATA_UINT64);
1035*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_INTR(sb_06,          KSTAT_DATA_UINT64);
1036*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_INTR(sb_nc_00,       KSTAT_DATA_UINT64);
1037*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_INTR(sb_nc_01,       KSTAT_DATA_UINT64);
1038*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_INTR(sb_nc_02,       KSTAT_DATA_UINT64);
1039*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_INTR(sb_nc_03,       KSTAT_DATA_UINT64);
1040*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_INTR(sb_nc_04,       KSTAT_DATA_UINT64);
1041*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_INTR(sb_nc_05,       KSTAT_DATA_UINT64);
1042*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_INTR(sb_nc_06,       KSTAT_DATA_UINT64);
1043*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_INTR(sb_poll_00,     KSTAT_DATA_UINT64);
1044*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_INTR(sb_poll_01,     KSTAT_DATA_UINT64);
1045*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_INTR(sb_poll_02,     KSTAT_DATA_UINT64);
1046*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_INTR(sb_poll_03,     KSTAT_DATA_UINT64);
1047*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_INTR(sb_poll_04,     KSTAT_DATA_UINT64);
1048*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_INTR(sb_poll_05,     KSTAT_DATA_UINT64);
1049*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_INTR(sb_poll_06,     KSTAT_DATA_UINT64);
1050*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_INTR(sb_poll_nc_00,  KSTAT_DATA_UINT64);
1051*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_INTR(sb_poll_nc_01,  KSTAT_DATA_UINT64);
1052*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_INTR(sb_poll_nc_02,  KSTAT_DATA_UINT64);
1053*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_INTR(sb_poll_nc_03,  KSTAT_DATA_UINT64);
1054*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_INTR(sb_poll_nc_04,  KSTAT_DATA_UINT64);
1055*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_INTR(sb_poll_nc_05,  KSTAT_DATA_UINT64);
1056*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_INTR(sb_poll_nc_06,  KSTAT_DATA_UINT64);
1057*14b24e2bSVaishali Kulkarni 
1058*14b24e2bSVaishali Kulkarni 	qede->kstats_intr->ks_update  = qede_kstat_intr_update;
1059*14b24e2bSVaishali Kulkarni     	qede->kstats_intr->ks_private = (void *)qede;
1060*14b24e2bSVaishali Kulkarni 
1061*14b24e2bSVaishali Kulkarni     	kstat_install(qede->kstats_intr);
1062*14b24e2bSVaishali Kulkarni 
1063*14b24e2bSVaishali Kulkarni 
1064*14b24e2bSVaishali Kulkarni /****************************************************************/
1065*14b24e2bSVaishali Kulkarni 
1066*14b24e2bSVaishali Kulkarni     	if ((qede->kstats_vport = kstat_create("qede",
1067*14b24e2bSVaishali Kulkarni 	    qede->instance,
1068*14b24e2bSVaishali Kulkarni 	    "L2Stats",
1069*14b24e2bSVaishali Kulkarni 	    "net",
1070*14b24e2bSVaishali Kulkarni 	    KSTAT_TYPE_NAMED,
1071*14b24e2bSVaishali Kulkarni 	    QEDE_KSTAT_VPORT_STATS_SIZE,
1072*14b24e2bSVaishali Kulkarni 	    0)) == NULL) {
1073*14b24e2bSVaishali Kulkarni         	/*BnxeLogWarn(qede, "Failed to create l2chip kstat");*/
1074*14b24e2bSVaishali Kulkarni 		cmn_err(CE_WARN, "Failed to create L2Stats kstat");
1075*14b24e2bSVaishali Kulkarni 		qede_kstat_fini(qede);
1076*14b24e2bSVaishali Kulkarni         	return (B_FALSE);
1077*14b24e2bSVaishali Kulkarni 	}
1078*14b24e2bSVaishali Kulkarni 
1079*14b24e2bSVaishali Kulkarni 	pStatsVport = (qede_kstat_vport_stats_t *)qede->kstats_vport->ks_data;
1080*14b24e2bSVaishali Kulkarni 
1081*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(rxUcastBytes, KSTAT_DATA_UINT64);
1082*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(rxMcastBytes, KSTAT_DATA_UINT64);
1083*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(rxBcastBytes, KSTAT_DATA_UINT64);
1084*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(rxUcastPkts, KSTAT_DATA_UINT64);
1085*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(rxMcastPkts, KSTAT_DATA_UINT64);
1086*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(rxBcastPkts, KSTAT_DATA_UINT64);
1087*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(txUcastBytes, KSTAT_DATA_UINT64);
1088*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(txMcastBytes, KSTAT_DATA_UINT64);
1089*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(txBcastBytes, KSTAT_DATA_UINT64);
1090*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(txUcastPkts, KSTAT_DATA_UINT64);
1091*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(txMcastPkts, KSTAT_DATA_UINT64);
1092*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(txBcastPkts, KSTAT_DATA_UINT64);
1093*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(rx64bytePkts, KSTAT_DATA_UINT64);
1094*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(rx127bytePkts, KSTAT_DATA_UINT64);
1095*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(rx255bytePkts, KSTAT_DATA_UINT64);
1096*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(rx511bytePkts, KSTAT_DATA_UINT64);
1097*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(rx1023bytePkts, KSTAT_DATA_UINT64);
1098*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(rx1518bytePkts, KSTAT_DATA_UINT64);
1099*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(rx1518bytePkts, KSTAT_DATA_UINT64);
1100*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(rx1522bytePkts, KSTAT_DATA_UINT64);
1101*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(rx2047bytePkts, KSTAT_DATA_UINT64);
1102*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(rx4095bytePkts, KSTAT_DATA_UINT64);
1103*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(rx9216bytePkts, KSTAT_DATA_UINT64);
1104*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(rx16383bytePkts, KSTAT_DATA_UINT64);
1105*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(tx64bytePkts, KSTAT_DATA_UINT64);
1106*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(tx64to127bytePkts, KSTAT_DATA_UINT64);
1107*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(tx128to255bytePkts, KSTAT_DATA_UINT64);
1108*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(tx256to511bytePkts, KSTAT_DATA_UINT64);
1109*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(tx512to1023bytePkts, KSTAT_DATA_UINT64);
1110*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(tx1024to1518bytePkts, KSTAT_DATA_UINT64);
1111*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(tx1519to2047bytePkts, KSTAT_DATA_UINT64);
1112*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(tx2048to4095bytePkts, KSTAT_DATA_UINT64);
1113*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(tx4096to9216bytePkts, KSTAT_DATA_UINT64);
1114*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(tx9217to16383bytePkts, KSTAT_DATA_UINT64);
1115*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(rxMacCtrlFrames, KSTAT_DATA_UINT64);
1116*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(rxPauseFrames, KSTAT_DATA_UINT64);
1117*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(txPauseFrames, KSTAT_DATA_UINT64);
1118*14b24e2bSVaishali Kulkarni 	QEDE_KSTAT_VPORT(rxCRCerrors, KSTAT_DATA_UINT64);
1119*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(rxAlignErrors, KSTAT_DATA_UINT64);
1120*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(rxCarrierErrors, KSTAT_DATA_UINT64);
1121*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(rxOversizeErrors, KSTAT_DATA_UINT64);
1122*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(rxJabbers, KSTAT_DATA_UINT64);
1123*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(rxUndersizePkts, KSTAT_DATA_UINT64);
1124*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(rxFragments, KSTAT_DATA_UINT64);
1125*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(txLpiEntryCnt, KSTAT_DATA_UINT64);
1126*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(txTotalCollisions, KSTAT_DATA_UINT64);
1127*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(brbTruncates, KSTAT_DATA_UINT64);
1128*14b24e2bSVaishali Kulkarni 
1129*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(noBuffDiscards, KSTAT_DATA_UINT64);
1130*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(mftagFilterDiscards, KSTAT_DATA_UINT64);
1131*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(macFilterDiscards, KSTAT_DATA_UINT64);
1132*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(txErrDropPkts, KSTAT_DATA_UINT64);
1133*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(coalescedPkts, KSTAT_DATA_UINT64);
1134*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(coalescedEvents, KSTAT_DATA_UINT64);
1135*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(coalescedAbortsNum, KSTAT_DATA_UINT64);
1136*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(nonCoalescedPkts, KSTAT_DATA_UINT64);
1137*14b24e2bSVaishali Kulkarni     	QEDE_KSTAT_VPORT(coalescedBytes, KSTAT_DATA_UINT64);
1138*14b24e2bSVaishali Kulkarni 
1139*14b24e2bSVaishali Kulkarni     	qede->kstats_vport->ks_update  = qede_kstat_vport_stats_update;
1140*14b24e2bSVaishali Kulkarni     	qede->kstats_vport->ks_private = (void *)qede;
1141*14b24e2bSVaishali Kulkarni 
1142*14b24e2bSVaishali Kulkarni     	kstat_install(qede->kstats_vport);
1143*14b24e2bSVaishali Kulkarni     	for (i = 0; i < qede->num_fp; i++) {
1144*14b24e2bSVaishali Kulkarni 		if(!qede_kstat_init_rxq(qede,i))
1145*14b24e2bSVaishali Kulkarni 		{
1146*14b24e2bSVaishali Kulkarni 			qede_kstat_fini(qede);
1147*14b24e2bSVaishali Kulkarni 			return (B_FALSE);
1148*14b24e2bSVaishali Kulkarni 		}
1149*14b24e2bSVaishali Kulkarni 		if(!qede_kstat_init_txq(qede,i))
1150*14b24e2bSVaishali Kulkarni 		{
1151*14b24e2bSVaishali Kulkarni 			qede_kstat_fini(qede);
1152*14b24e2bSVaishali Kulkarni 			return (B_FALSE);
1153*14b24e2bSVaishali Kulkarni 		}
1154*14b24e2bSVaishali Kulkarni 
1155*14b24e2bSVaishali Kulkarni 	}
1156*14b24e2bSVaishali Kulkarni 
1157*14b24e2bSVaishali Kulkarni 	return (B_TRUE);
1158*14b24e2bSVaishali Kulkarni 
1159*14b24e2bSVaishali Kulkarni }
1160*14b24e2bSVaishali Kulkarni 
1161*14b24e2bSVaishali Kulkarni void
qede_kstat_fini(qede_t * qede)1162*14b24e2bSVaishali Kulkarni qede_kstat_fini(qede_t *qede)
1163*14b24e2bSVaishali Kulkarni {
1164*14b24e2bSVaishali Kulkarni 	int i;
1165*14b24e2bSVaishali Kulkarni 
1166*14b24e2bSVaishali Kulkarni 	if(qede->kstats) {
1167*14b24e2bSVaishali Kulkarni 		kstat_delete(qede->kstats);
1168*14b24e2bSVaishali Kulkarni 		qede->kstats = NULL;
1169*14b24e2bSVaishali Kulkarni 	}
1170*14b24e2bSVaishali Kulkarni 	if(qede->kstats_link) {
1171*14b24e2bSVaishali Kulkarni 		kstat_delete(qede->kstats_link);
1172*14b24e2bSVaishali Kulkarni 		qede->kstats_link = NULL;
1173*14b24e2bSVaishali Kulkarni 	}
1174*14b24e2bSVaishali Kulkarni 	if(qede->kstats_intr) {
1175*14b24e2bSVaishali Kulkarni 		kstat_delete(qede->kstats_intr);
1176*14b24e2bSVaishali Kulkarni 		qede->kstats_intr = NULL;
1177*14b24e2bSVaishali Kulkarni 	}
1178*14b24e2bSVaishali Kulkarni 	if(qede->kstats_vport) {
1179*14b24e2bSVaishali Kulkarni 		kstat_delete(qede->kstats_vport);
1180*14b24e2bSVaishali Kulkarni 		qede->kstats_vport = NULL;
1181*14b24e2bSVaishali Kulkarni 	}
1182*14b24e2bSVaishali Kulkarni 
1183*14b24e2bSVaishali Kulkarni 
1184*14b24e2bSVaishali Kulkarni 	for (i = 0; i < qede->num_fp; i++) {
1185*14b24e2bSVaishali Kulkarni 		if(qede->kstats_rxq[i]) {
1186*14b24e2bSVaishali Kulkarni 			kstat_delete(qede->kstats_rxq[i]);
1187*14b24e2bSVaishali Kulkarni 			qede->kstats_rxq[i] = NULL;
1188*14b24e2bSVaishali Kulkarni 		}
1189*14b24e2bSVaishali Kulkarni 		qede->kstats_rxq_map[i].idx = 0;
1190*14b24e2bSVaishali Kulkarni 		qede->kstats_rxq_map[i].qede = NULL;
1191*14b24e2bSVaishali Kulkarni 		if(qede->kstats_txq[i]) {
1192*14b24e2bSVaishali Kulkarni 			kstat_delete(qede->kstats_txq[i]);
1193*14b24e2bSVaishali Kulkarni 			qede->kstats_txq[i] = NULL;
1194*14b24e2bSVaishali Kulkarni 		}
1195*14b24e2bSVaishali Kulkarni 		qede->kstats_txq_map[i].idx = 0;
1196*14b24e2bSVaishali Kulkarni 		qede->kstats_txq_map[i].qede = NULL;
1197*14b24e2bSVaishali Kulkarni 	}
1198*14b24e2bSVaishali Kulkarni }
1199