1 #ifndef HW_I8257_H 2 #define HW_I8257_H 3 4 #include "hw/isa/isa.h" 5 #include "exec/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 51