diff options
Diffstat (limited to 'include/mtd/ubi-header.h')
-rw-r--r-- | include/mtd/ubi-header.h | 43 |
1 files changed, 41 insertions, 2 deletions
diff --git a/include/mtd/ubi-header.h b/include/mtd/ubi-header.h index 74efa7763479..69d5d7e22899 100644 --- a/include/mtd/ubi-header.h +++ b/include/mtd/ubi-header.h | |||
@@ -58,6 +58,43 @@ enum { | |||
58 | }; | 58 | }; |
59 | 59 | ||
60 | /* | 60 | /* |
61 | * Volume flags used in the volume table record. | ||
62 | * | ||
63 | * @UBI_VTBL_AUTORESIZE_FLG: auto-resize this volume | ||
64 | * | ||
65 | * %UBI_VTBL_AUTORESIZE_FLG flag can be set only for one volume in the volume | ||
66 | * table. UBI automatically re-sizes the volume which has this flag and makes | ||
67 | * the volume to be of largest possible size. This means that if after the | ||
68 | * initialization UBI finds out that there are available physical eraseblocks | ||
69 | * present on the device, it automatically appends all of them to the volume | ||
70 | * (the physical eraseblocks reserved for bad eraseblocks handling and other | ||
71 | * reserved physical eraseblocks are not taken). So, if there is a volume with | ||
72 | * the %UBI_VTBL_AUTORESIZE_FLG flag set, the amount of available logical | ||
73 | * eraseblocks will be zero after UBI is loaded, because all of them will be | ||
74 | * reserved for this volume. Note, the %UBI_VTBL_AUTORESIZE_FLG bit is cleared | ||
75 | * after the volume had been initialized. | ||
76 | * | ||
77 | * The auto-resize feature is useful for device production purposes. For | ||
78 | * example, different NAND flash chips may have different amount of initial bad | ||
79 | * eraseblocks, depending of particular chip instance. Manufacturers of NAND | ||
80 | * chips usually guarantee that the amount of initial bad eraseblocks does not | ||
81 | * exceed certain percent, e.g. 2%. When one creates an UBI image which will be | ||
82 | * flashed to the end devices in production, he does not know the exact amount | ||
83 | * of good physical eraseblocks the NAND chip on the device will have, but this | ||
84 | * number is required to calculate the volume sized and put them to the volume | ||
85 | * table of the UBI image. In this case, one of the volumes (e.g., the one | ||
86 | * which will store the root file system) is marked as "auto-resizable", and | ||
87 | * UBI will adjust its size on the first boot if needed. | ||
88 | * | ||
89 | * Note, first UBI reserves some amount of physical eraseblocks for bad | ||
90 | * eraseblock handling, and then re-sizes the volume, not vice-versa. This | ||
91 | * means that the pool of reserved physical eraseblocks will always be present. | ||
92 | */ | ||
93 | enum { | ||
94 | UBI_VTBL_AUTORESIZE_FLG = 0x01, | ||
95 | }; | ||
96 | |||
97 | /* | ||
61 | * Compatibility constants used by internal volumes. | 98 | * Compatibility constants used by internal volumes. |
62 | * | 99 | * |
63 | * @UBI_COMPAT_DELETE: delete this internal volume before anything is written | 100 | * @UBI_COMPAT_DELETE: delete this internal volume before anything is written |
@@ -289,7 +326,8 @@ struct ubi_vid_hdr { | |||
289 | * @upd_marker: if volume update was started but not finished | 326 | * @upd_marker: if volume update was started but not finished |
290 | * @name_len: volume name length | 327 | * @name_len: volume name length |
291 | * @name: the volume name | 328 | * @name: the volume name |
292 | * @padding2: reserved, zeroes | 329 | * @flags: volume flags (%UBI_VTBL_AUTORESIZE_FLG) |
330 | * @padding: reserved, zeroes | ||
293 | * @crc: a CRC32 checksum of the record | 331 | * @crc: a CRC32 checksum of the record |
294 | * | 332 | * |
295 | * The volume table records are stored in the volume table, which is stored in | 333 | * The volume table records are stored in the volume table, which is stored in |
@@ -324,7 +362,8 @@ struct ubi_vtbl_record { | |||
324 | __u8 upd_marker; | 362 | __u8 upd_marker; |
325 | __be16 name_len; | 363 | __be16 name_len; |
326 | __u8 name[UBI_VOL_NAME_MAX+1]; | 364 | __u8 name[UBI_VOL_NAME_MAX+1]; |
327 | __u8 padding2[24]; | 365 | __u8 flags; |
366 | __u8 padding[23]; | ||
328 | __be32 crc; | 367 | __be32 crc; |
329 | } __attribute__ ((packed)); | 368 | } __attribute__ ((packed)); |
330 | 369 | ||