lkml.org 
[lkml]   [2003]   [Apr]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[PATCH] synclink_cs.c 2.5.68
    From
    Date
    * 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/

    \
     
     \ /
      Last update: 2005-03-22 13:34    [W:0.053 / U:0.400 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site