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 * This program is free software; you can redistribute it and/or modify it 7 * under the terms and conditions of the GNU General Public License, 8 * version 2, as published by the Free Software Foundation. 9 * 10 * This program is distributed in the hope it will be useful, but WITHOUT 11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 13 * more details. 14 */ 15 16 #ifndef _IA_CSS_BUFQ_H 17 #define _IA_CSS_BUFQ_H 18 19 #include <type_support.h> 20 #include "ia_css_bufq_comm.h" 21 #include "ia_css_buffer.h" 22 #include "ia_css_err.h" 23 #define BUFQ_EVENT_SIZE 4 24 25 /** 26 * @brief Query the internal frame ID. 27 * 28 * @param[in] key The query key. 29 * @param[out] val The query value. 30 * 31 * @return 32 * true, if the query succeeds; 33 * false, if the query fails. 34 */ 35 bool ia_css_query_internal_queue_id( 36 enum ia_css_buffer_type buf_type, 37 unsigned int thread_id, 38 enum sh_css_queue_id *val 39 ); 40 41 /** 42 * @brief Map buffer type to a internal queue id. 43 * 44 * @param[in] thread id Thread in which the buffer type has to be mapped or unmapped 45 * @param[in] buf_type buffer type. 46 * @param[in] map boolean flag to specify map or unmap 47 * @return none 48 */ 49 void ia_css_queue_map( 50 unsigned int thread_id, 51 enum ia_css_buffer_type buf_type, 52 bool map 53 ); 54 55 /** 56 * @brief Initialize buffer type to a queue id mapping 57 * @return none 58 */ 59 void ia_css_queue_map_init(void); 60 61 /** 62 * @brief initializes bufq module 63 * It create instances of 64 * -host to SP buffer queue which is a list with predefined size, 65 * MxN queues where M is the number threads and N is the number queues per thread 66 *-SP to host buffer queue , is a list with N queues 67 *-host to SP event communication queue 68 * -SP to host event communication queue 69 * -queue for tagger commands 70 * @return none 71 */ 72 void ia_css_bufq_init(void); 73 74 /** 75 * @brief Enqueues an item into host to SP buffer queue 76 * 77 * @param thread_index[in] Thread in which the item to be enqueued 78 * 79 * @param queue_id[in] Index of the queue in the specified thread 80 * @param item[in] Object to enqueue. 81 * @return 0 or error code upon error. 82 * 83 */ 84 int ia_css_bufq_enqueue_buffer( 85 int thread_index, 86 int queue_id, 87 uint32_t item); 88 89 /** 90 * @brief Dequeues an item from SP to host buffer queue. 91 * 92 * @param queue_id[in] Specifies the index of the queue in the list where 93 * the item has to be read. 94 * @paramitem [out] Object to be dequeued into this item. 95 * @return 0 or error code upon error. 96 * 97 */ 98 int ia_css_bufq_dequeue_buffer( 99 int queue_id, 100 uint32_t *item); 101 102 /** 103 * @brief Enqueue an event item into host to SP communication event queue. 104 * 105 * @param[in] evt_id The event ID. 106 * @param[in] evt_payload_0 The event payload. 107 * @param[in] evt_payload_1 The event payload. 108 * @param[in] evt_payload_2 The event payload. 109 * @return 0 or error code upon error. 110 * 111 */ 112 int ia_css_bufq_enqueue_psys_event( 113 u8 evt_id, 114 u8 evt_payload_0, 115 u8 evt_payload_1, 116 uint8_t evt_payload_2 117 ); 118 119 /** 120 * @brief Dequeue an item from SP to host communication event queue. 121 * 122 * @param item Object to be dequeued into this item. 123 * @return 0 or error code upon error. 124 * 125 */ 126 int ia_css_bufq_dequeue_psys_event( 127 u8 item[BUFQ_EVENT_SIZE] 128 129 ); 130 131 /** 132 * @brief Enqueue an event item into host to SP EOF event queue. 133 * 134 * @param[in] evt_id The event ID. 135 * @return 0 or error code upon error. 136 * 137 */ 138 int ia_css_bufq_enqueue_isys_event( 139 uint8_t evt_id); 140 141 /** 142 * @brief Dequeue an item from SP to host communication EOF event queue. 143 144 * 145 * @param item Object to be dequeued into this item. 146 * @return 0 or error code upon error. 147 * 148 */ 149 int ia_css_bufq_dequeue_isys_event( 150 u8 item[BUFQ_EVENT_SIZE]); 151 152 /** 153 * @brief Enqueue a tagger command item into tagger command queue.. 154 * 155 * @param item Object to be enqueue. 156 * @return 0 or error code upon error. 157 * 158 */ 159 int ia_css_bufq_enqueue_tag_cmd( 160 uint32_t item); 161 162 /** 163 * @brief Uninitializes bufq module. 164 * 165 * @return 0 or error code upon error. 166 * 167 */ 168 int ia_css_bufq_deinit(void); 169 170 /** 171 * @brief Dump queue states 172 * 173 * @return None 174 * 175 */ 176 void ia_css_bufq_dump_queue_info(void); 177 178 #endif /* _IA_CSS_BUFQ_H */ 179