summaryrefslogtreecommitdiff
path: root/sys/src/9/pc/sdvirtio.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2014-12-22 16:16:36 +0100
committercinap_lenrek <cinap_lenrek@felloff.net>2014-12-22 16:16:36 +0100
commitc404fd9d6f46f90e4420d0b268215ef719e25796 (patch)
tree1298ac4c57324560696217bc710fde3ee8d83261 /sys/src/9/pc/sdvirtio.c
parente0c221eea6b68c87f89eb073d7204851398fc5d8 (diff)
sdvirtio: provide enable() and disable() functions so it can be switched off
Diffstat (limited to 'sys/src/9/pc/sdvirtio.c')
-rw-r--r--sys/src/9/pc/sdvirtio.c32
1 files changed, 23 insertions, 9 deletions
diff --git a/sys/src/9/pc/sdvirtio.c b/sys/src/9/pc/sdvirtio.c
index 17cab9cc3..64c43ddf3 100644
--- a/sys/src/9/pc/sdvirtio.c
+++ b/sys/src/9/pc/sdvirtio.c
@@ -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 */