Subversion Repositories HelenOS-historic

Compare Revisions

Ignore whitespace Rev 539 → Rev 540

/kernel/trunk/arch/amd64/include/mm/frame.h
29,10 → 29,15
#ifndef __amd64_FRAME_H__
#define __amd64_FRAME_H__
 
#ifndef __ASM__
#include <arch/types.h>
#endif /* __ASM__ */
 
#define FRAME_SIZE 4096
 
#ifndef __ASM__
extern __address last_frame;
extern void frame_arch_init(void);
#endif
#endif /* __ASM__ */
 
#endif
/kernel/trunk/arch/amd64/src/mm/page.c
26,22 → 26,21
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
 
#include <arch/mm/page.h>
#include <arch/mm/frame.h>
#include <mm/page.h>
#include <mm/frame.h>
#include <arch/mm/page.h>
#include <arch/interrupt.h>
#include <arch/asm.h>
#include <config.h>
 
#include <memstr.h>
 
 
__address bootstrap_dba;
 
void page_arch_init(void)
{
__address dba;
count_t i;
__address cur;
 
if (config.cpu_active == 1) {
dba = frame_alloc(FRAME_KA | FRAME_PANIC, 0);
52,8 → 51,8
/*
* PA2KA(identity) mapping for all frames.
*/
for (i = 0; i < config.memory_size/FRAME_SIZE; i++) {
page_mapping_insert(PA2KA(i * PAGE_SIZE), i * PAGE_SIZE, PAGE_CACHEABLE | PAGE_EXEC, KA2PA(dba));
for (cur = 0; cur < last_frame; cur += FRAME_SIZE) {
page_mapping_insert(PA2KA(cur), cur, PAGE_CACHEABLE | PAGE_EXEC, KA2PA(dba));
}
 
trap_register(14, page_fault);
/kernel/trunk/arch/ia32/include/boot/memmap.h
55,13 → 55,13
__u64 base_address;
__u64 size;
__u32 type;
} __attribute__ ((packed));
} __attribute__ ((packed));
 
extern struct e820memmap_ e820table[MEMMAP_E820_MAX_RECORDS];
 
extern __u8 e820counter;
 
extern __u32 e801memorysize; // size of memory in KB
extern __u32 e801memorysize; /**< Size of available memory in KB. */
 
#endif
 
/kernel/trunk/arch/ia32/include/mm/frame.h
34,6 → 34,7
#define FRAME_SIZE 4096
 
extern __address bootstrap_dba;
extern __address last_frame;
 
extern void frame_arch_init(void);
 
/kernel/trunk/arch/ia32/src/mm/frame.c
34,10 → 34,13
#include <arch/boot/memmap.h>
#include <panic.h>
#include <debug.h>
#include <align.h>
 
size_t hardcoded_unmapped_ktext_size = 0;
size_t hardcoded_unmapped_kdata_size = 0;
 
__address last_frame = 0;
 
void frame_arch_init(void)
{
zone_t *z;
53,8 → 56,10
for (i = 0; i < e820counter; i++) {
if (e820table[i].type == MEMMAP_MEMORY_AVAILABLE) {
zone_create_in_region(e820table[i].base_address, e820table[i].size & ~(FRAME_SIZE-1));
}
zone_create_in_region(e820table[i].base_address, e820table[i].size & ~(FRAME_SIZE-1));
if (last_frame < ALIGN(e820table[i].base_address + e820table[i].size, FRAME_SIZE))
last_frame = ALIGN(e820table[i].base_address + e820table[i].size, FRAME_SIZE);
}
}
}
}
/kernel/trunk/arch/ia32/src/mm/page.c
26,12 → 26,13
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
 
#include <arch/mm/page.h>
#include <arch/mm/frame.h>
#include <mm/frame.h>
#include <mm/page.h>
#include <arch/types.h>
#include <config.h>
#include <func.h>
#include <mm/frame.h>
#include <mm/page.h>
#include <arch/mm/page.h>
#include <arch/interrupt.h>
#include <arch/asm.h>
#include <synch/spinlock.h>
44,7 → 45,7
void page_arch_init(void)
{
__address dba;
__u32 i;
__address cur;
 
if (config.cpu_active == 1) {
dba = frame_alloc(FRAME_KA | FRAME_PANIC, 0);
53,10 → 54,10
bootstrap_dba = dba;
/*
* PA2KA(identity) mapping for all frames.
* PA2KA(identity) mapping for all frames until last_frame.
*/
for (i = 0; i < config.memory_size/PAGE_SIZE; i++)
page_mapping_insert(PA2KA(i * PAGE_SIZE), i * PAGE_SIZE, PAGE_CACHEABLE, KA2PA(dba));
for (cur = 0; cur < last_frame; cur += FRAME_SIZE)
page_mapping_insert(PA2KA(cur), cur, PAGE_CACHEABLE, KA2PA(dba));
 
trap_register(14, page_fault);
write_cr3(KA2PA(dba));