#include "io.h"
#include "../port/error.h"
#include "../port/netif.h"
-#include "etherif.h"
+#include "../port/etherif.h"
/*
* virtio ethernet driver
blocks[i] = nil;
b->wp = b->rp + u->len - VheaderSize;
- etheriq(edev, b, 1);
+ etheriq(edev, b);
q->lastused++;
}
}
{
Ctlr *ctlr = edev->ctlr;
outb(ctlr->port+Qstatus, 0);
+ pciclrbme(ctlr->pcidev);
}
static void
c->typ = typ;
c->pcidev = p;
+ pcienable(p);
c->id = (p->did<<16)|p->vid;
/* ยง3.1.2 Legacy Device Initialization */
}
if(i < 2){
print("ethervirtio: no queues\n");
+ pcidisable(p);
free(c);
continue;
}
Ctlr *ctlr;
int i;
- if(ctlrhead == nil) {
+ if(ctlrhead == nil)
ctlrhead = pciprobe(1);
- }
for(ctlr = ctlrhead; ctlr != nil; ctlr = ctlr->next){
if(ctlr->active)
edev->attach = attach;
edev->shutdown = shutdown;
- edev->interrupt = interrupt;
edev->ifstat = ifstat;
if((ctlr->feat & (Fctrlvq|Fctrlrx)) == (Fctrlvq|Fctrlrx)){
edev->promiscuous = promiscuous;
}
+ pcisetbme(ctlr->pcidev);
+ intrenable(edev->irq, interrupt, edev, edev->tbdf, edev->name);
+
return 0;
}