|  | /* 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];                           \ | 
|  | }; |