blob: 2a963035649c41d9800bca73dced84bbb29ec4b2 [file] [log] [blame]
/* 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]; \
};