root/include/linux/stallion.h

/* [previous][next][first][last][top][bottom][index][help] */

INCLUDED FROM


   1 /*****************************************************************************/
   2 
   3 /*
   4  *      stallion.h  -- stallion multiport serial driver.
   5  *
   6  *      Copyright (C) 1994-1996  Greg Ungerer (gerg@stallion.oz.au).
   7  *
   8  *      This program is free software; you can redistribute it and/or modify
   9  *      it under the terms of the GNU General Public License as published by
  10  *      the Free Software Foundation; either version 2 of the License, or
  11  *      (at your option) any later version.
  12  *
  13  *      This program is distributed in the hope that it will be useful,
  14  *      but WITHOUT ANY WARRANTY; without even the implied warranty of
  15  *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16  *      GNU General Public License for more details.
  17  *
  18  *      You should have received a copy of the GNU General Public License
  19  *      along with this program; if not, write to the Free Software
  20  *      Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  21  */
  22 
  23 /*****************************************************************************/
  24 #ifndef _STALLION_H
  25 #define _STALLION_H
  26 /*****************************************************************************/
  27 
  28 /*
  29  *      Define important driver constants here.
  30  */
  31 #define STL_MAXBRDS             4
  32 #define STL_MAXPANELS           4
  33 #define STL_PORTSPERPANEL       16
  34 #define STL_MAXPORTS            64
  35 #define STL_MAXDEVS             (STL_MAXBRDS * STL_MAXPORTS)
  36 
  37 
  38 /*
  39  *      Define a set of structures to hold all the board/panel/port info
  40  *      for our ports. These will be dynamically allocated as required.
  41  */
  42 
  43 /*
  44  *      Define a ring queue structure for each port. This will hold the
  45  *      TX data waiting to be output. Characters are fed into this buffer
  46  *      from the line discipline (or even direct from user space!) and
  47  *      then fed into the UARTs during interrupts. Will use a classic ring
  48  *      queue here for this. The good thing about this type of ring queue
  49  *      is that the head and tail pointers can be updated without interrupt
  50  *      protection - since "write" code only needs to change the head, and
  51  *      interrupt code only needs to change the tail.
  52  */
  53 typedef struct {
  54         char    *buf;
  55         char    *head;
  56         char    *tail;
  57 } stlrq_t;
  58 
  59 /*
  60  *      Port, panel and board structures to hold status info about each.
  61  *      The board structure contains pointers to structures for each panel
  62  *      connected to it, and in turn each panel structure contains pointers
  63  *      for each port structure for each port on that panel. Note that
  64  *      the port structure also contains the board and panel number that it
  65  *      is associated with, this makes it (fairly) easy to get back to the
  66  *      board/panel info for a port.
  67  */
  68 typedef struct {
  69         unsigned long           magic;
  70         int                     portnr;
  71         int                     panelnr;
  72         int                     brdnr;
  73         int                     ioaddr;
  74         int                     uartaddr;
  75         int                     pagenr;
  76         int                     istate;
  77         int                     flags;
  78         int                     baud_base;
  79         int                     custom_divisor;
  80         int                     close_delay;
  81         int                     closing_wait;
  82         int                     refcount;
  83         int                     openwaitcnt;
  84         int                     brklen;
  85         long                    session;
  86         long                    pgrp;
  87         unsigned int            sigs;
  88         unsigned int            rxignoremsk;
  89         unsigned int            rxmarkmsk;
  90         unsigned long           clk;
  91         unsigned long           hwid;
  92         struct tty_struct       *tty;
  93         struct wait_queue       *open_wait;
  94         struct wait_queue       *close_wait;
  95         struct termios          normaltermios;
  96         struct termios          callouttermios;
  97         struct tq_struct        tqueue;
  98         comstats_t              stats;
  99         stlrq_t                 tx;
 100 } stlport_t;
 101 
 102 typedef struct {
 103         unsigned long   magic;
 104         int             panelnr;
 105         int             brdnr;
 106         int             pagenr;
 107         int             nrports;
 108         int             iobase;
 109         unsigned int    hwid;
 110         unsigned int    ackmask;
 111         stlport_t       *ports[STL_PORTSPERPANEL];
 112 } stlpanel_t;
 113 
 114 typedef struct {
 115         unsigned long   magic;
 116         int             brdnr;
 117         int             brdtype;
 118         int             state;
 119         int             nrpanels;
 120         int             nrports;
 121         int             irq;
 122         int             irqtype;
 123         unsigned int    ioaddr1;
 124         unsigned int    ioaddr2;
 125         unsigned int    iostatus;
 126         unsigned int    ioctrl;
 127         unsigned int    ioctrlval;
 128         unsigned int    hwid;
 129         unsigned long   clk;
 130         stlpanel_t      *panels[STL_MAXPANELS];
 131 } stlbrd_t;
 132 
 133 
 134 /*
 135  *      Define MAGIC numbers used for above structures.
 136  */
 137 #define STL_PORTMAGIC   0x5a7182c9
 138 #define STL_PANELMAGIC  0x7ef621a1
 139 #define STL_BOARDMAGIC  0xa2267f52
 140 
 141 /*****************************************************************************/
 142 #endif

/* [previous][next][first][last][top][bottom][index][help] */