aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Weinberger <richard@nod.at>2012-09-26 11:51:41 -0400
committerArtem Bityutskiy <artem.bityutskiy@linux.intel.com>2012-10-03 05:29:37 -0400
commit1c865749999efdae63ddfb73b911ee04e1d4e1c8 (patch)
tree6f0e3bde0277518ea231a60b6d7e3e712195a9fe
parent55393ba1bdedc5ded79b34b4cc08898a7776cddb (diff)
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>
-rw-r--r--drivers/mtd/ubi/ubi-media.h137
1 files changed, 137 insertions, 0 deletions
diff --git a/drivers/mtd/ubi/ubi-media.h b/drivers/mtd/ubi/ubi-media.h
index 468ffbc0eabd..ac2b24d1783d 100644
--- a/drivers/mtd/ubi/ubi-media.h
+++ b/drivers/mtd/ubi/ubi-media.h
@@ -375,4 +375,141 @@ struct ubi_vtbl_record {
375 __be32 crc; 375 __be32 crc;
376} __packed; 376} __packed;
377 377
378/* UBI fastmap on-flash data structures */
379
380#define UBI_FM_SB_VOLUME_ID (UBI_LAYOUT_VOLUME_ID + 1)
381#define UBI_FM_DATA_VOLUME_ID (UBI_LAYOUT_VOLUME_ID + 2)
382
383/* fastmap on-flash data structure format version */
384#define UBI_FM_FMT_VERSION 1
385
386#define UBI_FM_SB_MAGIC 0x7B11D69F
387#define UBI_FM_HDR_MAGIC 0xD4B82EF7
388#define UBI_FM_VHDR_MAGIC 0xFA370ED1
389#define UBI_FM_POOL_MAGIC 0x67AF4D08
390#define UBI_FM_EBA_MAGIC 0xf0c040a8
391
392/* A fastmap supber block can be located between PEB 0 and
393 * UBI_FM_MAX_START */
394#define UBI_FM_MAX_START 64
395
396/* A fastmap can use up to UBI_FM_MAX_BLOCKS PEBs */
397#define UBI_FM_MAX_BLOCKS 32
398
399/* 5% of the total number of PEBs have to be scanned while attaching
400 * from a fastmap.
401 * But the size of this pool is limited to be between UBI_FM_MIN_POOL_SIZE and
402 * UBI_FM_MAX_POOL_SIZE */
403#define UBI_FM_MIN_POOL_SIZE 8
404#define UBI_FM_MAX_POOL_SIZE 256
405
406#define UBI_FM_WL_POOL_SIZE 25
407
408/**
409 * struct ubi_fm_sb - UBI fastmap super block
410 * @magic: fastmap super block magic number (%UBI_FM_SB_MAGIC)
411 * @version: format version of this fastmap
412 * @data_crc: CRC over the fastmap data
413 * @used_blocks: number of PEBs used by this fastmap
414 * @block_loc: an array containing the location of all PEBs of the fastmap
415 * @block_ec: the erase counter of each used PEB
416 * @sqnum: highest sequence number value at the time while taking the fastmap
417 *
418 */
419struct ubi_fm_sb {
420 __be32 magic;
421 __u8 version;
422 __u8 padding1[3];
423 __be32 data_crc;
424 __be32 used_blocks;
425 __be32 block_loc[UBI_FM_MAX_BLOCKS];
426 __be32 block_ec[UBI_FM_MAX_BLOCKS];
427 __be64 sqnum;
428 __u8 padding2[32];
429} __packed;
430
431/**
432 * struct ubi_fm_hdr - header of the fastmap data set
433 * @magic: fastmap header magic number (%UBI_FM_HDR_MAGIC)
434 * @free_peb_count: number of free PEBs known by this fastmap
435 * @used_peb_count: number of used PEBs known by this fastmap
436 * @scrub_peb_count: number of to be scrubbed PEBs known by this fastmap
437 * @bad_peb_count: number of bad PEBs known by this fastmap
438 * @erase_peb_count: number of bad PEBs which have to be erased
439 * @vol_count: number of UBI volumes known by this fastmap
440 */
441struct ubi_fm_hdr {
442 __be32 magic;
443 __be32 free_peb_count;
444 __be32 used_peb_count;
445 __be32 scrub_peb_count;
446 __be32 bad_peb_count;
447 __be32 erase_peb_count;
448 __be32 vol_count;
449 __u8 padding[4];
450} __packed;
451
452/* struct ubi_fm_hdr is followed by two struct ubi_fm_scan_pool */
453
454/**
455 * struct ubi_fm_scan_pool - Fastmap pool PEBs to be scanned while attaching
456 * @magic: pool magic numer (%UBI_FM_POOL_MAGIC)
457 * @size: current pool size
458 * @max_size: maximal pool size
459 * @pebs: an array containing the location of all PEBs in this pool
460 */
461struct ubi_fm_scan_pool {
462 __be32 magic;
463 __be16 size;
464 __be16 max_size;
465 __be32 pebs[UBI_FM_MAX_POOL_SIZE];
466 __be32 padding[4];
467} __packed;
468
469/* ubi_fm_scan_pool is followed by nfree+nused struct ubi_fm_ec records */
470
471/**
472 * struct ubi_fm_ec - stores the erase counter of a PEB
473 * @pnum: PEB number
474 * @ec: ec of this PEB
475 */
476struct ubi_fm_ec {
477 __be32 pnum;
478 __be32 ec;
479} __packed;
480
481/**
482 * struct ubi_fm_volhdr - Fastmap volume header
483 * it identifies the start of an eba table
484 * @magic: Fastmap volume header magic number (%UBI_FM_VHDR_MAGIC)
485 * @vol_id: volume id of the fastmapped volume
486 * @vol_type: type of the fastmapped volume
487 * @data_pad: data_pad value of the fastmapped volume
488 * @used_ebs: number of used LEBs within this volume
489 * @last_eb_bytes: number of bytes used in the last LEB
490 */
491struct ubi_fm_volhdr {
492 __be32 magic;
493 __be32 vol_id;
494 __u8 vol_type;
495 __u8 padding1[3];
496 __be32 data_pad;
497 __be32 used_ebs;
498 __be32 last_eb_bytes;
499 __u8 padding2[8];
500} __packed;
501
502/* struct ubi_fm_volhdr is followed by one struct ubi_fm_eba records */
503
504/**
505 * struct ubi_fm_eba - denotes an association beween a PEB and LEB
506 * @magic: EBA table magic number
507 * @reserved_pebs: number of table entries
508 * @pnum: PEB number of LEB (LEB is the index)
509 */
510struct ubi_fm_eba {
511 __be32 magic;
512 __be32 reserved_pebs;
513 __be32 pnum[0];
514} __packed;
378#endif /* !__UBI_MEDIA_H__ */ 515#endif /* !__UBI_MEDIA_H__ */