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