/* * QEMU LASI PS/2 emulation * * Copyright (c) 2019 Sven Schnelle * */ /* * QEMU interface: * + sysbus MMIO region 0: MemoryRegion defining the LASI PS2 keyboard * registers * + sysbus MMIO region 1: MemoryRegion defining the LASI PS2 mouse * registers * + sysbus IRQ 0: LASI PS2 output irq * + Named GPIO input "lasips2-port-input-irq[0..1]": set to 1 if the downstream * LASIPS2Port has asserted its irq */ #ifndef HW_INPUT_LASIPS2_H #define HW_INPUT_LASIPS2_H #include "exec/hwaddr.h" #include "hw/sysbus.h" #include "hw/input/ps2.h" #define TYPE_LASIPS2_PORT "lasips2-port" OBJECT_DECLARE_TYPE(LASIPS2Port, LASIPS2PortDeviceClass, LASIPS2_PORT) struct LASIPS2PortDeviceClass { DeviceClass parent; DeviceRealize parent_realize; }; typedef struct LASIPS2State LASIPS2State; struct LASIPS2Port { DeviceState parent_obj; LASIPS2State *lasips2; MemoryRegion reg; PS2State *ps2dev; uint8_t id; uint8_t control; uint8_t buf; bool loopback_rbne; qemu_irq irq; }; #define TYPE_LASIPS2_KBD_PORT "lasips2-kbd-port" OBJECT_DECLARE_SIMPLE_TYPE(LASIPS2KbdPort, LASIPS2_KBD_PORT) struct LASIPS2KbdPort { LASIPS2Port parent_obj; PS2KbdState kbd; }; #define TYPE_LASIPS2_MOUSE_PORT "lasips2-mouse-port" OBJECT_DECLARE_SIMPLE_TYPE(LASIPS2MousePort, LASIPS2_MOUSE_PORT) struct LASIPS2MousePort { LASIPS2Port parent_obj; PS2MouseState mouse; }; struct LASIPS2State { SysBusDevice parent_obj; LASIPS2KbdPort kbd_port; LASIPS2MousePort mouse_port; uint8_t int_status; qemu_irq irq; }; #define TYPE_LASIPS2 "lasips2" OBJECT_DECLARE_SIMPLE_TYPE(LASIPS2State, LASIPS2) #endif /* HW_INPUT_LASIPS2_H */