mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-05 16:53:55 -06:00
hw/m68k: add Nubus support
This patch adds basic support for the NuBus bus. This is used by 680x0 Macintosh. Co-developed-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> Signed-off-by: Laurent Vivier <laurent@vivier.eu> Reviewed-by: Thomas Huth <huth@tuxfamily.org> Message-Id: <20191026164546.30020-8-laurent@vivier.eu>
This commit is contained in:
parent
87a34e2adb
commit
fa2ba3b80e
12 changed files with 509 additions and 0 deletions
24
include/hw/nubus/mac-nubus-bridge.h
Normal file
24
include/hw/nubus/mac-nubus-bridge.h
Normal file
|
@ -0,0 +1,24 @@
|
|||
/*
|
||||
* 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_MAC_H
|
||||
#define HW_NUBUS_MAC_H
|
||||
|
||||
#include "hw/nubus/nubus.h"
|
||||
|
||||
#define TYPE_MAC_NUBUS_BRIDGE "mac-nubus-bridge"
|
||||
#define MAC_NUBUS_BRIDGE(obj) OBJECT_CHECK(MacNubusState, (obj), \
|
||||
TYPE_MAC_NUBUS_BRIDGE)
|
||||
|
||||
typedef struct MacNubusState {
|
||||
SysBusDevice sysbus_dev;
|
||||
|
||||
NubusBus *bus;
|
||||
} MacNubusState;
|
||||
|
||||
#endif
|
69
include/hw/nubus/nubus.h
Normal file
69
include/hw/nubus/nubus.h
Normal file
|
@ -0,0 +1,69 @@
|
|||
/*
|
||||
* 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 "exec/address-spaces.h"
|
||||
|
||||
#define NUBUS_SUPER_SLOT_SIZE 0x10000000U
|
||||
#define NUBUS_SUPER_SLOT_NB 0x9
|
||||
|
||||
#define NUBUS_SLOT_SIZE 0x01000000
|
||||
#define NUBUS_SLOT_NB 0xF
|
||||
|
||||
#define NUBUS_FIRST_SLOT 0x9
|
||||
#define NUBUS_LAST_SLOT 0xF
|
||||
|
||||
#define TYPE_NUBUS_DEVICE "nubus-device"
|
||||
#define NUBUS_DEVICE(obj) \
|
||||
OBJECT_CHECK(NubusDevice, (obj), TYPE_NUBUS_DEVICE)
|
||||
|
||||
#define TYPE_NUBUS_BUS "nubus-bus"
|
||||
#define NUBUS_BUS(obj) OBJECT_CHECK(NubusBus, (obj), TYPE_NUBUS_BUS)
|
||||
|
||||
#define TYPE_NUBUS_BRIDGE "nubus-bridge"
|
||||
#define NUBUS_BRIDGE(obj) OBJECT_CHECK(NubusBridge, (obj), TYPE_NUBUS_BRIDGE)
|
||||
|
||||
typedef struct NubusBus {
|
||||
BusState qbus;
|
||||
|
||||
MemoryRegion super_slot_io;
|
||||
MemoryRegion slot_io;
|
||||
|
||||
int current_slot;
|
||||
} NubusBus;
|
||||
|
||||
typedef struct NubusDevice {
|
||||
DeviceState qdev;
|
||||
|
||||
int slot_nb;
|
||||
MemoryRegion slot_mem;
|
||||
|
||||
/* Format Block */
|
||||
|
||||
MemoryRegion fblock_io;
|
||||
|
||||
uint32_t rom_length;
|
||||
uint32_t rom_crc;
|
||||
uint8_t rom_rev;
|
||||
uint8_t rom_format;
|
||||
uint8_t byte_lanes;
|
||||
int32_t directory_offset;
|
||||
|
||||
/* ROM */
|
||||
|
||||
MemoryRegion rom_io;
|
||||
const uint8_t *rom;
|
||||
} NubusDevice;
|
||||
|
||||
void nubus_register_rom(NubusDevice *dev, const uint8_t *rom, uint32_t size,
|
||||
int revision, int format, uint8_t byte_lanes);
|
||||
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue