00001 #ifndef _XENO_NUCLEUS_SYS_PPD_H
00002 #define _XENO_NUCLEUS_SYS_PPD_H
00003
00004 #include <nucleus/ppd.h>
00005 #include <nucleus/heap.h>
00006
00007 struct xnsys_ppd {
00008 xnshadow_ppd_t ppd;
00009 xnheap_t sem_heap;
00010 #ifdef XNARCH_HAVE_MAYDAY
00011 unsigned long mayday_addr;
00012 #endif
00013 xnarch_atomic_t refcnt;
00014 #define ppd2sys(addr) container_of(addr, struct xnsys_ppd, ppd)
00015 };
00016
00017 extern struct xnsys_ppd __xnsys_global_ppd;
00018
00019 #ifdef CONFIG_XENO_OPT_PERVASIVE
00020
00021 static inline struct xnsys_ppd *xnsys_ppd_get(int global)
00022 {
00023 xnshadow_ppd_t *ppd;
00024
00025 if (global || !(ppd = xnshadow_ppd_get(0)))
00026 return &__xnsys_global_ppd;
00027
00028 return ppd2sys(ppd);
00029 }
00030
00031 #else
00032
00033 static inline struct xnsys_ppd *xnsys_ppd_get(int global)
00034 {
00035 return &__xnsys_global_ppd;
00036 }
00037
00038 #endif
00039
00040 #endif