1/*- 2 * Copyright (c) 2001 Wind River Systems 3 * Copyright (c) 1997, 1998, 1999, 2001 4 * Bill Paul <wpaul@windriver.com>. All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: --- 18 unchanged lines hidden (view full) --- 27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 28 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 29 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 30 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 31 * THE POSSIBILITY OF SUCH DAMAGE. 32 */ 33 34#include <sys/cdefs.h> |
35__FBSDID("$FreeBSD: head/sys/dev/bge/if_bge.c 200264 2009-12-08 17:54:23Z yongari $"); |
36 37/* 38 * Broadcom BCM570x family gigabit ethernet driver for FreeBSD. 39 * 40 * The Broadcom BCM5700 is based on technology originally developed by 41 * Alteon Networks as part of the Tigon I and Tigon II gigabit ethernet 42 * MAC chips. The BCM5700, sometimes refered to as the Tigon III, has 43 * two on-board MIPS R4000 CPUs and can have as much as 16MB of external --- 434 unchanged lines hidden (view full) --- 478}; 479 480static devclass_t bge_devclass; 481 482DRIVER_MODULE(bge, pci, bge_driver, bge_devclass, 0, 0); 483DRIVER_MODULE(miibus, bge, miibus_driver, miibus_devclass, 0, 0); 484 485static int bge_allow_asf = 1; |
486 487TUNABLE_INT("hw.bge.allow_asf", &bge_allow_asf); |
488 489SYSCTL_NODE(_hw, OID_AUTO, bge, CTLFLAG_RD, 0, "BGE driver parameters"); 490SYSCTL_INT(_hw_bge, OID_AUTO, allow_asf, CTLFLAG_RD, &bge_allow_asf, 0, 491 "Allow ASF mode if available"); |
492 493#define SPARC64_BLADE_1500_MODEL "SUNW,Sun-Blade-1500" 494#define SPARC64_BLADE_1500_PATH_BGE "/pci@1f,700000/network@2" 495#define SPARC64_BLADE_2500_MODEL "SUNW,Sun-Blade-2500" 496#define SPARC64_BLADE_2500_PATH_BGE "/pci@1c,600000/network@3" 497#define SPARC64_OFW_SUBVENDOR "subsystem-vendor-id" 498 499static int --- 3415 unchanged lines hidden (view full) --- 3915 } 3916 if (m->m_flags & M_LASTFRAG) 3917 csum_flags |= BGE_TXBDFLAG_IP_FRAG_END; 3918 else if (m->m_flags & M_FRAG) 3919 csum_flags |= BGE_TXBDFLAG_IP_FRAG; 3920 } 3921 3922 if ((m->m_pkthdr.csum_flags & CSUM_TSO) == 0 && |
3923 sc->bge_forced_collapse > 0 && 3924 (sc->bge_flags & BGE_FLAG_PCIE) != 0 && m->m_next != NULL) { |
3925 /* 3926 * Forcedly collapse mbuf chains to overcome hardware 3927 * limitation which only support a single outstanding 3928 * DMA read operation. 3929 */ |
3930 if (sc->bge_forced_collapse == 1) |
3931 m = m_defrag(m, M_DONTWAIT); 3932 else |
3933 m = m_collapse(m, M_DONTWAIT, sc->bge_forced_collapse); |
3934 if (m == NULL) { 3935 m_freem(*m_head); 3936 *m_head = NULL; 3937 return (ENOBUFS); 3938 } 3939 *m_head = m; 3940 } 3941 --- 911 unchanged lines hidden (view full) --- 4853 "Register Read"); 4854 4855 SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "mem_read", 4856 CTLTYPE_INT | CTLFLAG_RW, sc, 0, bge_sysctl_mem_read, "I", 4857 "Memory Read"); 4858 4859#endif 4860 |
4861 /* 4862 * A common design characteristic for many Broadcom client controllers 4863 * is that they only support a single outstanding DMA read operation 4864 * on the PCIe bus. This means that it will take twice as long to fetch 4865 * a TX frame that is split into header and payload buffers as it does 4866 * to fetch a single, contiguous TX frame (2 reads vs. 1 read). For 4867 * these controllers, coalescing buffers to reduce the number of memory 4868 * reads is effective way to get maximum performance(about 940Mbps). 4869 * Without collapsing TX buffers the maximum TCP bulk transfer 4870 * performance is about 850Mbps. However forcing coalescing mbufs 4871 * consumes a lot of CPU cycles, so leave it off by default. 4872 */ 4873 SYSCTL_ADD_INT(ctx, children, OID_AUTO, "forced_collapse", 4874 CTLFLAG_RW, &sc->bge_forced_collapse, 0, 4875 "Number of fragmented TX buffers of a frame allowed before " 4876 "forced collapsing"); 4877 resource_int_value(device_get_name(sc->bge_dev), 4878 device_get_unit(sc->bge_dev), "forced_collapse", 4879 &sc->bge_forced_collapse); 4880 |
4881 if (BGE_IS_5705_PLUS(sc)) 4882 return; 4883 4884 tree = SYSCTL_ADD_NODE(ctx, children, OID_AUTO, "stats", CTLFLAG_RD, 4885 NULL, "BGE Statistics"); 4886 schildren = children = SYSCTL_CHILDREN(tree); 4887 BGE_SYSCTL_STAT(sc, ctx, "Frames Dropped Due To Filters", 4888 children, COSFramesDroppedDueToFilters, --- 311 unchanged lines hidden --- |