Loading arch/sparc/kernel/apc.c +28 −12 Original line number Diff line number Diff line Loading @@ -85,52 +85,68 @@ static int apc_release(struct inode *inode, struct file *f) return 0; } static int apc_ioctl(struct inode *inode, struct file *f, unsigned int cmd, unsigned long __arg) static long apc_ioctl(struct file *f, unsigned int cmd, unsigned long __arg) { __u8 inarg, __user *arg; arg = (__u8 __user *) __arg; lock_kernel(); switch (cmd) { case APCIOCGFANCTL: if (put_user(apc_readb(APC_FANCTL_REG) & APC_REGMASK, arg)) if (put_user(apc_readb(APC_FANCTL_REG) & APC_REGMASK, arg)) { unlock_kernel(); return -EFAULT; } break; case APCIOCGCPWR: if (put_user(apc_readb(APC_CPOWER_REG) & APC_REGMASK, arg)) if (put_user(apc_readb(APC_CPOWER_REG) & APC_REGMASK, arg)) { unlock_kernel(); return -EFAULT; } break; case APCIOCGBPORT: if (put_user(apc_readb(APC_BPORT_REG) & APC_BPMASK, arg)) if (put_user(apc_readb(APC_BPORT_REG) & APC_BPMASK, arg)) { unlock_kernel(); return -EFAULT; } break; case APCIOCSFANCTL: if (get_user(inarg, arg)) if (get_user(inarg, arg)) { unlock_kernel(); return -EFAULT; } apc_writeb(inarg & APC_REGMASK, APC_FANCTL_REG); break; case APCIOCSCPWR: if (get_user(inarg, arg)) if (get_user(inarg, arg)) { unlock_kernel(); return -EFAULT; } apc_writeb(inarg & APC_REGMASK, APC_CPOWER_REG); break; case APCIOCSBPORT: if (get_user(inarg, arg)) if (get_user(inarg, arg)) { unlock_kernel(); return -EFAULT; } apc_writeb(inarg & APC_BPMASK, APC_BPORT_REG); break; default: unlock_kernel(); return -EINVAL; }; unlock_kernel(); return 0; } static const struct file_operations apc_fops = { .ioctl = apc_ioctl, .unlocked_ioctl = apc_ioctl, .open = apc_open, .release = apc_release, }; Loading Loading
arch/sparc/kernel/apc.c +28 −12 Original line number Diff line number Diff line Loading @@ -85,52 +85,68 @@ static int apc_release(struct inode *inode, struct file *f) return 0; } static int apc_ioctl(struct inode *inode, struct file *f, unsigned int cmd, unsigned long __arg) static long apc_ioctl(struct file *f, unsigned int cmd, unsigned long __arg) { __u8 inarg, __user *arg; arg = (__u8 __user *) __arg; lock_kernel(); switch (cmd) { case APCIOCGFANCTL: if (put_user(apc_readb(APC_FANCTL_REG) & APC_REGMASK, arg)) if (put_user(apc_readb(APC_FANCTL_REG) & APC_REGMASK, arg)) { unlock_kernel(); return -EFAULT; } break; case APCIOCGCPWR: if (put_user(apc_readb(APC_CPOWER_REG) & APC_REGMASK, arg)) if (put_user(apc_readb(APC_CPOWER_REG) & APC_REGMASK, arg)) { unlock_kernel(); return -EFAULT; } break; case APCIOCGBPORT: if (put_user(apc_readb(APC_BPORT_REG) & APC_BPMASK, arg)) if (put_user(apc_readb(APC_BPORT_REG) & APC_BPMASK, arg)) { unlock_kernel(); return -EFAULT; } break; case APCIOCSFANCTL: if (get_user(inarg, arg)) if (get_user(inarg, arg)) { unlock_kernel(); return -EFAULT; } apc_writeb(inarg & APC_REGMASK, APC_FANCTL_REG); break; case APCIOCSCPWR: if (get_user(inarg, arg)) if (get_user(inarg, arg)) { unlock_kernel(); return -EFAULT; } apc_writeb(inarg & APC_REGMASK, APC_CPOWER_REG); break; case APCIOCSBPORT: if (get_user(inarg, arg)) if (get_user(inarg, arg)) { unlock_kernel(); return -EFAULT; } apc_writeb(inarg & APC_BPMASK, APC_BPORT_REG); break; default: unlock_kernel(); return -EINVAL; }; unlock_kernel(); return 0; } static const struct file_operations apc_fops = { .ioctl = apc_ioctl, .unlocked_ioctl = apc_ioctl, .open = apc_open, .release = apc_release, }; Loading