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/dev/qbus/qduser.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 /*      $NetBSD: qduser.h,v 1.7 2005/12/11 12:23:29 christos Exp $      */
    2 /*-
    3  * Copyright (c) 1982, 1986 The Regents of the University of California.
    4  * All rights reserved.
    5  *
    6  * Redistribution and use in source and binary forms, with or without
    7  * modification, are permitted provided that the following conditions
    8  * are met:
    9  * 1. Redistributions of source code must retain the above copyright
   10  *    notice, this list of conditions and the following disclaimer.
   11  * 2. Redistributions in binary form must reproduce the above copyright
   12  *    notice, this list of conditions and the following disclaimer in the
   13  *    documentation and/or other materials provided with the distribution.
   14  * 3. Neither the name of the University nor the names of its contributors
   15  *    may be used to endorse or promote products derived from this software
   16  *    without specific prior written permission.
   17  *
   18  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   19  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   20  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   21  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   22  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   23  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   24  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   25  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   26  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   27  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   28  * SUCH DAMAGE.
   29  *
   30  *      @(#)qduser.h    7.1 (Berkeley) 5/9/91
   31  */
   32 
   33 /* derived from: @(#)qduser.h   6.1     (ULTRIX)        11/24/87       */
   34 /************************************************************************
   35  *                                                                      *
   36  *                      Copyright (c) 1986 by                           *
   37  *              Digital Equipment Corporation, Maynard, MA              *
   38  *                      All rights reserved.                            *
   39  *                                                                      *
   40  *   This software is furnished under a license and may be used and     *
   41  *   copied  only  in accordance with the terms of such license and     *
   42  *   with the  inclusion  of  the  above  copyright  notice.   This     *
   43  *   software  or  any  other copies thereof may not be provided or     *
   44  *   otherwise made available to any other person.  No title to and     *
   45  *   ownership of the software is hereby transferred.                   *
   46  *                                                                      *
   47  *   The information in this software is subject to change  without     *
   48  *   notice  and should not be construed as a commitment by Digital     *
   49  *   Equipment Corporation.                                             *
   50  *                                                                      *
   51  *   Digital assumes no responsibility for the use  or  reliability     *
   52  *   of its software on equipment which is not supplied by Digital.     *
   53  *                                                                      *
   54  ************************************************************************/
   55 
   56 /***************************************************************************
   57 *
   58 *       QDUSER...
   59 *       This file defines values shared between the driver and a client
   60 *
   61 ***************************************************************************/
   62 
   63 /***************************************************************************
   64 *       revision history:
   65 ****************************************************************************
   66 *
   67 * 21 jul 86  ram    fixed define of CURSOR_MIN_Y
   68 * 25 nov 85  longo  added macro and bit defines for DMA error flags
   69 * 11 nov 85  longo  renamed _vs_eventqueue to "qdinput" struct
   70 * 23 oct 85  longo  added more defines to the DMA stuff
   71 * 17 oct 85  longo  changed "struct rgb" chars to be unsigned
   72 * 16 oct 85  longo  added new TABLET support definitions
   73 * 15 oct 85  longo  re-wrote DMA queue access macros
   74 * 08 oct 85  longo  added status flag manipulation macros to DMA stuff
   75 * 02 oct 85  longo  added support for color map write buffer loading
   76 * 26 sep 85  longo  removed adder sertup params from DMA request struct
   77 * 23 sep 85  longo  added DMA queue access macros
   78 * 30 aug 85  longo  fixed crock in "qdiobuf" struct compile-time sizing. Also
   79 *                   removed DMAcontrol struct from DMA buffer for field test
   80 * 26 aug 85  longo  put in conditional include of "qevent.h" for user prg's
   81 * 18 jul 85  longo  changed semantics so that head is tail and tail is head
   82 * 12 jul 85  longo  moved "mouse_report" struct and defs over to qd_data.c
   83 * 11 jul 85  longo  added device coordinate to gate array cursor coordinate
   84 *                   transformation macros
   85 * 03 jul 85  longo  changed kernel typdef's for data types to long-hand
   86 * 10 may 85  longo  created
   87 *
   88 ***************************************************************************/
   89 
   90 #include <dev/qbus/qevent.h>
   91 
   92 /*---------------------
   93 * QDSS device map */
   94 
   95         struct qdmap {                  /* map of register blocks in QDSS */
   96 
   97             char *template;
   98             char *adder;
   99             char *dga;
  100             char *duart;
  101             char *memcsr;
  102             char *red;
  103             char *blue;
  104             char *green;
  105         };
  106 
  107 /*--------------------------------------------
  108 * DGA CSR bit definitions and register map */
  109 
  110 #define DMADONE         0x8000          /* DMA done status */
  111 #define SET_DONE_FIFO   0x4000          /* set DMADONE when FIFO empty.. */
  112                                         /* ..AND count = 0 */
  113 
  114 #define PTOB_ENB        0x0600          /* host-to-bitmap DMA xfer */
  115 #define BTOP_ENB        0x0400          /* bitmap-to-host DMA xfer */
  116 #define DL_ENB          0x0200          /* display list DMA xfer */
  117 #define HALT            0x0000          /* halt DGA */
  118 
  119 #define BYTE_DMA        0x0100          /* byte/word DMA xfer */
  120 
  121 #define DMA_ERR         0x0080          /* DMA error bits */
  122 #define PARITY_ERR      0x0040          /* memory parity error in DMA */
  123 #define BUS_ERR         0x0020          /* bus timeout error in DMA */
  124 
  125 #define GLOBAL_IE       0x0004          /* global interrupt enable */
  126 #define DMA_IE          0x0002          /* DMA interrupt enable */
  127 #define CURS_ENB        0x0001          /* cursor enable */
  128 
  129 /* QDSS memcsr bit definitions */
  130 
  131 #define UNBLANK                 0x0020
  132 #define SYNC_ON                 0x0008
  133 
  134         struct dga {
  135 
  136             unsigned short csr;
  137             unsigned short adrs_lo;     /* destination address of bitmap to */
  138             unsigned short adrs_hi;     /*   host DMA */
  139             unsigned short bytcnt_lo;   /* byte length of requested DMA */
  140             unsigned short bytcnt_hi;   /* (WO = bytcnt) (RO = fifo count) */
  141             unsigned short fifo;        /* FIFO register */
  142             unsigned short x_cursor;    /* cursor position registers */
  143             unsigned short y_cursor;
  144             unsigned short ivr;         /* interrupt vector register */
  145             unsigned short memadr;      /* memory base address register */
  146         };
  147 
  148 /*-------------------------------------------------------------------------
  149 * macros to transform device coordinates to hardware cursor coordinates */
  150 
  151 #define CURS_MIN_X      232     /* device coordinate x = 0 */
  152 #define CURS_MIN_Y      16      /* device coordinate y = 0 */
  153 
  154 #define TRANX(x) ( -(((int)(x)+CURS_MIN_X) & ~0x0003) | \
  155                    (((int)(x)+CURS_MIN_X) & 0x0003) )
  156 
  157 #define TRANY(y) ( -((y)+CURS_MIN_Y) )
  158 
  159 /*********************************************************************
  160 *
  161 *       EVENT QUEUE DEFINITIONS
  162 *
  163 **********************************************************************
  164 * most of the event queue definitions are found in "qevent.h".  But a
  165 * few things not found there are here.  */
  166 
  167 /* The event queue header */
  168 
  169 struct qdinput {
  170 
  171             struct _vs_eventqueue header;  /* event queue ring handling */
  172 
  173             /* for VS100 and QVSS compatibility reasons, additions to this
  174             *  structure must be made below this point.  */
  175 
  176             struct _vs_cursor curs_pos; /* current mouse position */
  177             struct _vs_box curs_box;    /* cursor reporting box */
  178 
  179         };
  180 
  181 /* vse_key field.  definitions for mouse buttons */
  182 
  183 #define VSE_LEFT_BUTTON         0
  184 #define VSE_MIDDLE_BUTTON       1
  185 #define VSE_RIGHT_BUTTON        2
  186 
  187 /* vse_key field.  definitions for mouse buttons */
  188 
  189 #define VSE_T_LEFT_BUTTON       0
  190 #define VSE_T_FRONT_BUTTON      1
  191 #define VSE_T_RIGHT_BUTTON      2
  192 #define VSE_T_BACK_BUTTON       4
  193 
  194 #define VSE_T_BARREL_BUTTON     VSE_T_LEFT_BUTTON
  195 #define VSE_T_TIP_BUTTON        VSE_T_FRONT_BUTTON
  196 
  197 /*--------------------------------------------------------------------------
  198 *   These are the macros to be used for loading and extracting from the event
  199 * queue.  It is presumed that the macro user will only use the access macros
  200 * if the event queue is non-empty ( ISEMPTY(eq) == FALSE ), and that the
  201 * driver will only load the event queue after checking that it is not full
  202 * ( ISFULL(eq) == FALSE ).  ("eq" is a pointer to the event queue header.)
  203 *
  204 *   Before an event access session for a particular event, the macro users
  205 * must use the xxxBEGIN macro, and the xxxEND macro after an event is through
  206 * with.  As seen below, the xxxBEGIN and xxxEND macros maintain the event
  207 * queue access mechanism.
  208 *
  209 * First, the macros to be used by the event queue reader
  210 */
  211 
  212 #define ISEMPTY(eq)       ((eq)->header.head == (eq)->header.tail)
  213 #define GETBEGIN(eq)      (&(eq)->header.events[(eq)->header.head])
  214 
  215 #define GET_X(event)      ((event)->vse_x)              /* get x position */
  216 #define GET_Y(event)      ((event)->vse_y)              /* get y position */
  217 #define GET_TIME(event)   ((event)->vse_time)           /* get time */
  218 #define GET_TYPE(event)   ((event)->vse_type)           /* get entry type */
  219 #define GET_KEY(event)    ((event)->vse_key)            /* get keycode */
  220 #define GET_DIR(event)    ((event)->vse_direction)      /* get direction */
  221 #define GET_DEVICE(event) ((event)->vse_device)         /* get device */
  222 
  223 #define GETEND(eq)        (++(eq)->header.head >= (eq)->header.size ? \
  224                            (eq)->header.head = 0 : 0 )
  225 
  226 /*------------------------------------------------
  227 * macros to be used by the event queue loader  */
  228 
  229         /* ISFULL yields TRUE if queue is full */
  230 
  231 #define ISFULL(eq)      ((eq)->header.tail+1 == (eq)->header.head ||   \
  232                          ((eq)->header.tail+1 == (eq)->header.size &&  \
  233                           (eq)->header.head == 0))
  234 
  235         /* get address of the billet for NEXT event */
  236 
  237 #define PUTBEGIN(eq)    (&(eq)->header.events[(eq)->header.tail])
  238 
  239 #define PUT_X(event, value)     ((event)->vse_x = value)    /* put X pos */
  240 #define PUT_Y(event, value)     ((event)->vse_y = value)    /* put Y pos */
  241 #define PUT_TIME(event, value)  ((event)->vse_time = value)   /* put time */
  242 #define PUT_TYPE(event, value)  ((event)->vse_type = value) /* put type */
  243 #define PUT_KEY(event, value)   ((event)->vse_key = value) /* put input key */
  244 #define PUT_DIR(event, value)   ((event)->vse_direction = value) /* put dir */
  245 #define PUT_DEVICE(event, value) ((event)->vse_device = value)   /* put dev */
  246 
  247 #define PUTEND(eq)      (++(eq)->header.tail >= (eq)->header.size ?  \
  248                          (eq)->header.tail = 0 : 0)
  249 
  250 /******************************************************************
  251 *
  252 *       DMA I/O DEFINITIONS
  253 *
  254 ******************************************************************/
  255 
  256 /*---------------------------------------------------------------------
  257 * The DMA request queue is implemented as a ring buffer of "DMAreq"
  258   structures.  The queue is accessed using ring indices located in the
  259   "DMAreq_header" structure.  Access is implemented using access macros
  260   similar to the event queue access macros above.  */
  261 
  262         struct DMAreq {
  263 
  264             short DMAtype;              /* DMA type code (for QDSS) */
  265             short DMAdone;              /* DMA done parameter */
  266             char  *bufp;                /* virtual adrs of buffer */
  267             int   length;               /* transfer buffer length */
  268         };
  269 
  270 /* DMA type command codes */
  271 
  272 #define DISPLIST        1       /* display list DMA */
  273 #define PTOB            2       /* 1 plane Qbus to bitmap DMA */
  274 #define BTOP            3       /* 1 plane bitmap to Qbus DMA */
  275 
  276 /* DMA done notification code */
  277 
  278 #define FIFO_EMPTY      0x01    /* DONE when FIFO becomes empty */
  279 #define COUNT_ZERO      0x02    /* DONE when count becomes zero */
  280 #define WORD_PACK       0x04    /* program the gate array for word packing */
  281 #define BYTE_PACK       0x08    /* program gate array for byte packing */
  282 #define REQUEST_DONE    0x100   /* clear when driver has processed request */
  283 #define HARD_ERROR      0x200   /* DMA hardware error occurred */
  284 
  285 /* DMA request queue is a ring buffer of request structures */
  286 
  287         struct DMAreq_header {
  288 
  289             int QBAreg;             /* cookie Qbus map reg for this buffer */
  290             short status;           /* master DMA status word */
  291             int shared_size;        /* size of shared memory in bytes */
  292             struct DMAreq *DMAreq;  /* start address of request queue */
  293             int used;               /* # of queue entries currently used */
  294             int size;               /* # of "DMAreq"'s in the request queue */
  295             int oldest;             /* index to oldest queue'd request */
  296             int newest;             /* index to newest queue'd request */
  297         };
  298 
  299 /* bit definitions for DMAstatus word in DMAreq_header */
  300 
  301 #define DMA_ACTIVE      0x0004          /* DMA in progress */
  302 #define DMA_ERROR       0x0080          /* DMA hardware error */
  303 #define DMA_IGNORE      0x0002          /* flag to ignore this interrupt */
  304 
  305 /*------------------------------------------
  306 * macros for DMA request queue fiddling  */
  307 
  308         /* DMA status set/check macros */
  309 
  310 #define DMA_SETACTIVE(header)   ((header)->status |= DMA_ACTIVE)
  311 #define DMA_CLRACTIVE(header)   ((header)->status &= ~DMA_ACTIVE)
  312 #define DMA_ISACTIVE(header)    ((header)->status & DMA_ACTIVE)
  313 
  314 #define DMA_SETERROR(header)    ((header)->status |= DMA_ERROR)
  315 #define DMA_CLRERROR(header)    ((header)->status &= ~DMA_ERROR)
  316 #define DMA_ISERROR(header)     ((header)->status & DMA_ERROR)
  317 
  318 #define DMA_SETIGNORE(header)   ((header)->status |= DMA_IGNORE)
  319 #define DMA_CLRIGNORE(header)   ((header)->status &= ~DMA_IGNORE)
  320 #define DMA_ISIGNORE(header)    ((header)->status & DMA_IGNORE)
  321 
  322         /* yields TRUE if queue is empty (ISEMPTY) or full (ISFULL) */
  323 
  324 #define DMA_ISEMPTY(header)     ((header)->used == 0)
  325 #define DMA_ISFULL(header)      ((header)->used >= (header)->size)
  326 
  327         /* returns address of the billet for next (PUT)
  328          * or oldest (GET) request */
  329 
  330 #define DMA_PUTBEGIN(header)    (&(header)->DMAreq[(header)->newest])
  331 #define DMA_GETBEGIN(header)    (&(header)->DMAreq[(header)->oldest])
  332 
  333         /* does queue access pointer maintenance */
  334 
  335 #define DMA_GETEND(header)      (++(header)->oldest >= (header)->size   \
  336                                   ? (header)->oldest = 0 : 0);          \
  337                                 --(header)->used;
  338 
  339 #define DMA_PUTEND(header)      (++(header)->newest >= (header)->size   \
  340                                   ? (header)->newest = 0 : 0);          \
  341                                 ++(header)->used;
  342 
  343 /******************************************************************
  344 *
  345 *       COLOR MAP WRITE BUFFER DEFINITIONS
  346 *
  347 ******************************************************************/
  348 
  349         struct rgb {
  350 
  351             unsigned char offset;       /* color map address for load */
  352             unsigned char red;          /* data for red map */
  353             unsigned char green;        /* data for green map */
  354             unsigned char blue;         /* data for blue map */
  355         };
  356 
  357         struct color_buf {
  358 
  359             char status;                /* load request/service status */
  360             short count;                /* number of entries to br loaded */
  361             struct rgb rgb[256];
  362         };
  363 
  364 #define LOAD_COLOR_MAP  0x0001
  365 
  366 /******************************************************************
  367 *
  368 *       SCROLL ASSIST DEFINITIONS
  369 *
  370 ******************************************************************/
  371 
  372         struct scroll {
  373 
  374             short status;
  375             short viper_constant;
  376             short y_scroll_constant;
  377             short y_offset;
  378             short x_index_pending;
  379             short y_index_pending;
  380         };
  381 
  382 #define LOAD_REGS       0x0001
  383 #define LOAD_INDEX      0x0002
  384 
  385 /******************************************************************
  386 *
  387 *       MOUSE/TABLET/KBD PROGRAMMING DEFINITIONS
  388 *
  389 ******************************************************************/
  390 
  391 /*-----------------------------------
  392 * LK201 programmming definitions  */
  393 
  394 #define LK_UPDOWN       0x86            /* bits for setting lk201 modes */
  395 #define LK_AUTODOWN     0x82
  396 #define LK_DOWN         0x80
  397 #define LK_DEFAULTS     0xD3            /* reset (some) default settings */
  398 #define LK_AR_ENABLE    0xE3            /* global auto repeat enable */
  399 #define LK_CL_ENABLE    0x1B            /* keyclick enable */
  400 #define LK_KBD_ENABLE   0x8B            /* keyboard enable */
  401 #define LK_BELL_ENABLE  0x23            /* the bell */
  402 #define LK_RING_BELL    0xA7            /* ring keyboard bell */
  403 
  404 #define LK_LED_ENABLE   0x13            /* light led */
  405 #define LK_LED_DISABLE  0x11            /* turn off led */
  406 #define LED_1           0x81            /* led bits */
  407 #define LED_2           0x82
  408 #define LED_3           0x84
  409 #define LED_4           0x88
  410 #define LED_ALL         0x8F
  411 #define LK_LED_HOLD     LED_4
  412 #define LK_LED_LOCK     LED_3
  413 #define LK_LED_COMPOSE  LED_2
  414 #define LK_LED_WAIT     LED_1
  415 
  416 #define LK_KDOWN_ERROR  0x3D            /* key down on powerup error */
  417 #define LK_POWER_ERROR  0x3E            /* keyboard failure on powerup test */
  418 #define LK_OUTPUT_ERROR 0xB5            /* keystrokes lost during inhibit */
  419 #define LK_INPUT_ERROR  0xB6            /* garbage command to keyboard */
  420 #define LK_LOWEST       0x56            /* lowest significant keycode */
  421 #define LK_DIV6_START   0xAD            /* start of div 6 */
  422 #define LK_DIV5_END     0xB2            /* end of div 5 */
  423 
  424 #define LAST_PARAM      0x80            /* "no more params" bit */
  425 
  426         struct prgkbd {
  427 
  428             short cmd;                  /* LK201 command opcode */
  429             short param1;               /* 1st cmd parameter (can be null) */
  430             short param2;               /* 2nd cmd parameter (can be null) */
  431         };
  432 
  433 /*-------------------------
  434 * "special" LK-201 keys */
  435 
  436 #define SHIFT           174
  437 #define LOCK            176
  438 #define REPEAT          180
  439 #define CNTRL           175
  440 #define ALLUP           179
  441 
  442 /*--------------------------------
  443 * cursor programming structure */
  444 
  445         struct prg_cursor {
  446 
  447             unsigned short acc_factor;  /* cursor aceleration factor */
  448             unsigned short threshold;   /* threshold to trigger acc at */
  449         };
  450 
  451 /*---------------------
  452 * mouse definitions */
  453 
  454 #define INC_STREAM_MODE 'R'             /* stream mode reports (55 hz) */
  455 #define PROMPT_MODE     'D'             /* report when prompted */
  456 #define REQUEST_POS     'P'             /* request position report */
  457 #define SELF_TEST       'T'             /* request self test */
  458 
  459 #define MOUSE_ID        0x2             /* mouse ID in lo 4 bits */
  460 
  461 #define START_FRAME     0x80            /* start of report frame bit */
  462 #define X_SIGN          0x10            /* position sign bits */
  463 #define Y_SIGN          0x08
  464 
  465 #define RIGHT_BUTTON    0x01            /* mouse buttons */
  466 #define MIDDLE_BUTTON   0x02
  467 #define LEFT_BUTTON     0x04
  468 
  469         /* mouse report structure definition */
  470 
  471         struct mouse_report {
  472 
  473             char state;         /* buttons and sign bits */
  474             short dx;           /* delta X since last change */
  475             short dy;           /* delta Y since last change */
  476             char bytcnt;        /* mouse report byte count */
  477         };
  478 
  479 /*-----------------------------------------
  480 * tablet command/interface definitions  */
  481 
  482 #define T_STREAM        'R'             /* continuous stream report mode */
  483 #define T_POINT         'D'             /* enter report-on-request mode */
  484 #define T_REQUEST       'P'             /* request position report */
  485 
  486 #define T_BAUD          'B'             /* increase baud to 9600 from 4800 */
  487 #define T_RATE_55       'K'             /* report rate: 55/sec */
  488 #define T_RATE_72       'L'             /* report rate: 72/sec */
  489 #define T_RATE_120      'M'             /* report rate: 120/sec (9600 only) */
  490 
  491 #define T_TEST          SELF_TEST       /* do self test */
  492 
  493 #define TABLET_ID       0x4             /* tablet ID in lo 4 bits */
  494 
  495 #define T_START_FRAME   0x80            /* start of report frame bit */
  496 #define T_PROXIMITY     0x01            /* state pointer in proximity */
  497 
  498 #define T_LEFT_BUTTON   0x02            /* puck buttons */
  499 #define T_FRONT_BUTTON  0x04
  500 #define T_RIGHT_BUTTON  0x08
  501 #define T_BACK_BUTTON   0x10
  502 
  503 #define T_BARREL_BUTTON T_LEFT_BUTTON           /* stylus buttons */
  504 #define T_TIP_BUTTON    T_FRONT_BUTTON
  505 

Cache object: dd82d8447fdaaaac98e0d70785a420c4


[ 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.