18c2ecf20Sopenharmony_ci/* 28c2ecf20Sopenharmony_ci * kbdif.h -- Xen virtual keyboard/mouse 38c2ecf20Sopenharmony_ci * 48c2ecf20Sopenharmony_ci * Permission is hereby granted, free of charge, to any person obtaining a copy 58c2ecf20Sopenharmony_ci * of this software and associated documentation files (the "Software"), to 68c2ecf20Sopenharmony_ci * deal in the Software without restriction, including without limitation the 78c2ecf20Sopenharmony_ci * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 88c2ecf20Sopenharmony_ci * sell copies of the Software, and to permit persons to whom the Software is 98c2ecf20Sopenharmony_ci * furnished to do so, subject to the following conditions: 108c2ecf20Sopenharmony_ci * 118c2ecf20Sopenharmony_ci * The above copyright notice and this permission notice shall be included in 128c2ecf20Sopenharmony_ci * all copies or substantial portions of the Software. 138c2ecf20Sopenharmony_ci * 148c2ecf20Sopenharmony_ci * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 158c2ecf20Sopenharmony_ci * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 168c2ecf20Sopenharmony_ci * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 178c2ecf20Sopenharmony_ci * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 188c2ecf20Sopenharmony_ci * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 198c2ecf20Sopenharmony_ci * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 208c2ecf20Sopenharmony_ci * DEALINGS IN THE SOFTWARE. 218c2ecf20Sopenharmony_ci * 228c2ecf20Sopenharmony_ci * Copyright (C) 2005 Anthony Liguori <aliguori@us.ibm.com> 238c2ecf20Sopenharmony_ci * Copyright (C) 2006 Red Hat, Inc., Markus Armbruster <armbru@redhat.com> 248c2ecf20Sopenharmony_ci */ 258c2ecf20Sopenharmony_ci 268c2ecf20Sopenharmony_ci#ifndef __XEN_PUBLIC_IO_KBDIF_H__ 278c2ecf20Sopenharmony_ci#define __XEN_PUBLIC_IO_KBDIF_H__ 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_ci/* 308c2ecf20Sopenharmony_ci ***************************************************************************** 318c2ecf20Sopenharmony_ci * Feature and Parameter Negotiation 328c2ecf20Sopenharmony_ci ***************************************************************************** 338c2ecf20Sopenharmony_ci * 348c2ecf20Sopenharmony_ci * The two halves of a para-virtual driver utilize nodes within 358c2ecf20Sopenharmony_ci * XenStore to communicate capabilities and to negotiate operating parameters. 368c2ecf20Sopenharmony_ci * This section enumerates these nodes which reside in the respective front and 378c2ecf20Sopenharmony_ci * backend portions of XenStore, following XenBus convention. 388c2ecf20Sopenharmony_ci * 398c2ecf20Sopenharmony_ci * All data in XenStore is stored as strings. Nodes specifying numeric 408c2ecf20Sopenharmony_ci * values are encoded in decimal. Integer value ranges listed below are 418c2ecf20Sopenharmony_ci * expressed as fixed sized integer types capable of storing the conversion 428c2ecf20Sopenharmony_ci * of a properly formated node string, without loss of information. 438c2ecf20Sopenharmony_ci * 448c2ecf20Sopenharmony_ci ***************************************************************************** 458c2ecf20Sopenharmony_ci * Backend XenBus Nodes 468c2ecf20Sopenharmony_ci ***************************************************************************** 478c2ecf20Sopenharmony_ci * 488c2ecf20Sopenharmony_ci *---------------------------- Features supported ---------------------------- 498c2ecf20Sopenharmony_ci * 508c2ecf20Sopenharmony_ci * Capable backend advertises supported features by publishing 518c2ecf20Sopenharmony_ci * corresponding entries in XenStore and puts 1 as the value of the entry. 528c2ecf20Sopenharmony_ci * If a feature is not supported then 0 must be set or feature entry omitted. 538c2ecf20Sopenharmony_ci * 548c2ecf20Sopenharmony_ci * feature-disable-keyboard 558c2ecf20Sopenharmony_ci * Values: <uint> 568c2ecf20Sopenharmony_ci * 578c2ecf20Sopenharmony_ci * If there is no need to expose a virtual keyboard device by the 588c2ecf20Sopenharmony_ci * frontend then this must be set to 1. 598c2ecf20Sopenharmony_ci * 608c2ecf20Sopenharmony_ci * feature-disable-pointer 618c2ecf20Sopenharmony_ci * Values: <uint> 628c2ecf20Sopenharmony_ci * 638c2ecf20Sopenharmony_ci * If there is no need to expose a virtual pointer device by the 648c2ecf20Sopenharmony_ci * frontend then this must be set to 1. 658c2ecf20Sopenharmony_ci * 668c2ecf20Sopenharmony_ci * feature-abs-pointer 678c2ecf20Sopenharmony_ci * Values: <uint> 688c2ecf20Sopenharmony_ci * 698c2ecf20Sopenharmony_ci * Backends, which support reporting of absolute coordinates for pointer 708c2ecf20Sopenharmony_ci * device should set this to 1. 718c2ecf20Sopenharmony_ci * 728c2ecf20Sopenharmony_ci * feature-multi-touch 738c2ecf20Sopenharmony_ci * Values: <uint> 748c2ecf20Sopenharmony_ci * 758c2ecf20Sopenharmony_ci * Backends, which support reporting of multi-touch events 768c2ecf20Sopenharmony_ci * should set this to 1. 778c2ecf20Sopenharmony_ci * 788c2ecf20Sopenharmony_ci * feature-raw-pointer 798c2ecf20Sopenharmony_ci * Values: <uint> 808c2ecf20Sopenharmony_ci * 818c2ecf20Sopenharmony_ci * Backends, which support reporting raw (unscaled) absolute coordinates 828c2ecf20Sopenharmony_ci * for pointer devices should set this to 1. Raw (unscaled) values have 838c2ecf20Sopenharmony_ci * a range of [0, 0x7fff]. 848c2ecf20Sopenharmony_ci * 858c2ecf20Sopenharmony_ci *----------------------- Device Instance Parameters ------------------------ 868c2ecf20Sopenharmony_ci * 878c2ecf20Sopenharmony_ci * unique-id 888c2ecf20Sopenharmony_ci * Values: <string> 898c2ecf20Sopenharmony_ci * 908c2ecf20Sopenharmony_ci * After device instance initialization it is assigned a unique ID, 918c2ecf20Sopenharmony_ci * so every instance of the frontend can be identified by the backend 928c2ecf20Sopenharmony_ci * by this ID. This can be UUID or such. 938c2ecf20Sopenharmony_ci * 948c2ecf20Sopenharmony_ci *------------------------- Pointer Device Parameters ------------------------ 958c2ecf20Sopenharmony_ci * 968c2ecf20Sopenharmony_ci * width 978c2ecf20Sopenharmony_ci * Values: <uint> 988c2ecf20Sopenharmony_ci * 998c2ecf20Sopenharmony_ci * Maximum X coordinate (width) to be used by the frontend 1008c2ecf20Sopenharmony_ci * while reporting input events, pixels, [0; UINT32_MAX]. 1018c2ecf20Sopenharmony_ci * 1028c2ecf20Sopenharmony_ci * height 1038c2ecf20Sopenharmony_ci * Values: <uint> 1048c2ecf20Sopenharmony_ci * 1058c2ecf20Sopenharmony_ci * Maximum Y coordinate (height) to be used by the frontend 1068c2ecf20Sopenharmony_ci * while reporting input events, pixels, [0; UINT32_MAX]. 1078c2ecf20Sopenharmony_ci * 1088c2ecf20Sopenharmony_ci *----------------------- Multi-touch Device Parameters ---------------------- 1098c2ecf20Sopenharmony_ci * 1108c2ecf20Sopenharmony_ci * multi-touch-num-contacts 1118c2ecf20Sopenharmony_ci * Values: <uint> 1128c2ecf20Sopenharmony_ci * 1138c2ecf20Sopenharmony_ci * Number of simultaneous touches reported. 1148c2ecf20Sopenharmony_ci * 1158c2ecf20Sopenharmony_ci * multi-touch-width 1168c2ecf20Sopenharmony_ci * Values: <uint> 1178c2ecf20Sopenharmony_ci * 1188c2ecf20Sopenharmony_ci * Width of the touch area to be used by the frontend 1198c2ecf20Sopenharmony_ci * while reporting input events, pixels, [0; UINT32_MAX]. 1208c2ecf20Sopenharmony_ci * 1218c2ecf20Sopenharmony_ci * multi-touch-height 1228c2ecf20Sopenharmony_ci * Values: <uint> 1238c2ecf20Sopenharmony_ci * 1248c2ecf20Sopenharmony_ci * Height of the touch area to be used by the frontend 1258c2ecf20Sopenharmony_ci * while reporting input events, pixels, [0; UINT32_MAX]. 1268c2ecf20Sopenharmony_ci * 1278c2ecf20Sopenharmony_ci ***************************************************************************** 1288c2ecf20Sopenharmony_ci * Frontend XenBus Nodes 1298c2ecf20Sopenharmony_ci ***************************************************************************** 1308c2ecf20Sopenharmony_ci * 1318c2ecf20Sopenharmony_ci *------------------------------ Feature request ----------------------------- 1328c2ecf20Sopenharmony_ci * 1338c2ecf20Sopenharmony_ci * Capable frontend requests features from backend via setting corresponding 1348c2ecf20Sopenharmony_ci * entries to 1 in XenStore. Requests for features not advertised as supported 1358c2ecf20Sopenharmony_ci * by the backend have no effect. 1368c2ecf20Sopenharmony_ci * 1378c2ecf20Sopenharmony_ci * request-abs-pointer 1388c2ecf20Sopenharmony_ci * Values: <uint> 1398c2ecf20Sopenharmony_ci * 1408c2ecf20Sopenharmony_ci * Request backend to report absolute pointer coordinates 1418c2ecf20Sopenharmony_ci * (XENKBD_TYPE_POS) instead of relative ones (XENKBD_TYPE_MOTION). 1428c2ecf20Sopenharmony_ci * 1438c2ecf20Sopenharmony_ci * request-multi-touch 1448c2ecf20Sopenharmony_ci * Values: <uint> 1458c2ecf20Sopenharmony_ci * 1468c2ecf20Sopenharmony_ci * Request backend to report multi-touch events. 1478c2ecf20Sopenharmony_ci * 1488c2ecf20Sopenharmony_ci * request-raw-pointer 1498c2ecf20Sopenharmony_ci * Values: <uint> 1508c2ecf20Sopenharmony_ci * 1518c2ecf20Sopenharmony_ci * Request backend to report raw unscaled absolute pointer coordinates. 1528c2ecf20Sopenharmony_ci * This option is only valid if request-abs-pointer is also set. 1538c2ecf20Sopenharmony_ci * Raw unscaled coordinates have the range [0, 0x7fff] 1548c2ecf20Sopenharmony_ci * 1558c2ecf20Sopenharmony_ci *----------------------- Request Transport Parameters ----------------------- 1568c2ecf20Sopenharmony_ci * 1578c2ecf20Sopenharmony_ci * event-channel 1588c2ecf20Sopenharmony_ci * Values: <uint> 1598c2ecf20Sopenharmony_ci * 1608c2ecf20Sopenharmony_ci * The identifier of the Xen event channel used to signal activity 1618c2ecf20Sopenharmony_ci * in the ring buffer. 1628c2ecf20Sopenharmony_ci * 1638c2ecf20Sopenharmony_ci * page-gref 1648c2ecf20Sopenharmony_ci * Values: <uint> 1658c2ecf20Sopenharmony_ci * 1668c2ecf20Sopenharmony_ci * The Xen grant reference granting permission for the backend to map 1678c2ecf20Sopenharmony_ci * a sole page in a single page sized event ring buffer. 1688c2ecf20Sopenharmony_ci * 1698c2ecf20Sopenharmony_ci * page-ref 1708c2ecf20Sopenharmony_ci * Values: <uint> 1718c2ecf20Sopenharmony_ci * 1728c2ecf20Sopenharmony_ci * OBSOLETE, not recommended for use. 1738c2ecf20Sopenharmony_ci * PFN of the shared page. 1748c2ecf20Sopenharmony_ci */ 1758c2ecf20Sopenharmony_ci 1768c2ecf20Sopenharmony_ci/* 1778c2ecf20Sopenharmony_ci * EVENT CODES. 1788c2ecf20Sopenharmony_ci */ 1798c2ecf20Sopenharmony_ci 1808c2ecf20Sopenharmony_ci#define XENKBD_TYPE_MOTION 1 1818c2ecf20Sopenharmony_ci#define XENKBD_TYPE_RESERVED 2 1828c2ecf20Sopenharmony_ci#define XENKBD_TYPE_KEY 3 1838c2ecf20Sopenharmony_ci#define XENKBD_TYPE_POS 4 1848c2ecf20Sopenharmony_ci#define XENKBD_TYPE_MTOUCH 5 1858c2ecf20Sopenharmony_ci 1868c2ecf20Sopenharmony_ci/* Multi-touch event sub-codes */ 1878c2ecf20Sopenharmony_ci 1888c2ecf20Sopenharmony_ci#define XENKBD_MT_EV_DOWN 0 1898c2ecf20Sopenharmony_ci#define XENKBD_MT_EV_UP 1 1908c2ecf20Sopenharmony_ci#define XENKBD_MT_EV_MOTION 2 1918c2ecf20Sopenharmony_ci#define XENKBD_MT_EV_SYN 3 1928c2ecf20Sopenharmony_ci#define XENKBD_MT_EV_SHAPE 4 1938c2ecf20Sopenharmony_ci#define XENKBD_MT_EV_ORIENT 5 1948c2ecf20Sopenharmony_ci 1958c2ecf20Sopenharmony_ci/* 1968c2ecf20Sopenharmony_ci * CONSTANTS, XENSTORE FIELD AND PATH NAME STRINGS, HELPERS. 1978c2ecf20Sopenharmony_ci */ 1988c2ecf20Sopenharmony_ci 1998c2ecf20Sopenharmony_ci#define XENKBD_DRIVER_NAME "vkbd" 2008c2ecf20Sopenharmony_ci 2018c2ecf20Sopenharmony_ci#define XENKBD_FIELD_FEAT_DSBL_KEYBRD "feature-disable-keyboard" 2028c2ecf20Sopenharmony_ci#define XENKBD_FIELD_FEAT_DSBL_POINTER "feature-disable-pointer" 2038c2ecf20Sopenharmony_ci#define XENKBD_FIELD_FEAT_ABS_POINTER "feature-abs-pointer" 2048c2ecf20Sopenharmony_ci#define XENKBD_FIELD_FEAT_RAW_POINTER "feature-raw-pointer" 2058c2ecf20Sopenharmony_ci#define XENKBD_FIELD_FEAT_MTOUCH "feature-multi-touch" 2068c2ecf20Sopenharmony_ci#define XENKBD_FIELD_REQ_ABS_POINTER "request-abs-pointer" 2078c2ecf20Sopenharmony_ci#define XENKBD_FIELD_REQ_RAW_POINTER "request-raw-pointer" 2088c2ecf20Sopenharmony_ci#define XENKBD_FIELD_REQ_MTOUCH "request-multi-touch" 2098c2ecf20Sopenharmony_ci#define XENKBD_FIELD_RING_GREF "page-gref" 2108c2ecf20Sopenharmony_ci#define XENKBD_FIELD_EVT_CHANNEL "event-channel" 2118c2ecf20Sopenharmony_ci#define XENKBD_FIELD_WIDTH "width" 2128c2ecf20Sopenharmony_ci#define XENKBD_FIELD_HEIGHT "height" 2138c2ecf20Sopenharmony_ci#define XENKBD_FIELD_MT_WIDTH "multi-touch-width" 2148c2ecf20Sopenharmony_ci#define XENKBD_FIELD_MT_HEIGHT "multi-touch-height" 2158c2ecf20Sopenharmony_ci#define XENKBD_FIELD_MT_NUM_CONTACTS "multi-touch-num-contacts" 2168c2ecf20Sopenharmony_ci#define XENKBD_FIELD_UNIQUE_ID "unique-id" 2178c2ecf20Sopenharmony_ci 2188c2ecf20Sopenharmony_ci/* OBSOLETE, not recommended for use */ 2198c2ecf20Sopenharmony_ci#define XENKBD_FIELD_RING_REF "page-ref" 2208c2ecf20Sopenharmony_ci 2218c2ecf20Sopenharmony_ci/* 2228c2ecf20Sopenharmony_ci ***************************************************************************** 2238c2ecf20Sopenharmony_ci * Description of the protocol between frontend and backend driver. 2248c2ecf20Sopenharmony_ci ***************************************************************************** 2258c2ecf20Sopenharmony_ci * 2268c2ecf20Sopenharmony_ci * The two halves of a Para-virtual driver communicate with 2278c2ecf20Sopenharmony_ci * each other using a shared page and an event channel. 2288c2ecf20Sopenharmony_ci * Shared page contains a ring with event structures. 2298c2ecf20Sopenharmony_ci * 2308c2ecf20Sopenharmony_ci * All reserved fields in the structures below must be 0. 2318c2ecf20Sopenharmony_ci * 2328c2ecf20Sopenharmony_ci ***************************************************************************** 2338c2ecf20Sopenharmony_ci * Backend to frontend events 2348c2ecf20Sopenharmony_ci ***************************************************************************** 2358c2ecf20Sopenharmony_ci * 2368c2ecf20Sopenharmony_ci * Frontends should ignore unknown in events. 2378c2ecf20Sopenharmony_ci * All event packets have the same length (40 octets) 2388c2ecf20Sopenharmony_ci * All event packets have common header: 2398c2ecf20Sopenharmony_ci * 2408c2ecf20Sopenharmony_ci * 0 octet 2418c2ecf20Sopenharmony_ci * +-----------------+ 2428c2ecf20Sopenharmony_ci * | type | 2438c2ecf20Sopenharmony_ci * +-----------------+ 2448c2ecf20Sopenharmony_ci * type - uint8_t, event code, XENKBD_TYPE_??? 2458c2ecf20Sopenharmony_ci * 2468c2ecf20Sopenharmony_ci * 2478c2ecf20Sopenharmony_ci * Pointer relative movement event 2488c2ecf20Sopenharmony_ci * 0 1 2 3 octet 2498c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 2508c2ecf20Sopenharmony_ci * | _TYPE_MOTION | reserved | 4 2518c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 2528c2ecf20Sopenharmony_ci * | rel_x | 8 2538c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 2548c2ecf20Sopenharmony_ci * | rel_y | 12 2558c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 2568c2ecf20Sopenharmony_ci * | rel_z | 16 2578c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 2588c2ecf20Sopenharmony_ci * | reserved | 20 2598c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 2608c2ecf20Sopenharmony_ci * |/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/| 2618c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 2628c2ecf20Sopenharmony_ci * | reserved | 40 2638c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 2648c2ecf20Sopenharmony_ci * 2658c2ecf20Sopenharmony_ci * rel_x - int32_t, relative X motion 2668c2ecf20Sopenharmony_ci * rel_y - int32_t, relative Y motion 2678c2ecf20Sopenharmony_ci * rel_z - int32_t, relative Z motion (wheel) 2688c2ecf20Sopenharmony_ci */ 2698c2ecf20Sopenharmony_ci 2708c2ecf20Sopenharmony_cistruct xenkbd_motion { 2718c2ecf20Sopenharmony_ci uint8_t type; 2728c2ecf20Sopenharmony_ci int32_t rel_x; 2738c2ecf20Sopenharmony_ci int32_t rel_y; 2748c2ecf20Sopenharmony_ci int32_t rel_z; 2758c2ecf20Sopenharmony_ci}; 2768c2ecf20Sopenharmony_ci 2778c2ecf20Sopenharmony_ci/* 2788c2ecf20Sopenharmony_ci * Key event (includes pointer buttons) 2798c2ecf20Sopenharmony_ci * 0 1 2 3 octet 2808c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 2818c2ecf20Sopenharmony_ci * | _TYPE_KEY | pressed | reserved | 4 2828c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 2838c2ecf20Sopenharmony_ci * | keycode | 8 2848c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 2858c2ecf20Sopenharmony_ci * | reserved | 12 2868c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 2878c2ecf20Sopenharmony_ci * |/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/| 2888c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 2898c2ecf20Sopenharmony_ci * | reserved | 40 2908c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 2918c2ecf20Sopenharmony_ci * 2928c2ecf20Sopenharmony_ci * pressed - uint8_t, 1 if pressed; 0 otherwise 2938c2ecf20Sopenharmony_ci * keycode - uint32_t, KEY_* from linux/input.h 2948c2ecf20Sopenharmony_ci */ 2958c2ecf20Sopenharmony_ci 2968c2ecf20Sopenharmony_cistruct xenkbd_key { 2978c2ecf20Sopenharmony_ci uint8_t type; 2988c2ecf20Sopenharmony_ci uint8_t pressed; 2998c2ecf20Sopenharmony_ci uint32_t keycode; 3008c2ecf20Sopenharmony_ci}; 3018c2ecf20Sopenharmony_ci 3028c2ecf20Sopenharmony_ci/* 3038c2ecf20Sopenharmony_ci * Pointer absolute position event 3048c2ecf20Sopenharmony_ci * 0 1 2 3 octet 3058c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 3068c2ecf20Sopenharmony_ci * | _TYPE_POS | reserved | 4 3078c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 3088c2ecf20Sopenharmony_ci * | abs_x | 8 3098c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 3108c2ecf20Sopenharmony_ci * | abs_y | 12 3118c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 3128c2ecf20Sopenharmony_ci * | rel_z | 16 3138c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 3148c2ecf20Sopenharmony_ci * | reserved | 20 3158c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 3168c2ecf20Sopenharmony_ci * |/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/| 3178c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 3188c2ecf20Sopenharmony_ci * | reserved | 40 3198c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 3208c2ecf20Sopenharmony_ci * 3218c2ecf20Sopenharmony_ci * abs_x - int32_t, absolute X position (in FB pixels) 3228c2ecf20Sopenharmony_ci * abs_y - int32_t, absolute Y position (in FB pixels) 3238c2ecf20Sopenharmony_ci * rel_z - int32_t, relative Z motion (wheel) 3248c2ecf20Sopenharmony_ci */ 3258c2ecf20Sopenharmony_ci 3268c2ecf20Sopenharmony_cistruct xenkbd_position { 3278c2ecf20Sopenharmony_ci uint8_t type; 3288c2ecf20Sopenharmony_ci int32_t abs_x; 3298c2ecf20Sopenharmony_ci int32_t abs_y; 3308c2ecf20Sopenharmony_ci int32_t rel_z; 3318c2ecf20Sopenharmony_ci}; 3328c2ecf20Sopenharmony_ci 3338c2ecf20Sopenharmony_ci/* 3348c2ecf20Sopenharmony_ci * Multi-touch event and its sub-types 3358c2ecf20Sopenharmony_ci * 3368c2ecf20Sopenharmony_ci * All multi-touch event packets have common header: 3378c2ecf20Sopenharmony_ci * 3388c2ecf20Sopenharmony_ci * 0 1 2 3 octet 3398c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 3408c2ecf20Sopenharmony_ci * | _TYPE_MTOUCH | event_type | contact_id | reserved | 4 3418c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 3428c2ecf20Sopenharmony_ci * | reserved | 8 3438c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 3448c2ecf20Sopenharmony_ci * 3458c2ecf20Sopenharmony_ci * event_type - unt8_t, multi-touch event sub-type, XENKBD_MT_EV_??? 3468c2ecf20Sopenharmony_ci * contact_id - unt8_t, ID of the contact 3478c2ecf20Sopenharmony_ci * 3488c2ecf20Sopenharmony_ci * Touch interactions can consist of one or more contacts. 3498c2ecf20Sopenharmony_ci * For each contact, a series of events is generated, starting 3508c2ecf20Sopenharmony_ci * with a down event, followed by zero or more motion events, 3518c2ecf20Sopenharmony_ci * and ending with an up event. Events relating to the same 3528c2ecf20Sopenharmony_ci * contact point can be identified by the ID of the sequence: contact ID. 3538c2ecf20Sopenharmony_ci * Contact ID may be reused after XENKBD_MT_EV_UP event and 3548c2ecf20Sopenharmony_ci * is in the [0; XENKBD_FIELD_NUM_CONTACTS - 1] range. 3558c2ecf20Sopenharmony_ci * 3568c2ecf20Sopenharmony_ci * For further information please refer to documentation on Wayland [1], 3578c2ecf20Sopenharmony_ci * Linux [2] and Windows [3] multi-touch support. 3588c2ecf20Sopenharmony_ci * 3598c2ecf20Sopenharmony_ci * [1] https://cgit.freedesktop.org/wayland/wayland/tree/protocol/wayland.xml 3608c2ecf20Sopenharmony_ci * [2] https://www.kernel.org/doc/Documentation/input/multi-touch-protocol.rst 3618c2ecf20Sopenharmony_ci * [3] https://msdn.microsoft.com/en-us/library/jj151564(v=vs.85).aspx 3628c2ecf20Sopenharmony_ci * 3638c2ecf20Sopenharmony_ci * 3648c2ecf20Sopenharmony_ci * Multi-touch down event - sent when a new touch is made: touch is assigned 3658c2ecf20Sopenharmony_ci * a unique contact ID, sent with this and consequent events related 3668c2ecf20Sopenharmony_ci * to this touch. 3678c2ecf20Sopenharmony_ci * 0 1 2 3 octet 3688c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 3698c2ecf20Sopenharmony_ci * | _TYPE_MTOUCH | _MT_EV_DOWN | contact_id | reserved | 4 3708c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 3718c2ecf20Sopenharmony_ci * | reserved | 8 3728c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 3738c2ecf20Sopenharmony_ci * | abs_x | 12 3748c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 3758c2ecf20Sopenharmony_ci * | abs_y | 16 3768c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 3778c2ecf20Sopenharmony_ci * | reserved | 20 3788c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 3798c2ecf20Sopenharmony_ci * |/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/| 3808c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 3818c2ecf20Sopenharmony_ci * | reserved | 40 3828c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 3838c2ecf20Sopenharmony_ci * 3848c2ecf20Sopenharmony_ci * abs_x - int32_t, absolute X position, in pixels 3858c2ecf20Sopenharmony_ci * abs_y - int32_t, absolute Y position, in pixels 3868c2ecf20Sopenharmony_ci * 3878c2ecf20Sopenharmony_ci * Multi-touch contact release event 3888c2ecf20Sopenharmony_ci * 0 1 2 3 octet 3898c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 3908c2ecf20Sopenharmony_ci * | _TYPE_MTOUCH | _MT_EV_UP | contact_id | reserved | 4 3918c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 3928c2ecf20Sopenharmony_ci * | reserved | 8 3938c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 3948c2ecf20Sopenharmony_ci * |/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/| 3958c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 3968c2ecf20Sopenharmony_ci * | reserved | 40 3978c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 3988c2ecf20Sopenharmony_ci * 3998c2ecf20Sopenharmony_ci * Multi-touch motion event 4008c2ecf20Sopenharmony_ci * 0 1 2 3 octet 4018c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 4028c2ecf20Sopenharmony_ci * | _TYPE_MTOUCH | _MT_EV_MOTION | contact_id | reserved | 4 4038c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 4048c2ecf20Sopenharmony_ci * | reserved | 8 4058c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 4068c2ecf20Sopenharmony_ci * | abs_x | 12 4078c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 4088c2ecf20Sopenharmony_ci * | abs_y | 16 4098c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 4108c2ecf20Sopenharmony_ci * | reserved | 20 4118c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 4128c2ecf20Sopenharmony_ci * |/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/| 4138c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 4148c2ecf20Sopenharmony_ci * | reserved | 40 4158c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 4168c2ecf20Sopenharmony_ci * 4178c2ecf20Sopenharmony_ci * abs_x - int32_t, absolute X position, in pixels, 4188c2ecf20Sopenharmony_ci * abs_y - int32_t, absolute Y position, in pixels, 4198c2ecf20Sopenharmony_ci * 4208c2ecf20Sopenharmony_ci * Multi-touch input synchronization event - shows end of a set of events 4218c2ecf20Sopenharmony_ci * which logically belong together. 4228c2ecf20Sopenharmony_ci * 0 1 2 3 octet 4238c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 4248c2ecf20Sopenharmony_ci * | _TYPE_MTOUCH | _MT_EV_SYN | contact_id | reserved | 4 4258c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 4268c2ecf20Sopenharmony_ci * | reserved | 8 4278c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 4288c2ecf20Sopenharmony_ci * |/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/| 4298c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 4308c2ecf20Sopenharmony_ci * | reserved | 40 4318c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 4328c2ecf20Sopenharmony_ci * 4338c2ecf20Sopenharmony_ci * Multi-touch shape event - touch point's shape has changed its shape. 4348c2ecf20Sopenharmony_ci * Shape is approximated by an ellipse through the major and minor axis 4358c2ecf20Sopenharmony_ci * lengths: major is the longer diameter of the ellipse and minor is the 4368c2ecf20Sopenharmony_ci * shorter one. Center of the ellipse is reported via 4378c2ecf20Sopenharmony_ci * XENKBD_MT_EV_DOWN/XENKBD_MT_EV_MOTION events. 4388c2ecf20Sopenharmony_ci * 0 1 2 3 octet 4398c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 4408c2ecf20Sopenharmony_ci * | _TYPE_MTOUCH | _MT_EV_SHAPE | contact_id | reserved | 4 4418c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 4428c2ecf20Sopenharmony_ci * | reserved | 8 4438c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 4448c2ecf20Sopenharmony_ci * | major | 12 4458c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 4468c2ecf20Sopenharmony_ci * | minor | 16 4478c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 4488c2ecf20Sopenharmony_ci * | reserved | 20 4498c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 4508c2ecf20Sopenharmony_ci * |/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/| 4518c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 4528c2ecf20Sopenharmony_ci * | reserved | 40 4538c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 4548c2ecf20Sopenharmony_ci * 4558c2ecf20Sopenharmony_ci * major - unt32_t, length of the major axis, pixels 4568c2ecf20Sopenharmony_ci * minor - unt32_t, length of the minor axis, pixels 4578c2ecf20Sopenharmony_ci * 4588c2ecf20Sopenharmony_ci * Multi-touch orientation event - touch point's shape has changed 4598c2ecf20Sopenharmony_ci * its orientation: calculated as a clockwise angle between the major axis 4608c2ecf20Sopenharmony_ci * of the ellipse and positive Y axis in degrees, [-180; +180]. 4618c2ecf20Sopenharmony_ci * 0 1 2 3 octet 4628c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 4638c2ecf20Sopenharmony_ci * | _TYPE_MTOUCH | _MT_EV_ORIENT | contact_id | reserved | 4 4648c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 4658c2ecf20Sopenharmony_ci * | reserved | 8 4668c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 4678c2ecf20Sopenharmony_ci * | orientation | reserved | 12 4688c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 4698c2ecf20Sopenharmony_ci * | reserved | 16 4708c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 4718c2ecf20Sopenharmony_ci * |/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/| 4728c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 4738c2ecf20Sopenharmony_ci * | reserved | 40 4748c2ecf20Sopenharmony_ci * +----------------+----------------+----------------+----------------+ 4758c2ecf20Sopenharmony_ci * 4768c2ecf20Sopenharmony_ci * orientation - int16_t, clockwise angle of the major axis 4778c2ecf20Sopenharmony_ci */ 4788c2ecf20Sopenharmony_ci 4798c2ecf20Sopenharmony_cistruct xenkbd_mtouch { 4808c2ecf20Sopenharmony_ci uint8_t type; /* XENKBD_TYPE_MTOUCH */ 4818c2ecf20Sopenharmony_ci uint8_t event_type; /* XENKBD_MT_EV_??? */ 4828c2ecf20Sopenharmony_ci uint8_t contact_id; 4838c2ecf20Sopenharmony_ci uint8_t reserved[5]; /* reserved for the future use */ 4848c2ecf20Sopenharmony_ci union { 4858c2ecf20Sopenharmony_ci struct { 4868c2ecf20Sopenharmony_ci int32_t abs_x; /* absolute X position, pixels */ 4878c2ecf20Sopenharmony_ci int32_t abs_y; /* absolute Y position, pixels */ 4888c2ecf20Sopenharmony_ci } pos; 4898c2ecf20Sopenharmony_ci struct { 4908c2ecf20Sopenharmony_ci uint32_t major; /* length of the major axis, pixels */ 4918c2ecf20Sopenharmony_ci uint32_t minor; /* length of the minor axis, pixels */ 4928c2ecf20Sopenharmony_ci } shape; 4938c2ecf20Sopenharmony_ci int16_t orientation; /* clockwise angle of the major axis */ 4948c2ecf20Sopenharmony_ci } u; 4958c2ecf20Sopenharmony_ci}; 4968c2ecf20Sopenharmony_ci 4978c2ecf20Sopenharmony_ci#define XENKBD_IN_EVENT_SIZE 40 4988c2ecf20Sopenharmony_ci 4998c2ecf20Sopenharmony_ciunion xenkbd_in_event { 5008c2ecf20Sopenharmony_ci uint8_t type; 5018c2ecf20Sopenharmony_ci struct xenkbd_motion motion; 5028c2ecf20Sopenharmony_ci struct xenkbd_key key; 5038c2ecf20Sopenharmony_ci struct xenkbd_position pos; 5048c2ecf20Sopenharmony_ci struct xenkbd_mtouch mtouch; 5058c2ecf20Sopenharmony_ci char pad[XENKBD_IN_EVENT_SIZE]; 5068c2ecf20Sopenharmony_ci}; 5078c2ecf20Sopenharmony_ci 5088c2ecf20Sopenharmony_ci/* 5098c2ecf20Sopenharmony_ci ***************************************************************************** 5108c2ecf20Sopenharmony_ci * Frontend to backend events 5118c2ecf20Sopenharmony_ci ***************************************************************************** 5128c2ecf20Sopenharmony_ci * 5138c2ecf20Sopenharmony_ci * Out events may be sent only when requested by backend, and receipt 5148c2ecf20Sopenharmony_ci * of an unknown out event is an error. 5158c2ecf20Sopenharmony_ci * No out events currently defined. 5168c2ecf20Sopenharmony_ci 5178c2ecf20Sopenharmony_ci * All event packets have the same length (40 octets) 5188c2ecf20Sopenharmony_ci * All event packets have common header: 5198c2ecf20Sopenharmony_ci * 0 octet 5208c2ecf20Sopenharmony_ci * +-----------------+ 5218c2ecf20Sopenharmony_ci * | type | 5228c2ecf20Sopenharmony_ci * +-----------------+ 5238c2ecf20Sopenharmony_ci * type - uint8_t, event code 5248c2ecf20Sopenharmony_ci */ 5258c2ecf20Sopenharmony_ci 5268c2ecf20Sopenharmony_ci#define XENKBD_OUT_EVENT_SIZE 40 5278c2ecf20Sopenharmony_ci 5288c2ecf20Sopenharmony_ciunion xenkbd_out_event { 5298c2ecf20Sopenharmony_ci uint8_t type; 5308c2ecf20Sopenharmony_ci char pad[XENKBD_OUT_EVENT_SIZE]; 5318c2ecf20Sopenharmony_ci}; 5328c2ecf20Sopenharmony_ci 5338c2ecf20Sopenharmony_ci/* 5348c2ecf20Sopenharmony_ci ***************************************************************************** 5358c2ecf20Sopenharmony_ci * Shared page 5368c2ecf20Sopenharmony_ci ***************************************************************************** 5378c2ecf20Sopenharmony_ci */ 5388c2ecf20Sopenharmony_ci 5398c2ecf20Sopenharmony_ci#define XENKBD_IN_RING_SIZE 2048 5408c2ecf20Sopenharmony_ci#define XENKBD_IN_RING_LEN (XENKBD_IN_RING_SIZE / XENKBD_IN_EVENT_SIZE) 5418c2ecf20Sopenharmony_ci#define XENKBD_IN_RING_OFFS 1024 5428c2ecf20Sopenharmony_ci#define XENKBD_IN_RING(page) \ 5438c2ecf20Sopenharmony_ci ((union xenkbd_in_event *)((char *)(page) + XENKBD_IN_RING_OFFS)) 5448c2ecf20Sopenharmony_ci#define XENKBD_IN_RING_REF(page, idx) \ 5458c2ecf20Sopenharmony_ci (XENKBD_IN_RING((page))[(idx) % XENKBD_IN_RING_LEN]) 5468c2ecf20Sopenharmony_ci 5478c2ecf20Sopenharmony_ci#define XENKBD_OUT_RING_SIZE 1024 5488c2ecf20Sopenharmony_ci#define XENKBD_OUT_RING_LEN (XENKBD_OUT_RING_SIZE / XENKBD_OUT_EVENT_SIZE) 5498c2ecf20Sopenharmony_ci#define XENKBD_OUT_RING_OFFS (XENKBD_IN_RING_OFFS + XENKBD_IN_RING_SIZE) 5508c2ecf20Sopenharmony_ci#define XENKBD_OUT_RING(page) \ 5518c2ecf20Sopenharmony_ci ((union xenkbd_out_event *)((char *)(page) + XENKBD_OUT_RING_OFFS)) 5528c2ecf20Sopenharmony_ci#define XENKBD_OUT_RING_REF(page, idx) \ 5538c2ecf20Sopenharmony_ci (XENKBD_OUT_RING((page))[(idx) % XENKBD_OUT_RING_LEN]) 5548c2ecf20Sopenharmony_ci 5558c2ecf20Sopenharmony_cistruct xenkbd_page { 5568c2ecf20Sopenharmony_ci uint32_t in_cons, in_prod; 5578c2ecf20Sopenharmony_ci uint32_t out_cons, out_prod; 5588c2ecf20Sopenharmony_ci}; 5598c2ecf20Sopenharmony_ci 5608c2ecf20Sopenharmony_ci#endif /* __XEN_PUBLIC_IO_KBDIF_H__ */ 561