71 lines
1.8 KiB
C
71 lines
1.8 KiB
C
#pragma once
|
|
#include <stdint.h>
|
|
#include "kstdlib.h"
|
|
|
|
#define PD_PRESENT 0x0001
|
|
#define PD_USER_RW 0x0002
|
|
#define PD_USER 0x0004
|
|
#define PD_PWT 0x0008
|
|
#define PD_PCD 0x0010
|
|
#define PD_ACCESSED 0x0020
|
|
#define PD_DIRTY 0x0040
|
|
#define PD_PAGE_SZ 0x0080
|
|
#define PD_GLOBAL 0x0100
|
|
#define PD_PAT 0x1000
|
|
#define PD_LINK_N 0x0200
|
|
#define PD_LINK_L 0x0400
|
|
#define PD_ALLOC 0x0800
|
|
|
|
#define PT_PRESENT 0X0001
|
|
#define PT_USER_RW 0x0002
|
|
#define PT_USER 0x0004
|
|
#define PT_PWT 0x0008
|
|
#define PT_PCD 0x0010
|
|
#define PT_ACCESSED 0x0020
|
|
#define PT_DIRTY 0x0040
|
|
#define PT_PAT 0x0080
|
|
#define PT_GLOBAL 0x0100
|
|
#define PT_LINK_N 0x0200
|
|
#define PT_LINK_L 0x0400
|
|
#define PT_ALLOC 0x0800
|
|
|
|
#define BIOS_MMAP_USABLE 1
|
|
#define BIOS_MMAP_RESERVED 2
|
|
#define BIOS_MMAP_RECLAIM 3
|
|
#define BIOS_MMAP_NVS 4
|
|
#define BIOS_MMAP_BAD_MEMORY 5
|
|
|
|
typedef struct BIOS_data{
|
|
uint16_t com_ports[4];
|
|
uint16_t lpt_ports[3];
|
|
uint16_t ebda_addr;
|
|
uint16_t hw_bitflags;
|
|
uint16_t kb_to_ebda;
|
|
uint16_t kbd_state;
|
|
char kbd_buffer[32];
|
|
uint8_t display_mode;
|
|
uint16_t columns_text;
|
|
uint16_t base_video_port;
|
|
uint16_t irq0_boot;
|
|
uint8_t hard_drives;
|
|
uint16_t kbd_buffer_start;
|
|
uint16_t kbd_buffer_end;
|
|
uint8_t kbd_led_state;
|
|
}__attribute__((packed)) bda_t;
|
|
|
|
typedef struct memory_map_entry{
|
|
uint64_t entry_base;
|
|
uint64_t entry_length;
|
|
uint32_t type;
|
|
uint32_t extended_bitflags;
|
|
}__attribute__((packed))mmap_entry_t;
|
|
|
|
void map(void *vaddr, void *paddr, uint32_t flags);
|
|
void unmap(void *vaddr);
|
|
void map_4mb(void *vaddr, void* paddr, uint32_t flags);
|
|
uint32_t get_paddr(void *addr);
|
|
uint32_t pm_alloc();
|
|
void pm_reserve(uint32_t addr);
|
|
void pm_free(uint32_t addr);
|
|
|
|
int pm_init(kernel_info_t *kernel_info); |