1f73ddbadSGerd Hoffmann #ifndef _QEMU_VIRTIO_INPUT_H 2f73ddbadSGerd Hoffmann #define _QEMU_VIRTIO_INPUT_H 3f73ddbadSGerd Hoffmann 4f73ddbadSGerd Hoffmann #include "ui/input.h" 5f73ddbadSGerd Hoffmann 6f73ddbadSGerd Hoffmann /* ----------------------------------------------------------------- */ 7f73ddbadSGerd Hoffmann /* virtio input protocol */ 8f73ddbadSGerd Hoffmann 9f73ddbadSGerd Hoffmann #include "standard-headers/linux/virtio_ids.h" 10f73ddbadSGerd Hoffmann #include "standard-headers/linux/virtio_input.h" 11f73ddbadSGerd Hoffmann 12f73ddbadSGerd Hoffmann typedef struct virtio_input_absinfo virtio_input_absinfo; 13f73ddbadSGerd Hoffmann typedef struct virtio_input_config virtio_input_config; 14f73ddbadSGerd Hoffmann typedef struct virtio_input_event virtio_input_event; 15f73ddbadSGerd Hoffmann 16f73ddbadSGerd Hoffmann /* ----------------------------------------------------------------- */ 17f73ddbadSGerd Hoffmann /* qemu internals */ 18f73ddbadSGerd Hoffmann 19f73ddbadSGerd Hoffmann #define TYPE_VIRTIO_INPUT "virtio-input-device" 20f73ddbadSGerd Hoffmann #define VIRTIO_INPUT(obj) \ 21f73ddbadSGerd Hoffmann OBJECT_CHECK(VirtIOInput, (obj), TYPE_VIRTIO_INPUT) 22f73ddbadSGerd Hoffmann #define VIRTIO_INPUT_GET_PARENT_CLASS(obj) \ 23f73ddbadSGerd Hoffmann OBJECT_GET_PARENT_CLASS(obj, TYPE_VIRTIO_INPUT) 24f73ddbadSGerd Hoffmann #define VIRTIO_INPUT_GET_CLASS(obj) \ 25f73ddbadSGerd Hoffmann OBJECT_GET_CLASS(VirtIOInputClass, obj, TYPE_VIRTIO_INPUT) 26f73ddbadSGerd Hoffmann #define VIRTIO_INPUT_CLASS(klass) \ 27f73ddbadSGerd Hoffmann OBJECT_CLASS_CHECK(VirtIOInputClass, klass, TYPE_VIRTIO_INPUT) 28f73ddbadSGerd Hoffmann 29e63d114bSGerd Hoffmann #define TYPE_VIRTIO_INPUT_HID "virtio-input-hid-device" 30e63d114bSGerd Hoffmann #define TYPE_VIRTIO_KEYBOARD "virtio-keyboard-device" 31e63d114bSGerd Hoffmann #define TYPE_VIRTIO_MOUSE "virtio-mouse-device" 32e63d114bSGerd Hoffmann #define TYPE_VIRTIO_TABLET "virtio-tablet-device" 3355a1d80aSGerd Hoffmann 3455a1d80aSGerd Hoffmann #define VIRTIO_INPUT_HID(obj) \ 3555a1d80aSGerd Hoffmann OBJECT_CHECK(VirtIOInputHID, (obj), TYPE_VIRTIO_INPUT_HID) 3655a1d80aSGerd Hoffmann #define VIRTIO_INPUT_HID_GET_PARENT_CLASS(obj) \ 3755a1d80aSGerd Hoffmann OBJECT_GET_PARENT_CLASS(obj, TYPE_VIRTIO_INPUT_HID) 3855a1d80aSGerd Hoffmann 39006a5edeSGerd Hoffmann #define TYPE_VIRTIO_INPUT_HOST "virtio-input-host-device" 40006a5edeSGerd Hoffmann #define VIRTIO_INPUT_HOST(obj) \ 41006a5edeSGerd Hoffmann OBJECT_CHECK(VirtIOInputHost, (obj), TYPE_VIRTIO_INPUT_HOST) 42006a5edeSGerd Hoffmann #define VIRTIO_INPUT_HOST_GET_PARENT_CLASS(obj) \ 43006a5edeSGerd Hoffmann OBJECT_GET_PARENT_CLASS(obj, TYPE_VIRTIO_INPUT_HOST) 44006a5edeSGerd Hoffmann 45f73ddbadSGerd Hoffmann typedef struct VirtIOInput VirtIOInput; 46f73ddbadSGerd Hoffmann typedef struct VirtIOInputClass VirtIOInputClass; 47f73ddbadSGerd Hoffmann typedef struct VirtIOInputConfig VirtIOInputConfig; 4855a1d80aSGerd Hoffmann typedef struct VirtIOInputHID VirtIOInputHID; 49006a5edeSGerd Hoffmann typedef struct VirtIOInputHost VirtIOInputHost; 50f73ddbadSGerd Hoffmann 51f73ddbadSGerd Hoffmann struct VirtIOInputConfig { 52f73ddbadSGerd Hoffmann virtio_input_config config; 53f73ddbadSGerd Hoffmann QTAILQ_ENTRY(VirtIOInputConfig) node; 54f73ddbadSGerd Hoffmann }; 55f73ddbadSGerd Hoffmann 56f73ddbadSGerd Hoffmann struct VirtIOInput { 57f73ddbadSGerd Hoffmann VirtIODevice parent_obj; 58f73ddbadSGerd Hoffmann uint8_t cfg_select; 59f73ddbadSGerd Hoffmann uint8_t cfg_subsel; 60f73ddbadSGerd Hoffmann uint32_t cfg_size; 61f73ddbadSGerd Hoffmann QTAILQ_HEAD(, VirtIOInputConfig) cfg_list; 62f73ddbadSGerd Hoffmann VirtQueue *evt, *sts; 636f2b9a5bSGerd Hoffmann char *serial; 64f73ddbadSGerd Hoffmann 65f73ddbadSGerd Hoffmann virtio_input_event *queue; 66f73ddbadSGerd Hoffmann uint32_t qindex, qsize; 67f73ddbadSGerd Hoffmann 68f73ddbadSGerd Hoffmann bool active; 69f73ddbadSGerd Hoffmann }; 70f73ddbadSGerd Hoffmann 71f73ddbadSGerd Hoffmann struct VirtIOInputClass { 72f73ddbadSGerd Hoffmann /*< private >*/ 73f73ddbadSGerd Hoffmann VirtioDeviceClass parent; 74f73ddbadSGerd Hoffmann /*< public >*/ 75f73ddbadSGerd Hoffmann 76f73ddbadSGerd Hoffmann DeviceRealize realize; 77f73ddbadSGerd Hoffmann DeviceUnrealize unrealize; 78f73ddbadSGerd Hoffmann void (*change_active)(VirtIOInput *vinput); 79f73ddbadSGerd Hoffmann void (*handle_status)(VirtIOInput *vinput, virtio_input_event *event); 80f73ddbadSGerd Hoffmann }; 81f73ddbadSGerd Hoffmann 8255a1d80aSGerd Hoffmann struct VirtIOInputHID { 8355a1d80aSGerd Hoffmann VirtIOInput parent_obj; 845cce1733SGerd Hoffmann char *display; 855cce1733SGerd Hoffmann uint32_t head; 8655a1d80aSGerd Hoffmann QemuInputHandler *handler; 8755a1d80aSGerd Hoffmann QemuInputHandlerState *hs; 8855a1d80aSGerd Hoffmann int ledstate; 8955a1d80aSGerd Hoffmann }; 9055a1d80aSGerd Hoffmann 91006a5edeSGerd Hoffmann struct VirtIOInputHost { 92006a5edeSGerd Hoffmann VirtIOInput parent_obj; 93006a5edeSGerd Hoffmann char *evdev; 94006a5edeSGerd Hoffmann int fd; 95006a5edeSGerd Hoffmann }; 96006a5edeSGerd Hoffmann 97f73ddbadSGerd Hoffmann void virtio_input_send(VirtIOInput *vinput, virtio_input_event *event); 98f73ddbadSGerd Hoffmann void virtio_input_init_config(VirtIOInput *vinput, 99f73ddbadSGerd Hoffmann virtio_input_config *config); 100*b065e275SLadi Prosek virtio_input_config *virtio_input_find_config(VirtIOInput *vinput, 101*b065e275SLadi Prosek uint8_t select, 102*b065e275SLadi Prosek uint8_t subsel); 103f73ddbadSGerd Hoffmann void virtio_input_add_config(VirtIOInput *vinput, 104f73ddbadSGerd Hoffmann virtio_input_config *config); 105f73ddbadSGerd Hoffmann void virtio_input_idstr_config(VirtIOInput *vinput, 106f73ddbadSGerd Hoffmann uint8_t select, const char *string); 107f73ddbadSGerd Hoffmann 108f73ddbadSGerd Hoffmann #endif /* _QEMU_VIRTIO_INPUT_H */ 109