X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fisdn%2Fpcbit%2Fdrv.c;h=ed8af7ff0a4f43bf10f0d7d19fe658b6e42c2eea;hb=9bf4aaab3e101692164d49b7ca357651eb691cb6;hp=c3f43a56b6f70abf93372cd44d6016fc8e7cfa25;hpb=db216c3d5e4c040e557a50f8f5d35d5c415e8c1c;p=linux-2.6.git diff --git a/drivers/isdn/pcbit/drv.c b/drivers/isdn/pcbit/drv.c index c3f43a56b..ed8af7ff0 100644 --- a/drivers/isdn/pcbit/drv.c +++ b/drivers/isdn/pcbit/drv.c @@ -57,9 +57,9 @@ static char* pcbit_devname[MAX_PCBIT_CARDS] = { */ int pcbit_command(isdn_ctrl* ctl); -int pcbit_stat(u_char* buf, int len, int user, int, int); +int pcbit_stat(u_char __user * buf, int len, int, int); int pcbit_xmit(int driver, int chan, int ack, struct sk_buff *skb); -int pcbit_writecmd(const u_char*, int, int, int, int); +int pcbit_writecmd(const u_char __user *, int, int, int); static int set_protocol_running(struct pcbit_dev * dev); @@ -389,12 +389,13 @@ int pcbit_xmit(int driver, int chnum, int ack, struct sk_buff *skb) return len; } -int pcbit_writecmd(const u_char* buf, int len, int user, int driver, int channel) +int pcbit_writecmd(const u_char __user *buf, int len, int driver, int channel) { struct pcbit_dev * dev; int i, j; const u_char * loadbuf; u_char * ptr = NULL; + u_char *cbuf; int errstat; @@ -415,37 +416,28 @@ int pcbit_writecmd(const u_char* buf, int len, int user, int driver, int channel return -EINVAL; } - if (user) - { - u_char *cbuf = kmalloc(len, GFP_KERNEL); - if (!cbuf) - return -ENOMEM; + cbuf = kmalloc(len, GFP_KERNEL); + if (!cbuf) + return -ENOMEM; - if (copy_from_user(cbuf, buf, len)) { - kfree(cbuf); - return -EFAULT; - } - memcpy_toio(dev->sh_mem, cbuf, len); + if (copy_from_user(cbuf, buf, len)) { kfree(cbuf); + return -EFAULT; } - else - memcpy_toio(dev->sh_mem, buf, len); + memcpy_toio(dev->sh_mem, cbuf, len); + kfree(cbuf); return len; case L2_FWMODE: /* this is the hard part */ /* dumb board */ - if (user) { - /* get it into kernel space */ - if ((ptr = kmalloc(len, GFP_KERNEL))==NULL) - return -ENOMEM; - if (copy_from_user(ptr, buf, len)) { - kfree(ptr); - return -EFAULT; - } - loadbuf = ptr; + /* get it into kernel space */ + if ((ptr = kmalloc(len, GFP_KERNEL))==NULL) + return -ENOMEM; + if (copy_from_user(ptr, buf, len)) { + kfree(ptr); + return -EFAULT; } - else - loadbuf = buf; + loadbuf = ptr; errstat = 0; @@ -468,9 +460,7 @@ int pcbit_writecmd(const u_char* buf, int len, int user, int driver, int channel if (dev->loadptr > LOAD_ZONE_END) dev->loadptr = LOAD_ZONE_START; } - - if (user) - kfree(ptr); + kfree(ptr); return errstat ? errstat : len; default: @@ -723,17 +713,7 @@ static char statbuf[STATBUF_LEN]; static int stat_st = 0; static int stat_end = 0; - -static __inline void -memcpy_to_COND(int flag, char *d, const char *s, int len) { - if (flag) - copy_to_user(d, s, len); - else - memcpy(d, s, len); -} - - -int pcbit_stat(u_char* buf, int len, int user, int driver, int channel) +int pcbit_stat(u_char __user *buf, int len, int driver, int channel) { int stat_count; stat_count = stat_end - stat_st; @@ -747,24 +727,23 @@ int pcbit_stat(u_char* buf, int len, int user, int driver, int channel) if (stat_st < stat_end) { - memcpy_to_COND(user, buf, statbuf + stat_st, len); + copy_to_user(buf, statbuf + stat_st, len); stat_st += len; } else { if (len > STATBUF_LEN - stat_st) { - memcpy_to_COND(user, buf, statbuf + stat_st, + copy_to_user(buf, statbuf + stat_st, STATBUF_LEN - stat_st); - memcpy_to_COND(user, buf, statbuf, + copy_to_user(buf, statbuf, len - (STATBUF_LEN - stat_st)); stat_st = len - (STATBUF_LEN - stat_st); } else { - memcpy_to_COND(user, buf, statbuf + stat_st, - len); + copy_to_user(buf, statbuf + stat_st, len); stat_st += len;