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        unsigned int            portnr;
  73        unsigned int            panelnr;
  74        unsigned int            brdnr;
  75        int                     ioaddr;
  76        int                     uartaddr;
  77        unsigned int            pagenr;
  78        unsigned long           istate;
  79        int                     flags;
  80        int                     baud_base;
  81        int                     custom_divisor;
  82        int                     close_delay;
  83        int                     closing_wait;
  84        int                     refcount;
  85        int                     openwaitcnt;
  86        int                     brklen;
  87        unsigned int            sigs;
  88        unsigned int            rxignoremsk;
  89        unsigned int            rxmarkmsk;
  90        unsigned int            imr;
  91        unsigned int            crenable;
  92        unsigned long           clk;
  93        unsigned long           hwid;
  94        void                    *uartp;
  95        struct tty_struct       *tty;
  96        wait_queue_head_t       open_wait;
  97        wait_queue_head_t       close_wait;
  98        struct work_struct      tqueue;
  99        comstats_t              stats;
 100        struct stlrq            tx;
 101};
 102
 103struct stlpanel {
 104        unsigned long   magic;
 105        unsigned int    panelnr;
 106        unsigned int    brdnr;
 107        unsigned int    pagenr;
 108        unsigned int    nrports;
 109        int             iobase;
 110        void            *uartp;
 111        void            (*isr)(struct stlpanel *panelp, unsigned int iobase);
 112        unsigned int    hwid;
 113        unsigned int    ackmask;
 114        struct stlport  *ports[STL_PORTSPERPANEL];
 115};
 116
 117struct stlbrd {
 118        unsigned long   magic;
 119        unsigned int    brdnr;
 120        unsigned int    brdtype;
 121        unsigned int    state;
 122        unsigned int    nrpanels;
 123        unsigned int    nrports;
 124        unsigned int    nrbnks;
 125        int             irq;
 126        int             irqtype;
 127        int             (*isr)(struct stlbrd *brdp);
 128        unsigned int    ioaddr1;
 129        unsigned int    ioaddr2;
 130        unsigned int    iosize1;
 131        unsigned int    iosize2;
 132        unsigned int    iostatus;
 133        unsigned int    ioctrl;
 134        unsigned int    ioctrlval;
 135        unsigned int    hwid;
 136        unsigned long   clk;
 137        unsigned int    bnkpageaddr[STL_MAXBANKS];
 138        unsigned int    bnkstataddr[STL_MAXBANKS];
 139        struct stlpanel *bnk2panel[STL_MAXBANKS];
 140        struct stlpanel *panels[STL_MAXPANELS];
 141};
 142
 143
 144/*
 145 *      Define MAGIC numbers used for above structures.
 146 */
 147#define STL_PORTMAGIC   0x5a7182c9
 148#define STL_PANELMAGIC  0x7ef621a1
 149#define STL_BOARDMAGIC  0xa2267f52
 150
 151/*****************************************************************************/
 152#endif
 153