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" 27OBJECT_DECLARE_TYPE(LASIPS2Port, LASIPS2PortDeviceClass, LASIPS2_PORT) 28 29struct LASIPS2PortDeviceClass { 30 DeviceClass parent; 31 32 DeviceRealize parent_realize; 33}; 34 35typedef struct LASIPS2State LASIPS2State; 36 37struct 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" 51OBJECT_DECLARE_SIMPLE_TYPE(LASIPS2KbdPort, LASIPS2_KBD_PORT) 52 53struct LASIPS2KbdPort { 54 LASIPS2Port parent_obj; 55 56 PS2KbdState kbd; 57}; 58 59#define TYPE_LASIPS2_MOUSE_PORT "lasips2-mouse-port" 60OBJECT_DECLARE_SIMPLE_TYPE(LASIPS2MousePort, LASIPS2_MOUSE_PORT) 61 62struct LASIPS2MousePort { 63 LASIPS2Port parent_obj; 64 65 PS2MouseState mouse; 66}; 67 68struct 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" 78OBJECT_DECLARE_SIMPLE_TYPE(LASIPS2State, LASIPS2) 79 80#endif /* HW_INPUT_LASIPS2_H */ 81