xref: /qemu/include/hw/block/swim.h (revision 2e8f72ac)
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/sysbus.h"
15 #include "qom/object.h"
16 
17 #define SWIM_MAX_FD            2
18 
19 typedef struct SWIMCtrl SWIMCtrl;
20 
21 #define TYPE_SWIM_DRIVE "swim-drive"
22 OBJECT_DECLARE_SIMPLE_TYPE(SWIMDrive, SWIM_DRIVE)
23 
24 struct SWIMDrive {
25     DeviceState qdev;
26     int32_t     unit;
27     BlockConf   conf;
28 };
29 
30 #define TYPE_SWIM_BUS "swim-bus"
31 OBJECT_DECLARE_SIMPLE_TYPE(SWIMBus, SWIM_BUS)
32 
33 struct SWIMBus {
34     BusState bus;
35     struct SWIMCtrl *ctrl;
36 };
37 
38 typedef struct FDrive {
39     SWIMCtrl *swimctrl;
40     BlockBackend *blk;
41     BlockConf *conf;
42 } FDrive;
43 
44 struct SWIMCtrl {
45     MemoryRegion iomem;
46     FDrive drives[SWIM_MAX_FD];
47     int mode;
48     /* IWM mode */
49     int iwm_switch;
50     uint16_t regs[8];
51 #define IWM_PH0   0
52 #define IWM_PH1   1
53 #define IWM_PH2   2
54 #define IWM_PH3   3
55 #define IWM_MTR   4
56 #define IWM_DRIVE 5
57 #define IWM_Q6    6
58 #define IWM_Q7    7
59     uint8_t iwm_data;
60     uint8_t iwm_mode;
61     /* SWIM mode */
62     uint8_t swim_phase;
63     uint8_t swim_mode;
64     SWIMBus bus;
65 };
66 
67 #define TYPE_SWIM "swim"
68 OBJECT_DECLARE_SIMPLE_TYPE(Swim, SWIM)
69 
70 struct Swim {
71     SysBusDevice parent_obj;
72     SWIMCtrl     ctrl;
73 };
74 #endif
75