1f5fbb83fSMauro Carvalho Chehab /* SPDX-License-Identifier: GPL-2.0 */ 29d4fa1a1SMauro Carvalho Chehab /* 39d4fa1a1SMauro Carvalho Chehab * Support for Intel Camera Imaging ISP subsystem. 49d4fa1a1SMauro Carvalho Chehab * Copyright (c) 2015, Intel Corporation. 59d4fa1a1SMauro Carvalho Chehab * 69d4fa1a1SMauro Carvalho Chehab * This program is free software; you can redistribute it and/or modify it 79d4fa1a1SMauro Carvalho Chehab * under the terms and conditions of the GNU General Public License, 89d4fa1a1SMauro Carvalho Chehab * version 2, as published by the Free Software Foundation. 99d4fa1a1SMauro Carvalho Chehab * 109d4fa1a1SMauro Carvalho Chehab * This program is distributed in the hope it will be useful, but WITHOUT 119d4fa1a1SMauro Carvalho Chehab * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 129d4fa1a1SMauro Carvalho Chehab * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 139d4fa1a1SMauro Carvalho Chehab * more details. 149d4fa1a1SMauro Carvalho Chehab */ 159d4fa1a1SMauro Carvalho Chehab 169d4fa1a1SMauro Carvalho Chehab #ifndef _IA_CSS_CIRCBUF_COMM_H 179d4fa1a1SMauro Carvalho Chehab #define _IA_CSS_CIRCBUF_COMM_H 189d4fa1a1SMauro Carvalho Chehab 199d4fa1a1SMauro Carvalho Chehab #include <type_support.h> /* uint8_t, uint32_t */ 209d4fa1a1SMauro Carvalho Chehab 219d4fa1a1SMauro Carvalho Chehab #define IA_CSS_CIRCBUF_PADDING 1 /* The circular buffer is implemented in lock-less manner, wherein 229d4fa1a1SMauro Carvalho Chehab * the head and tail can advance independently without any locks. 239d4fa1a1SMauro Carvalho Chehab * But to achieve this, an extra buffer element is required to detect 249d4fa1a1SMauro Carvalho Chehab * queue full & empty conditions, wherein the tail trails the head for 259d4fa1a1SMauro Carvalho Chehab * full and is equal to head for empty condition. This causes 1 buffer 269d4fa1a1SMauro Carvalho Chehab * not being available for use. 279d4fa1a1SMauro Carvalho Chehab */ 289d4fa1a1SMauro Carvalho Chehab 299d4fa1a1SMauro Carvalho Chehab /**************************************************************** 309d4fa1a1SMauro Carvalho Chehab * 319d4fa1a1SMauro Carvalho Chehab * Portable Data structures 329d4fa1a1SMauro Carvalho Chehab * 339d4fa1a1SMauro Carvalho Chehab ****************************************************************/ 349d4fa1a1SMauro Carvalho Chehab /** 359d4fa1a1SMauro Carvalho Chehab * @brief Data structure for the circular descriptor. 369d4fa1a1SMauro Carvalho Chehab */ 379d4fa1a1SMauro Carvalho Chehab typedef struct ia_css_circbuf_desc_s ia_css_circbuf_desc_t; 389d4fa1a1SMauro Carvalho Chehab struct ia_css_circbuf_desc_s { 399d4fa1a1SMauro Carvalho Chehab u8 size; /* the maximum number of elements*/ 409d4fa1a1SMauro Carvalho Chehab u8 step; /* number of bytes per element */ 419d4fa1a1SMauro Carvalho Chehab u8 start; /* index of the oldest element */ 429d4fa1a1SMauro Carvalho Chehab u8 end; /* index at which to write the new element */ 439d4fa1a1SMauro Carvalho Chehab }; 449d4fa1a1SMauro Carvalho Chehab 459d4fa1a1SMauro Carvalho Chehab #define SIZE_OF_IA_CSS_CIRCBUF_DESC_S_STRUCT \ 469d4fa1a1SMauro Carvalho Chehab (4 * sizeof(uint8_t)) 479d4fa1a1SMauro Carvalho Chehab 489d4fa1a1SMauro Carvalho Chehab /** 499d4fa1a1SMauro Carvalho Chehab * @brief Data structure for the circular buffer element. 509d4fa1a1SMauro Carvalho Chehab */ 519d4fa1a1SMauro Carvalho Chehab typedef struct ia_css_circbuf_elem_s ia_css_circbuf_elem_t; 529d4fa1a1SMauro Carvalho Chehab struct ia_css_circbuf_elem_s { 539d4fa1a1SMauro Carvalho Chehab u32 val; /* the value stored in the element */ 549d4fa1a1SMauro Carvalho Chehab }; 559d4fa1a1SMauro Carvalho Chehab 569d4fa1a1SMauro Carvalho Chehab #define SIZE_OF_IA_CSS_CIRCBUF_ELEM_S_STRUCT \ 579d4fa1a1SMauro Carvalho Chehab (sizeof(uint32_t)) 589d4fa1a1SMauro Carvalho Chehab 599d4fa1a1SMauro Carvalho Chehab #endif /*_IA_CSS_CIRCBUF_COMM_H*/ 60