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