|
@@ -607,6 +607,34 @@ static int mtd_ioctl(struct inode *inode, struct file *file,
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
+ case MEMWRITEOOB64:
|
|
|
+ {
|
|
|
+ struct mtd_oob_buf64 buf;
|
|
|
+ struct mtd_oob_buf64 __user *buf_user = argp;
|
|
|
+
|
|
|
+ if (copy_from_user(&buf, argp, sizeof(buf)))
|
|
|
+ ret = -EFAULT;
|
|
|
+ else
|
|
|
+ ret = mtd_do_writeoob(file, mtd, buf.start, buf.length,
|
|
|
+ (void __user *)(uintptr_t)buf.usr_ptr,
|
|
|
+ &buf_user->length);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ case MEMREADOOB64:
|
|
|
+ {
|
|
|
+ struct mtd_oob_buf64 buf;
|
|
|
+ struct mtd_oob_buf64 __user *buf_user = argp;
|
|
|
+
|
|
|
+ if (copy_from_user(&buf, argp, sizeof(buf)))
|
|
|
+ ret = -EFAULT;
|
|
|
+ else
|
|
|
+ ret = mtd_do_readoob(mtd, buf.start, buf.length,
|
|
|
+ (void __user *)(uintptr_t)buf.usr_ptr,
|
|
|
+ &buf_user->length);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
case MEMLOCK:
|
|
|
{
|
|
|
struct erase_info_user einfo;
|