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