Messages in this thread Patch in this message | | | Subject | [PATCH] synclink_cs.c 2.5.68 | From | Paul Fulghum <> | Date | 21 Apr 2003 13:45:20 -0500 |
| |
* Remove MODULE_USE_COUNT macros * Add owner member * Add tiocmget/tiocmset tty callbacks
Please Apply
Paul Fulghum paulkf@microgate.com
--- linux-2.5.68/drivers/char/pcmcia/synclink_cs.c 2003-04-07 12:31:03.000000000 -0500 +++ linux-2.5.68-mg/drivers/char/pcmcia/synclink_cs.c 2003-04-21 12:54:06.661578104 -0500 @@ -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; }
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |