NAME
bce
—
Broadcom NetXtreme II PCIe Gigabit
Ethernet adapter driver
SYNOPSIS
To compile this driver into the kernel, place the following lines in your kernel configuration file:
device miibus
device bce
Alternatively, to load the driver as a module at boot time, place the following line in loader.conf(5):
if_bce_load="YES"
DESCRIPTION
The bce
driver supports Broadcom's
NetXtreme II product family, including the BCM5706, BCM5708, BCM5709 and
BCM5716 Ethernet controllers.
The NetXtreme II product family is composed of various Converged
NIC (or CNIC) Ethernet controllers which support a TCP Offload Engine (TOE),
Remote DMA (RDMA), and iSCSI acceleration, in addition to standard L2
Ethernet traffic, all on the same controller. The following features are
supported in the bce
driver:
- TCP/UDP checksum offload
- TCP segmentation offloading (TSO)
- VLAN tag stripping and inserting
- Interrupt coalescing
- 10/100/1000Mbps operation in full-duplex mode
- 10/100Mbps operation in half-duplex mode
The following features are supported in the
bce
driver for BCM5709 and BCM5716:
- Receive side scaling (RSS), up to 8 reception queues
- Multiple tranmission queues, up to 8 transmission queues
- Multiple vector MSI-X
For BCM5709 and BCM5716, by default, the
bce
driver will try enabling as many reception and
transmission queues as are allowed by the number of CPUs in the system. If
multiple transmission queues are enabled, the round-robin arbitration is
performed among the transmission queues. It should be noted that if both TSO
and multiple transmission queues are enabled, the round-robin arbitration
between transmission queues is done at the TSO packet boundary.
The bce
driver supports the following
media types:
autoselect
- Enable autoselection of the media type and options. The user can manually override the autoselected mode by adding media options to rc.conf(5).
10baseT/UTP
- Set 10Mbps operation. The
ifconfig(8)
mediaopt
option can also be used to select eitherfull-duplex
orhalf-duplex
modes. 100baseTX
- Set 100Mbps (Fast Ethernet) operation. The
ifconfig(8)
mediaopt
option can also be used to select eitherfull-duplex
orhalf-duplex
modes. 1000baseT
- Set 1000baseT operation over twisted pair. Only
full-duplex
mode is supported.
The bce
driver supports the following
media options:
full-duplex
- Force full duplex operation.
half-duplex
- Force half duplex operation.
For more information on configuring this device, see
ifconfig(8). The bce
driver supports
polling(4).
TUNABLES
X is the device unit number.
- hw.bce.tx_bds
- Maximum number of sending BDs which must be processed by the device before the device updates the status block and generates interrupt. It is used together with hw.bce.tx_ticks to achieve TX interrupt moderation. Default value is 255.
- hw.bce.tx_bds_int
- Maximum number of sending BDs which must be processed by the device before the device updates the status block during host interrupt processing. Default value is 255.
- hw.bce.tx_ticks
- How often status block should be updated and interrupt should be generated by the device, due to sending packets. It is used together with hw.bce.tx_bds to achieve TX interrupt moderation. Default value is 1022 (microseconds).
- hw.bce.tx_ticks_int
- How often status block should be updated by the device during host interrupt processing, due to sending packets. Default value is 1022 (microseconds).
- hw.bce.rx_bds
- Maximum number of BDs which must be received by the device before the device updates the status block and generates interrupt. It is used together with hw.bce.rx_ticks to achieve RX interrupt moderation. Default value is 0.
- hw.bce.rx_bds_int
- Maximum number of BDs which must be received by the device before the device updates the status block during host interrupt processing. Default value is 128.
- hw.bce.rx_ticks
- How often status block should be updated and interrupt should be generated by the device, due to receiving packets. It is used together with hw.bce.rx_bds to achieve RX interrupt moderation. Default value is 150 (microseconds).
- hw.bce.rx_ticks_int
- How often status block should be updated by the device during host interrupt processing, due to receiving packets. Default value is 150 (microseconds).
- hw.bce.msi.enable hw.bceX.msi.enable
- For BCM5706 and BCM5708, by default, the driver will use MSI if it is supported. This behavior can be turned off by setting this tunable to 0.
- hw.bceX.msi.cpu
- If MSI is used, it specifies the MSI's target CPU.
- hw.bce.msix.enable hw.bceX.msix.enable
- For BCM5709 and BCM5716, by default, the driver will use MSI-X if it is supported. This behavior can be turned off by setting this tunable to 0.
- hw.bce.rx_pages hw.bceX.rx_pages
- How many reception descriptor pages should be used. One reception descriptor page holds 256 reception descriptors. Default value is 2.
- hw.bce.tx_pages hw.bceX.tx_pages
- How many transmission descriptor pages should be used. One transmission descriptor page holds 256 transmission descriptors. Default value is 2.
- hw.bce.rx_rings hw.bceX.rx_rings
- For BCM5709 and BCM5716, if MSI-X is used, this tunable specifies the number of reception queues to be enabled. Maximum allowed value for these tunables is 8. Setting these tunables to 0 allows the driver to enable as many reception queues as allowed by the number of CPUs.
- hw.bce.tx_rings hw.bceX.tx_rings
- For BCM5709 and BCM5716, if MSI-X is used, this tunable specifies the number of transmission queues to be enabled. Maximum allowed value for these tunables is 8, and it must be less than or equal to the number of reception queues enabled. Setting these tunables to 0 allows the driver to enable as many transmission queues as allowed by the number of CPUs and number reception queues enabled.
- hw.bce.tx_wreg
- The number of transmission descriptors should be setup before the hardware register is written. Setting this value too high will have negative effect on transmission timeliness. Setting this value too low will hurt overall transmission due to the frequent hardware register writing. Default value is 8.
MIB Variables
A number of per-interface variables are implemented in the dev.bce.X branch of the sysctl(3) MIB.
- tx_bds_int
- See the tunable hw.bce.tx_bds_int.
- tx_bds
- See the tunable hw.bce.tx_bds.
- tx_ticks_int
- See the tunable hw.bce.tx_ticks_int.
- tx_ticks
- See the tunable hw.bce.tx_ticks.
- rx_bds_int
- See the tunable hw.bce.rx_bds_int.
- rx_bds
- See the tunable hw.bce_rx_bds.
- rx_ticks_int
- See the tunable hw.bce.rx_ticks_int.
- rx_ticks
- See the tunable hw.bce.rx_ticks.
- rx_rings
- Number of reception queues actually enabled (read-only). For BCM5709 and BCM5716, if MSI-X is enabled, the enabled reception queues will be one more than the value specified in the tunable hw.bce.rx_rings or hw.bceX.rx_rings. The extra reception queue is for the packets whose RSS hash could not be calculated by the hardware.
- tx_rings
- Number of transmission queues enable (read-only). For BCM5709 and BCM5716, if MSI-X is enabled, use the tunable hw.bce.tx_rings or hw.bceX.tx_rings to configure it.
- rx_pages
- Number of reception descriptor pages enabled (read-only). Use the tunable hw.bce.rx_pages or hw.bceX.rx_pages to configure it.
- tx_pages
- Number of transmission descriptor pages enabled (read-only). Use the tunable hw.bce.tx_pages or hw.bceX.tx_pages to configure it.
- tx_wreg
- See the tunable hw.bce.tx_wreg.
- stat_*
- Various hardware statistics.
SEE ALSO
altq(4), arp(4), ifmedia(4), miibus(4), netintro(4), ng_ether(4), polling(4), vlan(4), ifconfig(8)
HISTORY
The bce
device driver first appeared in
FreeBSD 6.1.
AUTHORS
The bce
driver was written by
David Christensen
<davidch@broadcom.com>.
Sepherosa Ziehau added receive side scaling, multiple
transmission queues and multiple vector MSI-X support to
DragonFly.