201struct isi_port {
202 unsigned short magic;
203 struct tty_port port;
204 u16 channel;
205 u16 status;
206 struct isi_board *card;
207 unsigned char *xmit_buf;
208 int xmit_head;
209 int xmit_tail;
210 int xmit_cnt;
211};
212
213static struct isi_board isi_card[BOARD_COUNT];
214static struct isi_port isi_ports[PORT_COUNT];
215
216
217
218
219
220
221
222static inline int WaitTillCardIsFree(unsigned long base)
223{
224 unsigned int count = 0;
225 unsigned int a = in_atomic();
226
227 while (!(inw(base + 0xe) & 0x1) && count++ < 100)
228 if (a)
229 mdelay(1);
230 else
231 msleep(1);
232
233 return !(inw(base + 0xe) & 0x1);
234}
235
236static int lock_card(struct isi_board *card)
237{
238 unsigned long base = card->base;
239 unsigned int retries, a;
240
241 for (retries = 0; retries < 10; retries++) {