[PATCH] synclink_cs.c 2.5.68

From: Paul Fulghum (paulkf@microgate.com)
Date: Mon Apr 21 2003 - 13:45:20 EST


* 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/



This archive was generated by hypermail 2b29 : Wed Apr 23 2003 - 22:00:30 EST