2         Copyright (C) 1996  Digi International.
 
   4         For technical support please email digiLinux@dgii.com or
 
   5         call Digi tech support at (612) 912-3456
 
   7         ** This driver is no longer supported by Digi **
 
   9         Much of this design and code came from epca.c which was
 
  10         copyright (C) 1994, 1995 Troy De Jongh, and subsquently
 
  11         modified by David Nugent, Christoph Lameter, Mike McLagan.
 
  13         This program is free software; you can redistribute it and/or modify
 
  14         it under the terms of the GNU General Public License as published by
 
  15         the Free Software Foundation; either version 2 of the License, or
 
  16         (at your option) any later version.
 
  18         This program is distributed in the hope that it will be useful,
 
  19         but WITHOUT ANY WARRANTY; without even the implied warranty of
 
  20         MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
  21         GNU General Public License for more details.
 
  23         You should have received a copy of the GNU General Public License
 
  24         along with this program; if not, write to the Free Software
 
  25         Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
  27 /* See README.epca for change history --DAT*/
 
  29 #include <linux/module.h>
 
  30 #include <linux/kernel.h>
 
  31 #include <linux/types.h>
 
  32 #include <linux/init.h>
 
  33 #include <linux/serial.h>
 
  34 #include <linux/delay.h>
 
  35 #include <linux/ctype.h>
 
  36 #include <linux/tty.h>
 
  37 #include <linux/tty_flip.h>
 
  38 #include <linux/slab.h>
 
  39 #include <linux/ioport.h>
 
  40 #include <linux/interrupt.h>
 
  41 #include <asm/uaccess.h>
 
  43 #include <linux/spinlock.h>
 
  44 #include <linux/pci.h>
 
  51 #include "epcaconfig.h"
 
  53 #define VERSION            "1.3.0.1-LK2.6"
 
  55 /* This major needs to be submitted to Linux to join the majors list */
 
  56 #define DIGIINFOMAJOR       35  /* For Digi specific ioctl */
 
  60 #define epcaassert(x, msg)  if (!(x)) epca_error(__LINE__, msg)
 
  64 static int nbdevs, num_cards, liloconfig;
 
  65 static int digi_poller_inhibited = 1 ;
 
  67 static int setup_error_code;
 
  68 static int invalid_lilo_config;
 
  71  * The ISA boards do window flipping into the same spaces so its only sane with
 
  72  * a single lock. It's still pretty efficient.
 
  74 static DEFINE_SPINLOCK(epca_lock);
 
  76 /* MAXBOARDS is typically 12, but ISA and EISA cards are restricted to 7 below. */
 
  77 static struct board_info boards[MAXBOARDS];
 
  79 static struct tty_driver *pc_driver;
 
  80 static struct tty_driver *pc_info;
 
  82 /* ------------------ Begin Digi specific structures -------------------- */
 
  85  * digi_channels represents an array of structures that keep track of each
 
  86  * channel of the Digi product. Information such as transmit and receive
 
  87  * pointers, termio data, and signal definitions (DTR, CTS, etc ...) are stored
 
  88  * here. This structure is NOT used to overlay the cards physical channel
 
  91 static struct channel digi_channels[MAX_ALLOC];
 
  94  * card_ptr is an array used to hold the address of the first channel structure
 
  95  * of each card. This array will hold the addresses of various channels located
 
  98 static struct channel *card_ptr[MAXCARDS];
 
 100 static struct timer_list epca_timer;
 
 103  * Begin generic memory functions. These functions will be alias (point at)
 
 104  * more specific functions dependent on the board being configured.
 
 106 static void memwinon(struct board_info *b, unsigned int win);
 
 107 static void memwinoff(struct board_info *b, unsigned int win);
 
 108 static void globalwinon(struct channel *ch);
 
 109 static void rxwinon(struct channel *ch);
 
 110 static void txwinon(struct channel *ch);
 
 111 static void memoff(struct channel *ch);
 
 112 static void assertgwinon(struct channel *ch);
 
 113 static void assertmemoff(struct channel *ch);
 
 115 /* ---- Begin more 'specific' memory functions for cx_like products --- */
 
 117 static void pcxem_memwinon(struct board_info *b, unsigned int win);
 
 118 static void pcxem_memwinoff(struct board_info *b, unsigned int win);
 
 119 static void pcxem_globalwinon(struct channel *ch);
 
 120 static void pcxem_rxwinon(struct channel *ch);
 
 121 static void pcxem_txwinon(struct channel *ch);
 
 122 static void pcxem_memoff(struct channel *ch);
 
 124 /* ------ Begin more 'specific' memory functions for the pcxe ------- */
 
 126 static void pcxe_memwinon(struct board_info *b, unsigned int win);
 
 127 static void pcxe_memwinoff(struct board_info *b, unsigned int win);
 
 128 static void pcxe_globalwinon(struct channel *ch);
 
 129 static void pcxe_rxwinon(struct channel *ch);
 
 130 static void pcxe_txwinon(struct channel *ch);
 
 131 static void pcxe_memoff(struct channel *ch);
 
 133 /* ---- Begin more 'specific' memory functions for the pc64xe and pcxi ---- */
 
 134 /* Note : pc64xe and pcxi share the same windowing routines */
 
 136 static void pcxi_memwinon(struct board_info *b, unsigned int win);
 
 137 static void pcxi_memwinoff(struct board_info *b, unsigned int win);
 
 138 static void pcxi_globalwinon(struct channel *ch);
 
 139 static void pcxi_rxwinon(struct channel *ch);
 
 140 static void pcxi_txwinon(struct channel *ch);
 
 141 static void pcxi_memoff(struct channel *ch);
 
 143 /* - Begin 'specific' do nothing memory functions needed for some cards - */
 
 145 static void dummy_memwinon(struct board_info *b, unsigned int win);
 
 146 static void dummy_memwinoff(struct board_info *b, unsigned int win);
 
 147 static void dummy_globalwinon(struct channel *ch);
 
 148 static void dummy_rxwinon(struct channel *ch);
 
 149 static void dummy_txwinon(struct channel *ch);
 
 150 static void dummy_memoff(struct channel *ch);
 
 151 static void dummy_assertgwinon(struct channel *ch);
 
 152 static void dummy_assertmemoff(struct channel *ch);
 
 154 static struct channel *verifyChannel(struct tty_struct *);
 
 155 static void pc_sched_event(struct channel *, int);
 
 156 static void epca_error(int, char *);
 
 157 static void pc_close(struct tty_struct *, struct file *);
 
 158 static void shutdown(struct channel *);
 
 159 static void pc_hangup(struct tty_struct *);
 
 160 static void pc_put_char(struct tty_struct *, unsigned char);
 
 161 static int pc_write_room(struct tty_struct *);
 
 162 static int pc_chars_in_buffer(struct tty_struct *);
 
 163 static void pc_flush_buffer(struct tty_struct *);
 
 164 static void pc_flush_chars(struct tty_struct *);
 
 165 static int block_til_ready(struct tty_struct *, struct file *,
 
 167 static int pc_open(struct tty_struct *, struct file *);
 
 168 static void post_fep_init(unsigned int crd);
 
 169 static void epcapoll(unsigned long);
 
 170 static void doevent(int);
 
 171 static void fepcmd(struct channel *, int, int, int, int, int);
 
 172 static unsigned termios2digi_h(struct channel *ch, unsigned);
 
 173 static unsigned termios2digi_i(struct channel *ch, unsigned);
 
 174 static unsigned termios2digi_c(struct channel *ch, unsigned);
 
 175 static void epcaparam(struct tty_struct *, struct channel *);
 
 176 static void receive_data(struct channel *);
 
 177 static int pc_ioctl(struct tty_struct *, struct file *,
 
 178                     unsigned int, unsigned long);
 
 179 static int info_ioctl(struct tty_struct *, struct file *,
 
 180                     unsigned int, unsigned long);
 
 181 static void pc_set_termios(struct tty_struct *, struct ktermios *);
 
 182 static void do_softint(struct work_struct *work);
 
 183 static void pc_stop(struct tty_struct *);
 
 184 static void pc_start(struct tty_struct *);
 
 185 static void pc_throttle(struct tty_struct * tty);
 
 186 static void pc_unthrottle(struct tty_struct *tty);
 
 187 static void digi_send_break(struct channel *ch, int msec);
 
 188 static void setup_empty_event(struct tty_struct *tty, struct channel *ch);
 
 189 void epca_setup(char *, int *);
 
 191 static int pc_write(struct tty_struct *, const unsigned char *, int);
 
 192 static int pc_init(void);
 
 193 static int init_PCI(void);
 
 196  * Table of functions for each board to handle memory. Mantaining parallelism
 
 197  * is a *very* good idea here. The idea is for the runtime code to blindly call
 
 198  * these functions, not knowing/caring about the underlying hardware. This
 
 199  * stuff should contain no conditionals; if more functionality is needed a
 
 200  * different entry should be established. These calls are the interface calls
 
 201  * and are the only functions that should be accessed. Anyone caught making
 
 202  * direct calls deserves what they get.
 
 204 static void memwinon(struct board_info *b, unsigned int win)
 
 209 static void memwinoff(struct board_info *b, unsigned int win)
 
 211         b->memwinoff(b, win);
 
 214 static void globalwinon(struct channel *ch)
 
 216         ch->board->globalwinon(ch);
 
 219 static void rxwinon(struct channel *ch)
 
 221         ch->board->rxwinon(ch);
 
 224 static void txwinon(struct channel *ch)
 
 226         ch->board->txwinon(ch);
 
 229 static void memoff(struct channel *ch)
 
 231         ch->board->memoff(ch);
 
 233 static void assertgwinon(struct channel *ch)
 
 235         ch->board->assertgwinon(ch);
 
 238 static void assertmemoff(struct channel *ch)
 
 240         ch->board->assertmemoff(ch);
 
 243 /* PCXEM windowing is the same as that used in the PCXR and CX series cards. */
 
 244 static void pcxem_memwinon(struct board_info *b, unsigned int win)
 
 246         outb_p(FEPWIN|win, b->port + 1);
 
 249 static void pcxem_memwinoff(struct board_info *b, unsigned int win)
 
 251         outb_p(0, b->port + 1);
 
 254 static void pcxem_globalwinon(struct channel *ch)
 
 256         outb_p( FEPWIN, (int)ch->board->port + 1);
 
 259 static void pcxem_rxwinon(struct channel *ch)
 
 261         outb_p(ch->rxwin, (int)ch->board->port + 1);
 
 264 static void pcxem_txwinon(struct channel *ch)
 
 266         outb_p(ch->txwin, (int)ch->board->port + 1);
 
 269 static void pcxem_memoff(struct channel *ch)
 
 271         outb_p(0, (int)ch->board->port + 1);
 
 274 /* ----------------- Begin pcxe memory window stuff ------------------ */
 
 275 static void pcxe_memwinon(struct board_info *b, unsigned int win)
 
 277         outb_p(FEPWIN | win, b->port + 1);
 
 280 static void pcxe_memwinoff(struct board_info *b, unsigned int win)
 
 282         outb_p(inb(b->port) & ~FEPMEM, b->port + 1);
 
 283         outb_p(0, b->port + 1);
 
 286 static void pcxe_globalwinon(struct channel *ch)
 
 288         outb_p(FEPWIN, (int)ch->board->port + 1);
 
 291 static void pcxe_rxwinon(struct channel *ch)
 
 293         outb_p(ch->rxwin, (int)ch->board->port + 1);
 
 296 static void pcxe_txwinon(struct channel *ch)
 
 298         outb_p(ch->txwin, (int)ch->board->port + 1);
 
 301 static void pcxe_memoff(struct channel *ch)
 
 303         outb_p(0, (int)ch->board->port);
 
 304         outb_p(0, (int)ch->board->port + 1);
 
 307 /* ------------- Begin pc64xe and pcxi memory window stuff -------------- */
 
 308 static void pcxi_memwinon(struct board_info *b, unsigned int win)
 
 310         outb_p(inb(b->port) | FEPMEM, b->port);
 
 313 static void pcxi_memwinoff(struct board_info *b, unsigned int win)
 
 315         outb_p(inb(b->port) & ~FEPMEM, b->port);
 
 318 static void pcxi_globalwinon(struct channel *ch)
 
 320         outb_p(FEPMEM, ch->board->port);
 
 323 static void pcxi_rxwinon(struct channel *ch)
 
 325         outb_p(FEPMEM, ch->board->port);
 
 328 static void pcxi_txwinon(struct channel *ch)
 
 330         outb_p(FEPMEM, ch->board->port);
 
 333 static void pcxi_memoff(struct channel *ch)
 
 335         outb_p(0, ch->board->port);
 
 338 static void pcxi_assertgwinon(struct channel *ch)
 
 340         epcaassert(inb(ch->board->port) & FEPMEM, "Global memory off");
 
 343 static void pcxi_assertmemoff(struct channel *ch)
 
 345         epcaassert(!(inb(ch->board->port) & FEPMEM), "Memory on");
 
 349  * Not all of the cards need specific memory windowing routines. Some cards
 
 350  * (Such as PCI) needs no windowing routines at all. We provide these do
 
 351  * nothing routines so that the same code base can be used. The driver will
 
 352  * ALWAYS call a windowing routine if it thinks it needs to; regardless of the
 
 353  * card. However, dependent on the card the routine may or may not do anything.
 
 355 static void dummy_memwinon(struct board_info *b, unsigned int win)
 
 359 static void dummy_memwinoff(struct board_info *b, unsigned int win)
 
 363 static void dummy_globalwinon(struct channel *ch)
 
 367 static void dummy_rxwinon(struct channel *ch)
 
 371 static void dummy_txwinon(struct channel *ch)
 
 375 static void dummy_memoff(struct channel *ch)
 
 379 static void dummy_assertgwinon(struct channel *ch)
 
 383 static void dummy_assertmemoff(struct channel *ch)
 
 387 static struct channel *verifyChannel(struct tty_struct *tty)
 
 390          * This routine basically provides a sanity check. It insures that the
 
 391          * channel returned is within the proper range of addresses as well as
 
 392          * properly initialized. If some bogus info gets passed in
 
 393          * through tty->driver_data this should catch it.
 
 396                 struct channel *ch = (struct channel *)tty->driver_data;
 
 397                 if ((ch >= &digi_channels[0]) && (ch < &digi_channels[nbdevs])) {
 
 398                         if (ch->magic == EPCA_MAGIC)
 
 405 static void pc_sched_event(struct channel *ch, int event)
 
 408          * We call this to schedule interrupt processing on some event. The
 
 409          * kernel sees our request and calls the related routine in OUR driver.
 
 411         ch->event |= 1 << event;
 
 412         schedule_work(&ch->tqueue);
 
 415 static void epca_error(int line, char *msg)
 
 417         printk(KERN_ERR "epca_error (Digi): line = %d %s\n",line,msg);
 
 420 static void pc_close(struct tty_struct *tty, struct file *filp)
 
 425          * verifyChannel returns the channel from the tty struct if it is
 
 426          * valid. This serves as a sanity check.
 
 428         if ((ch = verifyChannel(tty)) != NULL) {
 
 429                 spin_lock_irqsave(&epca_lock, flags);
 
 430                 if (tty_hung_up_p(filp)) {
 
 431                         spin_unlock_irqrestore(&epca_lock, flags);
 
 434                 if (ch->count-- > 1)  {
 
 435                         /* Begin channel is open more than once */
 
 437                          * Return without doing anything. Someone might still
 
 438                          * be using the channel.
 
 440                         spin_unlock_irqrestore(&epca_lock, flags);
 
 444                 /* Port open only once go ahead with shutdown & reset */
 
 445                 BUG_ON(ch->count < 0);
 
 448                  * Let the rest of the driver know the channel is being closed.
 
 449                  * This becomes important if an open is attempted before close
 
 452                 ch->asyncflags |= ASYNC_CLOSING;
 
 455                 spin_unlock_irqrestore(&epca_lock, flags);
 
 457                 if (ch->asyncflags & ASYNC_INITIALIZED)  {
 
 458                         /* Setup an event to indicate when the transmit buffer empties */
 
 459                         setup_empty_event(tty, ch);
 
 460                         tty_wait_until_sent(tty, 3000); /* 30 seconds timeout */
 
 462                 if (tty->driver->flush_buffer)
 
 463                         tty->driver->flush_buffer(tty);
 
 465                 tty_ldisc_flush(tty);
 
 468                 spin_lock_irqsave(&epca_lock, flags);
 
 472                 spin_unlock_irqrestore(&epca_lock, flags);
 
 474                 if (ch->blocked_open) {
 
 476                                 msleep_interruptible(jiffies_to_msecs(ch->close_delay));
 
 477                         wake_up_interruptible(&ch->open_wait);
 
 479                 ch->asyncflags &= ~(ASYNC_NORMAL_ACTIVE | ASYNC_INITIALIZED |
 
 481                 wake_up_interruptible(&ch->close_wait);
 
 485 static void shutdown(struct channel *ch)
 
 488         struct tty_struct *tty;
 
 489         struct board_chan __iomem *bc;
 
 491         if (!(ch->asyncflags & ASYNC_INITIALIZED))
 
 494         spin_lock_irqsave(&epca_lock, flags);
 
 500          * In order for an event to be generated on the receipt of data the
 
 501          * idata flag must be set. Since we are shutting down, this is not
 
 502          * necessary clear this flag.
 
 505                 writeb(0, &bc->idata);
 
 508         /* If we're a modem control device and HUPCL is on, drop RTS & DTR. */
 
 509         if (tty->termios->c_cflag & HUPCL)  {
 
 510                 ch->omodem &= ~(ch->m_rts | ch->m_dtr);
 
 511                 fepcmd(ch, SETMODEM, 0, ch->m_dtr | ch->m_rts, 10, 1);
 
 516          * The channel has officialy been closed. The next time it is opened it
 
 517          * will have to reinitialized. Set a flag to indicate this.
 
 519         /* Prevent future Digi programmed interrupts from coming active */
 
 520         ch->asyncflags &= ~ASYNC_INITIALIZED;
 
 521         spin_unlock_irqrestore(&epca_lock, flags);
 
 524 static void pc_hangup(struct tty_struct *tty)
 
 529          * verifyChannel returns the channel from the tty struct if it is
 
 530          * valid. This serves as a sanity check.
 
 532         if ((ch = verifyChannel(tty)) != NULL) {
 
 535                 if (tty->driver->flush_buffer)
 
 536                         tty->driver->flush_buffer(tty);
 
 537                 tty_ldisc_flush(tty);
 
 540                 spin_lock_irqsave(&epca_lock, flags);
 
 544                 ch->asyncflags &= ~(ASYNC_NORMAL_ACTIVE | ASYNC_INITIALIZED);
 
 545                 spin_unlock_irqrestore(&epca_lock, flags);
 
 546                 wake_up_interruptible(&ch->open_wait);
 
 550 static int pc_write(struct tty_struct *tty,
 
 551                     const unsigned char *buf, int bytesAvailable)
 
 553         unsigned int head, tail;
 
 560         struct board_chan __iomem *bc;
 
 563          * pc_write is primarily called directly by the kernel routine
 
 564          * tty_write (Though it can also be called by put_char) found in
 
 565          * tty_io.c. pc_write is passed a line discipline buffer where the data
 
 566          * to be written out is stored. The line discipline implementation
 
 567          * itself is done at the kernel level and is not brought into the
 
 572          * verifyChannel returns the channel from the tty struct if it is
 
 573          * valid. This serves as a sanity check.
 
 575         if ((ch = verifyChannel(tty)) == NULL)
 
 578         /* Make a pointer to the channel data structure found on the board. */
 
 580         size = ch->txbufsize;
 
 583         spin_lock_irqsave(&epca_lock, flags);
 
 586         head = readw(&bc->tin) & (size - 1);
 
 587         tail = readw(&bc->tout);
 
 589         if (tail != readw(&bc->tout))
 
 590                 tail = readw(&bc->tout);
 
 594                 /* head has not wrapped */
 
 596                  * remain (much like dataLen above) represents the total amount
 
 597                  * of space available on the card for data. Here dataLen
 
 598                  * represents the space existing between the head pointer and
 
 599                  * the end of buffer. This is important because a memcpy cannot
 
 600                  * be told to automatically wrap around when it hits the buffer
 
 603                 dataLen = size - head;
 
 604                 remain = size - (head - tail) - 1;
 
 606                 /* head has wrapped around */
 
 607                 remain = tail - head - 1;
 
 611          * Check the space on the card. If we have more data than space; reduce
 
 612          * the amount of data to fit the space.
 
 614         bytesAvailable = min(remain, bytesAvailable);
 
 616         while (bytesAvailable > 0) {
 
 617                 /* there is data to copy onto card */
 
 620                  * If head is not wrapped, the below will make sure the first
 
 621                  * data copy fills to the end of card buffer.
 
 623                 dataLen = min(bytesAvailable, dataLen);
 
 624                 memcpy_toio(ch->txptr + head, buf, dataLen);
 
 627                 amountCopied += dataLen;
 
 628                 bytesAvailable -= dataLen;
 
 635         ch->statusflags |= TXBUSY;
 
 637         writew(head, &bc->tin);
 
 639         if ((ch->statusflags & LOWWAIT) == 0)  {
 
 640                 ch->statusflags |= LOWWAIT;
 
 641                 writeb(1, &bc->ilow);
 
 644         spin_unlock_irqrestore(&epca_lock, flags);
 
 648 static void pc_put_char(struct tty_struct *tty, unsigned char c)
 
 650         pc_write(tty, &c, 1);
 
 653 static int pc_write_room(struct tty_struct *tty)
 
 658         unsigned int head, tail;
 
 659         struct board_chan __iomem *bc;
 
 664          * verifyChannel returns the channel from the tty struct if it is
 
 665          * valid. This serves as a sanity check.
 
 667         if ((ch = verifyChannel(tty)) != NULL)  {
 
 668                 spin_lock_irqsave(&epca_lock, flags);
 
 672                 head = readw(&bc->tin) & (ch->txbufsize - 1);
 
 673                 tail = readw(&bc->tout);
 
 675                 if (tail != readw(&bc->tout))
 
 676                         tail = readw(&bc->tout);
 
 677                 /* Wrap tail if necessary */
 
 678                 tail &= (ch->txbufsize - 1);
 
 680                 if ((remain = tail - head - 1) < 0 )
 
 681                         remain += ch->txbufsize;
 
 683                 if (remain && (ch->statusflags & LOWWAIT) == 0) {
 
 684                         ch->statusflags |= LOWWAIT;
 
 685                         writeb(1, &bc->ilow);
 
 688                 spin_unlock_irqrestore(&epca_lock, flags);
 
 690         /* Return how much room is left on card */
 
 694 static int pc_chars_in_buffer(struct tty_struct *tty)
 
 697         unsigned int ctail, head, tail;
 
 701         struct board_chan __iomem *bc;
 
 704          * verifyChannel returns the channel from the tty struct if it is
 
 705          * valid. This serves as a sanity check.
 
 707         if ((ch = verifyChannel(tty)) == NULL)
 
 710         spin_lock_irqsave(&epca_lock, flags);
 
 714         tail = readw(&bc->tout);
 
 715         head = readw(&bc->tin);
 
 716         ctail = readw(&ch->mailbox->cout);
 
 718         if (tail == head && readw(&ch->mailbox->cin) == ctail && readb(&bc->tbusy) == 0)
 
 720         else  { /* Begin if some space on the card has been used */
 
 721                 head = readw(&bc->tin) & (ch->txbufsize - 1);
 
 722                 tail &= (ch->txbufsize - 1);
 
 724                  * The logic here is basically opposite of the above
 
 725                  * pc_write_room here we are finding the amount of bytes in the
 
 726                  * buffer filled. Not the amount of bytes empty.
 
 728                 if ((remain = tail - head - 1) < 0 )
 
 729                         remain += ch->txbufsize;
 
 730                 chars = (int)(ch->txbufsize - remain);
 
 732                  * Make it possible to wakeup anything waiting for output in
 
 735                  * If not already set. Setup an event to indicate when the
 
 736                  * transmit buffer empties.
 
 738                 if (!(ch->statusflags & EMPTYWAIT))
 
 739                         setup_empty_event(tty,ch);
 
 740         } /* End if some space on the card has been used */
 
 742         spin_unlock_irqrestore(&epca_lock, flags);
 
 743         /* Return number of characters residing on card. */
 
 747 static void pc_flush_buffer(struct tty_struct *tty)
 
 752         struct board_chan __iomem *bc;
 
 754          * verifyChannel returns the channel from the tty struct if it is
 
 755          * valid. This serves as a sanity check.
 
 757         if ((ch = verifyChannel(tty)) == NULL)
 
 760         spin_lock_irqsave(&epca_lock, flags);
 
 763         tail = readw(&bc->tout);
 
 764         /* Have FEP move tout pointer; effectively flushing transmit buffer */
 
 765         fepcmd(ch, STOUT, (unsigned) tail, 0, 0, 0);
 
 767         spin_unlock_irqrestore(&epca_lock, flags);
 
 771 static void pc_flush_chars(struct tty_struct *tty)
 
 775          * verifyChannel returns the channel from the tty struct if it is
 
 776          * valid. This serves as a sanity check.
 
 778         if ((ch = verifyChannel(tty)) != NULL) {
 
 780                 spin_lock_irqsave(&epca_lock, flags);
 
 782                  * If not already set and the transmitter is busy setup an
 
 783                  * event to indicate when the transmit empties.
 
 785                 if ((ch->statusflags & TXBUSY) && !(ch->statusflags & EMPTYWAIT))
 
 786                         setup_empty_event(tty,ch);
 
 787                 spin_unlock_irqrestore(&epca_lock, flags);
 
 791 static int block_til_ready(struct tty_struct *tty,
 
 792                            struct file *filp, struct channel *ch)
 
 794         DECLARE_WAITQUEUE(wait,current);
 
 795         int retval, do_clocal = 0;
 
 798         if (tty_hung_up_p(filp)) {
 
 799                 if (ch->asyncflags & ASYNC_HUP_NOTIFY)
 
 802                         retval = -ERESTARTSYS;
 
 807          * If the device is in the middle of being closed, then block until
 
 808          * it's done, and then try again.
 
 810         if (ch->asyncflags & ASYNC_CLOSING) {
 
 811                 interruptible_sleep_on(&ch->close_wait);
 
 813                 if (ch->asyncflags & ASYNC_HUP_NOTIFY)
 
 819         if (filp->f_flags & O_NONBLOCK)  {
 
 821                  * If non-blocking mode is set, then make the check up front
 
 824                 ch->asyncflags |= ASYNC_NORMAL_ACTIVE;
 
 827         if (tty->termios->c_cflag & CLOCAL)
 
 829         /* Block waiting for the carrier detect and the line to become free */
 
 832         add_wait_queue(&ch->open_wait, &wait);
 
 834         spin_lock_irqsave(&epca_lock, flags);
 
 835         /* We dec count so that pc_close will know when to free things */
 
 836         if (!tty_hung_up_p(filp))
 
 840                 set_current_state(TASK_INTERRUPTIBLE);
 
 841                 if (tty_hung_up_p(filp) ||
 
 842                     !(ch->asyncflags & ASYNC_INITIALIZED))
 
 844                         if (ch->asyncflags & ASYNC_HUP_NOTIFY)
 
 847                                 retval = -ERESTARTSYS;
 
 850                 if (!(ch->asyncflags & ASYNC_CLOSING) &&
 
 851                           (do_clocal || (ch->imodem & ch->dcd)))
 
 853                 if (signal_pending(current)) {
 
 854                         retval = -ERESTARTSYS;
 
 857                 spin_unlock_irqrestore(&epca_lock, flags);
 
 859                  * Allow someone else to be scheduled. We will occasionally go
 
 860                  * through this loop until one of the above conditions change.
 
 861                  * The below schedule call will allow other processes to enter
 
 862                  * and prevent this loop from hogging the cpu.
 
 865                 spin_lock_irqsave(&epca_lock, flags);
 
 868         __set_current_state(TASK_RUNNING);
 
 869         remove_wait_queue(&ch->open_wait, &wait);
 
 870         if (!tty_hung_up_p(filp))
 
 874         spin_unlock_irqrestore(&epca_lock, flags);
 
 879         ch->asyncflags |= ASYNC_NORMAL_ACTIVE;
 
 883 static int pc_open(struct tty_struct *tty, struct file * filp)
 
 887         int line, retval, boardnum;
 
 888         struct board_chan __iomem *bc;
 
 892         if (line < 0 || line >= nbdevs)
 
 895         ch = &digi_channels[line];
 
 896         boardnum = ch->boardnum;
 
 898         /* Check status of board configured in system.  */
 
 901          * I check to see if the epca_setup routine detected an user error. It
 
 902          * might be better to put this in pc_init, but for the moment it goes
 
 905         if (invalid_lilo_config) {
 
 906                 if (setup_error_code & INVALID_BOARD_TYPE)
 
 907                         printk(KERN_ERR "epca: pc_open: Invalid board type specified in kernel options.\n");
 
 908                 if (setup_error_code & INVALID_NUM_PORTS)
 
 909                         printk(KERN_ERR "epca: pc_open: Invalid number of ports specified in kernel options.\n");
 
 910                 if (setup_error_code & INVALID_MEM_BASE)
 
 911                         printk(KERN_ERR "epca: pc_open: Invalid board memory address specified in kernel options.\n");
 
 912                 if (setup_error_code & INVALID_PORT_BASE)
 
 913                         printk(KERN_ERR "epca; pc_open: Invalid board port address specified in kernel options.\n");
 
 914                 if (setup_error_code & INVALID_BOARD_STATUS)
 
 915                         printk(KERN_ERR "epca: pc_open: Invalid board status specified in kernel options.\n");
 
 916                 if (setup_error_code & INVALID_ALTPIN)
 
 917                         printk(KERN_ERR "epca: pc_open: Invalid board altpin specified in kernel options;\n");
 
 918                 tty->driver_data = NULL;   /* Mark this device as 'down' */
 
 921         if (boardnum >= num_cards || boards[boardnum].status == DISABLED)  {
 
 922                 tty->driver_data = NULL;   /* Mark this device as 'down' */
 
 926         if ((bc = ch->brdchan) == 0) {
 
 927                 tty->driver_data = NULL;
 
 931         spin_lock_irqsave(&epca_lock, flags);
 
 933          * Every time a channel is opened, increment a counter. This is
 
 934          * necessary because we do not wish to flush and shutdown the channel
 
 935          * until the last app holding the channel open, closes it.
 
 939          * Set a kernel structures pointer to our local channel structure. This
 
 940          * way we can get to it when passed only a tty struct.
 
 942         tty->driver_data = ch;
 
 944          * If this is the first time the channel has been opened, initialize
 
 945          * the tty->termios struct otherwise let pc_close handle it.
 
 950         /* Save boards current modem status */
 
 951         ch->imodem = readb(&bc->mstat);
 
 954          * Set receive head and tail ptrs to each other. This indicates no data
 
 957         head = readw(&bc->rin);
 
 958         writew(head, &bc->rout);
 
 960         /* Set the channels associated tty structure */
 
 964          * The below routine generally sets up parity, baud, flow control
 
 965          * issues, etc.... It effect both control flags and input flags.
 
 968         ch->asyncflags |= ASYNC_INITIALIZED;
 
 970         spin_unlock_irqrestore(&epca_lock, flags);
 
 972         retval = block_til_ready(tty, filp, ch);
 
 976          * Set this again in case a hangup set it to zero while this open() was
 
 977          * waiting for the line...
 
 979         spin_lock_irqsave(&epca_lock, flags);
 
 982         /* Enable Digi Data events */
 
 983         writeb(1, &bc->idata);
 
 985         spin_unlock_irqrestore(&epca_lock, flags);
 
 989 static int __init epca_module_init(void)
 
 993 module_init(epca_module_init);
 
 995 static struct pci_driver epca_driver;
 
 997 static void __exit epca_module_exit(void)
 
1000         struct board_info *bd;
 
1003         del_timer_sync(&epca_timer);
 
1005         if (tty_unregister_driver(pc_driver) || tty_unregister_driver(pc_info))
 
1007                 printk(KERN_WARNING "epca: cleanup_module failed to un-register tty driver\n");
 
1010         put_tty_driver(pc_driver);
 
1011         put_tty_driver(pc_info);
 
1013         for (crd = 0; crd < num_cards; crd++) {
 
1015                 if (!bd) { /* sanity check */
 
1016                         printk(KERN_ERR "<Error> - Digi : cleanup_module failed\n");
 
1020                 for (count = 0; count < bd->numports; count++, ch++) {
 
1022                                 tty_hangup(ch->tty);
 
1025         pci_unregister_driver(&epca_driver);
 
1027 module_exit(epca_module_exit);
 
1029 static const struct tty_operations pc_ops = {
 
1033         .write_room = pc_write_room,
 
1034         .flush_buffer = pc_flush_buffer,
 
1035         .chars_in_buffer = pc_chars_in_buffer,
 
1036         .flush_chars = pc_flush_chars,
 
1037         .put_char = pc_put_char,
 
1039         .set_termios = pc_set_termios,
 
1042         .throttle = pc_throttle,
 
1043         .unthrottle = pc_unthrottle,
 
1044         .hangup = pc_hangup,
 
1047 static int info_open(struct tty_struct *tty, struct file * filp)
 
1052 static struct tty_operations info_ops = {
 
1054         .ioctl = info_ioctl,
 
1057 static int __init pc_init(void)
 
1060         struct board_info *bd;
 
1061         unsigned char board_id = 0;
 
1064         int pci_boards_found, pci_count;
 
1068         pc_driver = alloc_tty_driver(MAX_ALLOC);
 
1072         pc_info = alloc_tty_driver(MAX_ALLOC);
 
1077          * If epca_setup has not been ran by LILO set num_cards to defaults;
 
1078          * copy board structure defined by digiConfig into drivers board
 
1079          * structure. Note : If LILO has ran epca_setup then epca_setup will
 
1080          * handle defining num_cards as well as copying the data into the board
 
1084                 /* driver has been configured via. epcaconfig */
 
1086                 num_cards = NUMCARDS;
 
1087                 memcpy(&boards, &static_boards,
 
1088                        sizeof(struct board_info) * NUMCARDS);
 
1092          * Note : If lilo was used to configure the driver and the ignore
 
1093          * epcaconfig option was choosen (digiepca=2) then nbdevs and num_cards
 
1094          * will equal 0 at this point. This is okay; PCI cards will still be
 
1095          * picked up if detected.
 
1099          * Set up interrupt, we will worry about memory allocation in
 
1102         printk(KERN_INFO "DIGI epca driver version %s loaded.\n",VERSION);
 
1105          * NOTE : This code assumes that the number of ports found in the
 
1106          * boards array is correct. This could be wrong if the card in question
 
1107          * is PCI (And therefore has no ports entry in the boards structure.)
 
1108          * The rest of the information will be valid for PCI because the
 
1109          * beginning of pc_init scans for PCI and determines i/o and base
 
1110          * memory addresses. I am not sure if it is possible to read the number
 
1111          * of ports supported by the card prior to it being booted (Since that
 
1112          * is the state it is in when pc_init is run). Because it is not
 
1113          * possible to query the number of supported ports until after the card
 
1114          * has booted; we are required to calculate the card_ptrs as the card
 
1115          * is initialized (Inside post_fep_init). The negative thing about this
 
1116          * approach is that digiDload's call to GET_INFO will have a bad port
 
1117          * value. (Since this is called prior to post_fep_init.)
 
1119         pci_boards_found = 0;
 
1120         if (num_cards < MAXBOARDS)
 
1121                 pci_boards_found += init_PCI();
 
1122         num_cards += pci_boards_found;
 
1124         pc_driver->owner = THIS_MODULE;
 
1125         pc_driver->name = "ttyD";
 
1126         pc_driver->major = DIGI_MAJOR;
 
1127         pc_driver->minor_start = 0;
 
1128         pc_driver->type = TTY_DRIVER_TYPE_SERIAL;
 
1129         pc_driver->subtype = SERIAL_TYPE_NORMAL;
 
1130         pc_driver->init_termios = tty_std_termios;
 
1131         pc_driver->init_termios.c_iflag = 0;
 
1132         pc_driver->init_termios.c_oflag = 0;
 
1133         pc_driver->init_termios.c_cflag = B9600 | CS8 | CREAD | CLOCAL | HUPCL;
 
1134         pc_driver->init_termios.c_lflag = 0;
 
1135         pc_driver->init_termios.c_ispeed = 9600;
 
1136         pc_driver->init_termios.c_ospeed = 9600;
 
1137         pc_driver->flags = TTY_DRIVER_REAL_RAW;
 
1138         tty_set_operations(pc_driver, &pc_ops);
 
1140         pc_info->owner = THIS_MODULE;
 
1141         pc_info->name = "digi_ctl";
 
1142         pc_info->major = DIGIINFOMAJOR;
 
1143         pc_info->minor_start = 0;
 
1144         pc_info->type = TTY_DRIVER_TYPE_SERIAL;
 
1145         pc_info->subtype = SERIAL_TYPE_INFO;
 
1146         pc_info->init_termios = tty_std_termios;
 
1147         pc_info->init_termios.c_iflag = 0;
 
1148         pc_info->init_termios.c_oflag = 0;
 
1149         pc_info->init_termios.c_lflag = 0;
 
1150         pc_info->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL;
 
1151         pc_info->init_termios.c_ispeed = 9600;
 
1152         pc_info->init_termios.c_ospeed = 9600;
 
1153         pc_info->flags = TTY_DRIVER_REAL_RAW;
 
1154         tty_set_operations(pc_info, &info_ops);
 
1157         for (crd = 0; crd < num_cards; crd++) {
 
1159                  * This is where the appropriate memory handlers for the
 
1160                  * hardware is set. Everything at runtime blindly jumps through
 
1164                 /* defined in epcaconfig.h */
 
1170                         bd->memwinon     = pcxem_memwinon;
 
1171                         bd->memwinoff    = pcxem_memwinoff;
 
1172                         bd->globalwinon  = pcxem_globalwinon;
 
1173                         bd->txwinon      = pcxem_txwinon;
 
1174                         bd->rxwinon      = pcxem_rxwinon;
 
1175                         bd->memoff       = pcxem_memoff;
 
1176                         bd->assertgwinon = dummy_assertgwinon;
 
1177                         bd->assertmemoff = dummy_assertmemoff;
 
1183                         bd->memwinon     = dummy_memwinon;
 
1184                         bd->memwinoff    = dummy_memwinoff;
 
1185                         bd->globalwinon  = dummy_globalwinon;
 
1186                         bd->txwinon      = dummy_txwinon;
 
1187                         bd->rxwinon      = dummy_rxwinon;
 
1188                         bd->memoff       = dummy_memoff;
 
1189                         bd->assertgwinon = dummy_assertgwinon;
 
1190                         bd->assertmemoff = dummy_assertmemoff;
 
1195                         bd->memwinon     = pcxe_memwinon;
 
1196                         bd->memwinoff    = pcxe_memwinoff;
 
1197                         bd->globalwinon  = pcxe_globalwinon;
 
1198                         bd->txwinon      = pcxe_txwinon;
 
1199                         bd->rxwinon      = pcxe_rxwinon;
 
1200                         bd->memoff       = pcxe_memoff;
 
1201                         bd->assertgwinon = dummy_assertgwinon;
 
1202                         bd->assertmemoff = dummy_assertmemoff;
 
1207                         bd->memwinon     = pcxi_memwinon;
 
1208                         bd->memwinoff    = pcxi_memwinoff;
 
1209                         bd->globalwinon  = pcxi_globalwinon;
 
1210                         bd->txwinon      = pcxi_txwinon;
 
1211                         bd->rxwinon      = pcxi_rxwinon;
 
1212                         bd->memoff       = pcxi_memoff;
 
1213                         bd->assertgwinon = pcxi_assertgwinon;
 
1214                         bd->assertmemoff = pcxi_assertmemoff;
 
1222                  * Some cards need a memory segment to be defined for use in
 
1223                  * transmit and receive windowing operations. These boards are
 
1224                  * listed in the below switch. In the case of the XI the amount
 
1225                  * of memory on the board is variable so the memory_seg is also
 
1226                  * variable. This code determines what they segment should be.
 
1232                         bd->memory_seg = 0xf000;
 
1236                         board_id = inb((int)bd->port);
 
1237                         if ((board_id & 0x1) == 0x1) {
 
1238                                 /* it's an XI card */
 
1239                                 /* Is it a 64K board */
 
1240                                 if ((board_id & 0x30) == 0)
 
1241                                         bd->memory_seg = 0xf000;
 
1243                                 /* Is it a 128K board */
 
1244                                 if ((board_id & 0x30) == 0x10)
 
1245                                         bd->memory_seg = 0xe000;
 
1247                                 /* Is is a 256K board */
 
1248                                 if ((board_id & 0x30) == 0x20)
 
1249                                         bd->memory_seg = 0xc000;
 
1251                                 /* Is it a 512K board */
 
1252                                 if ((board_id & 0x30) == 0x30)
 
1253                                         bd->memory_seg = 0x8000;
 
1255                                 printk(KERN_ERR "epca: Board at 0x%x doesn't appear to be an XI\n",(int)bd->port);
 
1260         err = tty_register_driver(pc_driver);
 
1262                 printk(KERN_ERR "Couldn't register Digi PC/ driver");
 
1266         err = tty_register_driver(pc_info);
 
1268                 printk(KERN_ERR "Couldn't register Digi PC/ info ");
 
1272         /* Start up the poller to check for events on all enabled boards */
 
1273         init_timer(&epca_timer);
 
1274         epca_timer.function = epcapoll;
 
1275         mod_timer(&epca_timer, jiffies + HZ/25);
 
1279         tty_unregister_driver(pc_driver);
 
1281         put_tty_driver(pc_info);
 
1283         put_tty_driver(pc_driver);
 
1288 static void post_fep_init(unsigned int crd)
 
1291         void __iomem *memaddr;
 
1292         struct global_data __iomem *gd;
 
1293         struct board_info *bd;
 
1294         struct board_chan __iomem *bc;
 
1296         int shrinkmem = 0, lowwater;
 
1299          * This call is made by the user via. the ioctl call DIGI_INIT. It is
 
1300          * responsible for setting up all the card specific stuff.
 
1305          * If this is a PCI board, get the port info. Remember PCI cards do not
 
1306          * have entries into the epcaconfig.h file, so we can't get the number
 
1307          * of ports from it. Unfortunetly, this means that anyone doing a
 
1308          * DIGI_GETINFO before the board has booted will get an invalid number
 
1309          * of ports returned (It should return 0). Calls to DIGI_GETINFO after
 
1310          * DIGI_INIT has been called will return the proper values.
 
1312         if (bd->type >= PCIXEM) { /* Begin get PCI number of ports */
 
1314                  * Below we use XEMPORTS as a memory offset regardless of which
 
1315                  * PCI card it is. This is because all of the supported PCI
 
1316                  * cards have the same memory offset for the channel data. This
 
1317                  * will have to be changed if we ever develop a PCI/XE card.
 
1318                  * NOTE : The FEP manual states that the port offset is 0xC22
 
1319                  * as opposed to 0xC02. This is only true for PC/XE, and PC/XI
 
1320                  * cards; not for the XEM, or CX series. On the PCI cards the
 
1321                  * number of ports is determined by reading a ID PROM located
 
1322                  * in the box attached to the card. The card can then determine
 
1323                  * the index the id to determine the number of ports available.
 
1324                  * (FYI - The id should be located at 0x1ac (And may use up to
 
1325                  * 4 bytes if the box in question is a XEM or CX)).
 
1327                 /* PCI cards are already remapped at this point ISA are not */
 
1328                 bd->numports = readw(bd->re_map_membase + XEMPORTS);
 
1329                 epcaassert(bd->numports <= 64,"PCI returned a invalid number of ports");
 
1330                 nbdevs += (bd->numports);
 
1332                 /* Fix up the mappings for ISA/EISA etc */
 
1333                 /* FIXME: 64K - can we be smarter ? */
 
1334                 bd->re_map_membase = ioremap(bd->membase, 0x10000);
 
1338                 card_ptr[crd] = card_ptr[crd-1] + boards[crd-1].numports;
 
1340                 card_ptr[crd] = &digi_channels[crd]; /* <- For card 0 only */
 
1343         epcaassert(ch <= &digi_channels[nbdevs - 1], "ch out of range");
 
1345         memaddr = bd->re_map_membase;
 
1348          * The below assignment will set bc to point at the BEGINING of the
 
1349          * cards channel structures. For 1 card there will be between 8 and 64
 
1350          * of these structures.
 
1352         bc = memaddr + CHANSTRUCT;
 
1355          * The below assignment will set gd to point at the BEGINING of global
 
1356          * memory address 0xc00. The first data in that global memory actually
 
1357          * starts at address 0xc1a. The command in pointer begins at 0xd10.
 
1359         gd = memaddr + GLOBAL;
 
1362          * XEPORTS (address 0xc22) points at the number of channels the card
 
1363          * supports. (For 64XE, XI, XEM, and XR use 0xc02)
 
1365         if ((bd->type == PCXEVE || bd->type == PCXE) && (readw(memaddr + XEPORTS) < 3))
 
1367         if (bd->type < PCIXEM)
 
1368                 if (!request_region((int)bd->port, 4, board_desc[bd->type]))
 
1373          * Remember ch is the main drivers channels structure, while bc is the
 
1374          * cards channel structure.
 
1376         for (i = 0; i < bd->numports; i++, ch++, bc++) {
 
1377                 unsigned long flags;
 
1382                 INIT_WORK(&ch->tqueue, do_softint);
 
1383                 ch->board = &boards[crd];
 
1385                 spin_lock_irqsave(&epca_lock, flags);
 
1388                  * Since some of the boards use different bitmaps for
 
1389                  * their control signals we cannot hard code these
 
1390                  * values and retain portability. We virtualize this
 
1419                 if (boards[crd].altpin) {
 
1420                         ch->dsr = ch->m_dcd;
 
1421                         ch->dcd = ch->m_dsr;
 
1422                         ch->digiext.digi_flags |= DIGI_ALTPIN;
 
1424                         ch->dcd = ch->m_dcd;
 
1425                         ch->dsr = ch->m_dsr;
 
1430                 ch->magic      = EPCA_MAGIC;
 
1434                         fepcmd(ch, SETBUFFER, 32, 0, 0, 0);
 
1438                 tseg = readw(&bc->tseg);
 
1439                 rseg = readw(&bc->rseg);
 
1445                         /* Cover all the 2MEG cards */
 
1446                         ch->txptr = memaddr + ((tseg << 4) & 0x1fffff);
 
1447                         ch->rxptr = memaddr + ((rseg << 4) & 0x1fffff);
 
1448                         ch->txwin = FEPWIN | (tseg >> 11);
 
1449                         ch->rxwin = FEPWIN | (rseg >> 11);
 
1454                         /* Cover all the 32K windowed cards */
 
1455                         /* Mask equal to window size - 1 */
 
1456                         ch->txptr = memaddr + ((tseg << 4) & 0x7fff);
 
1457                         ch->rxptr = memaddr + ((rseg << 4) & 0x7fff);
 
1458                         ch->txwin = FEPWIN | (tseg >> 11);
 
1459                         ch->rxwin = FEPWIN | (rseg >> 11);
 
1464                         ch->txptr = memaddr + (((tseg - bd->memory_seg) << 4) & 0x1fff);
 
1465                         ch->txwin = FEPWIN | ((tseg - bd->memory_seg) >> 9);
 
1466                         ch->rxptr = memaddr + (((rseg - bd->memory_seg) << 4) & 0x1fff);
 
1467                         ch->rxwin = FEPWIN | ((rseg - bd->memory_seg) >>9 );
 
1472                         ch->txptr = memaddr + ((tseg - bd->memory_seg) << 4);
 
1473                         ch->rxptr = memaddr + ((rseg - bd->memory_seg) << 4);
 
1474                         ch->txwin = ch->rxwin = 0;
 
1479                 ch->txbufsize = readw(&bc->tmax) + 1;
 
1482                 ch->rxbufsize = readw(&bc->rmax) + 1;
 
1484                 lowwater = ch->txbufsize >= 2000 ? 1024 : (ch->txbufsize / 2);
 
1486                 /* Set transmitter low water mark */
 
1487                 fepcmd(ch, STXLWATER, lowwater, 0, 10, 0);
 
1489                 /* Set receiver low water mark */
 
1490                 fepcmd(ch, SRXLWATER, (ch->rxbufsize / 4), 0, 10, 0);
 
1492                 /* Set receiver high water mark */
 
1493                 fepcmd(ch, SRXHWATER, (3 * ch->rxbufsize / 4), 0, 10, 0);
 
1495                 writew(100, &bc->edelay);
 
1496                 writeb(1, &bc->idata);
 
1498                 ch->startc  = readb(&bc->startc);
 
1499                 ch->stopc   = readb(&bc->stopc);
 
1500                 ch->startca = readb(&bc->startca);
 
1501                 ch->stopca  = readb(&bc->stopca);
 
1511                 ch->close_delay = 50;
 
1513                 ch->blocked_open = 0;
 
1514                 init_waitqueue_head(&ch->open_wait);
 
1515                 init_waitqueue_head(&ch->close_wait);
 
1517                 spin_unlock_irqrestore(&epca_lock, flags);
 
1521                 "Digi PC/Xx Driver V%s:  %s I/O = 0x%lx Mem = 0x%lx Ports = %d\n",
 
1522                 VERSION, board_desc[bd->type], (long)bd->port, (long)bd->membase, bd->numports);
 
1526 static void epcapoll(unsigned long ignored)
 
1528         unsigned long flags;
 
1530         volatile unsigned int head, tail;
 
1532         struct board_info *bd;
 
1535          * This routine is called upon every timer interrupt. Even though the
 
1536          * Digi series cards are capable of generating interrupts this method
 
1537          * of non-looping polling is more efficient. This routine checks for
 
1538          * card generated events (Such as receive data, are transmit buffer
 
1539          * empty) and acts on those events.
 
1541         for (crd = 0; crd < num_cards; crd++) {
 
1545                 if ((bd->status == DISABLED) || digi_poller_inhibited)
 
1549                  * assertmemoff is not needed here; indeed it is an empty
 
1550                  * subroutine. It is being kept because future boards may need
 
1551                  * this as well as some legacy boards.
 
1553                 spin_lock_irqsave(&epca_lock, flags);
 
1560                  * In this case head and tail actually refer to the event queue
 
1561                  * not the transmit or receive queue.
 
1563                 head = readw(&ch->mailbox->ein);
 
1564                 tail = readw(&ch->mailbox->eout);
 
1566                 /* If head isn't equal to tail we have an event */
 
1571                 spin_unlock_irqrestore(&epca_lock, flags);
 
1572         } /* End for each card */
 
1573         mod_timer(&epca_timer, jiffies + (HZ / 25));
 
1576 static void doevent(int crd)
 
1578         void __iomem *eventbuf;
 
1579         struct channel *ch, *chan0;
 
1580         static struct tty_struct *tty;
 
1581         struct board_info *bd;
 
1582         struct board_chan __iomem *bc;
 
1583         unsigned int tail, head;
 
1588          * This subroutine is called by epcapoll when an event is detected
 
1589          * in the event queue. This routine responds to those events.
 
1593         chan0 = card_ptr[crd];
 
1594         epcaassert(chan0 <= &digi_channels[nbdevs - 1], "ch out of range");
 
1595         assertgwinon(chan0);
 
1596         while ((tail = readw(&chan0->mailbox->eout)) != (head = readw(&chan0->mailbox->ein))) { /* Begin while something in event queue */
 
1597                 assertgwinon(chan0);
 
1598                 eventbuf = bd->re_map_membase + tail + ISTART;
 
1599                 /* Get the channel the event occurred on */
 
1600                 channel = readb(eventbuf);
 
1601                 /* Get the actual event code that occurred */
 
1602                 event = readb(eventbuf + 1);
 
1604                  * The two assignments below get the current modem status
 
1605                  * (mstat) and the previous modem status (lstat). These are
 
1606                  * useful becuase an event could signal a change in modem
 
1609                 mstat = readb(eventbuf + 2);
 
1610                 lstat = readb(eventbuf + 3);
 
1612                 ch = chan0 + channel;
 
1613                 if ((unsigned)channel >= bd->numports || !ch)  {
 
1614                         if (channel >= bd->numports)
 
1620                 if ((bc = ch->brdchan) == NULL)
 
1623                 if (event & DATA_IND)  { /* Begin DATA_IND */
 
1626                 } /* End DATA_IND */
 
1627                 /* else *//* Fix for DCD transition missed bug */
 
1628                 if (event & MODEMCHG_IND) {
 
1629                         /* A modem signal change has been indicated */
 
1631                         if (ch->asyncflags & ASYNC_CHECK_CD) {
 
1632                                 if (mstat & ch->dcd)  /* We are now receiving dcd */
 
1633                                         wake_up_interruptible(&ch->open_wait);
 
1635                                         pc_sched_event(ch, EPCA_EVENT_HANGUP); /* No dcd; hangup */
 
1640                         if (event & BREAK_IND) {
 
1641                                 /* A break has been indicated */
 
1642                                 tty_insert_flip_char(tty, 0, TTY_BREAK);
 
1643                                 tty_schedule_flip(tty);
 
1644                         } else if (event & LOWTX_IND)  {
 
1645                                 if (ch->statusflags & LOWWAIT) {
 
1646                                         ch->statusflags &= ~LOWWAIT;
 
1649                         } else if (event & EMPTYTX_IND) {
 
1650                                 /* This event is generated by setup_empty_event */
 
1651                                 ch->statusflags &= ~TXBUSY;
 
1652                                 if (ch->statusflags & EMPTYWAIT) {
 
1653                                         ch->statusflags &= ~EMPTYWAIT;
 
1661                 writew(1, &bc->idata);
 
1662                 writew((tail + 4) & (IMAX - ISTART - 4), &chan0->mailbox->eout);
 
1664         } /* End while something in event queue */
 
1667 static void fepcmd(struct channel *ch, int cmd, int word_or_byte,
 
1668                    int byte2, int ncmds, int bytecmd)
 
1670         unchar __iomem *memaddr;
 
1671         unsigned int head, cmdTail, cmdStart, cmdMax;
 
1675         /* This is the routine in which commands may be passed to the card. */
 
1677         if (ch->board->status == DISABLED)
 
1680         /* Remember head (As well as max) is just an offset not a base addr */
 
1681         head = readw(&ch->mailbox->cin);
 
1682         /* cmdStart is a base address */
 
1683         cmdStart = readw(&ch->mailbox->cstart);
 
1685          * We do the addition below because we do not want a max pointer
 
1686          * relative to cmdStart. We want a max pointer that points at the
 
1687          * physical end of the command queue.
 
1689         cmdMax = (cmdStart + 4 + readw(&ch->mailbox->cmax));
 
1690         memaddr = ch->board->re_map_membase;
 
1692         if (head >= (cmdMax - cmdStart) || (head & 03))  {
 
1693                 printk(KERN_ERR "line %d: Out of range, cmd = %x, head = %x\n", __LINE__,  cmd, head);
 
1694                 printk(KERN_ERR "line %d: Out of range, cmdMax = %x, cmdStart = %x\n", __LINE__,  cmdMax, cmdStart);
 
1698                 writeb(cmd, memaddr + head + cmdStart + 0);
 
1699                 writeb(ch->channelnum,  memaddr + head + cmdStart + 1);
 
1700                 /* Below word_or_byte is bits to set */
 
1701                 writeb(word_or_byte,  memaddr + head + cmdStart + 2);
 
1702                 /* Below byte2 is bits to reset */
 
1703                 writeb(byte2, memaddr + head + cmdStart + 3);
 
1705                 writeb(cmd, memaddr + head + cmdStart + 0);
 
1706                 writeb(ch->channelnum,  memaddr + head + cmdStart + 1);
 
1707                 writeb(word_or_byte,  memaddr + head + cmdStart + 2);
 
1709         head = (head + 4) & (cmdMax - cmdStart - 4);
 
1710         writew(head, &ch->mailbox->cin);
 
1716                         printk(KERN_ERR "<Error> - Fep not responding in fepcmd()\n");
 
1719                 head = readw(&ch->mailbox->cin);
 
1720                 cmdTail = readw(&ch->mailbox->cout);
 
1721                 n = (head - cmdTail) & (cmdMax - cmdStart - 4);
 
1723                  * Basically this will break when the FEP acknowledges the
 
1724                  * command by incrementing cmdTail (Making it equal to head).
 
1726                 if (n <= ncmds * (sizeof(short) * 4))
 
1732  * Digi products use fields in their channels structures that are very similar
 
1733  * to the c_cflag and c_iflag fields typically found in UNIX termios
 
1734  * structures. The below three routines allow mappings between these hardware
 
1735  * "flags" and their respective Linux flags.
 
1737 static unsigned termios2digi_h(struct channel *ch, unsigned cflag)
 
1741         if (cflag & CRTSCTS) {
 
1742                 ch->digiext.digi_flags |= (RTSPACE | CTSPACE);
 
1743                 res |= ((ch->m_cts) | (ch->m_rts));
 
1746         if (ch->digiext.digi_flags & RTSPACE)
 
1749         if (ch->digiext.digi_flags & DTRPACE)
 
1752         if (ch->digiext.digi_flags & CTSPACE)
 
1755         if (ch->digiext.digi_flags & DSRPACE)
 
1758         if (ch->digiext.digi_flags & DCDPACE)
 
1761         if (res & (ch->m_rts))
 
1762                 ch->digiext.digi_flags |= RTSPACE;
 
1764         if (res & (ch->m_cts))
 
1765                 ch->digiext.digi_flags |= CTSPACE;
 
1770 static unsigned termios2digi_i(struct channel *ch, unsigned iflag)
 
1772         unsigned res = iflag & (IGNBRK | BRKINT | IGNPAR | PARMRK |
 
1773                                 INPCK | ISTRIP|IXON|IXANY|IXOFF);
 
1774         if (ch->digiext.digi_flags & DIGI_AIXON)
 
1779 static unsigned termios2digi_c(struct channel *ch, unsigned cflag)
 
1782         if (cflag & CBAUDEX) {
 
1783                 ch->digiext.digi_flags |= DIGI_FAST;
 
1785                  * HUPCL bit is used by FEP to indicate fast baud table is to
 
1790                 ch->digiext.digi_flags &= ~DIGI_FAST;
 
1792          * CBAUD has bit position 0x1000 set these days to indicate Linux
 
1793          * baud rate remap. Digi hardware can't handle the bit assignment.
 
1794          * (We use a different bit assignment for high speed.). Clear this
 
1797         res |= cflag & ((CBAUD ^ CBAUDEX) | PARODD | PARENB | CSTOPB | CSIZE);
 
1799          * This gets a little confusing. The Digi cards have their own
 
1800          * representation of c_cflags controling baud rate. For the most part
 
1801          * this is identical to the Linux implementation. However; Digi
 
1802          * supports one rate (76800) that Linux doesn't. This means that the
 
1803          * c_cflag entry that would normally mean 76800 for Digi actually means
 
1804          * 115200 under Linux. Without the below mapping, a stty 115200 would
 
1805          * only drive the board at 76800. Since the rate 230400 is also found
 
1806          * after 76800, the same problem afflicts us when we choose a rate of
 
1807          * 230400. Without the below modificiation stty 230400 would actually
 
1810          * There are two additional differences. The Linux value for CLOCAL
 
1811          * (0x800; 0004000) has no meaning to the Digi hardware. Also in later
 
1812          * releases of Linux; the CBAUD define has CBAUDEX (0x1000; 0010000)
 
1813          * ored into it (CBAUD = 0x100f as opposed to 0xf). CBAUDEX should be
 
1814          * checked for a screened out prior to termios2digi_c returning. Since
 
1815          * CLOCAL isn't used by the board this can be ignored as long as the
 
1816          * returned value is used only by Digi hardware.
 
1818         if (cflag & CBAUDEX) {
 
1820                  * The below code is trying to guarantee that only baud rates
 
1821                  * 115200 and 230400 are remapped. We use exclusive or because
 
1822                  * the various baud rates share common bit positions and
 
1823                  * therefore can't be tested for easily.
 
1825                 if ((!((cflag & 0x7) ^ (B115200 & ~CBAUDEX))) ||
 
1826                     (!((cflag & 0x7) ^ (B230400 & ~CBAUDEX))))
 
1832 /* Caller must hold the locks */
 
1833 static void epcaparam(struct tty_struct *tty, struct channel *ch)
 
1835         unsigned int cmdHead;
 
1836         struct ktermios *ts;
 
1837         struct board_chan __iomem *bc;
 
1838         unsigned mval, hflow, cflag, iflag;
 
1841         epcaassert(bc !=0, "bc out of range");
 
1845         if ((ts->c_cflag & CBAUD) == 0)  { /* Begin CBAUD detected */
 
1846                 cmdHead = readw(&bc->rin);
 
1847                 writew(cmdHead, &bc->rout);
 
1848                 cmdHead = readw(&bc->tin);
 
1849                 /* Changing baud in mid-stream transmission can be wonderful */
 
1851                  * Flush current transmit buffer by setting cmdTail pointer
 
1852                  * (tout) to cmdHead pointer (tin). Hopefully the transmit
 
1855                 fepcmd(ch, STOUT, (unsigned) cmdHead, 0, 0, 0);
 
1857         } else { /* Begin CBAUD not detected */
 
1859                  * c_cflags have changed but that change had nothing to do with
 
1860                  * BAUD. Propagate the change to the card.
 
1862                 cflag = termios2digi_c(ch, ts->c_cflag);
 
1863                 if (cflag != ch->fepcflag)  {
 
1864                         ch->fepcflag = cflag;
 
1865                         /* Set baud rate, char size, stop bits, parity */
 
1866                         fepcmd(ch, SETCTRLFLAGS, (unsigned) cflag, 0, 0, 0);
 
1869                  * If the user has not forced CLOCAL and if the device is not a
 
1870                  * CALLOUT device (Which is always CLOCAL) we set flags such
 
1871                  * that the driver will wait on carrier detect.
 
1873                 if (ts->c_cflag & CLOCAL)
 
1874                         ch->asyncflags &= ~ASYNC_CHECK_CD;
 
1876                         ch->asyncflags |= ASYNC_CHECK_CD;
 
1877                 mval = ch->m_dtr | ch->m_rts;
 
1878         } /* End CBAUD not detected */
 
1879         iflag = termios2digi_i(ch, ts->c_iflag);
 
1880         /* Check input mode flags */
 
1881         if (iflag != ch->fepiflag)  {
 
1882                 ch->fepiflag = iflag;
 
1884                  * Command sets channels iflag structure on the board. Such
 
1885                  * things as input soft flow control, handling of parity
 
1886                  * errors, and break handling are all set here.
 
1888                 /* break handling, parity handling, input stripping, flow control chars */
 
1889                 fepcmd(ch, SETIFLAGS, (unsigned int) ch->fepiflag, 0, 0, 0);
 
1892          * Set the board mint value for this channel. This will cause hardware
 
1893          * events to be generated each time the DCD signal (Described in mint)
 
1896         writeb(ch->dcd, &bc->mint);
 
1897         if ((ts->c_cflag & CLOCAL) || (ch->digiext.digi_flags & DIGI_FORCEDCD))
 
1898                 if (ch->digiext.digi_flags & DIGI_FORCEDCD)
 
1899                         writeb(0, &bc->mint);
 
1900         ch->imodem = readb(&bc->mstat);
 
1901         hflow = termios2digi_h(ch, ts->c_cflag);
 
1902         if (hflow != ch->hflow)  {
 
1905                  * Hard flow control has been selected but the board is not
 
1906                  * using it. Activate hard flow control now.
 
1908                 fepcmd(ch, SETHFLOW, hflow, 0xff, 0, 1);
 
1910         mval ^= ch->modemfake & (mval ^ ch->modem);
 
1912         if (ch->omodem ^ mval)  {
 
1915                  * The below command sets the DTR and RTS mstat structure. If
 
1916                  * hard flow control is NOT active these changes will drive the
 
1917                  * output of the actual DTR and RTS lines. If hard flow control
 
1918                  * is active, the changes will be saved in the mstat structure
 
1919                  * and only asserted when hard flow control is turned off.
 
1922                 /* First reset DTR & RTS; then set them */
 
1923                 fepcmd(ch, SETMODEM, 0, ((ch->m_dtr)|(ch->m_rts)), 0, 1);
 
1924                 fepcmd(ch, SETMODEM, mval, 0, 0, 1);
 
1926         if (ch->startc != ch->fepstartc || ch->stopc != ch->fepstopc)  {
 
1927                 ch->fepstartc = ch->startc;
 
1928                 ch->fepstopc = ch->stopc;
 
1930                  * The XON / XOFF characters have changed; propagate these
 
1931                  * changes to the card.
 
1933                 fepcmd(ch, SONOFFC, ch->fepstartc, ch->fepstopc, 0, 1);
 
1935         if (ch->startca != ch->fepstartca || ch->stopca != ch->fepstopca)  {
 
1936                 ch->fepstartca = ch->startca;
 
1937                 ch->fepstopca = ch->stopca;
 
1939                  * Similar to the above, this time the auxilarly XON / XOFF
 
1940                  * characters have changed; propagate these changes to the card.
 
1942                 fepcmd(ch, SAUXONOFFC, ch->fepstartca, ch->fepstopca, 0, 1);
 
1946 /* Caller holds lock */
 
1947 static void receive_data(struct channel *ch)
 
1950         struct ktermios *ts = NULL;
 
1951         struct tty_struct *tty;
 
1952         struct board_chan __iomem *bc;
 
1953         int dataToRead, wrapgap, bytesAvailable;
 
1954         unsigned int tail, head;
 
1955         unsigned int wrapmask;
 
1958          * This routine is called by doint when a receive data event has taken
 
1962         if (ch->statusflags & RXSTOPPED)
 
1969         wrapmask = ch->rxbufsize - 1;
 
1972          * Get the head and tail pointers to the receiver queue. Wrap the head
 
1973          * pointer if it has reached the end of the buffer.
 
1975         head = readw(&bc->rin);
 
1977         tail = readw(&bc->rout) & wrapmask;
 
1979         bytesAvailable = (head - tail) & wrapmask;
 
1980         if (bytesAvailable == 0)
 
1983         /* If CREAD bit is off or device not open, set TX tail to head */
 
1984         if (!tty || !ts || !(ts->c_cflag & CREAD))  {
 
1985                 writew(head, &bc->rout);
 
1989         if (tty_buffer_request_room(tty, bytesAvailable + 1) == 0)
 
1992         if (readb(&bc->orun)) {
 
1993                 writeb(0, &bc->orun);
 
1994                 printk(KERN_WARNING "epca; overrun! DigiBoard device %s\n",tty->name);
 
1995                 tty_insert_flip_char(tty, 0, TTY_OVERRUN);
 
1998         while (bytesAvailable > 0)  { /* Begin while there is data on the card */
 
1999                 wrapgap = (head >= tail) ? head - tail : ch->rxbufsize - tail;
 
2001                  * Even if head has wrapped around only report the amount of
 
2002                  * data to be equal to the size - tail. Remember memcpy can't
 
2003                  * automaticly wrap around the receive buffer.
 
2005                 dataToRead = (wrapgap < bytesAvailable) ? wrapgap : bytesAvailable;
 
2006                 /* Make sure we don't overflow the buffer */
 
2007                 dataToRead = tty_prepare_flip_string(tty, &rptr, dataToRead);
 
2008                 if (dataToRead == 0)
 
2011                  * Move data read from our card into the line disciplines
 
2012                  * buffer for translation if necessary.
 
2014                 memcpy_fromio(rptr, ch->rxptr + tail, dataToRead);
 
2015                 tail = (tail + dataToRead) & wrapmask;
 
2016                 bytesAvailable -= dataToRead;
 
2017         } /* End while there is data on the card */
 
2019         writew(tail, &bc->rout);
 
2020         /* Must be called with global data */
 
2021         tty_schedule_flip(ch->tty);
 
2024 static int info_ioctl(struct tty_struct *tty, struct file *file,
 
2025                     unsigned int cmd, unsigned long arg)
 
2030                         struct digi_info di;
 
2033                         if (get_user(brd, (unsigned int __user *)arg))
 
2035                         if (brd < 0 || brd >= num_cards || num_cards == 0)
 
2038                         memset(&di, 0, sizeof(di));
 
2041                         di.status = boards[brd].status;
 
2042                         di.type = boards[brd].type ;
 
2043                         di.numports = boards[brd].numports ;
 
2044                         /* Legacy fixups - just move along nothing to see */
 
2045                         di.port = (unsigned char *)boards[brd].port ;
 
2046                         di.membase = (unsigned char *)boards[brd].membase ;
 
2048                         if (copy_to_user((void __user *)arg, &di, sizeof(di)))
 
2056                         int brd = arg & 0xff000000 >> 16;
 
2057                         unsigned char state = arg & 0xff;
 
2059                         if (brd < 0 || brd >= num_cards) {
 
2060                                 printk(KERN_ERR "epca: DIGI POLLER : brd not valid!\n");
 
2063                         digi_poller_inhibited = state;
 
2070                          * This call is made by the apps to complete the
 
2071                          * initilization of the board(s). This routine is
 
2072                          * responsible for setting the card to its initial
 
2073                          * state and setting the drivers control fields to the
 
2074                          * sutianle settings for the card in question.
 
2077                         for (crd = 0; crd < num_cards; crd++)
 
2087 static int pc_tiocmget(struct tty_struct *tty, struct file *file)
 
2089         struct channel *ch = (struct channel *) tty->driver_data;
 
2090         struct board_chan __iomem *bc;
 
2091         unsigned int mstat, mflag = 0;
 
2092         unsigned long flags;
 
2099         spin_lock_irqsave(&epca_lock, flags);
 
2101         mstat = readb(&bc->mstat);
 
2103         spin_unlock_irqrestore(&epca_lock, flags);
 
2105         if (mstat & ch->m_dtr)
 
2107         if (mstat & ch->m_rts)
 
2109         if (mstat & ch->m_cts)
 
2111         if (mstat & ch->dsr)
 
2113         if (mstat & ch->m_ri)
 
2115         if (mstat & ch->dcd)
 
2120 static int pc_tiocmset(struct tty_struct *tty, struct file *file,
 
2121                        unsigned int set, unsigned int clear)
 
2123         struct channel *ch = (struct channel *) tty->driver_data;
 
2124         unsigned long flags;
 
2129         spin_lock_irqsave(&epca_lock, flags);
 
2131          * I think this modemfake stuff is broken. It doesn't correctly reflect
 
2132          * the behaviour desired by the TIOCM* ioctls. Therefore this is
 
2135         if (set & TIOCM_RTS) {
 
2136                 ch->modemfake |= ch->m_rts;
 
2137                 ch->modem |= ch->m_rts;
 
2139         if (set & TIOCM_DTR) {
 
2140                 ch->modemfake |= ch->m_dtr;
 
2141                 ch->modem |= ch->m_dtr;
 
2143         if (clear & TIOCM_RTS) {
 
2144                 ch->modemfake |= ch->m_rts;
 
2145                 ch->modem &= ~ch->m_rts;
 
2147         if (clear & TIOCM_DTR) {
 
2148                 ch->modemfake |= ch->m_dtr;
 
2149                 ch->modem &= ~ch->m_dtr;
 
2153          * The below routine generally sets up parity, baud, flow control
 
2154          * issues, etc.... It effect both control flags and input flags.
 
2158         spin_unlock_irqrestore(&epca_lock, flags);
 
2162 static int pc_ioctl(struct tty_struct *tty, struct file * file,
 
2163                     unsigned int cmd, unsigned long arg)
 
2167         unsigned long flags;
 
2168         unsigned int mflag, mstat;
 
2169         unsigned char startc, stopc;
 
2170         struct board_chan __iomem *bc;
 
2171         struct channel *ch = (struct channel *) tty->driver_data;
 
2172         void __user *argp = (void __user *)arg;
 
2180          * For POSIX compliance we need to add more ioctls. See tty_ioctl.c in
 
2181          * /usr/src/linux/drivers/char for a good example. In particular think
 
2182          * about adding TCSETAF, TCSETAW, TCSETA, TCSETSF, TCSETSW, TCSETS.
 
2185         case TCSBRK:    /* SVID version: non-zero arg --> no break */
 
2186                 retval = tty_check_change(tty);
 
2189                 /* Setup an event to indicate when the transmit buffer empties */
 
2190                 spin_lock_irqsave(&epca_lock, flags);
 
2191                 setup_empty_event(tty,ch);
 
2192                 spin_unlock_irqrestore(&epca_lock, flags);
 
2193                 tty_wait_until_sent(tty, 0);
 
2195                         digi_send_break(ch, HZ / 4);    /* 1/4 second */
 
2197         case TCSBRKP:   /* support for POSIX tcsendbreak() */
 
2198                 retval = tty_check_change(tty);
 
2202                 /* Setup an event to indicate when the transmit buffer empties */
 
2203                 spin_lock_irqsave(&epca_lock, flags);
 
2204                 setup_empty_event(tty,ch);
 
2205                 spin_unlock_irqrestore(&epca_lock, flags);
 
2206                 tty_wait_until_sent(tty, 0);
 
2207                 digi_send_break(ch, arg ? arg*(HZ/10) : HZ/4);
 
2210                 if (put_user(C_CLOCAL(tty)?1:0, (unsigned long __user *)arg))
 
2217                         if (get_user(value, (unsigned __user *)argp))
 
2219                         tty->termios->c_cflag =
 
2220                                 ((tty->termios->c_cflag & ~CLOCAL) |
 
2221                                  (value ? CLOCAL : 0));
 
2225                 mflag = pc_tiocmget(tty, file);
 
2226                 if (put_user(mflag, (unsigned long __user *)argp))
 
2230                 if (get_user(mstat, (unsigned __user *)argp))
 
2232                 return pc_tiocmset(tty, file, mstat, ~mstat);
 
2234                 spin_lock_irqsave(&epca_lock, flags);
 
2235                 ch->omodem |= ch->m_dtr;
 
2237                 fepcmd(ch, SETMODEM, ch->m_dtr, 0, 10, 1);
 
2239                 spin_unlock_irqrestore(&epca_lock, flags);
 
2243                 spin_lock_irqsave(&epca_lock, flags);
 
2244                 ch->omodem &= ~ch->m_dtr;
 
2246                 fepcmd(ch, SETMODEM, 0, ch->m_dtr, 10, 1);
 
2248                 spin_unlock_irqrestore(&epca_lock, flags);
 
2251                 if (copy_to_user(argp, &ch->digiext, sizeof(digi_t)))
 
2256                 if (cmd == DIGI_SETAW) {
 
2257                         /* Setup an event to indicate when the transmit buffer empties */
 
2258                         spin_lock_irqsave(&epca_lock, flags);
 
2259                         setup_empty_event(tty,ch);
 
2260                         spin_unlock_irqrestore(&epca_lock, flags);
 
2261                         tty_wait_until_sent(tty, 0);
 
2263                         /* ldisc lock already held in ioctl */
 
2264                         if (tty->ldisc.flush_buffer)
 
2265                                 tty->ldisc.flush_buffer(tty);
 
2269                 if (copy_from_user(&ch->digiext, argp, sizeof(digi_t)))
 
2272                 if (ch->digiext.digi_flags & DIGI_ALTPIN)  {
 
2273                         ch->dcd = ch->m_dsr;
 
2274                         ch->dsr = ch->m_dcd;
 
2276                         ch->dcd = ch->m_dcd;
 
2277                         ch->dsr = ch->m_dsr;
 
2280                 spin_lock_irqsave(&epca_lock, flags);
 
2284                  * The below routine generally sets up parity, baud, flow
 
2285                  * control issues, etc.... It effect both control flags and
 
2290                 spin_unlock_irqrestore(&epca_lock, flags);
 
2295                 spin_lock_irqsave(&epca_lock, flags);
 
2297                 if (cmd == DIGI_GETFLOW) {
 
2298                         dflow.startc = readb(&bc->startc);
 
2299                         dflow.stopc = readb(&bc->stopc);
 
2301                         dflow.startc = readb(&bc->startca);
 
2302                         dflow.stopc = readb(&bc->stopca);
 
2305                 spin_unlock_irqrestore(&epca_lock, flags);
 
2307                 if (copy_to_user(argp, &dflow, sizeof(dflow)))
 
2313                 if (cmd == DIGI_SETFLOW) {
 
2314                         startc = ch->startc;
 
2317                         startc = ch->startca;
 
2321                 if (copy_from_user(&dflow, argp, sizeof(dflow)))
 
2324                 if (dflow.startc != startc || dflow.stopc != stopc) { /* Begin  if setflow toggled */
 
2325                         spin_lock_irqsave(&epca_lock, flags);
 
2328                         if (cmd == DIGI_SETFLOW) {
 
2329                                 ch->fepstartc = ch->startc = dflow.startc;
 
2330                                 ch->fepstopc = ch->stopc = dflow.stopc;
 
2331                                 fepcmd(ch, SONOFFC, ch->fepstartc, ch->fepstopc, 0, 1);
 
2333                                 ch->fepstartca = ch->startca = dflow.startc;
 
2334                                 ch->fepstopca  = ch->stopca = dflow.stopc;
 
2335                                 fepcmd(ch, SAUXONOFFC, ch->fepstartca, ch->fepstopca, 0, 1);
 
2338                         if (ch->statusflags & TXSTOPPED)
 
2342                         spin_unlock_irqrestore(&epca_lock, flags);
 
2343                 } /* End if setflow toggled */
 
2346                 return -ENOIOCTLCMD;
 
2351 static void pc_set_termios(struct tty_struct *tty, struct ktermios *old_termios)
 
2354         unsigned long flags;
 
2356          * verifyChannel returns the channel from the tty struct if it is
 
2357          * valid. This serves as a sanity check.
 
2359         if ((ch = verifyChannel(tty)) != NULL)  { /* Begin if channel valid */
 
2360                 spin_lock_irqsave(&epca_lock, flags);
 
2364                 spin_unlock_irqrestore(&epca_lock, flags);
 
2366                 if ((old_termios->c_cflag & CRTSCTS) &&
 
2367                          ((tty->termios->c_cflag & CRTSCTS) == 0))
 
2368                         tty->hw_stopped = 0;
 
2370                 if (!(old_termios->c_cflag & CLOCAL) &&
 
2371                          (tty->termios->c_cflag & CLOCAL))
 
2372                         wake_up_interruptible(&ch->open_wait);
 
2374         } /* End if channel valid */
 
2377 static void do_softint(struct work_struct *work)
 
2379         struct channel *ch = container_of(work, struct channel, tqueue);
 
2380         /* Called in response to a modem change event */
 
2381         if (ch && ch->magic == EPCA_MAGIC) {
 
2382                 struct tty_struct *tty = ch->tty;
 
2384                 if (tty && tty->driver_data) {
 
2385                         if (test_and_clear_bit(EPCA_EVENT_HANGUP, &ch->event)) {
 
2386                                 tty_hangup(tty);        /* FIXME: module removal race here - AKPM */
 
2387                                 wake_up_interruptible(&ch->open_wait);
 
2388                                 ch->asyncflags &= ~ASYNC_NORMAL_ACTIVE;
 
2395  * pc_stop and pc_start provide software flow control to the routine and the
 
2398 static void pc_stop(struct tty_struct *tty)
 
2401         unsigned long flags;
 
2403          * verifyChannel returns the channel from the tty struct if it is
 
2404          * valid. This serves as a sanity check.
 
2406         if ((ch = verifyChannel(tty)) != NULL) {
 
2407                 spin_lock_irqsave(&epca_lock, flags);
 
2408                 if ((ch->statusflags & TXSTOPPED) == 0) { /* Begin if transmit stop requested */
 
2410                         /* STOP transmitting now !! */
 
2411                         fepcmd(ch, PAUSETX, 0, 0, 0, 0);
 
2412                         ch->statusflags |= TXSTOPPED;
 
2414                 } /* End if transmit stop requested */
 
2415                 spin_unlock_irqrestore(&epca_lock, flags);
 
2419 static void pc_start(struct tty_struct *tty)
 
2423          * verifyChannel returns the channel from the tty struct if it is
 
2424          * valid. This serves as a sanity check.
 
2426         if ((ch = verifyChannel(tty)) != NULL) {
 
2427                 unsigned long flags;
 
2428                 spin_lock_irqsave(&epca_lock, flags);
 
2429                 /* Just in case output was resumed because of a change in Digi-flow */
 
2430                 if (ch->statusflags & TXSTOPPED)  { /* Begin transmit resume requested */
 
2431                         struct board_chan __iomem *bc;
 
2434                         if (ch->statusflags & LOWWAIT)
 
2435                                 writeb(1, &bc->ilow);
 
2436                         /* Okay, you can start transmitting again... */
 
2437                         fepcmd(ch, RESUMETX, 0, 0, 0, 0);
 
2438                         ch->statusflags &= ~TXSTOPPED;
 
2440                 } /* End transmit resume requested */
 
2441                 spin_unlock_irqrestore(&epca_lock, flags);
 
2446  * The below routines pc_throttle and pc_unthrottle are used to slow (And
 
2447  * resume) the receipt of data into the kernels receive buffers. The exact
 
2448  * occurrence of this depends on the size of the kernels receive buffer and
 
2449  * what the 'watermarks' are set to for that buffer. See the n_ttys.c file for
 
2452 static void pc_throttle(struct tty_struct *tty)
 
2455         unsigned long flags;
 
2457          * verifyChannel returns the channel from the tty struct if it is
 
2458          * valid. This serves as a sanity check.
 
2460         if ((ch = verifyChannel(tty)) != NULL) {
 
2461                 spin_lock_irqsave(&epca_lock, flags);
 
2462                 if ((ch->statusflags & RXSTOPPED) == 0) {
 
2464                         fepcmd(ch, PAUSERX, 0, 0, 0, 0);
 
2465                         ch->statusflags |= RXSTOPPED;
 
2468                 spin_unlock_irqrestore(&epca_lock, flags);
 
2472 static void pc_unthrottle(struct tty_struct *tty)
 
2475         unsigned long flags;
 
2477          * verifyChannel returns the channel from the tty struct if it is
 
2478          * valid. This serves as a sanity check.
 
2480         if ((ch = verifyChannel(tty)) != NULL) {
 
2481                 /* Just in case output was resumed because of a change in Digi-flow */
 
2482                 spin_lock_irqsave(&epca_lock, flags);
 
2483                 if (ch->statusflags & RXSTOPPED) {
 
2485                         fepcmd(ch, RESUMERX, 0, 0, 0, 0);
 
2486                         ch->statusflags &= ~RXSTOPPED;
 
2489                 spin_unlock_irqrestore(&epca_lock, flags);
 
2493 void digi_send_break(struct channel *ch, int msec)
 
2495         unsigned long flags;
 
2497         spin_lock_irqsave(&epca_lock, flags);
 
2500          * Maybe I should send an infinite break here, schedule() for msec
 
2501          * amount of time, and then stop the break. This way, the user can't
 
2502          * screw up the FEP by causing digi_send_break() to be called (i.e. via
 
2503          * an ioctl()) more than once in msec amount of time.
 
2504          * Try this for now...
 
2506         fepcmd(ch, SENDBREAK, msec, 0, 10, 0);
 
2508         spin_unlock_irqrestore(&epca_lock, flags);
 
2511 /* Caller MUST hold the lock */
 
2512 static void setup_empty_event(struct tty_struct *tty, struct channel *ch)
 
2514         struct board_chan __iomem *bc = ch->brdchan;
 
2517         ch->statusflags |= EMPTYWAIT;
 
2519          * When set the iempty flag request a event to be generated when the
 
2520          * transmit buffer is empty (If there is no BREAK in progress).
 
2522         writeb(1, &bc->iempty);
 
2526 void epca_setup(char *str, int *ints)
 
2528         struct board_info board;
 
2529         int               index, loop, last;
 
2534          * If this routine looks a little strange it is because it is only
 
2535          * called if a LILO append command is given to boot the kernel with
 
2536          * parameters. In this way, we can provide the user a method of
 
2537          * changing his board configuration without rebuilding the kernel.
 
2542         memset(&board, 0, sizeof(board));
 
2544         /* Assume the data is int first, later we can change it */
 
2545         /* I think that array position 0 of ints holds the number of args */
 
2546         for (last = 0, index = 1; index <= ints[0]; index++)
 
2547                 switch (index) { /* Begin parse switch */
 
2549                         board.status = ints[index];
 
2551                          * We check for 2 (As opposed to 1; because 2 is a flag
 
2552                          * instructing the driver to ignore epcaconfig.) For
 
2553                          * this reason we check for 2.
 
2555                         if (board.status == 2) { /* Begin ignore epcaconfig as well as lilo cmd line */
 
2559                         } /* End ignore epcaconfig as well as lilo cmd line */
 
2561                         if (board.status > 2) {
 
2562                                 printk(KERN_ERR "epca_setup: Invalid board status 0x%x\n", board.status);
 
2563                                 invalid_lilo_config = 1;
 
2564                                 setup_error_code |= INVALID_BOARD_STATUS;
 
2570                         board.type = ints[index];
 
2571                         if (board.type >= PCIXEM)  {
 
2572                                 printk(KERN_ERR "epca_setup: Invalid board type 0x%x\n", board.type);
 
2573                                 invalid_lilo_config = 1;
 
2574                                 setup_error_code |= INVALID_BOARD_TYPE;
 
2580                         board.altpin = ints[index];
 
2581                         if (board.altpin > 1) {
 
2582                                 printk(KERN_ERR "epca_setup: Invalid board altpin 0x%x\n", board.altpin);
 
2583                                 invalid_lilo_config = 1;
 
2584                                 setup_error_code |= INVALID_ALTPIN;
 
2591                         board.numports = ints[index];
 
2592                         if (board.numports < 2 || board.numports > 256) {
 
2593                                 printk(KERN_ERR "epca_setup: Invalid board numports 0x%x\n", board.numports);
 
2594                                 invalid_lilo_config = 1;
 
2595                                 setup_error_code |= INVALID_NUM_PORTS;
 
2598                         nbdevs += board.numports;
 
2603                         board.port = ints[index];
 
2604                         if (ints[index] <= 0) {
 
2605                                 printk(KERN_ERR "epca_setup: Invalid io port 0x%x\n", (unsigned int)board.port);
 
2606                                 invalid_lilo_config = 1;
 
2607                                 setup_error_code |= INVALID_PORT_BASE;
 
2614                         board.membase = ints[index];
 
2615                         if (ints[index] <= 0) {
 
2616                                 printk(KERN_ERR "epca_setup: Invalid memory base 0x%x\n",(unsigned int)board.membase);
 
2617                                 invalid_lilo_config = 1;
 
2618                                 setup_error_code |= INVALID_MEM_BASE;
 
2625                         printk(KERN_ERR "<Error> - epca_setup: Too many integer parms\n");
 
2628                 } /* End parse switch */
 
2630         while (str && *str)  { /* Begin while there is a string arg */
 
2631                 /* find the next comma or terminator */
 
2633                 /* While string is not null, and a comma hasn't been found */
 
2634                 while (*temp && (*temp != ','))
 
2640                 /* Set index to the number of args + 1 */
 
2646                         if (strncmp("Disable", str, len) == 0)
 
2648                         else if (strncmp("Enable", str, len) == 0)
 
2651                                 printk(KERN_ERR "epca_setup: Invalid status %s\n", str);
 
2652                                 invalid_lilo_config = 1;
 
2653                                 setup_error_code |= INVALID_BOARD_STATUS;
 
2660                         for (loop = 0; loop < EPCA_NUM_TYPES; loop++)
 
2661                                 if (strcmp(board_desc[loop], str) == 0)
 
2664                          * If the index incremented above refers to a
 
2665                          * legitamate board type set it here.
 
2667                         if (index < EPCA_NUM_TYPES)
 
2670                                 printk(KERN_ERR "epca_setup: Invalid board type: %s\n", str);
 
2671                                 invalid_lilo_config = 1;
 
2672                                 setup_error_code |= INVALID_BOARD_TYPE;
 
2680                         if (strncmp("Disable", str, len) == 0)
 
2682                         else if (strncmp("Enable", str, len) == 0)
 
2685                                 printk(KERN_ERR "epca_setup: Invalid altpin %s\n", str);
 
2686                                 invalid_lilo_config = 1;
 
2687                                 setup_error_code |= INVALID_ALTPIN;
 
2695                         while (isdigit(*t2))
 
2699                                 printk(KERN_ERR "epca_setup: Invalid port count %s\n", str);
 
2700                                 invalid_lilo_config = 1;
 
2701                                 setup_error_code |= INVALID_NUM_PORTS;
 
2706                          * There is not a man page for simple_strtoul but the
 
2707                          * code can be found in vsprintf.c. The first argument
 
2708                          * is the string to translate (To an unsigned long
 
2709                          * obviously), the second argument can be the address
 
2710                          * of any character variable or a NULL. If a variable
 
2711                          * is given, the end pointer of the string will be
 
2712                          * stored in that variable; if a NULL is given the end
 
2713                          * pointer will not be returned. The last argument is
 
2714                          * the base to use. If a 0 is indicated, the routine
 
2715                          * will attempt to determine the proper base by looking
 
2716                          * at the values prefix (A '0' for octal, a 'x' for
 
2717                          * hex, etc ... If a value is given it will use that
 
2718                          * value as the base.
 
2720                         board.numports = simple_strtoul(str, NULL, 0);
 
2721                         nbdevs += board.numports;
 
2727                         while (isxdigit(*t2))
 
2731                                 printk(KERN_ERR "epca_setup: Invalid i/o address %s\n", str);
 
2732                                 invalid_lilo_config = 1;
 
2733                                 setup_error_code |= INVALID_PORT_BASE;
 
2737                         board.port = simple_strtoul(str, NULL, 16);
 
2743                         while (isxdigit(*t2))
 
2747                                 printk(KERN_ERR "epca_setup: Invalid memory base %s\n",str);
 
2748                                 invalid_lilo_config = 1;
 
2749                                 setup_error_code |= INVALID_MEM_BASE;
 
2752                         board.membase = simple_strtoul(str, NULL, 16);
 
2756                         printk(KERN_ERR "epca: Too many string parms\n");
 
2760         } /* End while there is a string arg */
 
2763                 printk(KERN_ERR "epca: Insufficient parms specified\n");
 
2767         /* I should REALLY validate the stuff here */
 
2768         /* Copies our local copy of board into boards */
 
2769         memcpy((void *)&boards[num_cards],(void *)&board, sizeof(board));
 
2770         /* Does this get called once per lilo arg are what ? */
 
2771         printk(KERN_INFO "PC/Xx: Added board %i, %s %i ports at 0x%4.4X base 0x%6.6X\n",
 
2772                 num_cards, board_desc[board.type],
 
2773                 board.numports, (int)board.port, (unsigned int) board.membase);
 
2777 enum epic_board_types {
 
2784 /* indexed directly by epic_board_types enum */
 
2786         unsigned char board_type;
 
2787         unsigned bar_idx;               /* PCI base address region */
 
2788 } epca_info_tbl[] = {
 
2795 static int __devinit epca_init_one(struct pci_dev *pdev,
 
2796                                  const struct pci_device_id *ent)
 
2798         static int board_num = -1;
 
2799         int board_idx, info_idx = ent->driver_data;
 
2802         if (pci_enable_device(pdev))
 
2806         board_idx = board_num + num_cards;
 
2807         if (board_idx >= MAXBOARDS)
 
2810         addr = pci_resource_start (pdev, epca_info_tbl[info_idx].bar_idx);
 
2812                 printk (KERN_ERR PFX "PCI region #%d not available (size 0)\n",
 
2813                         epca_info_tbl[info_idx].bar_idx);
 
2817         boards[board_idx].status = ENABLED;
 
2818         boards[board_idx].type = epca_info_tbl[info_idx].board_type;
 
2819         boards[board_idx].numports = 0x0;
 
2820         boards[board_idx].port = addr + PCI_IO_OFFSET;
 
2821         boards[board_idx].membase = addr;
 
2823         if (!request_mem_region (addr + PCI_IO_OFFSET, 0x200000, "epca")) {
 
2824                 printk (KERN_ERR PFX "resource 0x%x @ 0x%lx unavailable\n",
 
2825                         0x200000, addr + PCI_IO_OFFSET);
 
2829         boards[board_idx].re_map_port = ioremap(addr + PCI_IO_OFFSET, 0x200000);
 
2830         if (!boards[board_idx].re_map_port) {
 
2831                 printk (KERN_ERR PFX "cannot map 0x%x @ 0x%lx\n",
 
2832                         0x200000, addr + PCI_IO_OFFSET);
 
2833                 goto err_out_free_pciio;
 
2836         if (!request_mem_region (addr, 0x200000, "epca")) {
 
2837                 printk (KERN_ERR PFX "resource 0x%x @ 0x%lx unavailable\n",
 
2839                 goto err_out_free_iounmap;
 
2842         boards[board_idx].re_map_membase = ioremap(addr, 0x200000);
 
2843         if (!boards[board_idx].re_map_membase) {
 
2844                 printk (KERN_ERR PFX "cannot map 0x%x @ 0x%lx\n",
 
2845                         0x200000, addr + PCI_IO_OFFSET);
 
2846                 goto err_out_free_memregion;
 
2850          * I don't know what the below does, but the hardware guys say its
 
2851          * required on everything except PLX (In this case XRJ).
 
2853         if (info_idx != brd_xrj) {
 
2854                 pci_write_config_byte(pdev, 0x40, 0);
 
2855                 pci_write_config_byte(pdev, 0x46, 0);
 
2860 err_out_free_memregion:
 
2861         release_mem_region (addr, 0x200000);
 
2862 err_out_free_iounmap:
 
2863         iounmap (boards[board_idx].re_map_port);
 
2865         release_mem_region (addr + PCI_IO_OFFSET, 0x200000);
 
2871 static struct pci_device_id epca_pci_tbl[] = {
 
2872         { PCI_VENDOR_DIGI, PCI_DEVICE_XR, PCI_ANY_ID, PCI_ANY_ID, 0, 0, brd_xr },
 
2873         { PCI_VENDOR_DIGI, PCI_DEVICE_XEM, PCI_ANY_ID, PCI_ANY_ID, 0, 0, brd_xem },
 
2874         { PCI_VENDOR_DIGI, PCI_DEVICE_CX, PCI_ANY_ID, PCI_ANY_ID, 0, 0, brd_cx },
 
2875         { PCI_VENDOR_DIGI, PCI_DEVICE_XRJ, PCI_ANY_ID, PCI_ANY_ID, 0, 0, brd_xrj },
 
2879 MODULE_DEVICE_TABLE(pci, epca_pci_tbl);
 
2881 int __init init_PCI (void)
 
2883         memset (&epca_driver, 0, sizeof (epca_driver));
 
2884         epca_driver.name = "epca";
 
2885         epca_driver.id_table = epca_pci_tbl;
 
2886         epca_driver.probe = epca_init_one;
 
2888         return pci_register_driver(&epca_driver);
 
2891 MODULE_LICENSE("GPL");