]> git.proxmox.com Git - mirror_qemu.git/blob - include/hw/block/swim.h
Merge tag 'pull-shadow-2023-10-06' of https://repo.or.cz/qemu/armbru into staging
[mirror_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/block/block.h"
15 #include "hw/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 iomem;
47 FDrive drives[SWIM_MAX_FD];
48 int mode;
49 /* IWM mode */
50 int iwm_switch;
51 uint16_t regs[8];
52 #define IWM_PH0 0
53 #define IWM_PH1 1
54 #define IWM_PH2 2
55 #define IWM_PH3 3
56 #define IWM_MTR 4
57 #define IWM_DRIVE 5
58 #define IWM_Q6 6
59 #define IWM_Q7 7
60 uint8_t iwm_data;
61 uint8_t iwm_mode;
62 /* SWIM mode */
63 uint8_t swim_phase;
64 uint8_t swim_mode;
65 SWIMBus bus;
66 };
67
68 #define TYPE_SWIM "swim"
69 OBJECT_DECLARE_SIMPLE_TYPE(Swim, SWIM)
70
71 struct Swim {
72 SysBusDevice parent_obj;
73 SWIMCtrl ctrl;
74 };
75 #endif