add erik quanstros yukon2 ethernet driver
This commit is contained in:
parent
efe1c9087a
commit
2d101158e4
5 changed files with 2661 additions and 0 deletions
2362
sys/src/9/pc/etheryuk.c
Normal file
2362
sys/src/9/pc/etheryuk.c
Normal file
File diff suppressed because it is too large
Load diff
|
@ -105,6 +105,7 @@ install:V: $p$CONF
|
||||||
$ETHER: etherif.h ../port/netif.h
|
$ETHER: etherif.h ../port/netif.h
|
||||||
$AUDIO: ../port/audioif.h
|
$AUDIO: ../port/audioif.h
|
||||||
ether8003.$O ether8390.$O: ether8390.h
|
ether8003.$O ether8390.$O: ether8390.h
|
||||||
|
etheryuk.$O: yukdump.h
|
||||||
$VGA mouse.$O: screen.h /sys/include/memdraw.h
|
$VGA mouse.$O: screen.h /sys/include/memdraw.h
|
||||||
devfloppy.$O: floppy.h
|
devfloppy.$O: floppy.h
|
||||||
archmp.$O mp.$O: apbootstrap.h
|
archmp.$O mp.$O: apbootstrap.h
|
||||||
|
|
|
@ -66,6 +66,7 @@ link
|
||||||
# etherm10g pci
|
# etherm10g pci
|
||||||
ethersink
|
ethersink
|
||||||
ethersmc devi82365 cis
|
ethersmc devi82365 cis
|
||||||
|
etheryuk pci
|
||||||
etherwavelan wavelan devi82365 cis pci
|
etherwavelan wavelan devi82365 cis pci
|
||||||
etheriwl pci wifi
|
etheriwl pci wifi
|
||||||
etherrt2860 pci wifi
|
etherrt2860 pci wifi
|
||||||
|
|
|
@ -67,6 +67,7 @@ link
|
||||||
ethervt6105m pci ethermii
|
ethervt6105m pci ethermii
|
||||||
ethersink
|
ethersink
|
||||||
ethersmc devi82365 cis
|
ethersmc devi82365 cis
|
||||||
|
etheryuk pci
|
||||||
etherwavelan wavelan devi82365 cis pci
|
etherwavelan wavelan devi82365 cis pci
|
||||||
etheriwl pci wifi
|
etheriwl pci wifi
|
||||||
etherrt2860 pci wifi
|
etherrt2860 pci wifi
|
||||||
|
|
296
sys/src/9/pc/yukdump.h
Normal file
296
sys/src/9/pc/yukdump.h
Normal file
|
@ -0,0 +1,296 @@
|
||||||
|
typedef struct Regdump Regdump;
|
||||||
|
struct Regdump {
|
||||||
|
uint offset;
|
||||||
|
uint size;
|
||||||
|
char *name;
|
||||||
|
};
|
||||||
|
|
||||||
|
Regdump pcireg[] = {
|
||||||
|
Pciphy, 32, "Pciphy",
|
||||||
|
Pciclk, 32, "Pciclk",
|
||||||
|
Pcistate, 32, "Pcistate",
|
||||||
|
};
|
||||||
|
|
||||||
|
static Regdump gmacreg[] = {
|
||||||
|
Stat, 16, "Stat",
|
||||||
|
Ctl, 16, "Ctl",
|
||||||
|
Txctl, 16, "Txctl",
|
||||||
|
Rxctl, 16, "Rxctl",
|
||||||
|
Txflow, 16, "Txflow",
|
||||||
|
Txparm, 16, "Txparm",
|
||||||
|
Serctl, 16, "Serctl",
|
||||||
|
Txirq, 16, "Txirq",
|
||||||
|
Rxirq, 16, "Rxirq",
|
||||||
|
Trirq, 16, "Trirq",
|
||||||
|
Txmask, 16, "Txmask",
|
||||||
|
Rxmask, 16, "Rxmask",
|
||||||
|
Trmask, 16, "Trmask",
|
||||||
|
Smictl, 16, "Smictl",
|
||||||
|
Smidata, 16, "Smidata",
|
||||||
|
Phyaddr, 16, "Phyaddr",
|
||||||
|
Mchash+0, 16, "Mchash",
|
||||||
|
Mchash+2, 16, "Mchash",
|
||||||
|
Mchash+4, 16, "Mchash",
|
||||||
|
Mchash+6, 16, "Mchash",
|
||||||
|
Ea0, 16, "Ea0",
|
||||||
|
Ea0+2, 16, "Ea0",
|
||||||
|
Ea0+4, 16, "Ea0",
|
||||||
|
Ea1, 16, "Ea1",
|
||||||
|
Ea1+2, 16, "Ea1",
|
||||||
|
Ea1+4, 16, "Ea1",
|
||||||
|
};
|
||||||
|
|
||||||
|
static Regdump macreg[] = {
|
||||||
|
Txactl, 8, "Txactl",
|
||||||
|
Gfrxctl, 32, "Gfrxctl",
|
||||||
|
Grxfm, 32, "Grxfm",
|
||||||
|
Grxft, 32, "Grxft",
|
||||||
|
Grxtt, 32, "Grxtt",
|
||||||
|
Gmfctl, 32, "Gmfctl",
|
||||||
|
Mac, 32, "Mac",
|
||||||
|
Phy, 32, "Phy",
|
||||||
|
Irqm, 8, "Irqm",
|
||||||
|
Linkctl, 8, "Linkctl",
|
||||||
|
|
||||||
|
Rxwp, 32, "Rxwp",
|
||||||
|
Rxrp, 32, "Rxrp",
|
||||||
|
Rxrlev, 32, "Rxrlev",
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
static Regdump reg[] = {
|
||||||
|
Ctst, 16, "Ctst",
|
||||||
|
Pwrctl, 8, "Pwrctl",
|
||||||
|
Isr, 32, "Isr",
|
||||||
|
Ism, 32, "Ism",
|
||||||
|
Hwe, 32, "Hwe",
|
||||||
|
Hwem, 32, "Hwem",
|
||||||
|
Isrc2, 32, "Isrc2",
|
||||||
|
|
||||||
|
Macadr/2, 16, "Macadr",
|
||||||
|
Macadr/2+1, 16, "Macadr",
|
||||||
|
Macadr/2+2, 16, "Macadr",
|
||||||
|
|
||||||
|
Pmd, 8, "Pmd",
|
||||||
|
Maccfg, 8, "Maccfg",
|
||||||
|
Chip, 8, "Chip",
|
||||||
|
Ramcnt, 8, "Ramcnt",
|
||||||
|
Clkgate, 8, "Clkgate",
|
||||||
|
Hres, 8, "Hres",
|
||||||
|
Clkctl, 32, "Clkctl",
|
||||||
|
Tstctl1, 8, "Tstctl1",
|
||||||
|
|
||||||
|
Asfcs, 8, "Asfcs",
|
||||||
|
Asfhost, 32, "Asfhost",
|
||||||
|
Statctl, 32, "Statctl",
|
||||||
|
Stattl, 16, "Stattl",
|
||||||
|
Stataddr, 32, "Stataddr",
|
||||||
|
Statth, 16, "Statth",
|
||||||
|
Stathd, 16, "Stathd",
|
||||||
|
Statwm, 8, "Statwm",
|
||||||
|
Statiwm, 8, "Statiwm",
|
||||||
|
};
|
||||||
|
|
||||||
|
static char*
|
||||||
|
dumppci(Ctlr *c, char *p, char *e)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
Regdump *r;
|
||||||
|
|
||||||
|
r = pcireg;
|
||||||
|
p = seprint(p, e, "/* pci reg */\n");
|
||||||
|
for(i = 0; i < nelem(pcireg); i++)
|
||||||
|
switch(r[i].size){
|
||||||
|
default:
|
||||||
|
p = seprint(p, e, "%s: bug size %d\n", r[i].name, r[i].size);
|
||||||
|
break;
|
||||||
|
case 32:
|
||||||
|
p = seprint(p, e, "%s: %.8ux\n", r[i].name, pcicfgr32(c->p, r[i].offset));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
static char*
|
||||||
|
dumpgmac(Ctlr *c, char *p, char *e)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
Regdump *r;
|
||||||
|
|
||||||
|
r = gmacreg;
|
||||||
|
p = seprint(p, e, "/* gmac reg */\n");
|
||||||
|
for(i = 0; i < nelem(gmacreg); i++)
|
||||||
|
switch(r[i].size){
|
||||||
|
default:
|
||||||
|
p = seprint(p, e, "%s: bug size %d\n", r[i].name, r[i].size);
|
||||||
|
break;
|
||||||
|
case 16:
|
||||||
|
p = seprint(p, e, "%s: %.4ux\n", r[i].name, gmacread(c, r[i].offset));
|
||||||
|
break;
|
||||||
|
case 32:
|
||||||
|
p = seprint(p, e, "%s: %.8ux\n", r[i].name, gmacread32(c, r[i].offset));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
static char*
|
||||||
|
dumpmac(Ctlr *c, char *p, char *e)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
Regdump *r;
|
||||||
|
|
||||||
|
r = macreg;
|
||||||
|
p = seprint(p, e, "/* mac reg */\n");
|
||||||
|
for(i = 0; i < nelem(macreg); i++)
|
||||||
|
switch(r[i].size){
|
||||||
|
default:
|
||||||
|
p = seprint(p, e, "%s: bug size %d\n", r[i].name, r[i].size);
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
p = seprint(p, e, "%s: %.2ux\n", r[i].name, macread8(c, r[i].offset));
|
||||||
|
break;
|
||||||
|
case 32:
|
||||||
|
p = seprint(p, e, "%s: %.8ux\n", r[i].name, macread32(c, r[i].offset));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
static char*
|
||||||
|
dumpreg(Ctlr *c, char *p, char *e)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
Regdump *r;
|
||||||
|
|
||||||
|
r = reg;
|
||||||
|
p = seprint(p, e, "/* reg */\n");
|
||||||
|
for(i = 0; i < nelem(reg); i++)
|
||||||
|
switch(r[i].size){
|
||||||
|
default:
|
||||||
|
p = seprint(p, e, "%s: bug size %d\n", r[i].name, r[i].size);
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
p = seprint(p, e, "%s: %.2ux\n", r[i].name, c->reg8[r[i].offset]);
|
||||||
|
break;
|
||||||
|
case 16:
|
||||||
|
p = seprint(p, e, "%s: %.4ux\n", r[i].name, c->reg16[r[i].offset]);
|
||||||
|
break;
|
||||||
|
case 32:
|
||||||
|
p = seprint(p, e, "%s: %.8ux\n", r[i].name, c->reg[r[i].offset]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *optab[256] = {
|
||||||
|
[Orxchks] "rxsum",
|
||||||
|
[Orxstat] "rxstat",
|
||||||
|
[Otxidx] "txidx",
|
||||||
|
};
|
||||||
|
|
||||||
|
static char*
|
||||||
|
rs(uint r)
|
||||||
|
{
|
||||||
|
char *s;
|
||||||
|
|
||||||
|
s = optab[r & 0xff];
|
||||||
|
if(s == nil)
|
||||||
|
s = "";
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
nblocktab(int qno)
|
||||||
|
{
|
||||||
|
uint i;
|
||||||
|
Block *b;
|
||||||
|
|
||||||
|
ilock(&rbtab[qno]);
|
||||||
|
b = rbtab[qno].b;
|
||||||
|
for(i = 0;; i++){
|
||||||
|
if(b == nil)
|
||||||
|
break;
|
||||||
|
b = b->next;
|
||||||
|
}
|
||||||
|
iunlock(&rbtab[qno]);
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
static char*
|
||||||
|
dumpring(Sring *r, Block **t, int qno, char *p, char *e)
|
||||||
|
{
|
||||||
|
int m, n;
|
||||||
|
uint i;
|
||||||
|
|
||||||
|
p = seprint(p, e,
|
||||||
|
"bring: rp %ud wp %ud cnt %ud m %ud : ",
|
||||||
|
r->rp, r->wp, r->cnt, r->m);
|
||||||
|
m = -1;
|
||||||
|
n = 0;
|
||||||
|
for(i = 0; i < r->cnt; i++){
|
||||||
|
n += t[i] != nil;
|
||||||
|
if(m>=0 && t[i] == nil){
|
||||||
|
p = seprint(p, e, "%ud", m);
|
||||||
|
if(i != m + 1)
|
||||||
|
p = seprint(p, e, "-%ud", i-1);
|
||||||
|
p = seprint(p, e, " ");
|
||||||
|
m = -1;
|
||||||
|
}else if(m<0 && t[i] != nil)
|
||||||
|
m = i;
|
||||||
|
}
|
||||||
|
if(m>=0){
|
||||||
|
p = seprint(p, e, "%ud", m);
|
||||||
|
if(i != m + 1)
|
||||||
|
p = seprint(p, e, "-%ud ", i-1);
|
||||||
|
}
|
||||||
|
p = seprint(p, e, "n=%d/%d", n, r->cnt);
|
||||||
|
return seprint(p, e, " list %d\n", nblocktab(qno));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* debug; remove */
|
||||||
|
static void
|
||||||
|
descriptorfu(Ether *e, uint qoff)
|
||||||
|
{
|
||||||
|
char buf[PRINTSIZE], *p, *f;
|
||||||
|
uint q, qm1;
|
||||||
|
Block *b, *a, **bring;
|
||||||
|
Ctlr *c;
|
||||||
|
Status *t, *v;
|
||||||
|
Sring *r;
|
||||||
|
|
||||||
|
c = e->ctlr;
|
||||||
|
f = buf + sizeof buf;
|
||||||
|
if(qoff == Qtx){
|
||||||
|
bring = c->tbring;
|
||||||
|
r = &c->tx;
|
||||||
|
p = seprint(buf, f, "tx ");
|
||||||
|
}else{
|
||||||
|
bring = c->rbring;
|
||||||
|
r = &c->rx;
|
||||||
|
p = seprint(buf, f, "rx ");
|
||||||
|
}
|
||||||
|
|
||||||
|
q = prread16(c, qoff + Pgetidx);
|
||||||
|
print(" getidx %ud\n", q);
|
||||||
|
if(q >= r->cnt){
|
||||||
|
q &= r->m;
|
||||||
|
print(" try getidx %ud\n", q);
|
||||||
|
}
|
||||||
|
qm1 = q-1 & r->m;
|
||||||
|
t = r->r + q;
|
||||||
|
v = r->r + qm1;
|
||||||
|
b = bring[q];
|
||||||
|
a = bring[qm1];
|
||||||
|
print(" %0.4d %.2ux l=%d p=%#p @%#p\n", q, t->op,
|
||||||
|
(uint)getle(t->l, 2), KZERO+(ulong)getle(t->status, 4), Pciwaddrl(t));
|
||||||
|
print(" %0.4d %.2ux l=%d p=%#p @%#p\n", qm1, t->op,
|
||||||
|
(uint)getle(v->l, 2), KZERO+(ulong)getle(v->status, 4), Pciwaddrl(v));
|
||||||
|
if(r == &c->rx)
|
||||||
|
print(" %#p %#p (wp)\n", b? b->wp: 0, a? a->wp: 0);
|
||||||
|
else
|
||||||
|
print(" %#p %#p (rp)\n", b? b->rp: 0, a? a->rp: 0);
|
||||||
|
|
||||||
|
dumpring(r, bring, c->qno, p, f);
|
||||||
|
print(" %s", buf);
|
||||||
|
}
|
Loading…
Reference in a new issue