diff options
author | Peter Maydell <peter.maydell@linaro.org> | 2021-09-29 21:20:49 +0100 |
---|---|---|
committer | Peter Maydell <peter.maydell@linaro.org> | 2021-09-29 21:20:49 +0100 |
commit | ba0fa56bc06e563de68d2a2bf3ddb0cfea1be4f9 (patch) | |
tree | f372601cb841998f8edaf70a1da571190ca59210 /include/hw/nubus/nubus.h | |
parent | 6b54a31bf7b403672a798b6443b1930ae6c74dea (diff) | |
parent | 5ef251416b5116bbf7723f31ddf8a6949a2ac271 (diff) | |
download | qemu-ba0fa56bc06e563de68d2a2bf3ddb0cfea1be4f9.zip qemu-ba0fa56bc06e563de68d2a2bf3ddb0cfea1be4f9.tar.gz qemu-ba0fa56bc06e563de68d2a2bf3ddb0cfea1be4f9.tar.bz2 |
Merge remote-tracking branch 'remotes/vivier/tags/q800-for-6.2-pull-request' into staging
Q800 Pull request 20210929
NuBus cleanup and improvement
# gpg: Signature made Wed 29 Sep 2021 10:27:51 BST
# gpg: using RSA key CD2F75DDC8E3A4DC2E4F5173F30C38BD3F2FBE3C
# gpg: issuer "laurent@vivier.eu"
# gpg: Good signature from "Laurent Vivier <lvivier@redhat.com>" [full]
# gpg: aka "Laurent Vivier <laurent@vivier.eu>" [full]
# gpg: aka "Laurent Vivier (Red Hat) <lvivier@redhat.com>" [full]
# Primary key fingerprint: CD2F 75DD C8E3 A4DC 2E4F 5173 F30C 38BD 3F2F BE3C
* remotes/vivier/tags/q800-for-6.2-pull-request:
q800: configure nubus available slots for Quadra 800
q800: wire up nubus IRQs
nubus: add support for slot IRQs
nubus-bridge: make slot_available_mask a qdev property
nubus-bridge: embed the NubusBus object directly within nubus-bridge
nubus: move NubusBus from mac-nubus-bridge to nubus-bridge
mac-nubus-bridge: rename MacNubusState to MacNubusBridge
nubus-bridge: introduce separate NubusBridge structure
nubus: move nubus to its own 32-bit address space
nubus-device: add romfile property for loading declaration ROMs
nubus-device: remove nubus_register_rom() and nubus_register_format_block()
macfb: don't register declaration ROM
nubus: generate bus error when attempting to access empty slots
nubus: add trace-events for empty slot accesses
nubus: implement BusClass get_dev_path()
nubus: move slot bitmap checks from NubusDevice realize() to BusClass check_address()
nubus: use bitmap to manage available slots
nubus-device: expose separate super slot memory region
nubus-device: rename slot_nb variable to slot
nubus: add comment indicating reference documents
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'include/hw/nubus/nubus.h')
-rw-r--r-- | include/hw/nubus/nubus.h | 49 |
1 files changed, 28 insertions, 21 deletions
diff --git a/include/hw/nubus/nubus.h b/include/hw/nubus/nubus.h index e2b5cf2..b3b4d2e 100644 --- a/include/hw/nubus/nubus.h +++ b/include/hw/nubus/nubus.h @@ -10,17 +10,23 @@ #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 0x9 +#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_SLOT_NB 0xF +#define NUBUS_FIRST_SLOT 0x0 +#define NUBUS_LAST_SLOT 0xf +#define NUBUS_SLOT_NB (NUBUS_LAST_SLOT - NUBUS_FIRST_SLOT + 1) -#define NUBUS_FIRST_SLOT 0x9 -#define NUBUS_LAST_SLOT 0xF +#define NUBUS_IRQS 16 #define TYPE_NUBUS_DEVICE "nubus-device" OBJECT_DECLARE_SIMPLE_TYPE(NubusDevice, NUBUS_DEVICE) @@ -29,40 +35,41 @@ OBJECT_DECLARE_SIMPLE_TYPE(NubusDevice, NUBUS_DEVICE) 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; - int current_slot; + uint16_t slot_available_mask; + + qemu_irq irqs[NUBUS_IRQS]; }; +#define NUBUS_DECL_ROM_MAX_SIZE (128 * KiB) + struct NubusDevice { DeviceState qdev; - int slot_nb; + int32_t slot; + MemoryRegion super_slot_mem; MemoryRegion slot_mem; - /* Format Block */ - - MemoryRegion fblock_io; + char *romfile; + MemoryRegion decl_rom; +}; - uint32_t rom_length; - uint32_t rom_crc; - uint8_t rom_rev; - uint8_t rom_format; - uint8_t byte_lanes; - int32_t directory_offset; +void nubus_set_irq(NubusDevice *nd, int level); - /* ROM */ +struct NubusBridge { + SysBusDevice parent_obj; - MemoryRegion rom_io; - const uint8_t *rom; + NubusBus bus; }; -void nubus_register_rom(NubusDevice *dev, const uint8_t *rom, uint32_t size, - int revision, int format, uint8_t byte_lanes); - #endif |