add new i218 and x520 and x540 dids Reference: /n/atom/patch/applied2013/inteli218 Date: Thu Oct 3 23:00:30 CES 2013 Signed-off-by: quanstro@quanstro.net --- /sys/src/fs/amd64/ether82563.c Thu Oct 3 22:58:18 2013 +++ /sys/src/fs/amd64/ether82563.c Thu Oct 3 22:58:19 2013 @@ -464,30 +464,30 @@ int type; int mtu; int phyno; - int flag; char *name; + int flag; }; static Ctlrtype cttab[Nctlrtype] = { - i82563, 9014, 1, Fpba, "i82563", - i82566, 1514, 1, Fload, "i82566", - i82567, 9234, 1, Fload, "i82567", - i82567m, 1514, 1, 0, "i82567m", - i82571, 9234, 1, Fpba, "i82571", - i82572, 9234, 1, Fpba, "i82572", - i82573, 8192, 1, Fert, "i82573", /* terrible perf above 8k */ - i82574, 9018, 1, 0, "i82574", - i82575, 9728, 1, F75|Fflashea, "i82575", - i82576, 9728, 1, F75, "i82576", - i82577, 4096, 2, Fload|Fert, "i82577", - i82577m, 1514, 2, Fload|Fert, "i82577", - i82578, 4096, 1, Fload|Fert, "i82578", - i82578m, 1514, 1, Fload|Fert, "i82578", - i82579, 9018, 2, Fload|Fert|F79phy, "i82579", - i82580, 9728, 1, F75|F79phy, "i82580", - i82583, 1514, 1, 0, "i82583", - i210, 9728, 1, F75|F79phy, "i210", - i350, 9728, 1, F75|F79phy, "i350", + i82563, 9014, 1, "i82563", Fpba, + i82566, 1514, 1, "i82566", Fload, + i82567, 9234, 1, "i82567", Fload, + i82567m, 1514, 1, "i82567m", 0, + i82571, 9234, 1, "i82571", Fpba, + i82572, 9234, 1, "i82572", Fpba, + i82573, 8192, 1, "i82573", Fert, /* terrible perf above 8k */ + i82574, 9018, 1, "i82574", 0, + i82575, 9728, 1, "i82575", F75|Fflashea, + i82576, 9728, 1, "i82576", F75, + i82577, 4096, 2, "i82577", Fload|Fert, + i82577m, 1514, 2, "i82577", Fload|Fert, + i82578, 4096, 2, "i82578", Fload|Fert, + i82578m, 1514, 2, "i82578", Fload|Fert, + i82579, 9018, 2, "i82579", Fload|Fert|F79phy, + i82580, 9728, 1, "i82580", F75|F79phy, + i82583, 1514, 1, "i82583", 0, + i210, 9728, 1, "i210", F75|F79phy, + i350, 9728, 1, "i350", F75|F79phy, }; typedef void (*Freefn)(Block*); @@ -1609,10 +1609,15 @@ case 0x1533: /* i210-t1 */ case 0x1534: case 0x1536: /* fiber */ + case 0x1537: /* backplane */ case 0x1538: case 0x1539: /* i211 */ case 0x153a: /* i217-lm */ case 0x153b: /* i217-v */ + case 0x15a0: /* i218-lm */ + case 0x15a1: /* i218-v */ + case 0x15a2: /* i218-lm */ + case 0x15a3: /* i218-v */ return i210; case 0x151f: /* “powerville” eeprom-less */ case 0x1521: /* copper */ --- /sys/src/fs/pc/ether82563.c Thu Oct 3 22:58:21 2013 +++ /sys/src/fs/pc/ether82563.c Thu Oct 3 22:58:23 2013 @@ -454,30 +454,30 @@ int type; int mtu; int phyno; - int flag; char *name; + int flag; }; static Ctlrtype cttab[Nctlrtype] = { - i82563, 9014, 1, Fpba, "i82563", - i82566, 1514, 1, Fload, "i82566", - i82567, 9234, 1, Fload, "i82567", - i82567m, 1514, 1, 0, "i82567m", - i82571, 9234, 1, Fpba, "i82571", - i82572, 9234, 1, Fpba, "i82572", - i82573, 8192, 1, Fert, "i82573", /* terrible perf above 8k */ - i82574, 9018, 1, 0, "i82574", - i82575, 9728, 1, F75|Fflashea, "i82575", - i82576, 9728, 2, F75, "i82576", - i82577, 4096, 2, Fload|Fert, "i82577", - i82577m, 1514, 2, Fload|Fert, "i82577", - i82578, 4096, 1, Fload|Fert, "i82578", - i82578m, 1514, 1, Fload|Fert, "i82578", - i82579, 9018, 2, Fload|Fert|F79phy, "i82579", - i82580, 9728, 1, F75|F79phy, "i82580", - i82583, 1514, 1, 0, "i82583", - i210, 9728, 1, F75|F79phy, "i210", - i350, 9728, 1, F75|F79phy, "i350", + i82563, 9014, 1, "i82563", Fpba, + i82566, 1514, 1, "i82566", Fload, + i82567, 9234, 1, "i82567", Fload, + i82567m, 1514, 1, "i82567m", 0, + i82571, 9234, 1, "i82571", Fpba, + i82572, 9234, 1, "i82572", Fpba, + i82573, 8192, 1, "i82573", Fert, /* terrible perf above 8k */ + i82574, 9018, 1, "i82574", 0, + i82575, 9728, 1, "i82575", F75|Fflashea, + i82576, 9728, 1, "i82576", F75, + i82577, 4096, 2, "i82577", Fload|Fert, + i82577m, 1514, 2, "i82577", Fload|Fert, + i82578, 4096, 2, "i82578", Fload|Fert, + i82578m, 1514, 2, "i82578", Fload|Fert, + i82579, 9018, 2, "i82579", Fload|Fert|F79phy, + i82580, 9728, 1, "i82580", F75|F79phy, + i82583, 1514, 1, "i82583", 0, + i210, 9728, 1, "i210", F75|F79phy, + i350, 9728, 1, "i350", F75|F79phy, }; typedef void (*Freefn)(Msgbuf*); @@ -1039,7 +1039,7 @@ { Set(c, Eerd, EEstart | adr << 2); while ((Get(c, Eerd) & EEdone) == 0) - ; + pause(); return Get(c, Eerd) >> 16; } @@ -1092,7 +1092,7 @@ f->reg[Fctl] = s | 1<<8 | Fgo; /* 2 byte read */ while((f->reg[Fsts] & Fdone) == 0) - ; + pause(); if(f->reg[Fsts] & (Fcerr|Ael)) return -1; return f->reg32[Fdata] & 0xffff; @@ -1270,10 +1270,15 @@ case 0x1533: /* i210-t1 */ case 0x1534: case 0x1536: /* fiber */ + case 0x1537: /* backplane */ case 0x1538: case 0x1539: /* i211 */ case 0x153a: /* i217-lm */ case 0x153b: /* i217-v */ + case 0x15a0: /* i218-lm */ + case 0x15a1: /* i218-v */ + case 0x15a2: /* i218-lm */ + case 0x15a3: /* i218-v */ return i210; case 0x151f: /* “powerville” eeprom-less */ case 0x1521: /* copper */ --- /sys/src/9/pc/ether82563.c Thu Oct 3 22:58:25 2013 +++ /sys/src/9/pc/ether82563.c Thu Oct 3 22:58:27 2013 @@ -422,10 +422,6 @@ Npool = 10, }; -/* - * cavet emptor: 82577/78 have been entered speculatitively. - * awating datasheet from intel. - */ enum { i82563, i82566, @@ -463,30 +459,30 @@ int type; int mtu; int phyno; - int flag; char *name; + int flag; }; static Ctlrtype cttab[Nctlrtype] = { - i82563, 9014, 1, Fpba, "i82563", - i82566, 1514, 1, Fload, "i82566", - i82567, 9234, 1, Fload, "i82567", - i82567m, 1514, 1, 0, "i82567m", - i82571, 9234, 1, Fpba, "i82571", - i82572, 9234, 1, Fpba, "i82572", - i82573, 8192, 1, Fert, "i82573", /* terrible perf above 8k */ - i82574, 9018, 1, 0, "i82574", - i82575, 9728, 1, F75|Fflashea, "i82575", - i82576, 9728, 1, F75, "i82576", - i82577, 4096, 2, Fload|Fert, "i82577", - i82577m, 1514, 2, Fload|Fert, "i82577", - i82578, 4096, 1, Fload|Fert, "i82578", - i82578m, 1514, 1, Fload|Fert, "i82578", - i82579, 9018, 2, Fload|Fert|F79phy, "i82579", - i82580, 9728, 1, F75|F79phy, "i82580", - i82583, 1514, 1, 0, "i82583", - i210, 9728, 1, F75|F79phy, "i210", - i350, 9728, 1, F75|F79phy, "i350", + i82563, 9014, 1, "i82563", Fpba, + i82566, 1514, 1, "i82566", Fload, + i82567, 9234, 1, "i82567", Fload, + i82567m, 1514, 1, "i82567m", 0, + i82571, 9234, 1, "i82571", Fpba, + i82572, 9234, 1, "i82572", Fpba, + i82573, 8192, 1, "i82573", Fert, /* terrible perf above 8k */ + i82574, 9018, 1, "i82574", 0, + i82575, 9728, 1, "i82575", F75|Fflashea, + i82576, 9728, 1, "i82576", F75, + i82577, 4096, 2, "i82577", Fload|Fert, + i82577m, 1514, 2, "i82577", Fload|Fert, + i82578, 4096, 2, "i82578", Fload|Fert, + i82578m, 1514, 2, "i82578", Fload|Fert, + i82579, 9018, 2, "i82579", Fload|Fert|F79phy, + i82580, 9728, 1, "i82580", F75|F79phy, + i82583, 1514, 1, "i82583", 0, + i210, 9728, 1, "i210", F75|F79phy, + i350, 9728, 1, "i350", F75|F79phy, }; typedef void (*Freefn)(Block*); @@ -1269,6 +1265,10 @@ else return 0; return phywrite0(c, phyno, pr, p); + case i82576: + case i82577: + case i82578: + return phywrite0(c, phyno, Phy79page, p); /* unverified */ case i82579: return phywrite0(c, phyno, Phy79page, p<<5); default: @@ -1571,7 +1571,7 @@ { Ctlr *ctlr; Ether *edev; - int icr, im; + u32int icr, im; edev = arg; ctlr = edev->ctlr; @@ -1749,7 +1749,7 @@ u16int sum; Flash f; - io = c->pcidev->mem[1].bar & ~0x0f; + io = c->pcidev->mem[1].bar & ~(uintmem)0xf; f.reg = vmap(io, c->pcidev->mem[1].size); if(f.reg == nil) return -1; @@ -1975,10 +1975,15 @@ case 0x1533: /* i210-t1 */ case 0x1534: case 0x1536: /* fiber */ + case 0x1537: /* backplane */ case 0x1538: case 0x1539: /* i211 */ case 0x153a: /* i217-lm */ case 0x153b: /* i217-v */ + case 0x15a0: /* i218-lm */ + case 0x15a1: /* i218-v */ + case 0x15a2: /* i218-lm */ + case 0x15a3: /* i218-v */ return i210; case 0x151f: /* “powerville” eeprom-less */ case 0x1521: /* copper */ @@ -2016,7 +2021,7 @@ c->type = type; c->pcidev = p; c->rbsz = cttab[type].mtu; - c->port = p->mem[0].bar & ~0x0F; + c->port = p->mem[0].bar & ~(uintmem)0xf; *cc = c; cc = &c->next; } --- /sys/src/9/pcpae/ether82563.c Thu Oct 3 22:58:29 2013 +++ /sys/src/9/pcpae/ether82563.c Thu Oct 3 22:58:31 2013 @@ -422,10 +422,6 @@ Npool = 10, }; -/* - * cavet emptor: 82577/78 have been entered speculatitively. - * awating datasheet from intel. - */ enum { i82563, i82566, @@ -463,30 +459,30 @@ int type; int mtu; int phyno; - int flag; char *name; + int flag; }; static Ctlrtype cttab[Nctlrtype] = { - i82563, 9014, 1, Fpba, "i82563", - i82566, 1514, 1, Fload, "i82566", - i82567, 9234, 1, Fload, "i82567", - i82567m, 1514, 1, 0, "i82567m", - i82571, 9234, 1, Fpba, "i82571", - i82572, 9234, 1, Fpba, "i82572", - i82573, 8192, 1, Fert, "i82573", /* terrible perf above 8k */ - i82574, 9018, 1, 0, "i82574", - i82575, 9728, 1, F75|Fflashea, "i82575", - i82576, 9728, 1, F75, "i82576", - i82577, 4096, 2, Fload|Fert, "i82577", - i82577m, 1514, 2, Fload|Fert, "i82577", - i82578, 4096, 1, Fload|Fert, "i82578", - i82578m, 1514, 1, Fload|Fert, "i82578", - i82579, 9018, 2, Fload|Fert|F79phy, "i82579", - i82580, 9728, 1, F75|F79phy, "i82580", - i82583, 1514, 1, 0, "i82583", - i210, 9728, 1, F75|F79phy, "i210", - i350, 9728, 1, F75|F79phy, "i350", + i82563, 9014, 1, "i82563", Fpba, + i82566, 1514, 1, "i82566", Fload, + i82567, 9234, 1, "i82567", Fload, + i82567m, 1514, 1, "i82567m", 0, + i82571, 9234, 1, "i82571", Fpba, + i82572, 9234, 1, "i82572", Fpba, + i82573, 8192, 1, "i82573", Fert, /* terrible perf above 8k */ + i82574, 9018, 1, "i82574", 0, + i82575, 9728, 1, "i82575", F75|Fflashea, + i82576, 9728, 1, "i82576", F75, + i82577, 4096, 2, "i82577", Fload|Fert, + i82577m, 1514, 2, "i82577", Fload|Fert, + i82578, 4096, 2, "i82578", Fload|Fert, + i82578m, 1514, 2, "i82578", Fload|Fert, + i82579, 9018, 2, "i82579", Fload|Fert|F79phy, + i82580, 9728, 1, "i82580", F75|F79phy, + i82583, 1514, 1, "i82583", 0, + i210, 9728, 1, "i210", F75|F79phy, + i350, 9728, 1, "i350", F75|F79phy, }; typedef void (*Freefn)(Block*); @@ -1269,6 +1265,10 @@ else return 0; return phywrite0(c, phyno, pr, p); + case i82576: + case i82577: + case i82578: + return phywrite0(c, phyno, Phy79page, p); /* unverified */ case i82579: return phywrite0(c, phyno, Phy79page, p<<5); default: @@ -1571,7 +1571,7 @@ { Ctlr *ctlr; Ether *edev; - int icr, im; + u32int icr, im; edev = arg; ctlr = edev->ctlr; @@ -1749,7 +1749,7 @@ u16int sum; Flash f; - io = c->pcidev->mem[1].bar & ~0x0f; + io = c->pcidev->mem[1].bar & ~(uintmem)0xf; f.reg = vmap(io, c->pcidev->mem[1].size); if(f.reg == nil) return -1; @@ -1975,10 +1975,15 @@ case 0x1533: /* i210-t1 */ case 0x1534: case 0x1536: /* fiber */ + case 0x1537: /* backplane */ case 0x1538: case 0x1539: /* i211 */ case 0x153a: /* i217-lm */ case 0x153b: /* i217-v */ + case 0x15a0: /* i218-lm */ + case 0x15a1: /* i218-v */ + case 0x15a2: /* i218-lm */ + case 0x15a3: /* i218-v */ return i210; case 0x151f: /* “powerville” eeprom-less */ case 0x1521: /* copper */ @@ -2016,7 +2021,7 @@ c->type = type; c->pcidev = p; c->rbsz = cttab[type].mtu; - c->port = p->mem[0].bar & ~0x0F; + c->port = p->mem[0].bar & ~(uintmem)0xf; *cc = c; cc = &c->next; } --- /sys/src/nix/k10/ether82563.c Thu Oct 3 22:58:33 2013 +++ /sys/src/nix/k10/ether82563.c Thu Oct 3 22:58:35 2013 @@ -1089,7 +1089,6 @@ ctlr->rdfree++; } if(i != 0){ - sfence(); ctlr->rdt = rdt; csr32w(ctlr, Rdt, rdt); } @@ -1976,10 +1975,15 @@ case 0x1533: /* i210-t1 */ case 0x1534: case 0x1536: /* fiber */ + case 0x1537: /* backplane */ case 0x1538: case 0x1539: /* i211 */ case 0x153a: /* i217-lm */ case 0x153b: /* i217-v */ + case 0x15a0: /* i218-lm */ + case 0x15a1: /* i218-v */ + case 0x15a2: /* i218-lm */ + case 0x15a3: /* i218-v */ return i210; case 0x151f: /* “powerville” eeprom-less */ case 0x1521: /* copper */ @@ -2033,7 +2037,6 @@ return -1; } p = ctlr->pcidev; - pcisetbme(ctlr->pcidev); ctlr->nic = vmap(ctlr->port, p->mem[0].size); if(ctlr->nic == nil){ print("%s: can't map %#P\n", cname(ctlr), ctlr->port); @@ -2043,6 +2046,7 @@ vunmap(ctlr->nic, p->mem[0].size); return -1; } + pcisetbme(ctlr->pcidev); return 0; } --- /sys/src/fs/amd64/ether82598.c Thu Oct 3 22:58:36 2013 +++ /sys/src/fs/amd64/ether82598.c Thu Oct 3 22:58:37 2013 @@ -912,10 +912,15 @@ case 0x10f9: /* 82599 cx4 */ case 0x10fb: /* 82599 sfi/sfp+ */ case 0x10fc: /* 82599 xaui */ + case 0x1414: /* x520 kx4 mezz */ case 0x151c: /* 82599 base t kx/kx4 “niantic” */ + case 0x154a: /* x520-4 */ + case 0x154d: /* x520-q1 */ + case 0x1558: /* x520-q1 */ type = i82599; break; case 0x1528: /* x540-at2 “twinville” */ + case 0x1560: type = x540; break; default: --- /sys/src/fs/pc/ether82598.c Thu Oct 3 22:58:39 2013 +++ /sys/src/fs/pc/ether82598.c Thu Oct 3 22:58:40 2013 @@ -949,10 +949,15 @@ case 0x10f9: /* 82599 cx4 */ case 0x10fb: /* 82599 sfi/sfp+ */ case 0x10fc: /* 82599 xaui */ + case 0x1414: /* x520 kx4 mezz */ case 0x151c: /* 82599 base t kx/kx4 “niantic” */ + case 0x154a: /* x520-4 */ + case 0x154d: /* x520-q1 */ + case 0x1558: /* x520-q1 */ type = i82599; break; case 0x1528: /* x540-at2 “twinville” */ + case 0x1560: type = x540; break; default: --- /sys/src/9/pc/ether82598.c Thu Oct 3 22:58:41 2013 +++ /sys/src/9/pc/ether82598.c Thu Oct 3 22:58:42 2013 @@ -731,11 +731,6 @@ goto nobufs; if(1){ iprint("%s:%d: starve %d\n", cname(c), c->poolno, qlen(e->oq)); - for(int j = 0; j < Ntypes; j++){ - if(e->f[j] == nil) - continue; - print(" %.4ux %d\n", e->f[j]->type, qlen(e->f[j]->in)); - } } sleep(p, icansleep, p); } @@ -1115,10 +1110,15 @@ case 0x10f9: /* 82599 cx4 */ case 0x10fb: /* 82599 sfi/sfp+ */ case 0x10fc: /* 82599 xaui */ + case 0x1414: /* x520 kx4 mezz */ case 0x151c: /* 82599 base t kx/kx4 “niantic” */ + case 0x154a: /* x520-4 */ + case 0x154d: /* x520-q1 */ + case 0x1558: /* x520-q1 */ type = i82599; break; case 0x1528: /* x540-at2 “twinville” */ + case 0x1560: type = x540; break; default: @@ -1129,7 +1129,7 @@ print("%s: %T: too many controllers\n", name, p->tbdf); return; } - io = p->mem[0].bar&~0xf; + io = p->mem[0].bar&~(uintmem)0xf; mem = vmap(io, p->mem[0].size); if(mem == 0){ print("%s: %T: cant map bar\n", name, p->tbdf); --- /sys/src/9/pcpae/ether82598.c Thu Oct 3 22:58:44 2013 +++ /sys/src/9/pcpae/ether82598.c Thu Oct 3 22:58:45 2013 @@ -731,11 +731,6 @@ goto nobufs; if(1){ iprint("%s:%d: starve %d\n", cname(c), c->poolno, qlen(e->oq)); - for(int j = 0; j < Ntypes; j++){ - if(e->f[j] == nil) - continue; - print(" %.4ux %d\n", e->f[j]->type, qlen(e->f[j]->in)); - } } sleep(p, icansleep, p); } @@ -1115,10 +1110,15 @@ case 0x10f9: /* 82599 cx4 */ case 0x10fb: /* 82599 sfi/sfp+ */ case 0x10fc: /* 82599 xaui */ + case 0x1414: /* x520 kx4 mezz */ case 0x151c: /* 82599 base t kx/kx4 “niantic” */ + case 0x154a: /* x520-4 */ + case 0x154d: /* x520-q1 */ + case 0x1558: /* x520-q1 */ type = i82599; break; case 0x1528: /* x540-at2 “twinville” */ + case 0x1560: type = x540; break; default: @@ -1129,7 +1129,7 @@ print("%s: %T: too many controllers\n", name, p->tbdf); return; } - io = p->mem[0].bar&~0xf; + io = p->mem[0].bar&~(uintmem)0xf; mem = vmap(io, p->mem[0].size); if(mem == 0){ print("%s: %T: cant map bar\n", name, p->tbdf); --- /sys/src/nix/k10/ether82598.c Thu Oct 3 22:58:46 2013 +++ /sys/src/nix/k10/ether82598.c Thu Oct 3 22:58:47 2013 @@ -731,11 +731,6 @@ goto nobufs; if(1){ iprint("%s:%d: starve %d\n", cname(c), c->poolno, qlen(e->oq)); - for(int j = 0; j < Ntypes; j++){ - if(e->f[j] == nil) - continue; - print(" %.4ux %d\n", e->f[j]->type, qlen(e->f[j]->iq)); - } } sleep(p, icansleep, p); }