Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Richard Weinberger and committed by
Artem Bityutskiy
1c865749 55393ba1

+137
+137
drivers/mtd/ubi/ubi-media.h
··· 375 375 __be32 crc; 376 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 + */ 419 + struct 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 + */ 441 + struct 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 + */ 461 + struct 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 + */ 476 + struct 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 + */ 491 + struct 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 + */ 510 + struct ubi_fm_eba { 511 + __be32 magic; 512 + __be32 reserved_pebs; 513 + __be32 pnum[0]; 514 + } __packed; 378 515 #endif /* !__UBI_MEDIA_H__ */