Subversion Repositories HelenOS-historic

Rev

Rev 1294 | Rev 1306 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1294 Rev 1297
Line 41... Line 41...
41
#include <arch.h>
41
#include <arch.h>
42
#include <debug.h>
42
#include <debug.h>
43
#include <ipc/sysipc.h>
43
#include <ipc/sysipc.h>
44
#include <synch/futex.h>
44
#include <synch/futex.h>
45
#include <ddi/ddi.h>
45
#include <ddi/ddi.h>
-
 
46
#include <security/cap.h>
46
#include <syscall/copy.h>
47
#include <syscall/copy.h>
47
 
48
 
48
static __native sys_io(int fd, const void * buf, size_t count) {
49
static __native sys_io(int fd, const void * buf, size_t count) {
49
   
50
   
50
    // TODO: buf sanity checks and a lot of other stuff ...
51
    // TODO: buf sanity checks and a lot of other stuff ...
Line 55... Line 56...
55
        putchar(((char *) buf)[i]);
56
        putchar(((char *) buf)[i]);
56
   
57
   
57
    return count;
58
    return count;
58
}
59
}
59
 
60
 
60
static __native sys_preempt_control(int enable)
-
 
61
{
-
 
62
    if (! cap_get(TASK) & CAP_PREEMPT_CONTROL)
-
 
63
        return EPERM;
-
 
64
    if (enable)
-
 
65
        preemption_enable();
-
 
66
    else
-
 
67
        preemption_disable();
-
 
68
    return 0;
-
 
69
}
-
 
70
 
-
 
71
/** Dispatch system call */
61
/** Dispatch system call */
72
__native syscall_handler(__native a1, __native a2, __native a3,
62
__native syscall_handler(__native a1, __native a2, __native a3,
73
             __native a4, __native id)
63
             __native a4, __native id)
74
{
64
{
75
    if (id < SYSCALL_END)
65
    if (id < SYSCALL_END)
Line 79... Line 69...
79
}
69
}
80
 
70
 
81
syshandler_t syscall_table[SYSCALL_END] = {
71
syshandler_t syscall_table[SYSCALL_END] = {
82
    sys_io,
72
    sys_io,
83
    sys_tls_set,
73
    sys_tls_set,
84
    sys_preempt_control,
-
 
85
 
74
   
86
    /* Thread and task related syscalls. */
75
    /* Thread and task related syscalls. */
87
    sys_thread_create,
76
    sys_thread_create,
88
    sys_thread_exit,
77
    sys_thread_exit,
89
    sys_task_get_id,
78
    sys_task_get_id,
90
   
79
   
Line 109... Line 98...
109
    sys_ipc_wait_for_call,
98
    sys_ipc_wait_for_call,
110
    sys_ipc_hangup,
99
    sys_ipc_hangup,
111
    sys_ipc_register_irq,
100
    sys_ipc_register_irq,
112
    sys_ipc_unregister_irq,
101
    sys_ipc_unregister_irq,
113
 
102
 
-
 
103
    /* Capabilities related syscalls. */
-
 
104
    sys_cap_grant,
-
 
105
    sys_cap_revoke,
-
 
106
 
114
    /* DDI related syscalls. */
107
    /* DDI related syscalls. */
115
    sys_physmem_map,
108
    sys_physmem_map,
116
    sys_iospace_enable
109
    sys_iospace_enable,
-
 
110
    sys_preempt_control
117
};
111
};