/* SPDX-License-Identifier: GPL-2.0 */
|
/*
|
* Support for Intel Camera Imaging ISP subsystem.
|
* Copyright (c) 2010 - 2015, Intel Corporation.
|
*
|
* This program is free software; you can redistribute it and/or modify it
|
* under the terms and conditions of the GNU General Public License,
|
* version 2, as published by the Free Software Foundation.
|
*
|
* This program is distributed in the hope it will be useful, but WITHOUT
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
* more details.
|
*/
|
|
#ifndef __IA_CSS_QUEUE_H
|
#define __IA_CSS_QUEUE_H
|
|
#include <platform_support.h>
|
#include <type_support.h>
|
|
#include "ia_css_queue_comm.h"
|
#include "../src/queue_access.h"
|
|
/* Local Queue object descriptor */
|
struct ia_css_queue_local {
|
ia_css_circbuf_desc_t *cb_desc; /*Circbuf desc for local queues*/
|
ia_css_circbuf_elem_t *cb_elems; /*Circbuf elements*/
|
};
|
|
typedef struct ia_css_queue_local ia_css_queue_local_t;
|
|
/* Handle for queue object*/
|
typedef struct ia_css_queue ia_css_queue_t;
|
|
/*****************************************************************************
|
* Queue Public APIs
|
*****************************************************************************/
|
/* @brief Initialize a local queue instance.
|
*
|
* @param[out] qhandle. Handle to queue instance for use with API
|
* @param[in] desc. Descriptor with queue properties filled-in
|
* @return 0 - Successful init of local queue instance.
|
* @return -EINVAL - Invalid argument.
|
*
|
*/
|
int ia_css_queue_local_init(
|
ia_css_queue_t *qhandle,
|
ia_css_queue_local_t *desc);
|
|
/* @brief Initialize a remote queue instance
|
*
|
* @param[out] qhandle. Handle to queue instance for use with API
|
* @param[in] desc. Descriptor with queue properties filled-in
|
* @return 0 - Successful init of remote queue instance.
|
* @return -EINVAL - Invalid argument.
|
*/
|
int ia_css_queue_remote_init(
|
ia_css_queue_t *qhandle,
|
ia_css_queue_remote_t *desc);
|
|
/* @brief Uninitialize a queue instance
|
*
|
* @param[in] qhandle. Handle to queue instance
|
* @return 0 - Successful uninit.
|
*
|
*/
|
int ia_css_queue_uninit(
|
ia_css_queue_t *qhandle);
|
|
/* @brief Enqueue an item in the queue instance
|
*
|
* @param[in] qhandle. Handle to queue instance
|
* @param[in] item. Object to be enqueued.
|
* @return 0 - Successful enqueue.
|
* @return -EINVAL - Invalid argument.
|
* @return -ENOBUFS - Queue is full.
|
*
|
*/
|
int ia_css_queue_enqueue(
|
ia_css_queue_t *qhandle,
|
uint32_t item);
|
|
/* @brief Dequeue an item from the queue instance
|
*
|
* @param[in] qhandle. Handle to queue instance
|
* @param[out] item. Object to be dequeued into this item.
|
|
* @return 0 - Successful dequeue.
|
* @return -EINVAL - Invalid argument.
|
* @return -ENODATA - Queue is empty.
|
*
|
*/
|
int ia_css_queue_dequeue(
|
ia_css_queue_t *qhandle,
|
uint32_t *item);
|
|
/* @brief Check if the queue is empty
|
*
|
* @param[in] qhandle. Handle to queue instance
|
* @param[in] is_empty True if empty, False if not.
|
* @return 0 - Successful access state.
|
* @return -EINVAL - Invalid argument.
|
* @return -ENOSYS - Function not implemented.
|
*
|
*/
|
int ia_css_queue_is_empty(
|
ia_css_queue_t *qhandle,
|
bool *is_empty);
|
|
/* @brief Check if the queue is full
|
*
|
* @param[in] qhandle. Handle to queue instance
|
* @param[in] is_full True if Full, False if not.
|
* @return 0 - Successfully access state.
|
* @return -EINVAL - Invalid argument.
|
* @return -ENOSYS - Function not implemented.
|
*
|
*/
|
int ia_css_queue_is_full(
|
ia_css_queue_t *qhandle,
|
bool *is_full);
|
|
/* @brief Get used space in the queue
|
*
|
* @param[in] qhandle. Handle to queue instance
|
* @param[in] size Number of available elements in the queue
|
* @return 0 - Successfully access state.
|
* @return -EINVAL - Invalid argument.
|
*
|
*/
|
int ia_css_queue_get_used_space(
|
ia_css_queue_t *qhandle,
|
uint32_t *size);
|
|
/* @brief Get free space in the queue
|
*
|
* @param[in] qhandle. Handle to queue instance
|
* @param[in] size Number of free elements in the queue
|
* @return 0 - Successfully access state.
|
* @return -EINVAL - Invalid argument.
|
*
|
*/
|
int ia_css_queue_get_free_space(
|
ia_css_queue_t *qhandle,
|
uint32_t *size);
|
|
/* @brief Peek at an element in the queue
|
*
|
* @param[in] qhandle. Handle to queue instance
|
* @param[in] offset Offset of element to peek,
|
* starting from head of queue
|
* @param[in] element Value of element returned
|
* @return 0 - Successfully access state.
|
* @return -EINVAL - Invalid argument.
|
*
|
*/
|
int ia_css_queue_peek(
|
ia_css_queue_t *qhandle,
|
u32 offset,
|
uint32_t *element);
|
|
/* @brief Get the usable size for the queue
|
*
|
* @param[in] qhandle. Handle to queue instance
|
* @param[out] size Size value to be returned here.
|
* @return 0 - Successful get size.
|
* @return -EINVAL - Invalid argument.
|
* @return -ENOSYS - Function not implemented.
|
*
|
*/
|
int ia_css_queue_get_size(
|
ia_css_queue_t *qhandle,
|
uint32_t *size);
|
|
#endif /* __IA_CSS_QUEUE_H */
|