static long pmt_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { long err; void __user *argp = (void __user *)arg; switch (cmd) { case PMT_READ: err = read_pmt(argp); break; case PMT_WRITE: err = write_pmt(argp); break; default: err = -EINVAL; } return err; }
static long pmt_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { long ret = 0; /* , i=0; */ ulong version = PT_SIG; void __user *uarg = (void __user *)arg; pr_debug("PMT IOCTL: Enter\n"); if (false == g_bInitDone) { pr_debug("ERROR: NAND Flash Not initialized !!\n"); ret = -EFAULT; goto exit; } switch (cmd) { case PMT_READ: pr_debug("PMT IOCTL: PMT_READ\n"); ret = read_pmt(uarg); break; case PMT_WRITE: pr_debug("PMT IOCTL: PMT_WRITE\n"); if (copy_from_user(&pmtctl, uarg, sizeof(DM_PARTITION_INFO_PACKET))) { ret = -EFAULT; goto exit; } new_part_tab((u8 *) &pmtctl, (struct mtd_info *)&host->mtd); update_part_tab((struct mtd_info *)&host->mtd); break; case PMT_VERSION: if (copy_to_user((void __user *)arg, &version, PT_SIG_SIZE)) ret = -EFAULT; else ret = 0; break; default: ret = -EINVAL; } exit: return ret; }