cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

virtio-input.h (4125B)


      1#ifndef QEMU_VIRTIO_INPUT_H
      2#define QEMU_VIRTIO_INPUT_H
      3
      4#include "ui/input.h"
      5#include "sysemu/vhost-user-backend.h"
      6
      7/* ----------------------------------------------------------------- */
      8/* virtio input protocol                                             */
      9
     10#include "standard-headers/linux/virtio_ids.h"
     11#include "standard-headers/linux/virtio_input.h"
     12#include "qom/object.h"
     13
     14typedef struct virtio_input_absinfo virtio_input_absinfo;
     15typedef struct virtio_input_config virtio_input_config;
     16typedef struct virtio_input_event virtio_input_event;
     17
     18/* ----------------------------------------------------------------- */
     19/* qemu internals                                                    */
     20
     21#define TYPE_VIRTIO_INPUT "virtio-input-device"
     22OBJECT_DECLARE_TYPE(VirtIOInput, VirtIOInputClass,
     23                    VIRTIO_INPUT)
     24#define VIRTIO_INPUT_GET_PARENT_CLASS(obj) \
     25        OBJECT_GET_PARENT_CLASS(obj, TYPE_VIRTIO_INPUT)
     26
     27#define TYPE_VIRTIO_INPUT_HID "virtio-input-hid-device"
     28#define TYPE_VIRTIO_KEYBOARD  "virtio-keyboard-device"
     29#define TYPE_VIRTIO_MOUSE     "virtio-mouse-device"
     30#define TYPE_VIRTIO_TABLET    "virtio-tablet-device"
     31
     32OBJECT_DECLARE_SIMPLE_TYPE(VirtIOInputHID, VIRTIO_INPUT_HID)
     33#define VIRTIO_INPUT_HID_GET_PARENT_CLASS(obj) \
     34        OBJECT_GET_PARENT_CLASS(obj, TYPE_VIRTIO_INPUT_HID)
     35
     36#define TYPE_VIRTIO_INPUT_HOST   "virtio-input-host-device"
     37OBJECT_DECLARE_SIMPLE_TYPE(VirtIOInputHost, VIRTIO_INPUT_HOST)
     38#define VIRTIO_INPUT_HOST_GET_PARENT_CLASS(obj) \
     39        OBJECT_GET_PARENT_CLASS(obj, TYPE_VIRTIO_INPUT_HOST)
     40
     41#define TYPE_VHOST_USER_INPUT   "vhost-user-input"
     42OBJECT_DECLARE_SIMPLE_TYPE(VHostUserInput, VHOST_USER_INPUT)
     43#define VHOST_USER_INPUT_GET_PARENT_CLASS(obj)             \
     44    OBJECT_GET_PARENT_CLASS(obj, TYPE_VHOST_USER_INPUT)
     45
     46typedef struct VirtIOInputConfig VirtIOInputConfig;
     47
     48struct VirtIOInputConfig {
     49    virtio_input_config               config;
     50    QTAILQ_ENTRY(VirtIOInputConfig)   node;
     51};
     52
     53struct VirtIOInput {
     54    VirtIODevice                      parent_obj;
     55    uint8_t                           cfg_select;
     56    uint8_t                           cfg_subsel;
     57    uint32_t                          cfg_size;
     58    QTAILQ_HEAD(, VirtIOInputConfig)  cfg_list;
     59    VirtQueue                         *evt, *sts;
     60    char                              *serial;
     61
     62    struct {
     63        virtio_input_event event;
     64        VirtQueueElement *elem;
     65    }                                 *queue;
     66    uint32_t                          qindex, qsize;
     67
     68    bool                              active;
     69};
     70
     71struct VirtIOInputClass {
     72    /*< private >*/
     73    VirtioDeviceClass parent;
     74    /*< public >*/
     75
     76    DeviceRealize realize;
     77    DeviceUnrealize unrealize;
     78    void (*change_active)(VirtIOInput *vinput);
     79    void (*handle_status)(VirtIOInput *vinput, virtio_input_event *event);
     80};
     81
     82struct VirtIOInputHID {
     83    VirtIOInput                       parent_obj;
     84    char                              *display;
     85    uint32_t                          head;
     86    QemuInputHandler                  *handler;
     87    QemuInputHandlerState             *hs;
     88    int                               ledstate;
     89    bool                              wheel_axis;
     90};
     91
     92struct VirtIOInputHost {
     93    VirtIOInput                       parent_obj;
     94    char                              *evdev;
     95    int                               fd;
     96};
     97
     98struct VHostUserInput {
     99    VirtIOInput                       parent_obj;
    100
    101    VhostUserBackend                  *vhost;
    102};
    103
    104void virtio_input_send(VirtIOInput *vinput, virtio_input_event *event);
    105void virtio_input_init_config(VirtIOInput *vinput,
    106                              virtio_input_config *config);
    107virtio_input_config *virtio_input_find_config(VirtIOInput *vinput,
    108                                              uint8_t select,
    109                                              uint8_t subsel);
    110void virtio_input_add_config(VirtIOInput *vinput,
    111                             virtio_input_config *config);
    112void virtio_input_idstr_config(VirtIOInput *vinput,
    113                               uint8_t select, const char *string);
    114
    115#endif /* QEMU_VIRTIO_INPUT_H */