working on exposing vga to userspace
This commit is contained in:
@@ -240,6 +240,39 @@ static int32_t sys_waitpid(int pid, int* exit_status) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int32_t sys_mmap(int fd) {
|
||||
if (fd < 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
process_t* current = current_task();
|
||||
if (!current) return 0;
|
||||
|
||||
file_t* file = current->fd_table[fd];
|
||||
if (!file) return 0;
|
||||
|
||||
if (!(file->node->flags & VFS_CHARDEVICE)) return 0;
|
||||
|
||||
uint32_t map_vaddr = 0x3FF00000;
|
||||
return file->node->mmap(file->node, map_vaddr);
|
||||
}
|
||||
|
||||
static int32_t sys_ioctl(int fd, uint32_t request, void* args) {
|
||||
if (fd < 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
process_t* current = current_task();
|
||||
if (!current) return 0;
|
||||
|
||||
file_t* file = current->fd_table[fd];
|
||||
if (!file) return 0;
|
||||
|
||||
if (!file->node->ioctl) return 0;
|
||||
|
||||
return file->node->ioctl(file->node, request, args);
|
||||
}
|
||||
|
||||
void syscall(registers_t* regs) {
|
||||
int32_t ret;
|
||||
switch(regs->eax) {
|
||||
@@ -256,6 +289,8 @@ void syscall(registers_t* regs) {
|
||||
case 23: ret = sys_dup2(regs->ebx, regs->ecx); break;
|
||||
case 24: ret = sys_lseek(regs->ebx, regs->ecx, regs->edx); break;
|
||||
case 25: ret = sys_waitpid(regs->ebx, (int*)regs->ecx); break;
|
||||
case 26: ret = sys_mmap(regs->ebx); break;
|
||||
case 27: ret = sys_ioctl(regs->ebx, regs->ecx, (void*)regs->edx); break;
|
||||
default: ret = -1;
|
||||
}
|
||||
regs->eax = ret;
|
||||
|
||||
Reference in New Issue
Block a user