1.\" 2.\" Copyright (c) 2012 The DragonFly Project. All rights reserved. 3.\" 4.\" Redistribution and use in source and binary forms, with or without 5.\" modification, are permitted provided that the following conditions 6.\" are met: 7.\" 8.\" 1. Redistributions of source code must retain the above copyright 9.\" notice, this list of conditions and the following disclaimer. 10.\" 2. Redistributions in binary form must reproduce the above copyright 11.\" notice, this list of conditions and the following disclaimer in 12.\" the documentation and/or other materials provided with the 13.\" distribution. 14.\" 3. Neither the name of The DragonFly Project nor the names of its 15.\" contributors may be used to endorse or promote products derived 16.\" from this software without specific, prior written permission. 17.\" 18.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 21.\" FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 22.\" COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 23.\" INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, 24.\" BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 25.\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 26.\" AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 27.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 28.\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29.\" SUCH DAMAGE. 30.\" 31.Dd May 13, 2017 32.Dt BNX 4 33.Os 34.Sh NAME 35.Nm bnx 36.Nd "Broadcom BCM57785/BCM5718 families 10/100/Gigabit Ethernet device" 37.Sh SYNOPSIS 38.Cd "device miibus" 39.Cd "device bnx" 40.Pp 41Alternatively, to load the driver as a module at boot time, place the 42following line in 43.Pa /boot/loader.conf : 44.Bd -literal -offset indent 45if_bnx_load="YES" 46.Ed 47.Sh DESCRIPTION 48The 49.Nm 50driver supports the PCIe Ethernet adapters based on 51Broadcom BCM57785/BCM5718 families chips. 52.Pp 53The following features are supported in the 54.Nm 55driver: 56.Pp 57.Bl -item -offset indent -compact 58.It 59IP/TCP/UDP checksum offloading 60.It 61TCP segmentation offloading (TSO) 62.It 63VLAN tag stripping and inserting 64.It 65Interrupt coalescing 66.It 67Receive Side Scaling (RSS), 68up to 4 reception queues 69.It 70Multiple vector MSI-X 71.It 72Multiple transmission queues 73(BCM5717C, 74BCM5719 and BCM5720 only), 75up to 4 transmission queues 76.El 77.Pp 78By default, 79the 80.Nm 81driver will try enabling as many reception queues as are allowed 82by the number of CPUs in the system. 83For BCM5717C, 84BCM5719 and BCM5720, 85in addition to the reception queues, 86by default, 87the 88.Nm 89driver will try enabling as many transmission queues as are allowed 90by the number of CPUs in the system 91and the number of enabled reception queues. 92If multiple transmission queues are enabled, 93the round-robin arbitration is performed among the transmission queues. 94It should be noted that 95if both TSO and multiple transmission queues are enabled, 96the round-robin arbitration between transmission queues is done 97at the TSO packet boundary. 98.Pp 99The 100.Nm 101driver supports the following 102.Ar media 103types: 104.Pp 105.Bl -tag -width 10baseT/UTP -compact 106.It Cm autoselect 107Enable autoselection of the media types and options 108.Pp 109.It Cm 10baseT/UTP 110Set 10Mbps operation. 111The 112.Ar mediaopt 113option can also be used to select either 114.Ar full-duplex 115or 116.Ar half-duplex 117modes. 118.Pp 119.It Cm 100baseTX 120Set 100Mbps (Fast Ethernet) operation. 121The 122.Ar mediaopt 123option can also be used to select either 124.Ar full-duplex 125or 126.Ar half-duplex 127modes. 128.Pp 129.It Cm 1000baseT 130Set 1000Mbps (Gigabit Ethernet) operation. 131The 132.Ar mediaopt 133option can only be set 134.Ar full-duplex 135mode. 136.El 137.Pp 138The 139.Nm 140driver supports the following 141.Ar media 142options: 143.Pp 144.Bl -tag -width full-duplex -compact 145.It Cm full-duplex 146Force full duplex operation. 147.Pp 148.It Cm half-duplex 149Force half duplex operation. 150.El 151.Pp 152Note that the 1000baseT media type is only available 153if it is supported by the adapter. 154For more information on configuring this device, 155see 156.Xr ifconfig 8 . 157The 158.Nm 159driver supports 160.Xr polling 4 . 161.Sh HARDWARE 162The 163.Nm 164driver supports Gigabit Ethernet adapters and Fast Ethernet adapters based on 165the Broadcom BCM57785/BCM5718 families chips: 166.Pp 167.Bl -bullet -compact 168.It 169Broadcom BCM5717 Gigabit Ethernet 170.It 171Broadcom BCM5717C Gigabit Ethernet 172.It 173Broadcom BCM5718 Gigabit Ethernet 174.It 175Broadcom BCM5719 Gigabit Ethernet 176.It 177Broadcom BCM5720 Gigabit Ethernet 178.It 179Broadcom BCM5725 Gigabit Ethernet 180.It 181Broadcom BCM5727 Gigabit Ethernet 182.It 183Broadcom BCM5762 Gigabit Ethernet 184.It 185Broadcom BCM57761 Gigabit Ethernet 186.It 187Broadcom BCM57762 Gigabit Ethernet 188.It 189Broadcom BCM57765 Gigabit Ethernet 190.It 191Broadcom BCM57766 Gigabit Ethernet 192.It 193Broadcom BCM57781 Gigabit Ethernet 194.It 195Broadcom BCM57782 Gigabit Ethernet 196.It 197Broadcom BCM57785 Gigabit Ethernet 198.It 199Broadcom BCM57786 Gigabit Ethernet 200.It 201Broadcom BCM57791 Fast Ethernet 202.It 203Broadcom BCM57795 Fast Ethernet 204.El 205.Sh TUNABLES 206.Em X 207is the device unit number. 208.Bl -tag -width ".Va hw.bnxX.npoll.offset" 209.It Va hw.bnx.rx_rings Va hw.bnxX.rx_rings 210If MSI-X is used, 211this tunable specifies the number of reception queues to be enabled. 212Maximum allowed value for these tunables is 4 and 213it must be power of 2 aligned. 214Setting these tunables to 0 allows the driver to enable as many reception queues 215as allowed by the number of CPUs. 216.It Va hw.bnx.tx_rings Va hw.bnxX.tx_rings 217For BCM5717C, 218BCM5719 and BCM5720, 219if MSI-X is used, 220this tunable specifies the number of transmission queues to be enabled. 221Maximum allowed value for these tunables is 4, 222it must be power of 2 aligned 223and it must be less than or equal to the number of reception queues enabled. 224Setting these tunables to 0 allows the driver to enable as many transmission queues 225as allowed by the number of CPUs and number reception queues enabled. 226.It Va hw.bnx.msix.enable Va hw.bnxX.msix.enable 227By default, 228the driver will use MSI-X 229if it is supported. 230This behaviour can be turned off by setting this tunable to 0. 231.It Va hw.bnx.msi.enable Va hw.bnxX.msi.enable 232If MSI-X is disabled and MSI is supported, 233the driver will use MSI. 234This behavior can be turned off by setting this tunable to 0. 235.It Va hw.bnxX.msi.cpu 236If MSI is used, it specifies the MSI's target CPU. 237.El 238.Sh MIB Variables 239A number of per-interface variables are implemented in the 240.Va dev.bnx. Ns Em X 241branch of the 242.Xr sysctl 3 243MIB. 244.Bl -tag -width "rx_coal_bds_poll" 245.It Va rx_rings 246Number of reception queues enabled (read-only). 247Use the tunable 248.Va hw.bnx.rx_rings 249or 250.Va hw.bnxX.rx_rings 251to configure it. 252.It Va tx_rings 253Number of transmission queues enabled (read-only). 254Use the tunable 255.Va hw.bnx.tx_rings 256or 257.Va hw.bnxX.tx_rings 258to configure it. 259.It Va rx_coal_ticks 260How often status block should be updated and interrupt should be generated 261by the device, 262due to receiving packets. 263It is used together with 264.Va rx_coal_bds 265to achieve RX interrupt moderation. 266Default value is 150 (microseconds). 267.It Va tx_coal_ticks 268How often status block should be updated and interrupt should be generated 269by the device, 270due to sending packets. 271It is used together with 272.Va tx_coal_bds 273to achieve TX interrupt moderation. 274Default value is 1023 (microseconds). 275.It Va rx_coal_bds 276Maximum number of BDs which must be received by the device 277before the device updates the status block and generates interrupt. 278It is used together with 279.Va rx_coal_ticks 280to achieve RX interrupt moderation. 281Default value is 0 (disabled). 282.It Va rx_coal_bds_poll 283Maximum number of BDs which must be received by the device 284before the device updates the status block during 285.Xr polling 4 . 286It is used together with 287.Va rx_coal_ticks 288to reduce the frequency of status block updating due to RX. 289Default value is 32. 290.It Va tx_coal_bds 291Maximum number of sending BDs which must be processed by the device 292before the device updates the status block and generates interrupt. 293It is used together with 294.Va tx_coal_ticks 295to achieve TX interrupt moderation. 296Default value is 128. 297.It Va tx_coal_bds_poll 298Maximum number of sending BDs which must be processed by the device 299before the device updates the status block during 300.Xr polling 4 . 301It is used together with 302.Va tx_coal_ticks 303to reduce the frequency of status block updating due to TX. 304Default value is 64. 305.It Va force_defrag 306Force defragment the sending mbuf chains, 307if the mbuf chain is not a TSO segment and contains more than 1 mbufs. 308This improves transmission performance on certain low end chips, 309however, 310this also increases CPU load. 311Default value is 0 (disabled). 312.It Va tx_wreg 313The number of transmission descriptors should be setup before the hardware 314register is written. 315Setting this value too high will have negative effect 316on transmission timeliness. 317Setting this value too low will hurt overall transmission performance 318due to the frequent hardware register writing. 319Default value is 8. 320.It Va std_refill 321Number of packets should be received 322before the standard reception producer ring is refilled. 323Setting this value too low will cause extra thread scheduling cost. 324Setting this value too high will make chip drop incoming packets. 325Default value is 128 / number of reception queues. 326.It Va rx_coal_bds_int 327Maximum number of BDs which must be received by the device 328before the device updates the status block 329during host interrupt processing. 330Default value is 80. 331.It Va tx_coal_bds_int 332Maximum number of sending BDs which must be processed by the device 333before the device updates the status block 334during host interrupt processing. 335Default value is 64. 336.It Va norxbds 337Number of times the standard reception producer ring is short 338of reception BDs. 339If this value grows fast, 340it is usually an indication that 341.Va std_refill 342is set too high. 343.It Va errors 344Number of errors, both critical and non-critical, happened. 345.El 346.Sh SEE ALSO 347.Xr arp 4 , 348.Xr bge 4 , 349.Xr ifmedia 4 , 350.Xr miibus 4 , 351.Xr netintro 4 , 352.Xr ng_ether 4 , 353.Xr polling 4 , 354.Xr vlan 4 , 355.Xr ifconfig 8 356.Sh HISTORY 357The 358.Nm 359device driver first appeared in 360.Dx 3.1 . 361.Sh AUTHORS 362.An -nosplit 363The 364.Nm 365driver was based on 366.Xr bge 4 367written by 368.An Bill Paul Aq Mt wpaul@windriver.com . 369.An Sepherosa Ziehau 370added receive side scaling, 371multiple transmission queues 372and multiple MSI-X support to 373.Dx . 374