12a6505b0SSven Schnelle /* 22a6505b0SSven Schnelle * QEMU LASI PS/2 emulation 32a6505b0SSven Schnelle * 42a6505b0SSven Schnelle * Copyright (c) 2019 Sven Schnelle 52a6505b0SSven Schnelle * 62a6505b0SSven Schnelle */ 7501f062eSMark Cave-Ayland 8501f062eSMark Cave-Ayland /* 9501f062eSMark Cave-Ayland * QEMU interface: 10501f062eSMark Cave-Ayland * + sysbus MMIO region 0: MemoryRegion defining the LASI PS2 keyboard 11501f062eSMark Cave-Ayland * registers 12501f062eSMark Cave-Ayland * + sysbus MMIO region 1: MemoryRegion defining the LASI PS2 mouse 13501f062eSMark Cave-Ayland * registers 14501f062eSMark Cave-Ayland * + sysbus IRQ 0: LASI PS2 output irq 15501f062eSMark Cave-Ayland * + Named GPIO input "ps2-kbd-input-irq": set to 1 if the downstream PS2 16501f062eSMark Cave-Ayland * keyboard device has asserted its irq 17501f062eSMark Cave-Ayland * + Named GPIO input "ps2-mouse-input-irq": set to 1 if the downstream PS2 18501f062eSMark Cave-Ayland * mouse device has asserted its irq 19501f062eSMark Cave-Ayland */ 20501f062eSMark Cave-Ayland 212a6505b0SSven Schnelle #ifndef HW_INPUT_LASIPS2_H 222a6505b0SSven Schnelle #define HW_INPUT_LASIPS2_H 232a6505b0SSven Schnelle 242a6505b0SSven Schnelle #include "exec/hwaddr.h" 2507c68b50SMark Cave-Ayland #include "hw/sysbus.h" 26f4907cb5SMark Cave-Ayland #include "hw/input/ps2.h" 2707c68b50SMark Cave-Ayland 28f8d89a7dSMark Cave-Ayland #define TYPE_LASIPS2_PORT "lasips2-port" 29f8d89a7dSMark Cave-Ayland OBJECT_DECLARE_SIMPLE_TYPE(LASIPS2Port, LASIPS2_PORT) 30f8d89a7dSMark Cave-Ayland 31f8d89a7dSMark Cave-Ayland typedef struct LASIPS2State LASIPS2State; 32f8d89a7dSMark Cave-Ayland 33f8d89a7dSMark Cave-Ayland struct LASIPS2Port { 34f8d89a7dSMark Cave-Ayland DeviceState parent_obj; 35f8d89a7dSMark Cave-Ayland 36f8d89a7dSMark Cave-Ayland LASIPS2State *parent; 3707c68b50SMark Cave-Ayland MemoryRegion reg; 38f4907cb5SMark Cave-Ayland PS2State *ps2dev; 3907c68b50SMark Cave-Ayland uint8_t id; 4007c68b50SMark Cave-Ayland uint8_t control; 4107c68b50SMark Cave-Ayland uint8_t buf; 4207c68b50SMark Cave-Ayland bool loopback_rbne; 4307c68b50SMark Cave-Ayland bool irq; 44f8d89a7dSMark Cave-Ayland }; 4507c68b50SMark Cave-Ayland 46*ef90a06fSMark Cave-Ayland #define TYPE_LASIPS2_KBD_PORT "lasips2-kbd-port" 47*ef90a06fSMark Cave-Ayland OBJECT_DECLARE_SIMPLE_TYPE(LASIPS2KbdPort, LASIPS2_KBD_PORT) 48*ef90a06fSMark Cave-Ayland 49*ef90a06fSMark Cave-Ayland struct LASIPS2KbdPort { 50*ef90a06fSMark Cave-Ayland LASIPS2Port parent_obj; 51*ef90a06fSMark Cave-Ayland }; 52*ef90a06fSMark Cave-Ayland 5307c68b50SMark Cave-Ayland struct LASIPS2State { 5407c68b50SMark Cave-Ayland SysBusDevice parent_obj; 5507c68b50SMark Cave-Ayland 5607c68b50SMark Cave-Ayland LASIPS2Port kbd; 5707c68b50SMark Cave-Ayland LASIPS2Port mouse; 5807c68b50SMark Cave-Ayland qemu_irq irq; 5907c68b50SMark Cave-Ayland }; 602a6505b0SSven Schnelle 612a6505b0SSven Schnelle #define TYPE_LASIPS2 "lasips2" 6207c68b50SMark Cave-Ayland OBJECT_DECLARE_SIMPLE_TYPE(LASIPS2State, LASIPS2) 632a6505b0SSven Schnelle 642a6505b0SSven Schnelle #endif /* HW_INPUT_LASIPS2_H */ 65