blob: a461b0ed03f1e693e40f7c29619e207ad49102d5 [file] [log] [blame]
/* 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 */