1c6880a39SArtur Paszkiewicz /* SPDX-License-Identifier: BSD-3-Clause 2a6dbe372Spaul luse * Copyright (C) 2022 Intel Corporation. 3c6880a39SArtur Paszkiewicz * All rights reserved. 4c6880a39SArtur Paszkiewicz */ 5c6880a39SArtur Paszkiewicz 6c6880a39SArtur Paszkiewicz #ifndef FTL_SB_CURRENT_H 7c6880a39SArtur Paszkiewicz #define FTL_SB_CURRENT_H 8c6880a39SArtur Paszkiewicz 9c6880a39SArtur Paszkiewicz #include "spdk/uuid.h" 10c6880a39SArtur Paszkiewicz #include "ftl_sb_common.h" 11c6880a39SArtur Paszkiewicz 12*9f42898aSLukasz Lasek #define FTL_SB_VERSION_5 5 13*9f42898aSLukasz Lasek #define FTL_SB_VERSION_CURRENT FTL_SB_VERSION_5 14c6880a39SArtur Paszkiewicz 15c6880a39SArtur Paszkiewicz struct ftl_superblock { 16c6880a39SArtur Paszkiewicz struct ftl_superblock_header header; 17c6880a39SArtur Paszkiewicz 18c6880a39SArtur Paszkiewicz struct spdk_uuid uuid; 19c6880a39SArtur Paszkiewicz 2036049672SArtur Paszkiewicz /* Current sequence number */ 2136049672SArtur Paszkiewicz uint64_t seq_id; 2236049672SArtur Paszkiewicz 23c6880a39SArtur Paszkiewicz /* Flag describing clean shutdown */ 24c6880a39SArtur Paszkiewicz uint64_t clean; 25c6880a39SArtur Paszkiewicz 26c6880a39SArtur Paszkiewicz /* Number of surfaced LBAs */ 27c6880a39SArtur Paszkiewicz uint64_t lba_cnt; 28c6880a39SArtur Paszkiewicz 29c6880a39SArtur Paszkiewicz /* Percentage of base device blocks not exposed to the user */ 30c6880a39SArtur Paszkiewicz uint64_t overprovisioning; 31c6880a39SArtur Paszkiewicz 32c6880a39SArtur Paszkiewicz /* Maximum IO depth per band relocate */ 33c6880a39SArtur Paszkiewicz uint64_t max_reloc_qdepth; 34c6880a39SArtur Paszkiewicz 35d4a2d28dSMateusz Kozlowski /* Flag indicates that the FTL is ready for upgrade */ 36d4a2d28dSMateusz Kozlowski uint8_t upgrade_ready; 37d4a2d28dSMateusz Kozlowski 38920c1ccaSKozlowski Mateusz /* Reserved field */ 39d4a2d28dSMateusz Kozlowski uint8_t reserved3[15]; 40c6880a39SArtur Paszkiewicz 411738488eSArtur Paszkiewicz /* Last L2P checkpoint +1 (i.e. min_seq_id, 0:no ckpt) */ 421738488eSArtur Paszkiewicz uint64_t ckpt_seq_id; 431738488eSArtur Paszkiewicz 44c6880a39SArtur Paszkiewicz struct ftl_superblock_gc_info gc_info; 45c6880a39SArtur Paszkiewicz 46*9f42898aSLukasz Lasek /* Points to the end of blob area */ 47*9f42898aSLukasz Lasek ftl_df_obj_id blob_area_end; 48*9f42898aSLukasz Lasek 49*9f42898aSLukasz Lasek /* NVC device name */ 50*9f42898aSLukasz Lasek char nvc_dev_name[16]; 51*9f42898aSLukasz Lasek 52*9f42898aSLukasz Lasek /* NVC-stored MD layout tracking info */ 53*9f42898aSLukasz Lasek struct ftl_superblock_v5_md_blob_hdr md_layout_nvc; 54*9f42898aSLukasz Lasek 55*9f42898aSLukasz Lasek /* Base device name */ 56*9f42898aSLukasz Lasek char base_dev_name[16]; 57*9f42898aSLukasz Lasek 58*9f42898aSLukasz Lasek /* Base dev-stored MD layout tracking info */ 59*9f42898aSLukasz Lasek struct ftl_superblock_v5_md_blob_hdr md_layout_base; 60*9f42898aSLukasz Lasek 61*9f42898aSLukasz Lasek /* FTL layout params */ 62*9f42898aSLukasz Lasek struct ftl_superblock_v5_md_blob_hdr layout_params; 63*9f42898aSLukasz Lasek 64*9f42898aSLukasz Lasek /* Start of the blob area */ 65*9f42898aSLukasz Lasek char blob_area[0]; 66920c1ccaSKozlowski Mateusz } __attribute__((packed)); 67c6880a39SArtur Paszkiewicz 68c6880a39SArtur Paszkiewicz SPDK_STATIC_ASSERT(offsetof(struct ftl_superblock, header) == 0, 69c6880a39SArtur Paszkiewicz "Invalid placement of header"); 70c6880a39SArtur Paszkiewicz 71c6880a39SArtur Paszkiewicz SPDK_STATIC_ASSERT(FTL_SUPERBLOCK_SIZE >= sizeof(struct ftl_superblock), 72c6880a39SArtur Paszkiewicz "FTL SB metadata size is invalid"); 73c6880a39SArtur Paszkiewicz 74c6880a39SArtur Paszkiewicz #endif /* FTL_SB_CURRENT_H */ 75