summary refs log tree commit diff stats
path: root/include/hw/dma/i8257.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/hw/dma/i8257.h')
-rw-r--r--include/hw/dma/i8257.h49
1 files changed, 49 insertions, 0 deletions
diff --git a/include/hw/dma/i8257.h b/include/hw/dma/i8257.h
new file mode 100644
index 0000000000..2cab50bb6c
--- /dev/null
+++ b/include/hw/dma/i8257.h
@@ -0,0 +1,49 @@
+#ifndef HW_I8257_H
+#define HW_I8257_H
+
+#include "hw/hw.h"
+#include "hw/isa/isa.h"
+#include "exec/ioport.h"
+
+#define TYPE_I8257 "i8257"
+
+typedef struct I8257Regs {
+    int now[2];
+    uint16_t base[2];
+    uint8_t mode;
+    uint8_t page;
+    uint8_t pageh;
+    uint8_t dack;
+    uint8_t eop;
+    IsaDmaTransferHandler transfer_handler;
+    void *opaque;
+} I8257Regs;
+
+typedef struct I8257State {
+    /* <private> */
+    ISADevice parent_obj;
+
+    /* <public> */
+    int32_t base;
+    int32_t page_base;
+    int32_t pageh_base;
+    int32_t dshift;
+
+    uint8_t status;
+    uint8_t command;
+    uint8_t mask;
+    uint8_t flip_flop;
+    I8257Regs regs[4];
+    MemoryRegion channel_io;
+    MemoryRegion cont_io;
+
+    QEMUBH *dma_bh;
+    bool dma_bh_scheduled;
+    int running;
+    PortioList portio_page;
+    PortioList portio_pageh;
+} I8257State;
+
+void i8257_dma_init(ISABus *bus, bool high_page_enable);
+
+#endif