//====================================================================== // update partition table //====================================================================== void handle_update (void) { DM_ERRCODE_PACKET errp = { DM_ERROR_PKT_PATN, 0 }; //================================================== // check if specified partitions can be updated //================================================== #if CFG_PMT_SUPPORT errp.err_code = update_part_tab (); #else print("%s : PMT is not supported\n", MOD); errp.err_code = DM_ERR_OK; #endif mt_usbtty_putcn (DM_SZ_ERR_CODE_PKT, (u8 *) & errp, TRUE); dm_ctx.dm_status = DM_STATUS_SECT_WAIT_NXT; }
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; }
static long pmt_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { long ret = 0; // , i=0; void __user *uarg = (void __user *)arg; printk(KERN_INFO "PMT IOCTL: Enter\n"); if (copy_from_user(&pmtctl, uarg, sizeof(DM_PARTITION_INFO_PACKET))) { ret = -EFAULT; goto exit; } if (false == g_bInitDone) { printk(KERN_INFO "ERROR: NAND Flash Not initialized !!\n"); ret = -EFAULT; goto exit; } switch (cmd) { case PMT_READ: printk(KERN_INFO "PMT IOCTL: PMT_READ\n"); break; case PMT_WRITE: printk(KERN_INFO "PMT IOCTL: PMT_WRITE\n"); new_part_tab((u8 *) & pmtctl, (struct mtd_info *)&host->mtd); update_part_tab((struct mtd_info *)&host->mtd); break; default: ret = -EINVAL; } exit: return ret; }