1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * Support for Intel Camera Imaging ISP subsystem.
4 * Copyright (c) 2015, Intel Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms and conditions of the GNU General Public License,
8 * version 2, as published by the Free Software Foundation.
9 *
10 * This program is distributed in the hope it will be useful, but WITHOUT
11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
13 * more details.
14 */
15
16#ifndef _IA_CSS_CIRCBUF_COMM_H
17#define _IA_CSS_CIRCBUF_COMM_H
18
19#include <type_support.h>  /* uint8_t, uint32_t */
20
21#define IA_CSS_CIRCBUF_PADDING 1 /* The circular buffer is implemented in lock-less manner, wherein
22				   * the head and tail can advance independently without any locks.
23				   * But to achieve this, an extra buffer element is required to detect
24				   * queue full & empty conditions, wherein the tail trails the head for
25				   * full and is equal to head for empty condition. This causes 1 buffer
26				   * not being available for use.
27				   */
28
29/****************************************************************
30 *
31 * Portable Data structures
32 *
33 ****************************************************************/
34/**
35 * @brief Data structure for the circular descriptor.
36 */
37typedef struct ia_css_circbuf_desc_s ia_css_circbuf_desc_t;
38struct ia_css_circbuf_desc_s {
39	u8 size;	/* the maximum number of elements*/
40	u8 step;   /* number of bytes per element */
41	u8 start;	/* index of the oldest element */
42	u8 end;	/* index at which to write the new element */
43};
44
45#define SIZE_OF_IA_CSS_CIRCBUF_DESC_S_STRUCT				\
46	(4 * sizeof(uint8_t))
47
48/**
49 * @brief Data structure for the circular buffer element.
50 */
51typedef struct ia_css_circbuf_elem_s ia_css_circbuf_elem_t;
52struct ia_css_circbuf_elem_s {
53	u32 val;	/* the value stored in the element */
54};
55
56#define SIZE_OF_IA_CSS_CIRCBUF_ELEM_S_STRUCT				\
57	(sizeof(uint32_t))
58
59#endif /*_IA_CSS_CIRCBUF_COMM_H*/
60