Annotation of Gnu-Mach/xen/public/io/kbdif.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * kbdif.h -- Xen virtual keyboard/mouse
                      3:  *
                      4:  * Permission is hereby granted, free of charge, to any person obtaining a copy
                      5:  * of this software and associated documentation files (the "Software"), to
                      6:  * deal in the Software without restriction, including without limitation the
                      7:  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
                      8:  * sell copies of the Software, and to permit persons to whom the Software is
                      9:  * furnished to do so, subject to the following conditions:
                     10:  *
                     11:  * The above copyright notice and this permission notice shall be included in
                     12:  * all copies or substantial portions of the Software.
                     13:  *
                     14:  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
                     15:  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
                     16:  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
                     17:  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
                     18:  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
                     19:  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
                     20:  * DEALINGS IN THE SOFTWARE.
                     21:  *
                     22:  * Copyright (C) 2005 Anthony Liguori <[email protected]>
                     23:  * Copyright (C) 2006 Red Hat, Inc., Markus Armbruster <[email protected]>
                     24:  */
                     25: 
                     26: #ifndef __XEN_PUBLIC_IO_KBDIF_H__
                     27: #define __XEN_PUBLIC_IO_KBDIF_H__
                     28: 
                     29: /* In events (backend -> frontend) */
                     30: 
                     31: /*
                     32:  * Frontends should ignore unknown in events.
                     33:  */
                     34: 
                     35: /* Pointer movement event */
                     36: #define XENKBD_TYPE_MOTION  1
                     37: /* Event type 2 currently not used */
                     38: /* Key event (includes pointer buttons) */
                     39: #define XENKBD_TYPE_KEY     3
                     40: /*
                     41:  * Pointer position event
                     42:  * Capable backend sets feature-abs-pointer in xenstore.
                     43:  * Frontend requests ot instead of XENKBD_TYPE_MOTION by setting
                     44:  * request-abs-update in xenstore.
                     45:  */
                     46: #define XENKBD_TYPE_POS     4
                     47: 
                     48: struct xenkbd_motion
                     49: {
                     50:     uint8_t type;        /* XENKBD_TYPE_MOTION */
                     51:     int32_t rel_x;       /* relative X motion */
                     52:     int32_t rel_y;       /* relative Y motion */
                     53:     int32_t rel_z;       /* relative Z motion (wheel) */
                     54: };
                     55: 
                     56: struct xenkbd_key
                     57: {
                     58:     uint8_t type;         /* XENKBD_TYPE_KEY */
                     59:     uint8_t pressed;      /* 1 if pressed; 0 otherwise */
                     60:     uint32_t keycode;     /* KEY_* from linux/input.h */
                     61: };
                     62: 
                     63: struct xenkbd_position
                     64: {
                     65:     uint8_t type;        /* XENKBD_TYPE_POS */
                     66:     int32_t abs_x;       /* absolute X position (in FB pixels) */
                     67:     int32_t abs_y;       /* absolute Y position (in FB pixels) */
                     68:     int32_t rel_z;       /* relative Z motion (wheel) */
                     69: };
                     70: 
                     71: #define XENKBD_IN_EVENT_SIZE 40
                     72: 
                     73: union xenkbd_in_event
                     74: {
                     75:     uint8_t type;
                     76:     struct xenkbd_motion motion;
                     77:     struct xenkbd_key key;
                     78:     struct xenkbd_position pos;
                     79:     char pad[XENKBD_IN_EVENT_SIZE];
                     80: };
                     81: 
                     82: /* Out events (frontend -> backend) */
                     83: 
                     84: /*
                     85:  * Out events may be sent only when requested by backend, and receipt
                     86:  * of an unknown out event is an error.
                     87:  * No out events currently defined.
                     88:  */
                     89: 
                     90: #define XENKBD_OUT_EVENT_SIZE 40
                     91: 
                     92: union xenkbd_out_event
                     93: {
                     94:     uint8_t type;
                     95:     char pad[XENKBD_OUT_EVENT_SIZE];
                     96: };
                     97: 
                     98: /* shared page */
                     99: 
                    100: #define XENKBD_IN_RING_SIZE 2048
                    101: #define XENKBD_IN_RING_LEN (XENKBD_IN_RING_SIZE / XENKBD_IN_EVENT_SIZE)
                    102: #define XENKBD_IN_RING_OFFS 1024
                    103: #define XENKBD_IN_RING(page) \
                    104:     ((union xenkbd_in_event *)((char *)(page) + XENKBD_IN_RING_OFFS))
                    105: #define XENKBD_IN_RING_REF(page, idx) \
                    106:     (XENKBD_IN_RING((page))[(idx) % XENKBD_IN_RING_LEN])
                    107: 
                    108: #define XENKBD_OUT_RING_SIZE 1024
                    109: #define XENKBD_OUT_RING_LEN (XENKBD_OUT_RING_SIZE / XENKBD_OUT_EVENT_SIZE)
                    110: #define XENKBD_OUT_RING_OFFS (XENKBD_IN_RING_OFFS + XENKBD_IN_RING_SIZE)
                    111: #define XENKBD_OUT_RING(page) \
                    112:     ((union xenkbd_out_event *)((char *)(page) + XENKBD_OUT_RING_OFFS))
                    113: #define XENKBD_OUT_RING_REF(page, idx) \
                    114:     (XENKBD_OUT_RING((page))[(idx) % XENKBD_OUT_RING_LEN])
                    115: 
                    116: struct xenkbd_page
                    117: {
                    118:     uint32_t in_cons, in_prod;
                    119:     uint32_t out_cons, out_prod;
                    120: };
                    121: 
                    122: #endif
                    123: 
                    124: /*
                    125:  * Local variables:
                    126:  * mode: C
                    127:  * c-set-style: "BSD"
                    128:  * c-basic-offset: 4
                    129:  * tab-width: 4
                    130:  * indent-tabs-mode: nil
                    131:  * End:
                    132:  */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.