1/* 2 * QEMU Macintosh floppy disk controller emulator (SWIM) 3 * 4 * Copyright (c) 2014-2018 Laurent Vivier <laurent@vivier.eu> 5 * 6 * This work is licensed under the terms of the GNU GPL, version 2. See 7 * the COPYING file in the top-level directory. 8 * 9 */ 10 11#ifndef SWIM_H 12#define SWIM_H 13 14#include "qemu/osdep.h" 15#include "hw/sysbus.h" 16 17#define SWIM_MAX_FD 2 18 19typedef struct SWIMDrive SWIMDrive; 20typedef struct SWIMBus SWIMBus; 21typedef struct SWIMCtrl SWIMCtrl; 22 23#define TYPE_SWIM_DRIVE "swim-drive" 24#define SWIM_DRIVE(obj) OBJECT_CHECK(SWIMDrive, (obj), TYPE_SWIM_DRIVE) 25 26struct SWIMDrive { 27 DeviceState qdev; 28 int32_t unit; 29 BlockConf conf; 30}; 31 32#define TYPE_SWIM_BUS "swim-bus" 33#define SWIM_BUS(obj) OBJECT_CHECK(SWIMBus, (obj), TYPE_SWIM_BUS) 34 35struct SWIMBus { 36 BusState bus; 37 struct SWIMCtrl *ctrl; 38}; 39 40typedef struct FDrive { 41 SWIMCtrl *swimctrl; 42 BlockBackend *blk; 43 BlockConf *conf; 44} FDrive; 45 46struct SWIMCtrl { 47 MemoryRegion iomem; 48 FDrive drives[SWIM_MAX_FD]; 49 int mode; 50 /* IWM mode */ 51 int iwm_switch; 52 uint16_t regs[8]; 53#define IWM_PH0 0 54#define IWM_PH1 1 55#define IWM_PH2 2 56#define IWM_PH3 3 57#define IWM_MTR 4 58#define IWM_DRIVE 5 59#define IWM_Q6 6 60#define IWM_Q7 7 61 uint8_t iwm_data; 62 uint8_t iwm_mode; 63 /* SWIM mode */ 64 uint8_t swim_phase; 65 uint8_t swim_mode; 66 SWIMBus bus; 67}; 68 69#define TYPE_SWIM "swim" 70#define SWIM(obj) OBJECT_CHECK(SWIM, (obj), TYPE_SWIM) 71 72typedef struct SWIM { 73 SysBusDevice parent_obj; 74 SWIMCtrl ctrl; 75} SWIM; 76#endif 77