|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v1 1/2] xen/kbdif: update protocol documentation
On Thu, 19 Jan 2017, Oleksandr Andrushchenko wrote:
> From: Oleksandr Andrushchenko <Oleksandr_Andrushchenko@xxxxxxxx>
>
> Signed-off-by: Oleksandr Andrushchenko <Oleksandr_Andrushchenko@xxxxxxxx>
> ---
> xen/include/public/io/kbdif.h | 248
> +++++++++++++++++++++++++++++++++++++-----
> 1 file changed, 221 insertions(+), 27 deletions(-)
>
> diff --git a/xen/include/public/io/kbdif.h b/xen/include/public/io/kbdif.h
> index 2d2aebdd3f28..c00faa3af5d2 100644
> --- a/xen/include/public/io/kbdif.h
> +++ b/xen/include/public/io/kbdif.h
> @@ -26,46 +26,226 @@
> #ifndef __XEN_PUBLIC_IO_KBDIF_H__
> #define __XEN_PUBLIC_IO_KBDIF_H__
>
> -/* In events (backend -> frontend) */
> +/*
> +
> *****************************************************************************
> + * Feature and Parameter Negotiation
> +
> *****************************************************************************
> + *
> + * The two halves of a para-virtual driver utilize nodes within the
within "XenStore", drop "the"
Aside from this minor this:
Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx>
> + * XenStore to communicate capabilities and to negotiate operating
> parameters.
> + * This section enumerates these nodes which reside in the respective front
> and
> + * backend portions of XenStore, following XenBus convention.
> + *
> + * All data in XenStore is stored as strings. Nodes specifying numeric
> + * values are encoded in decimal. Integer value ranges listed below are
> + * expressed as fixed sized integer types capable of storing the conversion
> + * of a properly formated node string, without loss of information.
> + *
> +
> *****************************************************************************
> + * Backend XenBus Nodes
> +
> *****************************************************************************
> + *
> + *---------------------------- Features supported
> ----------------------------
> + *
> + * Capable backend advertises supported features by publishing
> + * corresponding entries in XenStore and puts 1 as the value of the entry.
> + * If a feature is not supported then 0 must be set or feature entry omitted.
> + *
> + * feature-abs-pointer
> + * Values: <uint>
> + *
> + * Backends, which support reporting of absolute coordinates for pointer
> + * device should set this to 1.
> + *
> + *------------------------- Pointer Device Parameters
> ------------------------
> + *
> + * width
> + * Values: <uint>
> + *
> + * Maximum X coordinate (width) to be used by the frontend
> + * while reporting input events, pixels, [0; UINT32_MAX].
> + *
> + * height
> + * Values: <uint>
> + *
> + * Maximum Y coordinate (height) to be used by the frontend
> + * while reporting input events, pixels, [0; UINT32_MAX].
> + *
> +
> *****************************************************************************
> + * Frontend XenBus Nodes
> +
> *****************************************************************************
> + *
> + *------------------------------ Feature request
> -----------------------------
> + *
> + * Capable frontend requests features from backend via setting corresponding
> + * entries to 1 in XenStore. Requests for features not advertised as
> supported
> + * by the backend have no effect.
> + *
> + * request-abs-pointer
> + * Values: <uint>
> + *
> + * Request backend to report absolute pointer coordinates
> + * (XENKBD_TYPE_POS) instead of relative ones (XENKBD_TYPE_MOTION).
> + *
> + *----------------------- Request Transport Parameters
> -----------------------
> + *
> + * event-channel
> + * Values: <uint>
> + *
> + * The identifier of the Xen event channel used to signal activity
> + * in the ring buffer.
> + *
> + * page-gref
> + * Values: <uint>
> + *
> + * The Xen grant reference granting permission for the backend to map
> + * a sole page in a single page sized event ring buffer.
> + *
> + * page-ref
> + * Values: <uint>
> + *
> + * OBSOLETE, not recommended for use.
> + * PFN of the shared page.
> + */
>
> /*
> - * Frontends should ignore unknown in events.
> + * EVENT CODES.
> */
>
> -/* Pointer movement event */
> -#define XENKBD_TYPE_MOTION 1
> -/* Event type 2 currently not used */
> -/* Key event (includes pointer buttons) */
> -#define XENKBD_TYPE_KEY 3
> +#define XENKBD_TYPE_MOTION 1
> +#define XENKBD_TYPE_RESERVED 2
> +#define XENKBD_TYPE_KEY 3
> +#define XENKBD_TYPE_POS 4
> +
> /*
> - * Pointer position event
> - * Capable backend sets feature-abs-pointer in xenstore.
> - * Frontend requests ot instead of XENKBD_TYPE_MOTION by setting
> - * request-abs-update in xenstore.
> + * CONSTANTS, XENSTORE FIELD AND PATH NAME STRINGS, HELPERS.
> + */
> +
> +#define XENKBD_DRIVER_NAME "vkbd"
> +
> +#define XENKBD_FIELD_FEAT_ABS_POINTER "feature-abs-pointer"
> +#define XENKBD_FIELD_REQ_ABS_POINTER "request-abs-pointer"
> +#define XENKBD_FIELD_RING_GREF "page-gref"
> +#define XENKBD_FIELD_EVT_CHANNEL "event-channel"
> +#define XENKBD_FIELD_WIDTH "width"
> +#define XENKBD_FIELD_HEIGHT "height"
> +
> +/* OBSOLETE, not recommended for use */
> +#define XENKBD_FIELD_RING_REF "page-ref"
> +
> +/*
> +
> *****************************************************************************
> + * Description of the protocol between frontend and backend driver.
> +
> *****************************************************************************
> + *
> + * The two halves of a Para-virtual driver communicate with
> + * each other using a shared page and an event channel.
> + * Shared page contains a ring with event structures.
> + *
> + * All reserved fields in the structures below must be 0.
> + *
> +
> *****************************************************************************
> + * Backend to frontend events
> +
> *****************************************************************************
> + *
> + * Frontends should ignore unknown in events.
> + * All event packets have the same length (40 octets)
> + * All event packets have common header:
> + *
> + * 0 octet
> + * +-----------------+
> + * | type |
> + * +-----------------+
> + * type - uint8_t, event code, XENKBD_TYPE_???
> + *
> + *
> + * Pointer relative movement event
> + * 0 1 2 3 octet
> + * +----------------+----------------+----------------+----------------+
> + * | _TYPE_MOTION | reserved | 4
> + * +----------------+----------------+----------------+----------------+
> + * | rel_x | 8
> + * +----------------+----------------+----------------+----------------+
> + * | rel_y | 12
> + * +----------------+----------------+----------------+----------------+
> + * | rel_z | 16
> + * +----------------+----------------+----------------+----------------+
> + * | reserved | 20
> + * +----------------+----------------+----------------+----------------+
> + * |/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/|
> + * +----------------+----------------+----------------+----------------+
> + * | reserved | 40
> + * +----------------+----------------+----------------+----------------+
> + *
> + * rel_x - int32_t, relative X motion
> + * rel_y - int32_t, relative Y motion
> + * rel_z - int32_t, relative Z motion (wheel)
> */
> -#define XENKBD_TYPE_POS 4
>
> struct xenkbd_motion
> {
> - uint8_t type; /* XENKBD_TYPE_MOTION */
> - int32_t rel_x; /* relative X motion */
> - int32_t rel_y; /* relative Y motion */
> - int32_t rel_z; /* relative Z motion (wheel) */
> + uint8_t type;
> + int32_t rel_x;
> + int32_t rel_y;
> + int32_t rel_z;
> };
>
> +/*
> + * Key event (includes pointer buttons)
> + * 0 1 2 3 octet
> + * +----------------+----------------+----------------+----------------+
> + * | _TYPE_KEY | pressed | reserved | 4
> + * +----------------+----------------+----------------+----------------+
> + * | keycode | 8
> + * +----------------+----------------+----------------+----------------+
> + * | reserved | 12
> + * +----------------+----------------+----------------+----------------+
> + * |/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/|
> + * +----------------+----------------+----------------+----------------+
> + * | reserved | 40
> + * +----------------+----------------+----------------+----------------+
> + *
> + * pressed - uint8_t, 1 if pressed; 0 otherwise
> + * keycode - uint32_t, KEY_* from linux/input.h
> + */
> +
> struct xenkbd_key
> {
> - uint8_t type; /* XENKBD_TYPE_KEY */
> - uint8_t pressed; /* 1 if pressed; 0 otherwise */
> - uint32_t keycode; /* KEY_* from linux/input.h */
> + uint8_t type;
> + uint8_t pressed;
> + uint32_t keycode;
> };
>
> +/*
> + * Pointer absolute position event
> + * 0 1 2 3 octet
> + * +----------------+----------------+----------------+----------------+
> + * | _TYPE_POS | reserved | 4
> + * +----------------+----------------+----------------+----------------+
> + * | abs_x | 8
> + * +----------------+----------------+----------------+----------------+
> + * | abs_y | 12
> + * +----------------+----------------+----------------+----------------+
> + * | rel_z | 16
> + * +----------------+----------------+----------------+----------------+
> + * | reserved | 20
> + * +----------------+----------------+----------------+----------------+
> + * |/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/|
> + * +----------------+----------------+----------------+----------------+
> + * | reserved | 40
> + * +----------------+----------------+----------------+----------------+
> + *
> + * abs_x - int32_t, absolute X position (in FB pixels)
> + * abs_y - int32_t, absolute Y position (in FB pixels)
> + * rel_z - int32_t, relative Z motion (wheel)
> + */
> +
> struct xenkbd_position
> {
> - uint8_t type; /* XENKBD_TYPE_POS */
> - int32_t abs_x; /* absolute X position (in FB pixels) */
> - int32_t abs_y; /* absolute Y position (in FB pixels) */
> - int32_t rel_z; /* relative Z motion (wheel) */
> + uint8_t type;
> + int32_t abs_x;
> + int32_t abs_y;
> + int32_t rel_z;
> };
>
> #define XENKBD_IN_EVENT_SIZE 40
> @@ -79,12 +259,22 @@ union xenkbd_in_event
> char pad[XENKBD_IN_EVENT_SIZE];
> };
>
> -/* Out events (frontend -> backend) */
> -
> /*
> +
> *****************************************************************************
> + * Frontend to backend events
> +
> *****************************************************************************
> + *
> * Out events may be sent only when requested by backend, and receipt
> * of an unknown out event is an error.
> * No out events currently defined.
> +
> + * All event packets have the same length (40 octets)
> + * All event packets have common header:
> + * 0 octet
> + * +-----------------+
> + * | type |
> + * +-----------------+
> + * type - uint8_t, event code
> */
>
> #define XENKBD_OUT_EVENT_SIZE 40
> @@ -95,7 +285,11 @@ union xenkbd_out_event
> char pad[XENKBD_OUT_EVENT_SIZE];
> };
>
> -/* shared page */
> +/*
> +
> *****************************************************************************
> + * Shared page
> +
> *****************************************************************************
> + */
>
> #define XENKBD_IN_RING_SIZE 2048
> #define XENKBD_IN_RING_LEN (XENKBD_IN_RING_SIZE / XENKBD_IN_EVENT_SIZE)
> @@ -119,7 +313,7 @@ struct xenkbd_page
> uint32_t out_cons, out_prod;
> };
>
> -#endif
> +#endif /* __XEN_PUBLIC_IO_KBDIF_H__ */
>
> /*
> * Local variables:
> --
> 2.7.4
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |