UBI: Add fastmap on-flash data structures
authorRichard Weinberger <richard@nod.at>
Wed, 26 Sep 2012 15:51:41 +0000 (17:51 +0200)
committerArtem Bityutskiy <artem.bityutskiy@linux.intel.com>
Wed, 3 Oct 2012 09:29:37 +0000 (12:29 +0300)
Add the on-flash data structures neeed by fastmap
to ubi-media.h

Signed-off-by: Richard Weinberger <richard@nod.at>
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
drivers/mtd/ubi/ubi-media.h

index 468ffbc0eabd54e6adaffaf8a21d3a18674446d7..ac2b24d1783d17c83e2a2812ea0c7ccff6ca30d4 100644 (file)
@@ -375,4 +375,141 @@ struct ubi_vtbl_record {
        __be32  crc;
 } __packed;
 
+/* UBI fastmap on-flash data structures */
+
+#define UBI_FM_SB_VOLUME_ID    (UBI_LAYOUT_VOLUME_ID + 1)
+#define UBI_FM_DATA_VOLUME_ID  (UBI_LAYOUT_VOLUME_ID + 2)
+
+/* fastmap on-flash data structure format version */
+#define UBI_FM_FMT_VERSION     1
+
+#define UBI_FM_SB_MAGIC                0x7B11D69F
+#define UBI_FM_HDR_MAGIC       0xD4B82EF7
+#define UBI_FM_VHDR_MAGIC      0xFA370ED1
+#define UBI_FM_POOL_MAGIC      0x67AF4D08
+#define UBI_FM_EBA_MAGIC       0xf0c040a8
+
+/* A fastmap supber block can be located between PEB 0 and
+ * UBI_FM_MAX_START */
+#define UBI_FM_MAX_START       64
+
+/* A fastmap can use up to UBI_FM_MAX_BLOCKS PEBs */
+#define UBI_FM_MAX_BLOCKS      32
+
+/* 5% of the total number of PEBs have to be scanned while attaching
+ * from a fastmap.
+ * But the size of this pool is limited to be between UBI_FM_MIN_POOL_SIZE and
+ * UBI_FM_MAX_POOL_SIZE */
+#define UBI_FM_MIN_POOL_SIZE   8
+#define UBI_FM_MAX_POOL_SIZE   256
+
+#define UBI_FM_WL_POOL_SIZE    25
+
+/**
+ * struct ubi_fm_sb - UBI fastmap super block
+ * @magic: fastmap super block magic number (%UBI_FM_SB_MAGIC)
+ * @version: format version of this fastmap
+ * @data_crc: CRC over the fastmap data
+ * @used_blocks: number of PEBs used by this fastmap
+ * @block_loc: an array containing the location of all PEBs of the fastmap
+ * @block_ec: the erase counter of each used PEB
+ * @sqnum: highest sequence number value at the time while taking the fastmap
+ *
+ */
+struct ubi_fm_sb {
+       __be32 magic;
+       __u8 version;
+       __u8 padding1[3];
+       __be32 data_crc;
+       __be32 used_blocks;
+       __be32 block_loc[UBI_FM_MAX_BLOCKS];
+       __be32 block_ec[UBI_FM_MAX_BLOCKS];
+       __be64 sqnum;
+       __u8 padding2[32];
+} __packed;
+
+/**
+ * struct ubi_fm_hdr - header of the fastmap data set
+ * @magic: fastmap header magic number (%UBI_FM_HDR_MAGIC)
+ * @free_peb_count: number of free PEBs known by this fastmap
+ * @used_peb_count: number of used PEBs known by this fastmap
+ * @scrub_peb_count: number of to be scrubbed PEBs known by this fastmap
+ * @bad_peb_count: number of bad PEBs known by this fastmap
+ * @erase_peb_count: number of bad PEBs which have to be erased
+ * @vol_count: number of UBI volumes known by this fastmap
+ */
+struct ubi_fm_hdr {
+       __be32 magic;
+       __be32 free_peb_count;
+       __be32 used_peb_count;
+       __be32 scrub_peb_count;
+       __be32 bad_peb_count;
+       __be32 erase_peb_count;
+       __be32 vol_count;
+       __u8 padding[4];
+} __packed;
+
+/* struct ubi_fm_hdr is followed by two struct ubi_fm_scan_pool */
+
+/**
+ * struct ubi_fm_scan_pool - Fastmap pool PEBs to be scanned while attaching
+ * @magic: pool magic numer (%UBI_FM_POOL_MAGIC)
+ * @size: current pool size
+ * @max_size: maximal pool size
+ * @pebs: an array containing the location of all PEBs in this pool
+ */
+struct ubi_fm_scan_pool {
+       __be32 magic;
+       __be16 size;
+       __be16 max_size;
+       __be32 pebs[UBI_FM_MAX_POOL_SIZE];
+       __be32 padding[4];
+} __packed;
+
+/* ubi_fm_scan_pool is followed by nfree+nused struct ubi_fm_ec records */
+
+/**
+ * struct ubi_fm_ec - stores the erase counter of a PEB
+ * @pnum: PEB number
+ * @ec: ec of this PEB
+ */
+struct ubi_fm_ec {
+       __be32 pnum;
+       __be32 ec;
+} __packed;
+
+/**
+ * struct ubi_fm_volhdr - Fastmap volume header
+ * it identifies the start of an eba table
+ * @magic: Fastmap volume header magic number (%UBI_FM_VHDR_MAGIC)
+ * @vol_id: volume id of the fastmapped volume
+ * @vol_type: type of the fastmapped volume
+ * @data_pad: data_pad value of the fastmapped volume
+ * @used_ebs: number of used LEBs within this volume
+ * @last_eb_bytes: number of bytes used in the last LEB
+ */
+struct ubi_fm_volhdr {
+       __be32 magic;
+       __be32 vol_id;
+       __u8 vol_type;
+       __u8 padding1[3];
+       __be32 data_pad;
+       __be32 used_ebs;
+       __be32 last_eb_bytes;
+       __u8 padding2[8];
+} __packed;
+
+/* struct ubi_fm_volhdr is followed by one struct ubi_fm_eba records */
+
+/**
+ * struct ubi_fm_eba - denotes an association beween a PEB and LEB
+ * @magic: EBA table magic number
+ * @reserved_pebs: number of table entries
+ * @pnum: PEB number of LEB (LEB is the index)
+ */
+struct ubi_fm_eba {
+       __be32 magic;
+       __be32 reserved_pebs;
+       __be32 pnum[0];
+} __packed;
 #endif /* !__UBI_MEDIA_H__ */