/* Copyright (c) 2010 The Regents of the University of California
 * Barret Rhoden <brho@cs.berkeley.edu>
 * See LICENSE for details.
 *
 * Struct for the BCQ.  Needs to be in its own file so glibc doesn't try to
 * include any of the atomics needed for the actual BCQ operations.  */

#pragma once

#include <ros/common.h>

struct bcq_header {
	uint32_t prod_idx;	/* next to be produced in */
	uint32_t cons_pub_idx;	/* last completely consumed */
	uint32_t cons_pvt_idx;	/* last a consumer has dibs on */
};

#define DEFINE_BCQ_TYPES(__name, __elem_t, __num_elems)                        \
                                                                               \
/* Wrapper, per element, with the consumption bool */                          \
struct __name##_bcq_wrap {                                                     \
	__elem_t elem;                                                         \
	bool rdy_for_cons;	/* elem is ready for consumption */            \
};                                                                             \
                                                                               \
/* The actual BC queue */                                                      \
struct __name##_bcq {                                                          \
	struct bcq_header hdr;                                                 \
	struct __name##_bcq_wrap wraps[__num_elems];                           \
};
