Subversion Repositories HelenOS-historic

Rev

Rev 755 | Rev 793 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 755 Rev 756
Line 36... Line 36...
36
#include <arch/asm.h>
36
#include <arch/asm.h>
37
#include <config.h>
37
#include <config.h>
38
#include <memstr.h>
38
#include <memstr.h>
39
#include <interrupt.h>
39
#include <interrupt.h>
40
 
40
 
41
static __address bootstrap_dba;
-
 
42
 
-
 
43
void page_arch_init(void)
41
void page_arch_init(void)
44
{
42
{
45
    __address dba;
-
 
46
    __address cur;
43
    __address cur;
47
 
44
 
48
    if (config.cpu_active == 1) {
45
    if (config.cpu_active == 1) {
49
        page_operations = &page_pt_operations;
46
        page_operations = &page_pt_operations;
50
   
47
   
51
        dba = frame_alloc(FRAME_KA | FRAME_PANIC, ONE_FRAME, NULL);
-
 
52
        memsetb(dba, PAGE_SIZE, 0);
-
 
53
 
-
 
54
        bootstrap_dba = dba;
-
 
55
 
-
 
56
        /*
48
        /*
57
         * PA2KA(identity) mapping for all frames.
49
         * PA2KA(identity) mapping for all frames.
58
         */
50
         */
59
        for (cur = 0; cur < last_frame; cur += FRAME_SIZE) {
51
        for (cur = 0; cur < last_frame; cur += FRAME_SIZE) {
60
            page_mapping_insert(AS_KERNEL, PA2KA(cur), cur, PAGE_CACHEABLE | PAGE_EXEC, KA2PA(dba));
52
            page_mapping_insert(AS_KERNEL, PA2KA(cur), cur, PAGE_CACHEABLE | PAGE_EXEC);
61
        }
53
        }
62
 
54
 
63
        exc_register(14, "page_fault", page_fault);
55
        exc_register(14, "page_fault", page_fault);
64
        write_cr3(KA2PA(dba));
56
        write_cr3((__address) AS_KERNEL->page_table);
65
    }
57
    }
66
    else {
58
    else {
67
        write_cr3(KA2PA(bootstrap_dba));
59
        write_cr3((__address) AS_KERNEL->page_table);
68
    }
60
    }
69
}
61
}