1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
|
<table class="head">
<tr>
<td class="head-ltitle">BNXT(4)</td>
<td class="head-vol">Device Drivers Manual</td>
<td class="head-rtitle">BNXT(4)</td>
</tr>
</table>
<div class="manual-text">
<section class="Sh">
<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
<p class="Pp"><code class="Nm">bnxt</code> — <span class="Nd">Broadcom
NetXtreme family 10Gb to 400Gb Ethernet driver</span></p>
</section>
<section class="Sh">
<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
<p class="Pp">To compile this driver into the kernel, place the following lines
in your kernel configuration file:</p>
<div class="Bd Pp Bd-indent"><code class="Cd">device iflib</code>
<br/>
<code class="Cd">device bnxt</code></div>
<p class="Pp">Alternatively, to load the driver as a module at boot time, place
the following line in <a class="Xr">loader.conf(5)</a>:</p>
<div class="Bd Pp Bd-indent Li">
<pre>if_bnxt_load="YES"</pre>
</div>
</section>
<section class="Sh">
<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
<p class="Pp">The <code class="Nm">bnxt</code> driver provides support for PCIe
NICs based on the Broadcom BCM573XX, BCM574XX, BCM575XX, and BCM576XX
Ethernet controllers.</p>
<p class="Pp">For more information on configuring this device, see
<a class="Xr">ifconfig(8)</a>.</p>
</section>
<section class="Sh">
<h1 class="Sh" id="HARDWARE"><a class="permalink" href="#HARDWARE">HARDWARE</a></h1>
<p class="Pp">The <code class="Nm">bnxt</code> driver supports the following
Broadcom 10Gb to 400Gb Ethernet controllers:</p>
<p class="Pp"></p>
<ul class="Bl-bullet Bl-compact">
<li>Broadcom BCM57301 NetXtreme-C 10Gb Ethernet Controller</li>
<li>Broadcom BCM57302 NetXtreme-C 10Gb/25Gb Ethernet Controller</li>
<li>Broadcom BCM57304 NetXtreme-C 10Gb/25Gb/40Gb/50Gb Ethernet Controller</li>
<li>Broadcom BCM57304 NetXtreme-C Ethernet Virtual Function</li>
<li>Broadcom BCM57314 NetXtreme-C Ethernet Virtual Function</li>
<li>Broadcom BCM57402 NetXtreme-E 10Gb Ethernet Controller</li>
<li>Broadcom BCM57402 NetXtreme-E Ethernet Partition</li>
<li>Broadcom BCM57404 NetXtreme-E 10Gb/25Gb Ethernet Controller</li>
<li>Broadcom BCM57404 NetXtreme-E Ethernet Virtual Function</li>
<li>Broadcom BCM57404 NetXtreme-E Partition</li>
<li>Broadcom BCM57406 NetXtreme-E 10GBASE-T Ethernet Controller</li>
<li>Broadcom BCM57406 NetXtreme-E Partition</li>
<li>Broadcom BCM57407 NetXtreme-E 10GBase-T Ethernet Controller</li>
<li>Broadcom BCM57407 NetXtreme-E 25Gb Ethernet Controller</li>
<li>Broadcom BCM57407 NetXtreme-E Partition</li>
<li>Broadcom BCM57412 NetXtreme-E Partition</li>
<li>Broadcom BCM57414 NetXtreme-E Ethernet Virtual Function</li>
<li>Broadcom BCM57414 NetXtreme-E Partition</li>
<li>Broadcom BCM57416 NetXtreme-E Partition</li>
<li>Broadcom BCM57417 NetXtreme-E Ethernet Partition</li>
<li>Broadcom BCM57454 NetXtreme-E 10Gb/25Gb/40Gb/50Gb/100Gb Ethernet</li>
<li>Broadcom BCM57502 NetXtreme-E 10Gb/25Gb/50Gb Ethernet</li>
<li>Broadcom N425 BCM57504 NetXtreme-E 10Gb/25Gb Ethernet</li>
<li>Broadcom P425 BCM57504 NetXtreme-E 10Gb/25Gb Ethernet</li>
<li>Broadcom N1100 BCM57504 NetXtreme-E 10Gb/25Gb/50Gb/100Gb Ethernet</li>
<li>Broadcom N2100 BCM57508 Thor 10Gb/25Gb/50Gb/100Gb Ethernet</li>
<li>Broadcom P2100 BCM57508 Thor 10Gb/25Gb/50Gb/100Gb Ethernet</li>
<li>Broadcom N2200 BCM57608 Thor 2 10Gb/25Gb/50Gb/100Gb/200Gb Ethernet</li>
<li>Broadcom P2200 BCM57608 Thor 2 10Gb/25Gb/50Gb/100Gb/200Gb Ethernet</li>
<li>Broadcom N1400 BCM57608 Thor 2 25Gb/50Gb/100Gb/200Gb/400Gb Ethernet</li>
<li>Broadcom P1400 BCM57608 Thor 2 25Gb/50Gb/100Gb/200Gb/400Gb Ethernet</li>
</ul>
</section>
<section class="Sh">
<h1 class="Sh" id="SYSCTL_VARIABLES"><a class="permalink" href="#SYSCTL_VARIABLES">SYSCTL
VARIABLES</a></h1>
<p class="Pp">These variables must be set before loading the driver, either via
<a class="Xr">loader.conf(5)</a> or through the use of
<a class="Xr">kenv(1)</a>. These are provided by the
<a class="Xr">iflib(4)</a> framework, and might be better documented
there.</p>
<dl class="Bl-tag">
<dt id="dev.bnxt.X.iflib.override_nrxds"><var class="Va">dev.bnxt.X.iflib.override_nrxds</var></dt>
<dd>Override the number of RX descriptors for each queue. The value is a comma
separated list of three positive integers: the size of the completion
ring, the size of the receive ring, and the size of the aggregation ring
respectively. The completion ring should be at least the size of the
aggregation ring plus four times the size of the receive ring. These
numbers must be powers of two, and zero means to use the default. Defaults
to 0,0,0.</dd>
<dt id="dev.bnxt.X.iflib.override_ntxds"><var class="Va">dev.bnxt.X.iflib.override_ntxds</var></dt>
<dd>Override the number of TX descriptors for each queue. The value is a comma
separated list of two positive integers: the size of the completion ring,
and the size of the transmit ring respectively. The completion ring should
be at least twice the size of the transmit ring. These numbers must be
powers of two, and zero means to use the default. Defaults to 0,0.</dd>
<dt id="dev.bnxt.X.iflib.override_qs_enable"><var class="Va">dev.bnxt.X.iflib.override_qs_enable</var></dt>
<dd>When set, allows the number of transmit and receive queues to be
different. If not set, the lower of the number of TX or RX queues will be
used for both.</dd>
<dt id="dev.bnxt.X.iflib.override_nrxqs"><var class="Va">dev.bnxt.X.iflib.override_nrxqs</var></dt>
<dd>Set the number of RX queues. If zero, the number of RX queues is derived
from the number of cores on the socket connected to the controller.
Defaults to 0.</dd>
<dt id="dev.bnxt.X.iflib.override_ntxqs"><var class="Va">dev.bnxt.X.iflib.override_ntxqs</var></dt>
<dd>Set the number of TX queues. If zero, the number of TX queues is derived
from the number of cores on the socket connected to the controller.</dd>
</dl>
<p class="Pp">These <a class="Xr">sysctl(8)</a> variables can be changed at any
time:</p>
<dl class="Bl-tag">
<dt id="dev.bnxt.X.vlan_only"><var class="Va">dev.bnxt.X.vlan_only</var></dt>
<dd>Require that incoming frames must have a VLAN tag on them that matches one
that is configured for the NIC. Normally, both frames that have a matching
VLAN tag and frames that have no VLAN tag are accepted. Defaults to
0.</dd>
<dt id="dev.bnxt.X.vlan_strip"><var class="Va">dev.bnxt.X.vlan_strip</var></dt>
<dd>When non-zero the NIC strips VLAN tags on receive. Defaults to 0.</dd>
<dt id="dev.bnxt.X.rx_stall"><var class="Va">dev.bnxt.X.rx_stall</var></dt>
<dd>Enable buffering rather than dropping frames when there are no available
host RX buffers for DMA. Defaults to 0.</dd>
<dt id="dev.bnxt.X.rss_type"><var class="Va">dev.bnxt.X.rss_type</var></dt>
<dd>Comma-separated list of RSS hash types to support. Default is all types.
Defaults to ipv4,tcp_ipv4,udp_ipv4,ipv6,tcp_ipv6,udp_ipv6.</dd>
<dt id="dev.bnxt.X.rss_key"><var class="Va">dev.bnxt.X.rss_key</var></dt>
<dd>Current RSS key. Defaults to a randomly generated value which is generated
for each device during attach.</dd>
<dt id="dev.bnxt.X.ver.hwrm_min_ver"><var class="Va">dev.bnxt.X.ver.hwrm_min_ver</var></dt>
<dd>Minimum HWRM (HardWare Resource Manager) firmware API to support. If the
firmware implements an older version, a warning will be printed, and the
firmware should be upgraded. Defaults to 1.2.2.</dd>
</dl>
<p class="Pp">These <a class="Xr">sysctl(8)</a> variables are read-only:</p>
<dl class="Bl-tag">
<dt id="dev.bnxt.X.if_name"><var class="Va">dev.bnxt.X.if_name</var></dt>
<dd>Current interface name of the device. This will normally be
<var class="Va">bnxtX</var>, but this can be changed using
<code class="Cm">ifconfig name</code>. This sysctl allows correlating an
interface with a child of <var class="Va">dev.bnxt</var>.</dd>
<dt id="dev.bnxt.X.nvram.*"><var class="Va">dev.bnxt.X.nvram.*</var></dt>
<dd>Information about the NVRAM device which contains the device
firmware.</dd>
<dt id="dev.bnxt.X.ver.*"><var class="Va">dev.bnxt.X.ver.*</var></dt>
<dd>Version-related information about the device and firmware:</dd>
<dt id="dev.bnxt.X.ver.hwrm_if"><var class="Va">dev.bnxt.X.ver.hwrm_if</var></dt>
<dd>Supported HWRM API version of the currently running firmware.</dd>
<dt id="dev.bnxt.X.ver.driver_hwrm_if"><var class="Va">dev.bnxt.X.ver.driver_hwrm_if</var></dt>
<dd>HWRM API version the driver was built to support.</dd>
<dt id="dev.bnxt.X.hwstats.*"><var class="Va">dev.bnxt.X.hwstats.*</var></dt>
<dd>Per-queue statistics tracked by the hardware.</dd>
<dt id="dev.bnxt.X.hwstats.port_stats.*"><var class="Va">dev.bnxt.X.hwstats.port_stats.*</var></dt>
<dd>Per-port statistics tracked by the hardware.</dd>
<dt id="dev.bnxt.X.hwstats.rxq0.drop_pkts"><var class="Va">dev.bnxt.X.hwstats.rxq0.drop_pkts</var></dt>
<dd>Number of packets dropped by hardware on queue zero. This number might
seem high, but the count includes packets dropped due to incorrect
destination MAC, unsubscribed multicast address, and other normal reasons
to ignore Ethernet frames.</dd>
<dt id="dev.bnxt.X.hwstats.rxq0.tpa_*"><var class="Va">dev.bnxt.X.hwstats.rxq0.tpa_*</var></dt>
<dd>statistics related to HW LRO.</dd>
<dt id="dev.bnxt.X.hw_lro.*"><var class="Va">dev.bnxt.X.hw_lro.*</var></dt>
<dd>Enable / Disable HW LRO feature. Defaults to disable. Enabling HW LRO
could cause issues when forwarding is enabled on host.</dd>
<dt id="dev.bnxt.X.fc"><var class="Va">dev.bnxt.X.fc</var></dt>
<dd>Enable / Disable Flow Control feature. Defaults to Enable</dd>
</dl>
</section>
<section class="Sh">
<h1 class="Sh" id="DIAGNOSTICS"><a class="permalink" href="#DIAGNOSTICS">DIAGNOSTICS</a></h1>
<dl class="Bl-diag">
<dt>bnxt%d: %s command returned %s error.</dt>
<dd>Device firmware rejected a command from the driver. There might be a
driver/firmware HWRM API mismatch.</dd>
<dt>bnxt%d: Timeout sending %s (timeout: %d) seq %d</dt>
<dd>Device firmware unresponsive. A PCI device reset is likely needed.</dd>
<dt>bnxt%d: Timeout sending %s (timeout: %d) msg {0x%x 0x%x} len:%d v: %d</dt>
<dd>Partial firmware response. A PCI device reset is likely needed.
<p class="Pp">As of this writing, the system must be rebooted to initiate a
PCI device reset.</p>
</dd>
</dl>
</section>
<section class="Sh">
<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
ALSO</a></h1>
<p class="Pp"><a class="Xr">altq(4)</a>, <a class="Xr">arp(4)</a>,
<a class="Xr">iflib(4)</a>, <a class="Xr">netintro(4)</a>,
<a class="Xr">ng_ether(4)</a>, <a class="Xr">vlan(4)</a>,
<a class="Xr">ifconfig(8)</a></p>
</section>
<section class="Sh">
<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
<p class="Pp">The <code class="Nm">bnxt</code> device driver first appeared in
<span class="Ux">FreeBSD 11.1</span>.</p>
</section>
<section class="Sh">
<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
<p class="Pp">The <code class="Nm">bnxt</code> driver was written by
<span class="An">Jack Vogel</span>
<<a class="Mt" href="mailto:jfvogel@gmail.com">jfvogel@gmail.com</a>>
and <span class="An">Stephen Hurd</span>
<<a class="Mt" href="mailto:shurd@freebsd.org">shurd@freebsd.org</a>>,
and is currently maintained by <span class="An">Broadcom Limited</span>
<<a class="Mt" href="mailto:freebsd.pdl@broadcom.com">freebsd.pdl@broadcom.com</a>>.</p>
</section>
</div>
<table class="foot">
<tr>
<td class="foot-date">December 10, 2025</td>
<td class="foot-os">FreeBSD 15.0</td>
</tr>
</table>
|