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