#ifndef HW_ESCC_H #define HW_ESCC_H #include "chardev/char-fe.h" #include "chardev/char-serial.h" #include "hw/sysbus.h" #include "ui/input.h" #include "qom/object.h" /* escc.c */ #define TYPE_ESCC "escc" #define ESCC_SIZE 4 typedef struct ESCCState ESCCState; DECLARE_INSTANCE_CHECKER(ESCCState, ESCC, TYPE_ESCC) typedef enum { escc_chn_a, escc_chn_b, } ESCCChnID; typedef enum { escc_serial, escc_kbd, escc_mouse, } ESCCChnType; #define ESCC_SERIO_QUEUE_SIZE 256 typedef struct { uint8_t data[ESCC_SERIO_QUEUE_SIZE]; int rptr, wptr, count; } ESCCSERIOQueue; #define ESCC_SERIAL_REGS 16 typedef struct ESCCChannelState { qemu_irq irq; uint32_t rxint, txint, rxint_under_svc, txint_under_svc; struct ESCCChannelState *otherchn; uint32_t reg; uint8_t wregs[ESCC_SERIAL_REGS], rregs[ESCC_SERIAL_REGS]; ESCCSERIOQueue queue; CharBackend chr; int e0_mode, led_mode, caps_lock_mode, num_lock_mode; int disabled; int clock; uint32_t vmstate_dummy; ESCCChnID chn; /* this channel, A (base+4) or B (base+0) */ ESCCChnType type; uint8_t rx, tx; QemuInputHandlerState *hs; } ESCCChannelState; struct ESCCState { SysBusDevice parent_obj; struct ESCCChannelState chn[2]; uint32_t it_shift; bool bit_swap; MemoryRegion mmio; uint32_t disabled; uint32_t frequency; }; #endif