1 .\" Copyright (c) 2014 Qlogic 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.
13 .\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS'
14 .\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16 .\" ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
17 .\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18 .\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19 .\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20 .\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21 .\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22 .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23 .\" THE POSSIBILITY OF SUCH DAMAGE.
32 .Nd QLogic NetXtreme II Ethernet 10Gb PCIe adapter driver
34 To compile this driver into the kernel,
35 place the following lines in your
36 kernel configuration file:
37 .Bd -ragged -offset indent
41 Alternatively, to load the driver as a module at boot time, place the
44 .Bd -literal -offset indent
50 driver provides support for PCIe 10Gb Ethernet adapters based on the QLogic
51 NetXtreme II family of 10Gb chips.
52 The driver supports Jumbo Frames, VLAN
53 tagging, checksum offload (IPv4, TCP, UDP, IPv6-TCP, IPv6-UDP), MSI-X
54 interrupts, TCP Segmentation Offload (TSO), Large Receive Offload (LRO), and
55 Receive Side Scaling (RSS).
59 driver provides support for various NICs based on the QLogic NetXtreme II
60 family of 10Gb Ethernet controller chips, including the following:
64 QLogic NetXtreme II BCM57710 10Gb
66 QLogic NetXtreme II BCM57711 10Gb
68 QLogic NetXtreme II BCM57711E 10Gb
70 QLogic NetXtreme II BCM57712 10Gb
72 QLogic NetXtreme II BCM57712-MF 10Gb
74 QLogic NetXtreme II BCM57800 10Gb
76 QLogic NetXtreme II BCM57800-MF 10Gb
78 QLogic NetXtreme II BCM57810 10Gb
80 QLogic NetXtreme II BCM57810-MF 10Gb
82 QLogic NetXtreme II BCM57840 10Gb / 20Gb
84 QLogic NetXtreme II BCM57840-MF 10Gb
87 There a number of configuration parameters that can be set to tweak the
89 These parameters can be set via the
91 file to take effect during the next system boot.
92 The following parameters affect
93 ALL instances of the driver.
94 .Bl -tag -width indent
98 Sets the default logging level of the driver.
99 See the Diagnostics and Debugging
100 section below for more details.
101 .It Va hw.bxe.interrupt_mode
104 Sets the default interrupt mode: 0=IRQ, 1=MSI, 2=MSIX.
106 allocation fails, the driver will roll back and attempt MSI allocation.
108 allocation fails, the driver will roll back and attempt fixed level IRQ
110 If IRQ allocation fails, then the driver load fails.
112 the driver attempts to allocate a vector for each queue in addition to one more
113 for default processing.
114 .It Va hw.bxe.queue_count
117 Sets the default number of fast path packet processing queues.
119 MSI/MSIX interrupt vector is allocated per-queue.
120 .It Va hw.bxe.max_rx_bufs
123 Sets the maximum number of receive buffers to allocate per-queue.
125 to allocate a receive buffer for every buffer descriptor.
127 equates to 4080 buffers per-queue which is the maximum value for this config
129 .It Va hw.bxe.hc_rx_ticks
132 Sets the number of ticks for host interrupt coalescing in the receive path.
133 .It Va hw.bxe.hc_tx_ticks
136 Sets the number of ticks for host interrupt coalescing in the transmit path.
137 .It Va hw.bxe.rx_budget
140 Sets the maximum number of receive packets to process in an interrupt.
142 budget is reached then the remaining/pending packets will be processed in a
144 .It Va hw.bxe.max_aggregation_size
147 Sets the maximum LRO aggregration byte size.
148 The higher the value the more
149 packets the hardware will aggregate.
154 Sets the PCI MRRS: -1=Auto, 0=128B, 1=256B, 2=512B, 3=1KB
155 .It Va hw.bxe.autogreeen
158 Set AutoGrEEEN: 0=HW_DEFAULT, 1=FORCE_ON, 2=FORCE_OFF
159 .It Va hw.bxe.udp_rss
162 Enable/Disable 4-tuple RSS for UDP: 0=DISABLED, 1=ENABLED
165 Special care must be taken when modifying the number of queues and receive
167 .Fx imposes a limit on the maximum number of
170 If buffer allocations fail, the interface initialization will fail
171 and the interface will not be usable.
172 The driver does not make a best effort
173 for buffer allocations.
174 It is an all or nothing effort.
178 allocation limit using
180 and view the current usage with
183 .Bd -literal -offset indent
185 # sysctl kern.ipc.nmbclusters
186 # sysctl kern.ipc.nmbclusters=<#>
189 There are additional configuration parameters that can be set on a per-instance
190 basis to dynamically override the default configuration.
191 The '#' below must be
192 replaced with the driver instance / interface unit number:
193 .Bl -tag -width indent
194 .It Va dev.bxe.#.debug
197 Sets the default logging level of the driver instance.
201 the Diagnostics and Debugging section below for more details.
202 .It Va dev.bxe.#.rx_budget
205 Sets the maximum number of receive packets to process in an interrupt for the
209 above for more details.
212 Additional items can be configured using
214 .Bl -tag -width indent
215 .It Va MTU - Maximum Transmission Unit
220 # ifconfig bxe# mtu <n>
221 .It Va Promiscuous Mode
224 # ifconfig bxe# [ promisc | -promisc ]
225 .It Va Rx/Tx Checksum Offload
226 DEFAULT = RX/TX CSUM ON
228 Note that the Rx and Tx settings are not independent.
230 # ifconfig bxe# [ rxcsum | -rxcsum | txcsum | -txcsum ]
231 .It Va TSO - TCP Segmentation Offload
234 # ifconfig bxe# [ tso | -tso | tso6 | -tso6 ]
235 .It Va LRO - TCP Large Receive Offload
238 # ifconfig bxe# [ lro | -lro ]
240 .Sh DIAGNOSTICS AND DEBUGGING
241 There are many statistics exposed by
246 To dump the default driver configuration:
247 .Bd -literal -offset indent
248 # sysctl -a | grep hw.bxe
251 To dump every instance's configuration and detailed statistics:
252 .Bd -literal -offset indent
253 # sysctl -a | grep dev.bxe
256 To dump information for a single instance (replace the '#' with the driver
257 instance / interface unit number):
258 .Bd -literal -offset indent
259 # sysctl -a | grep dev.bxe.#
262 To dump information for all the queues of a single instance:
263 .Bd -literal -offset indent
264 # sysctl -a | grep dev.bxe.#.queue
267 To dump information for a single queue of a single instance (replace the
268 additional '#' with the queue number):
269 .Bd -literal -offset indent
270 # sysctl -a | grep dev.bxe.#.queue.#
275 driver has the ability to dump a ton of debug messages to the system
277 The default level of logging can be set with the
280 Take care with this setting as it can result in too
281 many logs being dumped.
282 Since this parameter is the default one, it affects
283 every instance and will dramatically change the timing in the driver.
285 alternative to aid in debugging is to dynamically change the debug level of a
286 specific instance with the
290 you to turn on/off logging of various debug groups on-the-fly.
292 The different debug groups that can be toggled are:
293 .Bd -literal -offset indent
294 DBG_LOAD 0x00000001 /* load and unload */
295 DBG_INTR 0x00000002 /* interrupt handling */
296 DBG_SP 0x00000004 /* slowpath handling */
297 DBG_STATS 0x00000008 /* stats updates */
298 DBG_TX 0x00000010 /* packet transmit */
299 DBG_RX 0x00000020 /* packet receive */
300 DBG_PHY 0x00000040 /* phy/link handling */
301 DBG_IOCTL 0x00000080 /* ioctl handling */
302 DBG_MBUF 0x00000100 /* dumping mbuf info */
303 DBG_REGS 0x00000200 /* register access */
304 DBG_LRO 0x00000400 /* lro processing */
305 DBG_ASSERT 0x80000000 /* debug assert */
306 DBG_ALL 0xFFFFFFFF /* flying monkeys */
309 For example, to debug an issue in the receive path on bxe0:
310 .Bd -literal -offset indent
311 # sysctl dev.bxe.0.debug=0x22
314 When finished turn the logging back off:
315 .Bd -literal -offset indent
316 # sysctl dev.bxe.0.debug=0
319 For support questions please contact your QLogic approved reseller or
320 QLogic Technical Support at
321 .Pa http://support.qlogic.com ,
323 .Aq Mt support@qlogic.com .
335 device driver first appeared in
340 driver was written by
341 .An Eric Davis Aq Mt edavis@broadcom.com ,
342 .An David Christensen Aq Mt davidch@broadcom.com ,
344 .An Gary Zambrano Aq Mt zambrano@broadcom.com .