ref: 87fe4f8360a1ce3bd66451011eb869fa2503fb9e
parent: f1704f8e0ad658a57e207bf33b3416c0b6829cdd
author: cinap_lenrek <cinap_lenrek@centraldogma>
date: Wed Dec 7 13:52:48 EST 2011
etherbcm: fix pci fix, add pci dids
--- a/sys/src/9/pc/etherbcm.c
+++ b/sys/src/9/pc/etherbcm.c
@@ -195,6 +195,89 @@
FrameError = 1<<10,
};
+enum {+ BCM5752 = 0x1600,
+ BCM5752M = 0x1601,
+ BCM5709 = 0x1639,
+ BCM5709S = 0x163a,
+ BCM5716 = 0x163b,
+ BCM5716S = 0x163c,
+ BCM5700 = 0x1644,
+ BCM5701 = 0x1645,
+ BCM5702 = 0x1646,
+ BCM5703 = 0x1647,
+ BCM5704 = 0x1648,
+ BCM5704S_2 = 0x1649,
+ BCM5706 = 0x164a,
+ BCM5708 = 0x164c,
+ BCM5702FE = 0x164d,
+ BCM57710 = 0x164e,
+ BCM57711 = 0x164f,
+ BCM57711E = 0x1650,
+ BCM5705 = 0x1653,
+ BCM5705_2 = 0x1654,
+ BCM5717 = 0x1655,
+ BCM5718 = 0x1656,
+ BCM5720 = 0x1658,
+ BCM5721 = 0x1659,
+ BCM5722 = 0x165a,
+ BCM5723 = 0x165b,
+ BCM5724 = 0x165c,
+ BCM5705M = 0x165d,
+ BCM5705M_2 = 0x165e,
+ BCM5714 = 0x1668,
+ BCM5780 = 0x166a,
+ BCM5780S = 0x166b,
+ BCM5754M = 0x1672,
+ BCM5755M = 0x1673,
+ BCM5756ME = 0x1674,
+ BCM5750 = 0x1676,
+ BCM5751 = 0x1677,
+ BCM5715 = 0x1678,
+ BCM5715S = 0x1679,
+ BCM5754 = 0x167a,
+ BCM5755 = 0x167b,
+ BCM5750M = 0x167c,
+ BCM5751M = 0x167d,
+ BCM5751F = 0x167e,
+ BCM5787F = 0x167f,
+ BCM5761e = 0x1680,
+ BCM5761 = 0x1681,
+ BCM5764M = 0x1684,
+ BCM57760 = 0x1690,
+ BCM57788 = 0x1691,
+ BCM57780 = 0x1692,
+ BCM5787M = 0x1693,
+ BCM57790 = 0x1694,
+ BCM5782 = 0x1696,
+ BCM5784M = 0x1698,
+ BCM5785 = 0x1699,
+ BCM5786 = 0x169a,
+ BCM5787 = 0x169b,
+ BCM5788 = 0x169c,
+ BCM5789 = 0x169d,
+ BCM5785 = 0x16a0,
+ BCM5702X = 0x16a6,
+ BCM5703X = 0x16a7,
+ BCM5704S = 0x16a8,
+ BCM5706S = 0x16aa,
+ BCM5708S = 0x16ac,
+ BCM57761 = 0x16b0,
+ BCM57781 = 0x16b1,
+ BCM57791 = 0x16b2,
+ BCM57765 = 0x16b4,
+ BCM57785 = 0x16b5,
+ BCM57795 = 0x16b6,
+ BCM5702A3 = 0x16c6,
+ BCM5703 = 0x16c7,
+ BCM5781 = 0x16dd,
+ BCM5753 = 0x16f7,
+ BCM5753M = 0x16fd,
+ BCM5753F = 0x16fe,
+ BCM5906 = 0x1712,
+ BCM5906M = 0x1713,
+};
+
#define csr32(c, r) ((c)->nic[(r)/4])
#define mem32(c, r) csr32(c, (r)+0x8000)
@@ -470,7 +553,13 @@
iprint("bcm: chip failed to reset\n");return -1;
}
- csr32(ctlr, TLPControl) |= (1<<25) | (1<<29);
+ switch(ctlr->pdev->did){+ case BCM5721:
+ case BCM5751:
+ case BCM5752:
+ csr32(ctlr, TLPControl) |= (1<<25) | (1<<29);
+ break;
+ }
memset(ctlr->status, 0, 20);
csr32(ctlr, DMARWControl) = (csr32(ctlr, DMARWControl) & DMAWatermarkMask) | DMAWatermarkValue;
csr32(ctlr, ModeControl) |= HostSendBDs | HostStackUp | InterruptOnMAC;
@@ -606,24 +695,95 @@
if(pdev->ccrb != 2 || pdev->ccru != 0)
continue;
-
- switch((pdev->vid<<16) | pdev->did){- default: continue;
- case 0x14e4165a:
- case 0x14e4167d:
- case 0x14e41670:
- case 0x14e41672:
- case 0x14e41673:
- case 0x14e41674:
- case 0x14e41677:
- case 0x14e4167A:
- case 0x14e4167b:
- case 0x14e41693:
- case 0x14e4169B:
- case 0x14e41712:
- case 0x14e41713:
+ if(pdev->vid != 0x14e4)
+ continue;
+ switch(pdev->did){+ default:
+ continue;
+ case BCM5752:
+ case BCM5752M:
+ case BCM5709:
+ case BCM5709S:
+ case BCM5716:
+ case BCM5716S:
+ case BCM5700:
+ case BCM5701:
+ case BCM5702:
+ case BCM5703:
+ case BCM5704:
+ case BCM5704S_2:
+ case BCM5706:
+ case BCM5708:
+ case BCM5702FE:
+ case BCM57710:
+ case BCM57711:
+ case BCM57711E:
+ case BCM5705:
+ case BCM5705_2:
+ case BCM5717:
+ case BCM5718:
+ case BCM5720:
+ case BCM5721:
+ case BCM5722:
+ case BCM5723:
+ case BCM5724:
+ case BCM5705M:
+ case BCM5705M_2:
+ case BCM5714:
+ case BCM5780:
+ case BCM5780S:
+ case BCM5754M:
+ case BCM5755M:
+ case BCM5756ME:
+ case BCM5750:
+ case BCM5751:
+ case BCM5715:
+ case BCM5715S:
+ case BCM5754:
+ case BCM5755:
+ case BCM5750M:
+ case BCM5751M:
+ case BCM5751F:
+ case BCM5787F:
+ case BCM5761e:
+ case BCM5761:
+ case BCM5764M:
+ case BCM57760:
+ case BCM57788:
+ case BCM57780:
+ case BCM5787M:
+ case BCM57790:
+ case BCM5782:
+ case BCM5784M:
+ case BCM5785:
+ case BCM5786:
+ case BCM5787:
+ case BCM5788:
+ case BCM5789:
+ case BCM5785:
+ case BCM5702X:
+ case BCM5703X:
+ case BCM5704S:
+ case BCM5706S:
+ case BCM5708S:
+ case BCM57761:
+ case BCM57781:
+ case BCM57791:
+ case BCM57765:
+ case BCM57785:
+ case BCM57795:
+ case BCM5702A3:
+ case BCM5703:
+ case BCM5781:
+ case BCM5753:
+ case BCM5753M:
+ case BCM5753F:
+ case BCM5906: /* ??? */
+ case BCM5906M: /* ??? */
+ case 0x1670: /* ??? */
break;
}
+
pcisetbme(pdev);
pcisetpms(pdev, 0);
ctlr = malloc(sizeof(Ctlr));
@@ -713,5 +873,5 @@
void
etherbcmlink(void)
{- addethercard("BCM5755", bcmpnp);+ addethercard("bcm", bcmpnp);}
--
⑨