1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright 2023 Solidigm All Rights Reserved 3 */ 4 5 #ifndef FTL_LAYOUT_TRACKER_BDEV_H 6 #define FTL_LAYOUT_TRACKER_BDEV_H 7 8 #include "spdk/stdinc.h" 9 #include "spdk/queue.h" 10 #include "ftl_layout.h" 11 12 /** 13 * FTL layout region descriptor 14 */ 15 struct ftl_layout_tracker_bdev_region_props { 16 /* Region type */ 17 uint32_t type; 18 19 /* Region version */ 20 uint32_t ver; 21 22 /* Region offset in blocks */ 23 uint64_t blk_offs; 24 25 /* Region size in blocks */ 26 uint64_t blk_sz; 27 }; 28 29 /** 30 * FTL layout region tracker 31 */ 32 struct ftl_layout_tracker_bdev; 33 34 /** 35 * @brief Initialize the FTL layout tracker 36 * 37 * @param bdev_blks bdev's number of blocks 38 * 39 * @return pointer to ftl_md_layout_tracker_bdev on success : NULL on fault 40 */ 41 struct ftl_layout_tracker_bdev *ftl_layout_tracker_bdev_init(uint64_t bdev_blks); 42 43 /** 44 * @brief Deinitialize the FTL layout tracker 45 * 46 * @param tracker pointer to the tracker instance 47 */ 48 void ftl_layout_tracker_bdev_fini(struct ftl_layout_tracker_bdev *tracker); 49 50 /** 51 * @brief Add a new FTL layout region 52 * 53 * @param tracker pointer to the tracker instance 54 * @param reg_type FTL layout region type 55 * @param reg_ver FTL layout region version 56 * @param blk_sz size in blocks of the FTL layout region 57 * @param blk_align offset alignment in blocks of the FTL layout region 58 * 59 * @return pointer to the ftl_layout_tracker_bdev_region_props, describing the region added or NULL upon fault 60 */ 61 const struct ftl_layout_tracker_bdev_region_props *ftl_layout_tracker_bdev_add_region( 62 struct ftl_layout_tracker_bdev *tracker, enum ftl_layout_region_type reg_type, uint32_t reg_ver, 63 uint64_t blk_sz, uint64_t blk_align); 64 65 /** 66 * @brief Remove an existing FTL lyout region 67 * 68 * @param tracker pointer to the tracker instance 69 * @param reg_type FTL layout region type 70 * @param reg_ver FTL layout region version 71 * 72 * @return 0 on success : -1 on fault 73 */ 74 int ftl_layout_tracker_bdev_rm_region(struct ftl_layout_tracker_bdev *tracker, 75 enum ftl_layout_region_type reg_type, uint32_t reg_ver); 76 77 /** 78 * @brief Find the next FTL layout region of a given type 79 * 80 * @param tracker pointer to the tracker instance 81 * @param reg_type region type filter, FTL_LAYOUT_REGION_TYPE_INVALID to iterate through all regions 82 * @param search_ctx search context, points to NULL to find the first region 83 */ 84 void ftl_layout_tracker_bdev_find_next_region(struct ftl_layout_tracker_bdev *tracker, 85 enum ftl_layout_region_type reg_type, 86 const struct ftl_layout_tracker_bdev_region_props **search_ctx); 87 88 #endif /* FTL_LAYOUT_TRACKER_BDEV_H */ 89