Compare commits
3 Commits
7e62ee66be
...
a1eca479d5
Author | SHA1 | Date | |
---|---|---|---|
a1eca479d5 | |||
2600acc96c | |||
7efb79dd26 |
@ -32,4 +32,6 @@ namespace MMU
|
|||||||
|
|
||||||
Result<PageDirectory*> create_page_directory_for_userspace();
|
Result<PageDirectory*> create_page_directory_for_userspace();
|
||||||
void setup_initial_page_directory();
|
void setup_initial_page_directory();
|
||||||
|
|
||||||
|
PageDirectory* kernel_page_directory();
|
||||||
}
|
}
|
@ -7,6 +7,8 @@
|
|||||||
#pragma GCC push_options
|
#pragma GCC push_options
|
||||||
#pragma GCC diagnostic ignored "-Wconversion"
|
#pragma GCC diagnostic ignored "-Wconversion"
|
||||||
|
|
||||||
|
PageDirectory* g_kernel_directory;
|
||||||
|
|
||||||
void PageTableEntry::set_address(u64 addr)
|
void PageTableEntry::set_address(u64 addr)
|
||||||
{
|
{
|
||||||
this->address = (addr >> 12);
|
this->address = (addr >> 12);
|
||||||
@ -259,6 +261,7 @@ namespace MMU
|
|||||||
void setup_initial_page_directory()
|
void setup_initial_page_directory()
|
||||||
{
|
{
|
||||||
PageDirectory* const dir = get_page_directory();
|
PageDirectory* const dir = get_page_directory();
|
||||||
|
g_kernel_directory = dir;
|
||||||
const u64 paddr = (u64)dir;
|
const u64 paddr = (u64)dir;
|
||||||
PageTableEntry& recursive_entry = dir->entries[rindex];
|
PageTableEntry& recursive_entry = dir->entries[rindex];
|
||||||
recursive_entry.read_write = true;
|
recursive_entry.read_write = true;
|
||||||
@ -266,4 +269,9 @@ namespace MMU
|
|||||||
recursive_entry.set_address(paddr);
|
recursive_entry.set_address(paddr);
|
||||||
flush_all();
|
flush_all();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PageDirectory* kernel_page_directory()
|
||||||
|
{
|
||||||
|
return g_kernel_directory;
|
||||||
|
}
|
||||||
}
|
}
|
@ -34,6 +34,14 @@ void Thread::init_regs_kernel()
|
|||||||
regs.rflags = 1 << 9; // IF (Interrupt enable flag)
|
regs.rflags = 1 << 9; // IF (Interrupt enable flag)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Thread::init_regs_user()
|
||||||
|
{
|
||||||
|
memset(®s, 0, sizeof(Registers));
|
||||||
|
regs.cs = 0x18 | 3;
|
||||||
|
regs.ss = 0x20 | 3;
|
||||||
|
regs.rflags = 1 << 9; // IF (Interrupt enable flag)
|
||||||
|
}
|
||||||
|
|
||||||
void Thread::set_arguments(u64 arg1, u64 arg2, u64 arg3, u64 arg4)
|
void Thread::set_arguments(u64 arg1, u64 arg2, u64 arg3, u64 arg4)
|
||||||
{
|
{
|
||||||
regs.rdi = arg1;
|
regs.rdi = arg1;
|
||||||
|
@ -41,8 +41,8 @@ template <typename T> class LinkedListNode
|
|||||||
|
|
||||||
void detach_from_list()
|
void detach_from_list()
|
||||||
{
|
{
|
||||||
m_next_node->m_last_node = m_last_node;
|
if (m_next_node) m_next_node->m_last_node = m_last_node;
|
||||||
m_last_node->m_next_node = m_next_node;
|
if (m_last_node) m_last_node->m_next_node = m_next_node;
|
||||||
}
|
}
|
||||||
|
|
||||||
void append_to_list(SelfType* end_node)
|
void append_to_list(SelfType* end_node)
|
||||||
|
Loading…
Reference in New Issue
Block a user