Module Name: src Committed By: bouyer Date: Sun Nov 17 18:24:05 UTC 2013
Modified Files: src/sys/dev/mii [netbsd-6]: brgphy.c src/sys/dev/pci [netbsd-6]: if_bge.c if_bgereg.h if_bgevar.h Log Message: Apply patch, requested by msaitoh in ticket #983: sys/dev/mii/brgphy.c 1.68 via patch sys/dev/pci/if_bge.c 1.260-1.262 via patch sys/dev/pci/if_bgereg.h 1.85-1.86 via patch sys/dev/pci/if_bgevar.h 1.17 via patch Set maximum read byte count to 2048 for PCI-X BCM5703/5704 devices. For PCI-X BCM5704, set maximum outstanding split transactions to 0. Same as Linux tg3 and FreeBSD (part of FreeBSD r204978). Add 40bit DMA bug workaround(BGEF_40BIT_BUG) from FreeBSD (part of r199670). This workaround is for 5714/5715 controllers and is not actually a MAC controller bug but an issue with the embedded PCIe to PCI-X bridge in the device. This change uses bus_dmatag_subregion(), so this workaround won't work on some archs which doesn't support bus_dmatag_subregion(). To generate a diff of this commit: cvs rdiff -u -r1.59.8.2 -r1.59.8.3 src/sys/dev/mii/brgphy.c cvs rdiff -u -r1.200.2.2 -r1.200.2.3 src/sys/dev/pci/if_bge.c cvs rdiff -u -r1.56.18.2 -r1.56.18.3 src/sys/dev/pci/if_bgereg.h cvs rdiff -u -r1.9.2.1 -r1.9.2.2 src/sys/dev/pci/if_bgevar.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/mii/brgphy.c diff -u src/sys/dev/mii/brgphy.c:1.59.8.2 src/sys/dev/mii/brgphy.c:1.59.8.3 --- src/sys/dev/mii/brgphy.c:1.59.8.2 Sat Sep 7 16:39:32 2013 +++ src/sys/dev/mii/brgphy.c Sun Nov 17 18:24:05 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: brgphy.c,v 1.59.8.2 2013/09/07 16:39:32 bouyer Exp $ */ +/* $NetBSD: brgphy.c,v 1.59.8.3 2013/11/17 18:24:05 bouyer Exp $ */ /*- * Copyright (c) 1998, 1999, 2000, 2001 The NetBSD Foundation, Inc. @@ -62,7 +62,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: brgphy.c,v 1.59.8.2 2013/09/07 16:39:32 bouyer Exp $"); +__KERNEL_RCSID(0, "$NetBSD: brgphy.c,v 1.59.8.3 2013/11/17 18:24:05 bouyer Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -734,11 +734,11 @@ brgphy_reset(struct mii_softc *sc) PHY_WRITE(sc, BRGPHY_MII_AUXCTL, 0x0400); } - if (bsc->sc_phyflags & BGE_PHY_CRC_BUG) + if (bsc->sc_phyflags & BGEPHYF_CRC_BUG) brgphy_crc_bug(sc); /* Set Jumbo frame settings in the PHY. */ - if (bsc->sc_phyflags & BGE_JUMBO_CAPABLE) + if (bsc->sc_phyflags & BGEPHYF_JUMBO_CAPABLE) brgphy_jumbo_settings(sc); /* Adjust output voltage */ Index: src/sys/dev/pci/if_bge.c diff -u src/sys/dev/pci/if_bge.c:1.200.2.2 src/sys/dev/pci/if_bge.c:1.200.2.3 --- src/sys/dev/pci/if_bge.c:1.200.2.2 Sat Sep 7 16:39:32 2013 +++ src/sys/dev/pci/if_bge.c Sun Nov 17 18:24:05 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: if_bge.c,v 1.200.2.2 2013/09/07 16:39:32 bouyer Exp $ */ +/* $NetBSD: if_bge.c,v 1.200.2.3 2013/11/17 18:24:05 bouyer Exp $ */ /* * Copyright (c) 2001 Wind River Systems @@ -79,7 +79,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_bge.c,v 1.200.2.2 2013/09/07 16:39:32 bouyer Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_bge.c,v 1.200.2.3 2013/11/17 18:24:05 bouyer Exp $"); #include "vlan.h" @@ -673,15 +673,15 @@ static const struct bge_product { NULL }, }; -#define BGE_IS_JUMBO_CAPABLE(sc) ((sc)->bge_flags & BGE_JUMBO_CAPABLE) -#define BGE_IS_5700_FAMILY(sc) ((sc)->bge_flags & BGE_5700_FAMILY) -#define BGE_IS_5705_PLUS(sc) ((sc)->bge_flags & BGE_5705_PLUS) -#define BGE_IS_5714_FAMILY(sc) ((sc)->bge_flags & BGE_5714_FAMILY) -#define BGE_IS_575X_PLUS(sc) ((sc)->bge_flags & BGE_575X_PLUS) -#define BGE_IS_5755_PLUS(sc) ((sc)->bge_flags & BGE_5755_PLUS) -#define BGE_IS_57765_FAMILY(sc) ((sc)->bge_flags & BGE_57765_FAMILY) -#define BGE_IS_57765_PLUS(sc) ((sc)->bge_flags & BGE_57765_PLUS) -#define BGE_IS_5717_PLUS(sc) ((sc)->bge_flags & BGE_5717_PLUS) +#define BGE_IS_JUMBO_CAPABLE(sc) ((sc)->bge_flags & BGEF_JUMBO_CAPABLE) +#define BGE_IS_5700_FAMILY(sc) ((sc)->bge_flags & BGEF_5700_FAMILY) +#define BGE_IS_5705_PLUS(sc) ((sc)->bge_flags & BGEF_5705_PLUS) +#define BGE_IS_5714_FAMILY(sc) ((sc)->bge_flags & BGEF_5714_FAMILY) +#define BGE_IS_575X_PLUS(sc) ((sc)->bge_flags & BGEF_575X_PLUS) +#define BGE_IS_5755_PLUS(sc) ((sc)->bge_flags & BGEF_5755_PLUS) +#define BGE_IS_57765_FAMILY(sc) ((sc)->bge_flags & BGEF_57765_FAMILY) +#define BGE_IS_57765_PLUS(sc) ((sc)->bge_flags & BGEF_57765_PLUS) +#define BGE_IS_5717_PLUS(sc) ((sc)->bge_flags & BGEF_5717_PLUS) static const struct bge_revision { uint32_t br_chipid; @@ -1743,7 +1743,7 @@ bge_newbuf_std(struct bge_softc *sc, int m_new->m_len = m_new->m_pkthdr.len = MCLBYTES; m_new->m_data = m_new->m_ext.ext_buf; } - if (!(sc->bge_flags & BGE_RX_ALIGNBUG)) + if (!(sc->bge_flags & BGEF_RX_ALIGNBUG)) m_adj(m_new, ETHER_ALIGN); if (bus_dmamap_load_mbuf(sc->bge_dmatag, dmamap, m_new, BUS_DMA_READ|BUS_DMA_NOWAIT)) @@ -1804,7 +1804,7 @@ bge_newbuf_jumbo(struct bge_softc *sc, i buf = m_new->m_data = m_new->m_ext.ext_buf; m_new->m_ext.ext_size = BGE_JUMBO_FRAMELEN; } - if (!(sc->bge_flags & BGE_RX_ALIGNBUG)) + if (!(sc->bge_flags & BGEF_RX_ALIGNBUG)) m_adj(m_new, ETHER_ALIGN); bus_dmamap_sync(sc->bge_dmatag, sc->bge_cdata.bge_rx_jumbo_map, mtod(m_new, char *) - (char *)sc->bge_cdata.bge_jumbo_buf, BGE_JLEN, @@ -1837,7 +1837,7 @@ bge_init_rx_ring_std(struct bge_softc *s { int i; - if (sc->bge_flags & BGE_RXRING_VALID) + if (sc->bge_flags & BGEF_RXRING_VALID) return 0; for (i = 0; i < BGE_SSLOTS; i++) { @@ -1848,7 +1848,7 @@ bge_init_rx_ring_std(struct bge_softc *s sc->bge_std = i - 1; bge_writembx(sc, BGE_MBX_RX_STD_PROD_LO, sc->bge_std); - sc->bge_flags |= BGE_RXRING_VALID; + sc->bge_flags |= BGEF_RXRING_VALID; return 0; } @@ -1858,7 +1858,7 @@ bge_free_rx_ring_std(struct bge_softc *s { int i; - if (!(sc->bge_flags & BGE_RXRING_VALID)) + if (!(sc->bge_flags & BGEF_RXRING_VALID)) return; for (i = 0; i < BGE_STD_RX_RING_CNT; i++) { @@ -1872,7 +1872,7 @@ bge_free_rx_ring_std(struct bge_softc *s sizeof(struct bge_rx_bd)); } - sc->bge_flags &= ~BGE_RXRING_VALID; + sc->bge_flags &= ~BGEF_RXRING_VALID; } static int @@ -1881,7 +1881,7 @@ bge_init_rx_ring_jumbo(struct bge_softc int i; volatile struct bge_rcb *rcb; - if (sc->bge_flags & BGE_JUMBO_RXRING_VALID) + if (sc->bge_flags & BGEF_JUMBO_RXRING_VALID) return 0; for (i = 0; i < BGE_JUMBO_RX_RING_CNT; i++) { @@ -1890,7 +1890,7 @@ bge_init_rx_ring_jumbo(struct bge_softc } sc->bge_jumbo = i - 1; - sc->bge_flags |= BGE_JUMBO_RXRING_VALID; + sc->bge_flags |= BGEF_JUMBO_RXRING_VALID; rcb = &sc->bge_rdata->bge_info.bge_jumbo_rx_rcb; rcb->bge_maxlen_flags = 0; @@ -1906,7 +1906,7 @@ bge_free_rx_ring_jumbo(struct bge_softc { int i; - if (!(sc->bge_flags & BGE_JUMBO_RXRING_VALID)) + if (!(sc->bge_flags & BGEF_JUMBO_RXRING_VALID)) return; for (i = 0; i < BGE_JUMBO_RX_RING_CNT; i++) { @@ -1918,7 +1918,7 @@ bge_free_rx_ring_jumbo(struct bge_softc sizeof(struct bge_rx_bd)); } - sc->bge_flags &= ~BGE_JUMBO_RXRING_VALID; + sc->bge_flags &= ~BGEF_JUMBO_RXRING_VALID; } static void @@ -1927,7 +1927,7 @@ bge_free_tx_ring(struct bge_softc *sc) int i; struct txdmamap_pool_entry *dma; - if (!(sc->bge_flags & BGE_TXRING_VALID)) + if (!(sc->bge_flags & BGEF_TXRING_VALID)) return; for (i = 0; i < BGE_TX_RING_CNT; i++) { @@ -1948,7 +1948,7 @@ bge_free_tx_ring(struct bge_softc *sc) free(dma, M_DEVBUF); } - sc->bge_flags &= ~BGE_TXRING_VALID; + sc->bge_flags &= ~BGEF_TXRING_VALID; } static int @@ -1960,7 +1960,7 @@ bge_init_tx_ring(struct bge_softc *sc) bus_size_t maxsegsz; struct txdmamap_pool_entry *dma; - if (sc->bge_flags & BGE_TXRING_VALID) + if (sc->bge_flags & BGEF_TXRING_VALID) return 0; sc->bge_txcnt = 0; @@ -2006,7 +2006,7 @@ bge_init_tx_ring(struct bge_softc *sc) SLIST_INSERT_HEAD(&sc->txdma_list, dma, link); } - sc->bge_flags |= BGE_TXRING_VALID; + sc->bge_flags |= BGEF_TXRING_VALID; return 0; } @@ -2178,7 +2178,7 @@ bge_poll_fw(struct bge_softc *sc) aprint_error_dev(sc->bge_dev, "reset timed out\n"); return -1; } - } else if ((sc->bge_flags & BGE_NO_EEPROM) == 0) { + } else if ((sc->bge_flags & BGEF_NO_EEPROM) == 0) { /* * Poll the value location we just wrote until * we see the 1's complement of the magic number. @@ -2349,7 +2349,7 @@ bge_chipinit(struct bge_softc *sc) /* Set up the PCI DMA control register. */ dma_rw_ctl = BGE_PCI_READ_CMD | BGE_PCI_WRITE_CMD; - if (sc->bge_flags & BGE_PCIE) { + if (sc->bge_flags & BGEF_PCIE) { /* Read watermark not used, 128 bytes for write. */ DPRINTFN(4, ("(%s: PCI-Express DMA setting)\n", device_xname(sc->bge_dev))); @@ -2357,7 +2357,7 @@ bge_chipinit(struct bge_softc *sc) dma_rw_ctl |= BGE_PCIDMARWCTL_WR_WAT_SHIFT(7); else dma_rw_ctl |= BGE_PCIDMARWCTL_WR_WAT_SHIFT(3); - } else if (sc->bge_flags & BGE_PCIX) { + } else if (sc->bge_flags & BGEF_PCIX) { DPRINTFN(4, ("(:%s: PCI-X DMA setting)\n", device_xname(sc->bge_dev))); /* PCI-X bus */ @@ -2979,9 +2979,9 @@ bge_blockinit(struct bge_softc *sc) BGE_MACMODE_RX_STATS_ENB | BGE_MACMODE_TX_STATS_ENB | BGE_MACMODE_FRMHDR_DMA_ENB; - if (sc->bge_flags & BGE_PHY_FIBER_TBI) + if (sc->bge_flags & BGEF_FIBER_TBI) val |= BGE_PORTMODE_TBI; - else if (sc->bge_flags & BGE_PHY_FIBER_MII) + else if (sc->bge_flags & BGEF_FIBER_MII) val |= BGE_PORTMODE_GMII; else val |= BGE_PORTMODE_MII; @@ -3038,13 +3038,13 @@ bge_blockinit(struct bge_softc *sc) BGE_RDMAMODE_MBUF_RBD_CRPT_ATTN | BGE_RDMAMODE_MBUF_SBD_CRPT_ATTN; - if (sc->bge_flags & BGE_PCIE) + if (sc->bge_flags & BGEF_PCIE) val |= BGE_RDMAMODE_FIFO_LONG_BURST; if (BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM57766) { if (ifp->if_mtu <= ETHERMTU) val |= BGE_RDMAMODE_JMB_2K_MMRR; } - if (sc->bge_flags & BGE_TSO) + if (sc->bge_flags & BGEF_TSO) val |= BGE_RDMAMODE_TSO4_ENABLE; if (BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5720) { @@ -3134,7 +3134,7 @@ bge_blockinit(struct bge_softc *sc) /* 5718 step 60, 57XX step 90 */ /* Turn on send data initiator state machine */ - if (sc->bge_flags & BGE_TSO) { + if (sc->bge_flags & BGEF_TSO) { /* XXX: magic value from Linux driver */ CSR_WRITE_4(sc, BGE_SDI_MODE, BGE_SDIMODE_ENABLE | BGE_SDIMODE_HW_LSO_PRE_DMA); @@ -3165,7 +3165,7 @@ bge_blockinit(struct bge_softc *sc) * Enable attention when the link has changed state for * devices that use auto polling. */ - if (sc->bge_flags & BGE_PHY_FIBER_TBI) { + if (sc->bge_flags & BGEF_FIBER_TBI) { CSR_WRITE_4(sc, BGE_MI_STS, BGE_MISTS_LINK); } else { /* 5718 step 68 */ @@ -3378,7 +3378,7 @@ bge_attach(device_t parent, device_t sel &sc->bge_pciecap, NULL) != 0) || (BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5785)) { /* PCIe */ - sc->bge_flags |= BGE_PCIE; + sc->bge_flags |= BGEF_PCIE; /* Extract supported maximum payload size. */ reg = pci_conf_read(sc->sc_pc, sc->sc_pcitag, sc->bge_pciecap + PCI_PCIE_DCAP); @@ -3392,7 +3392,7 @@ bge_attach(device_t parent, device_t sel } else if ((pci_conf_read(sc->sc_pc, sc->sc_pcitag, BGE_PCI_PCISTATE) & BGE_PCISTATE_PCI_BUSMODE) == 0) { /* PCI-X */ - sc->bge_flags |= BGE_PCIX; + sc->bge_flags |= BGEF_PCIX; if (pci_get_capability(pa->pa_pc, pa->pa_tag, PCI_CAP_PCIX, &sc->bge_pcixcap, NULL) == 0) aprint_error_dev(sc->bge_dev, @@ -3419,18 +3419,18 @@ bge_attach(device_t parent, device_t sel case BGE_ASICREV_BCM5717: case BGE_ASICREV_BCM5719: case BGE_ASICREV_BCM5720: - sc->bge_flags |= BGE_5717_PLUS; + sc->bge_flags |= BGEF_5717_PLUS; /* FALLTHROUGH */ case BGE_ASICREV_BCM57765: case BGE_ASICREV_BCM57766: if (!BGE_IS_5717_PLUS(sc)) - sc->bge_flags |= BGE_57765_FAMILY; - sc->bge_flags |= BGE_57765_PLUS | BGE_5755_PLUS | - BGE_575X_PLUS | BGE_5705_PLUS | BGE_JUMBO_CAPABLE; + sc->bge_flags |= BGEF_57765_FAMILY; + sc->bge_flags |= BGEF_57765_PLUS | BGEF_5755_PLUS | + BGEF_575X_PLUS | BGEF_5705_PLUS | BGEF_JUMBO_CAPABLE; /* Jumbo frame on BCM5719 A0 does not work. */ if ((BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5719) && (sc->bge_chipid == BGE_CHIPID_BCM5719_A0)) - sc->bge_flags &= ~BGE_JUMBO_CAPABLE; + sc->bge_flags &= ~BGEF_JUMBO_CAPABLE; break; case BGE_ASICREV_BCM5755: case BGE_ASICREV_BCM5761: @@ -3438,26 +3438,26 @@ bge_attach(device_t parent, device_t sel case BGE_ASICREV_BCM5785: case BGE_ASICREV_BCM5787: case BGE_ASICREV_BCM57780: - sc->bge_flags |= BGE_5755_PLUS | BGE_575X_PLUS | BGE_5705_PLUS; + sc->bge_flags |= BGEF_5755_PLUS | BGEF_575X_PLUS | BGEF_5705_PLUS; break; case BGE_ASICREV_BCM5700: case BGE_ASICREV_BCM5701: case BGE_ASICREV_BCM5703: case BGE_ASICREV_BCM5704: - sc->bge_flags |= BGE_5700_FAMILY | BGE_JUMBO_CAPABLE; + sc->bge_flags |= BGEF_5700_FAMILY | BGEF_JUMBO_CAPABLE; break; case BGE_ASICREV_BCM5714_A0: case BGE_ASICREV_BCM5780: case BGE_ASICREV_BCM5714: - sc->bge_flags |= BGE_5714_FAMILY | BGE_JUMBO_CAPABLE; + sc->bge_flags |= BGEF_5714_FAMILY | BGEF_JUMBO_CAPABLE; /* FALLTHROUGH */ case BGE_ASICREV_BCM5750: case BGE_ASICREV_BCM5752: case BGE_ASICREV_BCM5906: - sc->bge_flags |= BGE_575X_PLUS; + sc->bge_flags |= BGEF_575X_PLUS; /* FALLTHROUGH */ case BGE_ASICREV_BCM5705: - sc->bge_flags |= BGE_5705_PLUS; + sc->bge_flags |= BGEF_5705_PLUS; break; } @@ -3467,12 +3467,20 @@ bge_attach(device_t parent, device_t sel case BGE_ASICREV_BCM5719: case BGE_ASICREV_BCM5720: case BGE_ASICREV_BCM5761: - sc->bge_flags |= BGE_APE; + sc->bge_flags |= BGEF_APE; break; } + /* + * The 40bit DMA bug applies to the 5714/5715 controllers and is + * not actually a MAC controller bug but an issue with the embedded + * PCIe to PCI-X bridge in the device. Use 40bit DMA workaround. + */ + if (BGE_IS_5714_FAMILY(sc) && ((sc->bge_flags & BGEF_PCIX) != 0)) + sc->bge_flags |= BGEF_40BIT_BUG; + /* Chips with APE need BAR2 access for APE registers/memory. */ - if ((sc->bge_flags & BGE_APE) != 0) { + if ((sc->bge_flags & BGEF_APE) != 0) { memtype = pci_mapreg_type(pa->pa_pc, pa->pa_tag, BGE_PCI_BAR2); if (pci_mapreg_map(pa, BGE_PCI_BAR2, memtype, 0, &sc->bge_apetag, &sc->bge_apehandle, NULL, @@ -3499,11 +3507,11 @@ bge_attach(device_t parent, device_t sel BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5761 || BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5785 || BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM57780) - sc->bge_flags |= BGE_CPMU_PRESENT; + sc->bge_flags |= BGEF_CPMU_PRESENT; /* Set MI_MODE */ mimode = BGE_MIMODE_PHYADDR(sc->bge_phy_addr); - if ((sc->bge_flags & BGE_CPMU_PRESENT) != 0) + if ((sc->bge_flags & BGEF_CPMU_PRESENT) != 0) mimode |= BGE_MIMODE_500KHZ_CONST; else mimode |= BGE_MIMODE_BASE; @@ -3518,11 +3526,11 @@ bge_attach(device_t parent, device_t sel * payloads by copying the received packets. */ if (BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5701 && - sc->bge_flags & BGE_PCIX) - sc->bge_flags |= BGE_RX_ALIGNBUG; + sc->bge_flags & BGEF_PCIX) + sc->bge_flags |= BGEF_RX_ALIGNBUG; if (BGE_IS_5700_FAMILY(sc)) - sc->bge_flags |= BGE_JUMBO_CAPABLE; + sc->bge_flags |= BGEF_JUMBO_CAPABLE; misccfg = CSR_READ_4(sc, BGE_MISC_CFG); misccfg &= BGE_MISCCFG_BOARD_ID_MASK; @@ -3530,7 +3538,7 @@ bge_attach(device_t parent, device_t sel if (BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5705 && (misccfg == BGE_MISCCFG_BOARD_ID_5788 || misccfg == BGE_MISCCFG_BOARD_ID_5788M)) - sc->bge_flags |= BGE_IS_5788; + sc->bge_flags |= BGEF_IS_5788; /* * Some controllers seem to require a special firmware to use @@ -3551,7 +3559,7 @@ bge_attach(device_t parent, device_t sel */ if ((PCI_PRODUCT(pa->pa_id) != PCI_PRODUCT_BROADCOM_BCM5754) && (PCI_PRODUCT(pa->pa_id) != PCI_PRODUCT_BROADCOM_BCM5754M)) - sc->bge_flags |= BGE_TSO; + sc->bge_flags |= BGEF_TSO; } capmask = 0xffffffff; /* XXX BMSR_DEFCAPMASK */ @@ -3571,28 +3579,28 @@ bge_attach(device_t parent, device_t sel PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_BROADCOM_BCM57795 || BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5906) { capmask &= ~BMSR_EXTSTAT; - sc->bge_flags |= BGE_PHY_NO_WIRESPEED; + sc->bge_phy_flags |= BGEPHYF_NO_WIRESPEED; } if (BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5700 || (BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5705 && (sc->bge_chipid != BGE_CHIPID_BCM5705_A0 && sc->bge_chipid != BGE_CHIPID_BCM5705_A1))) - sc->bge_flags |= BGE_PHY_NO_WIRESPEED; + sc->bge_phy_flags |= BGEPHYF_NO_WIRESPEED; /* Set various PHY bug flags. */ if (sc->bge_chipid == BGE_CHIPID_BCM5701_A0 || sc->bge_chipid == BGE_CHIPID_BCM5701_B0) - sc->bge_flags |= BGE_PHY_CRC_BUG; + sc->bge_phy_flags |= BGEPHYF_CRC_BUG; if (BGE_CHIPREV(sc->bge_chipid) == BGE_CHIPREV_5703_AX || BGE_CHIPREV(sc->bge_chipid) == BGE_CHIPREV_5704_AX) - sc->bge_flags |= BGE_PHY_ADC_BUG; + sc->bge_phy_flags |= BGEPHYF_ADC_BUG; if (sc->bge_chipid == BGE_CHIPID_BCM5704_A0) - sc->bge_flags |= BGE_PHY_5704_A0_BUG; + sc->bge_phy_flags |= BGEPHYF_5704_A0_BUG; if ((BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5700 || BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5701) && PCI_VENDOR(subid) == PCI_VENDOR_DELL) - sc->bge_flags |= BGE_PHY_NO_3LED; + sc->bge_phy_flags |= BGEPHYF_NO_3LED; if (BGE_IS_5705_PLUS(sc) && BGE_ASICREV(sc->bge_chipid) != BGE_ASICREV_BCM5906 && BGE_ASICREV(sc->bge_chipid) != BGE_ASICREV_BCM5785 && @@ -3604,11 +3612,11 @@ bge_attach(device_t parent, device_t sel BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5787) { if (PCI_PRODUCT(pa->pa_id) != PCI_PRODUCT_BROADCOM_BCM5722 && PCI_PRODUCT(pa->pa_id) != PCI_PRODUCT_BROADCOM_BCM5756) - sc->bge_flags |= BGE_PHY_JITTER_BUG; + sc->bge_phy_flags |= BGEPHYF_JITTER_BUG; if (PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_BROADCOM_BCM5755M) - sc->bge_flags |= BGE_PHY_ADJUST_TRIM; + sc->bge_phy_flags |= BGEPHYF_ADJUST_TRIM; } else - sc->bge_flags |= BGE_PHY_BER_BUG; + sc->bge_phy_flags |= BGEPHYF_BER_BUG; } /* @@ -3617,18 +3625,18 @@ bge_attach(device_t parent, device_t sel */ if (prop_dictionary_get_bool(device_properties(self), "without-seeprom", &no_seeprom) && no_seeprom) - sc->bge_flags |= BGE_NO_EEPROM; + sc->bge_flags |= BGEF_NO_EEPROM; else if (BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5906) - sc->bge_flags |= BGE_NO_EEPROM; + sc->bge_flags |= BGEF_NO_EEPROM; /* Now check the 'ROM failed' bit on the RX CPU */ else if (CSR_READ_4(sc, BGE_RXCPU_MODE) & BGE_RXCPUMODE_ROMFAIL) - sc->bge_flags |= BGE_NO_EEPROM; + sc->bge_flags |= BGEF_NO_EEPROM; sc->bge_asf_mode = 0; /* No ASF if APE present. */ - if ((sc->bge_flags & BGE_APE) == 0) { + if ((sc->bge_flags & BGEF_APE) == 0) { if (bge_allow_asf && (bge_readmem_ind(sc, BGE_SRAM_DATA_SIG) == BGE_SRAM_DATA_SIG_MAGIC)) { if (bge_readmem_ind(sc, BGE_SRAM_DATA_CFG) & @@ -3670,11 +3678,11 @@ bge_attach(device_t parent, device_t sel BGE_SRAM_DATA_VER_SHIFT; if ((0 < tmp) && (tmp < 0x100)) hwcfg2 = bge_readmem_ind(sc, BGE_SRAM_DATA_CFG_2); - if (sc->bge_flags & BGE_PCIE) + if (sc->bge_flags & BGEF_PCIE) hwcfg3 = bge_readmem_ind(sc, BGE_SRAM_DATA_CFG_3); if (BGE_ASICREV(sc->bge_chipid == BGE_ASICREV_BCM5785)) hwcfg4 = bge_readmem_ind(sc, BGE_SRAM_DATA_CFG_4); - } else if (!(sc->bge_flags & BGE_NO_EEPROM)) { + } else if (!(sc->bge_flags & BGEF_NO_EEPROM)) { bge_read_eeprom(sc, (void *)&hwcfg, BGE_EE_HWCFG_OFFSET, sizeof(hwcfg)); hwcfg = be32toh(hwcfg); @@ -3717,6 +3725,22 @@ bge_attach(device_t parent, device_t sel sc->bge_dmatag = pa->pa_dmat64; else sc->bge_dmatag = pa->pa_dmat; + + /* 40bit DMA workaround */ + if (sizeof(bus_addr_t) > 4) { + if ((sc->bge_flags & BGEF_40BIT_BUG) != 0) { + bus_dma_tag_t olddmatag = sc->bge_dmatag; /* save */ + + if (bus_dmatag_subregion(olddmatag, 0, + (bus_addr_t)(1ULL << 40), &(sc->bge_dmatag), + BUS_DMA_NOWAIT) != 0) { + aprint_error_dev(self, + "WARNING: failed to restrict dma range," + " falling back to parent bus dma range\n"); + sc->bge_dmatag = olddmatag; + } + } + } DPRINTFN(5, ("bus_dmamem_alloc\n")); if (bus_dmamem_alloc(sc->bge_dmatag, sizeof(struct bge_ring_data), PAGE_SIZE, 0, &sc->bge_ring_seg, 1, @@ -3817,7 +3841,7 @@ bge_attach(device_t parent, device_t sel sc->ethercom.ec_capabilities |= ETHERCAP_VLAN_HWTAGGING | ETHERCAP_VLAN_MTU; - if (sc->bge_flags & BGE_TSO) + if (sc->bge_flags & BGEF_TSO) sc->ethercom.ec_if.if_capabilities |= IFCAP_TSOv4; /* @@ -3839,17 +3863,21 @@ bge_attach(device_t parent, device_t sel if (PCI_PRODUCT(pa->pa_id) == SK_SUBSYSID_9D41 || (hwcfg & BGE_HWCFG_MEDIA) == BGE_MEDIA_FIBER) { if (BGE_IS_5714_FAMILY(sc)) - sc->bge_flags |= BGE_PHY_FIBER_MII; + sc->bge_flags |= BGEF_FIBER_MII; else - sc->bge_flags |= BGE_PHY_FIBER_TBI; + sc->bge_flags |= BGEF_FIBER_TBI; } + /* Set bge_phy_flags before prop_dictionary_set_uint32() */ + if (BGE_IS_JUMBO_CAPABLE(sc)) + sc->bge_phy_flags |= BGEPHYF_JUMBO_CAPABLE; + /* set phyflags and chipid before mii_attach() */ dict = device_properties(self); - prop_dictionary_set_uint32(dict, "phyflags", sc->bge_flags); + prop_dictionary_set_uint32(dict, "phyflags", sc->bge_phy_flags); prop_dictionary_set_uint32(dict, "chipid", sc->bge_chipid); - if (sc->bge_flags & BGE_PHY_FIBER_TBI) { + if (sc->bge_flags & BGEF_FIBER_TBI) { ifmedia_init(&sc->bge_ifmedia, IFM_IMASK, bge_ifmedia_upd, bge_ifmedia_sts); ifmedia_add(&sc->bge_ifmedia, IFM_ETHER |IFM_1000_SX, 0, NULL); @@ -4016,7 +4044,7 @@ bge_reset(struct bge_softc *sc) if (BGE_IS_575X_PLUS(sc) && !BGE_IS_5714_FAMILY(sc) && (BGE_ASICREV(sc->bge_chipid) != BGE_ASICREV_BCM5906)) { - if (sc->bge_flags & BGE_PCIE) + if (sc->bge_flags & BGEF_PCIE) write_op = bge_writemem_direct; else write_op = bge_writemem_ind; @@ -4025,7 +4053,7 @@ bge_reset(struct bge_softc *sc) /* 57XX step 4 */ /* Acquire the NVM lock */ - if ((sc->bge_flags & BGE_NO_EEPROM) == 0 && + if ((sc->bge_flags & BGEF_NO_EEPROM) == 0 && BGE_ASICREV(sc->bge_chipid) != BGE_ASICREV_BCM5700 && BGE_ASICREV(sc->bge_chipid) != BGE_ASICREV_BCM5701) { CSR_WRITE_4(sc, BGE_NVRAM_SWARB, BGE_NVRAMSWARB_SET1); @@ -4073,7 +4101,7 @@ bge_reset(struct bge_softc *sc) /* * XXX: from FreeBSD/Linux; no documentation */ - if (sc->bge_flags & BGE_PCIE) { + if (sc->bge_flags & BGEF_PCIE) { if (BGE_ASICREV(sc->bge_chipid != BGE_ASICREV_BCM5785) && !BGE_IS_57765_PLUS(sc) && (CSR_READ_4(sc, BGE_PHY_TEST_CTRL_REG) == @@ -4106,19 +4134,19 @@ bge_reset(struct bge_softc *sc) * powered up in D0 uninitialized. */ if (BGE_IS_5705_PLUS(sc) && - (sc->bge_flags & BGE_CPMU_PRESENT) == 0) + (sc->bge_flags & BGEF_CPMU_PRESENT) == 0) reset |= BGE_MISCCFG_GPHY_PD_OVERRIDE; /* Issue global reset */ write_op(sc, BGE_MISC_CFG, reset); /* 5718 reset step 7, 57XX step 8 */ - if (sc->bge_flags & BGE_PCIE) + if (sc->bge_flags & BGEF_PCIE) delay(100*1000); /* too big */ else delay(1000); - if (sc->bge_flags & BGE_PCIE) { + if (sc->bge_flags & BGEF_PCIE) { if (sc->bge_chipid == BGE_CHIPID_BCM5750_A0) { DELAY(500000); /* XXX: Magic Numbers */ @@ -4135,7 +4163,7 @@ bge_reset(struct bge_softc *sc) PCI_PCIE_DCSR_ENA_NO_SNOOP); /* Set PCIE max payload size to 128 for older PCIe devices */ - if ((sc->bge_flags & BGE_CPMU_PRESENT) == 0) + if ((sc->bge_flags & BGEF_CPMU_PRESENT) == 0) devctl &= ~(0x00e0); /* Clear device status register. Write 1b to clear */ devctl |= PCI_PCIE_DCSR_URD | PCI_PCIE_DCSR_FED @@ -4158,7 +4186,7 @@ bge_reset(struct bge_softc *sc) BGE_HIF_SWAP_OPTIONS | BGE_PCIMISCCTL_PCISTATE_RW); val = BGE_PCISTATE_ROM_ENABLE | BGE_PCISTATE_ROM_RETRY_ENABLE; if (sc->bge_chipid == BGE_CHIPID_BCM5704_A0 && - (sc->bge_flags & BGE_PCIX) != 0) + (sc->bge_flags & BGEF_PCIX) != 0) val |= BGE_PCISTATE_RETRY_SAME_DMA; if ((sc->bge_mfw_flags & BGE_MFW_ON_APE) != 0) val |= BGE_PCISTATE_ALLOW_APE_CTLSPC_WR | @@ -4168,10 +4196,23 @@ bge_reset(struct bge_softc *sc) pci_conf_write(sc->sc_pc, sc->sc_pcitag, BGE_PCI_CACHESZ, cachesize); pci_conf_write(sc->sc_pc, sc->sc_pcitag, BGE_PCI_CMD, command); - /* Step 11: disable PCI-X Relaxed Ordering. */ - if (sc->bge_flags & BGE_PCIX) { + /* 57xx step 11: disable PCI-X Relaxed Ordering. */ + if (sc->bge_flags & BGEF_PCIX) { reg = pci_conf_read(sc->sc_pc, sc->sc_pcitag, sc->bge_pcixcap + PCI_PCIX_CMD); + /* Set max memory read byte count to 2K */ + if (BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5703) { + reg &= ~PCI_PCIX_CMD_BYTECNT_MASK; + reg |= PCI_PCIX_CMD_BCNT_2048; + } else if (BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5704){ + /* + * For 5704, set max outstanding split transaction + * field to 0 (0 means it supports 1 request) + */ + reg &= ~(PCI_PCIX_CMD_SPLTRANS_MASK + | PCI_PCIX_CMD_BYTECNT_MASK); + reg |= PCI_PCIX_CMD_BCNT_2048; + } pci_conf_write(sc->sc_pc, sc->sc_pcitag, sc->bge_pcixcap + PCI_PCIX_CMD, reg & ~PCI_PCIX_CMD_RELAXED_ORDER); } @@ -4226,7 +4267,7 @@ bge_reset(struct bge_softc *sc) * adjustment to insure the SERDES drive level is set * to 1.2V. */ - if (sc->bge_flags & BGE_PHY_FIBER_TBI && + if (sc->bge_flags & BGEF_FIBER_TBI && BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5704) { uint32_t serdescfg; @@ -4235,7 +4276,7 @@ bge_reset(struct bge_softc *sc) CSR_WRITE_4(sc, BGE_SERDES_CFG, serdescfg); } - if (sc->bge_flags & BGE_PCIE && + if (sc->bge_flags & BGEF_PCIE && !BGE_IS_57765_PLUS(sc) && sc->bge_chipid != BGE_CHIPID_BCM5750_A0 && BGE_ASICREV(sc->bge_chipid) != BGE_ASICREV_BCM5785) { @@ -4374,7 +4415,7 @@ bge_rxeof(struct bge_softc *sc) * the Rx buffer has the layer-2 header unaligned. * If our CPU requires alignment, re-align by copying. */ - if (sc->bge_flags & BGE_RX_ALIGNBUG) { + if (sc->bge_flags & BGEF_RX_ALIGNBUG) { memmove(mtod(m, char *) + ETHER_ALIGN, m->m_data, cur_rx->bge_len); m->m_data += ETHER_ALIGN; @@ -4640,7 +4681,7 @@ bge_tick(void *xsc) else bge_stats_update(sc); - if (sc->bge_flags & BGE_PHY_FIBER_TBI) { + if (sc->bge_flags & BGEF_FIBER_TBI) { /* * Since in TBI mode auto-polling can't be used we should poll * link status manually. Here we register pending link event @@ -5419,7 +5460,7 @@ bge_ifmedia_upd(struct ifnet *ifp) int rc; /* If this is a 1000baseX NIC, enable the TBI port. */ - if (sc->bge_flags & BGE_PHY_FIBER_TBI) { + if (sc->bge_flags & BGEF_FIBER_TBI) { if (IFM_TYPE(ifm->ifm_media) != IFM_ETHER) return EINVAL; switch (IFM_SUBTYPE(ifm->ifm_media)) { @@ -5476,7 +5517,7 @@ bge_ifmedia_upd(struct ifnet *ifp) * things working was to receive a packet and get a RX intr. */ if (BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5700 || - sc->bge_flags & BGE_IS_5788) + sc->bge_flags & BGEF_IS_5788) BGE_SETBIT(sc, BGE_MISC_LOCAL_CTL, BGE_MLC_INTR_SET); else BGE_SETBIT(sc, BGE_HCC_MODE, BGE_HCCMODE_COAL_NOW); @@ -5493,7 +5534,7 @@ bge_ifmedia_sts(struct ifnet *ifp, struc struct bge_softc *sc = ifp->if_softc; struct mii_data *mii = &sc->bge_mii; - if (sc->bge_flags & BGE_PHY_FIBER_TBI) { + if (sc->bge_flags & BGEF_FIBER_TBI) { ifmr->ifm_status = IFM_AVALID; ifmr->ifm_active = IFM_ETHER; if (CSR_READ_4(sc, BGE_MAC_STS) & @@ -5549,7 +5590,7 @@ bge_ioctl(struct ifnet *ifp, u_long comm switch (command) { case SIOCSIFMEDIA: /* XXX Flow control is not supported for 1000BASE-SX */ - if (sc->bge_flags & BGE_PHY_FIBER_TBI) { + if (sc->bge_flags & BGEF_FIBER_TBI) { ifr->ifr_media &= ~IFM_ETH_FMASK; sc->bge_flowflags = 0; } @@ -5569,7 +5610,7 @@ bge_ioctl(struct ifnet *ifp, u_long comm } /* FALLTHROUGH */ case SIOCGIFMEDIA: - if (sc->bge_flags & BGE_PHY_FIBER_TBI) { + if (sc->bge_flags & BGEF_FIBER_TBI) { error = ifmedia_ioctl(ifp, ifr, &sc->bge_ifmedia, command); } else { @@ -5728,7 +5769,7 @@ bge_stop(struct ifnet *ifp, int disable) /* * Isolate/power down the PHY. */ - if (!(sc->bge_flags & BGE_PHY_FIBER_TBI)) + if (!(sc->bge_flags & BGEF_FIBER_TBI)) mii_down(&sc->bge_mii); sc->bge_tx_saved_considx = BGE_TXCONS_UNSET; @@ -5787,7 +5828,7 @@ bge_link_upd(struct bge_softc *sc) return; } - if (sc->bge_flags & BGE_PHY_FIBER_TBI) { + if (sc->bge_flags & BGEF_FIBER_TBI) { status = CSR_READ_4(sc, BGE_MAC_STS); if (status & BGE_MACSTAT_TBI_PCS_SYNCHED) { if (!BGE_STS_BIT(sc, BGE_STS_LINK)) { @@ -5934,40 +5975,40 @@ bge_debug_info(struct bge_softc *sc) printf(" - 5714 Family\n"); if (BGE_IS_5700_FAMILY(sc)) printf(" - 5700 Family\n"); - if (sc->bge_flags & BGE_IS_5788) + if (sc->bge_flags & BGEF_IS_5788) printf(" - 5788\n"); - if (sc->bge_flags & BGE_JUMBO_CAPABLE) + if (sc->bge_flags & BGEF_JUMBO_CAPABLE) printf(" - Supports Jumbo Frames\n"); - if (sc->bge_flags & BGE_NO_EEPROM) + if (sc->bge_flags & BGEF_NO_EEPROM) printf(" - No EEPROM\n"); - if (sc->bge_flags & BGE_PCIX) + if (sc->bge_flags & BGEF_PCIX) printf(" - PCI-X Bus\n"); - if (sc->bge_flags & BGE_PCIE) + if (sc->bge_flags & BGEF_PCIE) printf(" - PCI Express Bus\n"); - if (sc->bge_flags & BGE_RX_ALIGNBUG) + if (sc->bge_flags & BGEF_RX_ALIGNBUG) printf(" - RX Alignment Bug\n"); - if (sc->bge_flags & BGE_APE) + if (sc->bge_flags & BGEF_APE) printf(" - APE\n"); - if (sc->bge_flags & BGE_CPMU_PRESENT) + if (sc->bge_flags & BGEF_CPMU_PRESENT) printf(" - CPMU\n"); - if (sc->bge_flags & BGE_TSO) + if (sc->bge_flags & BGEF_TSO) printf(" - TSO\n"); - if (sc->bge_flags & BGE_PHY_NO_3LED) + if (sc->bge_phy_flags & BGEPHYF_NO_3LED) printf(" - No 3 LEDs\n"); - if (sc->bge_flags & BGE_PHY_CRC_BUG) + if (sc->bge_phy_flags & BGEPHYF_CRC_BUG) printf(" - CRC bug\n"); - if (sc->bge_flags & BGE_PHY_ADC_BUG) + if (sc->bge_phy_flags & BGEPHYF_ADC_BUG) printf(" - ADC bug\n"); - if (sc->bge_flags & BGE_PHY_5704_A0_BUG) + if (sc->bge_phy_flags & BGEPHYF_5704_A0_BUG) printf(" - 5704 A0 bug\n"); - if (sc->bge_flags & BGE_PHY_JITTER_BUG) + if (sc->bge_phy_flags & BGEPHYF_JITTER_BUG) printf(" - jitter bug\n"); - if (sc->bge_flags & BGE_PHY_BER_BUG) + if (sc->bge_phy_flags & BGEPHYF_BER_BUG) printf(" - BER bug\n"); - if (sc->bge_flags & BGE_PHY_ADJUST_TRIM) + if (sc->bge_phy_flags & BGEPHYF_ADJUST_TRIM) printf(" - adjust trim\n"); - if (sc->bge_flags & BGE_PHY_NO_WIRESPEED) + if (sc->bge_phy_flags & BGEPHYF_NO_WIRESPEED) printf(" - no wirespeed\n"); } #endif /* BGE_DEBUG */ @@ -5978,7 +6019,7 @@ bge_get_eaddr_fw(struct bge_softc *sc, u prop_dictionary_t dict; prop_data_t ea; - if ((sc->bge_flags & BGE_NO_EEPROM) == 0) + if ((sc->bge_flags & BGEF_NO_EEPROM) == 0) return 1; dict = device_properties(sc->bge_dev); Index: src/sys/dev/pci/if_bgereg.h diff -u src/sys/dev/pci/if_bgereg.h:1.56.18.2 src/sys/dev/pci/if_bgereg.h:1.56.18.3 --- src/sys/dev/pci/if_bgereg.h:1.56.18.2 Sat Sep 7 16:39:32 2013 +++ src/sys/dev/pci/if_bgereg.h Sun Nov 17 18:24:05 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: if_bgereg.h,v 1.56.18.2 2013/09/07 16:39:32 bouyer Exp $ */ +/* $NetBSD: if_bgereg.h,v 1.56.18.3 2013/11/17 18:24:05 bouyer Exp $ */ /* * Copyright (c) 2001 Wind River Systems * Copyright (c) 1997, 1998, 1999, 2001 @@ -2607,35 +2607,39 @@ struct vpd_key { #define VPD_RES_WRITE 0x81 /* start of read/write area */ #define VPD_RES_END 0x78 /* end tag */ -/* Flags for phyflags in proplib. */ -#define BGE_TXRING_VALID 0x00000001 -#define BGE_RXRING_VALID 0x00000002 -#define BGE_JUMBO_RXRING_VALID 0x00000004 -#define BGE_RX_ALIGNBUG 0x00000008 -#define BGE_PHY_NO_3LED 0x00000010 -#define BGE_PCIX 0x00000020 -#define BGE_PCIE 0x00000040 -#define BGE_NO_EEPROM 0x00000100 -#define BGE_JUMBO_CAPABLE 0x00000200 -#define BGE_10_100_ONLY 0x00000400 -#define BGE_PHY_FIBER_TBI 0x00000800 -#define BGE_PHY_FIBER_MII 0x00001000 -#define BGE_PHY_CRC_BUG 0x00002000 -#define BGE_PHY_ADC_BUG 0x00004000 -#define BGE_PHY_5704_A0_BUG 0x00008000 -#define BGE_PHY_JITTER_BUG 0x00010000 -#define BGE_PHY_BER_BUG 0x00020000 -#define BGE_PHY_ADJUST_TRIM 0x00040000 -#define BGE_PHY_NO_WIRESPEED 0x00080000 -#define BGE_IS_5788 0x00100000 -#define BGE_5705_PLUS 0x00200000 -#define BGE_575X_PLUS 0x00400000 -#define BGE_5755_PLUS 0x00800000 -#define BGE_5714_FAMILY 0x01000000 -#define BGE_5700_FAMILY 0x02000000 -#define BGE_5717_PLUS 0x04000000 -#define BGE_57765_FAMILY 0x08000000 -#define BGE_57765_PLUS 0x10000000 -#define BGE_APE 0x20000000 -#define BGE_CPMU_PRESENT 0x40000000 -#define BGE_TSO 0x80000000 +/* Flags for bge_lags */ +#define BGEF_FIBER_TBI 0x00000001 +#define BGEF_JUMBO_CAPABLE 0x00000002 +#define BGEF_FIBER_MII 0x00000004 +#define BGEF_CPMU_PRESENT 0x00000008 +#define BGEF_APE 0x00000010 +/* Reserved for BGEF_MSI 0x00000020 */ +#define BGEF_PCIX 0x00000040 +#define BGEF_PCIE 0x00000080 +#define BGEF_TSO 0x00000100 +#define BGEF_NO_EEPROM 0x00000200 +#define BGEF_5700_FAMILY 0x00000800 +#define BGEF_5705_PLUS 0x00001000 +#define BGEF_575X_PLUS 0x00002000 +#define BGEF_5755_PLUS 0x00004000 +#define BGEF_IS_5788 0x00008000 +#define BGEF_5714_FAMILY 0x00010000 +#define BGEF_5717_PLUS 0x00020000 +#define BGEF_57765_FAMILY 0x00040000 +#define BGEF_57765_PLUS 0x00080000 +#define BGEF_40BIT_BUG 0x00100000 +#define BGEF_RX_ALIGNBUG 0x00800000 +#define BGEF_TXRING_VALID 0x20000000 +#define BGEF_RXRING_VALID 0x40000000 +#define BGEF_JUMBO_RXRING_VALID 0x80000000 + +/* PHY related flags in bge_phy_flags. Also used in phyflags in proplib. */ +#define BGEPHYF_NO_3LED 0x00000001 +#define BGEPHYF_CRC_BUG 0x00000002 +#define BGEPHYF_ADC_BUG 0x00000004 +#define BGEPHYF_5704_A0_BUG 0x00000008 +#define BGEPHYF_JITTER_BUG 0x00000010 +#define BGEPHYF_BER_BUG 0x00000020 +#define BGEPHYF_ADJUST_TRIM 0x00000040 +#define BGEPHYF_NO_WIRESPEED 0x00000080 +#define BGEPHYF_JUMBO_CAPABLE 0x00010000 /* Copied from BGEF_JUMBO_CAPAABLE*/ Index: src/sys/dev/pci/if_bgevar.h diff -u src/sys/dev/pci/if_bgevar.h:1.9.2.1 src/sys/dev/pci/if_bgevar.h:1.9.2.2 --- src/sys/dev/pci/if_bgevar.h:1.9.2.1 Sat Sep 7 16:39:32 2013 +++ src/sys/dev/pci/if_bgevar.h Sun Nov 17 18:24:05 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: if_bgevar.h,v 1.9.2.1 2013/09/07 16:39:32 bouyer Exp $ */ +/* $NetBSD: if_bgevar.h,v 1.9.2.2 2013/11/17 18:24:05 bouyer Exp $ */ /* * Copyright (c) 2001 Wind River Systems * Copyright (c) 1997, 1998, 1999, 2001 @@ -315,6 +315,7 @@ struct bge_softc { #define BGE_STS_CLRBIT(sc, x) ((sc)->bge_sts &= ~(x)) int bge_if_flags; uint32_t bge_flags; + uint32_t bge_phy_flags; int bge_flowflags; #ifdef BGE_EVENT_COUNTERS /*