| /* SPDX-License-Identifier: GPL-2.0 */ |
| /* |
| * Support for Intel Camera Imaging ISP subsystem. |
| * Copyright (c) 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_CIRCBUF_COMM_H |
| #define _IA_CSS_CIRCBUF_COMM_H |
| |
| #include <type_support.h> /* uint8_t, uint32_t */ |
| |
| #define IA_CSS_CIRCBUF_PADDING 1 /* The circular buffer is implemented in lock-less manner, wherein |
| * the head and tail can advance independently without any locks. |
| * But to achieve this, an extra buffer element is required to detect |
| * queue full & empty conditions, wherein the tail trails the head for |
| * full and is equal to head for empty condition. This causes 1 buffer |
| * not being available for use. |
| */ |
| |
| /**************************************************************** |
| * |
| * Portable Data structures |
| * |
| ****************************************************************/ |
| /** |
| * @brief Data structure for the circular descriptor. |
| */ |
| typedef struct ia_css_circbuf_desc_s ia_css_circbuf_desc_t; |
| struct ia_css_circbuf_desc_s { |
| u8 size; /* the maximum number of elements*/ |
| u8 step; /* number of bytes per element */ |
| u8 start; /* index of the oldest element */ |
| u8 end; /* index at which to write the new element */ |
| }; |
| |
| #define SIZE_OF_IA_CSS_CIRCBUF_DESC_S_STRUCT \ |
| (4 * sizeof(uint8_t)) |
| |
| /** |
| * @brief Data structure for the circular buffer element. |
| */ |
| typedef struct ia_css_circbuf_elem_s ia_css_circbuf_elem_t; |
| struct ia_css_circbuf_elem_s { |
| u32 val; /* the value stored in the element */ |
| }; |
| |
| #define SIZE_OF_IA_CSS_CIRCBUF_ELEM_S_STRUCT \ |
| (sizeof(uint32_t)) |
| |
| #endif /*_IA_CSS_CIRCBUF_COMM_H*/ |