uint8_t g_atomic_try_lock(uint8_t* atom) { g_syscall_atomic_lock data; data.atom = atom; data.try_only = true; g_syscall(G_SYSCALL_ATOMIC_LOCK, (uint32_t) &data); return data.was_set; }
/** * @see header */ g_message_send_status g_send_msg(uint32_t taskId, g_message* message) { g_syscall_send_msg sendData; sendData.message = message; sendData.taskId = taskId; g_syscall(G_SYSCALL_MAILBOX_SEND, (uint32_t) &sendData); return sendData.sendResult; }
void g_configure_process(g_process_creation_identifier process, g_process_configuration config) { g_syscall_configure_process data; data.processObject = process; data.configuration = config; g_syscall(G_SYSCALL_CONFIGURE_PROCESS, (uint32_t) &data); }
void g_ramdisk_info(int node, g_ramdisk_entry_info* out) { g_syscall_ramdisk_info data; data.nodeId = node; g_syscall(G_SYSCALL_RAMDISK_INFO, (uint32_t) &data); out->length = data.length; strcpy((char*) out->name, (char*) data.name); out->type = data.type; }
g_vm86_call_status g_call_vm86(uint32_t interrupt, g_vm86_registers* in, g_vm86_registers* out) { g_syscall_call_vm86 data; data.interrupt = interrupt; data.in = *in; data.out = out; g_syscall(G_SYSCALL_CALL_VM86, (uint32_t) &data); return data.status; }
g_message_receive_status g_recv_msg_m(uint32_t taskId, g_message* message, int mode) { g_syscall_recv_msg receiveData; receiveData.taskId = taskId; receiveData.message = message; receiveData.mode = mode; g_syscall(G_SYSCALL_MAILBOX_RECEIVE, (uint32_t) &receiveData); return receiveData.receiveResult; }
void g_pipe_s(g_fd* out_write, g_fd* out_read, g_fs_pipe_status* out_status) { g_syscall_fs_pipe data; g_syscall(G_SYSCALL_FS_PIPE, (uint32_t) &data); *out_write = data.write_fd; *out_read = data.read_fd; if (out_status) { *out_status = data.status; } }
int32_t g_open_fs(const char *name, int32_t flags, g_fs_open_status* out_status) { g_syscall_fs_open data; data.path = (char*) name; data.flags = flags; g_syscall(G_SYSCALL_FS_OPEN, (uint32_t) &data); if (out_status) { *out_status = data.status; } return data.fd; }
int32_t g_write_s(g_fd file, const void* buffer, uint64_t length, g_fs_write_status* out_status) { g_syscall_fs_write data; data.fd = file; data.buffer = (uint8_t*) buffer; data.length = length; g_syscall(G_SYSCALL_FS_WRITE, (uint32_t) &data); if (out_status) { *out_status = data.status; } return data.result; }
void g_ramdisk_info(int node, g_ramdisk_entry_info* out) { g_syscall_ramdisk_info data; data.nodeId = node; g_syscall(G_SYSCALL_RAMDISK_INFO, (uint32_t) &data); // copy name char* src = data.name; char* dest = out->name; while (*src) { *dest++ = *src++; } *dest = 0; out->length = data.length; out->type = data.type; }
/** * @see header */ void* g_alloc_mem(int32_t size) { g_syscall_alloc_mem data; data.size = size; g_syscall(G_SYSCALL_ALLOCATE_MEMORY, (uint32_t) &data); return data.virtualResult; }
g_pid g_get_pid() { g_syscall_get_pid data; g_syscall(G_SYSCALL_GET_PROCESS_ID, (uint32_t) &data); return data.id; }
void g_exit(int code) { g_syscall_exit data; data.code = code; g_syscall(G_SYSCALL_EXIT, (uint32_t) &data); __builtin_unreachable(); }
void g_cancel_process_creation(g_process_creation_identifier process) { g_syscall_cancel_process_creation data; data.processObject = process; g_syscall(G_SYSCALL_CANCEL_PROCESS_CREATION, (uint32_t) &data); }
void g_sleep(uint64_t ms) { g_syscall_sleep sleepData; sleepData.milliseconds = ms; g_syscall(G_SYSCALL_SLEEP, (uint32_t) &sleepData); }
void g_unmap(void* area) { g_syscall_unmap data; data.virtualBase = (uint32_t) area; g_syscall(G_SYSCALL_UNMAP, (uint32_t) &data); }
void g_attach_created_process(g_process_creation_identifier process, g_address eip) { g_syscall_attach_created_process data; data.eip = eip; data.processObject = process; g_syscall(G_SYSCALL_ATTACH_CREATED_PROCESS, (uint32_t) &data); }
g_process_creation_identifier g_create_empty_process(g_security_level securityLevel) { g_syscall_create_empty_process data; data.securityLevel = securityLevel; g_syscall(G_SYSCALL_CREATE_EMPTY_PROCESS, (uint32_t) &data); return data.processObject; }
void __g_exit_thread() { g_syscall(G_SYSCALL_EXIT_THREAD, 0); __builtin_unreachable(); }
void g_get_working_directory(char* buffer) { g_syscall_fs_get_working_directory data; data.buffer = buffer; g_syscall(G_SYSCALL_GET_WORKING_DIRECTORY, (uint32_t) &data); }
void g_join(uint32_t taskId) { g_syscall_join data; data.taskId = taskId; g_syscall(G_SYSCALL_JOIN, (uint32_t) &data); }