| 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 "hw/block/block.h" |
| 15 | #include "hw/core/sysbus.h" |
| 16 | #include "qom/object.h" |
| 17 | |
| 18 | #define SWIM_MAX_FD 2 |
| 19 | |
| 20 | typedef struct SWIMCtrl SWIMCtrl; |
| 21 | |
| 22 | #define TYPE_SWIM_DRIVE "swim-drive" |
| 23 | OBJECT_DECLARE_SIMPLE_TYPE(SWIMDrive, SWIM_DRIVE) |
| 24 | |
| 25 | struct SWIMDrive { |
| 26 | DeviceState qdev; |
| 27 | int32_t unit; |
| 28 | BlockConf conf; |
| 29 | }; |
| 30 | |
| 31 | #define TYPE_SWIM_BUS "swim-bus" |
| 32 | OBJECT_DECLARE_SIMPLE_TYPE(SWIMBus, SWIM_BUS) |
| 33 | |
| 34 | struct SWIMBus { |
| 35 | BusState bus; |
| 36 | struct SWIMCtrl *ctrl; |
| 37 | }; |
| 38 | |
| 39 | typedef struct FDrive { |
| 40 | SWIMCtrl *swimctrl; |
| 41 | BlockBackend *blk; |
| 42 | BlockConf *conf; |
| 43 | } FDrive; |
| 44 | |
| 45 | struct SWIMCtrl { |
| 46 | MemoryRegion swim; |
| 47 | MemoryRegion iwm; |
| 48 | MemoryRegion ism; |
| 49 | FDrive drives[SWIM_MAX_FD]; |
| 50 | int mode; |
| 51 | /* IWM mode */ |
| 52 | int iwm_switch; |
| 53 | uint8_t iwm_latches; |
| 54 | uint8_t iwmregs[8]; |
| 55 | /* SWIM mode */ |
| 56 | uint8_t ismregs[16]; |
| 57 | uint8_t swim_phase; |
| 58 | uint8_t swim_mode; |
| 59 | uint8_t swim_status; |
| 60 | uint8_t pram[16]; |
| 61 | uint8_t pram_idx; |
| 62 | SWIMBus bus; |
| 63 | }; |
| 64 | |
| 65 | #define TYPE_SWIM "swim" |
| 66 | OBJECT_DECLARE_SIMPLE_TYPE(Swim, SWIM) |
| 67 | |
| 68 | struct Swim { |
| 69 | SysBusDevice parent_obj; |
| 70 | SWIMCtrl ctrl; |
| 71 | }; |
| 72 | #endif |