synclink_cs.c 2.5.68
PATCH 1/1 synclink_cs.c 2.5.68
* Remove MODULE_USE_COUNT macros
* Add owner member
* Add tiocmget/tiocmset tty callbacks
Please Apply
Paul Fulghum
[email protected]
drivers/char/pcmcia/synclink_cs.c +41 -89
@@ -1,7 +1,7 @@/* * linux/drivers/char/pcmcia/synclink_cs.c * -* $Id: synclink_cs.c,v 4.4 2002/10/10 14:53:37 paulkf Exp $ +* $Id: synclink_cs.c,v 4.6 2003/04/21 17:46:55 paulkf Exp $ * * Device driver for Microgate SyncLink PC Card * multiprotocol serial adapter.
@@ -442,9 +442,9 @@/* * ioctl handlers */ -static int set_modem_info (MGSLPC_INFO *info,unsigned int cmd, -unsigned int *value); -static int get_modem_info (MGSLPC_INFO *info,unsigned int *value); +static int tiocmget (struct tty_struct *tty,struct file *file); +static int tiocmset (struct tty_struct *tty,struct file *file, +unsigned int set,unsigned int clear);static int get_stats (MGSLPC_INFO *info,struct mgsl_icount *user_icount);static int get_params (MGSLPC_INFO *info,MGSL_PARAMS *user_params);static int set_params (MGSLPC_INFO *info,MGSL_PARAMS *new_params);
@@ -496,7 +496,7 @@MODULE_LICENSE ("GPL" );static char *driver_name ="SyncLink PC Card driver" ; -static char *driver_version ="$Revision: 4.4 $" ; +static char *driver_version ="$Revision: 4.6 $" ;static struct tty_driver serial_driver, callout_driver;static int serial_refcount;
@@ -2326,94 +2326,56 @@return rc; } -/* Return state of the serial control/status signals -* -* Arguments: info pointer to device instance data -* value pointer to int to hold returned info -* -* Return Value: 0 if success, otherwise error code +/* return the state of the serial control and status signals */ -static int get_modem_info (MGSLPC_INFO * info,unsigned int *value) +static int tiocmget (struct tty_struct *tty,struct file *file) { +MGSLPC_INFO *info = (MGSLPC_INFO *)tty->driver_data;unsigned int result;unsigned long flags; -int err; - +spin_lock_irqsave (&info->lock,flags);get_signals (info);spin_unlock_irqrestore (&info->lock,flags); - result = ((info->serial_signals & SerialSignal_RTS) ?TIOCM_RTS :0 ) | - ((info->serial_signals & SerialSignal_DTR) ?TIOCM_DTR :0 ) | - ((info->serial_signals & SerialSignal_DCD) ?TIOCM_CAR :0 ) | - ((info->serial_signals & SerialSignal_RI) ?TIOCM_RNG :0 ) | - ((info->serial_signals & SerialSignal_DSR) ?TIOCM_DSR :0 ) | - ((info->serial_signals & SerialSignal_CTS) ?TIOCM_CTS :0 ); + result = ((info->serial_signals & SerialSignal_RTS) ?TIOCM_RTS :0 ) + + ((info->serial_signals & SerialSignal_DTR) ?TIOCM_DTR :0 ) + + ((info->serial_signals & SerialSignal_DCD) ?TIOCM_CAR :0 ) + + ((info->serial_signals & SerialSignal_RI) ?TIOCM_RNG :0 ) + + ((info->serial_signals & SerialSignal_DSR) ?TIOCM_DSR :0 ) + + ((info->serial_signals & SerialSignal_CTS) ?TIOCM_CTS :0 );if (debug_level >=DEBUG_LEVEL_INFO ) -printk ("mgslpc_get_modem_info %s value=%08X\n" , info->device_name, result); - -PUT_USER (err,result,value); -return err ? -EFAULT :0 ; +printk ("%s(%d):%s tiocmget() value=%08X\n" , + __FILE__,__LINE__, info->device_name, result ); +return result; } -/* Set the state of the modem control signals (DTR/RTS) -* -* Arguments: -* -* info pointer to device instance data -* cmd signal command: TIOCMBIS = set bit TIOCMBIC = clear bit -* TIOCMSET = set/clear signal values -* value bit mask for command -* -* Return Value: 0 if success, otherwise error code +/* set modem control signals (DTR/RTS) */ -static int set_modem_info (MGSLPC_INFO * info,unsigned int cmd, -unsigned int *value) +static int tiocmset (struct tty_struct *tty,struct file *file, +unsigned int set,unsigned int clear) { -int error; -unsigned int arg; +MGSLPC_INFO *info = (MGSLPC_INFO *)tty->driver_data;unsigned long flags; - +if (debug_level >=DEBUG_LEVEL_INFO ) -printk ("mgslpc_set_modem_info %s\n" , info->device_name); - -GET_USER (error,arg,value); -if (error) -return error; - -switch (cmd) { -case TIOCMBIS : -if (arg &TIOCM_RTS ) - info->serial_signals |= SerialSignal_RTS; -if (arg &TIOCM_DTR ) - info->serial_signals |= SerialSignal_DTR; -break ; -case TIOCMBIC : -if (arg &TIOCM_RTS ) - info->serial_signals &= ~SerialSignal_RTS; -if (arg &TIOCM_DTR ) - info->serial_signals &= ~SerialSignal_DTR; -break ; -case TIOCMSET : -if (arg &TIOCM_RTS ) - info->serial_signals |= SerialSignal_RTS; -else - info->serial_signals &= ~SerialSignal_RTS; - -if (arg &TIOCM_DTR ) - info->serial_signals |= SerialSignal_DTR; -else - info->serial_signals &= ~SerialSignal_DTR; -break ; -default : -return -EINVAL ; - } - +printk ("%s(%d):%s tiocmset(%x,%x)\n" , + __FILE__,__LINE__,info->device_name, set, clear); + +if (set &TIOCM_RTS ) + info->serial_signals |= SerialSignal_RTS; +if (set &TIOCM_DTR ) + info->serial_signals |= SerialSignal_DTR; +if (clear &TIOCM_RTS ) + info->serial_signals &= ~SerialSignal_RTS; +if (clear &TIOCM_DTR ) + info->serial_signals &= ~SerialSignal_DTR; +spin_lock_irqsave (&info->lock,flags);set_signals (info);spin_unlock_irqrestore (&info->lock,flags); - +return 0 ; }
@@ -2482,12 +2444,6 @@unsigned long flags;switch (cmd) { -case TIOCMGET : -return get_modem_info (info, (unsigned int *) arg); -case TIOCMBIS : -case TIOCMBIC : -case TIOCMSET : -return set_modem_info (info, cmd, (unsigned int *) arg);case MGSL_IOCGPARAMS :return get_params (info,(MGSL_PARAMS *)arg);case MGSL_IOCSPARAMS :
@@ -2687,7 +2643,6 @@if (debug_level >=DEBUG_LEVEL_INFO )printk ("%s(%d):mgslpc_close(%s) exit, count=%d\n" , __FILE__,__LINE__, tty->driver.name, info->count); -MOD_DEC_USE_COUNT ; }/* Wait until the transmitter is empty.
@@ -2939,8 +2894,6 @@printk ("%s(%d):mgslpc_open(%s), old ref count = %d\n" , __FILE__,__LINE__,tty->driver.name, info->count); -MOD_INC_USE_COUNT ; -/* If port is closing, signal caller to try again */ if (tty_hung_up_p (filp) || info->flags &ASYNC_CLOSING ){if (info->flags &ASYNC_CLOSING )
@@ -2995,7 +2948,6 @@ cleanup:if (retval) { -MOD_DEC_USE_COUNT ;if (info->count) info->count--; }
@@ -3247,6 +3199,7 @@memset (&serial_driver,0 ,sizeof (struct tty_driver )); serial_driver.magic =TTY_DRIVER_MAGIC ; + serial_driver.owner =THIS_MODULE ; serial_driver.driver_name ="synclink_cs" ; serial_driver.name ="ttySLP" ; serial_driver.major = ttymajor;
@@ -3282,6 +3235,8 @@ serial_driver.stop = tx_pause; serial_driver.start = tx_release; serial_driver.hangup = mgslpc_hangup; + serial_driver.tiocmget = tiocmget; + serial_driver.tiocmset = tiocmset;/* * The callout device is just like normal device except for
@@ -4386,7 +4341,7 @@ {MGSLPC_INFO *info = d->priv;int err; -long flags; +unsigned long flags;if (debug_level >=DEBUG_LEVEL_INFO )printk ("mgslpc_sppp_open(%s)\n" ,info->netname);
@@ -4398,7 +4353,6 @@return -EBUSY ; } info->netcount=1 ; -MOD_INC_USE_COUNT ;spin_unlock_irqrestore (&info->netlock, flags);/* claim resources and init adapter */
@@ -4421,7 +4375,6 @@ open_fail:spin_lock_irqsave (&info->netlock, flags); info->netcount=0 ; -MOD_DEC_USE_COUNT ;spin_unlock_irqrestore (&info->netlock, flags);return err; }
@@ -4429,7 +4382,7 @@void mgslpc_sppp_tx_timeout (struct net_device *dev) {MGSLPC_INFO *info = dev->priv; -long flags; +unsigned long flags;if (debug_level >=DEBUG_LEVEL_INFO )printk ("mgslpc_sppp_tx_timeout(%s)\n" ,info->netname);
@@ -4491,7 +4444,6 @@spin_lock_irqsave (&info->netlock, flags); info->netcount=0 ; -MOD_DEC_USE_COUNT ;spin_unlock_irqrestore (&info->netlock, flags);return 0 ; }