aboutsummaryrefslogtreecommitdiffstats
path: root/include/mtd/ubi-header.h
diff options
context:
space:
mode:
authorDavid Woodhouse <dwmw2@infradead.org>2008-02-03 06:07:40 -0500
committerDavid Woodhouse <dwmw2@infradead.org>2008-02-03 06:07:40 -0500
commit6208e77e7fa9e69f399fddc55b1cf9527fbde599 (patch)
treef69fd4ed2e5101a442f14d6657b26e6e92fe72e5 /include/mtd/ubi-header.h
parent5eb91034f3d825f43b3c8ace7b69f94752b7deda (diff)
parent6dc4a8717fadd47103b5015cc678c75afda43ae0 (diff)
Merge git://git.infradead.org/~dedekind/ubi-2.6
Diffstat (limited to 'include/mtd/ubi-header.h')
-rw-r--r--include/mtd/ubi-header.h47
1 files changed, 44 insertions, 3 deletions
diff --git a/include/mtd/ubi-header.h b/include/mtd/ubi-header.h
index 74efa7763479..292f916ea564 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 */
93enum {
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
@@ -262,7 +299,9 @@ struct ubi_vid_hdr {
262 299
263/* The layout volume contains the volume table */ 300/* The layout volume contains the volume table */
264 301
265#define UBI_LAYOUT_VOL_ID UBI_INTERNAL_VOL_START 302#define UBI_LAYOUT_VOLUME_ID UBI_INTERNAL_VOL_START
303#define UBI_LAYOUT_VOLUME_TYPE UBI_VID_DYNAMIC
304#define UBI_LAYOUT_VOLUME_ALIGN 1
266#define UBI_LAYOUT_VOLUME_EBS 2 305#define UBI_LAYOUT_VOLUME_EBS 2
267#define UBI_LAYOUT_VOLUME_NAME "layout volume" 306#define UBI_LAYOUT_VOLUME_NAME "layout volume"
268#define UBI_LAYOUT_VOLUME_COMPAT UBI_COMPAT_REJECT 307#define UBI_LAYOUT_VOLUME_COMPAT UBI_COMPAT_REJECT
@@ -289,7 +328,8 @@ struct ubi_vid_hdr {
289 * @upd_marker: if volume update was started but not finished 328 * @upd_marker: if volume update was started but not finished
290 * @name_len: volume name length 329 * @name_len: volume name length
291 * @name: the volume name 330 * @name: the volume name
292 * @padding2: reserved, zeroes 331 * @flags: volume flags (%UBI_VTBL_AUTORESIZE_FLG)
332 * @padding: reserved, zeroes
293 * @crc: a CRC32 checksum of the record 333 * @crc: a CRC32 checksum of the record
294 * 334 *
295 * The volume table records are stored in the volume table, which is stored in 335 * The volume table records are stored in the volume table, which is stored in
@@ -324,7 +364,8 @@ struct ubi_vtbl_record {
324 __u8 upd_marker; 364 __u8 upd_marker;
325 __be16 name_len; 365 __be16 name_len;
326 __u8 name[UBI_VOL_NAME_MAX+1]; 366 __u8 name[UBI_VOL_NAME_MAX+1];
327 __u8 padding2[24]; 367 __u8 flags;
368 __u8 padding[23];
328 __be32 crc; 369 __be32 crc;
329} __attribute__ ((packed)); 370} __attribute__ ((packed));
330 371