The following diff adds support for newer Broadcom bge(4)
chipsets based on the BCM5761/BCM5784/BCM5785 and BCM57780
ASIC cores. Tested with a handful of older chipsets and
with the BCM5764/BCM5784 chipsets by some users.


Index: pci/if_bge.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/if_bge.c,v
retrieving revision 1.262
diff -u -p -r1.262 if_bge.c
--- pci/if_bge.c        23 Apr 2009 19:15:07 -0000      1.262
+++ pci/if_bge.c        17 May 2009 11:58:14 -0000
@@ -240,6 +240,7 @@ const struct pci_matchid bge_devices[] =
        { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5720 },
        { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5721 },
        { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5722 },
+       { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5723 },
        { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5750 },
        { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5750M },
        { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5751 },
@@ -255,10 +256,17 @@ const struct pci_matchid bge_devices[] =
        { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5755 },
        { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5755M },
        { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5756 },
+       { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5761 },
+       { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5761E },
+       { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5761S },
+       { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5761SE },
+       { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5764 },
        { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5780 },
        { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5780S },
        { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5781 },
        { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5782 },
+       { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5784 },
+       { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5785 },
        { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5786 },
        { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5787 },
        { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5787F },
@@ -270,6 +278,10 @@ const struct pci_matchid bge_devices[] =
        { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5903M },
        { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5906 },
        { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM5906M },
+       { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM57720 },
+       { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM57760 },
+       { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM57780 },
+       { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM57790 },
 
        { PCI_VENDOR_FUJITSU, PCI_PRODUCT_FUJITSU_PW008GE4 },
        { PCI_VENDOR_FUJITSU, PCI_PRODUCT_FUJITSU_PW008GE5 },
@@ -288,8 +300,12 @@ const struct pci_matchid bge_devices[] =
         BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5714    || \
         BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5752    || \
         BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5755    || \
+        BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5761    || \
+        BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5784    || \
+        BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5785    || \
         BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5787    || \
-        BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5906)
+        BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5906    || \
+        BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM57780)
 
 #define BGE_IS_575X_PLUS(sc)  \
        (BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5750    || \
@@ -298,8 +314,12 @@ const struct pci_matchid bge_devices[] =
         BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5714    || \
         BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5752    || \
         BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5755    || \
+        BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5761    || \
+        BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5784    || \
+        BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5785    || \
         BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5787    || \
-        BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5906)
+        BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5906    || \
+        BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM57780)
 
 #define BGE_IS_5714_FAMILY(sc)  \
        (BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5714_A0 || \
@@ -364,6 +384,10 @@ static const struct bge_revision {
        { BGE_CHIPID_BCM5755_A1, "BCM5755 A1" },
        { BGE_CHIPID_BCM5755_A2, "BCM5755 A2" },
        { BGE_CHIPID_BCM5755_C0, "BCM5755 C0" },
+       { BGE_CHIPID_BCM5761_A0, "BCM5761 A0" },
+       { BGE_CHIPID_BCM5761_A1, "BCM5761 A1" },
+       { BGE_CHIPID_BCM5784_A0, "BCM5784 A0" },
+       { BGE_CHIPID_BCM5784_A1, "BCM5784 A1" },
        /* the 5754 and 5787 share the same ASIC ID */
        { BGE_CHIPID_BCM5787_A0, "BCM5754/5787 A0" },
        { BGE_CHIPID_BCM5787_A1, "BCM5754/5787 A1" },
@@ -391,9 +415,13 @@ static const struct bge_revision bge_maj
        { BGE_ASICREV_BCM5780, "unknown BCM5780" },
        { BGE_ASICREV_BCM5714, "unknown BCM5714" },
        { BGE_ASICREV_BCM5755, "unknown BCM5755" },
+       { BGE_ASICREV_BCM5761, "unknown BCM5761" },
+       { BGE_ASICREV_BCM5784, "unknown BCM5784" },
+       { BGE_ASICREV_BCM5785, "unknown BCM5785" },
        /* 5754 and 5787 share the same ASIC ID */
        { BGE_ASICREV_BCM5787, "unknown BCM5754/5787" },
        { BGE_ASICREV_BCM5906, "unknown BCM5906" },
+       { BGE_ASICREV_BCM57780, "unknown BCM57780" },
 
        { 0, NULL }
 };
@@ -1638,7 +1666,11 @@ bge_blockinit(struct bge_softc *sc)
 
        /* Enable host coalescing bug fix. */
        if (BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5755 ||
-           BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5787)
+           BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5761 ||
+           BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5784 ||
+           BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5785 ||
+           BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5787 ||
+           BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM57780)
                val |= (1 << 29);
 
        /* Turn on write DMA state machine */
@@ -1646,6 +1678,13 @@ bge_blockinit(struct bge_softc *sc)
 
        val = BGE_RDMAMODE_ENABLE|BGE_RDMAMODE_ALL_ATTNS;
 
+       if (BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5784 ||
+           BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5785 ||
+           BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM57780)
+               val |= BGE_RDMAMODE_BD_SBD_CRPT_ATTN |
+                      BGE_RDMAMODE_MBUF_RBD_CRPT_ATTN |
+                      BGE_RDMAMODE_MBUF_SBD_CRPT_ATTN;
+
        if (sc->bge_flags & BGE_PCIE)
                val |= BGE_RDMAMODE_FIFO_LONG_BURST;
 
@@ -1668,8 +1707,13 @@ bge_blockinit(struct bge_softc *sc)
        /* Turn on send BD completion state machine */
        CSR_WRITE_4(sc, BGE_SBDC_MODE, BGE_SBDCMODE_ENABLE);
 
+       val = BGE_SDCMODE_ENABLE;
+
+       if (BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5761)
+               val |= BGE_SDCMODE_CDELAY;
+
        /* Turn on send data completion state machine */
-       CSR_WRITE_4(sc, BGE_SDC_MODE, BGE_SDCMODE_ENABLE);
+       CSR_WRITE_4(sc, BGE_SDC_MODE, val);
 
        /* Turn on send data initiator state machine */
        CSR_WRITE_4(sc, BGE_SDI_MODE, BGE_SDIMODE_ENABLE);
@@ -1813,17 +1857,21 @@ bge_attach(struct device *parent, struct
        /*
         * Save ASIC rev.
         */
-
        sc->bge_chipid =
-            pci_conf_read(pc, pa->pa_tag, BGE_PCI_MISC_CTL) &
-            BGE_PCIMISCCTL_ASICREV;
+            (pci_conf_read(pc, pa->pa_tag, BGE_PCI_MISC_CTL)
+             >> BGE_PCIMISCCTL_ASICREV_SHIFT);
+
+       if (BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_USE_PRODID_REG) {
+               sc->bge_chipid = pci_conf_read(pc, pa->pa_tag,
+                   BGE_PCI_PRODID_ASICREV);
+       }
 
        printf(", ");
        br = bge_lookup_rev(sc->bge_chipid);
        if (br == NULL)
-               printf("unknown ASIC (0x%04x)", sc->bge_chipid >> 16);
+               printf("unknown ASIC (0x%x)", sc->bge_chipid);
        else
-               printf("%s (0x%04x)", br->br_name, sc->bge_chipid >> 16);
+               printf("%s (0x%x)", br->br_name, sc->bge_chipid);
 
        /*
         * PCI Express check.
@@ -1895,6 +1943,7 @@ bge_attach(struct device *parent, struct
             (PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_BROADCOM_BCM5751F ||
              PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_BROADCOM_BCM5753F ||
              PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_BROADCOM_BCM5787F)) ||
+           PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_BROADCOM_BCM57790 ||
            BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5906)
                sc->bge_flags |= BGE_10_100_ONLY;
 
@@ -1914,15 +1963,20 @@ bge_attach(struct device *parent, struct
        if (sc->bge_chipid == BGE_CHIPID_BCM5704_A0)
                sc->bge_flags |= BGE_PHY_5704_A0_BUG;
 
-       if (BGE_IS_5705_OR_BEYOND(sc)) {
+       if ((BGE_IS_5705_OR_BEYOND(sc)) &&
+           BGE_ASICREV(sc->bge_chipid) != BGE_ASICREV_BCM5906 &&
+           BGE_ASICREV(sc->bge_chipid) != BGE_ASICREV_BCM5785 &&
+           BGE_ASICREV(sc->bge_chipid) != BGE_ASICREV_BCM57780) {
                if (BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5755 ||
+                   BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5761 ||
+                   BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5784 ||
                    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;
                        if (PCI_PRODUCT(pa->pa_id) == 
PCI_PRODUCT_BROADCOM_BCM5755M)
                                sc->bge_flags |= BGE_PHY_ADJUST_TRIM;
-               } else if (BGE_ASICREV(sc->bge_chipid) != BGE_ASICREV_BCM5906)
+               } else
                        sc->bge_flags |= BGE_PHY_BER_BUG;
        }
 
@@ -2199,7 +2253,11 @@ bge_reset(struct bge_softc *sc)
        /* Disable fastboot on controllers that support it. */
        if (BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5752 ||
            BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5755 ||
-           BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5787)
+           BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5761 ||
+           BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5784 ||
+           BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5785 ||
+           BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5787 ||
+           BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM57780)
                CSR_WRITE_4(sc, BGE_FASTBOOT_PC, 0);
 
        reset = BGE_MISCCFG_RESET_CORE_CLOCKS|(65<<1);
Index: pci/if_bgereg.h
===================================================================
RCS file: /cvs/src/sys/dev/pci/if_bgereg.h,v
retrieving revision 1.91
diff -u -p -r1.91 if_bgereg.h
--- pci/if_bgereg.h     23 Apr 2009 19:15:07 -0000      1.91
+++ pci/if_bgereg.h     17 May 2009 12:00:40 -0000
@@ -199,6 +199,7 @@
 #define BGE_PCI_UNDI_TX_BD_PRODIDX_LO  0xAC
 #define BGE_PCI_ISR_MBX_HI             0xB0
 #define BGE_PCI_ISR_MBX_LO             0xB4
+#define BGE_PCI_PRODID_ASICREV         0xBC
 
 /* XXX:
  * Used in PCI-Express code for 575x chips.
@@ -219,6 +220,7 @@
 #define BGE_PCIMISCCTL_REG_WORDSWAP    0x00000040
 #define BGE_PCIMISCCTL_INDIRECT_ACCESS 0x00000080
 #define BGE_PCIMISCCTL_ASICREV         0xFFFF0000
+#define BGE_PCIMISCCTL_ASICREV_SHIFT   16
 
 #if BYTE_ORDER == LITTLE_ENDIAN
 #define BGE_DMA_SWAP_OPTIONS \
@@ -234,61 +236,65 @@
        (BGE_PCIMISCCTL_ENDIAN_WORDSWAP|BGE_PCIMISCCTL_CLEAR_INTA| \
         BGE_PCIMISCCTL_MASK_PCI_INTR|BGE_PCIMISCCTL_INDIRECT_ACCESS)
 
-#define BGE_CHIPID_BCM5700_A0          0x70000000
-#define BGE_CHIPID_BCM5700_A1          0x70010000
-#define BGE_CHIPID_BCM5700_B0          0x71000000
-#define BGE_CHIPID_BCM5700_B1          0x71010000
-#define BGE_CHIPID_BCM5700_B2          0x71020000
-#define BGE_CHIPID_BCM5700_B3          0x71030000
-#define BGE_CHIPID_BCM5700_ALTIMA      0x71040000
-#define BGE_CHIPID_BCM5700_C0          0x72000000
-#define BGE_CHIPID_BCM5701_A0          0x00000000      /* grrrr */
-#define BGE_CHIPID_BCM5701_B0          0x01000000
-#define BGE_CHIPID_BCM5701_B2          0x01020000
-#define BGE_CHIPID_BCM5701_B5          0x01050000
-#define BGE_CHIPID_BCM5703_A0          0x10000000
-#define BGE_CHIPID_BCM5703_A1          0x10010000
-#define BGE_CHIPID_BCM5703_A2          0x10020000
-#define BGE_CHIPID_BCM5703_A3          0x10030000
-#define BGE_CHIPID_BCM5703_B0          0x11000000
-#define BGE_CHIPID_BCM5704_A0          0x20000000
-#define BGE_CHIPID_BCM5704_A1          0x20010000
-#define BGE_CHIPID_BCM5704_A2          0x20020000
-#define BGE_CHIPID_BCM5704_A3          0x20030000
-#define BGE_CHIPID_BCM5704_B0          0x21000000
-#define BGE_CHIPID_BCM5705_A0          0x30000000
-#define BGE_CHIPID_BCM5705_A1          0x30010000
-#define BGE_CHIPID_BCM5705_A2          0x30020000
-#define BGE_CHIPID_BCM5705_A3          0x30030000
-#define BGE_CHIPID_BCM5750_A0          0x40000000
-#define BGE_CHIPID_BCM5750_A1          0x40010000
-#define BGE_CHIPID_BCM5750_A3          0x40030000
-#define BGE_CHIPID_BCM5750_B0          0x40100000
-#define BGE_CHIPID_BCM5750_B1          0x41010000
-#define BGE_CHIPID_BCM5750_C0          0x42000000
-#define BGE_CHIPID_BCM5750_C1          0x42010000
-#define BGE_CHIPID_BCM5750_C2          0x42020000
-#define BGE_CHIPID_BCM5714_A0          0x50000000
-#define BGE_CHIPID_BCM5752_A0          0x60000000
-#define BGE_CHIPID_BCM5752_A1          0x60010000
-#define BGE_CHIPID_BCM5752_A2          0x60020000
-#define BGE_CHIPID_BCM5714_B0          0x80000000
-#define BGE_CHIPID_BCM5714_B3          0x80030000
-#define BGE_CHIPID_BCM5715_A0          0x90000000
-#define BGE_CHIPID_BCM5715_A1          0x90010000
-#define BGE_CHIPID_BCM5715_A3          0x90030000
-#define BGE_CHIPID_BCM5755_A0          0xa0000000
-#define BGE_CHIPID_BCM5755_A1          0xa0010000
-#define BGE_CHIPID_BCM5755_A2          0xa0020000
-#define BGE_CHIPID_BCM5755_C0          0xa2000000
-#define BGE_CHIPID_BCM5787_A0          0xb0000000
-#define BGE_CHIPID_BCM5787_A1          0xb0010000
-#define BGE_CHIPID_BCM5787_A2          0xb0020000
-#define BGE_CHIPID_BCM5906_A1          0xc0010000
-#define BGE_CHIPID_BCM5906_A2          0xc0020000
+#define BGE_CHIPID_BCM5700_A0          0x7000
+#define BGE_CHIPID_BCM5700_A1          0x7001
+#define BGE_CHIPID_BCM5700_B0          0x7100
+#define BGE_CHIPID_BCM5700_B1          0x7101
+#define BGE_CHIPID_BCM5700_B2          0x7102
+#define BGE_CHIPID_BCM5700_B3          0x7103
+#define BGE_CHIPID_BCM5700_ALTIMA      0x7104
+#define BGE_CHIPID_BCM5700_C0          0x7200
+#define BGE_CHIPID_BCM5701_A0          0x0000  /* grrrr */
+#define BGE_CHIPID_BCM5701_B0          0x0100
+#define BGE_CHIPID_BCM5701_B2          0x0102
+#define BGE_CHIPID_BCM5701_B5          0x0105
+#define BGE_CHIPID_BCM5703_A0          0x1000
+#define BGE_CHIPID_BCM5703_A1          0x1001
+#define BGE_CHIPID_BCM5703_A2          0x1002
+#define BGE_CHIPID_BCM5703_A3          0x1003
+#define BGE_CHIPID_BCM5703_B0          0x1100
+#define BGE_CHIPID_BCM5704_A0          0x2000
+#define BGE_CHIPID_BCM5704_A1          0x2001
+#define BGE_CHIPID_BCM5704_A2          0x2002
+#define BGE_CHIPID_BCM5704_A3          0x2003
+#define BGE_CHIPID_BCM5704_B0          0x2100
+#define BGE_CHIPID_BCM5705_A0          0x3000
+#define BGE_CHIPID_BCM5705_A1          0x3001
+#define BGE_CHIPID_BCM5705_A2          0x3002
+#define BGE_CHIPID_BCM5705_A3          0x3003
+#define BGE_CHIPID_BCM5750_A0          0x4000
+#define BGE_CHIPID_BCM5750_A1          0x4001
+#define BGE_CHIPID_BCM5750_A3          0x4003
+#define BGE_CHIPID_BCM5750_B0          0x4010
+#define BGE_CHIPID_BCM5750_B1          0x4101
+#define BGE_CHIPID_BCM5750_C0          0x4200
+#define BGE_CHIPID_BCM5750_C1          0x4201
+#define BGE_CHIPID_BCM5750_C2          0x4202
+#define BGE_CHIPID_BCM5714_A0          0x5000
+#define BGE_CHIPID_BCM5761_A0          0x5761000
+#define BGE_CHIPID_BCM5761_A1          0x5761100
+#define BGE_CHIPID_BCM5784_A0          0x5784000
+#define BGE_CHIPID_BCM5784_A1          0x5784100
+#define BGE_CHIPID_BCM5752_A0          0x6000
+#define BGE_CHIPID_BCM5752_A1          0x6001
+#define BGE_CHIPID_BCM5752_A2          0x6002
+#define BGE_CHIPID_BCM5714_B0          0x8000
+#define BGE_CHIPID_BCM5714_B3          0x8003
+#define BGE_CHIPID_BCM5715_A0          0x9000
+#define BGE_CHIPID_BCM5715_A1          0x9001
+#define BGE_CHIPID_BCM5715_A3          0x9003
+#define BGE_CHIPID_BCM5755_A0          0xa000
+#define BGE_CHIPID_BCM5755_A1          0xa001
+#define BGE_CHIPID_BCM5755_A2          0xa002
+#define BGE_CHIPID_BCM5755_C0          0xa200
+#define BGE_CHIPID_BCM5787_A0          0xb000
+#define BGE_CHIPID_BCM5787_A1          0xb001
+#define BGE_CHIPID_BCM5787_A2          0xb002
+#define BGE_CHIPID_BCM5906_A1          0xc001
+#define BGE_CHIPID_BCM5906_A2          0xc002
 
 /* shorthand one */
-#define BGE_ASICREV(x)                 ((x) >> 28)
+#define BGE_ASICREV(x)                 ((x) >> 12)
 #define BGE_ASICREV_BCM5700            0x07
 #define BGE_ASICREV_BCM5701            0x00
 #define BGE_ASICREV_BCM5703            0x01
@@ -302,9 +308,14 @@
 #define BGE_ASICREV_BCM5755            0x0a
 #define BGE_ASICREV_BCM5787            0x0b
 #define BGE_ASICREV_BCM5906            0x0c
+#define BGE_ASICREV_USE_PRODID_REG     0x0f
+#define BGE_ASICREV_BCM5761            0x5761
+#define BGE_ASICREV_BCM5784            0x5784
+#define BGE_ASICREV_BCM5785            0x5785
+#define BGE_ASICREV_BCM57780           0x57780
 
 /* chip revisions */
-#define BGE_CHIPREV(x)                 ((x) >> 24)
+#define BGE_CHIPREV(x)                 ((x) >> 8)
 #define BGE_CHIPREV_5700_AX            0x70
 #define BGE_CHIPREV_5700_BX            0x71
 #define BGE_CHIPREV_5700_CX            0x72
@@ -314,6 +325,8 @@
 #define BGE_CHIPREV_5704_BX            0x21
 #define BGE_CHIPREV_5750_AX            0x40
 #define BGE_CHIPREV_5750_BX            0x41
+#define BGE_CHIPREV_5761_AX            0x57611
+#define BGE_CHIPREV_5784_AX            0x57841
 
 /* PCI DMA Read/Write Control register */
 #define BGE_PCIDMARWCTL_MINDMA         0x000000FF
@@ -784,8 +797,9 @@
 
 #define BGE_MIMODE_SHORTPREAMBLE       0x00000002
 #define BGE_MIMODE_AUTOPOLL            0x00000010
+#define BGE_MIMODE_500KHZ_CONST                0x00008000
 #define BGE_MIMODE_CLKCNT              0x001F0000
-
+#define BGE_MIMODE_BASE                        0x000C0000
 
 /*
  * Send data initiator control registers.
@@ -845,6 +859,7 @@
 #define BGE_SDCMODE_RESET              0x00000001
 #define BGE_SDCMODE_ENABLE             0x00000002
 #define BGE_SDCMODE_ATTN               0x00000004
+#define BGE_SDCMODE_CDELAY             0x00000010
 
 /* Send Data completion status register */
 #define BGE_SDCSTAT_ATTN               0x00000004
@@ -1362,6 +1377,9 @@
 #define BGE_RDMAMODE_PCI_FIFOOREAD_ATTN        0x00000100
 #define BGE_RDMAMODE_LOCWRITE_TOOBIG   0x00000200
 #define BGE_RDMAMODE_ALL_ATTNS         0x000003FC
+#define BGE_RDMAMODE_BD_SBD_CRPT_ATTN  0x00000800
+#define BGE_RDMAMODE_MBUF_RBD_CRPT_ATTN        0x00001000
+#define BGE_RDMAMODE_MBUF_SBD_CRPT_ATTN        0x00002000
 #define BGE_RDMAMODE_FIFO_SIZE_128     0x00020000
 #define BGE_RDMAMODE_FIFO_LONG_BURST   0x00030000
 
Index: mii/brgphy.c
===================================================================
RCS file: /cvs/src/sys/dev/mii/brgphy.c,v
retrieving revision 1.84
diff -u -p -r1.84 brgphy.c
--- mii/brgphy.c        8 Nov 2008 03:03:50 -0000       1.84
+++ mii/brgphy.c        10 May 2009 01:46:26 -0000
@@ -140,6 +140,8 @@ static const struct mii_phydesc brgphys[
          MII_STR_xxBROADCOM2_BCM5722 },
        { MII_OUI_xxBROADCOM2,          MII_MODEL_xxBROADCOM2_BCM5755,
          MII_STR_xxBROADCOM2_BCM5755 },
+       { MII_OUI_xxBROADCOM2,          MII_MODEL_xxBROADCOM2_BCM5784,
+         MII_STR_xxBROADCOM2_BCM5784 },
        { MII_OUI_xxBROADCOM2,          MII_MODEL_xxBROADCOM2_BCM5787,
          MII_STR_xxBROADCOM2_BCM5787 },
        { MII_OUI_xxBROADCOM,           MII_MODEL_xxBROADCOM_BCM5706,
Index: mii/miidevs
===================================================================
RCS file: /cvs/src/sys/dev/mii/miidevs,v
retrieving revision 1.105
diff -u -p -r1.105 miidevs
--- mii/miidevs 25 Oct 2008 00:23:11 -0000      1.105
+++ mii/miidevs 10 May 2009 01:46:26 -0000
@@ -145,6 +145,7 @@ model xxBROADCOM2 BCM5755   0x000c  BCM5755
 model xxBROADCOM2 BCM5787      0x000e  BCM5787 10/100/1000baseT PHY
 model xxBROADCOM2 BCM5708S     0x0015  BCM5708S 1000/2500baseSX PHY
 model xxBROADCOM2 BCM5722      0x002d  BCM5722 10/100/1000baseT PHY
+model xxBROADCOM2 BCM5784      0x003a  BCM5784 10/100/1000baseT PHY
 model BROADCOM BCM5400         0x0004  BCM5400 1000baseT PHY
 model BROADCOM BCM5401         0x0005  BCM5401 1000baseT PHY
 model BROADCOM BCM5411         0x0007  BCM5411 1000baseT PHY

-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.

Reply via email to