static inline unsigned int
-ul_dqfifo_base_loc2idx(ul_dqfifo_base_t *dqf, ul_dqfifo_loc_t loc)
+ul_dqfifo_base_loc2idx(const ul_dqfifo_base_t *dqf, ul_dqfifo_loc_t loc)
{
return loc & dqf->locmask;
}
static inline unsigned int
-ul_dqfifo_base_is_full(ul_dqfifo_base_t *dqf)
+ul_dqfifo_base_is_full(const ul_dqfifo_base_t *dqf)
{
ul_dqfifo_loc_t locx = dqf->locin ^ dqf->locout;
return (locx && !(locx & dqf->locmask));
}
static inline unsigned int
-ul_dqfifo_base_is_empty(ul_dqfifo_base_t *dqf)
+ul_dqfifo_base_is_empty(const ul_dqfifo_base_t *dqf)
{
return (dqf->locin == dqf->locout);
}
} cust_prefix##_t; \
\
cust_static_inline unsigned int \
-cust_prefix##_loc2idx(cust_prefix##_t *cdqf, ul_dqfifo_loc_t loc) \
+cust_prefix##_loc2idx(const cust_prefix##_t *cdqf, ul_dqfifo_loc_t loc) \
{ \
return ul_dqfifo_base_loc2idx(&cdqf->dqf, loc); \
} \
\
cust_static_inline unsigned int \
-cust_prefix##_is_full(cust_prefix##_t *cdqf) \
+cust_prefix##_is_full(const cust_prefix##_t *cdqf) \
{ \
return ul_dqfifo_base_is_full(&cdqf->dqf); \
} \
\
cust_static_inline unsigned int \
-cust_prefix##_is_empty(cust_prefix##_t *cdqf) \
+cust_prefix##_is_empty(const cust_prefix##_t *cdqf) \
{ \
return ul_dqfifo_base_is_empty(&cdqf->dqf); \
} \
} \
\
cust_static_inline ul_dqfifo_loc_t \
-cust_prefix##_count(cust_prefix##_t *cdqf) \
+cust_prefix##_count(const cust_prefix##_t *cdqf) \
{ ul_dqfifo_loc_t loccount; \
cust_barrier; \
loccount = cdqf->dqf.locin - cdqf->dqf.locout; \
} \
\
cust_static_inline ul_dqfifo_loc_t \
-cust_prefix##_get_locin(cust_prefix##_t *cdqf) \
+cust_prefix##_get_locin(const cust_prefix##_t *cdqf) \
{ \
ul_dqfifo_loc_t loc; \
cust_barrier; \
} \
\
cust_static_inline ul_dqfifo_loc_t \
-cust_prefix##_get_locout(cust_prefix##_t *cdqf) \
+cust_prefix##_get_locout(const cust_prefix##_t *cdqf) \
{ \
ul_dqfifo_loc_t loc; \
cust_barrier; \
} \
\
cust_static_inline void \
+cust_prefix##_at_loc_no_check(const cust_prefix##_t *cdqf, cust_data_t *data, \
+ ul_dqfifo_loc_t loc) \
+{ \
+ *data = cdqf->buff[cust_prefix##_loc2idx(cdqf, loc)]; \
+} \
+\
+cust_static_inline int \
+cust_prefix##_at_loc(const cust_prefix##_t *cdqf, cust_data_t *data, \
+ ul_dqfifo_loc_t loc) \
+{ \
+ ul_dqfifo_loc_t locin = cdqf->dqf.locin; \
+ ul_dqfifo_loc_t locdiff; \
+ cust_barrier; \
+ cust_prefix##_at_loc_no_check(cdqf, data, loc); \
+ cust_barrier; \
+ locdiff = locin - loc; \
+ if (locdiff > cdqf->dqf.locmask + 1) \
+ return 0; \
+ locdiff = cdqf->dqf.locin - loc; \
+ if (locdiff > cdqf->dqf.locmask + 1) \
+ return 0; \
+ return 1; \
+} \
+\
+cust_static_inline void \
cust_prefix##_init(cust_prefix##_t *cdqf, cust_data_t *databuff, \
ul_dqfifo_loc_t locmask) \
{ \