merge
This commit is contained in:
commit
e50b5178c1
3 changed files with 52 additions and 3 deletions
1
sys/lib/dist/pc/plan9.ini.cd
vendored
1
sys/lib/dist/pc/plan9.ini.cd
vendored
|
@ -5,3 +5,4 @@ monitor=ask
|
|||
vgasize=ask
|
||||
cdboot=yes
|
||||
bootfile=/386/9pcf
|
||||
*nomp=1
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
|
||||
typedef struct Ctlr Ctlr;
|
||||
struct Ctlr {
|
||||
Lock txlock;
|
||||
Lock txlock, imlock;
|
||||
Ctlr *link;
|
||||
Pcidev *pdev;
|
||||
ulong *nic, *status;
|
||||
|
@ -404,6 +404,7 @@ bcminterrupt(Ureg*, void *arg)
|
|||
|
||||
edev = arg;
|
||||
ctlr = edev->ctlr;
|
||||
ilock(&ctlr->imlock);
|
||||
dummyread(csr32(ctlr, InterruptMailbox));
|
||||
csr32(ctlr, InterruptMailbox) = 1;
|
||||
status = ctlr->status[0];
|
||||
|
@ -416,6 +417,7 @@ bcminterrupt(Ureg*, void *arg)
|
|||
bcmtransclean(edev);
|
||||
bcmtransmit(edev);
|
||||
csr32(ctlr, InterruptMailbox) = tag << 24;
|
||||
iunlock(&ctlr->imlock);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -664,5 +666,5 @@ bcmpnp(Ether* edev)
|
|||
void
|
||||
etherbcmlink(void)
|
||||
{
|
||||
addethercard("BCM57xx", bcmpnp);
|
||||
addethercard("BCM5755", bcmpnp);
|
||||
}
|
||||
|
|
|
@ -154,6 +154,8 @@ mkioapic(PCMPioapic* p)
|
|||
return 0;
|
||||
|
||||
apic = &mpapic[apicno];
|
||||
if(apic->flags != 0)
|
||||
print("mkioapic: APIC ID conflict at %d\n", p->apicno);
|
||||
apic->type = PcmpIOAPIC;
|
||||
apic->apicno = apicno;
|
||||
apic->addr = va;
|
||||
|
@ -484,6 +486,46 @@ mpstartap(Apic* apic)
|
|||
nvramwrite(0x0F, 0x00);
|
||||
}
|
||||
|
||||
static void
|
||||
dumpmp(uchar *p, uchar *e)
|
||||
{
|
||||
int i;
|
||||
|
||||
for(i = 0; p < e; p++) {
|
||||
if((i % 16) == 0) print("*mp%d=", i/16);
|
||||
print("%.2x ", *p);
|
||||
if((++i % 16) == 0) print("\n");
|
||||
}
|
||||
if((i % 16) != 0) print("\n");
|
||||
}
|
||||
|
||||
static void
|
||||
mpoverride(uchar** newp, uchar** e)
|
||||
{
|
||||
int size, i, j;
|
||||
char buf[20];
|
||||
uchar* p;
|
||||
char* s;
|
||||
|
||||
size = atoi(getconf("*mp"));
|
||||
if(size == 0) panic("mpoverride: invalid size in *mp");
|
||||
*newp = p = malloc(size);
|
||||
if(p == nil) panic("mpoverride: can't allocate memory");
|
||||
*e = p + size;
|
||||
for(i = 0; ; i++){
|
||||
snprint(buf, sizeof buf, "*mp%d", i);
|
||||
s = getconf(buf);
|
||||
if(s == nil) break;
|
||||
while(*s){
|
||||
j = strtol(s, &s, 16);
|
||||
if(*s && *s != ' ' || j < 0 || j > 0xff) panic("mpoverride: invalid entry in %s", buf);
|
||||
if(p >= *e) panic("mpoverride: overflow in %s", buf);
|
||||
*p++ = j;
|
||||
}
|
||||
}
|
||||
if(p != *e) panic("mpoverride: size doesn't match");
|
||||
}
|
||||
|
||||
void
|
||||
mpinit(void)
|
||||
{
|
||||
|
@ -518,6 +560,10 @@ mpinit(void)
|
|||
*/
|
||||
p = ((uchar*)pcmp)+sizeof(PCMP);
|
||||
e = ((uchar*)pcmp)+pcmp->length;
|
||||
if(getconf("*dumpmp") != nil)
|
||||
dumpmp(p, e);
|
||||
if(getconf("*mp") != nil)
|
||||
mpoverride(&p, &e);
|
||||
while(p < e) switch(*p){
|
||||
|
||||
default:
|
||||
|
@ -683,7 +729,7 @@ mpintrenablex(Vctl* v, int tbdf)
|
|||
break;
|
||||
}
|
||||
if(bus == nil){
|
||||
print("ioapicirq: can't find bus type %d\n", type);
|
||||
print("ioapicirq: can't find bus type %d, number %d\n", type, bno);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue