/* 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_BUFQ_H #define _IA_CSS_BUFQ_H #include <type_support.h> #include "ia_css_bufq_comm.h" #include "ia_css_buffer.h" #include "ia_css_err.h" #define BUFQ_EVENT_SIZE 4 /** * @brief Query the internal frame ID. * * @param[in] key The query key. * @param[out] val The query value. * * @return * true, if the query succeeds; * false, if the query fails. */ bool ia_css_query_internal_queue_id( enum ia_css_buffer_type buf_type, unsigned int thread_id, enum sh_css_queue_id *val ); /** * @brief Map buffer type to a internal queue id. * * @param[in] thread id Thread in which the buffer type has to be mapped or unmapped * @param[in] buf_type buffer type. * @param[in] map boolean flag to specify map or unmap * @return none */ void ia_css_queue_map( unsigned int thread_id, enum ia_css_buffer_type buf_type, bool map ); /** * @brief Initialize buffer type to a queue id mapping * @return none */ void ia_css_queue_map_init(void); /** * @brief initializes bufq module * It create instances of * -host to SP buffer queue which is a list with predefined size, * MxN queues where M is the number threads and N is the number queues per thread *-SP to host buffer queue , is a list with N queues *-host to SP event communication queue * -SP to host event communication queue * -queue for tagger commands * @return none */ void ia_css_bufq_init(void); /** * @brief Enqueues an item into host to SP buffer queue * * @param thread_index[in] Thread in which the item to be enqueued * * @param queue_id[in] Index of the queue in the specified thread * @param item[in] Object to enqueue. * @return 0 or error code upon error. * */ int ia_css_bufq_enqueue_buffer( int thread_index, int queue_id, uint32_t item); /** * @brief Dequeues an item from SP to host buffer queue. * * @param queue_id[in] Specifies the index of the queue in the list where * the item has to be read. * @paramitem [out] Object to be dequeued into this item. * @return 0 or error code upon error. * */ int ia_css_bufq_dequeue_buffer( int queue_id, uint32_t *item); /** * @brief Enqueue an event item into host to SP communication event queue. * * @param[in] evt_id The event ID. * @param[in] evt_payload_0 The event payload. * @param[in] evt_payload_1 The event payload. * @param[in] evt_payload_2 The event payload. * @return 0 or error code upon error. * */ int ia_css_bufq_enqueue_psys_event( u8 evt_id, u8 evt_payload_0, u8 evt_payload_1, uint8_t evt_payload_2 ); /** * @brief Dequeue an item from SP to host communication event queue. * * @param item Object to be dequeued into this item. * @return 0 or error code upon error. * */ int ia_css_bufq_dequeue_psys_event( u8 item[BUFQ_EVENT_SIZE] ); /** * @brief Enqueue an event item into host to SP EOF event queue. * * @param[in] evt_id The event ID. * @return 0 or error code upon error. * */ int ia_css_bufq_enqueue_isys_event( uint8_t evt_id); /** * @brief Dequeue an item from SP to host communication EOF event queue. * * @param item Object to be dequeued into this item. * @return 0 or error code upon error. * */ int ia_css_bufq_dequeue_isys_event( u8 item[BUFQ_EVENT_SIZE]); /** * @brief Enqueue a tagger command item into tagger command queue.. * * @param item Object to be enqueue. * @return 0 or error code upon error. * */ int ia_css_bufq_enqueue_tag_cmd( uint32_t item); /** * @brief Uninitializes bufq module. * * @return 0 or error code upon error. * */ int ia_css_bufq_deinit(void); /** * @brief Dump queue states * * @return None * */ void ia_css_bufq_dump_queue_info(void); #endif /* _IA_CSS_BUFQ_H */