Merge remote-tracking branch 'remotes/dagrh/tags/pull-virtiofs-20211026' into staging
[qemu.git] / include / hw / block / swim.h
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