00001
00006 #ifndef __L4_SYS__L4API_l4v2__SYSCALLS_GEN_H__
00007 #define __L4_SYS__L4API_l4v2__SYSCALLS_GEN_H__
00008
00009 #include <l4/sys/types.h>
00010 #include <l4/sys/kdebug.h>
00011 #include <l4/sys/utcb.h>
00012
00017 enum {
00018 L4_TASK_NEW_RAISE_EXCEPTION = 1UL << 30,
00019 L4_TASK_NEW_ALIEN = 1UL << 31,
00020 };
00021
00027 enum {
00028 L4_TASK_NEW_UTCB_ARGS = 1UL << 29,
00029 L4_TASK_NEW_NR_OF_FLAGS = 3,
00031 L4_TASK_NEW_FLAGS_MASK = ((1 << L4_TASK_NEW_NR_OF_FLAGS) - 1)
00032 << (32 - L4_TASK_NEW_NR_OF_FLAGS),
00033 };
00034
00040 enum {
00043 L4_THREAD_EX_REGS_RAISE_EXCEPTION = 1UL << 28,
00046 L4_THREAD_EX_REGS_ALIEN = 1UL << 29,
00048 L4_THREAD_EX_REGS_NO_CANCEL = 1UL << 30,
00049
00051 L4_THREAD_EX_REGS_TASK_ID_SHIFT = 7,
00052 };
00053
00059 enum {
00061 L4_THREAD_EX_REGS_UTCB_ARGS = 1UL << 27,
00063 L4_THREAD_EX_REGS_VM86 = 1UL << 31,
00064 };
00065
00066
00067
00068
00069
00070
00071 #define L4_FP_REMAP_PAGE 0x00
00075 #define L4_FP_FLUSH_PAGE 0x02
00080 #define L4_FP_OTHER_SPACES 0x00
00085 #define L4_FP_ALL_SPACES 0x80000000U
00086
00092
00093 #define L4_NC_SAME_CLAN 0x00
00098 #define L4_NC_INNER_CLAN 0x0C
00102 #define L4_NC_OUTER_CLAN 0x04
00108
00109
00110
00111
00124 L4_INLINE l4_umword_t
00125 l4_fpage_unmap_taskid(unsigned taskid);
00126
00153 L4_INLINE void
00154 l4_fpage_unmap(l4_fpage_t fpage,
00155 l4_umword_t map_mask);
00156
00163 L4_INLINE l4_threadid_t
00164 l4_myself(void);
00165
00172 L4_INLINE l4_threadid_t
00173 l4_myself_noprof(void);
00174
00195 L4_INLINE int
00196 l4_nchief(l4_threadid_t destination,
00197 l4_threadid_t *next_chief);
00198
00229 L4_INLINE void
00230 l4_thread_ex_regs(l4_threadid_t destination,
00231 l4_umword_t eip,
00232 l4_umword_t esp,
00233 l4_threadid_t *preempter,
00234 l4_threadid_t *pager,
00235 l4_umword_t *old_eflags,
00236 l4_umword_t *old_eip,
00237 l4_umword_t *old_esp);
00238
00251 L4_INLINE void
00252 l4_thread_ex_regs_flags(l4_threadid_t destination,
00253 l4_umword_t eip,
00254 l4_umword_t esp,
00255 l4_threadid_t *preempter,
00256 l4_threadid_t *pager,
00257 l4_umword_t *old_eflags,
00258 l4_umword_t *old_eip,
00259 l4_umword_t *old_esp,
00260 unsigned long flags);
00261
00287 L4_INLINE void
00288 l4_inter_task_ex_regs(l4_threadid_t destination,
00289 l4_umword_t eip,
00290 l4_umword_t esp,
00291 l4_threadid_t *preempter,
00292 l4_threadid_t *pager,
00293 l4_threadid_t *cap_handler,
00294 l4_umword_t *old_eflags,
00295 l4_umword_t *old_eip,
00296 l4_umword_t *old_esp,
00297 unsigned long flags,
00298 l4_utcb_t *utcb);
00299
00304 L4_INLINE l4_threadid_t
00305 l4_thread_ex_regs_pager(l4_threadid_t destination);
00306
00323 L4_INLINE void
00324 l4_thread_switch(l4_threadid_t destination);
00325
00331 L4_INLINE void
00332 l4_yield(void);
00333
00384 L4_INLINE l4_cpu_time_t
00385 l4_thread_schedule(l4_threadid_t dest,
00386 l4_sched_param_t param,
00387 l4_threadid_t *ext_preempter,
00388 l4_threadid_t *partner,
00389 l4_sched_param_t *old_param);
00390
00464 L4_INLINE l4_taskid_t
00465 l4_task_new(l4_taskid_t destination,
00466 l4_umword_t mcp_or_new_chief_and_flags,
00467 l4_umword_t esp,
00468 l4_umword_t eip,
00469 l4_threadid_t pager);
00470
00492 L4_INLINE l4_taskid_t
00493 l4_task_new_long(l4_taskid_t destination,
00494 l4_umword_t mcp_or_new_chief_and_flags,
00495 l4_umword_t esp,
00496 l4_umword_t eip,
00497 l4_threadid_t pager,
00498 l4_threadid_t cap_handler,
00499 l4_quota_desc_t kquota,
00500 l4_utcb_t *utcb);
00501
00502
00507 L4_INLINE void *
00508 l4_kernel_interface(void);
00509
00514 L4_INLINE int
00515 l4_privctrl(l4_umword_t cmd,
00516 l4_umword_t param);
00517
00523 L4_INLINE void
00524 l4_thread_ex_regs_sc(l4_umword_t val0,
00525 l4_umword_t ip,
00526 l4_umword_t sp,
00527 l4_threadid_t *preempter,
00528 l4_threadid_t *pager,
00529 l4_umword_t *old_eflags,
00530 l4_umword_t *old_eip,
00531 l4_umword_t *old_esp);
00532
00538 L4_INLINE l4_taskid_t
00539 l4_task_new_sc(l4_taskid_t destination,
00540 l4_umword_t mcp_or_new_chief_and_flags,
00541 l4_umword_t sp,
00542 l4_umword_t ip,
00543 l4_threadid_t pager);
00544
00545 #endif