1cb9c377fSPaolo Bonzini #ifndef HW_ESCC_H 2175de524SMarkus Armbruster #define HW_ESCC_H 3cb9c377fSPaolo Bonzini 42cc75c32SLaurent Vivier #include "chardev/char-fe.h" 52cc75c32SLaurent Vivier #include "chardev/char-serial.h" 6*ec150c7eSMarkus Armbruster #include "hw/sysbus.h" 72cc75c32SLaurent Vivier #include "ui/input.h" 82cc75c32SLaurent Vivier 9b4ed08e0Sblueswir1 /* escc.c */ 1081069b20SAndreas Färber #define TYPE_ESCC "escc" 11b4ed08e0Sblueswir1 #define ESCC_SIZE 4 12b4ed08e0Sblueswir1 132cc75c32SLaurent Vivier #define ESCC(obj) OBJECT_CHECK(ESCCState, (obj), TYPE_ESCC) 142cc75c32SLaurent Vivier 152cc75c32SLaurent Vivier typedef enum { 162cc75c32SLaurent Vivier escc_chn_a, escc_chn_b, 172cc75c32SLaurent Vivier } ESCCChnID; 182cc75c32SLaurent Vivier 192cc75c32SLaurent Vivier typedef enum { 202cc75c32SLaurent Vivier escc_serial, escc_kbd, escc_mouse, 212cc75c32SLaurent Vivier } ESCCChnType; 222cc75c32SLaurent Vivier 232cc75c32SLaurent Vivier #define ESCC_SERIO_QUEUE_SIZE 256 242cc75c32SLaurent Vivier 252cc75c32SLaurent Vivier typedef struct { 262cc75c32SLaurent Vivier uint8_t data[ESCC_SERIO_QUEUE_SIZE]; 272cc75c32SLaurent Vivier int rptr, wptr, count; 282cc75c32SLaurent Vivier } ESCCSERIOQueue; 292cc75c32SLaurent Vivier 302cc75c32SLaurent Vivier #define ESCC_SERIAL_REGS 16 312cc75c32SLaurent Vivier typedef struct ESCCChannelState { 322cc75c32SLaurent Vivier qemu_irq irq; 332cc75c32SLaurent Vivier uint32_t rxint, txint, rxint_under_svc, txint_under_svc; 342cc75c32SLaurent Vivier struct ESCCChannelState *otherchn; 352cc75c32SLaurent Vivier uint32_t reg; 362cc75c32SLaurent Vivier uint8_t wregs[ESCC_SERIAL_REGS], rregs[ESCC_SERIAL_REGS]; 372cc75c32SLaurent Vivier ESCCSERIOQueue queue; 382cc75c32SLaurent Vivier CharBackend chr; 392cc75c32SLaurent Vivier int e0_mode, led_mode, caps_lock_mode, num_lock_mode; 402cc75c32SLaurent Vivier int disabled; 412cc75c32SLaurent Vivier int clock; 422cc75c32SLaurent Vivier uint32_t vmstate_dummy; 432cc75c32SLaurent Vivier ESCCChnID chn; /* this channel, A (base+4) or B (base+0) */ 442cc75c32SLaurent Vivier ESCCChnType type; 452cc75c32SLaurent Vivier uint8_t rx, tx; 462cc75c32SLaurent Vivier QemuInputHandlerState *hs; 472cc75c32SLaurent Vivier } ESCCChannelState; 482cc75c32SLaurent Vivier 492cc75c32SLaurent Vivier typedef struct ESCCState { 502cc75c32SLaurent Vivier SysBusDevice parent_obj; 512cc75c32SLaurent Vivier 522cc75c32SLaurent Vivier struct ESCCChannelState chn[2]; 532cc75c32SLaurent Vivier uint32_t it_shift; 542cc75c32SLaurent Vivier MemoryRegion mmio; 552cc75c32SLaurent Vivier uint32_t disabled; 562cc75c32SLaurent Vivier uint32_t frequency; 572cc75c32SLaurent Vivier } ESCCState; 58cb9c377fSPaolo Bonzini 59cb9c377fSPaolo Bonzini #endif 60