1 1.1.6.2 skrll /* $NetBSD: gemini_ipmvar.h,v 1.1.6.2 2009/01/19 13:15:58 skrll Exp $ */ 2 1.1.6.2 skrll 3 1.1.6.2 skrll #ifndef _GEMINI_IPMVAR_H_ 4 1.1.6.2 skrll #define _GEMINI_IPMVAR_H_ 5 1.1.6.2 skrll 6 1.1.6.2 skrll /* 7 1.1.6.2 skrll * message queue 8 1.1.6.2 skrll * 9 1.1.6.2 skrll * - the queue gets located in memory shared between cores 10 1.1.6.2 skrll * - is mapped non-cached so SW coherency is not required. 11 1.1.6.2 skrll * - be sure ipm_queue_t starts on 32 bit (min) boundary to align descriptors 12 1.1.6.2 skrll * - note that indicies are 8 bit and NIPMDESC < (1<<8) 13 1.1.6.2 skrll * be sure to adjust typedef if size is increased 14 1.1.6.2 skrll * - current sizes, typedef, and padding make sizeof(ipm_queue_t) == 4096 15 1.1.6.2 skrll */ 16 1.1.6.2 skrll typedef uint32_t ipmqindex_t; 17 1.1.6.2 skrll #define NIPMDESC 255 18 1.1.6.2 skrll #define IPMQPADSZ (4096 - ((sizeof(ipm_desc_t) * NIPMDESC) + (2 * sizeof(ipmqindex_t)))) 19 1.1.6.2 skrll typedef struct ipm_queue { 20 1.1.6.2 skrll ipm_desc_t ipm_desc[NIPMDESC]; 21 1.1.6.2 skrll volatile ipmqindex_t ix_write; /* writer increments and inserts here */ 22 1.1.6.2 skrll volatile ipmqindex_t ix_read; /* reader extracts here and increments */ 23 1.1.6.2 skrll uint8_t pad[IPMQPADSZ]; 24 1.1.6.2 skrll } ipm_queue_t; 25 1.1.6.2 skrll 26 1.1.6.2 skrll static inline ipmqindex_t 27 1.1.6.2 skrll ipmqnext(ipmqindex_t ix) 28 1.1.6.2 skrll { 29 1.1.6.2 skrll if (++ix >= NIPMDESC) 30 1.1.6.2 skrll ix = 0; 31 1.1.6.2 skrll return ix; 32 1.1.6.2 skrll } 33 1.1.6.2 skrll 34 1.1.6.2 skrll static inline bool 35 1.1.6.2 skrll ipmqisempty(ipmqindex_t ixr, ipmqindex_t ixw) 36 1.1.6.2 skrll { 37 1.1.6.2 skrll if (ixr == ixw) 38 1.1.6.2 skrll return TRUE; 39 1.1.6.2 skrll return FALSE; 40 1.1.6.2 skrll } 41 1.1.6.2 skrll 42 1.1.6.2 skrll static inline bool 43 1.1.6.2 skrll ipmqisfull(ipmqindex_t ixr, ipmqindex_t ixw) 44 1.1.6.2 skrll { 45 1.1.6.2 skrll if (ipmqnext(ixw) == ixr) 46 1.1.6.2 skrll return TRUE; 47 1.1.6.2 skrll return FALSE; 48 1.1.6.2 skrll } 49 1.1.6.2 skrll 50 1.1.6.2 skrll #endif /* _GEMINI_IPMVAR_H_ */ 51