[PATCH] synclink.c 2.5.68

Paul Fulghum (paulkf@microgate.com)
21 Apr 2003 13:41:00 -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/synclink.c 2003-04-07 12:31:04.000000000 -0500
+++ linux-2.5.68-mg/drivers/char/synclink.c 2003-04-21 12:54:06.657578712 -0500
@@ -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;
}

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