| /* 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 __QUEUE_ACCESS_H |
| #define __QUEUE_ACCESS_H |
| |
| #include <linux/errno.h> |
| |
| #include <type_support.h> |
| #include <ia_css_queue_comm.h> |
| #include <ia_css_circbuf.h> |
| |
| #define QUEUE_IGNORE_START_FLAG 0x0001 |
| #define QUEUE_IGNORE_END_FLAG 0x0002 |
| #define QUEUE_IGNORE_SIZE_FLAG 0x0004 |
| #define QUEUE_IGNORE_STEP_FLAG 0x0008 |
| #define QUEUE_IGNORE_DESC_FLAGS_MAX 0x000f |
| |
| #define QUEUE_IGNORE_SIZE_START_STEP_FLAGS \ |
| (QUEUE_IGNORE_SIZE_FLAG | \ |
| QUEUE_IGNORE_START_FLAG | \ |
| QUEUE_IGNORE_STEP_FLAG) |
| |
| #define QUEUE_IGNORE_SIZE_END_STEP_FLAGS \ |
| (QUEUE_IGNORE_SIZE_FLAG | \ |
| QUEUE_IGNORE_END_FLAG | \ |
| QUEUE_IGNORE_STEP_FLAG) |
| |
| #define QUEUE_IGNORE_START_END_STEP_FLAGS \ |
| (QUEUE_IGNORE_START_FLAG | \ |
| QUEUE_IGNORE_END_FLAG | \ |
| QUEUE_IGNORE_STEP_FLAG) |
| |
| #define QUEUE_CB_DESC_INIT(cb_desc) \ |
| do { \ |
| (cb_desc)->size = 0; \ |
| (cb_desc)->step = 0; \ |
| (cb_desc)->start = 0; \ |
| (cb_desc)->end = 0; \ |
| } while (0) |
| |
| struct ia_css_queue { |
| u8 type; /* Specify remote/local type of access */ |
| u8 location; /* Cell location for queue */ |
| u8 proc_id; /* Processor id for queue access */ |
| union { |
| ia_css_circbuf_t cb_local; |
| struct { |
| u32 cb_desc_addr; /*Circbuf desc address for remote queues*/ |
| u32 cb_elems_addr; /*Circbuf elements addr for remote queue*/ |
| } remote; |
| } desc; |
| }; |
| |
| int ia_css_queue_load( |
| struct ia_css_queue *rdesc, |
| ia_css_circbuf_desc_t *cb_desc, |
| uint32_t ignore_desc_flags); |
| |
| int ia_css_queue_store( |
| struct ia_css_queue *rdesc, |
| ia_css_circbuf_desc_t *cb_desc, |
| uint32_t ignore_desc_flags); |
| |
| int ia_css_queue_item_load( |
| struct ia_css_queue *rdesc, |
| u8 position, |
| ia_css_circbuf_elem_t *item); |
| |
| int ia_css_queue_item_store( |
| struct ia_css_queue *rdesc, |
| u8 position, |
| ia_css_circbuf_elem_t *item); |
| |
| #endif /* __QUEUE_ACCESS_H */ |