xref: /qemu/include/hw/nubus/nubus.h (revision 8e8616f3)
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 
29d2cf28a0SMark Cave-Ayland #define NUBUS_IRQS            16
30d2cf28a0SMark Cave-Ayland 
31fa2ba3b8SLaurent Vivier #define TYPE_NUBUS_DEVICE "nubus-device"
328063396bSEduardo Habkost OBJECT_DECLARE_SIMPLE_TYPE(NubusDevice, NUBUS_DEVICE)
33fa2ba3b8SLaurent Vivier 
34fa2ba3b8SLaurent Vivier #define TYPE_NUBUS_BUS "nubus-bus"
358063396bSEduardo Habkost OBJECT_DECLARE_SIMPLE_TYPE(NubusBus, NUBUS_BUS)
36fa2ba3b8SLaurent Vivier 
37fa2ba3b8SLaurent Vivier #define TYPE_NUBUS_BRIDGE "nubus-bridge"
389bf674bcSMark Cave-Ayland OBJECT_DECLARE_SIMPLE_TYPE(NubusBridge, NUBUS_BRIDGE);
39fa2ba3b8SLaurent Vivier 
40db1015e9SEduardo Habkost struct NubusBus {
41fa2ba3b8SLaurent Vivier     BusState qbus;
42fa2ba3b8SLaurent Vivier 
4362437f90SMark Cave-Ayland     AddressSpace nubus_as;
4462437f90SMark Cave-Ayland     MemoryRegion nubus_mr;
4562437f90SMark Cave-Ayland 
46fa2ba3b8SLaurent Vivier     MemoryRegion super_slot_io;
47fa2ba3b8SLaurent Vivier     MemoryRegion slot_io;
48fa2ba3b8SLaurent Vivier 
4903deab99SMark Cave-Ayland     uint16_t slot_available_mask;
50d2cf28a0SMark Cave-Ayland 
51d2cf28a0SMark Cave-Ayland     qemu_irq irqs[NUBUS_IRQS];
52db1015e9SEduardo Habkost };
53fa2ba3b8SLaurent Vivier 
54*8e8616f3SMark Cave-Ayland #define NUBUS_DECL_ROM_MAX_SIZE    (1 * MiB)
553616f424SMark Cave-Ayland 
56db1015e9SEduardo Habkost struct NubusDevice {
57fa2ba3b8SLaurent Vivier     DeviceState qdev;
58fa2ba3b8SLaurent Vivier 
5903deab99SMark Cave-Ayland     int32_t slot;
6090be1deaSMark Cave-Ayland     MemoryRegion super_slot_mem;
61fa2ba3b8SLaurent Vivier     MemoryRegion slot_mem;
623616f424SMark Cave-Ayland 
633616f424SMark Cave-Ayland     char *romfile;
643616f424SMark Cave-Ayland     MemoryRegion decl_rom;
65db1015e9SEduardo Habkost };
66fa2ba3b8SLaurent Vivier 
67d2cf28a0SMark Cave-Ayland void nubus_set_irq(NubusDevice *nd, int level);
68d2cf28a0SMark Cave-Ayland 
699bf674bcSMark Cave-Ayland struct NubusBridge {
709bf674bcSMark Cave-Ayland     SysBusDevice parent_obj;
711fa04232SMark Cave-Ayland 
72d585d89dSMark Cave-Ayland     NubusBus bus;
739bf674bcSMark Cave-Ayland };
749bf674bcSMark Cave-Ayland 
75fa2ba3b8SLaurent Vivier #endif
76