diff --git a/core/errno.h b/core/errno.h new file mode 100644 index 0000000..c805673 --- /dev/null +++ b/core/errno.h @@ -0,0 +1,37 @@ +#pragma once + +#define EPERM 1 /* Operation not permitted */ +#define ENOENT 2 /* No such file or directory */ +#define ESRCH 3 /* No such process */ +#define EINTR 4 /* Interrupted system call */ +#define EIO 5 /* I/O error */ +#define ENXIO 6 /* No such device or address */ +#define E2BIG 7 /* Argument list too long */ +#define ENOEXEC 8 /* Exec format error */ +#define EBADF 9 /* Bad file number */ +#define ECHILD 10 /* No child processes */ +#define EAGAIN 11 /* Try again */ +#define ENOMEM 12 /* Out of memory */ +#define EACCES 13 /* Permission denied */ +#define EFAULT 14 /* Bad address */ +#define ENOTBLK 15 /* Block device required */ +#define EBUSY 16 /* Device or resource busy */ +#define EEXIST 17 /* File exists */ +#define EXDEV 18 /* Cross-device link */ +#define ENODEV 19 /* No such device */ +#define ENOTDIR 20 /* Not a directory */ +#define EISDIR 21 /* Is a directory */ +#define EINVAL 22 /* Invalid argument */ +#define ENFILE 23 /* File table overflow */ +#define EMFILE 24 /* Too many open files */ +#define ENOTTY 25 /* Not a typewriter */ +#define ETXTBSY 26 /* Text file busy */ +#define EFBIG 27 /* File too large */ +#define ENOSPC 28 /* No space left on device */ +#define ESPIPE 29 /* Illegal seek */ +#define EROFS 30 /* Read-only file system */ +#define EMLINK 31 /* Too many links */ +#define EPIPE 32 /* Broken pipe */ +#define EDOM 33 /* Math argument out of domain of func */ +#define ERANGE 34 /* Math result not representable */ + diff --git a/core/paging.c b/core/paging.c index b83df2e..210d8b9 100644 --- a/core/paging.c +++ b/core/paging.c @@ -116,3 +116,19 @@ int pagingSetup(paddr_t upperKernelAddr) "2:\n\t" ::"r"(cr3):"memory","eax"); return 0; } + +int pageMap(vaddr_t vaddr, paddr_t paddr, int flags) +{ + uint pdEntry = vaddr >> (PD_SHIFT); + uint ptEntry = (vaddr >> PT_SHIFT) & PTE_MASK; + + // Thank to mirroring, we can access the PD + struct pde *pd = (struct pde *)(PD_MIRROR_PAGE_IDX * 4 * (1 << 20) + + PD_MIRROR_PAGE_IDX * 4 * (1 << 10)); + + struct pte *pt = (struct pte *)(PD_MIRROR_PAGE_IDX * 4 * (1 << 20) + + PD_MIRROR_PAGE_IDX * 4 * (1 << 10)); + + if(pd[pdEntry].present){ + } +} diff --git a/core/paging.h b/core/paging.h index 5daf35f..a5551f6 100644 --- a/core/paging.h +++ b/core/paging.h @@ -2,3 +2,5 @@ #include "types.h" int pagingSetup(paddr_t upperKernelAddr); + +int pageMap(vaddr_t vaddr, paddr_t paddr, int flags);