1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Support for Intel Camera Imaging ISP subsystem. 4 * Copyright (c) 2010 - 2015, Intel Corporation. 5 */ 6 7 #ifndef __IA_CSS_QUEUE_H 8 #define __IA_CSS_QUEUE_H 9 10 #include <platform_support.h> 11 #include <type_support.h> 12 13 #include "ia_css_queue_comm.h" 14 #include "../src/queue_access.h" 15 16 /* Local Queue object descriptor */ 17 struct ia_css_queue_local { 18 ia_css_circbuf_desc_t *cb_desc; /*Circbuf desc for local queues*/ 19 ia_css_circbuf_elem_t *cb_elems; /*Circbuf elements*/ 20 }; 21 22 typedef struct ia_css_queue_local ia_css_queue_local_t; 23 24 /* Handle for queue object*/ 25 typedef struct ia_css_queue ia_css_queue_t; 26 27 /***************************************************************************** 28 * Queue Public APIs 29 *****************************************************************************/ 30 /* @brief Initialize a local queue instance. 31 * 32 * @param[out] qhandle. Handle to queue instance for use with API 33 * @param[in] desc. Descriptor with queue properties filled-in 34 * @return 0 - Successful init of local queue instance. 35 * @return -EINVAL - Invalid argument. 36 * 37 */ 38 int ia_css_queue_local_init( 39 ia_css_queue_t *qhandle, 40 ia_css_queue_local_t *desc); 41 42 /* @brief Initialize a remote queue instance 43 * 44 * @param[out] qhandle. Handle to queue instance for use with API 45 * @param[in] desc. Descriptor with queue properties filled-in 46 * @return 0 - Successful init of remote queue instance. 47 * @return -EINVAL - Invalid argument. 48 */ 49 int ia_css_queue_remote_init( 50 ia_css_queue_t *qhandle, 51 ia_css_queue_remote_t *desc); 52 53 /* @brief Uninitialize a queue instance 54 * 55 * @param[in] qhandle. Handle to queue instance 56 * @return 0 - Successful uninit. 57 * 58 */ 59 int ia_css_queue_uninit( 60 ia_css_queue_t *qhandle); 61 62 /* @brief Enqueue an item in the queue instance 63 * 64 * @param[in] qhandle. Handle to queue instance 65 * @param[in] item. Object to be enqueued. 66 * @return 0 - Successful enqueue. 67 * @return -EINVAL - Invalid argument. 68 * @return -ENOBUFS - Queue is full. 69 * 70 */ 71 int ia_css_queue_enqueue( 72 ia_css_queue_t *qhandle, 73 uint32_t item); 74 75 /* @brief Dequeue an item from the queue instance 76 * 77 * @param[in] qhandle. Handle to queue instance 78 * @param[out] item. Object to be dequeued into this item. 79 80 * @return 0 - Successful dequeue. 81 * @return -EINVAL - Invalid argument. 82 * @return -ENODATA - Queue is empty. 83 * 84 */ 85 int ia_css_queue_dequeue( 86 ia_css_queue_t *qhandle, 87 uint32_t *item); 88 89 /* @brief Check if the queue is empty 90 * 91 * @param[in] qhandle. Handle to queue instance 92 * @param[in] is_empty True if empty, False if not. 93 * @return 0 - Successful access state. 94 * @return -EINVAL - Invalid argument. 95 * @return -ENOSYS - Function not implemented. 96 * 97 */ 98 int ia_css_queue_is_empty( 99 ia_css_queue_t *qhandle, 100 bool *is_empty); 101 102 /* @brief Check if the queue is full 103 * 104 * @param[in] qhandle. Handle to queue instance 105 * @param[in] is_full True if Full, False if not. 106 * @return 0 - Successfully access state. 107 * @return -EINVAL - Invalid argument. 108 * @return -ENOSYS - Function not implemented. 109 * 110 */ 111 int ia_css_queue_is_full( 112 ia_css_queue_t *qhandle, 113 bool *is_full); 114 115 /* @brief Get used space in the queue 116 * 117 * @param[in] qhandle. Handle to queue instance 118 * @param[in] size Number of available elements in the queue 119 * @return 0 - Successfully access state. 120 * @return -EINVAL - Invalid argument. 121 * 122 */ 123 int ia_css_queue_get_used_space( 124 ia_css_queue_t *qhandle, 125 uint32_t *size); 126 127 /* @brief Get free space in the queue 128 * 129 * @param[in] qhandle. Handle to queue instance 130 * @param[in] size Number of free elements in the queue 131 * @return 0 - Successfully access state. 132 * @return -EINVAL - Invalid argument. 133 * 134 */ 135 int ia_css_queue_get_free_space( 136 ia_css_queue_t *qhandle, 137 uint32_t *size); 138 139 /* @brief Peek at an element in the queue 140 * 141 * @param[in] qhandle. Handle to queue instance 142 * @param[in] offset Offset of element to peek, 143 * starting from head of queue 144 * @param[in] element Value of element returned 145 * @return 0 - Successfully access state. 146 * @return -EINVAL - Invalid argument. 147 * 148 */ 149 int ia_css_queue_peek( 150 ia_css_queue_t *qhandle, 151 u32 offset, 152 uint32_t *element); 153 154 /* @brief Get the usable size for the queue 155 * 156 * @param[in] qhandle. Handle to queue instance 157 * @param[out] size Size value to be returned here. 158 * @return 0 - Successful get size. 159 * @return -EINVAL - Invalid argument. 160 * @return -ENOSYS - Function not implemented. 161 * 162 */ 163 int ia_css_queue_get_size( 164 ia_css_queue_t *qhandle, 165 uint32_t *size); 166 167 #endif /* __IA_CSS_QUEUE_H */ 168