summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Cave-Ayland <mark.cave-ayland@ilande.co.uk>2019-08-18 21:16:50 +0100
committerMark Cave-Ayland <mark.cave-ayland@ilande.co.uk>2019-08-18 21:16:50 +0100
commit412fc43324209cecddbf3e39c648a81fa0d57953 (patch)
tree37f15430d3b7b4da47827197fa7c868786884371
parent5a2ec0dcd0b25ac66dc8c348c27436f669f1c58c (diff)
downloadqemu-openbios-412fc43324209cecddbf3e39c648a81fa0d57953.tar.gz
virtio: use instance value to initialise C instance parameter
This simplifies the open word by avoiding having to locate and read the value of the _vdev property. Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
-rw-r--r--drivers/virtio.c46
1 files changed, 11 insertions, 35 deletions
diff --git a/drivers/virtio.c b/drivers/virtio.c
index 4f9f5ee8..ff7ed6f1 100644
--- a/drivers/virtio.c
+++ b/drivers/virtio.c
@@ -337,9 +337,14 @@ ob_virtio_configure_device(VDev *vdev)
static void
ob_virtio_disk_open(VDev **_vdev)
{
- VDev *vdev = *_vdev;
+ VDev *vdev;
phandle_t ph;
+ PUSH(find_ih_method("vdev", my_self()));
+ fword("execute");
+ *_vdev = cell2pointer(POP());
+ vdev = *_vdev;
+
vdev->pos = 0;
if (!vdev->configured) {
@@ -409,24 +414,9 @@ static void set_virtio_alias(const char *path, int idx)
set_property(aliases, name, path, strlen(path) + 1);
}
-static void
-ob_virtio_disk_initialize(VDev **_vdev)
-{
- phandle_t ph = get_cur_dev();
- VDev *vdev;
- int len;
-
- vdev = cell2pointer(get_int_property(ph, "_vdev", &len));
- push_str("_vdev");
- feval("delete-property");
-
- *_vdev = vdev;
-}
-
DECLARE_UNNAMED_NODE(ob_virtio_disk, 0, sizeof(VDev *));
NODE_METHODS(ob_virtio_disk) = {
- { NULL, ob_virtio_disk_initialize },
{ "open", ob_virtio_disk_open },
{ "close", ob_virtio_disk_close },
{ "seek", ob_virtio_disk_seek },
@@ -446,12 +436,6 @@ ob_virtio_close(VDev **_vdev)
}
static void
-ob_virtio_vdev(VDev **_vdev)
-{
- PUSH(pointer2cell(_vdev));
-}
-
-static void
ob_virtio_dma_alloc(__attribute__((unused)) VDev **_vdev)
{
call_parent_method("dma-alloc");
@@ -486,7 +470,6 @@ DECLARE_UNNAMED_NODE(ob_virtio, 0, sizeof(VDev *));
NODE_METHODS(ob_virtio) = {
{ "open", ob_virtio_open },
{ "close", ob_virtio_close },
- { "vdev", ob_virtio_vdev },
{ "dma-alloc", ob_virtio_dma_alloc },
{ "dma-free", ob_virtio_dma_free },
{ "dma-map-in", ob_virtio_dma_map_in },
@@ -499,18 +482,12 @@ void ob_virtio_init(const char *path, const char *dev_name, uint64_t common_cfg,
int idx)
{
char buf[256];
- phandle_t ph;
ucell addr;
- VDev *vdev, **_vdev;
+ VDev *vdev;
/* Open ob_virtio */
BIND_NODE_METHODS(get_cur_dev(), ob_virtio);
- ph = find_ih_method("vdev", my_self());
- PUSH(ph);
- fword("execute");
- _vdev = cell2pointer(POP());
-
vdev = malloc(sizeof(VDev));
vdev->common_cfg = common_cfg;
vdev->device_cfg = device_cfg;
@@ -518,6 +495,9 @@ void ob_virtio_init(const char *path, const char *dev_name, uint64_t common_cfg,
vdev->notify_mult = notify_mult;
vdev->configured = 0;
+ PUSH(pointer2cell(vdev));
+ feval("value vdev");
+
PUSH(sizeof(VRing) * VIRTIO_MAX_VQS);
feval("dma-alloc");
addr = POP();
@@ -528,8 +508,6 @@ void ob_virtio_init(const char *path, const char *dev_name, uint64_t common_cfg,
addr = POP();
vdev->ring_area = cell2pointer(addr);
- *_vdev = vdev;
-
fword("new-device");
push_str("disk");
fword("device-name");
@@ -537,9 +515,7 @@ void ob_virtio_init(const char *path, const char *dev_name, uint64_t common_cfg,
fword("device-type");
PUSH(pointer2cell(vdev));
- fword("encode-int");
- push_str("_vdev");
- fword("property");
+ feval("value vdev");
BIND_NODE_METHODS(get_cur_dev(), ob_virtio_disk);
fword("finish-device");