aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/mtd/ubi-user.h88
1 files changed, 62 insertions, 26 deletions
diff --git a/include/mtd/ubi-user.h b/include/mtd/ubi-user.h
index 5828d7879199..82113e160a2c 100644
--- a/include/mtd/ubi-user.h
+++ b/include/mtd/ubi-user.h
@@ -40,37 +40,37 @@
40 * UBI volume creation 40 * UBI volume creation
41 * ~~~~~~~~~~~~~~~~~~~ 41 * ~~~~~~~~~~~~~~~~~~~
42 * 42 *
43 * UBI volumes are created via the %UBI_IOCMKVOL IOCTL command of UBI character 43 * UBI volumes are created via the %UBI_IOCMKVOL ioctl command of UBI character
44 * device. A &struct ubi_mkvol_req object has to be properly filled and a 44 * device. A &struct ubi_mkvol_req object has to be properly filled and a
45 * pointer to it has to be passed to the IOCTL. 45 * pointer to it has to be passed to the ioctl.
46 * 46 *
47 * UBI volume deletion 47 * UBI volume deletion
48 * ~~~~~~~~~~~~~~~~~~~ 48 * ~~~~~~~~~~~~~~~~~~~
49 * 49 *
50 * To delete a volume, the %UBI_IOCRMVOL IOCTL command of the UBI character 50 * To delete a volume, the %UBI_IOCRMVOL ioctl command of the UBI character
51 * device should be used. A pointer to the 32-bit volume ID hast to be passed 51 * device should be used. A pointer to the 32-bit volume ID hast to be passed
52 * to the IOCTL. 52 * to the ioctl.
53 * 53 *
54 * UBI volume re-size 54 * UBI volume re-size
55 * ~~~~~~~~~~~~~~~~~~ 55 * ~~~~~~~~~~~~~~~~~~
56 * 56 *
57 * To re-size a volume, the %UBI_IOCRSVOL IOCTL command of the UBI character 57 * To re-size a volume, the %UBI_IOCRSVOL ioctl command of the UBI character
58 * device should be used. A &struct ubi_rsvol_req object has to be properly 58 * device should be used. A &struct ubi_rsvol_req object has to be properly
59 * filled and a pointer to it has to be passed to the IOCTL. 59 * filled and a pointer to it has to be passed to the ioctl.
60 * 60 *
61 * UBI volumes re-name 61 * UBI volumes re-name
62 * ~~~~~~~~~~~~~~~~~~~ 62 * ~~~~~~~~~~~~~~~~~~~
63 * 63 *
64 * To re-name several volumes atomically at one go, the %UBI_IOCRNVOL command 64 * To re-name several volumes atomically at one go, the %UBI_IOCRNVOL command
65 * of the UBI character device should be used. A &struct ubi_rnvol_req object 65 * of the UBI character device should be used. A &struct ubi_rnvol_req object
66 * has to be properly filled and a pointer to it has to be passed to the IOCTL. 66 * has to be properly filled and a pointer to it has to be passed to the ioctl.
67 * 67 *
68 * UBI volume update 68 * UBI volume update
69 * ~~~~~~~~~~~~~~~~~ 69 * ~~~~~~~~~~~~~~~~~
70 * 70 *
71 * Volume update should be done via the %UBI_IOCVOLUP IOCTL command of the 71 * Volume update should be done via the %UBI_IOCVOLUP ioctl command of the
72 * corresponding UBI volume character device. A pointer to a 64-bit update 72 * corresponding UBI volume character device. A pointer to a 64-bit update
73 * size should be passed to the IOCTL. After this, UBI expects user to write 73 * size should be passed to the ioctl. After this, UBI expects user to write
74 * this number of bytes to the volume character device. The update is finished 74 * this number of bytes to the volume character device. The update is finished
75 * when the claimed number of bytes is passed. So, the volume update sequence 75 * when the claimed number of bytes is passed. So, the volume update sequence
76 * is something like: 76 * is something like:
@@ -80,14 +80,50 @@
80 * write(fd, buf, image_size); 80 * write(fd, buf, image_size);
81 * close(fd); 81 * close(fd);
82 * 82 *
83 * Atomic eraseblock change 83 * Logical eraseblock erase
84 * ~~~~~~~~~~~~~~~~~~~~~~~~ 84 * ~~~~~~~~~~~~~~~~~~~~~~~~
85 * 85 *
86 * Atomic eraseblock change operation is done via the %UBI_IOCEBCH IOCTL 86 * To erase a logical eraseblock, the %UBI_IOCEBER ioctl command of the
87 * command of the corresponding UBI volume character device. A pointer to 87 * corresponding UBI volume character device should be used. This command
88 * &struct ubi_leb_change_req has to be passed to the IOCTL. Then the user is 88 * unmaps the requested logical eraseblock, makes sure the corresponding
89 * expected to write the requested amount of bytes. This is similar to the 89 * physical eraseblock is successfully erased, and returns.
90 * "volume update" IOCTL. 90 *
91 * Atomic logical eraseblock change
92 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
93 *
94 * Atomic logical eraseblock change operation is called using the %UBI_IOCEBCH
95 * ioctl command of the corresponding UBI volume character device. A pointer to
96 * a &struct ubi_leb_change_req object has to be passed to the ioctl. Then the
97 * user is expected to write the requested amount of bytes (similarly to what
98 * should be done in case of the "volume update" ioctl).
99 *
100 * Logical eraseblock map
101 * ~~~~~~~~~~~~~~~~~~~~~
102 *
103 * To map a logical eraseblock to a physical eraseblock, the %UBI_IOCEBMAP
104 * ioctl command should be used. A pointer to a &struct ubi_map_req object is
105 * expected to be passed. The ioctl maps the requested logical eraseblock to
106 * a physical eraseblock and returns. Only non-mapped logical eraseblocks can
107 * be mapped. If the logical eraseblock specified in the request is already
108 * mapped to a physical eraseblock, the ioctl fails and returns error.
109 *
110 * Logical eraseblock unmap
111 * ~~~~~~~~~~~~~~~~~~~~~~~~
112 *
113 * To unmap a logical eraseblock to a physical eraseblock, the %UBI_IOCEBUNMAP
114 * ioctl command should be used. The ioctl unmaps the logical eraseblocks,
115 * schedules corresponding physical eraseblock for erasure, and returns. Unlike
116 * the "LEB erase" command, it does not wait for the physical eraseblock being
117 * erased. Note, the side effect of this is that if an unclean reboot happens
118 * after the unmap ioctl returns, you may find the LEB mapped again to the same
119 * physical eraseblock after the UBI is run again.
120 *
121 * Check if logical eraseblock is mapped
122 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
123 *
124 * To check if a logical eraseblock is mapped to a physical eraseblock, the
125 * %UBI_IOCEBISMAP ioctl command should be used. It returns %0 if the LEB is
126 * not mapped, and %1 if it is mapped.
91 */ 127 */
92 128
93/* 129/*
@@ -101,7 +137,7 @@
101/* Maximum volume name length */ 137/* Maximum volume name length */
102#define UBI_MAX_VOLUME_NAME 127 138#define UBI_MAX_VOLUME_NAME 127
103 139
104/* IOCTL commands of UBI character devices */ 140/* ioctl commands of UBI character devices */
105 141
106#define UBI_IOC_MAGIC 'o' 142#define UBI_IOC_MAGIC 'o'
107 143
@@ -114,7 +150,7 @@
114/* Re-name volumes */ 150/* Re-name volumes */
115#define UBI_IOCRNVOL _IOW(UBI_IOC_MAGIC, 3, struct ubi_rnvol_req) 151#define UBI_IOCRNVOL _IOW(UBI_IOC_MAGIC, 3, struct ubi_rnvol_req)
116 152
117/* IOCTL commands of the UBI control character device */ 153/* ioctl commands of the UBI control character device */
118 154
119#define UBI_CTRL_IOC_MAGIC 'o' 155#define UBI_CTRL_IOC_MAGIC 'o'
120 156
@@ -123,21 +159,21 @@
123/* Detach an MTD device */ 159/* Detach an MTD device */
124#define UBI_IOCDET _IOW(UBI_CTRL_IOC_MAGIC, 65, int32_t) 160#define UBI_IOCDET _IOW(UBI_CTRL_IOC_MAGIC, 65, int32_t)
125 161
126/* IOCTL commands of UBI volume character devices */ 162/* ioctl commands of UBI volume character devices */
127 163
128#define UBI_VOL_IOC_MAGIC 'O' 164#define UBI_VOL_IOC_MAGIC 'O'
129 165
130/* Start UBI volume update */ 166/* Start UBI volume update */
131#define UBI_IOCVOLUP _IOW(UBI_VOL_IOC_MAGIC, 0, int64_t) 167#define UBI_IOCVOLUP _IOW(UBI_VOL_IOC_MAGIC, 0, int64_t)
132/* An eraseblock erasure command, used for debugging, disabled by default */ 168/* LEB erasure command, used for debugging, disabled by default */
133#define UBI_IOCEBER _IOW(UBI_VOL_IOC_MAGIC, 1, int32_t) 169#define UBI_IOCEBER _IOW(UBI_VOL_IOC_MAGIC, 1, int32_t)
134/* An atomic eraseblock change command */ 170/* Atomic LEB change command */
135#define UBI_IOCEBCH _IOW(UBI_VOL_IOC_MAGIC, 2, int32_t) 171#define UBI_IOCEBCH _IOW(UBI_VOL_IOC_MAGIC, 2, int32_t)
136/* Map an eraseblock, used for debugging, disabled by default */ 172/* Map LEB command */
137#define UBI_IOCEBMAP _IOW(UBI_VOL_IOC_MAGIC, 3, struct ubi_map_req) 173#define UBI_IOCEBMAP _IOW(UBI_VOL_IOC_MAGIC, 3, struct ubi_map_req)
138/* Unmap an eraseblock, used for debugging, disabled by default */ 174/* Unmap LEB command */
139#define UBI_IOCEBUNMAP _IOW(UBI_VOL_IOC_MAGIC, 4, int32_t) 175#define UBI_IOCEBUNMAP _IOW(UBI_VOL_IOC_MAGIC, 4, int32_t)
140/* Check if an eraseblock is mapped, used for debugging, disabled by default */ 176/* Check if LEB is mapped command */
141#define UBI_IOCEBISMAP _IOR(UBI_VOL_IOC_MAGIC, 5, int32_t) 177#define UBI_IOCEBISMAP _IOR(UBI_VOL_IOC_MAGIC, 5, int32_t)
142 178
143/* Maximum MTD device name length supported by UBI */ 179/* Maximum MTD device name length supported by UBI */
@@ -311,8 +347,8 @@ struct ubi_rnvol_req {
311} __attribute__ ((packed)); 347} __attribute__ ((packed));
312 348
313/** 349/**
314 * struct ubi_leb_change_req - a data structure used in atomic logical 350 * struct ubi_leb_change_req - a data structure used in atomic LEB change
315 * eraseblock change requests. 351 * requests.
316 * @lnum: logical eraseblock number to change 352 * @lnum: logical eraseblock number to change
317 * @bytes: how many bytes will be written to the logical eraseblock 353 * @bytes: how many bytes will be written to the logical eraseblock
318 * @dtype: data type (%UBI_LONGTERM, %UBI_SHORTTERM, %UBI_UNKNOWN) 354 * @dtype: data type (%UBI_LONGTERM, %UBI_SHORTTERM, %UBI_UNKNOWN)
@@ -326,7 +362,7 @@ struct ubi_leb_change_req {
326} __attribute__ ((packed)); 362} __attribute__ ((packed));
327 363
328/** 364/**
329 * struct ubi_map_req - a data structure used in map eraseblock requests. 365 * struct ubi_map_req - a data structure used in map LEB requests.
330 * @lnum: logical eraseblock number to unmap 366 * @lnum: logical eraseblock number to unmap
331 * @dtype: data type (%UBI_LONGTERM, %UBI_SHORTTERM, %UBI_UNKNOWN) 367 * @dtype: data type (%UBI_LONGTERM, %UBI_SHORTTERM, %UBI_UNKNOWN)
332 * @padding: reserved for future, not used, has to be zeroed 368 * @padding: reserved for future, not used, has to be zeroed