#ifndef _GEMINI_IPMVAR_H_
#define _GEMINI_IPMVAR_H_
typedef uint32_t ipmqindex_t;
#define NIPMDESC 255
#define IPMQPADSZ (4096 - ((sizeof(ipm_desc_t) * NIPMDESC) + (2 * sizeof(ipmqindex_t))))
typedef struct ipm_queue {
ipm_desc_t ipm_desc[NIPMDESC];
volatile ipmqindex_t ix_write;
volatile ipmqindex_t ix_read;
uint8_t pad[IPMQPADSZ];
} ipm_queue_t;
static inline ipmqindex_t
ipmqnext(ipmqindex_t ix)
{
if (++ix >= NIPMDESC)
ix = 0;
return ix;
}
static inline bool
ipmqisempty(ipmqindex_t ixr, ipmqindex_t ixw)
{
if (ixr == ixw)
return TRUE;
return FALSE;
}
static inline bool
ipmqisfull(ipmqindex_t ixr, ipmqindex_t ixw)
{
if (ipmqnext(ixw) == ixr)
return TRUE;
return FALSE;
}
#endif