diff --git a/pc/ether82563.c b/pc/ether82563.c index ffd9027..cfb5b8c 100644 --- a/pc/ether82563.c +++ b/pc/ether82563.c @@ -388,7 +388,8 @@ enum { /* Tdesc status */ typedef struct { u16int *reg; u32int *reg32; - int sz; + u16int base; + u16int lim; } Flash; enum { @@ -1526,11 +1527,11 @@ fload(Ctlr *c) if(f.reg == nil) return -1; f.reg32 = (void*)f.reg; - f.sz = f.reg32[Bfpr]; - r = f.sz & 0x1fff; + f.base = f.reg32[Bfpr] & FMASK(0, 13); + f.lim = (f.reg32[Bfpr]>>16) & FMASK(0, 13); if(csr32r(c, Eec) & (1<<22)) - r += c->type == i82579? 16 : 1; - r <<= 12; + f.base += (f.lim + 1 - f.base) >> 1; + r = f.base << 12; sum = 0; for (adr = 0; adr < 0x40; adr++) { diff --git a/pc/pci.c b/pc/pci.c index 05669f8..030e794 100644 --- a/pc/pci.c +++ b/pc/pci.c @@ -668,6 +668,7 @@ static Bridge southbridges[] = { { 0x8086, 0x3a48, pIIxget, pIIxset }, /* Intel 82801JI */ { 0x8086, 0x2916, pIIxget, pIIxset }, /* Intel 82801? */ { 0x8086, 0x1c02, pIIxget, pIIxset }, /* Intel 6 Series/C200 */ + { 0x8086, 0x1e53, pIIxget, pIIxset }, /* Intel 7 Series/C216 */ { 0x1106, 0x0586, viaget, viaset }, /* Viatech 82C586 */ { 0x1106, 0x0596, viaget, viaset }, /* Viatech 82C596 */ { 0x1106, 0x0686, viaget, viaset }, /* Viatech 82C686 */