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