xref: /qemu/include/hw/input/lasips2.h (revision ef90a06f9961239d90d5a84c59078e8417bde77c)
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