diff options
author | Alexey Dobriyan <adobriyan@gmail.com> | 2007-10-16 23:26:37 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-17 08:42:50 -0700 |
commit | ae0b78d09dc1d521551e225a9831aba1eded518f (patch) | |
tree | 37c2eea67202f4375dce3ca3803248deaf640747 /drivers | |
parent | 323211371073ce4a99b6efc69379589d6a640d35 (diff) |
epca.c: reformat comments and coding style improvements
* Remove stupid comments, like, at the beginning of every function that
function begins (twice per function) and at the end (once)
* Remove trailing or otherwise broken whitespace as per let c_space_errors=1
* Reformat comments to fit it into 80 columns and remove stupid ------------'s.
* Indent case labels on the same column where switch begins
* other minor CS tweaks not worth mentioning
Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
Cc: Jiri Slaby <jirislaby@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/char/epca.c | 2611 |
1 files changed, 1202 insertions, 1409 deletions
diff --git a/drivers/char/epca.c b/drivers/char/epca.c index c6c56fb8ba5..ffcecde9e2a 100644 --- a/drivers/char/epca.c +++ b/drivers/char/epca.c @@ -1,34 +1,30 @@ /* - - Copyright (C) 1996 Digi International. - + For technical support please email digiLinux@dgii.com or call Digi tech support at (612) 912-3456 ** This driver is no longer supported by Digi ** - Much of this design and code came from epca.c which was - copyright (C) 1994, 1995 Troy De Jongh, and subsquently - modified by David Nugent, Christoph Lameter, Mike McLagan. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - ---------------------------------------------------------------------------- */ -/* See README.epca for change history --DAT*/ + Much of this design and code came from epca.c which was + copyright (C) 1994, 1995 Troy De Jongh, and subsquently + modified by David Nugent, Christoph Lameter, Mike McLagan. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ +/* See README.epca for change history --DAT*/ #include <linux/module.h> #include <linux/kernel.h> @@ -54,13 +50,10 @@ #include "epca.h" #include "epcaconfig.h" -/* ---------------------- Begin defines ------------------------ */ - #define VERSION "1.3.0.1-LK2.6" /* This major needs to be submitted to Linux to join the majors list */ - -#define DIGIINFOMAJOR 35 /* For Digi specific ioctl */ +#define DIGIINFOMAJOR 35 /* For Digi specific ioctl */ #define MAXCARDS 7 @@ -68,60 +61,48 @@ #define PFX "epca: " -/* ----------------- Begin global definitions ------------------- */ - static int nbdevs, num_cards, liloconfig; static int digi_poller_inhibited = 1 ; static int setup_error_code; static int invalid_lilo_config; -/* The ISA boards do window flipping into the same spaces so its only sane - with a single lock. It's still pretty efficient */ - +/* + * The ISA boards do window flipping into the same spaces so its only sane with + * a single lock. It's still pretty efficient. + */ static DEFINE_SPINLOCK(epca_lock); -/* ----------------------------------------------------------------------- - MAXBOARDS is typically 12, but ISA and EISA cards are restricted to - 7 below. ---------------------------------------------------------------------------*/ +/* MAXBOARDS is typically 12, but ISA and EISA cards are restricted to 7 below. */ static struct board_info boards[MAXBOARDS]; - -/* ------------- Begin structures used for driver registeration ---------- */ - static struct tty_driver *pc_driver; static struct tty_driver *pc_info; /* ------------------ Begin Digi specific structures -------------------- */ -/* ------------------------------------------------------------------------ - digi_channels represents an array of structures that keep track of - each channel of the Digi product. Information such as transmit and - receive pointers, termio data, and signal definitions (DTR, CTS, etc ...) - are stored here. This structure is NOT used to overlay the cards - physical channel structure. --------------------------------------------------------------------------- */ - +/* + * digi_channels represents an array of structures that keep track of each + * channel of the Digi product. Information such as transmit and receive + * pointers, termio data, and signal definitions (DTR, CTS, etc ...) are stored + * here. This structure is NOT used to overlay the cards physical channel + * structure. + */ static struct channel digi_channels[MAX_ALLOC]; -/* ------------------------------------------------------------------------ - card_ptr is an array used to hold the address of the - first channel structure of each card. This array will hold - the addresses of various channels located in digi_channels. --------------------------------------------------------------------------- */ +/* + * card_ptr is an array used to hold the address of the first channel structure + * of each card. This array will hold the addresses of various channels located + * in digi_channels. + */ static struct channel *card_ptr[MAXCARDS]; static struct timer_list epca_timer; -/* ---------------------- Begin function prototypes --------------------- */ - -/* ---------------------------------------------------------------------- - Begin generic memory functions. These functions will be alias - (point at) more specific functions dependent on the board being - configured. ------------------------------------------------------------------------ */ - +/* + * Begin generic memory functions. These functions will be alias (point at) + * more specific functions dependent on the board being configured. + */ static void memwinon(struct board_info *b, unsigned int win); static void memwinoff(struct board_info *b, unsigned int win); static void globalwinon(struct channel *ch); @@ -170,8 +151,6 @@ static void dummy_memoff(struct channel *ch); static void dummy_assertgwinon(struct channel *ch); static void dummy_assertmemoff(struct channel *ch); -/* ------------------- Begin declare functions ----------------------- */ - static struct channel *verifyChannel(struct tty_struct *); static void pc_sched_event(struct channel *, int); static void epca_error(int, char *); @@ -213,62 +192,55 @@ static int pc_write(struct tty_struct *, const unsigned char *, int); static int pc_init(void); static int init_PCI(void); - -/* ------------------------------------------------------------------ - Table of functions for each board to handle memory. Mantaining - parallelism is a *very* good idea here. The idea is for the - runtime code to blindly call these functions, not knowing/caring - about the underlying hardware. This stuff should contain no - conditionals; if more functionality is needed a different entry - should be established. These calls are the interface calls and - are the only functions that should be accessed. Anyone caught - making direct calls deserves what they get. --------------------------------------------------------------------- */ - +/* + * Table of functions for each board to handle memory. Mantaining parallelism + * is a *very* good idea here. The idea is for the runtime code to blindly call + * these functions, not knowing/caring about the underlying hardware. This + * stuff should contain no conditionals; if more functionality is needed a + * different entry should be established. These calls are the interface calls + * and are the only functions that should be accessed. Anyone caught making + * direct calls deserves what they get. + */ static void memwinon(struct board_info *b, unsigned int win) { - (b->memwinon)(b, win); + b->memwinon(b, win); } static void memwinoff(struct board_info *b, unsigned int win) { - (b->memwinoff)(b, win); + b->memwinoff(b, win); } static void globalwinon(struct channel *ch) { - (ch->board->globalwinon)(ch); + ch->board->globalwinon(ch); } static void rxwinon(struct channel *ch) { - (ch->board->rxwinon)(ch); + ch->board->rxwinon(ch); } static void txwinon(struct channel *ch) { - (ch->board->txwinon)(ch); + ch->board->txwinon(ch); } static void memoff(struct channel *ch) { - (ch->board->memoff)(ch); + ch->board->memoff(ch); } static void assertgwinon(struct channel *ch) { - (ch->board->assertgwinon)(ch); + ch->board->assertgwinon(ch); } static void assertmemoff(struct channel *ch) { - (ch->board->assertmemoff)(ch); + ch->board->assertmemoff(ch); } -/* --------------------------------------------------------- - PCXEM windowing is the same as that used in the PCXR - and CX series cards. ------------------------------------------------------------- */ - +/* PCXEM windowing is the same as that used in the PCXR and CX series cards. */ static void pcxem_memwinon(struct board_info *b, unsigned int win) { outb_p(FEPWIN|win, b->port + 1); @@ -300,32 +272,30 @@ static void pcxem_memoff(struct channel *ch) } /* ----------------- Begin pcxe memory window stuff ------------------ */ - static void pcxe_memwinon(struct board_info *b, unsigned int win) { - outb_p(FEPWIN | win, b->port + 1); + outb_p(FEPWIN | win, b->port + 1); } static void pcxe_memwinoff(struct board_info *b, unsigned int win) { - outb_p(inb(b->port) & ~FEPMEM, - b->port + 1); + outb_p(inb(b->port) & ~FEPMEM, b->port + 1); outb_p(0, b->port + 1); } static void pcxe_globalwinon(struct channel *ch) { - outb_p( FEPWIN, (int)ch->board->port + 1); + outb_p(FEPWIN, (int)ch->board->port + 1); } static void pcxe_rxwinon(struct channel *ch) { - outb_p(ch->rxwin, (int)ch->board->port + 1); + outb_p(ch->rxwin, (int)ch->board->port + 1); } static void pcxe_txwinon(struct channel *ch) { - outb_p(ch->txwin, (int)ch->board->port + 1); + outb_p(ch->txwin, (int)ch->board->port + 1); } static void pcxe_memoff(struct channel *ch) @@ -335,10 +305,9 @@ static void pcxe_memoff(struct channel *ch) } /* ------------- Begin pc64xe and pcxi memory window stuff -------------- */ - static void pcxi_memwinon(struct board_info *b, unsigned int win) { - outb_p(inb(b->port) | FEPMEM, b->port); + outb_p(inb(b->port) | FEPMEM, b->port); } static void pcxi_memwinoff(struct board_info *b, unsigned int win) @@ -353,12 +322,12 @@ static void pcxi_globalwinon(struct channel *ch) static void pcxi_rxwinon(struct channel *ch) { - outb_p(FEPMEM, ch->board->port); + outb_p(FEPMEM, ch->board->port); } static void pcxi_txwinon(struct channel *ch) { - outb_p(FEPMEM, ch->board->port); + outb_p(FEPMEM, ch->board->port); } static void pcxi_memoff(struct channel *ch) @@ -376,16 +345,13 @@ static void pcxi_assertmemoff(struct channel *ch) epcaassert(!(inb(ch->board->port) & FEPMEM), "Memory on"); } - -/* ---------------------------------------------------------------------- - Not all of the cards need specific memory windowing routines. Some - cards (Such as PCI) needs no windowing routines at all. We provide - these do nothing routines so that the same code base can be used. - The driver will ALWAYS call a windowing routine if it thinks it needs - to; regardless of the card. However, dependent on the card the routine - may or may not do anything. ----------------------------------------------------------------------------*/ - +/* + * Not all of the cards need specific memory windowing routines. Some cards + * (Such as PCI) needs no windowing routines at all. We provide these do + * nothing routines so that the same code base can be used. The driver will + * ALWAYS call a windowing routine if it thinks it needs to; regardless of the + * card. However, dependent on the card the routine may or may not do anything. + */ static void dummy_memwinon(struct board_info *b, unsigned int win) { } @@ -418,15 +384,14 @@ static void dummy_assertmemoff(struct channel *ch) { } -/* ----------------- Begin verifyChannel function ----------------------- */ static struct channel *verifyChannel(struct tty_struct *tty) -{ /* Begin verifyChannel */ - /* -------------------------------------------------------------------- - This routine basically provides a sanity check. It insures that - the channel returned is within the proper range of addresses as - well as properly initialized. If some bogus info gets passed in - through tty->driver_data this should catch it. - --------------------------------------------------------------------- */ +{ + /* + * This routine basically provides a sanity check. It insures that the + * channel returned is within the proper range of addresses as well as + * properly initialized. If some bogus info gets passed in + * through tty->driver_data this should catch it. + */ if (tty) { struct channel *ch = (struct channel *)tty->driver_data; if ((ch >= &digi_channels[0]) && (ch < &digi_channels[nbdevs])) { @@ -435,62 +400,55 @@ static struct channel *verifyChannel(struct tty_struct *tty) } } return NULL; - -} /* End verifyChannel */ - -/* ------------------ Begin pc_sched_event ------------------------- */ +} static void pc_sched_event(struct channel *ch, int event) { - /* ---------------------------------------------------------------------- - We call this to schedule interrupt processing on some event. The - kernel sees our request and calls the related routine in OUR driver. - -------------------------------------------------------------------------*/ + /* + * We call this to schedule interrupt processing on some event. The + * kernel sees our request and calls the related routine in OUR driver. + */ ch->event |= 1 << event; schedule_work(&ch->tqueue); -} /* End pc_sched_event */ - -/* ------------------ Begin epca_error ------------------------- */ +} static void epca_error(int line, char *msg) { printk(KERN_ERR "epca_error (Digi): line = %d %s\n",line,msg); } -/* ------------------ Begin pc_close ------------------------- */ -static void pc_close(struct tty_struct * tty, struct file * filp) +static void pc_close(struct tty_struct *tty, struct file *filp) { struct channel *ch; unsigned long flags; - /* --------------------------------------------------------- - verifyChannel returns the channel from the tty struct - if it is valid. This serves as a sanity check. - ------------------------------------------------------------- */ - if ((ch = verifyChannel(tty)) != NULL) { /* Begin if ch != NULL */ + /* + * verifyChannel returns the channel from the tty struct if it is + * valid. This serves as a sanity check. + */ + if ((ch = verifyChannel(tty)) != NULL) { spin_lock_irqsave(&epca_lock, flags); if (tty_hung_up_p(filp)) { spin_unlock_irqrestore(&epca_lock, flags); return; } - /* Check to see if the channel is open more than once */ if (ch->count-- > 1) { /* Begin channel is open more than once */ - /* ------------------------------------------------------------- - Return without doing anything. Someone might still be using - the channel. - ---------------------------------------------------------------- */ + /* + * Return without doing anything. Someone might still + * be using the channel. + */ spin_unlock_irqrestore(&epca_lock, flags); return; - } /* End channel is open more than once */ + } /* Port open only once go ahead with shutdown & reset */ BUG_ON(ch->count < 0); - /* --------------------------------------------------------------- - Let the rest of the driver know the channel is being closed. - This becomes important if an open is attempted before close - is finished. - ------------------------------------------------------------------ */ + /* + * Let the rest of the driver know the channel is being closed. + * This becomes important if an open is attempted before close + * is finished. + */ ch->asyncflags |= ASYNC_CLOSING; tty->closing = 1; @@ -498,7 +456,7 @@ static void pc_close(struct tty_struct * tty, struct file * filp) if (ch->asyncflags & ASYNC_INITIALIZED) { /* Setup an event to indicate when the transmit buffer empties */ - setup_empty_event(tty, ch); + setup_empty_event(tty, ch); tty_wait_until_sent(tty, 3000); /* 30 seconds timeout */ } if (tty->driver->flush_buffer) @@ -513,27 +471,24 @@ static void pc_close(struct tty_struct * tty, struct file * filp) ch->tty = NULL; spin_unlock_irqrestore(&epca_lock, flags); - if (ch->blocked_open) { /* Begin if blocked_open */ - if (ch->close_delay) + if (ch->blocked_open) { + if (ch->close_delay) msleep_interruptible(jiffies_to_msecs(ch->close_delay)); wake_up_interruptible(&ch->open_wait); - } /* End if blocked_open */ - ch->asyncflags &= ~(ASYNC_NORMAL_ACTIVE | ASYNC_INITIALIZED | + } + ch->asyncflags &= ~(ASYNC_NORMAL_ACTIVE | ASYNC_INITIALIZED | ASYNC_CLOSING); wake_up_interruptible(&ch->close_wait); - } /* End if ch != NULL */ -} /* End pc_close */ - -/* ------------------ Begin shutdown ------------------------- */ + } +} static void shutdown(struct channel *ch) -{ /* Begin shutdown */ - +{ unsigned long flags; struct tty_struct *tty; struct board_chan __iomem *bc; - if (!(ch->asyncflags & ASYNC_INITIALIZED)) + if (!(ch->asyncflags & ASYNC_INITIALIZED)) return; spin_lock_irqsave(&epca_lock, flags); @@ -541,50 +496,40 @@ static void shutdown(struct channel *ch) globalwinon(ch); bc = ch->brdchan; - /* ------------------------------------------------------------------ - In order for an event to be generated on the receipt of data the - idata flag must be set. Since we are shutting down, this is not - necessary clear this flag. - --------------------------------------------------------------------- */ - + /* + * In order for an event to be generated on the receipt of data the + * idata flag must be set. Since we are shutting down, this is not + * necessary clear this flag. + */ if (bc) writeb(0, &bc->idata); tty = ch->tty; - /* ---------------------------------------------------------------- - If we're a modem control device and HUPCL is on, drop RTS & DTR. - ------------------------------------------------------------------ */ - + /* If we're a modem control device and HUPCL is on, drop RTS & DTR. */ if (tty->termios->c_cflag & HUPCL) { ch->omodem &= ~(ch->m_rts | ch->m_dtr); fepcmd(ch, SETMODEM, 0, ch->m_dtr | ch->m_rts, 10, 1); } memoff(ch); - /* ------------------------------------------------------------------ - The channel has officialy been closed. The next time it is opened - it will have to reinitialized. Set a flag to indicate this. - ---------------------------------------------------------------------- */ - + /* + * The channel has officialy been closed. The next time it is opened it + * will have to reinitialized. Set a flag to indicate this. + */ /* Prevent future Digi programmed interrupts from coming active */ - ch->asyncflags &= ~ASYNC_INITIALIZED; spin_unlock_irqrestore(&epca_lock, flags); - -} /* End shutdown */ - -/* ------------------ Begin pc_hangup ------------------------- */ +} static void pc_hangup(struct tty_struct *tty) -{ /* Begin pc_hangup */ +{ struct channel *ch; - - /* --------------------------------------------------------- - verifyChannel returns the channel from the tty struct - if it is valid. This serves as a sanity check. - ------------------------------------------------------------- */ - if ((ch = verifyChannel(tty)) != NULL) { /* Begin if ch != NULL */ + /* + * verifyChannel returns the channel from the tty struct if it is + * valid. This serves as a sanity check. + */ + if ((ch = verifyChannel(tty)) != NULL) { unsigned long flags; if (tty->driver->flush_buffer) @@ -599,15 +544,12 @@ static void pc_hangup(struct tty_struct *tty) ch->asyncflags &= ~(ASYNC_NORMAL_ACTIVE | ASYNC_INITIALIZED); spin_unlock_irqrestore(&epca_lock, flags); wake_up_interruptible(&ch->open_wait); - } /* End if ch != NULL */ - -} /* End pc_hangup */ - -/* ------------------ Begin pc_write ------------------------- */ + } +} -static int pc_write(struct tty_struct * tty, +static int pc_write(struct tty_struct *tty, const unsigned char *buf, int bytesAvailable) -{ /* Begin pc_write */ +{ unsigned int head, tail; int dataLen; int size; @@ -617,25 +559,23 @@ static int pc_write(struct tty_struct * tty, int remain; struct board_chan __iomem *bc; - /* ---------------------------------------------------------------- - pc_write is primarily called directly by the kernel routine - tty_write (Though it can also be called by put_char) found in - tty_io.c. pc_write is passed a line discipline buffer where - the data to be written out is stored. The line discipline - implementation itself is done at the kernel level and is not - brought into the driver. - ------------------------------------------------------------------- */ - - /* --------------------------------------------------------- - verifyChannel returns the channel from the tty struct - if it is valid. This serves as a sanity check. - ------------------------------------------------------------- */ + /* + * pc_write is primarily called directly by the kernel routine + * tty_write (Though it can also be called by put_char) found in + * tty_io.c. pc_write is passed a line discipline buffer where the data + * to be written out is stored. The line discipline implementation + * itself is done at the kernel level and is not brought into the + * driver. + */ + /* + * verifyChannel returns the channel from the tty struct if it is + * valid. This serves as a sanity check. + */ if ((ch = verifyChannel(tty)) == NULL) return 0; /* Make a pointer to the channel data structure found on the board. */ - bc = ch->brdchan; size = ch->txbufsize; amountCopied = 0; @@ -650,37 +590,36 @@ static int pc_write(struct tty_struct * tty, tail = readw(&bc->tout); tail &= (size - 1); - /* If head >= tail, head has not wrapped around. */ - if (head >= tail) { /* Begin head has not wrapped */ - /* --------------------------------------------------------------- - remain (much like dataLen above) represents the total amount of - space available on the card for data. Here dataLen represents - the space existing between the head pointer and the end of - buffer. This is important because a memcpy cannot be told to - automatically wrap around when it hits the buffer end. - ------------------------------------------------------------------ */ + if (head >= tail) { + /* head has not wrapped */ + /* + * remain (much like dataLen above) represents the total amount + * of space available on the card for data. Here dataLen + * represents the space existing between the head pointer and + * the end of buffer. This is important because a memcpy cannot + * be told to automatically wrap around when it hits the buffer + * end. + */ dataLen = size - head; remain = size - (head - tail) - 1; - } else { /* Begin head has wrapped around */ - + } else { + /* head has wrapped around */ remain = tail - head - 1; dataLen = remain; - - } /* End head has wrapped around */ - /* ------------------------------------------------------------------- - Check the space on the card. If we have more data than - space; reduce the amount of data to fit the space. - ---------------------------------------------------------------------- */ + } + /* + * Check the space on the card. If we have more data than space; reduce + * the amount of data to fit the space. + */ bytesAvailable = min(remain, bytesAvailable); txwinon(ch); - while (bytesAvailable > 0) - { /* Begin while there is data to copy onto card */ - - /* ----------------------------------------------------------------- - If head is not wrapped, the below will make sure the first - data copy fills to the end of card buffer. - ------------------------------------------------------------------- */ + while (bytesAvailable > 0) { + /* there is data to copy onto card */ + /* + * If head is not wrapped, the below will make sure the first + * data copy fills to the end of card buffer. + */ dataLen = min(bytesAvailable, dataLen); memcpy_toio(ch->txptr + head, buf, dataLen); buf += dataLen; @@ -692,7 +631,7 @@ static int pc_write(struct tty_struct * tty, head = 0; dataLen = tail; } - } /* End while there is data to copy onto card */ + } ch->statusflags |= TXBUSY; globalwinon(ch); writew(head, &bc->tin); @@ -703,22 +642,16 @@ static int pc_write(struct tty_struct * tty, } memoff(ch); spin_unlock_irqrestore(&epca_lock, flags); - return(amountCopied); - -} /* End pc_write */ - -/* ------------------ Begin pc_put_char ------------------------- */ + return amountCopied; +} static void pc_put_char(struct tty_struct *tty, unsigned char c) -{ /* Begin pc_put_char */ +{ pc_write(tty, &c, 1); -} /* End pc_put_char */ - -/* ------------------ Begin pc_write_room ------------------------- */ +} static int pc_write_room(struct tty_struct *tty) -{ /* Begin pc_write_room */ - +{ int remain; struct channel *ch; unsigned long flags; @@ -727,11 +660,10 @@ static int pc_write_room(struct tty_struct *tty) remain = 0; - /* --------------------------------------------------------- - verifyChannel returns the channel from the tty struct - if it is valid. This serves as a sanity check. - ------------------------------------------------------------- */ - + /* + * verifyChannel returns the channel from the tty struct if it is + * valid. This serves as a sanity check. + */ if ((ch = verifyChannel(tty)) != NULL) { spin_lock_irqsave(&epca_lock, flags); globalwinon(ch); @@ -757,14 +689,10 @@ static int pc_write_room(struct tty_struct *tty) } /* Return how much room is left on card */ return remain; - -} /* End pc_write_room */ - -/* ------------------ Begin pc_chars_in_buffer ---------------------- */ +} static int pc_chars_in_buffer(struct tty_struct *tty) -{ /* Begin pc_chars_in_buffer */ - +{ int chars; unsigned int ctail, head, tail; int remain; @@ -772,13 +700,12 @@ static int pc_chars_in_buffer(struct tty_struct *tty) struct channel *ch; struct board_chan __iomem *bc; - /* --------------------------------------------------------- - verifyChannel returns the channel from the tty struct - if it is valid. This serves as a sanity check. - ------------------------------------------------------------- */ - + /* + * verifyChannel returns the channel from the tty struct if it is + * valid. This serves as a sanity check. + */ if ((ch = verifyChannel(tty)) == NULL) - return(0); + return 0; spin_lock_irqsave(&epca_lock, flags); globalwinon(ch); @@ -793,45 +720,40 @@ static int pc_chars_in_buffer(struct tty_struct *tty) else { /* Begin if some space on the card has been used */ head = readw(&bc->tin) & (ch->txbufsize - 1); tail &= (ch->txbufsize - 1); - /* -------------------------------------------------------------- - The logic here is basically opposite of the above pc_write_room - here we are finding the amount of bytes in the buffer filled. - Not the amount of bytes empty. - ------------------------------------------------------------------- */ + /* + * The logic here is basically opposite of the above + * pc_write_room here we are finding the amount of bytes in the + * buffer filled. Not the amount of bytes empty. + */ if ((remain = tail - head - 1) < 0 ) remain += ch->txbufsize; chars = (int)(ch->txbufsize - remain); - /* ------------------------------------------------------------- - Make it possible to wakeup anything waiting for output - in tty_ioctl.c, etc. - - If not already set. Setup an event to indicate when the - transmit buffer empties - ----------------------------------------------------------------- */ + /* + * Make it possible to wakeup anything waiting for output in + * tty_ioctl.c, etc. + * + * If not already set. Setup an event to indicate when the + * transmit buffer empties. + */ if (!(ch->statusflags & EMPTYWAIT)) setup_empty_event(tty,ch); - } /* End if some space on the card has been used */ memoff(ch); spin_unlock_irqrestore(&epca_lock, flags); /* Return number of characters residing on card. */ - return(chars); - -} /* End pc_chars_in_buffer */ - -/* ------------------ Begin pc_flush_buffer ---------------------- */ + return chars; +} static void pc_flush_buffer(struct tty_struct *tty) -{ /* Begin pc_flush_buffer */ - +{ unsigned int tail; unsigned long flags; struct channel *ch; struct board_chan __iomem *bc; - /* --------------------------------------------------------- - verifyChannel returns the channel from the tty struct - if it is valid. This serves as a sanity check. - ------------------------------------------------------------- */ + /* + * verifyChannel returns the channel from the tty struct if it is + * valid. This serves as a sanity check. + */ if ((ch = verifyChannel(tty)) == NULL) return; @@ -844,51 +766,47 @@ static void pc_flush_buffer(struct tty_struct *tty) memoff(ch); spin_unlock_irqrestore(&epca_lock, flags); tty_wakeup(tty); -} /* End pc_flush_buffer */ - -/* ------------------ Begin pc_flush_chars ---------------------- */ +} static void pc_flush_chars(struct tty_struct *tty) -{ /* Begin pc_flush_chars */ - struct channel * ch; - /* --------------------------------------------------------- - verifyChannel returns the channel from the tty struct - if it is valid. This serves as a sanity check. - ------------------------------------------------------------- */ +{ + struct channel *ch; + /* + * verifyChannel returns the channel from the tty struct if it is + * valid. This serves as a sanity check. + */ if ((ch = verifyChannel(tty)) != NULL) { unsigned long flags; spin_lock_irqsave(&epca_lock, flags); - /* ---------------------------------------------------------------- - If not already set and the transmitter is busy setup an event - to indicate when the transmit empties. - ------------------------------------------------------------------- */ + /* + * If not already set and the transmitter is busy setup an + * event to indicate when the transmit empties. + */ if ((ch->statusflags & TXBUSY) && !(ch->statusflags & EMPTYWAIT)) setup_empty_event(tty,ch); spin_unlock_irqrestore(&epca_lock, flags); } -} /* End pc_flush_chars */ - -/* ------------------ Begin block_til_ready ---------------------- */ +} -static int block_til_ready(struct tty_struct *tty, +static int block_til_ready(struct tty_struct *tty, struct file *filp, struct channel *ch) -{ /* Begin block_til_ready */ +{ DECLARE_WAITQUEUE(wait,current); - int retval, do_clocal = 0; + int retval, do_clocal = 0; unsigned long flags; if (tty_hung_up_p(filp)) { if (ch->asyncflags & ASYNC_HUP_NOTIFY) retval = -EAGAIN; else - retval = -ERESTARTSYS; - return(retval); + retval = -ERESTARTSYS; + return retval; } - /* ----------------------------------------------------------------- - If the device is in the middle of being closed, then block - until it's done, and then try again. - -------------------------------------------------------------------- */ + /* + * If the device is in the middle of being closed, then block until + * it's done, and then try again. + */ if (ch->asyncflags & ASYNC_CLOSING) { interruptible_sleep_on(&ch->close_wait); @@ -899,17 +817,17 @@ static int block_til_ready(struct tty_struct *tty, } if (filp->f_flags & O_NONBLOCK) { - /* ----------------------------------------------------------------- - If non-blocking mode is set, then make the check up front - and then exit. - -------------------------------------------------------------------- */ + /* + * If non-blocking mode is set, then make the check up front + * and then exit. + */ ch->asyncflags |= ASYNC_NORMAL_ACTIVE; return 0; } if (tty->termios->c_cflag & CLOCAL) do_clocal = 1; /* Block waiting for the carrier detect and the line to become free */ - + retval = 0; add_wait_queue(&ch->open_wait, &wait); @@ -918,19 +836,18 @@ static int block_til_ready(struct tty_struct *tty, if (!tty_hung_up_p(filp)) ch->count--; ch->blocked_open++; - while(1) - { /* Begin forever while */ + while (1) { set_current_state(TASK_INTERRUPTIBLE); if (tty_hung_up_p(filp) || - !(ch->asyncflags & ASYNC_INITIALIZED)) + !(ch->asyncflags & ASYNC_INITIALIZED)) { if (ch->asyncflags & ASYNC_HUP_NOTIFY) retval = -EAGAIN; else - retval = -ERESTARTSYS; + retval = -ERESTARTSYS; break; } - if (!(ch->asyncflags & ASYNC_CLOSING) && + if (!(ch->asyncflags & ASYNC_CLOSING) && (do_clocal || (ch->imodem & ch->dcd))) break; if (signal_pending(current)) { @@ -938,16 +855,15 @@ static int block_til_ready(struct tty_struct *tty, break; } spin_unlock_irqrestore(&epca_lock, flags); - /* --------------------------------------------------------------- - Allow someone else to be scheduled. We will occasionally go - through this loop until one of the above conditions change. - The below schedule call will allow other processes to enter and - prevent this loop from hogging the cpu. - ------------------------------------------------------------------ */ + /* + * Allow someone else to be scheduled. We will occasionally go + * through this loop until one of the above conditions change. + * The below schedule call will allow other processes to enter + * and prevent this loop from hogging the cpu. + */ schedule(); spin_lock_irqsave(&epca_lock, flags); - - } /* End forever while */ + } __set_current_state(TASK_RUNNING); remove_wait_queue(&ch->open_wait, &wait); @@ -962,13 +878,10 @@ static int block_til_ready(struct tty_struct *tty, ch->asyncflags |= ASYNC_NORMAL_ACTIVE; return 0; -} /* End block_til_ready */ - -/* ------------------ Begin pc_open ---------------------- */ +} static int pc_open(struct tty_struct *tty, struct file * filp) -{ /* Begin pc_open */ - +{ struct channel *ch; unsigned long flags; int line, retval, boardnum; @@ -984,12 +897,11 @@ static int pc_open(struct tty_struct *tty, struct file * filp) /* Check status of board configured in system. */ - /* ----------------------------------------------------------------- - I check to see if the epca_setup routine detected an user error. - It might be better to put this in pc_init, but for the moment it - goes here. - ---------------------------------------------------------------------- */ - + /* + * I check to see if the epca_setup routine detected an user error. It + * might be better to put this in pc_init, but for the moment it goes + * here. + */ if (invalid_lilo_config) { if (setup_error_code & INVALID_BOARD_TYPE) printk(KERN_ERR "epca: pc_open: Invalid board type specified in kernel options.\n"); @@ -1010,49 +922,48 @@ static int pc_open(struct tty_struct *tty, struct file * filp) tty->driver_data = NULL; /* Mark this device as 'down' */ return(-ENODEV); |