sdvirtio: provide enable() and disable() functions so it can be switched off

This commit is contained in:
cinap_lenrek 2014-12-22 16:16:36 +01:00
parent e0c221eea6
commit c404fd9d6f

View file

@ -563,11 +563,29 @@ vioverify(SDunit *u)
SDifc sdvirtioifc;
static void
vdevenable(Vdev *vd)
static int
vioenable(SDev *sd)
{
intrenable(vd->pci->intl, viointerrupt, vd, vd->pci->tbdf, "virtio");
char name[32];
Vdev *vd;
vd = sd->ctlr;
snprint(name, sizeof(name), "%s (%s)", sd->name, sd->ifc->name);
intrenable(vd->pci->intl, viointerrupt, vd, vd->pci->tbdf, name);
outb(vd->port+Status, inb(vd->port+Status) | DriverOk);
return 0;
}
static int
viodisable(SDev *sd)
{
char name[32];
Vdev *vd;
vd = sd->ctlr;
snprint(name, sizeof(name), "%s (%s)", sd->name, sd->ifc->name);
intrdisable(vd->pci->intl, viointerrupt, vd, vd->pci->tbdf, name);
return 0;
}
static SDev*
@ -584,8 +602,6 @@ viopnp(void)
if(vd->nqueue != 1)
continue;
vdevenable(vd);
if((s = malloc(sizeof(*s))) == nil)
break;
s->ctlr = vd;
@ -630,8 +646,6 @@ viopnp(void)
continue;
}
vd->cfg = cfg;
vdevenable(vd);
if((s = malloc(sizeof(*s))) == nil)
break;
@ -654,8 +668,8 @@ SDifc sdvirtioifc = {
viopnp, /* pnp */
nil, /* legacy */
nil, /* enable */
nil, /* disable */
vioenable, /* enable */
viodisable, /* disable */
vioverify, /* verify */
vioonline, /* online */