1 .\" Copyright (c) 2013 Broadcom Corporation. All rights reserved.
3 .\" Redistribution and use in source and binary forms, with or without
4 .\" modification, are permitted provided that the following conditions
7 .\" 1. Redistributions of source code must retain the above copyright
8 .\" notice, this list of conditions and the following disclaimer.
9 .\" 2. Redistributions in binary form must reproduce the above copyright
10 .\" notice, this list of conditions and the following disclaimer in the
11 .\" documentation and/or other materials provided with the distribution.
12 .\" 3. Neither the name of Broadcom Corporation nor the name of its contributors
13 .\" may be used to endorse or promote products derived from this software
14 .\" without specific prior written consent.
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.
35 .Nd Broadcom NetXtreme II Ethernet 10Gb PCIe adapter driver
37 To compile this driver into the kernel,
38 place the following lines in your
39 kernel configuration file:
40 .Bd -ragged -offset indent
44 Alternatively, to load the driver as a module at boot time, place the
47 .Bd -literal -offset indent
53 driver provides support for PCIe 10Gb Ethernet adapters based on the Broadcom
54 NetXtreme II family of 10Gb chips.
55 The driver supports Jumbo Frames, VLAN
56 tagging, checksum offload (IPv4, TCP, UDP, IPv6-TCP, IPv6-UDP), MSI-X
57 interrupts, TCP Segmentation Offload (TSO), Large Receive Offload (LRO), and
58 Receive Side Scaling (RSS).
62 driver provides support for various NICs based on the Broadcom NetXtreme II
63 family of 10Gb Ethernet controller chips, including the following:
67 Broadcom NetXtreme II BCM57710 10Gb
69 Broadcom NetXtreme II BCM57711 10Gb
71 Broadcom NetXtreme II BCM57711E 10Gb
73 Broadcom NetXtreme II BCM57712 10Gb
75 Broadcom NetXtreme II BCM57712-MF 10Gb
77 Broadcom NetXtreme II BCM57800 10Gb
79 Broadcom NetXtreme II BCM57800-MF 10Gb
81 Broadcom NetXtreme II BCM57810 10Gb
83 Broadcom NetXtreme II BCM57810-MF 10Gb
85 Broadcom NetXtreme II BCM57840 10Gb / 20Gb
87 Broadcom NetXtreme II BCM57840-MF 10Gb
90 There a number of configuration parameters that can be set to tweak the
92 These parameters can be set via the
94 file to take affect during the next system boot.
95 The following parameters affect
96 ALL instances of the driver.
97 .Bl -tag -width indent
101 Sets the default logging level of the driver.
102 See the Diagnostics and Debugging
103 section below for more details.
104 .It Va hw.bxe.interrupt_mode
107 Sets the default interrupt mode: 0=IRQ, 1=MSI, 2=MSIX.
109 allocation fails, the driver will roll back and attempt MSI allocation.
111 allocation fails, the driver will roll back and attempt fixed level IRQ
113 If IRQ allocation fails, then the driver load fails.
115 the driver attempts to allocate a vector for each queue in addition to one more
116 for default processing.
117 .It Va hw.bxe.queue_count
120 Sets the default number of fast path packet processing queues.
122 MSI/MSIX interrupt vector is allocated per-queue.
123 .It Va hw.bxe.max_rx_bufs
126 Sets the maximum number of receive buffers to allocate per-queue.
128 to allocate a receive buffer for every buffer descriptor.
130 equates to 4080 buffers per-queue which is the maximum value for this config
132 .It Va hw.bxe.hc_rx_ticks
135 Sets the number of ticks for host interrupt coalescing in the receive path.
136 .It Va hw.bxe.hc_tx_ticks
139 Sets the number of ticks for host interrupt coalescing in the transmit path.
140 .It Va hw.bxe.rx_budget
143 Sets the maximum number of receive packets to process in an interrupt.
145 budget is reached then the remaining/pending packets will be processed in a
147 .It Va hw.bxe.max_aggregation_size
150 Sets the maximum LRO aggregration byte size.
151 The higher the value the more
152 packets the hardware will aggregate.
157 Sets the PCI MRRS: -1=Auto, 0=128B, 1=256B, 2=512B, 3=1KB
158 .It Va hw.bxe.autogreeen
161 Set AutoGrEEEN: 0=HW_DEFAULT, 1=FORCE_ON, 2=FORCE_OFF
162 .It Va hw.bxe.udp_rss
165 Enable/Disable 4-tuple RSS for UDP: 0=DISABLED, 1=ENABLED
168 Special care must be taken when modifying the number of queues and receive
170 FreeBSD imposes a limit on the maximum number of
173 If buffer allocations fail, the interface initialization will fail
174 and the interface will not be usable.
175 The driver does not make a best effort
176 for buffer allocations.
177 It is an all or nothing effort.
181 allocation limit using
183 and view the current usage with
186 .Bd -literal -offset indent
188 # sysctl kern.ipc.nmbclusters
189 # sysctl kern.ipc.nmbclusters=<#>
192 There are additional configuration parameters that can be set on a per-instance
193 basis to dynamically override the default configuration.
194 The '#' below must be
195 replaced with the driver instance / interface unit number:
196 .Bl -tag -width indent
197 .It Va dev.bxe.#.debug
200 Sets the default logging level of the driver instance.
204 the Diagnostics and Debugging section below for more details.
205 .It Va dev.bxe.#.rx_budget
208 Sets the maximum number of receive packets to process in an interrupt for the
212 above for more details.
215 Additional items can be configured using
217 .Bl -tag -width indent
218 .It Va MTU - Maximum Transmission Unit
223 # ifconfig bxe# mtu <n>
224 .It Va Promiscuous Mode
227 # ifconfig bxe# [ promisc | -promisc ]
228 .It Va Rx/Tx Checksum Offload
229 DEFAULT = RX/TX CSUM ON
231 Note that the Rx and Tx settings are not independent.
233 # ifconfig bxe# [ rxcsum | -rxcsum | txcsum | -txcsum ]
234 .It Va TSO - TCP Segmentation Offload
237 # ifconfig bxe# [ tso | -tso | tso6 | -tso6 ]
238 .It Va LRO - TCP Large Receive Offload
241 # ifconfig bxe# [ lro | -lro ]
243 .Sh DIAGNOSTICS AND DEBUGGING
244 There are many statistics exposed by
249 To dump the default driver configuration:
250 .Bd -literal -offset indent
251 # sysctl -a | grep hw.bxe
254 To dump every instance's configuration and detailed statistics:
255 .Bd -literal -offset indent
256 # sysctl -a | grep dev.bxe
259 To dump information for a single instance (replace the '#' with the driver
260 instance / interface unit number):
261 .Bd -literal -offset indent
262 # sysctl -a | grep dev.bxe.#
265 To dump information for all the queues of a single instance:
266 .Bd -literal -offset indent
267 # sysctl -a | grep dev.bxe.#.queue
270 To dump information for a single queue of a single instance (replace the
271 additional '#' with the queue number):
272 .Bd -literal -offset indent
273 # sysctl -a | grep dev.bxe.#.queue.#
278 driver has the ability to dump a ton of debug messages to the system
280 The default level of logging can be set with the
283 Take care with this setting as it can result in too
284 many logs being dumped.
285 Since this parameter is the default one, it affects
286 every instance and will dramatically change the timing in the driver.
288 alternative to aid in debugging is to dynamically change the debug level of a
289 specific instance with the
293 you to turn on/off logging of various debug groups on-the-fly.
295 The different debug groups that can be toggled are:
296 .Bd -literal -offset indent
297 DBG_LOAD 0x00000001 /* load and unload */
298 DBG_INTR 0x00000002 /* interrupt handling */
299 DBG_SP 0x00000004 /* slowpath handling */
300 DBG_STATS 0x00000008 /* stats updates */
301 DBG_TX 0x00000010 /* packet transmit */
302 DBG_RX 0x00000020 /* packet receive */
303 DBG_PHY 0x00000040 /* phy/link handling */
304 DBG_IOCTL 0x00000080 /* ioctl handling */
305 DBG_MBUF 0x00000100 /* dumping mbuf info */
306 DBG_REGS 0x00000200 /* register access */
307 DBG_LRO 0x00000400 /* lro processing */
308 DBG_ASSERT 0x80000000 /* debug assert */
309 DBG_ALL 0xFFFFFFFF /* flying monkeys */
312 For example, to debug an issue in the receive path on bxe0:
313 .Bd -literal -offset indent
314 # sysctl dev.bxe.0.debug=0x22
317 When finished turn the logging back off:
318 .Bd -literal -offset indent
319 # sysctl dev.bxe.0.debug=0
332 device driver first appeared in
337 driver was written by
338 .An Eric Davis Aq edavis@broadcom.com ,
339 .An David Christensen Aq davidch@broadcom.com ,
341 .An Gary Zambrano Aq zambrano@broadcom.com .