os/libc/tasking.c

46 lines
785 B
C
Raw Normal View History

2019-05-04 10:41:42 -05:00
#include <stdint.h>
void yield() {
asm volatile(" \
mov $1, %eax; \
int $80; \
");
}
void createTask(void* task) {
asm volatile(" \
mov $2, %%eax; \
int $80; \
"::"b"(task));
}
2019-05-03 09:33:26 -05:00
2019-05-05 13:30:01 -05:00
void createTaskCr3(void* task,void* cr3) {
asm volatile(" \
mov $9, %%eax; \
int $80; \
"::"b"(task),"c"(cr3));
}
2019-05-23 20:41:33 -05:00
void createTaskCr3Param(void* task,void* cr3,uint32_t param1,uint32_t param2) {
asm volatile(" \
mov $12, %%eax; \
int $80; \
"::"b"(task),"c"(cr3),"d"(param1),"S"(param2));
}
void yieldToPID(uint32_t pid) {
asm volatile(" \
mov $15, %%eax; \
int $80; \
"::"b"(pid));
}
__attribute__((noreturn)) void exit(int code) {
code=code&0xff;
asm volatile(" \
mov $17, %%eax; \
int $80; \
"::"b"(code));
for(;;);
}