master
h 50 lines 959 Bytes
Raw
1 #ifndef HW_I8257_H
2 #define HW_I8257_H
3
4 #include "hw/isa/isa.h"
5 #include "system/ioport.h"
6 #include "qom/object.h"
7
8 #define TYPE_I8257 "i8257"
9 OBJECT_DECLARE_SIMPLE_TYPE(I8257State, I8257)
10
11 typedef struct I8257Regs {
12 int now[2];
13 uint16_t base[2];
14 uint8_t mode;
15 uint8_t page;
16 uint8_t pageh;
17 uint8_t dack;
18 uint8_t eop;
19 IsaDmaTransferHandler transfer_handler;
20 void *opaque;
21 } I8257Regs;
22
23 struct I8257State {
24 /* <private> */
25 ISADevice parent_obj;
26
27 /* <public> */
28 int32_t base;
29 int32_t page_base;
30 int32_t pageh_base;
31 int32_t dshift;
32
33 uint8_t status;
34 uint8_t command;
35 uint8_t mask;
36 uint8_t flip_flop;
37 I8257Regs regs[4];
38 MemoryRegion channel_io;
39 MemoryRegion cont_io;
40
41 QEMUBH *dma_bh;
42 bool dma_bh_scheduled;
43 int running;
44 PortioList portio_page;
45 PortioList portio_pageh;
46 };
47
48 void i8257_dma_init(Object *parent, ISABus *bus, bool high_page_enable);
49
50 #endif