diff options
author | Brian Norris <computersforpeace@gmail.com> | 2011-09-09 12:59:03 -0400 |
---|---|---|
committer | Artem Bityutskiy <artem.bityutskiy@intel.com> | 2011-09-11 08:56:25 -0400 |
commit | e99d8b089a6c6fd72f022168e3bf8f22d4e5e137 (patch) | |
tree | 6f0041c3ca51a7a7ee782900429f07617bdc940f /include/mtd | |
parent | beb133fc165e1289c858d8f952b982b7d0b313cd (diff) |
mtd: add MEMWRITE ioctl
Implement a new ioctl for writing both page data and OOB to flash at the
same time. This ioctl is intended to be a generic interface that can
replace other ioctls (MEMWRITEOOB and MEMWRITEOOB64) and cover the
functionality of several other old ones, e.g., MEMWRITE can:
* write autoplaced OOB instead of using ECCGETLAYOUT (deprecated) and
working around the reserved areas
* write raw (no ECC) OOB instead of using MTDFILEMODE to set the
per-file-descriptor MTD_FILE_MODE_RAW
* write raw (no ECC) data instead of using MTDFILEMODE
(MTD_FILE_MODE_RAW) and using standard character device "write"
This ioctl is especially useful for MLC NAND, which cannot be written
twice (i.e., we cannot successfully write the page data and OOB in two
separate operations). Instead, MEMWRITE can write both in a single
operation.
Note that this ioctl is not affected by the MTD file mode (i.e.,
MTD_FILE_MODE_RAW vs. MTD_FILE_MODE_NORMAL), since it receives its write
mode as an input parameter.
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
Diffstat (limited to 'include/mtd')
-rw-r--r-- | include/mtd/mtd-abi.h | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/include/mtd/mtd-abi.h b/include/mtd/mtd-abi.h index 1885aa98b311..1a16046b1d97 100644 --- a/include/mtd/mtd-abi.h +++ b/include/mtd/mtd-abi.h | |||
@@ -60,6 +60,16 @@ enum { | |||
60 | MTD_OPS_RAW = 2, | 60 | MTD_OPS_RAW = 2, |
61 | }; | 61 | }; |
62 | 62 | ||
63 | struct mtd_write_req { | ||
64 | __u64 start; | ||
65 | __u64 len; | ||
66 | __u64 ooblen; | ||
67 | __u64 usr_data; | ||
68 | __u64 usr_oob; | ||
69 | __u8 mode; | ||
70 | __u8 padding[7]; | ||
71 | }; | ||
72 | |||
63 | #define MTD_ABSENT 0 | 73 | #define MTD_ABSENT 0 |
64 | #define MTD_RAM 1 | 74 | #define MTD_RAM 1 |
65 | #define MTD_ROM 2 | 75 | #define MTD_ROM 2 |
@@ -147,6 +157,7 @@ struct otp_info { | |||
147 | #define MEMWRITEOOB64 _IOWR('M', 21, struct mtd_oob_buf64) | 157 | #define MEMWRITEOOB64 _IOWR('M', 21, struct mtd_oob_buf64) |
148 | #define MEMREADOOB64 _IOWR('M', 22, struct mtd_oob_buf64) | 158 | #define MEMREADOOB64 _IOWR('M', 22, struct mtd_oob_buf64) |
149 | #define MEMISLOCKED _IOR('M', 23, struct erase_info_user) | 159 | #define MEMISLOCKED _IOR('M', 23, struct erase_info_user) |
160 | #define MEMWRITE _IOWR('M', 24, struct mtd_write_req) | ||
150 | 161 | ||
151 | /* | 162 | /* |
152 | * Obsolete legacy interface. Keep it in order not to break userspace | 163 | * Obsolete legacy interface. Keep it in order not to break userspace |