virtio: set FeaturesOk flag after feature negotiation, and enable queues before DriverOk flag
This commit is contained in:
parent
ad37339a1c
commit
e8259861da
2 changed files with 10 additions and 5 deletions
|
@ -40,7 +40,7 @@ enum {
|
|||
Sacknowledge = 1,
|
||||
Sdriver = 2,
|
||||
Sdriverok = 4,
|
||||
Sfeatureok = 8,
|
||||
Sfeaturesok = 8,
|
||||
Sfailed = 128,
|
||||
|
||||
/* flags in Qnetstatus */
|
||||
|
@ -466,14 +466,15 @@ attach(Ether* edev)
|
|||
}
|
||||
ctlr->attached = 1;
|
||||
|
||||
/* driver is ready */
|
||||
ctlr->cfg->status |= Sdriverok;
|
||||
|
||||
/* enable the queues */
|
||||
for(i = 0; i < ctlr->nqueue; i++){
|
||||
ctlr->cfg->queuesel = i;
|
||||
ctlr->cfg->queueenable = 1;
|
||||
}
|
||||
|
||||
/* driver is ready */
|
||||
ctlr->cfg->status |= Sdriverok;
|
||||
|
||||
iunlock(ctlr);
|
||||
|
||||
/* start kprocs */
|
||||
|
@ -692,6 +693,8 @@ pciprobe(void)
|
|||
cfg->drvfeatsel = 0;
|
||||
cfg->drvfeat = c->feat[0] & (Fmac|Fctrlvq|Fctrlrx);
|
||||
|
||||
cfg->status |= Sfeaturesok;
|
||||
|
||||
for(i=0; i<nelem(c->queue); i++){
|
||||
cfg->queuesel = i;
|
||||
n = cfg->queuesize;
|
||||
|
|
|
@ -46,6 +46,7 @@ enum {
|
|||
enum {
|
||||
Acknowledge = 1,
|
||||
Driver = 2,
|
||||
FeaturesOk = 8,
|
||||
DriverOk = 4,
|
||||
Failed = 0x80,
|
||||
};
|
||||
|
@ -335,6 +336,7 @@ Baddev:
|
|||
cfg->drvfeat = vd->feat[1] & 1;
|
||||
cfg->drvfeatsel = 0;
|
||||
cfg->drvfeat = 0;
|
||||
cfg->status |= FeaturesOk;
|
||||
|
||||
for(i=0; i<nelem(vd->queue); i++){
|
||||
cfg->queuesel = i;
|
||||
|
@ -698,11 +700,11 @@ vioenable(SDev *sd)
|
|||
intrenable(vd->pci->intl, viointerrupt, vd, vd->pci->tbdf, name);
|
||||
coherence();
|
||||
|
||||
vd->cfg->status |= DriverOk;
|
||||
for(i = 0; i < vd->nqueue; i++){
|
||||
vd->cfg->queuesel = i;
|
||||
vd->cfg->queueenable = 1;
|
||||
}
|
||||
vd->cfg->status |= DriverOk;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue