xref: /qemu/include/hw/nubus/nubus.h (revision d585d89de172bbfaa4a2331c882c46ed186ede2a)
1fa2ba3b8SLaurent Vivier /*
2fa2ba3b8SLaurent Vivier  * Copyright (c) 2013-2018 Laurent Vivier <laurent@vivier.eu>
3fa2ba3b8SLaurent Vivier  *
4fa2ba3b8SLaurent Vivier  * This work is licensed under the terms of the GNU GPL, version 2 or later.
5fa2ba3b8SLaurent Vivier  * See the COPYING file in the top-level directory.
6fa2ba3b8SLaurent Vivier  *
7fa2ba3b8SLaurent Vivier  */
8fa2ba3b8SLaurent Vivier 
9fa2ba3b8SLaurent Vivier #ifndef HW_NUBUS_NUBUS_H
10fa2ba3b8SLaurent Vivier #define HW_NUBUS_NUBUS_H
11fa2ba3b8SLaurent Vivier 
12fa2ba3b8SLaurent Vivier #include "hw/qdev-properties.h"
139bf674bcSMark Cave-Ayland #include "hw/sysbus.h"
14fa2ba3b8SLaurent Vivier #include "exec/address-spaces.h"
15db1015e9SEduardo Habkost #include "qom/object.h"
163616f424SMark Cave-Ayland #include "qemu/units.h"
17fa2ba3b8SLaurent Vivier 
18fa2ba3b8SLaurent Vivier #define NUBUS_SUPER_SLOT_SIZE 0x10000000U
1903deab99SMark Cave-Ayland #define NUBUS_SUPER_SLOT_NB   0xe
20fa2ba3b8SLaurent Vivier 
2162437f90SMark Cave-Ayland #define NUBUS_SLOT_BASE       (NUBUS_SUPER_SLOT_SIZE * \
2262437f90SMark Cave-Ayland                                (NUBUS_SUPER_SLOT_NB + 1))
2362437f90SMark Cave-Ayland 
24fa2ba3b8SLaurent Vivier #define NUBUS_SLOT_SIZE       0x01000000
2503deab99SMark Cave-Ayland #define NUBUS_FIRST_SLOT      0x0
2603deab99SMark Cave-Ayland #define NUBUS_LAST_SLOT       0xf
2703deab99SMark Cave-Ayland #define NUBUS_SLOT_NB         (NUBUS_LAST_SLOT - NUBUS_FIRST_SLOT + 1)
28fa2ba3b8SLaurent Vivier 
29fa2ba3b8SLaurent Vivier #define TYPE_NUBUS_DEVICE "nubus-device"
308063396bSEduardo Habkost OBJECT_DECLARE_SIMPLE_TYPE(NubusDevice, NUBUS_DEVICE)
31fa2ba3b8SLaurent Vivier 
32fa2ba3b8SLaurent Vivier #define TYPE_NUBUS_BUS "nubus-bus"
338063396bSEduardo Habkost OBJECT_DECLARE_SIMPLE_TYPE(NubusBus, NUBUS_BUS)
34fa2ba3b8SLaurent Vivier 
35fa2ba3b8SLaurent Vivier #define TYPE_NUBUS_BRIDGE "nubus-bridge"
369bf674bcSMark Cave-Ayland OBJECT_DECLARE_SIMPLE_TYPE(NubusBridge, NUBUS_BRIDGE);
37fa2ba3b8SLaurent Vivier 
38db1015e9SEduardo Habkost struct NubusBus {
39fa2ba3b8SLaurent Vivier     BusState qbus;
40fa2ba3b8SLaurent Vivier 
4162437f90SMark Cave-Ayland     AddressSpace nubus_as;
4262437f90SMark Cave-Ayland     MemoryRegion nubus_mr;
4362437f90SMark Cave-Ayland 
44fa2ba3b8SLaurent Vivier     MemoryRegion super_slot_io;
45fa2ba3b8SLaurent Vivier     MemoryRegion slot_io;
46fa2ba3b8SLaurent Vivier 
4703deab99SMark Cave-Ayland     uint16_t slot_available_mask;
48db1015e9SEduardo Habkost };
49fa2ba3b8SLaurent Vivier 
503616f424SMark Cave-Ayland #define NUBUS_DECL_ROM_MAX_SIZE    (128 * KiB)
513616f424SMark Cave-Ayland 
52db1015e9SEduardo Habkost struct NubusDevice {
53fa2ba3b8SLaurent Vivier     DeviceState qdev;
54fa2ba3b8SLaurent Vivier 
5503deab99SMark Cave-Ayland     int32_t slot;
5690be1deaSMark Cave-Ayland     MemoryRegion super_slot_mem;
57fa2ba3b8SLaurent Vivier     MemoryRegion slot_mem;
583616f424SMark Cave-Ayland 
593616f424SMark Cave-Ayland     char *romfile;
603616f424SMark Cave-Ayland     MemoryRegion decl_rom;
61db1015e9SEduardo Habkost };
62fa2ba3b8SLaurent Vivier 
639bf674bcSMark Cave-Ayland struct NubusBridge {
649bf674bcSMark Cave-Ayland     SysBusDevice parent_obj;
651fa04232SMark Cave-Ayland 
66*d585d89dSMark Cave-Ayland     NubusBus bus;
679bf674bcSMark Cave-Ayland };
689bf674bcSMark Cave-Ayland 
69fa2ba3b8SLaurent Vivier #endif
70