2 * Copyright 2004-2015, Haiku, Inc. All rights reserved.
3 * Distributed under the terms of the MIT License.
5 #ifndef _SYSTEM_SYSCALLS_H
6 #define _SYSTEM_SYSCALLS_H
9 #include <arch_config.h>
10 #include <DiskDeviceDefs.h>
11 #include <elf_private.h>
13 #include <image_defs.h>
17 #include <sys/socket.h>
34 struct scheduling_analysis
;
39 struct signal_frame_data
;
41 struct system_profiler_parameters
;
42 struct user_timer_info
;
44 struct disk_device_job_progress_info
;
45 struct partitionable_space_data
;
46 struct thread_creation_attributes
;
47 struct user_disk_device_data
;
48 struct user_disk_device_job_info
;
49 struct user_disk_system_info
;
51 // This marks the beginning of the syscalls prototypes for gensyscallinfos.
53 // * Nothing but those prototypes may live here.
54 // * The arguments of the functions must be named to be processed properly.
56 #ifdef GEN_SYSCALL_INFOS_PROCESSING
58 # pragma syscalls begin
60 # define __NO_RETURN __attribute__((noreturn))
63 extern int _kern_is_computer_on(void);
64 extern status_t
_kern_generic_syscall(const char *subsystem
, uint32 function
,
65 void *buffer
, size_t bufferSize
);
67 extern int _kern_getrlimit(int resource
, struct rlimit
* rlp
);
68 extern int _kern_setrlimit(int resource
, const struct rlimit
* rlp
);
70 extern status_t
_kern_shutdown(bool reboot
);
71 extern status_t
_kern_get_safemode_option(const char *parameter
,
72 char *buffer
, size_t *_bufferSize
);
74 extern ssize_t
_kern_wait_for_objects(object_wait_info
* infos
, int numInfos
,
75 uint32 flags
, bigtime_t timeout
);
77 /* user mutex functions */
78 extern status_t
_kern_mutex_lock(int32
* mutex
, const char* name
,
79 uint32 flags
, bigtime_t timeout
);
80 extern status_t
_kern_mutex_unlock(int32
* mutex
, uint32 flags
);
81 extern status_t
_kern_mutex_switch_lock(int32
* fromMutex
, int32
* toMutex
,
82 const char* name
, uint32 flags
, bigtime_t timeout
);
83 extern status_t
_kern_mutex_sem_acquire(int32
* sem
, const char* name
,
84 uint32 flags
, bigtime_t timeout
);
85 extern status_t
_kern_mutex_sem_release(int32
* sem
);
88 extern sem_id
_kern_create_sem(int count
, const char *name
);
89 extern status_t
_kern_delete_sem(sem_id id
);
90 extern status_t
_kern_switch_sem(sem_id releaseSem
, sem_id id
);
91 extern status_t
_kern_switch_sem_etc(sem_id releaseSem
, sem_id id
,
92 uint32 count
, uint32 flags
, bigtime_t timeout
);
93 extern status_t
_kern_acquire_sem(sem_id id
);
94 extern status_t
_kern_acquire_sem_etc(sem_id id
, uint32 count
, uint32 flags
,
96 extern status_t
_kern_release_sem(sem_id id
);
97 extern status_t
_kern_release_sem_etc(sem_id id
, uint32 count
, uint32 flags
);
98 extern status_t
_kern_get_sem_count(sem_id id
, int32
* thread_count
);
99 extern status_t
_kern_get_sem_info(sem_id semaphore
, struct sem_info
*info
,
101 extern status_t
_kern_get_next_sem_info(team_id team
, int32
*cookie
,
102 struct sem_info
*info
, size_t size
);
103 extern status_t
_kern_set_sem_owner(sem_id id
, team_id proc
);
105 /* POSIX realtime sem syscalls */
106 extern status_t
_kern_realtime_sem_open(const char* name
,
107 int openFlagsOrShared
, mode_t mode
, uint32 semCount
,
108 struct _sem_t
* userSem
, struct _sem_t
** _usedUserSem
);
109 extern status_t
_kern_realtime_sem_close(sem_id semID
,
110 struct _sem_t
** _deleteUserSem
);
111 extern status_t
_kern_realtime_sem_unlink(const char* name
);
113 extern status_t
_kern_realtime_sem_get_value(sem_id semID
, int* value
);
114 extern status_t
_kern_realtime_sem_post(sem_id semID
);
115 extern status_t
_kern_realtime_sem_wait(sem_id semID
, bigtime_t timeout
);
117 /* POSIX XSI semaphore syscalls */
118 extern int _kern_xsi_semget(key_t key
, int numSems
, int flags
);
119 extern int _kern_xsi_semctl(int semID
, int semNumber
, int command
,
121 extern status_t
_kern_xsi_semop(int semID
, struct sembuf
*semOps
,
124 /* POSIX XSI message queue syscalls */
125 extern int _kern_xsi_msgctl(int messageQueueID
, int command
,
126 struct msqid_ds
*buffer
);
127 extern int _kern_xsi_msgget(key_t key
, int messageQueueFlags
);
128 extern ssize_t
_kern_xsi_msgrcv(int messageQueueID
, void *messagePointer
,
129 size_t messageSize
, long messageType
, int messageFlags
);
130 extern int _kern_xsi_msgsnd(int messageQueueID
,
131 const void *messagePointer
, size_t messageSize
,
134 /* team & thread syscalls */
135 extern thread_id
_kern_load_image(const char* const* flatArgs
,
136 size_t flatArgsSize
, int32 argCount
, int32 envCount
,
137 int32 priority
, uint32 flags
, port_id errorPort
,
139 extern void __NO_RETURN
_kern_exit_team(status_t returnValue
);
140 extern status_t
_kern_kill_team(team_id team
);
141 extern team_id
_kern_get_current_team();
142 extern status_t
_kern_wait_for_team(team_id team
, status_t
*_returnCode
);
143 extern pid_t
_kern_wait_for_child(thread_id child
, uint32 flags
,
144 siginfo_t
* info
, team_usage_info
* usageInfo
);
145 extern status_t
_kern_exec(const char *path
, const char* const* flatArgs
,
146 size_t flatArgsSize
, int32 argCount
, int32 envCount
,
148 extern thread_id
_kern_fork(void);
149 extern pid_t
_kern_process_info(pid_t process
, int32 which
);
150 extern pid_t
_kern_setpgid(pid_t process
, pid_t group
);
151 extern pid_t
_kern_setsid(void);
152 extern status_t
_kern_change_root(const char *path
);
154 extern thread_id
_kern_spawn_thread(
155 struct thread_creation_attributes
* attributes
);
156 extern thread_id
_kern_find_thread(const char *name
);
157 extern status_t
_kern_suspend_thread(thread_id thread
);
158 extern status_t
_kern_resume_thread(thread_id thread
);
159 extern status_t
_kern_rename_thread(thread_id thread
, const char *newName
);
160 extern status_t
_kern_set_thread_priority(thread_id thread
,
162 extern status_t
_kern_kill_thread(thread_id thread
);
163 extern void _kern_exit_thread(status_t returnValue
);
164 extern status_t
_kern_cancel_thread(thread_id threadID
,
165 void (*cancelFunction
)(int));
166 extern void _kern_thread_yield(void);
167 extern status_t
_kern_wait_for_thread(thread_id thread
,
168 status_t
*_returnCode
);
169 extern bool _kern_has_data(thread_id thread
);
170 extern status_t
_kern_send_data(thread_id thread
, int32 code
,
171 const void *buffer
, size_t bufferSize
);
172 extern int32
_kern_receive_data(thread_id
*_sender
, void *buffer
,
174 extern int64
_kern_restore_signal_frame(
175 struct signal_frame_data
* signalFrameData
);
177 extern status_t
_kern_get_thread_info(thread_id id
, thread_info
*info
);
178 extern status_t
_kern_get_next_thread_info(team_id team
, int32
*cookie
,
180 extern status_t
_kern_get_team_info(team_id id
, team_info
*info
);
181 extern status_t
_kern_get_next_team_info(int32
*cookie
, team_info
*info
);
182 extern status_t
_kern_get_team_usage_info(team_id team
, int32 who
,
183 team_usage_info
*info
, size_t size
);
184 extern status_t
_kern_get_extended_team_info(team_id teamID
, uint32 flags
,
185 void* buffer
, size_t size
, size_t* _sizeNeeded
);
187 extern status_t
_kern_start_watching_system(int32 object
, uint32 flags
,
188 port_id port
, int32 token
);
189 extern status_t
_kern_stop_watching_system(int32 object
, uint32 flags
,
190 port_id port
, int32 token
);
192 extern status_t
_kern_block_thread(uint32 flags
, bigtime_t timeout
);
193 extern status_t
_kern_unblock_thread(thread_id thread
, status_t status
);
194 extern status_t
_kern_unblock_threads(thread_id
* threads
, uint32 count
,
197 extern bigtime_t
_kern_estimate_max_scheduling_latency(thread_id thread
);
199 extern status_t
_kern_set_scheduler_mode(int32 mode
);
200 extern int32
_kern_get_scheduler_mode(void);
202 // user/group functions
203 extern gid_t
_kern_getgid(bool effective
);
204 extern uid_t
_kern_getuid(bool effective
);
205 extern status_t
_kern_setregid(gid_t rgid
, gid_t egid
,
206 bool setAllIfPrivileged
);
207 extern status_t
_kern_setreuid(uid_t ruid
, uid_t euid
,
208 bool setAllIfPrivileged
);
209 extern ssize_t
_kern_getgroups(int groupCount
, gid_t
* groupList
);
210 extern status_t
_kern_setgroups(int groupCount
, const gid_t
* groupList
);
213 extern status_t
_kern_send_signal(int32 id
, uint32 signal
,
214 const union sigval
* userValue
, uint32 flags
);
215 extern status_t
_kern_set_signal_mask(int how
, const sigset_t
*set
,
217 extern status_t
_kern_sigaction(int sig
, const struct sigaction
*action
,
218 struct sigaction
*oldAction
);
219 extern status_t
_kern_sigwait(const sigset_t
*set
, siginfo_t
*info
,
220 uint32 flags
, bigtime_t timeout
);
221 extern status_t
_kern_sigsuspend(const sigset_t
*mask
);
222 extern status_t
_kern_sigpending(sigset_t
*set
);
223 extern status_t
_kern_set_signal_stack(const stack_t
*newStack
,
227 extern image_id
_kern_register_image(extended_image_info
*info
,
229 extern status_t
_kern_unregister_image(image_id id
);
230 extern void _kern_image_relocated(image_id id
);
231 extern void _kern_loading_app_failed(status_t error
);
232 extern status_t
_kern_get_image_info(image_id id
, image_info
*info
,
234 extern status_t
_kern_get_next_image_info(team_id team
, int32
*cookie
,
235 image_info
*info
, size_t size
);
236 extern status_t
_kern_read_kernel_image_symbols(image_id id
,
237 elf_sym
* symbolTable
, int32
* _symbolCount
,
238 char* stringTable
, size_t* _stringTableSize
,
239 addr_t
* _imageDelta
);
242 extern dev_t
_kern_mount(const char *path
, const char *device
,
243 const char *fs_name
, uint32 flags
, const char *args
,
245 extern status_t
_kern_unmount(const char *path
, uint32 flags
);
246 extern status_t
_kern_read_fs_info(dev_t device
, struct fs_info
*info
);
247 extern status_t
_kern_write_fs_info(dev_t device
, const struct fs_info
*info
,
249 extern dev_t
_kern_next_device(int32
*_cookie
);
250 extern status_t
_kern_sync(void);
251 extern status_t
_kern_entry_ref_to_path(dev_t device
, ino_t inode
,
252 const char *leaf
, char *userPath
, size_t pathLength
);
253 extern status_t
_kern_normalize_path(const char* userPath
,
254 bool traverseLink
, char* buffer
);
255 extern int _kern_open_entry_ref(dev_t device
, ino_t inode
,
256 const char *name
, int openMode
, int perms
);
257 extern int _kern_open(int fd
, const char *path
, int openMode
,
259 extern int _kern_open_dir_entry_ref(dev_t device
, ino_t inode
,
261 extern int _kern_open_dir(int fd
, const char *path
);
262 extern int _kern_open_parent_dir(int fd
, char *name
,
264 extern status_t
_kern_fcntl(int fd
, int op
, size_t argument
);
265 extern status_t
_kern_fsync(int fd
);
266 extern status_t
_kern_flock(int fd
, int op
);
267 extern off_t
_kern_seek(int fd
, off_t pos
, int seekType
);
268 extern status_t
_kern_create_dir_entry_ref(dev_t device
, ino_t inode
,
269 const char *name
, int perms
);
270 extern status_t
_kern_create_dir(int fd
, const char *path
, int perms
);
271 extern status_t
_kern_remove_dir(int fd
, const char *path
);
272 extern status_t
_kern_read_link(int fd
, const char *path
, char *buffer
,
273 size_t *_bufferSize
);
274 extern status_t
_kern_create_symlink(int fd
, const char *path
,
275 const char *toPath
, int mode
);
276 extern status_t
_kern_create_link(int pathFD
, const char *path
, int toFD
,
277 const char *toPath
, bool traverseLeafLink
);
278 extern status_t
_kern_unlink(int fd
, const char *path
);
279 extern status_t
_kern_rename(int oldDir
, const char *oldpath
, int newDir
,
280 const char *newpath
);
281 extern status_t
_kern_create_fifo(int fd
, const char *path
, mode_t perms
);
282 extern status_t
_kern_create_pipe(int *fds
);
283 extern status_t
_kern_access(int fd
, const char *path
, int mode
,
284 bool effectiveUserGroup
);
285 extern ssize_t
_kern_select(int numfds
, struct fd_set
*readSet
,
286 struct fd_set
*writeSet
, struct fd_set
*errorSet
,
287 bigtime_t timeout
, const sigset_t
*sigMask
);
288 extern ssize_t
_kern_poll(struct pollfd
*fds
, int numFDs
,
291 extern int _kern_open_attr_dir(int fd
, const char *path
,
292 bool traverseLeafLink
);
293 extern ssize_t
_kern_read_attr(int fd
, const char *attribute
, off_t pos
,
294 void *buffer
, size_t readBytes
);
295 extern ssize_t
_kern_write_attr(int fd
, const char *attribute
, uint32 type
,
296 off_t pos
, const void *buffer
, size_t readBytes
);
297 extern status_t
_kern_stat_attr(int fd
, const char *attribute
,
298 struct attr_info
*attrInfo
);
299 extern int _kern_open_attr(int fd
, const char* path
, const char *name
,
300 uint32 type
, int openMode
);
301 extern status_t
_kern_remove_attr(int fd
, const char *name
);
302 extern status_t
_kern_rename_attr(int fromFile
, const char *fromName
,
303 int toFile
, const char *toName
);
304 extern int _kern_open_index_dir(dev_t device
);
305 extern status_t
_kern_create_index(dev_t device
, const char *name
,
306 uint32 type
, uint32 flags
);
307 extern status_t
_kern_read_index_stat(dev_t device
, const char *name
,
309 extern status_t
_kern_remove_index(dev_t device
, const char *name
);
310 extern status_t
_kern_getcwd(char *buffer
, size_t size
);
311 extern status_t
_kern_setcwd(int fd
, const char *path
);
312 extern int _kern_open_query(dev_t device
, const char *query
,
313 size_t queryLength
, uint32 flags
, port_id port
,
316 // file descriptor functions
317 extern ssize_t
_kern_read(int fd
, off_t pos
, void *buffer
,
319 extern ssize_t
_kern_readv(int fd
, off_t pos
, const struct iovec
*vecs
,
321 extern ssize_t
_kern_write(int fd
, off_t pos
, const void *buffer
,
323 extern ssize_t
_kern_writev(int fd
, off_t pos
, const struct iovec
*vecs
,
325 extern status_t
_kern_ioctl(int fd
, uint32 cmd
, void *data
, size_t length
);
326 extern ssize_t
_kern_read_dir(int fd
, struct dirent
*buffer
,
327 size_t bufferSize
, uint32 maxCount
);
328 extern status_t
_kern_rewind_dir(int fd
);
329 extern status_t
_kern_read_stat(int fd
, const char *path
, bool traverseLink
,
330 struct stat
*stat
, size_t statSize
);
331 extern status_t
_kern_write_stat(int fd
, const char *path
,
332 bool traverseLink
, const struct stat
*stat
,
333 size_t statSize
, int statMask
);
334 extern status_t
_kern_close(int fd
);
335 extern int _kern_dup(int fd
);
336 extern int _kern_dup2(int ofd
, int nfd
);
337 extern status_t
_kern_lock_node(int fd
);
338 extern status_t
_kern_unlock_node(int fd
);
339 extern status_t
_kern_get_next_fd_info(team_id team
, uint32
*_cookie
,
340 struct fd_info
*info
, size_t infoSize
);
343 extern int _kern_socket(int family
, int type
, int protocol
);
344 extern status_t
_kern_bind(int socket
, const struct sockaddr
*address
,
345 socklen_t addressLength
);
346 extern status_t
_kern_shutdown_socket(int socket
, int how
);
347 extern status_t
_kern_connect(int socket
, const struct sockaddr
*address
,
348 socklen_t addressLength
);
349 extern status_t
_kern_listen(int socket
, int backlog
);
350 extern int _kern_accept(int socket
, struct sockaddr
*address
,
351 socklen_t
*_addressLength
);
352 extern ssize_t
_kern_recv(int socket
, void *data
, size_t length
,
354 extern ssize_t
_kern_recvfrom(int socket
, void *data
, size_t length
,
355 int flags
, struct sockaddr
*address
,
356 socklen_t
*_addressLength
);
357 extern ssize_t
_kern_recvmsg(int socket
, struct msghdr
*message
,
359 extern ssize_t
_kern_send(int socket
, const void *data
, size_t length
,
361 extern ssize_t
_kern_sendto(int socket
, const void *data
, size_t length
,
362 int flags
, const struct sockaddr
*address
,
363 socklen_t addressLength
);
364 extern ssize_t
_kern_sendmsg(int socket
, const struct msghdr
*message
,
366 extern status_t
_kern_getsockopt(int socket
, int level
, int option
,
367 void *value
, socklen_t
*_length
);
368 extern status_t
_kern_setsockopt(int socket
, int level
, int option
,
369 const void *value
, socklen_t length
);
370 extern status_t
_kern_getpeername(int socket
, struct sockaddr
*address
,
371 socklen_t
*_addressLength
);
372 extern status_t
_kern_getsockname(int socket
, struct sockaddr
*address
,
373 socklen_t
*_addressLength
);
374 extern int _kern_sockatmark(int socket
);
375 extern status_t
_kern_socketpair(int family
, int type
, int protocol
,
377 extern status_t
_kern_get_next_socket_stat(int family
, uint32
*cookie
,
378 struct net_stat
*stat
);
380 // node monitor functions
381 extern status_t
_kern_stop_notifying(port_id port
, uint32 token
);
382 extern status_t
_kern_start_watching(dev_t device
, ino_t node
, uint32 flags
,
383 port_id port
, uint32 token
);
384 extern status_t
_kern_stop_watching(dev_t device
, ino_t node
, port_id port
,
388 extern status_t
_kern_set_real_time_clock(bigtime_t time
);
389 extern status_t
_kern_set_timezone(int32 timezoneOffset
, const char *name
,
391 extern status_t
_kern_get_timezone(int32
*_timezoneOffset
, char *name
,
393 extern status_t
_kern_set_real_time_clock_is_gmt(bool isGMT
);
394 extern status_t
_kern_get_real_time_clock_is_gmt(bool *_isGMT
);
396 extern status_t
_kern_get_clock(clockid_t clockID
, bigtime_t
* _time
);
397 extern status_t
_kern_set_clock(clockid_t clockID
, bigtime_t time
);
399 extern bigtime_t
_kern_system_time();
400 extern status_t
_kern_snooze_etc(bigtime_t time
, int timebase
, int32 flags
,
401 bigtime_t
* _remainingTime
);
403 extern int32
_kern_create_timer(clockid_t clockID
, thread_id threadID
,
404 uint32 flags
, const struct sigevent
* event
,
405 const struct thread_creation_attributes
*
407 extern status_t
_kern_delete_timer(int32 timerID
, thread_id threadID
);
408 extern status_t
_kern_get_timer(int32 timerID
, thread_id threadID
,
409 struct user_timer_info
* info
);
410 extern status_t
_kern_set_timer(int32 timerID
, thread_id threadID
,
411 bigtime_t startTime
, bigtime_t interval
, uint32 flags
,
412 struct user_timer_info
* oldInfo
);
415 extern area_id
_kern_create_area(const char *name
, void **address
,
416 uint32 addressSpec
, size_t size
, uint32 lock
,
418 extern status_t
_kern_delete_area(area_id area
);
419 extern area_id
_kern_area_for(void *address
);
420 extern area_id
_kern_find_area(const char *name
);
421 extern status_t
_kern_get_area_info(area_id area
, area_info
*info
);
422 extern status_t
_kern_get_next_area_info(team_id team
, ssize_t
*cookie
,
424 extern status_t
_kern_resize_area(area_id area
, size_t newSize
);
425 extern area_id
_kern_transfer_area(area_id area
, void **_address
,
426 uint32 addressSpec
, team_id target
);
427 extern status_t
_kern_set_area_protection(area_id area
,
428 uint32 newProtection
);
429 extern area_id
_kern_clone_area(const char *name
, void **_address
,
430 uint32 addressSpec
, uint32 protection
,
432 extern status_t
_kern_reserve_address_range(addr_t
* _address
,
433 uint32 addressSpec
, addr_t size
);
434 extern status_t
_kern_unreserve_address_range(addr_t address
, addr_t size
);
436 extern area_id
_kern_map_file(const char *name
, void **address
,
437 uint32 addressSpec
, size_t size
, uint32 protection
,
438 uint32 mapping
, bool unmapAddressRange
, int fd
,
440 extern status_t
_kern_unmap_memory(void *address
, size_t size
);
441 extern status_t
_kern_set_memory_protection(void *address
, size_t size
,
443 extern status_t
_kern_sync_memory(void *address
, size_t size
, int flags
);
444 extern status_t
_kern_memory_advice(void *address
, size_t size
,
447 extern status_t
_kern_get_memory_properties(team_id teamID
,
448 const void *address
, uint32
* _protected
, uint32
* _lock
);
450 /* kernel port functions */
451 extern port_id
_kern_create_port(int32 queue_length
, const char *name
);
452 extern status_t
_kern_close_port(port_id id
);
453 extern status_t
_kern_delete_port(port_id id
);
454 extern port_id
_kern_find_port(const char *port_name
);
455 extern status_t
_kern_get_port_info(port_id id
, struct port_info
*info
);
456 extern status_t
_kern_get_next_port_info(team_id team
, int32
*cookie
,
457 struct port_info
*info
);
458 extern ssize_t
_kern_port_buffer_size_etc(port_id port
, uint32 flags
,
460 extern int32
_kern_port_count(port_id port
);
461 extern ssize_t
_kern_read_port_etc(port_id port
, int32
*msgCode
,
462 void *msgBuffer
, size_t bufferSize
, uint32 flags
,
464 extern status_t
_kern_set_port_owner(port_id port
, team_id team
);
465 extern status_t
_kern_write_port_etc(port_id port
, int32 msgCode
,
466 const void *msgBuffer
, size_t bufferSize
, uint32 flags
,
468 extern status_t
_kern_writev_port_etc(port_id id
, int32 msgCode
,
469 const struct iovec
*msgVecs
, size_t vecCount
,
470 size_t bufferSize
, uint32 flags
, bigtime_t timeout
);
471 extern status_t
_kern_get_port_message_info_etc(port_id port
,
472 port_message_info
*info
, size_t infoSize
, uint32 flags
,
475 // debug support functions
476 extern status_t
_kern_kernel_debugger(const char *message
);
477 extern void _kern_register_syslog_daemon(port_id port
);
478 extern void _kern_debugger(const char *message
);
479 extern int _kern_disable_debugger(int state
);
481 extern status_t
_kern_install_default_debugger(port_id debuggerPort
);
482 extern port_id
_kern_install_team_debugger(team_id team
,
483 port_id debuggerPort
);
484 extern status_t
_kern_remove_team_debugger(team_id team
);
485 extern status_t
_kern_debug_thread(thread_id thread
);
486 extern void _kern_wait_for_debugger(void);
488 extern status_t
_kern_set_debugger_breakpoint(void *address
, uint32 type
,
489 int32 length
, bool watchpoint
);
490 extern status_t
_kern_clear_debugger_breakpoint(void *address
,
493 extern status_t
_kern_system_profiler_start(
494 struct system_profiler_parameters
* parameters
);
495 extern status_t
_kern_system_profiler_next_buffer(size_t bytesRead
,
496 uint64
* _droppedEvents
);
497 extern status_t
_kern_system_profiler_stop();
498 extern status_t
_kern_system_profiler_recorded(
499 struct system_profiler_parameters
* parameters
);
501 /* atomic_* ops (needed for CPUs that don't support them directly) */
502 #ifdef ATOMIC_FUNCS_ARE_SYSCALLS
503 extern void _kern_atomic_set(int32
*value
, int32 newValue
);
504 extern int32
_kern_atomic_get_and_set(int32
*value
, int32 newValue
);
505 extern int32
_kern_atomic_test_and_set(int32
*value
, int32 newValue
,
507 extern int32
_kern_atomic_add(int32
*value
, int32 addValue
);
508 extern int32
_kern_atomic_and(int32
*value
, int32 andValue
);
509 extern int32
_kern_atomic_or(int32
*value
, int32 orValue
);
510 extern int32
_kern_atomic_get(int32
*value
);
511 #endif // ATOMIC_FUNCS_ARE_SYSCALLS
513 #ifdef ATOMIC64_FUNCS_ARE_SYSCALLS
514 extern void _kern_atomic_set64(int64
*value
, int64 newValue
);
515 extern int64
_kern_atomic_get_and_set64(int64
*value
, int64 newValue
);
516 extern int64
_kern_atomic_test_and_set64(int64
*value
, int64 newValue
,
518 extern int64
_kern_atomic_add64(int64
*value
, int64 addValue
);
519 extern int64
_kern_atomic_and64(int64
*value
, int64 andValue
);
520 extern int64
_kern_atomic_or64(int64
*value
, int64 orValue
);
521 extern int64
_kern_atomic_get64(int64
*value
);
522 #endif // ATOMIC64_FUNCS_ARE_SYSCALLS
524 /* System informations */
525 extern status_t
_kern_get_system_info(system_info
* info
);
526 extern status_t
_kern_get_cpu_info(uint32 firstCPU
, uint32 cpuCount
,
528 extern status_t
_kern_get_cpu_topology_info(
529 cpu_topology_node_info
* topologyInfos
,
530 uint32
* topologyInfoCount
);
532 extern status_t
_kern_analyze_scheduling(bigtime_t from
, bigtime_t until
,
533 void* buffer
, size_t size
,
534 struct scheduling_analysis
* analysis
);
537 extern void _kern_debug_output(const char *message
);
538 extern void _kern_ktrace_output(const char *message
);
539 extern status_t
_kern_frame_buffer_update(addr_t baseAddress
, int32 width
,
540 int32 height
, int32 depth
, int32 bytesPerRow
);
542 /* messaging service */
543 extern area_id
_kern_register_messaging_service(sem_id lockingSem
,
545 extern status_t
_kern_unregister_messaging_service();
547 extern void _kern_clear_caches(void *address
, size_t length
,
549 extern bool _kern_cpu_enabled(int32 cpu
);
550 extern status_t
_kern_set_cpu_enabled(int32 cpu
, bool enabled
);
552 #if defined(__INTEL__) || defined(__x86_64__)
553 // our only x86 only syscall
554 extern status_t
_kern_get_cpuid(cpuid_info
*info
, uint32 eax
, uint32 cpu
);
558 /* Disk Device Manager syscalls */
560 // iterating, retrieving device/partition data
561 extern partition_id
_kern_get_next_disk_device_id(int32
*cookie
,
563 extern partition_id
_kern_find_disk_device(const char *filename
,
565 extern partition_id
_kern_find_partition(const char *filename
,
567 extern partition_id
_kern_find_file_disk_device(const char *filename
,
569 extern status_t
_kern_get_disk_device_data(partition_id deviceID
,
570 bool deviceOnly
, struct user_disk_device_data
*buffer
,
571 size_t bufferSize
, size_t *neededSize
);
572 extern partition_id
_kern_register_file_device(const char *filename
);
573 extern status_t
_kern_unregister_file_device(partition_id deviceID
,
574 const char *filename
);
575 // Only a valid deviceID or filename need to be passed. The other one
576 // is -1/NULL. If both is given only filename is ignored.
577 extern status_t
_kern_get_file_disk_device_path(partition_id id
,
578 char* buffer
, size_t bufferSize
);
581 extern status_t
_kern_get_disk_system_info(disk_system_id id
,
582 struct user_disk_system_info
*info
);
583 extern status_t
_kern_get_next_disk_system_info(int32
*cookie
,
584 struct user_disk_system_info
*info
);
585 extern status_t
_kern_find_disk_system(const char *name
,
586 struct user_disk_system_info
*info
);
588 // disk device modification
589 extern status_t
_kern_defragment_partition(partition_id partitionID
,
590 int32
* changeCounter
);
591 extern status_t
_kern_repair_partition(partition_id partitionID
,
592 int32
* changeCounter
, bool checkOnly
);
593 extern status_t
_kern_resize_partition(partition_id partitionID
,
594 int32
* changeCounter
, partition_id childID
,
595 int32
* childChangeCounter
, off_t size
,
597 extern status_t
_kern_move_partition(partition_id partitionID
,
598 int32
* changeCounter
, partition_id childID
,
599 int32
* childChangeCounter
, off_t newOffset
,
600 partition_id
* descendantIDs
,
601 int32
* descendantChangeCounters
, int32 descendantCount
);
602 extern status_t
_kern_set_partition_name(partition_id partitionID
,
603 int32
* changeCounter
, partition_id childID
,
604 int32
* childChangeCounter
, const char* name
);
605 extern status_t
_kern_set_partition_content_name(partition_id partitionID
,
606 int32
* changeCounter
, const char* name
);
607 extern status_t
_kern_set_partition_type(partition_id partitionID
,
608 int32
* changeCounter
, partition_id childID
,
609 int32
* childChangeCounter
, const char* type
);
610 extern status_t
_kern_set_partition_parameters(partition_id partitionID
,
611 int32
* changeCounter
, partition_id childID
,
612 int32
* childChangeCounter
, const char* parameters
);
613 extern status_t
_kern_set_partition_content_parameters(
614 partition_id partitionID
, int32
* changeCounter
,
615 const char* parameters
);
616 extern status_t
_kern_initialize_partition(partition_id partitionID
,
617 int32
* changeCounter
, const char* diskSystemName
,
618 const char* name
, const char* parameters
);
619 extern status_t
_kern_uninitialize_partition(partition_id partitionID
,
620 int32
* changeCounter
, partition_id parentID
,
621 int32
* parentChangeCounter
);
622 extern status_t
_kern_create_child_partition(partition_id partitionID
,
623 int32
* changeCounter
, off_t offset
, off_t size
,
624 const char* type
, const char* name
,
625 const char* parameters
, partition_id
* childID
,
626 int32
* childChangeCounter
);
627 extern status_t
_kern_delete_child_partition(partition_id partitionID
,
628 int32
* changeCounter
, partition_id childID
,
629 int32 childChangeCounter
);
631 // disk change notification
632 extern status_t
_kern_start_watching_disks(uint32 eventMask
, port_id port
,
634 extern status_t
_kern_stop_watching_disks(port_id port
, int32 token
);
637 // The end mark for gensyscallinfos.
638 #ifdef GEN_SYSCALL_INFOS_PROCESSING
648 #endif /* _SYSTEM_SYSCALLS_H */