542 #define IBNOS_SYSCALL_FN(syscall, n0, n1, n2, n3, n4, n5, n6, n7, n8, n, ...) ibnos_syscall##n 543 #define ibnos_syscall(syscall, ...) IBNOS_SYSCALL_FN(syscall, ##__VA_ARGS__, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)(syscall, ##__VA_ARGS__) 545 static inline int ibnos_syscall0(
int syscall)
548 asm volatile (
"int $0x80" :
"=a"(ret) :
"a"(syscall));
552 static inline int ibnos_syscall1(
int syscall, uint32_t value1)
555 asm volatile (
"int $0x80" :
"=a"(ret) :
"a"(syscall),
"b"(value1));
559 static inline int ibnos_syscall2(
int syscall, uint32_t value1, uint32_t value2)
562 asm volatile (
"int $0x80" :
"=a"(ret) :
"a"(syscall),
"b"(value1),
"c" (value2));
566 static inline int ibnos_syscall3(
int syscall, uint32_t value1, uint32_t value2, uint32_t value3)
569 asm volatile (
"int $0x80" :
"=a"(ret) :
"a"(syscall),
"b"(value1),
"c" (value2),
"d" (value3));
573 static inline int ibnos_syscall4(
int syscall, uint32_t value1, uint32_t value2, uint32_t value3, uint32_t value4)
576 asm volatile (
"int $0x80" :
"=a"(ret) :
"a"(syscall),
"b"(value1),
"c" (value2),
"d" (value3),
"S" (value4));
580 static inline int ibnos_syscall5(
int syscall, uint32_t value1, uint32_t value2, uint32_t value3, uint32_t value4, uint32_t value5)
583 asm volatile (
"int $0x80" :
"=a"(ret) :
"a"(syscall),
"b"(value1),
"c" (value2),
"d" (value3),
"S" (value4),
"D" (value5));
587 static inline void yield()
593 static inline void exitThread(
int exitcode)
598 static inline int32_t getCurrentProcess()
603 static inline int32_t getCurrentThread()
608 static inline uint32_t getMonotonicClock()
614 static inline uint32_t getProcessInfo(
void *info, uint32_t count)
619 static inline int32_t executeProgram(int32_t handle,
void *arg, uint32_t arglen,
void *env, uint32_t envlen)
624 static inline void *getTLS()
629 static inline uint32_t getTLSLength()
634 static inline void *getProgramArguments()
639 static inline uint32_t getProgramArgumentsLength()
644 static inline void *getEnvironmentVariables()
649 static inline uint32_t getEnvironmentVariablesLength()
656 extern void *_thread_start;
657 static inline int32_t createThread(
void *func, uint32_t arg0, uint32_t arg1, uint32_t arg2)
659 return (int32_t)ibnos_syscall(
SYSCALL_CREATE_THREAD, (uint32_t)&_thread_start, (uint32_t)func, arg0, arg1, arg2);
662 static inline int32_t createEvent(
bool wakeupAll)
667 static inline int32_t createSemaphore(uint32_t
value)
672 static inline int32_t createPipe()
677 static inline int32_t createTimer(
bool wakeupAll)
684 static inline bool objectExists(int32_t handle)
689 static inline int32_t objectCompare(int32_t handle1, int32_t handle2)
694 static inline bool objectClose(int32_t handle)
714 static inline bool objectSignal(int32_t handle, uint32_t result)
719 static inline int32_t
objectWrite(int32_t handle,
void *buffer, uint32_t length)
721 return (int32_t)ibnos_syscall(
SYSCALL_OBJECT_WRITE, (uint32_t)handle, (uint32_t)buffer, length);
724 static inline int32_t
objectRead(int32_t handle,
void *buffer, uint32_t length)
726 return (int32_t)ibnos_syscall(
SYSCALL_OBJECT_READ, (uint32_t)handle, (uint32_t)buffer, length);
729 static inline bool objectAttach(int32_t handle, int32_t childHandle, uint32_t
mode, uint32_t ident)
734 static inline bool objectDetach(int32_t handle, uint32_t ident)
739 static inline int32_t consoleWrite(
const char *buffer, uint32_t length)
744 static inline int32_t consoleWriteRaw(
const uint16_t *buffer, uint32_t characters)
769 static inline void consoleSetCursor(uint32_t x, uint32_t y)
774 static inline uint32_t consoleGetCursor()
799 static inline int32_t filesystemSearchFile(int32_t handle,
const char *path, uint32_t length,
bool create)
804 static inline int32_t filesystemSearchDirectory(int32_t handle,
const char *path, uint32_t length,
bool create)
809 static inline int32_t filesystemOpen(int32_t handle)
uint32_t consoleGetSize()
Returns the packed size of the console.
#define objectSignal(p, a)
#define objectGetStatus(p, a)
#define objectShutdown(p, a)
uint32_t consoleGetHardwareCursor()
Get packed position of the hardware cursor.
#define objectWait(p, a, b)
void consoleSetColor(uint8_t color)
Set the text and background color of the console.
#define objectRead(p, a, b)
#define objectWrite(p, a, b)
void consoleClear()
Clear the screen contents.
uint8_t consoleGetColor()
Get current color.
void consoleSetHardwareCursor(uint8_t x, uint8_t y)
Set the position of the hardware cursor.
void consoleSetFlags(uint32_t flags)
Set console flags.
uint32_t consoleGetFlags()
Get console flags.