00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046 #ifndef _RTAI_NUCLEUS_SHADOW_H
00047 #define _RTAI_NUCLEUS_SHADOW_H
00048
00049 #include <nucleus/asm/syscall.h>
00050 #include <nucleus/asm/atomic.h>
00051
00052 #define XENOMAI_MUX_NR 16
00053
00054 #define XNSHADOW_MAXRQ 16
00055
00056
00057 #define XNSHADOW_CLIENT_ATTACH 0
00058 #define XNSHADOW_CLIENT_DETACH 1
00059
00060 #ifdef __cplusplus
00061 extern "C" {
00062 #endif
00063
00064 struct xnthread;
00065 struct xnmutex;
00066 struct pt_regs;
00067 struct timespec;
00068 struct timeval;
00069
00070 struct xnskentry {
00071
00072 const char *name;
00073 unsigned magic;
00074 int nrcalls;
00075 atomic_counter_t refcnt;
00076 int (*eventcb)(int);
00077 xnsysent_t *systab;
00078 };
00079
00080 int xnshadow_mount(void);
00081
00082 void xnshadow_cleanup(void);
00083
00084 void xnshadow_grab_events(void);
00085
00086 void xnshadow_release_events(void);
00087
00088 void xnshadow_map(struct xnthread *thread,
00089 pid_t syncpid,
00090 int __user *u_syncp);
00091
00092 void xnshadow_unmap(struct xnthread *thread);
00093
00094 void xnshadow_relax(void);
00095
00096 void xnshadow_harden(void);
00097
00098 void xnshadow_renice(struct xnthread *thread);
00099
00100 int xnshadow_wait_barrier(struct pt_regs *regs);
00101
00102 void xnshadow_start(struct xnthread *thread,
00103 void (*uentry)(void *cookie),
00104 void *ucookie);
00105
00106 void xnshadow_sync_post(pid_t syncpid,
00107 int *u_syncp,
00108 int err);
00109
00110 void xnshadow_exit(void);
00111
00112 int xnshadow_register_skin(const char *name,
00113 unsigned magic,
00114 int nrcalls,
00115 xnsysent_t *systab,
00116 int (*eventcb)(int event));
00117
00118 int xnshadow_unregister_skin(int muxid);
00119
00120 unsigned long long xnshadow_ts2ticks(const struct timespec *v);
00121
00122 void xnshadow_ticks2ts(unsigned long long,
00123 struct timespec *v);
00124
00125 unsigned long long xnshadow_tv2ticks(const struct timeval *v);
00126
00127 void xnshadow_ticks2tv(unsigned long long ticks,
00128 struct timeval *v);
00129
00130 extern struct xnskentry muxtable[];
00131
00132 #ifdef __cplusplus
00133 }
00134 #endif
00135
00136 #endif