/* * 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 #include #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 */