Commit aea7cea9 authored by Kevin Cernekee's avatar Kevin Cernekee Committed by David Woodhouse
Browse files

mtd: add OOB ioctls for >4GiB devices

parent 97718540
Loading
Loading
Loading
Loading
+28 −0
Original line number Diff line number Diff line
@@ -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;
+2 −0
Original line number Diff line number Diff line
@@ -2411,6 +2411,8 @@ COMPATIBLE_IOCTL(ECCGETLAYOUT)
COMPATIBLE_IOCTL(ECCGETSTATS)
COMPATIBLE_IOCTL(MTDFILEMODE)
COMPATIBLE_IOCTL(MEMERASE64)
COMPATIBLE_IOCTL(MEMREADOOB64)
COMPATIBLE_IOCTL(MEMWRITEOOB64)
/* NBD */
ULONG_IOCTL(NBD_SET_SOCK)
ULONG_IOCTL(NBD_SET_BLKSIZE)
+9 −0
Original line number Diff line number Diff line
@@ -23,6 +23,13 @@ struct mtd_oob_buf {
	unsigned char __user *ptr;
};

struct mtd_oob_buf64 {
	__u64 start;
	__u32 pad;
	__u32 length;
	__u64 usr_ptr;
};

#define MTD_ABSENT		0
#define MTD_RAM			1
#define MTD_ROM			2
@@ -101,6 +108,8 @@ struct otp_info {
#define ECCGETSTATS		_IOR('M', 18, struct mtd_ecc_stats)
#define MTDFILEMODE		_IO('M', 19)
#define MEMERASE64		_IOW('M', 20, struct erase_info_user64)
#define MEMWRITEOOB64		_IOWR('M', 21, struct mtd_oob_buf64)
#define MEMREADOOB64		_IOWR('M', 22, struct mtd_oob_buf64)

/*
 * Obsolete legacy interface. Keep it in order not to break userspace