Compare commits

..

No commits in common. "7f8a8cdcafbfc8900952d717e7f534431bf6ce05" and "a7a38d34338f499aaee9f92b860032685fdf22e7" have entirely different histories.

8 changed files with 3 additions and 48 deletions

View File

@ -22,7 +22,6 @@ set(SOURCES
src/sys/console_write.cpp
src/sys/clock_gettime.cpp
src/sys/allocate_memory.cpp
src/sys/usleep.cpp
src/InitRD.cpp
src/ELF.cpp
)

View File

@ -1,5 +1,4 @@
#include "arch/MMU.h"
#include "Log.h"
#include "memory/MemoryManager.h"
#include <luna/CString.h>
#include <luna/Result.h>
@ -10,7 +9,6 @@
#pragma GCC diagnostic ignored "-Wconversion"
PageDirectory* g_kernel_directory;
u64 g_kernel_directory_virt;
void PageTableEntry::set_address(u64 addr)
{
@ -280,18 +278,12 @@ namespace MMU
{
PageDirectory* const dir = get_page_directory();
g_kernel_directory = dir;
const u64 paddr = (u64)dir;
PageTableEntry& recursive_entry = dir->entries[rindex];
recursive_entry.read_write = true;
recursive_entry.present = true;
recursive_entry.set_address(paddr);
flush_all();
g_kernel_directory_virt =
MemoryManager::get_kernel_mapping_for_frames((u64)dir, 1, MMU::ReadWrite | MMU::NoExecute).value();
kdbgln("MMU init page directory (ring0): virt %#.16lx, phys %p", g_kernel_directory_virt, g_kernel_directory);
}
Result<PageDirectory*> create_page_directory_for_userspace()
@ -306,9 +298,7 @@ namespace MMU
recursive_entry.present = true;
recursive_entry.set_address(directory_phys);
kdbgln("MMU init page directory (ring3): virt %p, phys %#.16lx", directory, directory_phys);
directory->entries[511] = ((PageDirectory*)g_kernel_directory_virt)->entries[511];
directory->entries[511] = g_kernel_directory->entries[511];
// From now on, we're only going to use the physical address, since accessing the PageDirectory will be dealt
// with using recursive mapping. So let's make sure we don't leak any VM.

View File

@ -1,12 +0,0 @@
#include "sys/Syscall.h"
#include "thread/Scheduler.h"
#include <sys/types.h>
Result<u64> sys_usleep(Registers*, SyscallArgs args)
{
useconds_t us = (useconds_t)args[0];
kernel_sleep(us / 1000);
return 0;
}

View File

@ -1,4 +1,4 @@
file(GLOB_RECURSE HEADERS include/*.h)
file(GLOB HEADERS include/*.h)
set(SOURCES
${HEADERS}

View File

@ -11,6 +11,5 @@
typedef int pid_t;
typedef __i64_t time_t;
typedef __u16_t mode_t;
typedef __u64_t useconds_t;
#endif

View File

@ -24,12 +24,6 @@ extern "C"
/* Calls the operating system kernel for a specific service. */
long syscall(long num, ...);
/* Sleeps for X microseconds. */
int usleep(useconds_t us);
/* Sleeps for X seconds. */
unsigned long sleep(unsigned long seconds);
#ifdef __cplusplus
}
#endif

View File

@ -1,7 +1,5 @@
#include <bits/errno-return.h>
#include <stdarg.h>
#include <stdint.h>
#include <sys/syscall.h>
#include <unistd.h>
extern "C" long arch_invoke_syscall(long, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t);
@ -25,16 +23,4 @@ extern "C"
return rc;
}
int usleep(useconds_t us)
{
long rc = syscall(SYS_usleep, us);
__errno_return(rc, int);
}
unsigned long sleep(unsigned long seconds)
{
syscall(SYS_usleep, seconds * 1000000);
return 0;
}
}

View File

@ -1,7 +1,6 @@
#pragma once
#define enumerate_syscalls(_e) \
_e(exit) _e(console_write) _e(clock_gettime) _e(allocate_memory) _e(deallocate_memory) _e(usleep)
#define enumerate_syscalls(_e) _e(exit) _e(console_write) _e(clock_gettime) _e(allocate_memory) _e(deallocate_memory)
enum Syscalls
{