X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fnet%2Fwan%2Fcosa.c;h=dbd79016897d769691a2cad4ec18644c4d777490;hb=9bf4aaab3e101692164d49b7ca357651eb691cb6;hp=a4d0452c3c97f392ac8d1605c071d38266e4c223;hpb=db216c3d5e4c040e557a50f8f5d35d5c415e8c1c;p=linux-2.6.git diff --git a/drivers/net/wan/cosa.c b/drivers/net/wan/cosa.c index a4d0452c3..dbd790168 100644 --- a/drivers/net/wan/cosa.c +++ b/drivers/net/wan/cosa.c @@ -301,9 +301,9 @@ static char *chrdev_setup_rx(struct channel_data *channel, int size); static int chrdev_rx_done(struct channel_data *channel); static int chrdev_tx_done(struct channel_data *channel, int size); static ssize_t cosa_read(struct file *file, - char *buf, size_t count, loff_t *ppos); + char __user *buf, size_t count, loff_t *ppos); static ssize_t cosa_write(struct file *file, - const char *buf, size_t count, loff_t *ppos); + const char __user *buf, size_t count, loff_t *ppos); static unsigned int cosa_poll(struct file *file, poll_table *poll); static int cosa_open(struct inode *inode, struct file *file); static int cosa_release(struct inode *inode, struct file *file); @@ -330,13 +330,13 @@ static struct file_operations cosa_fops = { /* Ioctls */ static int cosa_start(struct cosa_data *cosa, int address); static int cosa_reset(struct cosa_data *cosa); -static int cosa_download(struct cosa_data *cosa, unsigned long a); -static int cosa_readmem(struct cosa_data *cosa, unsigned long a); +static int cosa_download(struct cosa_data *cosa, void __user *a); +static int cosa_readmem(struct cosa_data *cosa, void __user *a); /* COSA/SRP ROM monitor */ -static int download(struct cosa_data *cosa, const char *data, int addr, int len); +static int download(struct cosa_data *cosa, const char __user *data, int addr, int len); static int startmicrocode(struct cosa_data *cosa, int address); -static int readmem(struct cosa_data *cosa, char *data, int addr, int len); +static int readmem(struct cosa_data *cosa, char __user *data, int addr, int len); static int cosa_reset_and_read_id(struct cosa_data *cosa, char *id); /* Auxilliary functions */ @@ -729,7 +729,7 @@ static void cosa_sppp_timeout(struct net_device *dev) cosa_kick(chan->cosa); if (chan->tx_skb) { dev_kfree_skb(chan->tx_skb); - chan->tx_skb = 0; + chan->tx_skb = NULL; } netif_wake_queue(dev); } @@ -745,11 +745,11 @@ static int cosa_sppp_close(struct net_device *d) spin_lock_irqsave(&chan->cosa->lock, flags); if (chan->rx_skb) { kfree_skb(chan->rx_skb); - chan->rx_skb = 0; + chan->rx_skb = NULL; } if (chan->tx_skb) { kfree_skb(chan->tx_skb); - chan->tx_skb = 0; + chan->tx_skb = NULL; } chan->usage=0; chan->cosa->usage--; @@ -791,7 +791,7 @@ static int sppp_rx_done(struct channel_data *chan) chan->stats.rx_packets++; chan->stats.rx_bytes += chan->cosa->rxsize; netif_rx(chan->rx_skb); - chan->rx_skb = 0; + chan->rx_skb = NULL; chan->pppdev.dev->last_rx = jiffies; return 0; } @@ -807,7 +807,7 @@ static int sppp_tx_done(struct channel_data *chan, int size) return 1; } dev_kfree_skb_irq(chan->tx_skb); - chan->tx_skb = 0; + chan->tx_skb = NULL; chan->stats.tx_packets++; chan->stats.tx_bytes += size; netif_wake_queue(chan->pppdev.dev); @@ -830,7 +830,7 @@ static void chardev_channel_init(struct channel_data *chan) } static ssize_t cosa_read(struct file *file, - char *buf, size_t count, loff_t *ppos) + char __user *buf, size_t count, loff_t *ppos) { DECLARE_WAITQUEUE(wait, current); unsigned long flags; @@ -905,7 +905,7 @@ static int chrdev_rx_done(struct channel_data *chan) static ssize_t cosa_write(struct file *file, - const char *buf, size_t count, loff_t *ppos) + const char __user *buf, size_t count, loff_t *ppos) { DECLARE_WAITQUEUE(wait, current); struct channel_data *chan = file->private_data; @@ -1066,7 +1066,7 @@ static inline int cosa_reset(struct cosa_data *cosa) } /* High-level function to download data into COSA memory. Calls download() */ -static inline int cosa_download(struct cosa_data *cosa, unsigned long arg) +static inline int cosa_download(struct cosa_data *cosa, void __user *arg) { struct cosa_download d; int i; @@ -1080,7 +1080,7 @@ static inline int cosa_download(struct cosa_data *cosa, unsigned long arg) return -EPERM; } - if (copy_from_user(&d, (void __user *) arg, sizeof(d))) + if (copy_from_user(&d, arg, sizeof(d))) return -EFAULT; if (d.addr < 0 || d.addr > COSA_MAX_FIRMWARE_SIZE) @@ -1105,7 +1105,7 @@ static inline int cosa_download(struct cosa_data *cosa, unsigned long arg) } /* High-level function to read COSA memory. Calls readmem() */ -static inline int cosa_readmem(struct cosa_data *cosa, unsigned long arg) +static inline int cosa_readmem(struct cosa_data *cosa, void __user *arg) { struct cosa_download d; int i; @@ -1120,7 +1120,7 @@ static inline int cosa_readmem(struct cosa_data *cosa, unsigned long arg) return -EPERM; } - if (copy_from_user(&d, (void __user *) arg, sizeof(d))) + if (copy_from_user(&d, arg, sizeof(d))) return -EFAULT; /* If something fails, force the user to reset the card */ @@ -1167,7 +1167,7 @@ static inline int cosa_start(struct cosa_data *cosa, int address) } /* Buffer of size at least COSA_MAX_ID_STRING is expected */ -static inline int cosa_getidstr(struct cosa_data *cosa, char *string) +static inline int cosa_getidstr(struct cosa_data *cosa, char __user *string) { int l = strlen(cosa->id_string)+1; if (copy_to_user(string, cosa->id_string, l)) @@ -1176,7 +1176,7 @@ static inline int cosa_getidstr(struct cosa_data *cosa, char *string) } /* Buffer of size at least COSA_MAX_ID_STRING is expected */ -static inline int cosa_gettype(struct cosa_data *cosa, char *string) +static inline int cosa_gettype(struct cosa_data *cosa, char __user *string) { int l = strlen(cosa->type)+1; if (copy_to_user(string, cosa->type, l)) @@ -1187,6 +1187,7 @@ static inline int cosa_gettype(struct cosa_data *cosa, char *string) static int cosa_ioctl_common(struct cosa_data *cosa, struct channel_data *channel, unsigned int cmd, unsigned long arg) { + void __user *argp = (void __user *)arg; switch(cmd) { case COSAIORSET: /* Reset the device */ if (!capable(CAP_NET_ADMIN)) @@ -1200,15 +1201,15 @@ static int cosa_ioctl_common(struct cosa_data *cosa, if (!capable(CAP_SYS_RAWIO)) return -EACCES; - return cosa_download(cosa, arg); + return cosa_download(cosa, argp); case COSAIORMEM: if (!capable(CAP_SYS_RAWIO)) return -EACCES; - return cosa_readmem(cosa, arg); + return cosa_readmem(cosa, argp); case COSAIORTYPE: - return cosa_gettype(cosa, (char *)arg); + return cosa_gettype(cosa, argp); case COSAIORIDSTR: - return cosa_getidstr(cosa, (char *)arg); + return cosa_getidstr(cosa, argp); case COSAIONRCARDS: return nr_cards; case COSAIONRCHANS: @@ -1434,7 +1435,7 @@ static int cosa_dma_able(struct channel_data *chan, char *buf, int len) * by a single space. Monitor has to reply with a space. Now the download * begins. After the download monitor replies with "\r\n." (CR LF dot). */ -static int download(struct cosa_data *cosa, const char *microcode, int length, int address) +static int download(struct cosa_data *cosa, const char __user *microcode, int length, int address) { int i; @@ -1508,7 +1509,7 @@ static int startmicrocode(struct cosa_data *cosa, int address) * This routine is not needed during the normal operation and serves * for debugging purposes only. */ -static int readmem(struct cosa_data *cosa, char *microcode, int length, int address) +static int readmem(struct cosa_data *cosa, char __user *microcode, int length, int address) { if (put_wait_data(cosa, 'r') == -1) return -1; if ((get_wait_data(cosa)) != 'r') return -2;