2 * Broadcom NetXtreme-C/E network driver.
4 * Copyright (c) 2016 Broadcom, All Rights Reserved.
5 * The term Broadcom refers to Broadcom Limited and/or its subsidiaries
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS'
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
20 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
26 * THE POSSIBILITY OF SUCH DAMAGE.
29 #include <sys/cdefs.h>
30 __FBSDID("$FreeBSD$");
32 #include <sys/types.h>
33 #include <sys/sysctl.h>
36 #include "bnxt_hwrm.h"
37 #include "bnxt_sysctl.h"
39 static int bnxt_vlan_only_sysctl(SYSCTL_HANDLER_ARGS);
42 * dev.bnxt.0.hwstats.txq0
43 * dev.bnxt.0.hwstats.txq0.txmbufs
44 * dev.bnxt.0.hwstats.rxq0
45 * dev.bnxt.0.hwstats.txq0.rxmbufs
46 * so the hwstats ctx list needs to be created in attach_post and populated
49 * Then, it needs to be cleaned up in stop.
53 bnxt_init_sysctl_ctx(struct bnxt_softc *softc)
55 struct sysctl_ctx_list *ctx;
57 sysctl_ctx_init(&softc->hw_stats);
58 ctx = device_get_sysctl_ctx(softc->dev);
59 softc->hw_stats_oid = SYSCTL_ADD_NODE(ctx,
60 SYSCTL_CHILDREN(device_get_sysctl_tree(softc->dev)), OID_AUTO,
61 "hwstats", CTLFLAG_RD, 0, "hardware statistics");
62 if (!softc->hw_stats_oid) {
63 sysctl_ctx_free(&softc->hw_stats);
67 sysctl_ctx_init(&softc->ver_info->ver_ctx);
68 ctx = device_get_sysctl_ctx(softc->dev);
69 softc->ver_info->ver_oid = SYSCTL_ADD_NODE(ctx,
70 SYSCTL_CHILDREN(device_get_sysctl_tree(softc->dev)), OID_AUTO,
71 "ver", CTLFLAG_RD, 0, "hardware/firmware version information");
72 if (!softc->ver_info->ver_oid) {
73 sysctl_ctx_free(&softc->ver_info->ver_ctx);
78 sysctl_ctx_init(&softc->nvm_info->nvm_ctx);
79 ctx = device_get_sysctl_ctx(softc->dev);
80 softc->nvm_info->nvm_oid = SYSCTL_ADD_NODE(ctx,
81 SYSCTL_CHILDREN(device_get_sysctl_tree(softc->dev)), OID_AUTO,
82 "nvram", CTLFLAG_RD, 0, "nvram information");
83 if (!softc->nvm_info->nvm_oid) {
84 sysctl_ctx_free(&softc->nvm_info->nvm_ctx);
89 sysctl_ctx_init(&softc->hw_lro_ctx);
90 ctx = device_get_sysctl_ctx(softc->dev);
91 softc->hw_lro_oid = SYSCTL_ADD_NODE(ctx,
92 SYSCTL_CHILDREN(device_get_sysctl_tree(softc->dev)), OID_AUTO,
93 "hw_lro", CTLFLAG_RD, 0, "hardware lro");
94 if (!softc->hw_lro_oid) {
95 sysctl_ctx_free(&softc->hw_lro_ctx);
99 sysctl_ctx_init(&softc->flow_ctrl_ctx);
100 ctx = device_get_sysctl_ctx(softc->dev);
101 softc->flow_ctrl_oid = SYSCTL_ADD_NODE(ctx,
102 SYSCTL_CHILDREN(device_get_sysctl_tree(softc->dev)), OID_AUTO,
103 "fc", CTLFLAG_RD, 0, "flow ctrl");
104 if (!softc->flow_ctrl_oid) {
105 sysctl_ctx_free(&softc->flow_ctrl_ctx);
113 bnxt_free_sysctl_ctx(struct bnxt_softc *softc)
118 if (softc->hw_stats_oid != NULL) {
119 orc = sysctl_ctx_free(&softc->hw_stats);
123 softc->hw_stats_oid = NULL;
125 if (softc->ver_info->ver_oid != NULL) {
126 orc = sysctl_ctx_free(&softc->ver_info->ver_ctx);
130 softc->ver_info->ver_oid = NULL;
132 if (BNXT_PF(softc) && softc->nvm_info->nvm_oid != NULL) {
133 orc = sysctl_ctx_free(&softc->nvm_info->nvm_ctx);
137 softc->nvm_info->nvm_oid = NULL;
139 if (softc->hw_lro_oid != NULL) {
140 orc = sysctl_ctx_free(&softc->hw_lro_ctx);
144 softc->hw_lro_oid = NULL;
147 if (softc->flow_ctrl_oid != NULL) {
148 orc = sysctl_ctx_free(&softc->flow_ctrl_ctx);
152 softc->flow_ctrl_oid = NULL;
159 bnxt_create_tx_sysctls(struct bnxt_softc *softc, int txr)
161 struct sysctl_oid *oid;
162 struct ctx_hw_stats *tx_stats = (void *)softc->tx_stats.idi_vaddr;
166 sprintf(name, "txq%d", txr);
167 sprintf(desc, "transmit queue %d", txr);
168 oid = SYSCTL_ADD_NODE(&softc->hw_stats,
169 SYSCTL_CHILDREN(softc->hw_stats_oid), OID_AUTO, name, CTLFLAG_RD, 0,
175 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
176 "ucast_pkts", CTLFLAG_RD, &tx_stats[txr].tx_ucast_pkts,
177 "unicast packets sent");
178 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
179 "mcast_pkts", CTLFLAG_RD, &tx_stats[txr].tx_mcast_pkts,
180 "multicast packets sent");
181 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
182 "bcast_pkts", CTLFLAG_RD, &tx_stats[txr].tx_bcast_pkts,
183 "broadcast packets sent");
184 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
185 "discard_pkts", CTLFLAG_RD,
186 &tx_stats[txr].tx_discard_pkts, "discarded transmit packets");
187 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
188 "drop_pkts", CTLFLAG_RD, &tx_stats[txr].tx_drop_pkts,
189 "dropped transmit packets");
190 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
191 "ucast_bytes", CTLFLAG_RD, &tx_stats[txr].tx_ucast_bytes,
192 "unicast bytes sent");
193 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
194 "mcast_bytes", CTLFLAG_RD, &tx_stats[txr].tx_mcast_bytes,
195 "multicast bytes sent");
196 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
197 "bcast_bytes", CTLFLAG_RD, &tx_stats[txr].tx_bcast_bytes,
198 "broadcast bytes sent");
204 bnxt_create_port_stats_sysctls(struct bnxt_softc *softc)
206 struct sysctl_oid *oid;
210 sprintf(name, "port_stats");
211 sprintf(desc, "Port Stats");
212 oid = SYSCTL_ADD_NODE(&softc->hw_stats,
213 SYSCTL_CHILDREN(softc->hw_stats_oid), OID_AUTO, name, CTLFLAG_RD, 0,
218 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
219 "tx_64b_frames", CTLFLAG_RD,
220 &softc->tx_port_stats->tx_64b_frames, "Transmitted 64b frames");
221 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
222 "tx_65b_127b_frames", CTLFLAG_RD,
223 &softc->tx_port_stats->tx_65b_127b_frames,
224 "Transmitted 65b 127b frames");
225 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
226 "tx_128b_255b_frames", CTLFLAG_RD,
227 &softc->tx_port_stats->tx_128b_255b_frames,
228 "Transmitted 128b 255b frames");
229 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
230 "tx_256b_511b_frames", CTLFLAG_RD,
231 &softc->tx_port_stats->tx_256b_511b_frames,
232 "Transmitted 256b 511b frames");
233 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
234 "tx_512b_1023b_frames", CTLFLAG_RD,
235 &softc->tx_port_stats->tx_512b_1023b_frames,
236 "Transmitted 512b 1023b frames");
237 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
238 "tx_1024b_1518_frames", CTLFLAG_RD,
239 &softc->tx_port_stats->tx_1024b_1518_frames,
240 "Transmitted 1024b 1518 frames");
241 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
242 "tx_good_vlan_frames", CTLFLAG_RD,
243 &softc->tx_port_stats->tx_good_vlan_frames,
244 "Transmitted good vlan frames");
245 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
246 "tx_1519b_2047_frames", CTLFLAG_RD,
247 &softc->tx_port_stats->tx_1519b_2047_frames,
248 "Transmitted 1519b 2047 frames");
249 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
250 "tx_2048b_4095b_frames", CTLFLAG_RD,
251 &softc->tx_port_stats->tx_2048b_4095b_frames,
252 "Transmitted 2048b 4095b frames");
253 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
254 "tx_4096b_9216b_frames", CTLFLAG_RD,
255 &softc->tx_port_stats->tx_4096b_9216b_frames,
256 "Transmitted 4096b 9216b frames");
257 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
258 "tx_9217b_16383b_frames", CTLFLAG_RD,
259 &softc->tx_port_stats->tx_9217b_16383b_frames,
260 "Transmitted 9217b 16383b frames");
261 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
262 "tx_good_frames", CTLFLAG_RD,
263 &softc->tx_port_stats->tx_good_frames, "Transmitted good frames");
264 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
265 "tx_total_frames", CTLFLAG_RD,
266 &softc->tx_port_stats->tx_total_frames, "Transmitted total frames");
267 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
268 "tx_ucast_frames", CTLFLAG_RD,
269 &softc->tx_port_stats->tx_ucast_frames, "Transmitted ucast frames");
270 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
271 "tx_mcast_frames", CTLFLAG_RD,
272 &softc->tx_port_stats->tx_mcast_frames, "Transmitted mcast frames");
273 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
274 "tx_bcast_frames", CTLFLAG_RD,
275 &softc->tx_port_stats->tx_bcast_frames, "Transmitted bcast frames");
276 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
277 "tx_pause_frames", CTLFLAG_RD,
278 &softc->tx_port_stats->tx_pause_frames, "Transmitted pause frames");
279 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
280 "tx_pfc_frames", CTLFLAG_RD,
281 &softc->tx_port_stats->tx_pfc_frames, "Transmitted pfc frames");
282 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
283 "tx_jabber_frames", CTLFLAG_RD,
284 &softc->tx_port_stats->tx_jabber_frames, "Transmitted jabber frames");
285 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
286 "tx_fcs_err_frames", CTLFLAG_RD,
287 &softc->tx_port_stats->tx_fcs_err_frames,
288 "Transmitted fcs err frames");
289 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
290 "tx_control_frames", CTLFLAG_RD,
291 &softc->tx_port_stats->tx_control_frames,
292 "Transmitted control frames");
293 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
294 "tx_oversz_frames", CTLFLAG_RD,
295 &softc->tx_port_stats->tx_oversz_frames, "Transmitted oversz frames");
296 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
297 "tx_single_dfrl_frames", CTLFLAG_RD,
298 &softc->tx_port_stats->tx_single_dfrl_frames,
299 "Transmitted single dfrl frames");
300 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
301 "tx_multi_dfrl_frames", CTLFLAG_RD,
302 &softc->tx_port_stats->tx_multi_dfrl_frames,
303 "Transmitted multi dfrl frames");
304 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
305 "tx_single_coll_frames", CTLFLAG_RD,
306 &softc->tx_port_stats->tx_single_coll_frames,
307 "Transmitted single coll frames");
308 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
309 "tx_multi_coll_frames", CTLFLAG_RD,
310 &softc->tx_port_stats->tx_multi_coll_frames,
311 "Transmitted multi coll frames");
312 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
313 "tx_late_coll_frames", CTLFLAG_RD,
314 &softc->tx_port_stats->tx_late_coll_frames,
315 "Transmitted late coll frames");
316 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
317 "tx_excessive_coll_frames", CTLFLAG_RD,
318 &softc->tx_port_stats->tx_excessive_coll_frames,
319 "Transmitted excessive coll frames");
320 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
321 "tx_frag_frames", CTLFLAG_RD,
322 &softc->tx_port_stats->tx_frag_frames, "Transmitted frag frames");
323 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
324 "tx_err", CTLFLAG_RD,
325 &softc->tx_port_stats->tx_err, "Transmitted err");
326 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
327 "tx_tagged_frames", CTLFLAG_RD,
328 &softc->tx_port_stats->tx_tagged_frames, "Transmitted tagged frames");
329 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
330 "tx_dbl_tagged_frames", CTLFLAG_RD,
331 &softc->tx_port_stats->tx_dbl_tagged_frames,
332 "Transmitted dbl tagged frames");
333 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
334 "tx_runt_frames", CTLFLAG_RD,
335 &softc->tx_port_stats->tx_runt_frames, "Transmitted runt frames");
336 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
337 "tx_fifo_underruns", CTLFLAG_RD,
338 &softc->tx_port_stats->tx_fifo_underruns,
339 "Transmitted fifo underruns");
340 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
341 "tx_pfc_ena_frames_pri0", CTLFLAG_RD,
342 &softc->tx_port_stats->tx_pfc_ena_frames_pri0,
343 "Transmitted pfc ena frames pri0");
344 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
345 "tx_pfc_ena_frames_pri1", CTLFLAG_RD,
346 &softc->tx_port_stats->tx_pfc_ena_frames_pri1,
347 "Transmitted pfc ena frames pri1");
348 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
349 "tx_pfc_ena_frames_pri2", CTLFLAG_RD,
350 &softc->tx_port_stats->tx_pfc_ena_frames_pri2,
351 "Transmitted pfc ena frames pri2");
352 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
353 "tx_pfc_ena_frames_pri3", CTLFLAG_RD,
354 &softc->tx_port_stats->tx_pfc_ena_frames_pri3,
355 "Transmitted pfc ena frames pri3");
356 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
357 "tx_pfc_ena_frames_pri4", CTLFLAG_RD,
358 &softc->tx_port_stats->tx_pfc_ena_frames_pri4,
359 "Transmitted pfc ena frames pri4");
360 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
361 "tx_pfc_ena_frames_pri5", CTLFLAG_RD,
362 &softc->tx_port_stats->tx_pfc_ena_frames_pri5,
363 "Transmitted pfc ena frames pri5");
364 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
365 "tx_pfc_ena_frames_pri6", CTLFLAG_RD,
366 &softc->tx_port_stats->tx_pfc_ena_frames_pri6,
367 "Transmitted pfc ena frames pri6");
368 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
369 "tx_pfc_ena_frames_pri7", CTLFLAG_RD,
370 &softc->tx_port_stats->tx_pfc_ena_frames_pri7,
371 "Transmitted pfc ena frames pri7");
372 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
373 "tx_eee_lpi_events", CTLFLAG_RD,
374 &softc->tx_port_stats->tx_eee_lpi_events,
375 "Transmitted eee lpi events");
376 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
377 "tx_eee_lpi_duration", CTLFLAG_RD,
378 &softc->tx_port_stats->tx_eee_lpi_duration,
379 "Transmitted eee lpi duration");
380 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
381 "tx_llfc_logical_msgs", CTLFLAG_RD,
382 &softc->tx_port_stats->tx_llfc_logical_msgs,
383 "Transmitted llfc logical msgs");
384 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
385 "tx_hcfc_msgs", CTLFLAG_RD,
386 &softc->tx_port_stats->tx_hcfc_msgs, "Transmitted hcfc msgs");
387 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
388 "tx_total_collisions", CTLFLAG_RD,
389 &softc->tx_port_stats->tx_total_collisions,
390 "Transmitted total collisions");
391 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
392 "tx_bytes", CTLFLAG_RD,
393 &softc->tx_port_stats->tx_bytes, "Transmitted bytes");
394 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
395 "tx_xthol_frames", CTLFLAG_RD,
396 &softc->tx_port_stats->tx_xthol_frames, "Transmitted xthol frames");
397 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
398 "tx_stat_discard", CTLFLAG_RD,
399 &softc->tx_port_stats->tx_stat_discard, "Transmitted stat discard");
400 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
401 "tx_stat_error", CTLFLAG_RD,
402 &softc->tx_port_stats->tx_stat_error, "Transmitted stat error");
403 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
404 "rx_64b_frames", CTLFLAG_RD,
405 &softc->rx_port_stats->rx_64b_frames, "Received 64b frames");
406 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
407 "rx_65b_127b_frames", CTLFLAG_RD,
408 &softc->rx_port_stats->rx_65b_127b_frames, "Received 65b 127b frames");
409 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
410 "rx_128b_255b_frames", CTLFLAG_RD,
411 &softc->rx_port_stats->rx_128b_255b_frames,
412 "Received 128b 255b frames");
413 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
414 "rx_256b_511b_frames", CTLFLAG_RD,
415 &softc->rx_port_stats->rx_256b_511b_frames,
416 "Received 256b 511b frames");
417 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
418 "rx_512b_1023b_frames", CTLFLAG_RD,
419 &softc->rx_port_stats->rx_512b_1023b_frames,
420 "Received 512b 1023b frames");
421 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
422 "rx_1024b_1518_frames", CTLFLAG_RD,
423 &softc->rx_port_stats->rx_1024b_1518_frames,
424 "Received 1024b 1518 frames");
425 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
426 "rx_good_vlan_frames", CTLFLAG_RD,
427 &softc->rx_port_stats->rx_good_vlan_frames,
428 "Received good vlan frames");
429 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
430 "rx_1519b_2047b_frames", CTLFLAG_RD,
431 &softc->rx_port_stats->rx_1519b_2047b_frames,
432 "Received 1519b 2047b frames");
433 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
434 "rx_2048b_4095b_frames", CTLFLAG_RD,
435 &softc->rx_port_stats->rx_2048b_4095b_frames,
436 "Received 2048b 4095b frames");
437 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
438 "rx_4096b_9216b_frames", CTLFLAG_RD,
439 &softc->rx_port_stats->rx_4096b_9216b_frames,
440 "Received 4096b 9216b frames");
441 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
442 "rx_9217b_16383b_frames", CTLFLAG_RD,
443 &softc->rx_port_stats->rx_9217b_16383b_frames,
444 "Received 9217b 16383b frames");
445 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
446 "rx_total_frames", CTLFLAG_RD,
447 &softc->rx_port_stats->rx_total_frames, "Received total frames");
448 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
449 "rx_ucast_frames", CTLFLAG_RD,
450 &softc->rx_port_stats->rx_ucast_frames, "Received ucast frames");
451 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
452 "rx_mcast_frames", CTLFLAG_RD,
453 &softc->rx_port_stats->rx_mcast_frames, "Received mcast frames");
454 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
455 "rx_bcast_frames", CTLFLAG_RD,
456 &softc->rx_port_stats->rx_bcast_frames, "Received bcast frames");
457 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
458 "rx_fcs_err_frames", CTLFLAG_RD,
459 &softc->rx_port_stats->rx_fcs_err_frames, "Received fcs err frames");
460 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
461 "rx_ctrl_frames", CTLFLAG_RD,
462 &softc->rx_port_stats->rx_ctrl_frames, "Received ctrl frames");
463 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
464 "rx_pause_frames", CTLFLAG_RD,
465 &softc->rx_port_stats->rx_pause_frames, "Received pause frames");
466 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
467 "rx_pfc_frames", CTLFLAG_RD,
468 &softc->rx_port_stats->rx_pfc_frames, "Received pfc frames");
469 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
470 "rx_unsupported_opcode_frames", CTLFLAG_RD,
471 &softc->rx_port_stats->rx_unsupported_opcode_frames,
472 "Received unsupported opcode frames");
473 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
474 "rx_unsupported_da_pausepfc_frames", CTLFLAG_RD,
475 &softc->rx_port_stats->rx_unsupported_da_pausepfc_frames,
476 "Received unsupported da pausepfc frames");
477 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
478 "rx_wrong_sa_frames", CTLFLAG_RD,
479 &softc->rx_port_stats->rx_wrong_sa_frames,
480 "Received wrong sa frames");
481 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
482 "rx_align_err_frames", CTLFLAG_RD,
483 &softc->rx_port_stats->rx_align_err_frames,
484 "Received align err frames");
485 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
486 "rx_oor_len_frames", CTLFLAG_RD,
487 &softc->rx_port_stats->rx_oor_len_frames,
488 "Received oor len frames");
489 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
490 "rx_code_err_frames", CTLFLAG_RD,
491 &softc->rx_port_stats->rx_code_err_frames,
492 "Received code err frames");
493 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
494 "rx_false_carrier_frames", CTLFLAG_RD,
495 &softc->rx_port_stats->rx_false_carrier_frames,
496 "Received false carrier frames");
497 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
498 "rx_ovrsz_frames", CTLFLAG_RD,
499 &softc->rx_port_stats->rx_ovrsz_frames,
500 "Received ovrsz frames");
501 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
502 "rx_jbr_frames", CTLFLAG_RD,
503 &softc->rx_port_stats->rx_jbr_frames,
504 "Received jbr frames");
505 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
506 "rx_mtu_err_frames", CTLFLAG_RD,
507 &softc->rx_port_stats->rx_mtu_err_frames,
508 "Received mtu err frames");
509 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
510 "rx_match_crc_frames", CTLFLAG_RD,
511 &softc->rx_port_stats->rx_match_crc_frames,
512 "Received match crc frames");
513 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
514 "rx_promiscuous_frames", CTLFLAG_RD,
515 &softc->rx_port_stats->rx_promiscuous_frames,
516 "Received promiscuous frames");
517 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
518 "rx_tagged_frames", CTLFLAG_RD,
519 &softc->rx_port_stats->rx_tagged_frames,
520 "Received tagged frames");
521 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
522 "rx_double_tagged_frames", CTLFLAG_RD,
523 &softc->rx_port_stats->rx_double_tagged_frames,
524 "Received double tagged frames");
525 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
526 "rx_trunc_frames", CTLFLAG_RD,
527 &softc->rx_port_stats->rx_trunc_frames,
528 "Received trunc frames");
529 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
530 "rx_good_frames", CTLFLAG_RD,
531 &softc->rx_port_stats->rx_good_frames,
532 "Received good frames");
533 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
534 "rx_pfc_xon2xoff_frames_pri0", CTLFLAG_RD,
535 &softc->rx_port_stats->rx_pfc_xon2xoff_frames_pri0,
536 "Received pfc xon2xoff frames pri0");
537 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
538 "rx_pfc_xon2xoff_frames_pri1", CTLFLAG_RD,
539 &softc->rx_port_stats->rx_pfc_xon2xoff_frames_pri1,
540 "Received pfc xon2xoff frames pri1");
541 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
542 "rx_pfc_xon2xoff_frames_pri2", CTLFLAG_RD,
543 &softc->rx_port_stats->rx_pfc_xon2xoff_frames_pri2,
544 "Received pfc xon2xoff frames pri2");
545 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
546 "rx_pfc_xon2xoff_frames_pri3", CTLFLAG_RD,
547 &softc->rx_port_stats->rx_pfc_xon2xoff_frames_pri3,
548 "Received pfc xon2xoff frames pri3");
549 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
550 "rx_pfc_xon2xoff_frames_pri4", CTLFLAG_RD,
551 &softc->rx_port_stats->rx_pfc_xon2xoff_frames_pri4,
552 "Received pfc xon2xoff frames pri4");
553 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
554 "rx_pfc_xon2xoff_frames_pri5", CTLFLAG_RD,
555 &softc->rx_port_stats->rx_pfc_xon2xoff_frames_pri5,
556 "Received pfc xon2xoff frames pri5");
557 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
558 "rx_pfc_xon2xoff_frames_pri6", CTLFLAG_RD,
559 &softc->rx_port_stats->rx_pfc_xon2xoff_frames_pri6,
560 "Received pfc xon2xoff frames pri6");
561 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
562 "rx_pfc_xon2xoff_frames_pri7", CTLFLAG_RD,
563 &softc->rx_port_stats->rx_pfc_xon2xoff_frames_pri7,
564 "Received pfc xon2xoff frames pri7");
565 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
566 "rx_pfc_ena_frames_pri0", CTLFLAG_RD,
567 &softc->rx_port_stats->rx_pfc_ena_frames_pri0,
568 "Received pfc ena frames pri0");
569 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
570 "rx_pfc_ena_frames_pri1", CTLFLAG_RD,
571 &softc->rx_port_stats->rx_pfc_ena_frames_pri1,
572 "Received pfc ena frames pri1");
573 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
574 "rx_pfc_ena_frames_pri2", CTLFLAG_RD,
575 &softc->rx_port_stats->rx_pfc_ena_frames_pri2,
576 "Received pfc ena frames pri2");
577 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
578 "rx_pfc_ena_frames_pri3", CTLFLAG_RD,
579 &softc->rx_port_stats->rx_pfc_ena_frames_pri3,
580 "Received pfc ena frames pri3");
581 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
582 "rx_pfc_ena_frames_pri4", CTLFLAG_RD,
583 &softc->rx_port_stats->rx_pfc_ena_frames_pri4,
584 "Received pfc ena frames pri4");
585 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
586 "rx_pfc_ena_frames_pri5", CTLFLAG_RD,
587 &softc->rx_port_stats->rx_pfc_ena_frames_pri5,
588 "Received pfc ena frames pri5");
589 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
590 "rx_pfc_ena_frames_pri6", CTLFLAG_RD,
591 &softc->rx_port_stats->rx_pfc_ena_frames_pri6,
592 "Received pfc ena frames pri6");
593 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
594 "rx_pfc_ena_frames_pri7", CTLFLAG_RD,
595 &softc->rx_port_stats->rx_pfc_ena_frames_pri7,
596 "Received pfc ena frames pri7");
597 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
598 "rx_sch_crc_err_frames", CTLFLAG_RD,
599 &softc->rx_port_stats->rx_sch_crc_err_frames,
600 "Received sch crc err frames");
601 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
602 "rx_undrsz_frames", CTLFLAG_RD,
603 &softc->rx_port_stats->rx_undrsz_frames, "Received undrsz frames");
604 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
605 "rx_frag_frames", CTLFLAG_RD,
606 &softc->rx_port_stats->rx_frag_frames, "Received frag frames");
607 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
608 "rx_eee_lpi_events", CTLFLAG_RD,
609 &softc->rx_port_stats->rx_eee_lpi_events, "Received eee lpi events");
610 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
611 "rx_eee_lpi_duration", CTLFLAG_RD,
612 &softc->rx_port_stats->rx_eee_lpi_duration,
613 "Received eee lpi duration");
614 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
615 "rx_llfc_physical_msgs", CTLFLAG_RD,
616 &softc->rx_port_stats->rx_llfc_physical_msgs,
617 "Received llfc physical msgs");
618 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
619 "rx_llfc_logical_msgs", CTLFLAG_RD,
620 &softc->rx_port_stats->rx_llfc_logical_msgs,
621 "Received llfc logical msgs");
622 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
623 "rx_llfc_msgs_with_crc_err", CTLFLAG_RD,
624 &softc->rx_port_stats->rx_llfc_msgs_with_crc_err,
625 "Received llfc msgs with crc err");
626 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
627 "rx_hcfc_msgs", CTLFLAG_RD,
628 &softc->rx_port_stats->rx_hcfc_msgs, "Received hcfc msgs");
629 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
630 "rx_hcfc_msgs_with_crc_err", CTLFLAG_RD,
631 &softc->rx_port_stats->rx_hcfc_msgs_with_crc_err,
632 "Received hcfc msgs with crc err");
633 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
634 "rx_bytes", CTLFLAG_RD,
635 &softc->rx_port_stats->rx_bytes, "Received bytes");
636 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
637 "rx_runt_bytes", CTLFLAG_RD,
638 &softc->rx_port_stats->rx_runt_bytes, "Received runt bytes");
639 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
640 "rx_runt_frames", CTLFLAG_RD,
641 &softc->rx_port_stats->rx_runt_frames, "Received runt frames");
642 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
643 "rx_stat_discard", CTLFLAG_RD,
644 &softc->rx_port_stats->rx_stat_discard, "Received stat discard");
645 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
646 "rx_stat_err", CTLFLAG_RD,
647 &softc->rx_port_stats->rx_stat_err, "Received stat err");
654 bnxt_create_rx_sysctls(struct bnxt_softc *softc, int rxr)
656 struct sysctl_oid *oid;
657 struct ctx_hw_stats *rx_stats = (void *)softc->rx_stats.idi_vaddr;
661 sprintf(name, "rxq%d", rxr);
662 sprintf(desc, "receive queue %d", rxr);
663 oid = SYSCTL_ADD_NODE(&softc->hw_stats,
664 SYSCTL_CHILDREN(softc->hw_stats_oid), OID_AUTO, name, CTLFLAG_RD, 0,
669 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
670 "ucast_pkts", CTLFLAG_RD, &rx_stats[rxr].rx_ucast_pkts,
671 "unicast packets received");
672 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
673 "mcast_pkts", CTLFLAG_RD, &rx_stats[rxr].rx_mcast_pkts,
674 "multicast packets received");
675 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
676 "bcast_pkts", CTLFLAG_RD, &rx_stats[rxr].rx_bcast_pkts,
677 "broadcast packets received");
678 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
679 "discard_pkts", CTLFLAG_RD,
680 &rx_stats[rxr].rx_discard_pkts, "discarded receive packets");
681 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
682 "drop_pkts", CTLFLAG_RD, &rx_stats[rxr].rx_drop_pkts,
683 "dropped receive packets");
684 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
685 "ucast_bytes", CTLFLAG_RD, &rx_stats[rxr].rx_ucast_bytes,
686 "unicast bytes received");
687 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
688 "mcast_bytes", CTLFLAG_RD, &rx_stats[rxr].rx_mcast_bytes,
689 "multicast bytes received");
690 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
691 "bcast_bytes", CTLFLAG_RD, &rx_stats[rxr].rx_bcast_bytes,
692 "broadcast bytes received");
694 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
695 "tpa_pkts", CTLFLAG_RD, &rx_stats[rxr].tpa_pkts,
697 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
698 "tpa_bytes", CTLFLAG_RD, &rx_stats[rxr].tpa_bytes,
700 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
701 "tpa_events", CTLFLAG_RD, &rx_stats[rxr].tpa_events,
703 SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
704 "tpa_aborts", CTLFLAG_RD, &rx_stats[rxr].tpa_aborts,
710 static char *bnxt_chip_type[] = {
716 #define MAX_CHIP_TYPE 3
719 bnxt_package_ver_sysctl(SYSCTL_HANDLER_ARGS)
721 struct bnxt_softc *softc = arg1;
722 struct iflib_dma_info dma_data;
726 char unk[] = "<unknown>";
730 uint16_t ordinal = BNX_DIR_ORDINAL_FIRST;
734 rc = bnxt_hwrm_nvm_find_dir_entry(softc, BNX_DIR_TYPE_PKG_LOG,
735 &ordinal, BNX_DIR_EXT_NONE, &index, false,
736 HWRM_NVM_FIND_DIR_ENTRY_INPUT_OPT_ORDINAL_EQ,
737 &data_len, NULL, NULL);
738 dma_data.idi_vaddr = NULL;
739 if (rc == 0 && data_len) {
740 rc = iflib_dma_alloc(softc->ctx, data_len, &dma_data,
743 rc = bnxt_hwrm_nvm_read(softc, index, 0, data_len,
746 pkglog = dma_data.idi_vaddr;
747 /* NULL terminate (removes last \n) */
748 pkglog[data_len-1] = 0;
750 /* Set p = start of last line */
751 p = strrchr(pkglog, '\n');
755 /* Now find the correct tab delimited field */
756 for (field = 0, next = p,
757 p = strsep(&next, "\t");
759 BNX_PKG_LOG_FIELD_IDX_PKG_VERSION && p;
760 p = strsep(&next, "\t")) {
763 if (field == BNX_PKG_LOG_FIELD_IDX_PKG_VERSION)
768 dma_data.idi_vaddr = NULL;
771 rc = sysctl_handle_string(oidp, buf, 0, req);
772 if (dma_data.idi_vaddr)
773 iflib_dma_free(&dma_data);
778 bnxt_hwrm_min_ver_sysctl(SYSCTL_HANDLER_ARGS)
780 struct bnxt_softc *softc = arg1;
785 sprintf(buf, "%hhu.%hhu.%hhu", softc->ver_info->hwrm_min_major,
786 softc->ver_info->hwrm_min_minor, softc->ver_info->hwrm_min_update);
788 rc = sysctl_handle_string(oidp, buf, sizeof(buf), req);
789 if (rc || req->newptr == NULL)
791 if (sscanf(buf, "%hhu.%hhu.%hhu%*c", &newver[0], &newver[1],
794 softc->ver_info->hwrm_min_major = newver[0];
795 softc->ver_info->hwrm_min_minor = newver[1];
796 softc->ver_info->hwrm_min_update = newver[2];
797 bnxt_check_hwrm_version(softc);
803 bnxt_create_ver_sysctls(struct bnxt_softc *softc)
805 struct bnxt_ver_info *vi = softc->ver_info;
806 struct sysctl_oid *oid = vi->ver_oid;
811 SYSCTL_ADD_STRING(&vi->ver_ctx, SYSCTL_CHILDREN(oid), OID_AUTO,
812 "hwrm_if", CTLFLAG_RD, vi->hwrm_if_ver, 0,
813 "HWRM interface version");
814 SYSCTL_ADD_STRING(&vi->ver_ctx, SYSCTL_CHILDREN(oid), OID_AUTO,
815 "driver_hwrm_if", CTLFLAG_RD, vi->driver_hwrm_if_ver, 0,
816 "HWRM firmware version");
817 SYSCTL_ADD_STRING(&vi->ver_ctx, SYSCTL_CHILDREN(oid), OID_AUTO,
818 "hwrm_fw", CTLFLAG_RD, vi->hwrm_fw_ver, 0,
819 "HWRM firmware version");
820 SYSCTL_ADD_STRING(&vi->ver_ctx, SYSCTL_CHILDREN(oid), OID_AUTO,
821 "mgmt_fw", CTLFLAG_RD, vi->mgmt_fw_ver, 0,
822 "management firmware version");
823 SYSCTL_ADD_STRING(&vi->ver_ctx, SYSCTL_CHILDREN(oid), OID_AUTO,
824 "netctrl_fw", CTLFLAG_RD, vi->netctrl_fw_ver, 0,
825 "network control firmware version");
826 SYSCTL_ADD_STRING(&vi->ver_ctx, SYSCTL_CHILDREN(oid), OID_AUTO,
827 "roce_fw", CTLFLAG_RD, vi->roce_fw_ver, 0,
828 "RoCE firmware version");
829 SYSCTL_ADD_STRING(&vi->ver_ctx, SYSCTL_CHILDREN(oid), OID_AUTO,
830 "phy", CTLFLAG_RD, vi->phy_ver, 0,
832 SYSCTL_ADD_STRING(&vi->ver_ctx, SYSCTL_CHILDREN(oid), OID_AUTO,
833 "hwrm_fw_name", CTLFLAG_RD, vi->hwrm_fw_name, 0,
834 "HWRM firmware name");
835 SYSCTL_ADD_STRING(&vi->ver_ctx, SYSCTL_CHILDREN(oid), OID_AUTO,
836 "mgmt_fw_name", CTLFLAG_RD, vi->mgmt_fw_name, 0,
837 "management firmware name");
838 SYSCTL_ADD_STRING(&vi->ver_ctx, SYSCTL_CHILDREN(oid), OID_AUTO,
839 "netctrl_fw_name", CTLFLAG_RD, vi->netctrl_fw_name, 0,
840 "network control firmware name");
841 SYSCTL_ADD_STRING(&vi->ver_ctx, SYSCTL_CHILDREN(oid), OID_AUTO,
842 "roce_fw_name", CTLFLAG_RD, vi->roce_fw_name, 0,
843 "RoCE firmware name");
844 SYSCTL_ADD_STRING(&vi->ver_ctx, SYSCTL_CHILDREN(oid), OID_AUTO,
845 "phy_vendor", CTLFLAG_RD, vi->phy_vendor, 0,
847 SYSCTL_ADD_STRING(&vi->ver_ctx, SYSCTL_CHILDREN(oid), OID_AUTO,
848 "phy_partnumber", CTLFLAG_RD, vi->phy_partnumber, 0,
849 "PHY vendor part number");
850 SYSCTL_ADD_U16(&vi->ver_ctx, SYSCTL_CHILDREN(oid), OID_AUTO,
851 "chip_num", CTLFLAG_RD, &vi->chip_num, 0, "chip number");
852 SYSCTL_ADD_U8(&vi->ver_ctx, SYSCTL_CHILDREN(oid), OID_AUTO,
853 "chip_rev", CTLFLAG_RD, &vi->chip_rev, 0, "chip revision");
854 SYSCTL_ADD_U8(&vi->ver_ctx, SYSCTL_CHILDREN(oid), OID_AUTO,
855 "chip_metal", CTLFLAG_RD, &vi->chip_metal, 0, "chip metal number");
856 SYSCTL_ADD_U8(&vi->ver_ctx, SYSCTL_CHILDREN(oid), OID_AUTO,
857 "chip_bond_id", CTLFLAG_RD, &vi->chip_bond_id, 0,
859 SYSCTL_ADD_STRING(&vi->ver_ctx, SYSCTL_CHILDREN(oid), OID_AUTO,
860 "chip_type", CTLFLAG_RD, vi->chip_type > MAX_CHIP_TYPE ?
861 bnxt_chip_type[MAX_CHIP_TYPE] : bnxt_chip_type[vi->chip_type], 0,
862 "RoCE firmware name");
863 SYSCTL_ADD_PROC(&vi->ver_ctx, SYSCTL_CHILDREN(oid), OID_AUTO,
864 "package_ver", CTLTYPE_STRING|CTLFLAG_RD, softc, 0,
865 bnxt_package_ver_sysctl, "A",
866 "currently installed package version");
867 SYSCTL_ADD_PROC(&vi->ver_ctx, SYSCTL_CHILDREN(oid), OID_AUTO,
868 "hwrm_min_ver", CTLTYPE_STRING|CTLFLAG_RWTUN, softc, 0,
869 bnxt_hwrm_min_ver_sysctl, "A",
870 "minimum hwrm API vesion to support");
876 bnxt_create_nvram_sysctls(struct bnxt_nvram_info *ni)
878 struct sysctl_oid *oid = ni->nvm_oid;
883 SYSCTL_ADD_U16(&ni->nvm_ctx, SYSCTL_CHILDREN(oid), OID_AUTO,
884 "mfg_id", CTLFLAG_RD, &ni->mfg_id, 0, "manufacturer id");
885 SYSCTL_ADD_U16(&ni->nvm_ctx, SYSCTL_CHILDREN(oid), OID_AUTO,
886 "device_id", CTLFLAG_RD, &ni->device_id, 0, "device id");
887 SYSCTL_ADD_U32(&ni->nvm_ctx, SYSCTL_CHILDREN(oid), OID_AUTO,
888 "sector_size", CTLFLAG_RD, &ni->sector_size, 0, "sector size");
889 SYSCTL_ADD_U32(&ni->nvm_ctx, SYSCTL_CHILDREN(oid), OID_AUTO,
890 "size", CTLFLAG_RD, &ni->size, 0, "nvram total size");
891 SYSCTL_ADD_U32(&ni->nvm_ctx, SYSCTL_CHILDREN(oid), OID_AUTO,
892 "reserved_size", CTLFLAG_RD, &ni->reserved_size, 0,
893 "total reserved space");
894 SYSCTL_ADD_U32(&ni->nvm_ctx, SYSCTL_CHILDREN(oid), OID_AUTO,
895 "available_size", CTLFLAG_RD, &ni->available_size, 0,
896 "total available space");
902 bnxt_rss_key_sysctl(SYSCTL_HANDLER_ARGS)
904 struct bnxt_softc *softc = arg1;
905 char buf[HW_HASH_KEY_SIZE*2+1] = {0};
910 for (p = buf, i=0; i<HW_HASH_KEY_SIZE; i++)
911 p += sprintf(p, "%02x", softc->vnic_info.rss_hash_key[i]);
913 rc = sysctl_handle_string(oidp, buf, sizeof(buf), req);
914 if (rc || req->newptr == NULL)
917 if (strspn(buf, "0123456789abcdefABCDEF") != (HW_HASH_KEY_SIZE * 2))
920 for (p = buf, i=0; i<HW_HASH_KEY_SIZE; i++) {
921 if (sscanf(p, "%02hhx", &softc->vnic_info.rss_hash_key[i]) != 1)
926 if (if_getdrvflags(iflib_get_ifp(softc->ctx)) & IFF_DRV_RUNNING)
927 bnxt_hwrm_rss_cfg(softc, &softc->vnic_info,
928 softc->vnic_info.rss_hash_type);
933 static const char *bnxt_hash_types[] = {"ipv4", "tcp_ipv4", "udp_ipv4", "ipv6",
934 "tcp_ipv6", "udp_ipv6", NULL};
936 static int bnxt_get_rss_type_str_bit(char *str)
940 for (i=0; bnxt_hash_types[i]; i++)
941 if (strcmp(bnxt_hash_types[i], str) == 0)
948 bnxt_rss_type_sysctl(SYSCTL_HANDLER_ARGS)
950 struct bnxt_softc *softc = arg1;
958 for (type = softc->vnic_info.rss_hash_type; type;
961 if (bit >= sizeof(bnxt_hash_types) / sizeof(const char *))
963 if (type != softc->vnic_info.rss_hash_type)
965 strcat(buf, bnxt_hash_types[bit]);
968 rc = sysctl_handle_string(oidp, buf, sizeof(buf), req);
969 if (rc || req->newptr == NULL)
972 for (type = 0, next = buf, p = strsep(&next, " ,"); p;
973 p = strsep(&next, " ,")) {
974 bit = bnxt_get_rss_type_str_bit(p);
979 if (type != softc->vnic_info.rss_hash_type) {
980 softc->vnic_info.rss_hash_type = type;
981 if (if_getdrvflags(iflib_get_ifp(softc->ctx)) & IFF_DRV_RUNNING)
982 bnxt_hwrm_rss_cfg(softc, &softc->vnic_info,
983 softc->vnic_info.rss_hash_type);
990 bnxt_rx_stall_sysctl(SYSCTL_HANDLER_ARGS) {
991 struct bnxt_softc *softc = arg1;
998 val = (bool)(softc->vnic_info.flags & BNXT_VNIC_FLAG_BD_STALL);
999 rc = sysctl_handle_int(oidp, &val, 0, req);
1000 if (rc || !req->newptr)
1004 softc->vnic_info.flags |= BNXT_VNIC_FLAG_BD_STALL;
1006 softc->vnic_info.flags &= ~BNXT_VNIC_FLAG_BD_STALL;
1008 if (if_getdrvflags(iflib_get_ifp(softc->ctx)) & IFF_DRV_RUNNING)
1009 rc = bnxt_hwrm_vnic_cfg(softc, &softc->vnic_info);
1015 bnxt_vlan_strip_sysctl(SYSCTL_HANDLER_ARGS) {
1016 struct bnxt_softc *softc = arg1;
1023 val = (bool)(softc->vnic_info.flags & BNXT_VNIC_FLAG_VLAN_STRIP);
1024 rc = sysctl_handle_int(oidp, &val, 0, req);
1025 if (rc || !req->newptr)
1029 softc->vnic_info.flags |= BNXT_VNIC_FLAG_VLAN_STRIP;
1031 softc->vnic_info.flags &= ~BNXT_VNIC_FLAG_VLAN_STRIP;
1033 if (if_getdrvflags(iflib_get_ifp(softc->ctx)) & IFF_DRV_RUNNING)
1034 rc = bnxt_hwrm_vnic_cfg(softc, &softc->vnic_info);
1040 bnxt_set_coal_rx_usecs(SYSCTL_HANDLER_ARGS) {
1041 struct bnxt_softc *softc = arg1;
1048 val = softc->rx_coal_usecs;
1049 rc = sysctl_handle_int(oidp, &val, 0, req);
1050 if (rc || !req->newptr)
1053 softc->rx_coal_usecs = val;
1054 rc = bnxt_hwrm_set_coal(softc);
1060 bnxt_set_coal_rx_frames(SYSCTL_HANDLER_ARGS) {
1061 struct bnxt_softc *softc = arg1;
1068 val = softc->rx_coal_frames;
1069 rc = sysctl_handle_int(oidp, &val, 0, req);
1070 if (rc || !req->newptr)
1073 softc->rx_coal_frames = val;
1074 rc = bnxt_hwrm_set_coal(softc);
1080 bnxt_set_coal_rx_usecs_irq(SYSCTL_HANDLER_ARGS) {
1081 struct bnxt_softc *softc = arg1;
1088 val = softc->rx_coal_usecs_irq;
1089 rc = sysctl_handle_int(oidp, &val, 0, req);
1090 if (rc || !req->newptr)
1093 softc->rx_coal_usecs_irq = val;
1094 rc = bnxt_hwrm_set_coal(softc);
1100 bnxt_set_coal_rx_frames_irq(SYSCTL_HANDLER_ARGS) {
1101 struct bnxt_softc *softc = arg1;
1108 val = softc->rx_coal_frames_irq;
1109 rc = sysctl_handle_int(oidp, &val, 0, req);
1110 if (rc || !req->newptr)
1113 softc->rx_coal_frames_irq = val;
1114 rc = bnxt_hwrm_set_coal(softc);
1120 bnxt_set_coal_tx_usecs(SYSCTL_HANDLER_ARGS) {
1121 struct bnxt_softc *softc = arg1;
1128 val = softc->tx_coal_usecs;
1129 rc = sysctl_handle_int(oidp, &val, 0, req);
1130 if (rc || !req->newptr)
1133 softc->tx_coal_usecs = val;
1134 rc = bnxt_hwrm_set_coal(softc);
1140 bnxt_set_coal_tx_frames(SYSCTL_HANDLER_ARGS) {
1141 struct bnxt_softc *softc = arg1;
1148 val = softc->tx_coal_frames;
1149 rc = sysctl_handle_int(oidp, &val, 0, req);
1150 if (rc || !req->newptr)
1153 softc->tx_coal_frames = val;
1154 rc = bnxt_hwrm_set_coal(softc);
1160 bnxt_set_coal_tx_usecs_irq(SYSCTL_HANDLER_ARGS) {
1161 struct bnxt_softc *softc = arg1;
1168 val = softc->tx_coal_usecs_irq;
1169 rc = sysctl_handle_int(oidp, &val, 0, req);
1170 if (rc || !req->newptr)
1173 softc->tx_coal_usecs_irq = val;
1174 rc = bnxt_hwrm_set_coal(softc);
1180 bnxt_set_coal_tx_frames_irq(SYSCTL_HANDLER_ARGS) {
1181 struct bnxt_softc *softc = arg1;
1188 val = softc->tx_coal_frames_irq;
1189 rc = sysctl_handle_int(oidp, &val, 0, req);
1190 if (rc || !req->newptr)
1193 softc->tx_coal_frames_irq = val;
1194 rc = bnxt_hwrm_set_coal(softc);
1200 bnxt_create_config_sysctls_pre(struct bnxt_softc *softc)
1202 struct sysctl_ctx_list *ctx = device_get_sysctl_ctx(softc->dev);
1203 struct sysctl_oid_list *children;
1205 children = SYSCTL_CHILDREN(device_get_sysctl_tree(softc->dev));;
1207 SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "rss_key",
1208 CTLTYPE_STRING|CTLFLAG_RWTUN, softc, 0, bnxt_rss_key_sysctl, "A",
1210 SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "rss_type",
1211 CTLTYPE_STRING|CTLFLAG_RWTUN, softc, 0, bnxt_rss_type_sysctl, "A",
1213 SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "rx_stall",
1214 CTLTYPE_INT|CTLFLAG_RWTUN, softc, 0, bnxt_rx_stall_sysctl, "I",
1215 "buffer rx packets in hardware until the host posts new buffers");
1216 SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "vlan_strip",
1217 CTLTYPE_INT|CTLFLAG_RWTUN, softc, 0, bnxt_vlan_strip_sysctl, "I",
1218 "strip VLAN tag in the RX path");
1219 SYSCTL_ADD_STRING(ctx, children, OID_AUTO, "if_name", CTLFLAG_RD,
1220 iflib_get_ifp(softc->ctx)->if_xname, 0, "interface name");
1222 SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "intr_coal_rx_usecs",
1223 CTLTYPE_INT|CTLFLAG_RWTUN, softc, 0, bnxt_set_coal_rx_usecs,
1224 "I", "interrupt coalescing Rx Usecs");
1225 SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "intr_coal_rx_frames",
1226 CTLTYPE_INT|CTLFLAG_RWTUN, softc, 0, bnxt_set_coal_rx_frames,
1227 "I", "interrupt coalescing Rx Frames");
1228 SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "intr_coal_rx_usecs_irq",
1229 CTLTYPE_INT|CTLFLAG_RWTUN, softc, 0, bnxt_set_coal_rx_usecs_irq,
1230 "I", "interrupt coalescing Rx Usecs IRQ");
1231 SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "intr_coal_rx_frames_irq",
1232 CTLTYPE_INT|CTLFLAG_RWTUN, softc, 0, bnxt_set_coal_rx_frames_irq,
1233 "I", "interrupt coalescing Rx Frames IRQ");
1234 SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "intr_coal_tx_usecs",
1235 CTLTYPE_INT|CTLFLAG_RWTUN, softc, 0, bnxt_set_coal_tx_usecs,
1236 "I", "interrupt coalescing Tx Usces");
1237 SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "intr_coal_tx_frames",
1238 CTLTYPE_INT|CTLFLAG_RWTUN, softc, 0, bnxt_set_coal_tx_frames,
1239 "I", "interrupt coalescing Tx Frames");
1240 SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "intr_coal_tx_usecs_irq",
1241 CTLTYPE_INT|CTLFLAG_RWTUN, softc, 0, bnxt_set_coal_tx_usecs_irq,
1242 "I", "interrupt coalescing Tx Usecs IRQ");
1243 SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "intr_coal_tx_frames_irq",
1244 CTLTYPE_INT|CTLFLAG_RWTUN, softc, 0, bnxt_set_coal_tx_frames_irq,
1245 "I", "interrupt coalescing Tx Frames IRQ");
1250 #define BNXT_HW_LRO_FN(fn_name, arg) \
1252 fn_name(SYSCTL_HANDLER_ARGS) { \
1253 struct bnxt_softc *softc = arg1; \
1257 if (softc == NULL) \
1260 val = softc->hw_lro.arg; \
1261 rc = sysctl_handle_int(oidp, &val, 0, req); \
1262 if (rc || !req->newptr) \
1265 if ((if_getdrvflags(iflib_get_ifp(softc->ctx)) & IFF_DRV_RUNNING)) \
1268 softc->hw_lro.arg = val; \
1269 bnxt_validate_hw_lro_settings(softc); \
1270 rc = bnxt_hwrm_vnic_tpa_cfg(softc); \
1275 BNXT_HW_LRO_FN(bnxt_hw_lro_enable_disable, enable)
1276 BNXT_HW_LRO_FN(bnxt_hw_lro_set_mode, is_mode_gro)
1277 BNXT_HW_LRO_FN(bnxt_hw_lro_set_max_agg_segs, max_agg_segs)
1278 BNXT_HW_LRO_FN(bnxt_hw_lro_set_max_aggs, max_aggs)
1279 BNXT_HW_LRO_FN(bnxt_hw_lro_set_min_agg_len, min_agg_len)
1281 #define BNXT_FLOW_CTRL_FN(fn_name, arg) \
1283 fn_name(SYSCTL_HANDLER_ARGS) { \
1284 struct bnxt_softc *softc = arg1; \
1288 if (softc == NULL) \
1291 val = softc->link_info.flow_ctrl.arg; \
1292 rc = sysctl_handle_int(oidp, &val, 0, req); \
1293 if (rc || !req->newptr) \
1299 if (softc->link_info.flow_ctrl.arg != val) { \
1300 softc->link_info.flow_ctrl.arg = val; \
1301 rc = bnxt_hwrm_set_link_setting(softc, true, false, false);\
1302 rc = bnxt_hwrm_port_phy_qcfg(softc); \
1308 BNXT_FLOW_CTRL_FN(bnxt_flow_ctrl_tx, tx)
1309 BNXT_FLOW_CTRL_FN(bnxt_flow_ctrl_rx, rx)
1310 BNXT_FLOW_CTRL_FN(bnxt_flow_ctrl_autoneg, autoneg)
1312 bnxt_create_pause_fc_sysctls(struct bnxt_softc *softc)
1314 struct sysctl_oid *oid = softc->flow_ctrl_oid;
1319 SYSCTL_ADD_PROC(&softc->flow_ctrl_ctx, SYSCTL_CHILDREN(oid), OID_AUTO,
1320 "tx", CTLTYPE_INT|CTLFLAG_RWTUN, softc, 0,
1321 bnxt_flow_ctrl_tx, "A",
1322 "Enable or Disable Tx Flow Ctrl: 0 / 1");
1324 SYSCTL_ADD_PROC(&softc->flow_ctrl_ctx, SYSCTL_CHILDREN(oid), OID_AUTO,
1325 "rx", CTLTYPE_INT|CTLFLAG_RWTUN, softc, 0,
1326 bnxt_flow_ctrl_rx, "A",
1327 "Enable or Disable Tx Flow Ctrl: 0 / 1");
1329 SYSCTL_ADD_PROC(&softc->flow_ctrl_ctx, SYSCTL_CHILDREN(oid), OID_AUTO,
1330 "autoneg", CTLTYPE_INT|CTLFLAG_RWTUN, softc, 0,
1331 bnxt_flow_ctrl_autoneg, "A",
1332 "Enable or Disable Autoneg Flow Ctrl: 0 / 1");
1338 bnxt_create_hw_lro_sysctls(struct bnxt_softc *softc)
1340 struct sysctl_oid *oid = softc->hw_lro_oid;
1345 SYSCTL_ADD_PROC(&softc->hw_lro_ctx, SYSCTL_CHILDREN(oid), OID_AUTO,
1346 "enable", CTLTYPE_INT|CTLFLAG_RWTUN, softc, 0,
1347 bnxt_hw_lro_enable_disable, "A",
1348 "Enable or Disable HW LRO: 0 / 1");
1350 SYSCTL_ADD_PROC(&softc->hw_lro_ctx, SYSCTL_CHILDREN(oid), OID_AUTO,
1351 "gro_mode", CTLTYPE_INT|CTLFLAG_RWTUN, softc, 0,
1352 bnxt_hw_lro_set_mode, "A",
1353 "Set mode: 1 = GRO mode, 0 = RSC mode");
1355 SYSCTL_ADD_PROC(&softc->hw_lro_ctx, SYSCTL_CHILDREN(oid), OID_AUTO,
1356 "max_agg_segs", CTLTYPE_INT|CTLFLAG_RWTUN, softc, 0,
1357 bnxt_hw_lro_set_max_agg_segs, "A",
1358 "Set Max Agg Seg Value (unit is Log2): "
1359 "0 (= 1 seg) / 1 (= 2 segs) / ... / 31 (= 2^31 segs)");
1361 SYSCTL_ADD_PROC(&softc->hw_lro_ctx, SYSCTL_CHILDREN(oid), OID_AUTO,
1362 "max_aggs", CTLTYPE_INT|CTLFLAG_RWTUN, softc, 0,
1363 bnxt_hw_lro_set_max_aggs, "A",
1364 "Set Max Aggs Value (unit is Log2): "
1365 "0 (= 1 agg) / 1 (= 2 aggs) / ... / 7 (= 2^7 segs)");
1367 SYSCTL_ADD_PROC(&softc->hw_lro_ctx, SYSCTL_CHILDREN(oid), OID_AUTO,
1368 "min_agg_len", CTLTYPE_INT|CTLFLAG_RWTUN, softc, 0,
1369 bnxt_hw_lro_set_min_agg_len, "A",
1370 "Min Agg Len: 1 to 9000");
1375 bnxt_vlan_only_sysctl(SYSCTL_HANDLER_ARGS) {
1376 struct bnxt_softc *softc = arg1;
1383 val = softc->vnic_info.vlan_only;
1384 rc = sysctl_handle_int(oidp, &val, 0, req);
1385 if (rc || !req->newptr)
1391 if (val != softc->vnic_info.vlan_only) {
1392 softc->vnic_info.vlan_only = val;
1393 if (if_getdrvflags(iflib_get_ifp(softc->ctx)) & IFF_DRV_RUNNING)
1394 rc = bnxt_hwrm_cfa_l2_set_rx_mask(softc,
1402 bnxt_create_config_sysctls_post(struct bnxt_softc *softc)
1404 struct sysctl_ctx_list *ctx = device_get_sysctl_ctx(softc->dev);
1405 struct sysctl_oid_list *children;
1407 children = SYSCTL_CHILDREN(device_get_sysctl_tree(softc->dev));;
1409 SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "vlan_only",
1410 CTLTYPE_INT|CTLFLAG_RWTUN, softc, 0, bnxt_vlan_only_sysctl, "I",
1411 "require vlan tag on received packets when vlan is enabled");