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 */ 55 struct 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 */ 70 struct 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 98 struct 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 112 struct 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