xref: /spdk/module/bdev/ftl/bdev_ftl.h (revision c959f72e0fe2655b1bf4ed10777f1da7c000b8d1)
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