synclink.c 2.5.68
PATCH 1/1 synclink.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/synclink.c +41 -103
@@ -1,7 +1,7 @@/* * linux/drivers/char/synclink.c * -* $Id: synclink.c,v 4.4 2002/10/10 14:53:36 paulkf Exp $ +* $Id: synclink.c,v 4.6 2003/04/21 17:46:54 paulkf Exp $ * * Device driver for Microgate SyncLink ISA and PCI * high speed multiprotocol serial adapters.
@@ -854,9 +854,9 @@/* * ioctl call handlers */ -static int set_modem_info (struct mgsl_struct * info,unsigned int cmd, -unsigned int *value); -static int get_modem_info (struct mgsl_struct * 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 mgsl_get_stats (struct mgsl_struct * info,struct mgsl_icount *user_icount);static int mgsl_get_params (struct mgsl_struct * info,MGSL_PARAMS *user_params);
@@ -917,7 +917,7 @@ MODULE_PARM(txholdbufs,"1-" __MODULE_STRING(MAX_TOTAL_DEVICES) "i");static char *driver_name ="SyncLink serial driver" ; -static char *driver_version ="$Revision: 4.4 $" ; +static char *driver_version ="$Revision: 4.6 $" ;static int synclink_init_one (struct pci_dev *dev,const struct pci_device_id *ent);
@@ -2921,110 +2921,58 @@return rc; } -/* get_modem_info() -* -* Read the state of the serial control and -* status signals and return to caller. -* -* 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 (struct mgsl_struct * info,unsigned int *value) +static int tiocmget (struct tty_struct *tty,struct file *file) { -unsigned int result =0 ; +struct mgsl_struct *info = (struct mgsl_struct *)tty->driver_data; +unsigned int result;unsigned long flags; -int err; - +spin_lock_irqsave (&info->irq_spinlock,flags);usc_get_serial_signals (info);spin_unlock_irqrestore (&info->irq_spinlock,flags); -if (info->serial_signals & SerialSignal_RTS) - result |=TIOCM_RTS ; -if (info->serial_signals & SerialSignal_DTR) - result |=TIOCM_DTR ; -if (info->serial_signals & SerialSignal_DCD) - result |=TIOCM_CAR ; -if (info->serial_signals & SerialSignal_RI) - result |=TIOCM_RNG ; -if (info->serial_signals & SerialSignal_DSR) - result |=TIOCM_DSR ; -if (info->serial_signals & SerialSignal_CTS) - result |=TIOCM_CTS ; + 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 ("%s(%d):mgsl_get_modem_info %s value=%08X\n" , +printk ("%s(%d):%s tiocmget() value=%08X\n" , __FILE__,__LINE__, info->device_name, result ); - -PUT_USER (err,result,value); -return err; -}/* end of get_modem_info() */ +return result; +} -/* set_modem_info() -* -* 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 (struct mgsl_struct * 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; +struct mgsl_struct *info = (struct mgsl_struct *)tty->driver_data;unsigned long flags; - +if (debug_level >=DEBUG_LEVEL_INFO ) -printk ("%s(%d):mgsl_set_modem_info %s\n" , __FILE__,__LINE__, - 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->irq_spinlock,flags);usc_set_serial_signals (info);spin_unlock_irqrestore (&info->irq_spinlock,flags); - +return 0 ; - -}/* end of set_modem_info() */ +}/* mgsl_break() Set or clear transmit break condition *
@@ -3093,12 +3041,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 mgsl_get_params (info,(MGSL_PARAMS *)arg);case MGSL_IOCSPARAMS :
@@ -3323,7 +3265,6 @@if (debug_level >=DEBUG_LEVEL_INFO )printk ("%s(%d):mgsl_close(%s) exit, count=%d\n" , __FILE__,__LINE__, tty->driver.name, info->count); -MOD_DEC_USE_COUNT ; }/* end of mgsl_close() */
@@ -3615,8 +3556,6 @@printk ("%s(%d):mgsl_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 )
@@ -3683,7 +3622,6 @@ cleanup:if (retval) { -MOD_DEC_USE_COUNT ;if (info->count) info->count--; }
@@ -4571,6 +4509,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" ; serial_driver.name ="ttySL" ; serial_driver.major = ttymajor;
@@ -4606,6 +4545,8 @@ serial_driver.stop = mgsl_stop; serial_driver.start = mgsl_start; serial_driver.hangup = mgsl_hangup; + serial_driver.tiocmget = tiocmget; + serial_driver.tiocmset = tiocmset;/* * The callout device is just like normal device except for
@@ -8003,7 +7944,6 @@return -EBUSY ; } info->netcount=1 ; -MOD_INC_USE_COUNT ;spin_unlock_irqrestore (&info->netlock, flags);/* claim resources and init adapter */
@@ -8026,7 +7966,6 @@ open_fail:spin_lock_irqsave (&info->netlock, flags); info->netcount=0 ; -MOD_DEC_USE_COUNT ;spin_unlock_irqrestore (&info->netlock, flags);return err; }
@@ -8092,7 +8031,6 @@spin_lock_irqsave (&info->netlock, flags); info->netcount=0 ; -MOD_DEC_USE_COUNT ;spin_unlock_irqrestore (&info->netlock, flags);return 0 ; }