blob: b32e027d2b727b06cd3b840abdc0909aaca46b35 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
/*
* Copyright (c) 2010-2014 Richard Braun.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _X86_BIOSMEM_H
#define _X86_BIOSMEM_H
#include <kern/types.h>
#include <machine/multiboot.h>
/*
* Address where the address of the Extended BIOS Data Area segment can be
* found.
*/
#define BIOSMEM_EBDA_PTR 0x40e
/*
* Significant low memory addresses.
*
* The first 64 KiB are reserved for various reasons (e.g. to preserve BIOS
* data and to work around data corruption on some hardware).
*/
#define BIOSMEM_BASE 0x010000
#define BIOSMEM_BASE_END 0x0a0000
#define BIOSMEM_EXT_ROM 0x0e0000
#define BIOSMEM_ROM 0x0f0000
#define BIOSMEM_END 0x100000
/*
* Early initialization of the biosmem module.
*
* This function processes the given multiboot data for BIOS-provided
* memory information, and sets up a bootstrap physical page allocator.
*
* It is called before paging is enabled.
*/
void biosmem_bootstrap(struct multiboot_raw_info *mbi);
/*
* Allocate contiguous physical pages during bootstrap.
*
* This function is called before paging is enabled. It should only be used
* to allocate initial page table pages. Those pages are later loaded into
* the VM system (as reserved pages) which means they can be freed like other
* regular pages. Users should fix up the type of those pages once the VM
* system is initialized.
*/
void * biosmem_bootalloc(unsigned int nr_pages);
/*
* Return the amount of physical memory that can be directly mapped.
*
* This includes the size of both the DMA/DMA32 and DIRECTMAP segments.
*/
phys_addr_t biosmem_directmap_size(void);
/*
* Set up physical memory based on the information obtained during bootstrap
* and load it in the VM system.
*/
void biosmem_setup(void);
/*
* Free all usable memory.
*
* This includes ranges that weren't part of the bootstrap allocator initial
* heap, e.g. because they contained boot data.
*/
void biosmem_free_usable(void);
#endif /* _X86_BIOSMEM_H */
|