diff options
author | Timos Ampelikiotis <t.ampelikiotis@virtualopensystems.com> | 2023-10-10 11:40:56 +0000 |
---|---|---|
committer | Timos Ampelikiotis <t.ampelikiotis@virtualopensystems.com> | 2023-10-10 11:40:56 +0000 |
commit | e02cda008591317b1625707ff8e115a4841aa889 (patch) | |
tree | aee302e3cf8b59ec2d32ec481be3d1afddfc8968 /include/hw/nubus/nubus.h | |
parent | cc668e6b7e0ffd8c9d130513d12053cf5eda1d3b (diff) |
Introduce Virtio-loopback epsilon release:
Epsilon release introduces a new compatibility layer which make virtio-loopback
design to work with QEMU and rust-vmm vhost-user backend without require any
changes.
Signed-off-by: Timos Ampelikiotis <t.ampelikiotis@virtualopensystems.com>
Change-Id: I52e57563e08a7d0bdc002f8e928ee61ba0c53dd9
Diffstat (limited to 'include/hw/nubus/nubus.h')
-rw-r--r-- | include/hw/nubus/nubus.h | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/include/hw/nubus/nubus.h b/include/hw/nubus/nubus.h new file mode 100644 index 000000000..b3b4d2ead --- /dev/null +++ b/include/hw/nubus/nubus.h @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2013-2018 Laurent Vivier <laurent@vivier.eu> + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + * + */ + +#ifndef HW_NUBUS_NUBUS_H +#define HW_NUBUS_NUBUS_H + +#include "hw/qdev-properties.h" +#include "hw/sysbus.h" +#include "exec/address-spaces.h" +#include "qom/object.h" +#include "qemu/units.h" + +#define NUBUS_SUPER_SLOT_SIZE 0x10000000U +#define NUBUS_SUPER_SLOT_NB 0xe + +#define NUBUS_SLOT_BASE (NUBUS_SUPER_SLOT_SIZE * \ + (NUBUS_SUPER_SLOT_NB + 1)) + +#define NUBUS_SLOT_SIZE 0x01000000 +#define NUBUS_FIRST_SLOT 0x0 +#define NUBUS_LAST_SLOT 0xf +#define NUBUS_SLOT_NB (NUBUS_LAST_SLOT - NUBUS_FIRST_SLOT + 1) + +#define NUBUS_IRQS 16 + +#define TYPE_NUBUS_DEVICE "nubus-device" +OBJECT_DECLARE_SIMPLE_TYPE(NubusDevice, NUBUS_DEVICE) + +#define TYPE_NUBUS_BUS "nubus-bus" +OBJECT_DECLARE_SIMPLE_TYPE(NubusBus, NUBUS_BUS) + +#define TYPE_NUBUS_BRIDGE "nubus-bridge" +OBJECT_DECLARE_SIMPLE_TYPE(NubusBridge, NUBUS_BRIDGE); + +struct NubusBus { + BusState qbus; + + AddressSpace nubus_as; + MemoryRegion nubus_mr; + + MemoryRegion super_slot_io; + MemoryRegion slot_io; + + uint16_t slot_available_mask; + + qemu_irq irqs[NUBUS_IRQS]; +}; + +#define NUBUS_DECL_ROM_MAX_SIZE (128 * KiB) + +struct NubusDevice { + DeviceState qdev; + + int32_t slot; + MemoryRegion super_slot_mem; + MemoryRegion slot_mem; + + char *romfile; + MemoryRegion decl_rom; +}; + +void nubus_set_irq(NubusDevice *nd, int level); + +struct NubusBridge { + SysBusDevice parent_obj; + + NubusBus bus; +}; + +#endif |