diff --git a/include/sys/ubixos/init.h b/include/sys/ubixos/init.h index e837858..2754672 100644 --- a/include/sys/ubixos/init.h +++ b/include/sys/ubixos/init.h @@ -30,26 +30,26 @@ #define _UBIXOS_INIT_H #include -#include +#include #include #include -#include +#include #include #include -#include +#include #include #include #include #include #include #include -#include -#include -#include +#include +#include +#include #include #include -#include -#include +#include +#include #include typedef int (*intFunctionPTR)(void); diff --git a/include/vmm/paging.h b/include/vmm/paging.h new file mode 100644 index 0000000..6186705 --- /dev/null +++ b/include/vmm/paging.h @@ -0,0 +1,104 @@ +/*- + * Copyright (c) 2002-2018 The UbixOS Project. + * All rights reserved. + * + * This was developed by Christopher W. Olsen for the UbixOS Project. + * + * Redistribution and use in source and binary forms, with or without modification, are permitted + * provided that the following conditions are met: + * + * 1) Redistributions of source code must retain the above copyright notice, this list of + * conditions, the following disclaimer and the list of authors. + * 2) Redistributions in binary form must reproduce the above copyright notice, this list of + * conditions, the following disclaimer and the list of authors in the documentation and/or + * other materials provided with the distribution. + * 3) Neither the name of the UbixOS Project nor the names of its contributors may be used to + * endorse or promote products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _VMM_PAGING_H_ +#define _VMM_PAGING_H_ + +#include +#include +#include + +#define PAGE_SHIFT 12 // Page Shift +#define PAGE_SIZE 0x1000 // Page Size +#define PAGE_MASK (PAGE_SIZE-1) // Page Mask + +#define PD_INDEX(v_addr) (v_addr >> 22) // Calc Page Directory Index +#define PD_OFFSET(v_addr) (v_addr >> 0xA) // Calc Page Directory OFfset +#define PT_INDEX(v_addr) ((v_addr >> 12) & 0x03FF) // Calc Page Table Offset +#define PD_BASE_ADDR2 ((PAGE_SIZE << 0xA) + VMM_KERN_START) // Find Out What This Was For + +#define PD_BASE_ADDR 0xC0400000 // Page Directory Addressable Base Address +#define PT_BASE_ADDR 0xC0000000 // Page Table Addressable Base Address + +#define PD_ENTRIES (PAGE_SIZE/4) //Return Page Directory Entries +#define PT_ENTRIES (PAGE_SIZE/4) //Return Page Table Entries + +#define VM_THRD 0 // Thread +#define VM_TASK 1 // Task + +// Page Flags +#define PAGE_PRESENT 0x00000001 +#define PAGE_WRITE 0x00000002 +#define PAGE_USER 0x00000004 +#define PAGE_WRITE_THROUGH 0x00000008 +#define PAGE_CACHE_DISABLED 0x00000010 +#define PAGE_ACCESSED 0x00000020 +#define PAGE_DIRTY 0x00000040 +#define PAGE_GLOBAL 0x00000080 +#define PAGE_ 0x00000100 +#define PAGE_COW 0x00000200 +#define PAGE_STACK 0x00000400 +#define PAGE_WIRED 0x00000800 + +#define PAGE_DEFAULT (PAGE_PRESENT|PAGE_WRITE|PAGE_USER) +#define KERNEL_PAGE_DEFAULT (PAGE_PRESENT|PAGE_WRITE) + +#define trunc_page(x) ((x) & ~PAGE_MASK) +#define round_page(x) (((x) + PAGE_MASK) & ~PAGE_MASK) + +#define ctob(x) ((x)<>PAGE_SHIFT) + +int vmmClearVirtualPage(uint32_t pageAddr); + +void *vmm_mapFromTask(pidType, void *, uint32_t); +void *vmm_copyVirtualSpace(pidType); +void *vmm_getFreePage(pidType); +void *vmm_getFreeKernelPage(pidType pid, uint16_t count); +void *vmm_createVirtualSpace(pidType); +void *vmm_getFreeVirtualPage(pidType, int, int); + +uint32_t vmm_getPhysicalAddr(uint32_t); +uint32_t vmm_getRealAddr(uint32_t); +int vmm_setPageAttributes(uint32_t, uint16_t); +int vmm_remapPage(uint32_t, uint32_t, uint16_t, pidType, int haveLock); +int vmm_pagingInit(); +void *vmm_getFreeMallocPage(uint16_t count); +//void vmm_pageFault( uint32_t, uint32_t, uint32_t ); +void vmm_pageFault(struct trapframe *, uint32_t); +void _vmm_pageFault(); +int mmap(struct thread *, struct sys_mmap_args *); +int obreak(struct thread *, struct obreak_args *); +int munmap(struct thread *, struct sys_munmap_args *); + +int vmm_cleanVirtualSpace(uint32_t); +void *vmm_getFreeVirtualPage(pidType pid, int count, int type); + +extern uint32_t *kernelPageDirectory; + +#endif diff --git a/include/vmm/vmm.h b/include/vmm/vmm.h new file mode 100644 index 0000000..bb769b1 --- /dev/null +++ b/include/vmm/vmm.h @@ -0,0 +1,133 @@ +/*- + * Copyright (c) 2002-2018 The UbixOS Project. + * All rights reserved. + * + * This was developed by Christopher W. Olsen for the UbixOS Project. + * + * Redistribution and use in source and binary forms, with or without modification, are permitted + * provided that the following conditions are met: + * + * 1) Redistributions of source code must retain the above copyright notice, this list of + * conditions, the following disclaimer and the list of authors. + * 2) Redistributions in binary form must reproduce the above copyright notice, this list of + * conditions, the following disclaimer and the list of authors in the documentation and/or + * other materials provided with the distribution. + * 3) Neither the name of the UbixOS Project nor the names of its contributors may be used to + * endorse or promote products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _VMM_VMM_H +#define _VMM_VMM_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define STACK_ADDR 0xBFFFFFFF//0xC800000 // Default App Stack Address + +#define memAvail 1 +#define memNotavail 2 +#define vmmID -3 + + /* + #define vmmMemoryMapAddr 0xE6667000 + #define VMM_MMAP_ADDR_PMODE2 0xE6667000 + */ + +#define VMM_MMAP_ADDR_PMODE VMM_KERN_START /* (PD_BASE_ADDR + PAGE_SIZE) */ +#define VMM_MMAP_ADDR_RMODE 0x101000 + +#define VMM_KERN_CODE_START 0x00000000 +#define VMM_KERN_CODE_END 0x007FEFFF + +#define VMM_USER_LDT 0x007FF000 + +#define VMM_USER_START 0x00800000 +#define VMM_USER_END 0xBFFFFFFF + +#define VMM_PAGE_DIRS 0xC0000000 +#define VMM_PAGE_DIR 0xC0400000 + +#define VMM_KERN_START 0xC0800000 //TMP ADDED 1000 +#define VMM_KERN_END 0xFDFFFFFF + +#define VMM_KERN_STACK_START 0xFE000000 +#define VMM_KERN_STACK_END 0xFFFFFFFF + + extern struct spinLock pdSpinLock; + + + struct freebsd6_mmap_args { + char addr_l_[PADL_(caddr_t)]; + caddr_t addr; + char addr_r_[PADR_(caddr_t)]; + + char len_l_[PADL_(size_t)]; + size_t len; + char len_r_[PADR_(size_t)]; + + char prot_l_[PADL_(int)]; + int prot; + char prot_r_[PADR_(int)]; + char flags_l_[PADL_(int)]; + + int flags; + char flags_r_[PADR_(int)]; + char fd_l_[PADL_(int)]; + int fd; + char fd_r_[PADR_(int)]; + + char pad_l_[PADL_(int)]; + int pad; + char pad_r_[PADR_(int)]; + + char pos_l_[PADL_(off_t)]; + off_t pos; + char pos_r_[PADR_(off_t)]; + }; + + typedef struct { + uint32_t pageAddr; + u_int16_t status; + u_int16_t reserved; + pid_t pid; + int cowCounter; + } mMap; + + typedef enum { + VMM_FREE = 0, VMM_KEEP = 1 + } unmapFlags_t; + + extern int numPages; + extern mMap *vmmMemoryMap; + + int vmm_init(); + int vmm_memMapInit(); + int countMemory(); + uint32_t vmm_findFreePage(pidType pid); + int freePage(uint32_t pageAddr); + int adjustCowCounter(uint32_t baseAddr, int adjustment); + void vmm_freeProcessPages(pidType pid); + + int vmm_allocPageTable(uint32_t, pidType); + void vmm_unmapPage(uint32_t, unmapFlags_t); + void vmm_unmapPages(void *, uint32_t, unmapFlags_t); + +#ifdef __cplusplus +} +#endif + +#endif // _VMM_VMM_H diff --git a/sys/include/vmm/paging.h b/sys/include/vmm/paging.h deleted file mode 100644 index 6186705..0000000 --- a/sys/include/vmm/paging.h +++ /dev/null @@ -1,104 +0,0 @@ -/*- - * Copyright (c) 2002-2018 The UbixOS Project. - * All rights reserved. - * - * This was developed by Christopher W. Olsen for the UbixOS Project. - * - * Redistribution and use in source and binary forms, with or without modification, are permitted - * provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, this list of - * conditions, the following disclaimer and the list of authors. - * 2) Redistributions in binary form must reproduce the above copyright notice, this list of - * conditions, the following disclaimer and the list of authors in the documentation and/or - * other materials provided with the distribution. - * 3) Neither the name of the UbixOS Project nor the names of its contributors may be used to - * endorse or promote products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, - * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef _VMM_PAGING_H_ -#define _VMM_PAGING_H_ - -#include -#include -#include - -#define PAGE_SHIFT 12 // Page Shift -#define PAGE_SIZE 0x1000 // Page Size -#define PAGE_MASK (PAGE_SIZE-1) // Page Mask - -#define PD_INDEX(v_addr) (v_addr >> 22) // Calc Page Directory Index -#define PD_OFFSET(v_addr) (v_addr >> 0xA) // Calc Page Directory OFfset -#define PT_INDEX(v_addr) ((v_addr >> 12) & 0x03FF) // Calc Page Table Offset -#define PD_BASE_ADDR2 ((PAGE_SIZE << 0xA) + VMM_KERN_START) // Find Out What This Was For - -#define PD_BASE_ADDR 0xC0400000 // Page Directory Addressable Base Address -#define PT_BASE_ADDR 0xC0000000 // Page Table Addressable Base Address - -#define PD_ENTRIES (PAGE_SIZE/4) //Return Page Directory Entries -#define PT_ENTRIES (PAGE_SIZE/4) //Return Page Table Entries - -#define VM_THRD 0 // Thread -#define VM_TASK 1 // Task - -// Page Flags -#define PAGE_PRESENT 0x00000001 -#define PAGE_WRITE 0x00000002 -#define PAGE_USER 0x00000004 -#define PAGE_WRITE_THROUGH 0x00000008 -#define PAGE_CACHE_DISABLED 0x00000010 -#define PAGE_ACCESSED 0x00000020 -#define PAGE_DIRTY 0x00000040 -#define PAGE_GLOBAL 0x00000080 -#define PAGE_ 0x00000100 -#define PAGE_COW 0x00000200 -#define PAGE_STACK 0x00000400 -#define PAGE_WIRED 0x00000800 - -#define PAGE_DEFAULT (PAGE_PRESENT|PAGE_WRITE|PAGE_USER) -#define KERNEL_PAGE_DEFAULT (PAGE_PRESENT|PAGE_WRITE) - -#define trunc_page(x) ((x) & ~PAGE_MASK) -#define round_page(x) (((x) + PAGE_MASK) & ~PAGE_MASK) - -#define ctob(x) ((x)<>PAGE_SHIFT) - -int vmmClearVirtualPage(uint32_t pageAddr); - -void *vmm_mapFromTask(pidType, void *, uint32_t); -void *vmm_copyVirtualSpace(pidType); -void *vmm_getFreePage(pidType); -void *vmm_getFreeKernelPage(pidType pid, uint16_t count); -void *vmm_createVirtualSpace(pidType); -void *vmm_getFreeVirtualPage(pidType, int, int); - -uint32_t vmm_getPhysicalAddr(uint32_t); -uint32_t vmm_getRealAddr(uint32_t); -int vmm_setPageAttributes(uint32_t, uint16_t); -int vmm_remapPage(uint32_t, uint32_t, uint16_t, pidType, int haveLock); -int vmm_pagingInit(); -void *vmm_getFreeMallocPage(uint16_t count); -//void vmm_pageFault( uint32_t, uint32_t, uint32_t ); -void vmm_pageFault(struct trapframe *, uint32_t); -void _vmm_pageFault(); -int mmap(struct thread *, struct sys_mmap_args *); -int obreak(struct thread *, struct obreak_args *); -int munmap(struct thread *, struct sys_munmap_args *); - -int vmm_cleanVirtualSpace(uint32_t); -void *vmm_getFreeVirtualPage(pidType pid, int count, int type); - -extern uint32_t *kernelPageDirectory; - -#endif diff --git a/sys/include/vmm/vmm.h b/sys/include/vmm/vmm.h deleted file mode 100644 index bb769b1..0000000 --- a/sys/include/vmm/vmm.h +++ /dev/null @@ -1,133 +0,0 @@ -/*- - * Copyright (c) 2002-2018 The UbixOS Project. - * All rights reserved. - * - * This was developed by Christopher W. Olsen for the UbixOS Project. - * - * Redistribution and use in source and binary forms, with or without modification, are permitted - * provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, this list of - * conditions, the following disclaimer and the list of authors. - * 2) Redistributions in binary form must reproduce the above copyright notice, this list of - * conditions, the following disclaimer and the list of authors in the documentation and/or - * other materials provided with the distribution. - * 3) Neither the name of the UbixOS Project nor the names of its contributors may be used to - * endorse or promote products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, - * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef _VMM_VMM_H -#define _VMM_VMM_H - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#define STACK_ADDR 0xBFFFFFFF//0xC800000 // Default App Stack Address - -#define memAvail 1 -#define memNotavail 2 -#define vmmID -3 - - /* - #define vmmMemoryMapAddr 0xE6667000 - #define VMM_MMAP_ADDR_PMODE2 0xE6667000 - */ - -#define VMM_MMAP_ADDR_PMODE VMM_KERN_START /* (PD_BASE_ADDR + PAGE_SIZE) */ -#define VMM_MMAP_ADDR_RMODE 0x101000 - -#define VMM_KERN_CODE_START 0x00000000 -#define VMM_KERN_CODE_END 0x007FEFFF - -#define VMM_USER_LDT 0x007FF000 - -#define VMM_USER_START 0x00800000 -#define VMM_USER_END 0xBFFFFFFF - -#define VMM_PAGE_DIRS 0xC0000000 -#define VMM_PAGE_DIR 0xC0400000 - -#define VMM_KERN_START 0xC0800000 //TMP ADDED 1000 -#define VMM_KERN_END 0xFDFFFFFF - -#define VMM_KERN_STACK_START 0xFE000000 -#define VMM_KERN_STACK_END 0xFFFFFFFF - - extern struct spinLock pdSpinLock; - - - struct freebsd6_mmap_args { - char addr_l_[PADL_(caddr_t)]; - caddr_t addr; - char addr_r_[PADR_(caddr_t)]; - - char len_l_[PADL_(size_t)]; - size_t len; - char len_r_[PADR_(size_t)]; - - char prot_l_[PADL_(int)]; - int prot; - char prot_r_[PADR_(int)]; - char flags_l_[PADL_(int)]; - - int flags; - char flags_r_[PADR_(int)]; - char fd_l_[PADL_(int)]; - int fd; - char fd_r_[PADR_(int)]; - - char pad_l_[PADL_(int)]; - int pad; - char pad_r_[PADR_(int)]; - - char pos_l_[PADL_(off_t)]; - off_t pos; - char pos_r_[PADR_(off_t)]; - }; - - typedef struct { - uint32_t pageAddr; - u_int16_t status; - u_int16_t reserved; - pid_t pid; - int cowCounter; - } mMap; - - typedef enum { - VMM_FREE = 0, VMM_KEEP = 1 - } unmapFlags_t; - - extern int numPages; - extern mMap *vmmMemoryMap; - - int vmm_init(); - int vmm_memMapInit(); - int countMemory(); - uint32_t vmm_findFreePage(pidType pid); - int freePage(uint32_t pageAddr); - int adjustCowCounter(uint32_t baseAddr, int adjustment); - void vmm_freeProcessPages(pidType pid); - - int vmm_allocPageTable(uint32_t, pidType); - void vmm_unmapPage(uint32_t, unmapFlags_t); - void vmm_unmapPages(void *, uint32_t, unmapFlags_t); - -#ifdef __cplusplus -} -#endif - -#endif // _VMM_VMM_H diff --git a/sys/init/main.c b/sys/init/main.c index 8b4ebbe..471624a 100644 --- a/sys/init/main.c +++ b/sys/init/main.c @@ -26,15 +26,15 @@ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include +#include #include #include #include #include -#include -#include -#include -#include +#include +#include +#include +#include #include #include #include