This commit is contained in:
cinap_lenrek 2020-05-02 15:34:00 +02:00
commit badbf50b0c
3 changed files with 40 additions and 32 deletions

View file

@ -413,12 +413,10 @@ gc82543attach(Ether* edev)
*/
ctlr = edev->ctlr;
lock(&ctlr->slock);
if(ctlr->started == 0){
ctlr->started = 1;
snprint(name, KNAMELEN, "#l%d82543", edev->ctlrno);
kproc(name, gc82543watchdog, edev);
if(ctlr->started){
unlock(&ctlr->slock);
return;
}
unlock(&ctlr->slock);
ctl = csr32r(ctlr, Rctl)|Ren;
csr32w(ctlr, Rctl, ctl);
@ -426,6 +424,12 @@ gc82543attach(Ether* edev)
csr32w(ctlr, Tctl, ctl);
csr32w(ctlr, Ims, ctlr->im);
ctlr->started = 1;
unlock(&ctlr->slock);
snprint(name, KNAMELEN, "#l%d82543", edev->ctlrno);
kproc(name, gc82543watchdog, edev);
}
static char* statistics[Nstatistics] = {

View file

@ -380,24 +380,26 @@ attach(Ether* ether)
ctlr = ether->ctlr;
lock(&ctlr->slock);
if(ctlr->state == 0){
ilock(&ctlr->rlock);
csr8w(ctlr, Interrupt, 0);
iunlock(&ctlr->rlock);
command(ctlr, RUstart, PADDR(ctlr->rfdhead->rp));
ctlr->state = 1;
/*
* Start the watchdog timer for the receive lockup errata
* unless the EEPROM compatibility word indicates it may be
* omitted.
*/
if((ctlr->eeprom[0x03] & 0x0003) != 0x0003){
snprint(name, KNAMELEN, "#l%dwatchdog", ether->ctlrno);
kproc(name, watchdog, ether);
}
if(ctlr->state){
unlock(&ctlr->slock);
return;
}
ilock(&ctlr->rlock);
csr8w(ctlr, Interrupt, 0);
iunlock(&ctlr->rlock);
command(ctlr, RUstart, PADDR(ctlr->rfdhead->rp));
ctlr->state = 1;
unlock(&ctlr->slock);
/*
* Start the watchdog timer for the receive lockup errata
* unless the EEPROM compatibility word indicates it may be
* omitted.
*/
if((ctlr->eeprom[0x03] & 0x0003) != 0x0003){
snprint(name, KNAMELEN, "#l%dwatchdog", ether->ctlrno);
kproc(name, watchdog, ether);
}
}
static long

View file

@ -419,19 +419,21 @@ attach(Ether* edev)
ctlr = edev->ctlr;
lock(ctlr);
if(!ctlr->attached){
ctlr->attached = 1;
/* ready to go */
outb(ctlr->port+Qstatus, inb(ctlr->port+Qstatus) | Sdriverok);
/* start kprocs */
snprint(name, sizeof name, "#l%drx", edev->ctlrno);
kproc(name, rxproc, edev);
snprint(name, sizeof name, "#l%dtx", edev->ctlrno);
kproc(name, txproc, edev);
if(ctlr->attached){
unlock(ctlr);
return;
}
ctlr->attached = 1;
unlock(ctlr);
/* ready to go */
outb(ctlr->port+Qstatus, inb(ctlr->port+Qstatus) | Sdriverok);
/* start kprocs */
snprint(name, sizeof name, "#l%drx", edev->ctlrno);
kproc(name, rxproc, edev);
snprint(name, sizeof name, "#l%dtx", edev->ctlrno);
kproc(name, txproc, edev);
}
static long