1 #ifndef HW_ESCC_H 2 #define HW_ESCC_H 3 4 #include "chardev/char-fe.h" 5 #include "chardev/char-serial.h" 6 #include "hw/sysbus.h" 7 #include "ui/input.h" 8 #include "qom/object.h" 9 10 /* escc.c */ 11 #define TYPE_ESCC "escc" 12 #define ESCC_SIZE 4 13 14 OBJECT_DECLARE_SIMPLE_TYPE(ESCCState, ESCC) 15 16 typedef enum { 17 escc_chn_a, escc_chn_b, 18 } ESCCChnID; 19 20 typedef enum { 21 escc_serial, escc_kbd, escc_mouse, 22 } ESCCChnType; 23 24 #define ESCC_SERIO_QUEUE_SIZE 256 25 26 typedef struct { 27 uint8_t data[ESCC_SERIO_QUEUE_SIZE]; 28 int rptr, wptr, count; 29 } ESCCSERIOQueue; 30 31 #define ESCC_SERIAL_REGS 16 32 typedef struct ESCCChannelState { 33 qemu_irq irq; 34 uint32_t rxint, txint, rxint_under_svc, txint_under_svc; 35 struct ESCCChannelState *otherchn; 36 uint32_t reg; 37 uint8_t wregs[ESCC_SERIAL_REGS], rregs[ESCC_SERIAL_REGS]; 38 ESCCSERIOQueue queue; 39 CharBackend chr; 40 int e0_mode, led_mode, caps_lock_mode, num_lock_mode; 41 int disabled; 42 int clock; 43 uint32_t vmstate_dummy; 44 ESCCChnID chn; /* this channel, A (base+4) or B (base+0) */ 45 ESCCChnType type; 46 uint8_t rx, tx; 47 QemuInputHandlerState *hs; 48 char *sunkbd_layout; 49 } ESCCChannelState; 50 51 struct ESCCState { 52 SysBusDevice parent_obj; 53 54 struct ESCCChannelState chn[2]; 55 uint32_t it_shift; 56 bool bit_swap; 57 MemoryRegion mmio; 58 uint32_t disabled; 59 uint32_t frequency; 60 }; 61 62 #endif 63