1c682c789SArtur Paszkiewicz /* SPDX-License-Identifier: BSD-3-Clause 2a6dbe372Spaul luse * Copyright (C) 2020 Intel Corporation. 3c682c789SArtur Paszkiewicz * All rights reserved. 4c26733cfSMateusz Kozlowski * Copyright 2023 Solidigm All Rights Reserved 5c682c789SArtur Paszkiewicz */ 6c682c789SArtur Paszkiewicz 7c682c789SArtur Paszkiewicz #ifndef SPDK_BDEV_FTL_H 8c682c789SArtur Paszkiewicz #define SPDK_BDEV_FTL_H 9c682c789SArtur Paszkiewicz 10c682c789SArtur Paszkiewicz #include "spdk/stdinc.h" 11c682c789SArtur Paszkiewicz #include "spdk/bdev_module.h" 12c682c789SArtur Paszkiewicz #include "spdk/ftl.h" 13c682c789SArtur Paszkiewicz 14c682c789SArtur Paszkiewicz #include "ftl_core.h" 15c682c789SArtur Paszkiewicz 16c682c789SArtur Paszkiewicz struct ftl_bdev_info { 17c682c789SArtur Paszkiewicz const char *name; 18c682c789SArtur Paszkiewicz struct spdk_uuid uuid; 19c682c789SArtur Paszkiewicz }; 20c682c789SArtur Paszkiewicz 211790ee8aSArtur Paszkiewicz struct rpc_ftl_stats_ctx { 221790ee8aSArtur Paszkiewicz struct spdk_bdev_desc *ftl_bdev_desc; 231790ee8aSArtur Paszkiewicz struct spdk_jsonrpc_request *request; 24c26733cfSMateusz Kozlowski struct ftl_stats ftl_stats; 251790ee8aSArtur Paszkiewicz }; 261790ee8aSArtur Paszkiewicz 271790ee8aSArtur Paszkiewicz typedef void (*ftl_bdev_init_fn)(const struct ftl_bdev_info *, void *, int); 281790ee8aSArtur Paszkiewicz 29c682c789SArtur Paszkiewicz int bdev_ftl_create_bdev(const struct spdk_ftl_conf *conf, ftl_bdev_init_fn cb, void *cb_arg); 300e33da49SKozlowski Mateusz void bdev_ftl_delete_bdev(const char *name, bool fast_shutdown, spdk_bdev_unregister_cb cb_fn, 310e33da49SKozlowski Mateusz void *cb_arg); 32c682c789SArtur Paszkiewicz int bdev_ftl_defer_init(const struct spdk_ftl_conf *conf); 332c7c8b6cSKozlowski Mateusz void bdev_ftl_unmap(const char *name, uint64_t lba, uint64_t num_blocks, spdk_ftl_fn cb_fn, 342c7c8b6cSKozlowski Mateusz void *cb_arg); 35c26733cfSMateusz Kozlowski 36c26733cfSMateusz Kozlowski /** 37c26733cfSMateusz Kozlowski * @brief Get FTL bdev device statistics 38c26733cfSMateusz Kozlowski * 39c26733cfSMateusz Kozlowski * @param name The name of the FTL bdev device 40309682caSMateusz Kozlowski * @param cb Callback function when the stats are ready 41c26733cfSMateusz Kozlowski * @param ftl_stats_ctx The context for getting the statistics 42c26733cfSMateusz Kozlowski * 43309682caSMateusz Kozlowski * @note In callback function will return the context of rpc_ftl_stats_ctx 44c26733cfSMateusz Kozlowski * and it contains struct ftl_stats 45c26733cfSMateusz Kozlowski */ 46c26733cfSMateusz Kozlowski void bdev_ftl_get_stats(const char *name, spdk_ftl_fn cb, struct rpc_ftl_stats_ctx *ftl_stats_ctx); 47c682c789SArtur Paszkiewicz 48309682caSMateusz Kozlowski /** 49309682caSMateusz Kozlowski * @brief Get FTL bdev device properties 50309682caSMateusz Kozlowski * 51309682caSMateusz Kozlowski * @param name The name of FTL bdev device 52*c959f72eSMateusz Kozlowski * @param cb_fn Callback function called when the stats are ready 53309682caSMateusz Kozlowski * @param request The JSON request will be filled with the FTL properties 54309682caSMateusz Kozlowski * 55309682caSMateusz Kozlowski * @note The JSON request will be returned as the context in the callback function 56309682caSMateusz Kozlowski */ 57309682caSMateusz Kozlowski void bdev_ftl_get_properties(const char *name, spdk_ftl_fn cb_fn, 58309682caSMateusz Kozlowski struct spdk_jsonrpc_request *request); 59309682caSMateusz Kozlowski 60*c959f72eSMateusz Kozlowski /** 61*c959f72eSMateusz Kozlowski * @brief Set FTL bdev device property 62*c959f72eSMateusz Kozlowski * 63*c959f72eSMateusz Kozlowski * @param name The name of FTL bdev device 64*c959f72eSMateusz Kozlowski * @param property The property name to be set 65*c959f72eSMateusz Kozlowski * @param value New value of the property 66*c959f72eSMateusz Kozlowski * @param cb_fn Collback function invoked when the operation finished 67*c959f72eSMateusz Kozlowski * @param cb_arg Collback function argument 68*c959f72eSMateusz Kozlowski */ 69*c959f72eSMateusz Kozlowski void bdev_ftl_set_property(const char *name, const char *property, const char *value, 70*c959f72eSMateusz Kozlowski spdk_ftl_fn cb_fn, void *cb_arg); 71*c959f72eSMateusz Kozlowski 72c682c789SArtur Paszkiewicz #endif /* SPDK_BDEV_FTL_H */ 73