Started work on kernel class
This commit is contained in:
68
src/kernel.hpp
Normal file
68
src/kernel.hpp
Normal file
@@ -0,0 +1,68 @@
|
||||
#ifndef KERNEL_H
|
||||
#define KERNEL_H
|
||||
|
||||
#include "systypes.hpp"
|
||||
|
||||
class Kernel
|
||||
{
|
||||
public:
|
||||
|
||||
Kernel();
|
||||
|
||||
/**
|
||||
* Maps a region of pages starting at the virtual address 'page', allocating
|
||||
* each mapped frame and any necessary page tables.
|
||||
*
|
||||
* @param page The virtual address of the first page to map
|
||||
* @param length The size in bytes of the region to map
|
||||
* @param flags The flags to apply to each page
|
||||
*
|
||||
* @returns zero upon success, nonzero on failure
|
||||
*/
|
||||
int allocateRegion(void* page, size_t length, int flags);
|
||||
|
||||
/**
|
||||
* Maps a contiguous region of pages to a configuous region of frames,
|
||||
* allocating new page tables as needed. All pages will share the same
|
||||
* flags.
|
||||
*
|
||||
* @param page The virtual address of the first page to map
|
||||
* @param frame The physical address of the first frame to map to
|
||||
* @param length The size in bytes of the region to map
|
||||
* @param flags The flags to apply to each page
|
||||
*
|
||||
* @returns zero upon success, nonzero on failure
|
||||
*/
|
||||
int mapRegion(void* page, physaddr_t frame, size_t length, int flags);
|
||||
|
||||
/**
|
||||
* Maps a single page to a single frame. Allocates a new page table if one
|
||||
* does not exist for that frame.
|
||||
*
|
||||
* @param page the virtual address of the page to map
|
||||
* @param frame the physical address of the frame to map to
|
||||
* @param flags flags to apply to the entry
|
||||
*
|
||||
* @returns zero upon success, nonzero on failure
|
||||
*/
|
||||
int mapPage(void* page, physaddr_t frame, int flags);
|
||||
|
||||
/**
|
||||
* Reserve a single page frame.
|
||||
*
|
||||
* @returns the physical address of the reserved frame.
|
||||
*/
|
||||
physaddr_t reserveFrame();
|
||||
|
||||
/**
|
||||
* Frees a single page frame.
|
||||
*/
|
||||
void freeFrame(physaddr_t frame);
|
||||
|
||||
private:
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user