1 /* 2 * QEMU LASI PS/2 emulation 3 * 4 * Copyright (c) 2019 Sven Schnelle 5 * 6 */ 7 8 /* 9 * QEMU interface: 10 * + sysbus MMIO region 0: MemoryRegion defining the LASI PS2 keyboard 11 * registers 12 * + sysbus MMIO region 1: MemoryRegion defining the LASI PS2 mouse 13 * registers 14 * + sysbus IRQ 0: LASI PS2 output irq 15 * + Named GPIO input "lasips2-port-input-irq[0..1]": set to 1 if the downstream 16 * LASIPS2Port has asserted its irq 17 */ 18 19 #ifndef HW_INPUT_LASIPS2_H 20 #define HW_INPUT_LASIPS2_H 21 22 #include "exec/hwaddr.h" 23 #include "hw/sysbus.h" 24 #include "hw/input/ps2.h" 25 26 #define TYPE_LASIPS2_PORT "lasips2-port" 27 OBJECT_DECLARE_TYPE(LASIPS2Port, LASIPS2PortDeviceClass, LASIPS2_PORT) 28 29 struct LASIPS2PortDeviceClass { 30 DeviceClass parent; 31 32 DeviceRealize parent_realize; 33 }; 34 35 typedef struct LASIPS2State LASIPS2State; 36 37 struct LASIPS2Port { 38 DeviceState parent_obj; 39 40 LASIPS2State *lasips2; 41 MemoryRegion reg; 42 PS2State *ps2dev; 43 uint8_t id; 44 uint8_t control; 45 uint8_t buf; 46 bool loopback_rbne; 47 qemu_irq irq; 48 }; 49 50 #define TYPE_LASIPS2_KBD_PORT "lasips2-kbd-port" 51 OBJECT_DECLARE_SIMPLE_TYPE(LASIPS2KbdPort, LASIPS2_KBD_PORT) 52 53 struct LASIPS2KbdPort { 54 LASIPS2Port parent_obj; 55 56 PS2KbdState kbd; 57 }; 58 59 #define TYPE_LASIPS2_MOUSE_PORT "lasips2-mouse-port" 60 OBJECT_DECLARE_SIMPLE_TYPE(LASIPS2MousePort, LASIPS2_MOUSE_PORT) 61 62 struct LASIPS2MousePort { 63 LASIPS2Port parent_obj; 64 65 PS2MouseState mouse; 66 }; 67 68 struct LASIPS2State { 69 SysBusDevice parent_obj; 70 71 LASIPS2KbdPort kbd_port; 72 LASIPS2MousePort mouse_port; 73 uint8_t int_status; 74 qemu_irq irq; 75 }; 76 77 #define TYPE_LASIPS2 "lasips2" 78 OBJECT_DECLARE_SIMPLE_TYPE(LASIPS2State, LASIPS2) 79 80 #endif /* HW_INPUT_LASIPS2_H */ 81