diff options
author | Peter Maydell <peter.maydell@linaro.org> | 2015-05-29 11:23:07 +0100 |
---|---|---|
committer | Peter Maydell <peter.maydell@linaro.org> | 2015-05-29 11:23:07 +0100 |
commit | 9441aa282bc3213ef0530cab86f318b877bac25c (patch) | |
tree | 8c82245fe6295b71dab3599dfe110e0f8be1254b /include/hw | |
parent | ba7c388963e099c0d2cedb7f048e30747ffff25d (diff) | |
parent | 55a1d80a41032d6133adec041c0096820beaa1b7 (diff) | |
download | qemu-9441aa282bc3213ef0530cab86f318b877bac25c.zip qemu-9441aa282bc3213ef0530cab86f318b877bac25c.tar.gz qemu-9441aa282bc3213ef0530cab86f318b877bac25c.tar.bz2 |
Merge remote-tracking branch 'remotes/kraxel/tags/pull-input-20150529-1' into staging
kbd: add support for brazilian keyboard (two extra keys).
input: add virtio-input devices.
# gpg: Signature made Fri May 29 10:09:02 2015 BST using RSA key ID D3E87138
# gpg: Good signature from "Gerd Hoffmann (work) <kraxel@redhat.com>"
# gpg: aka "Gerd Hoffmann <gerd@kraxel.org>"
# gpg: aka "Gerd Hoffmann (private) <kraxel@gmail.com>"
* remotes/kraxel/tags/pull-input-20150529-1:
virtio-input: emulated devices [device]
virtio-input: core code & base class [device]
virtio-input: add linux/input.h
kbd: add brazil kbd keys to x11 evdev map
kbd: add brazil kbd keys to qemu
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'include/hw')
-rw-r--r-- | include/hw/virtio/virtio-input.h | 105 | ||||
-rw-r--r-- | include/hw/virtio/virtio.h | 1 |
2 files changed, 106 insertions, 0 deletions
diff --git a/include/hw/virtio/virtio-input.h b/include/hw/virtio/virtio-input.h new file mode 100644 index 0000000..a265519 --- /dev/null +++ b/include/hw/virtio/virtio-input.h @@ -0,0 +1,105 @@ +#ifndef _QEMU_VIRTIO_INPUT_H +#define _QEMU_VIRTIO_INPUT_H + +#include "ui/input.h" + +/* ----------------------------------------------------------------- */ +/* virtio input protocol */ + +#include "standard-headers/linux/virtio_ids.h" +#include "standard-headers/linux/virtio_input.h" + +typedef struct virtio_input_absinfo virtio_input_absinfo; +typedef struct virtio_input_config virtio_input_config; +typedef struct virtio_input_event virtio_input_event; + +#if defined(HOST_WORDS_BIGENDIAN) +# define const_le32(_x) bswap32(_x) +# define const_le16(_x) bswap32(_x) +#else +# define const_le32(_x) (_x) +# define const_le16(_x) (_x) +#endif + +/* ----------------------------------------------------------------- */ +/* qemu internals */ + +#define TYPE_VIRTIO_INPUT "virtio-input-device" +#define VIRTIO_INPUT(obj) \ + OBJECT_CHECK(VirtIOInput, (obj), TYPE_VIRTIO_INPUT) +#define VIRTIO_INPUT_GET_PARENT_CLASS(obj) \ + OBJECT_GET_PARENT_CLASS(obj, TYPE_VIRTIO_INPUT) +#define VIRTIO_INPUT_GET_CLASS(obj) \ + OBJECT_GET_CLASS(VirtIOInputClass, obj, TYPE_VIRTIO_INPUT) +#define VIRTIO_INPUT_CLASS(klass) \ + OBJECT_CLASS_CHECK(VirtIOInputClass, klass, TYPE_VIRTIO_INPUT) + +#define TYPE_VIRTIO_INPUT_HID "virtio-input-hid" +#define TYPE_VIRTIO_KEYBOARD "virtio-keyboard" +#define TYPE_VIRTIO_MOUSE "virtio-mouse" +#define TYPE_VIRTIO_TABLET "virtio-tablet" + +#define VIRTIO_INPUT_HID(obj) \ + OBJECT_CHECK(VirtIOInputHID, (obj), TYPE_VIRTIO_INPUT_HID) +#define VIRTIO_INPUT_HID_GET_PARENT_CLASS(obj) \ + OBJECT_GET_PARENT_CLASS(obj, TYPE_VIRTIO_INPUT_HID) + +#define DEFINE_VIRTIO_INPUT_PROPERTIES(_state, _field) \ + DEFINE_PROP_STRING("serial", _state, _field.serial) + +typedef struct VirtIOInput VirtIOInput; +typedef struct VirtIOInputClass VirtIOInputClass; +typedef struct VirtIOInputConfig VirtIOInputConfig; +typedef struct VirtIOInputHID VirtIOInputHID; + +struct virtio_input_conf { + char *serial; +}; + +struct VirtIOInputConfig { + virtio_input_config config; + QTAILQ_ENTRY(VirtIOInputConfig) node; +}; + +struct VirtIOInput { + VirtIODevice parent_obj; + uint8_t cfg_select; + uint8_t cfg_subsel; + uint32_t cfg_size; + QTAILQ_HEAD(, VirtIOInputConfig) cfg_list; + VirtQueue *evt, *sts; + virtio_input_conf input; + + virtio_input_event *queue; + uint32_t qindex, qsize; + + bool active; +}; + +struct VirtIOInputClass { + /*< private >*/ + VirtioDeviceClass parent; + /*< public >*/ + + DeviceRealize realize; + DeviceUnrealize unrealize; + void (*change_active)(VirtIOInput *vinput); + void (*handle_status)(VirtIOInput *vinput, virtio_input_event *event); +}; + +struct VirtIOInputHID { + VirtIOInput parent_obj; + QemuInputHandler *handler; + QemuInputHandlerState *hs; + int ledstate; +}; + +void virtio_input_send(VirtIOInput *vinput, virtio_input_event *event); +void virtio_input_init_config(VirtIOInput *vinput, + virtio_input_config *config); +void virtio_input_add_config(VirtIOInput *vinput, + virtio_input_config *config); +void virtio_input_idstr_config(VirtIOInput *vinput, + uint8_t select, const char *string); + +#endif /* _QEMU_VIRTIO_INPUT_H */ diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h index 8210cb3..ba74765 100644 --- a/include/hw/virtio/virtio.h +++ b/include/hw/virtio/virtio.h @@ -188,6 +188,7 @@ int virtio_set_features(VirtIODevice *vdev, uint32_t val); typedef struct VirtIOBlkConf VirtIOBlkConf; struct virtio_net_conf; typedef struct virtio_serial_conf virtio_serial_conf; +typedef struct virtio_input_conf virtio_input_conf; typedef struct VirtIOSCSIConf VirtIOSCSIConf; typedef struct VirtIORNGConf VirtIORNGConf; |