Branch data Line data Source code
1 : : /* SPDX-License-Identifier: BSD-3-Clause
2 : : * Copyright 2023 Solidigm All Rights Reserved
3 : : */
4 : :
5 : : #ifndef FTL_PROPERTY_H
6 : : #define FTL_PROPERTY_H
7 : :
8 : : #include "spdk/stdinc.h"
9 : :
10 : : struct spdk_ftl_dev;
11 : : struct ftl_property;
12 : :
13 : : /**
14 : : * @brief Init the FTL properties system
15 : : *
16 : : * @retval 0 Success
17 : : * @retval Non-zero a Failure
18 : : */
19 : : int ftl_properties_init(struct spdk_ftl_dev *dev);
20 : :
21 : : /**
22 : : * @brief Deinit the FTL properties system
23 : : */
24 : : void ftl_properties_deinit(struct spdk_ftl_dev *dev);
25 : :
26 : : /**
27 : : * @brief A function to dump the FTL property which type is bool
28 : : */
29 : : void ftl_property_dump_bool(struct spdk_ftl_dev *dev, const struct ftl_property *property,
30 : : struct spdk_json_write_ctx *w);
31 : :
32 : : /**
33 : : * @brief A function to dump the FTL property which type is uint64
34 : : */
35 : : void ftl_property_dump_uint64(struct spdk_ftl_dev *dev, const struct ftl_property *property,
36 : : struct spdk_json_write_ctx *w);
37 : :
38 : : /**
39 : : * @brief A function to dump the FTL property which type is uint32
40 : : */
41 : : void ftl_property_dump_uint32(struct spdk_ftl_dev *dev, const struct ftl_property *property,
42 : : struct spdk_json_write_ctx *w);
43 : :
44 : : /**
45 : : * @brief Dump the value of property into the specified JSON RPC request
46 : : *
47 : : * @param dev FTL device
48 : : * @param property The property to dump to the JSON RPC request
49 : : * @param[out] w JSON RPC request
50 : : */
51 : : typedef void (*ftl_property_dump_fn)(struct spdk_ftl_dev *dev, const struct ftl_property *property,
52 : : struct spdk_json_write_ctx *w);
53 : :
54 : : /**
55 : : * @brief Decode property value and store it in output
56 : : *
57 : : * @param dev FTL device
58 : : * @param property The property
59 : : * @param value The new property value
60 : : * @param value_size The size of the value buffer
61 : : * @param output The output where to store new value
62 : : * @param output_size The decoded value output size
63 : : */
64 : : typedef int (*ftl_property_decode_fn)(struct spdk_ftl_dev *dev, struct ftl_property *property,
65 : : const char *value, size_t value_size, void *output, size_t output_size);
66 : :
67 : : /**
68 : : * @brief Set the FTL property
69 : : *
70 : : * @param dev FTL device
71 : : * @param mngt FTL management process handle
72 : : * @param property The property
73 : : * @param new_value The new property value to be set
74 : : * @param new_value_size The size of the new property value
75 : : */
76 : : typedef void (*ftl_property_set_fn)(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt,
77 : : const struct ftl_property *property, void *new_value, size_t new_value_size);
78 : :
79 : : /**
80 : : * @brief Register a FTL property
81 : : *
82 : : * @param dev FTL device
83 : : * @param name the FTL property name
84 : : * @param value Pointer to the value of property
85 : : * @param size The value size of the property
86 : : * @param unit The unit of the property value
87 : : * @param desc The property description for user help
88 : : * @param dump The function to dump the property to the JSON RPC request
89 : : * @param decode The function to decode a new value of the property
90 : : * @param set The function to execute the property setting procedure
91 : : * @param verbose_mode The property is available in verbose mode only
92 : : */
93 : : void ftl_property_register(struct spdk_ftl_dev *dev,
94 : : const char *name, void *value, size_t size,
95 : : const char *unit, const char *desc,
96 : : ftl_property_dump_fn dump,
97 : : ftl_property_decode_fn decode,
98 : : ftl_property_set_fn set,
99 : : bool verbose_mode);
100 : :
101 : : /**
102 : : * @brief Dump FTL properties to the JSON request
103 : : *
104 : : * @param dev FTL device
105 : : * @param request The JSON request where to store the FTL properties
106 : : */
107 : : void ftl_property_dump(struct spdk_ftl_dev *dev, struct spdk_jsonrpc_request *request);
108 : :
109 : : /**
110 : : * @brief Decode property value and store it in output
111 : : *
112 : : * @param dev FTL device
113 : : * @param name The property name to be decoded
114 : : * @param value The new property value
115 : : * @param value_size The new property value buffer size
116 : : * @param output The output where to store new value
117 : : * @param output_size The decoded value output size
118 : : */
119 : : int ftl_property_decode(struct spdk_ftl_dev *dev, const char *name, const char *value,
120 : : size_t value_size, void **output, size_t *output_size);
121 : :
122 : : /**
123 : : * @brief The property bool decoder
124 : : */
125 : : int ftl_property_decode_bool(struct spdk_ftl_dev *dev, struct ftl_property *property,
126 : : const char *value, size_t value_size, void *output, size_t output_size);
127 : :
128 : : /**
129 : : * @brief Set FTL property
130 : : *
131 : : * @param dev FTL device
132 : : * @param mngt FTL management process handle
133 : : * @param name The property name to be set
134 : : * @param value The new property decoded value
135 : : * @param output The size of the new property decoded value
136 : : */
137 : : int ftl_property_set(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt,
138 : : const char *name, void *value, size_t value_size);
139 : :
140 : : /**
141 : : * @brief Generic setter of the property
142 : : *
143 : : * @note This setter does binary copy and finishes always call the next management step
144 : : */
145 : : void ftl_property_set_generic(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt,
146 : : const struct ftl_property *property,
147 : : void *new_value, size_t new_value_size);
148 : :
149 : : /**
150 : : * @brief The wrapper function to register mutable boolean property
151 : : *
152 : : * @param dev FTL device
153 : : * @param name The property name
154 : : * @param value The pointer to the boolean value of the property
155 : : * @param unit The property unit
156 : : * @param desc The property description
157 : : * @param verbose_mode The verbose mode flag
158 : : */
159 : : static inline void
160 : 0 : ftl_property_register_bool_rw(struct spdk_ftl_dev *dev, const char *name, bool *value,
161 : : const char *unit, const char *desc, bool verbose_mode)
162 : : {
163 : 0 : ftl_property_register(dev, name, value, sizeof(*value), unit, desc, ftl_property_dump_bool,
164 : : ftl_property_decode_bool, ftl_property_set_generic, verbose_mode);
165 : 0 : }
166 : :
167 : : #endif
|