/* * QEMU Macintosh floppy disk controller emulator (SWIM) * * Copyright (c) 2014-2018 Laurent Vivier * * This work is licensed under the terms of the GNU GPL, version 2. See * the COPYING file in the top-level directory. * */ #ifndef SWIM_H #define SWIM_H #include "hw/block/block.h" #include "hw/sysbus.h" #include "qom/object.h" #define SWIM_MAX_FD 2 typedef struct SWIMCtrl SWIMCtrl; #define TYPE_SWIM_DRIVE "swim-drive" OBJECT_DECLARE_SIMPLE_TYPE(SWIMDrive, SWIM_DRIVE) struct SWIMDrive { DeviceState qdev; int32_t unit; BlockConf conf; }; #define TYPE_SWIM_BUS "swim-bus" OBJECT_DECLARE_SIMPLE_TYPE(SWIMBus, SWIM_BUS) struct SWIMBus { BusState bus; struct SWIMCtrl *ctrl; }; typedef struct FDrive { SWIMCtrl *swimctrl; BlockBackend *blk; BlockConf *conf; } FDrive; struct SWIMCtrl { MemoryRegion swim; MemoryRegion iwm; MemoryRegion ism; FDrive drives[SWIM_MAX_FD]; int mode; /* IWM mode */ int iwm_switch; uint8_t iwm_latches; uint8_t iwmregs[8]; /* SWIM mode */ uint8_t ismregs[16]; uint8_t swim_phase; uint8_t swim_mode; uint8_t swim_status; uint8_t pram[16]; uint8_t pram_idx; SWIMBus bus; }; #define TYPE_SWIM "swim" OBJECT_DECLARE_SIMPLE_TYPE(Swim, SWIM) struct Swim { SysBusDevice parent_obj; SWIMCtrl ctrl; }; #endif