Xenomai API  2.6.3
sys_ppd.h
1 #ifndef _XENO_NUCLEUS_SYS_PPD_H
2 #define _XENO_NUCLEUS_SYS_PPD_H
3 
4 #include <nucleus/ppd.h>
5 #include <nucleus/heap.h>
6 
7 struct xnsys_ppd {
8  xnshadow_ppd_t ppd;
9  xnheap_t sem_heap;
10 #ifdef XNARCH_HAVE_MAYDAY
11  unsigned long mayday_addr;
12 #endif
13  xnarch_atomic_t refcnt;
14 #define ppd2sys(addr) container_of(addr, struct xnsys_ppd, ppd)
15 };
16 
17 extern struct xnsys_ppd __xnsys_global_ppd;
18 
19 #ifdef CONFIG_XENO_OPT_PERVASIVE
20 
21 static inline struct xnsys_ppd *xnsys_ppd_get(int global)
22 {
23  xnshadow_ppd_t *ppd;
24 
25  if (global || !(ppd = xnshadow_ppd_get(0)))
26  return &__xnsys_global_ppd;
27 
28  return ppd2sys(ppd);
29 }
30 
31 #else /* !CONFIG_XENO_OPT_PERVASIVE */
32 
33 static inline struct xnsys_ppd *xnsys_ppd_get(int global)
34 {
35  return &__xnsys_global_ppd;
36 }
37 
38 #endif /* !CONFIG_XENO_OPT_PERVASIVE */
39 
40 #endif /* _XENO_NUCLEUS_SYS_PPD_H */