55a56 > Coal = 0xE2, /* Interrupt Mitigation (Coalesce) */ 57c58 < Mtps = 0xEC, /* Max. Transmit Packet Size */ --- > Etx = 0xEC, /* Early Transmit Threshold */ 183c184 < Lgsen = 0x08000000, /* Large Send */ --- > Lgsen = 0x08000000, /* TSO; WARNING: contains lark's vomit */ 187,188c188 < RxflMASK = 0x00003FFF, /* Receive Frame Length */ < RxflSHIFT = 0, --- > RxflMASK = 0x00001FFF, /* Receive Frame Length */ 215,216c215,216 < Ntd = 32, /* Transmit Ring */ < Nrd = 128, /* Receive Ring */ --- > Ntd = 64, /* Transmit Ring */ > Nrd = 256, /* Receive Ring */ 218c218,221 < Mps = ROUNDUP(ETHERMAXTU+4, 128), --- > Stdbuf = 1536, > Mtu = 7000, /* performance limited */ > Mps = Mtu+8+14, /* if(mtu>ETHERMAXTU) */ > // Mps = ROUNDUP(ETHERMAXTU+4, 128), 276c279 < int mtps; /* Max. Transmit Packet Size */ --- > // int rbsz; /* receive buffer size */ 303a307 > uint frag; /* partial packets; rb was too small */ 487c491 < char *p; --- > char *p0, *p, *e; 490c494 < int i, l, r, timeo; --- > int i, r, timeo; 525c529 < if((p = malloc(READSTR)) == nil) --- > if((p = p0 = malloc(READSTR)) == nil) 526a531 > e = p+READSTR; 528,540c533,545 < l = snprint(p, READSTR, "TxOk: %llud\n", dtcc->txok); < l += snprint(p+l, READSTR-l, "RxOk: %llud\n", dtcc->rxok); < l += snprint(p+l, READSTR-l, "TxEr: %llud\n", dtcc->txer); < l += snprint(p+l, READSTR-l, "RxEr: %ud\n", dtcc->rxer); < l += snprint(p+l, READSTR-l, "MissPkt: %ud\n", dtcc->misspkt); < l += snprint(p+l, READSTR-l, "FAE: %ud\n", dtcc->fae); < l += snprint(p+l, READSTR-l, "Tx1Col: %ud\n", dtcc->tx1col); < l += snprint(p+l, READSTR-l, "TxMCol: %ud\n", dtcc->txmcol); < l += snprint(p+l, READSTR-l, "RxOkPh: %llud\n", dtcc->rxokph); < l += snprint(p+l, READSTR-l, "RxOkBrd: %llud\n", dtcc->rxokbrd); < l += snprint(p+l, READSTR-l, "RxOkMu: %ud\n", dtcc->rxokmu); < l += snprint(p+l, READSTR-l, "TxAbt: %ud\n", dtcc->txabt); < l += snprint(p+l, READSTR-l, "TxUndrn: %ud\n", dtcc->txundrn); --- > p = seprint(p, e, "TxOk: %llud\n", dtcc->txok); > p = seprint(p, e, "RxOk: %llud\n", dtcc->rxok); > p = seprint(p, e, "TxEr: %llud\n", dtcc->txer); > p = seprint(p, e, "RxEr: %ud\n", dtcc->rxer); > p = seprint(p, e, "MissPkt: %ud\n", dtcc->misspkt); > p = seprint(p, e, "FAE: %ud\n", dtcc->fae); > p = seprint(p, e, "Tx1Col: %ud\n", dtcc->tx1col); > p = seprint(p, e, "TxMCol: %ud\n", dtcc->txmcol); > p = seprint(p, e, "RxOkPh: %llud\n", dtcc->rxokph); > p = seprint(p, e, "RxOkBrd: %llud\n", dtcc->rxokbrd); > p = seprint(p, e, "RxOkMu: %ud\n", dtcc->rxokmu); > p = seprint(p, e, "TxAbt: %ud\n", dtcc->txabt); > p = seprint(p, e, "TxUndrn: %ud\n", dtcc->txundrn); 542,551c547,557 < l += snprint(p+l, READSTR-l, "txdu: %ud\n", ctlr->txdu); < l += snprint(p+l, READSTR-l, "tcpf: %ud\n", ctlr->tcpf); < l += snprint(p+l, READSTR-l, "udpf: %ud\n", ctlr->udpf); < l += snprint(p+l, READSTR-l, "ipf: %ud\n", ctlr->ipf); < l += snprint(p+l, READSTR-l, "fovf: %ud\n", ctlr->fovf); < l += snprint(p+l, READSTR-l, "ierrs: %ud\n", ctlr->ierrs); < l += snprint(p+l, READSTR-l, "rer: %ud\n", ctlr->rer); < l += snprint(p+l, READSTR-l, "rdu: %ud\n", ctlr->rdu); < l += snprint(p+l, READSTR-l, "punlc: %ud\n", ctlr->punlc); < l += snprint(p+l, READSTR-l, "fovw: %ud\n", ctlr->fovw); --- > p = seprint(p, e, "txdu: %ud\n", ctlr->txdu); > p = seprint(p, e, "tcpf: %ud\n", ctlr->tcpf); > p = seprint(p, e, "udpf: %ud\n", ctlr->udpf); > p = seprint(p, e, "ipf: %ud\n", ctlr->ipf); > p = seprint(p, e, "fovf: %ud\n", ctlr->fovf); > p = seprint(p, e, "ierrs: %ud\n", ctlr->ierrs); > p = seprint(p, e, "rer: %ud\n", ctlr->rer); > p = seprint(p, e, "rdu: %ud\n", ctlr->rdu); > p = seprint(p, e, "punlc: %ud\n", ctlr->punlc); > p = seprint(p, e, "fovw: %ud\n", ctlr->fovw); > p = seprint(p, e, "frag: %ud\n", ctlr->frag); 553,555c559,561 < l += snprint(p+l, READSTR-l, "tcr: %#8.8ux\n", ctlr->tcr); < l += snprint(p+l, READSTR-l, "rcr: %#8.8ux\n", ctlr->rcr); < l += snprint(p+l, READSTR-l, "multicast: %ud\n", ctlr->mcast); --- > p = seprint(p, e, "tcr: %#8.8ux\n", ctlr->tcr); > p = seprint(p, e, "rcr: %#8.8ux\n", ctlr->rcr); > p = seprint(p, e, "multicast: %ud\n", ctlr->mcast); 558c564 < l += snprint(p+l, READSTR, "phy: "); --- > p = seprint(p, e, "phy: "); 561c567 < l += snprint(p+l, READSTR-l, "\n "); --- > p = seprint(p, e, "\n "); 563c569 < l += snprint(p+l, READSTR-l, " %4.4ux", r); --- > p = seprint(p, e, " %4.4ux", r); 565c571 < snprint(p+l, READSTR-l, "\n"); --- > seprint(p, e, "\n"); 568c574 < n = readstr(offset, a, n, p); --- > n = readstr(offset, a, n, p0); 572c578 < free(p); --- > free(p0); 631d636 < } 632a638,639 > }else > iprint("i8169: rx overrun\n"); 655c662 < * MAC Address. --- > * MAC Address is not settable on some (all?) chips. 659,662d665 < r = (edev->ea[3]<<24)|(edev->ea[2]<<16)|(edev->ea[1]<<8)|edev->ea[0]; < csr32w(ctlr, Idr0, r); < r = (edev->ea[5]<<8)|edev->ea[4]; < csr32w(ctlr, Idr0+4, r); 679c682 < for(i = 0; i < ctlr->nrd; i++){ --- > for(i = 0; i < ctlr->nrd; i++) 684d686 < } 695d696 < ctlr->mtps = HOWMANY(Mps, 128); 697c698 < cplusc |= /*Rxchksum|*/Mulrw; --- > cplusc |= Rxchksum|Mulrw; 702d702 < ctlr->mtps = HOWMANY(Mps, 32); 706c706 < cplusc |= (1<<14); /* magic */ --- > cplusc |= 1<<14; /* magic */ 768c768 < * initial early transmit threshold value; --- > * clear early transmit threshold value; 771a772,776 > * > * note: the maximum rx size is a filter. the size of the buffer > * in the descriptor ring is still honored. we will toss >Mtu > * packets because they've been fragmented into mutiple > * rx buffers. 774c779 < csr8w(ctlr, Mtps, ctlr->mtps); --- > csr8w(ctlr, Etx, 0x3f); 779,780c784,785 < csr16w(ctlr, Rms, Mps); < r = csr16r(ctlr, Mulint) & 0xF000; --- > csr16w(ctlr, Rms, 16383); /* was Mps */ > r = csr16r(ctlr, Mulint) & 0xF000; /* no early rx interrupts */ 782a788 > csr16w(ctlr, Coal, 0); 788,789d793 < default: < break; 791d794 < csr16w(ctlr, 0xE2, 0); /* magic */ 798d800 < csr16w(ctlr, 0xE2, 0); /* magic */ 803,804d804 < csr16w(ctlr, Rms, 0x0800); < csr8w(ctlr, Mtps, 0x3F); 928c928 < d->control |= Own|Fs|Ls|((BLEN(bp)< d->control |= Own|Fs|Ls|BLEN(bp); 964,966c964,965 < ctlr->rb[rdh] = nil; < bp->wp = bp->rp + ((control & RxflMASK)>>RxflSHIFT)-4; < bp->next = nil; --- > bp->wp = bp->rp + (control & RxflMASK)-4; > // bp->next = nil; 998a998,1002 > }else{ > if(!(control&Res)) > ctlr->frag++; > /* iprint("i8169: control %#.8ux\n", control); */ > freeb(ctlr->rb[rdh]); 1000,1005c1004 < else{ < /* < * Error stuff here. < print("control %#8.8ux\n", control); < */ < } --- > ctlr->rb[rdh] = nil; 1169a1169 > edev->maxmtu = Mtu;