From e6918187568dbd01842d8d1d2c808ce16a894239 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 21 Apr 2024 13:54:28 +0200 Subject: Adding upstream version 18.2.2. Signed-off-by: Daniel Baumann --- src/spdk/ocf/inc/ocf_queue.h | 129 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 src/spdk/ocf/inc/ocf_queue.h (limited to 'src/spdk/ocf/inc/ocf_queue.h') diff --git a/src/spdk/ocf/inc/ocf_queue.h b/src/spdk/ocf/inc/ocf_queue.h new file mode 100644 index 000000000..3d795cd4e --- /dev/null +++ b/src/spdk/ocf/inc/ocf_queue.h @@ -0,0 +1,129 @@ +/* + * Copyright(c) 2012-2018 Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause-Clear + */ + +#ifndef OCF_QUEUE_H_ +#define OCF_QUEUE_H_ + +/** + * @file + * @brief OCF queues API + */ + +/** + * @brief I/O queue operations + */ +struct ocf_queue_ops { + /** + * @brief Kick I/O queue processing + * + * This function should inform worker, thread or any other queue + * processing mechanism, that there are new requests in queue to + * be processed. Processing requests synchronously in this function + * is not allowed. + * + * @param[in] q I/O queue to be kicked + */ + void (*kick)(ocf_queue_t q); + + /** + * @brief Kick I/O queue processing + * + * This function should inform worker, thread or any other queue + * processing mechanism, that there are new requests in queue to + * be processed. Function kick_sync is allowed to process requests + * synchronously without delegating them to the worker. + * + * @param[in] q I/O queue to be kicked + */ + void (*kick_sync)(ocf_queue_t q); + + /** + * @brief Stop I/O queue + * + * @param[in] q I/O queue beeing stopped + */ + void (*stop)(ocf_queue_t q); +}; + +/** + * @brief Allocate IO queue and add it to list in cache + * + * @param[in] cache Handle to cache instance + * @param[out] queue Handle to created queue + * @param[in] ops Queue operations + * + * @return Zero on success, otherwise error code + */ +int ocf_queue_create(ocf_cache_t cache, ocf_queue_t *queue, + const struct ocf_queue_ops *ops); + +/** + * @brief Increase reference counter in queue + * + * @param[in] queue Queue + * + */ +void ocf_queue_get(ocf_queue_t queue); + +/** + * @brief Decrease reference counter in queue + * + * @note If queue don't have any reference - deallocate it + * + * @param[in] queue Queue + * + */ +void ocf_queue_put(ocf_queue_t queue); + +/** + * @brief Process single request from queue + * + * @param[in] q Queue to run + */ +void ocf_queue_run_single(ocf_queue_t q); + +/** + * @brief Run queue processing + * + * @param[in] q Queue to run + */ +void ocf_queue_run(ocf_queue_t q); + +/** + * @brief Set queue private data + * + * @param[in] q I/O queue + * @param[in] priv Private data + */ +void ocf_queue_set_priv(ocf_queue_t q, void *priv); + +/** + * @brief Get queue private data + * + * @param[in] q I/O queue + * + * @retval I/O queue private data + */ +void *ocf_queue_get_priv(ocf_queue_t q); + +/** + * @brief Get number of pending requests in I/O queue + * + * @param[in] q I/O queue + * + * @retval Number of pending requests in I/O queue + */ +uint32_t ocf_queue_pending_io(ocf_queue_t q); + +/** + * @brief Get cache instance to which I/O queue belongs + * + * @param[in] q I/O queue + * + * @retval Cache instance + */ +ocf_cache_t ocf_queue_get_cache(ocf_queue_t q); + +#endif -- cgit v1.2.3