UBI: Add fastmap on-flash data structures
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>
This commit is contained in:
parent
55393ba1bd
commit
1c86574999
|
@ -375,4 +375,141 @@ struct ubi_vtbl_record {
|
||||||
__be32 crc;
|
__be32 crc;
|
||||||
} __packed;
|
} __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__ */
|
#endif /* !__UBI_MEDIA_H__ */
|
||||||
|
|
Loading…
Reference in a new issue