The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/include/asm-mips64/shmiq.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*
    2  * This file is subject to the terms and conditions of the GNU General Public
    3  * License.  See the file "COPYING" in the main directory of this archive
    4  * for more details.
    5  *
    6  * Please note that the comments on this file may be out of date
    7  * and that they represent what I have figured about the shmiq device
    8  * so far in IRIX.
    9  *
   10  * This also contains some streams and idev bits.
   11  *
   12  * They may contain errors, please, refer to the source code of the Linux
   13  * kernel for a definitive answer on what we have implemented
   14  *
   15  * Miguel.
   16  */
   17 #ifndef _ASM_SHMIQ_H
   18 #define _ASM_SHMIQ_H
   19 
   20 /* STREAMs ioctls */
   21 #define STRIOC    ('S' << 8)
   22 #define I_STR     (STRIOC | 010)
   23 #define I_PUSH    (STRIOC | 02)
   24 #define I_LINK    (STRIOC | 014)
   25 #define I_UNLINK  (STRIOC | 015)
   26 
   27 /* Data structure passed on I_STR ioctls */
   28 struct strioctl {
   29         int     ic_cmd;                 /* streams ioctl command */
   30         int     ic_timout;              /* timeout */
   31         int     ic_len;                 /* lenght of data */
   32         void    *ic_dp;                 /* data */
   33 };
   34 
   35 /*
   36  * For mapping the shared memory input queue, you have to:
   37  *
   38  * 1. Map /dev/zero for the number of bytes you want to use
   39  *    for your shared memory input queue plus the size of the
   40  *    sharedMemoryInputQueue structure + 4 (I still have not figured
   41  *    what this one is for
   42  *
   43  * 2. Open /dev/shmiq
   44  *
   45  * 3. Open /dev/qcntlN N is [0..Nshmiqs]
   46  *
   47  * 4. Fill a shmiqreq structure.  user_vaddr should point to the return
   48  *    address from the /dev/zero mmap.  Arg is the number of shmqevents
   49  *    that fit into the /dev/zero region (remember that at the beginning there
   50  *    is a sharedMemoryInputQueue header).
   51  *
   52  * 5. Issue the ioctl (qcntlfd, QIOCATTACH, &your_shmiqreq);
   53  */
   54 
   55 struct shmiqreq {
   56         char *user_vaddr;
   57         int  arg;
   58 };
   59 
   60 /* map the shmiq into the process address space */
   61 #define QIOCATTACH       _IOW('Q',1,struct shmiqreq)
   62 
   63 /* remove mappings */
   64 #define QIOCDETACH       _IO('Q',2)
   65 
   66 /*
   67  * A shared memory input queue event.
   68  */
   69 struct shmqdata {
   70         unsigned char device;          /* device major */
   71         unsigned char which;           /* device minor */
   72         unsigned char type;            /* event type */
   73         unsigned char flags;           /* little event data */
   74         union {
   75             int pos;                   /* big event data */
   76             short ptraxis [2];         /* event data for PTR events */
   77         } un;
   78 };
   79 
   80 /* indetifies the shmiq and the device */
   81 struct shmiqlinkid {
   82         short int devminor;
   83         short int index;
   84 };
   85 
   86 struct shmqevent {
   87         union {
   88                 int time;
   89                 struct shmiqlinkid id;
   90         } un ;
   91         struct shmqdata data ;
   92 };
   93 
   94 /*
   95  * sharedMemoryInputQueue: this describes the shared memory input queue.
   96  *
   97  * head   is the user index into the events, user can modify this one.
   98  * tail   is managed by the kernel.
   99  * flags  is one of SHMIQ_OVERFLOW or SHMIQ_CORRUPTED
  100  *        if OVERFLOW is set it seems ioctl QUIOCSERVICED should be called
  101  *        to notify the kernel.
  102  * events where the kernel sticks the events.
  103  */
  104 struct sharedMemoryInputQueue {
  105         volatile int head;           /* user's index into events */
  106         volatile int tail;           /* kernel's index into events */
  107         volatile unsigned int flags; /* place for out-of-band data */
  108 #define SHMIQ_OVERFLOW  1
  109 #define SHMIQ_CORRUPTED 2
  110         struct shmqevent events[1];  /* input event buffer */
  111 };
  112 
  113 /* have to figure this one out */
  114 #define QIOCGETINDX      _IOWR('Q', 8, int)
  115 
  116 
  117 /* acknowledge shmiq overflow */
  118 #define QIOCSERVICED     _IO('Q', 3)
  119 
  120 /* Double indirect I_STR ioctl, yeah, fun fun fun */
  121 
  122 struct muxioctl {
  123         int index;              /* lower stream index */
  124         int realcmd;            /* the actual command for the subdevice */
  125 };
  126 /* Double indirect ioctl */
  127 #define QIOCIISTR        _IOW('Q', 7, struct muxioctl)
  128 
  129 /* Cursor ioclts: */
  130 
  131 /* set cursor tracking mode */
  132 #define QIOCURSTRK      _IOW('Q', 4, int)
  133 
  134 /* set cursor filter box */
  135 #define QIOCURSIGN      _IOW('Q', 5, int [4])
  136 
  137 /* set cursor axes */
  138 struct shmiqsetcurs {
  139         short index;
  140         short axes;
  141 };
  142 
  143 #define QIOCSETCURS     _IOWR('Q',  9, struct shmiqsetcurs)
  144 
  145 /* set cursor position */
  146 struct shmiqsetcpos {
  147         short   x;
  148         short   y;
  149 };
  150 #define QIOCSETCPOS     _IOWR('Q', 10, struct shmiqsetcpos)
  151 
  152 /* get time since last event */
  153 #define QIOCGETITIME    _IOR('Q', 11, time_t)
  154 
  155 /* set current screen */
  156 #define QIOCSETSCRN     _IOW('Q',6,int)
  157 
  158 
  159 /* -------------------- iDev stuff -------------------- */
  160 
  161 #define IDEV_MAX_NAME_LEN 15
  162 #define IDEV_MAX_TYPE_LEN 15
  163 
  164 typedef struct {
  165         char            devName[IDEV_MAX_NAME_LEN+1];
  166         char            devType[IDEV_MAX_TYPE_LEN+1];
  167         unsigned short  nButtons;
  168         unsigned short  nValuators;
  169         unsigned short  nLEDs;
  170         unsigned short  nStrDpys;
  171         unsigned short  nIntDpys;
  172         unsigned char   nBells;
  173         unsigned char   flags;
  174 #define IDEV_HAS_KEYMAP         0x01
  175 #define IDEV_HAS_PROXIMITY      0x02
  176 #define IDEV_HAS_PCKBD          0x04
  177 } idevDesc;
  178 
  179 typedef struct {
  180         char *nothing_for_now;
  181 } idevInfo;
  182 
  183 #define IDEV_KEYMAP_NAME_LEN 15
  184 
  185 typedef struct {
  186         char name[IDEV_KEYMAP_NAME_LEN+1];
  187 } idevKeymapDesc;
  188 
  189 /* The valuator definition */
  190 typedef struct {
  191         unsigned        hwMinRes;
  192         unsigned        hwMaxRes;
  193         int             hwMinVal;
  194         int             hwMaxVal;
  195 
  196         unsigned char   possibleModes;
  197 #define IDEV_ABSOLUTE           0x0
  198 #define IDEV_RELATIVE           0x1
  199 #define IDEV_EITHER             0x2
  200 
  201         unsigned char   mode;   /* One of: IDEV_ABSOLUTE, IDEV_RELATIVE */
  202 
  203         unsigned short  resolution;
  204         int             minVal;
  205         int             maxVal;
  206 } idevValuatorDesc;
  207 
  208 /* This is used to query a specific valuator with the IDEVGETVALUATORDESC ioctl */
  209 typedef struct {
  210         short                   valNum;
  211         unsigned short          flags;
  212         idevValuatorDesc        desc;
  213 } idevGetSetValDesc;
  214 
  215 #define IDEVGETDEVICEDESC       _IOWR('i', 0,  idevDesc)
  216 #define IDEVGETVALUATORDESC     _IOWR('i', 1,  idevGetSetValDesc)
  217 #define IDEVGETKEYMAPDESC       _IOWR('i', 2,  idevKeymapDesc)
  218 #define IDEVINITDEVICE          _IOW ('i', 51, unsigned int)
  219 
  220 
  221 #ifdef __KERNEL__
  222 
  223 /* These are only interpreted by SHMIQ-attacheable devices and are internal
  224  * to the kernel
  225  */
  226 #define SHMIQ_OFF        _IO('Q',1)
  227 #define SHMIQ_ON         _IO('Q',2)
  228 
  229 void shmiq_push_event (struct shmqevent *e);
  230 int get_sioc (struct strioctl *sioc, unsigned long arg);
  231 #endif
  232 
  233 #endif /* _ASM_SHMIQ_H */

Cache object: c57f432304ee31829195ddeb8f967419


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.