[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

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.