|
[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 Fri, 20 Jan 2017, Oleksandr Andrushchenko wrote:
> On 01/19/2017 08:56 PM, Stefano Stabellini wrote:
> > 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>
> Thanks,
> with this change done, can I put your Reviewed-by
> into the next version of this patch?
Of course. Thanks,
Stefano
> > > + * 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 |