1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright (C) 2022 Intel Corporation. 3 * All rights reserved. 4 */ 5 6 #ifndef FTL_L2P_H 7 #define FTL_L2P_H 8 9 #include "spdk/queue.h" 10 11 #include "ftl_internal.h" 12 13 struct spdk_ftl_dev; 14 struct ftl_nv_cache_chunk; 15 struct ftl_rq; 16 struct ftl_io; 17 struct ftl_l2p_pin_ctx; 18 19 typedef void (*ftl_l2p_cb)(struct spdk_ftl_dev *dev, int status, void *ctx); 20 typedef void (*ftl_l2p_pin_cb)(struct spdk_ftl_dev *dev, int status, 21 struct ftl_l2p_pin_ctx *pin_ctx); 22 23 int ftl_l2p_init(struct spdk_ftl_dev *dev); 24 void ftl_l2p_deinit(struct spdk_ftl_dev *dev); 25 26 struct ftl_l2p_pin_ctx { 27 uint64_t lba; 28 uint64_t count; 29 ftl_l2p_pin_cb cb; 30 void *cb_ctx; 31 TAILQ_ENTRY(ftl_l2p_pin_ctx) link; 32 }; 33 34 void ftl_l2p_pin(struct spdk_ftl_dev *dev, uint64_t lba, uint64_t count, ftl_l2p_pin_cb cb, 35 void *cb_ctx, struct ftl_l2p_pin_ctx *pin_ctx); 36 void ftl_l2p_unpin(struct spdk_ftl_dev *dev, uint64_t lba, uint64_t count); 37 void ftl_l2p_pin_skip(struct spdk_ftl_dev *dev, ftl_l2p_pin_cb cb, void *cb_ctx, 38 struct ftl_l2p_pin_ctx *pin_ctx); 39 40 void ftl_l2p_set(struct spdk_ftl_dev *dev, uint64_t lba, ftl_addr addr); 41 ftl_addr ftl_l2p_get(struct spdk_ftl_dev *dev, uint64_t lba); 42 43 void ftl_l2p_clear(struct spdk_ftl_dev *dev, ftl_l2p_cb cb, void *cb_ctx); 44 void ftl_l2p_unmap(struct spdk_ftl_dev *dev, ftl_l2p_cb cb, void *cb_ctx); 45 void ftl_l2p_restore(struct spdk_ftl_dev *dev, ftl_l2p_cb cb, void *cb_ctx); 46 void ftl_l2p_persist(struct spdk_ftl_dev *dev, ftl_l2p_cb cb, void *cb_ctx); 47 void ftl_l2p_process(struct spdk_ftl_dev *dev); 48 bool ftl_l2p_is_halted(struct spdk_ftl_dev *dev); 49 void ftl_l2p_halt(struct spdk_ftl_dev *dev); 50 51 void ftl_l2p_update_cache(struct spdk_ftl_dev *dev, uint64_t lba, ftl_addr new_addr, 52 ftl_addr old_addr); 53 void ftl_l2p_update_base(struct spdk_ftl_dev *dev, uint64_t lba, ftl_addr new_addr, 54 ftl_addr old_addr); 55 56 void ftl_l2p_pin_complete(struct spdk_ftl_dev *dev, int status, struct ftl_l2p_pin_ctx *pin_ctx); 57 58 #endif /* FTL_L2P_H */ 59