xref: /qemu/include/hw/block/swim.h (revision 994af0b2)
1c701ec62SLaurent Vivier /*
2c701ec62SLaurent Vivier  * QEMU Macintosh floppy disk controller emulator (SWIM)
3c701ec62SLaurent Vivier  *
4c701ec62SLaurent Vivier  * Copyright (c) 2014-2018 Laurent Vivier <laurent@vivier.eu>
5c701ec62SLaurent Vivier  *
6c701ec62SLaurent Vivier  * This work is licensed under the terms of the GNU GPL, version 2.  See
7c701ec62SLaurent Vivier  * the COPYING file in the top-level directory.
8c701ec62SLaurent Vivier  *
9c701ec62SLaurent Vivier  */
10c701ec62SLaurent Vivier 
11c701ec62SLaurent Vivier #ifndef SWIM_H
12c701ec62SLaurent Vivier #define SWIM_H
13c701ec62SLaurent Vivier 
1482651e87SMarkus Armbruster #include "hw/block/block.h"
15c701ec62SLaurent Vivier #include "hw/sysbus.h"
16db1015e9SEduardo Habkost #include "qom/object.h"
17c701ec62SLaurent Vivier 
18c701ec62SLaurent Vivier #define SWIM_MAX_FD            2
19c701ec62SLaurent Vivier 
20c701ec62SLaurent Vivier typedef struct SWIMCtrl SWIMCtrl;
21c701ec62SLaurent Vivier 
22c701ec62SLaurent Vivier #define TYPE_SWIM_DRIVE "swim-drive"
238063396bSEduardo Habkost OBJECT_DECLARE_SIMPLE_TYPE(SWIMDrive, SWIM_DRIVE)
24c701ec62SLaurent Vivier 
25c701ec62SLaurent Vivier struct SWIMDrive {
26c701ec62SLaurent Vivier     DeviceState qdev;
27c701ec62SLaurent Vivier     int32_t     unit;
28c701ec62SLaurent Vivier     BlockConf   conf;
29c701ec62SLaurent Vivier };
30c701ec62SLaurent Vivier 
31c701ec62SLaurent Vivier #define TYPE_SWIM_BUS "swim-bus"
328063396bSEduardo Habkost OBJECT_DECLARE_SIMPLE_TYPE(SWIMBus, SWIM_BUS)
33c701ec62SLaurent Vivier 
34c701ec62SLaurent Vivier struct SWIMBus {
35c701ec62SLaurent Vivier     BusState bus;
36c701ec62SLaurent Vivier     struct SWIMCtrl *ctrl;
37c701ec62SLaurent Vivier };
38c701ec62SLaurent Vivier 
39c701ec62SLaurent Vivier typedef struct FDrive {
40c701ec62SLaurent Vivier     SWIMCtrl *swimctrl;
41c701ec62SLaurent Vivier     BlockBackend *blk;
42c701ec62SLaurent Vivier     BlockConf *conf;
43c701ec62SLaurent Vivier } FDrive;
44c701ec62SLaurent Vivier 
45c701ec62SLaurent Vivier struct SWIMCtrl {
4657004204SMark Cave-Ayland     MemoryRegion swim;
4757004204SMark Cave-Ayland     MemoryRegion iwm;
4857004204SMark Cave-Ayland     MemoryRegion ism;
49c701ec62SLaurent Vivier     FDrive drives[SWIM_MAX_FD];
50c701ec62SLaurent Vivier     int mode;
51c701ec62SLaurent Vivier     /* IWM mode */
52c701ec62SLaurent Vivier     int iwm_switch;
53994af0b2SMark Cave-Ayland     uint8_t iwm_latches;
54994af0b2SMark Cave-Ayland     uint8_t iwmregs[8];
55c701ec62SLaurent Vivier     /* SWIM mode */
5657004204SMark Cave-Ayland     uint8_t ismregs[16];
57c701ec62SLaurent Vivier     uint8_t swim_phase;
58c701ec62SLaurent Vivier     uint8_t swim_mode;
59994af0b2SMark Cave-Ayland     uint8_t swim_status;
60994af0b2SMark Cave-Ayland     uint8_t pram[16];
61994af0b2SMark Cave-Ayland     uint8_t pram_idx;
62c701ec62SLaurent Vivier     SWIMBus bus;
63c701ec62SLaurent Vivier };
64c701ec62SLaurent Vivier 
65c701ec62SLaurent Vivier #define TYPE_SWIM "swim"
668063396bSEduardo Habkost OBJECT_DECLARE_SIMPLE_TYPE(Swim, SWIM)
67c701ec62SLaurent Vivier 
68db1015e9SEduardo Habkost struct Swim {
69c701ec62SLaurent Vivier     SysBusDevice parent_obj;
70c701ec62SLaurent Vivier     SWIMCtrl     ctrl;
71db1015e9SEduardo Habkost };
72c701ec62SLaurent Vivier #endif
73