Add pcie_set_max_readrq() to avoid code duplication between various network
authorSepherosa Ziehau <sephe@dragonflybsd.org>
Sun, 19 Oct 2008 09:13:58 +0000 (09:13 +0000)
committerSepherosa Ziehau <sephe@dragonflybsd.org>
Sun, 19 Oct 2008 09:13:58 +0000 (09:13 +0000)
device drivers.

sys/bus/pci/pci.c
sys/bus/pci/pcivar.h
sys/dev/netif/bge/if_bge.c
sys/dev/netif/bge/if_bgereg.h
sys/dev/netif/re/if_re.c

index 48297ff..39b44aa 100644 (file)
@@ -24,7 +24,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/pci/pci.c,v 1.141.2.15 2002/04/30 17:48:18 tmm Exp $
- * $DragonFly: src/sys/bus/pci/pci.c,v 1.56 2008/09/08 10:16:23 hasso Exp $
+ * $DragonFly: src/sys/bus/pci/pci.c,v 1.57 2008/10/19 09:13:58 sephe Exp $
  *
  */
 
@@ -145,6 +145,36 @@ pcie_slot_implemented(device_t dev)
        return pcie_slotimpl(&dinfo->cfg);
 }
 
+void
+pcie_set_max_readrq(device_t dev, uint16_t rqsize)
+{
+       uint8_t expr_ptr;
+       uint16_t val;
+
+       rqsize &= PCIEM_DEVCTL_MAX_READRQ_MASK;
+       if (rqsize > PCIEM_DEVCTL_MAX_READRQ_4096) {
+               panic("%s: invalid max read request size 0x%02x\n",
+                     device_get_nameunit(dev), rqsize);
+       }
+
+       expr_ptr = pci_get_pciecap_ptr(dev);
+       if (!expr_ptr)
+               panic("%s: not PCIe device\n", device_get_nameunit(dev));
+
+       val = pci_read_config(dev, expr_ptr + PCIER_DEVCTRL, 2);
+       if ((val & PCIEM_DEVCTL_MAX_READRQ_MASK) != rqsize) {
+               if (bootverbose)
+                       device_printf(dev, "adjust device control 0x%04x", val);
+
+               val &= ~PCIEM_DEVCTL_MAX_READRQ_MASK;
+               val |= rqsize;
+               pci_write_config(dev, expr_ptr + PCIER_DEVCTRL, val, 2);
+
+               if (bootverbose)
+                       kprintf(" -> 0x%04x\n", val);
+       }
+}
+
 /* return base address of memory or port map */
 
 static u_int32_t
index ae5a80b..46d4d66 100644 (file)
@@ -24,7 +24,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/pci/pcivar.h,v 1.48 2000/09/28 00:37:32 peter Exp $
- * $DragonFly: src/sys/bus/pci/pcivar.h,v 1.16 2008/09/05 10:39:36 hasso Exp $
+ * $DragonFly: src/sys/bus/pci/pcivar.h,v 1.17 2008/10/19 09:13:58 sephe Exp $
  *
  */
 
@@ -382,6 +382,7 @@ PCIB_ACCESSOR(bus,          BUS,            u_int32_t)
 device_t pci_find_bsf(u_int8_t, u_int8_t, u_int8_t);
 device_t pci_find_device(u_int16_t, u_int16_t);
 int pcie_slot_implemented(device_t);
+void pcie_set_max_readrq(device_t, uint16_t);
 #endif
 
 /* for compatibility to FreeBSD-2.2 and 3.x versions of PCI code */
index b5e4cdc..3705598 100644 (file)
@@ -31,7 +31,7 @@
  * THE POSSIBILITY OF SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/dev/bge/if_bge.c,v 1.3.2.39 2005/07/03 03:41:18 silby Exp $
- * $DragonFly: src/sys/dev/netif/bge/if_bge.c,v 1.109 2008/10/19 08:39:55 sephe Exp $
+ * $DragonFly: src/sys/dev/netif/bge/if_bge.c,v 1.110 2008/10/19 09:13:58 sephe Exp $
  *
  */
 
@@ -309,7 +309,6 @@ static uint32_t     bge_readreg_ind(struct bge_softc *, uint32_t);
 #endif
 static void    bge_writereg_ind(struct bge_softc *, uint32_t, uint32_t);
 static void    bge_writemem_direct(struct bge_softc *, uint32_t, uint32_t);
-static void    bge_set_max_readrq(struct bge_softc *);
 
 static int     bge_miibus_readreg(device_t, int, int);
 static int     bge_miibus_writereg(device_t, int, int, int);
@@ -414,32 +413,6 @@ bge_writemem_ind(struct bge_softc *sc, uint32_t off, uint32_t val)
        pci_write_config(dev, BGE_PCI_MEMWIN_BASEADDR, 0, 4);
 }
 
-/*
- * PCI Express only
- */
-static void
-bge_set_max_readrq(struct bge_softc *sc)
-{
-       device_t dev = sc->bge_dev;
-       uint16_t val;
-       uint8_t expr_ptr;
-
-       KKASSERT((sc->bge_flags & BGE_FLAG_PCIE) && sc->bge_expr_ptr != 0);
-       expr_ptr = sc->bge_expr_ptr;
-
-       val = pci_read_config(dev, expr_ptr + PCIER_DEVCTRL, 2);
-       if ((val & PCIEM_DEVCTL_MAX_READRQ_MASK) !=
-           PCIEM_DEVCTL_MAX_READRQ_4096) {
-               device_printf(dev, "adjust device control 0x%04x ", val);
-
-               val &= ~PCIEM_DEVCTL_MAX_READRQ_MASK;
-               val |= PCIEM_DEVCTL_MAX_READRQ_4096;
-               pci_write_config(dev, expr_ptr + PCIER_DEVCTRL, val, 2);
-
-               kprintf("-> 0x%04x\n", val);
-       }
-}
-
 #ifdef notdef
 static uint32_t
 bge_readreg_ind(struct bge_softc *sc, uin32_t off)
@@ -1774,11 +1747,9 @@ bge_attach(device_t dev)
         * Check if this is a PCI-X or PCI Express device.
         */
        if (BGE_IS_5705_PLUS(sc)) {
-               sc->bge_expr_ptr = pci_get_pciecap_ptr(dev);
-
-               if (sc->bge_expr_ptr != 0) {
+               if (pci_get_pciecap_ptr(dev) != 0) {
                        sc->bge_flags |= BGE_FLAG_PCIE;
-                       bge_set_max_readrq(sc);
+                       pcie_set_max_readrq(dev, PCIEM_DEVCTL_MAX_READRQ_4096);
                }
        } else {
                /*
index a25933f..f2e57d4 100644 (file)
@@ -31,7 +31,7 @@
  * THE POSSIBILITY OF SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/dev/bge/if_bgereg.h,v 1.1.2.16 2004/09/23 20:11:18 ps Exp $
- * $DragonFly: src/sys/dev/netif/bge/if_bgereg.h,v 1.23 2008/07/06 06:47:10 sephe Exp $
+ * $DragonFly: src/sys/dev/netif/bge/if_bgereg.h,v 1.24 2008/10/19 09:13:58 sephe Exp $
  */
 
 /*
@@ -2403,7 +2403,6 @@ struct bge_softc {
 
        void                    (*bge_link_upd)(struct bge_softc *, uint32_t);
        uint32_t                bge_link_chg;
-       uint8_t                 bge_expr_ptr;
 };
 
 #define BGE_NSEG_NEW           32
index d7f8db1..67fdb70 100644 (file)
@@ -33,7 +33,7 @@
  * THE POSSIBILITY OF SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/dev/re/if_re.c,v 1.25 2004/06/09 14:34:01 naddy Exp $
- * $DragonFly: src/sys/dev/netif/re/if_re.c,v 1.95 2008/10/19 08:39:55 sephe Exp $
+ * $DragonFly: src/sys/dev/netif/re/if_re.c,v 1.96 2008/10/19 09:13:58 sephe Exp $
  */
 
 /*
@@ -305,7 +305,6 @@ static void re_miibus_statchg(device_t);
 static void    re_setmulti(struct re_softc *);
 static void    re_reset(struct re_softc *, int);
 static void    re_get_eaddr(struct re_softc *, uint8_t *);
-static void    re_set_max_readrq(struct re_softc *, uint16_t);
 
 static void    re_setup_hw_im(struct re_softc *);
 static void    re_setup_sim_im(struct re_softc *);
@@ -2654,9 +2653,11 @@ re_init(void *xsc)
                         * 512 seems to be the only value that works
                         * reliably with jumbo frame
                         */
-                       re_set_max_readrq(sc, PCIEM_DEVCTL_MAX_READRQ_512);
+                       pcie_set_max_readrq(sc->re_dev,
+                               PCIEM_DEVCTL_MAX_READRQ_512);
                } else {
-                       re_set_max_readrq(sc, PCIEM_DEVCTL_MAX_READRQ_4096);
+                       pcie_set_max_readrq(sc->re_dev,
+                               PCIEM_DEVCTL_MAX_READRQ_4096);
                }
        }
 
@@ -3365,33 +3366,6 @@ re_get_eaddr(struct re_softc *sc, uint8_t *eaddr)
                eaddr[i] = CSR_READ_1(sc, RE_IDR0 + i);
 }
 
-static void
-re_set_max_readrq(struct re_softc *sc, uint16_t size)
-{
-       device_t dev = sc->re_dev;
-       uint8_t expr_ptr;
-       uint16_t val, rqsize;
-
-       rqsize = size & PCIEM_DEVCTL_MAX_READRQ_MASK;
-       if (rqsize > PCIEM_DEVCTL_MAX_READRQ_4096)
-               panic("invalid read request size %02x\n", rqsize);
-
-       expr_ptr = pci_get_pciecap_ptr(dev);
-       KKASSERT(expr_ptr != 0);
-
-       val = pci_read_config(dev, expr_ptr + PCIER_DEVCTRL, 2);
-       if ((val & PCIEM_DEVCTL_MAX_READRQ_MASK) != rqsize) {
-               device_printf(dev, "adjust device control "
-                             "0x%04x ", val);
-
-               val &= ~PCIEM_DEVCTL_MAX_READRQ_MASK;
-               val |= rqsize;
-               pci_write_config(dev, expr_ptr + PCIER_DEVCTRL, val, 2);
-
-               kprintf("-> 0x%04x\n", val);
-       }
-}
-
 static int
 re_jpool_alloc(struct re_softc *sc)
 {