Subversion Repositories HelenOS

Rev

Rev 3022 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3022 Rev 4296
Line 33... Line 33...
33
#include <mm/as.h>
33
#include <mm/as.h>
34
#include <arch/mm/page.h>
34
#include <arch/mm/page.h>
35
#include <arch/types.h>
35
#include <arch/types.h>
36
#include <debug.h>
36
#include <debug.h>
37
 
37
 
38
#define PAGE0   0x10000000
38
#define PAGE0  0x10000000
39
#define PAGE1   (PAGE0+PAGE_SIZE)
39
#define PAGE1  (PAGE0 + PAGE_SIZE)
40
 
40
 
41
#define VALUE0  0x01234567
41
#define VALUE0  0x01234567
42
#define VALUE1  0x89abcdef
42
#define VALUE1  0x89abcdef
43
 
43
 
44
char * test_mapping1(bool quiet)
44
char *test_mapping1(void)
45
{
45
{
46
    uintptr_t frame0, frame1;
46
    uintptr_t frame0, frame1;
47
    uint32_t v0, v1;
47
    uint32_t v0, v1;
48
 
48
   
49
    frame0 = (uintptr_t) frame_alloc(ONE_FRAME, FRAME_KA);
49
    frame0 = (uintptr_t) frame_alloc(ONE_FRAME, FRAME_KA);
50
    frame1 = (uintptr_t) frame_alloc(ONE_FRAME, FRAME_KA);
50
    frame1 = (uintptr_t) frame_alloc(ONE_FRAME, FRAME_KA);
51
   
51
   
52
    if (!quiet)
-
 
53
        printf("Writing %#x to physical address %p.\n", VALUE0, KA2PA(frame0));
52
    TPRINTF("Writing %#x to physical address %p.\n", VALUE0, KA2PA(frame0));
54
    *((uint32_t *) frame0) = VALUE0;
53
    *((uint32_t *) frame0) = VALUE0;
55
    if (!quiet)
54
   
56
        printf("Writing %#x to physical address %p.\n", VALUE1, KA2PA(frame1));
55
    TPRINTF("Writing %#x to physical address %p.\n", VALUE1, KA2PA(frame1));
57
    *((uint32_t *) frame1) = VALUE1;
56
    *((uint32_t *) frame1) = VALUE1;
58
   
57
   
59
    if (!quiet)
-
 
60
        printf("Mapping virtual address %p to physical address %p.\n", PAGE0, KA2PA(frame0));
58
    TPRINTF("Mapping virtual address %p to physical address %p.\n", PAGE0, KA2PA(frame0));
61
    page_mapping_insert(AS_KERNEL, PAGE0, KA2PA(frame0), PAGE_PRESENT | PAGE_WRITE);
59
    page_mapping_insert(AS_KERNEL, PAGE0, KA2PA(frame0), PAGE_PRESENT | PAGE_WRITE);
62
    if (!quiet)
60
   
63
        printf("Mapping virtual address %p to physical address %p.\n", PAGE1, KA2PA(frame1));  
61
    TPRINTF("Mapping virtual address %p to physical address %p.\n", PAGE1, KA2PA(frame1));
64
    page_mapping_insert(AS_KERNEL, PAGE1, KA2PA(frame1), PAGE_PRESENT | PAGE_WRITE);
62
    page_mapping_insert(AS_KERNEL, PAGE1, KA2PA(frame1), PAGE_PRESENT | PAGE_WRITE);
65
   
63
   
66
    v0 = *((uint32_t *) PAGE0);
64
    v0 = *((uint32_t *) PAGE0);
67
    v1 = *((uint32_t *) PAGE1);
65
    v1 = *((uint32_t *) PAGE1);
68
    if (!quiet) {
-
 
69
        printf("Value at virtual address %p is %#x.\n", PAGE0, v0);
66
    TPRINTF("Value at virtual address %p is %#x.\n", PAGE0, v0);
70
        printf("Value at virtual address %p is %#x.\n", PAGE1, v1);
67
    TPRINTF("Value at virtual address %p is %#x.\n", PAGE1, v1);
71
    }
-
 
72
   
68
   
73
    if (v0 != VALUE0)
69
    if (v0 != VALUE0)
74
        return "Value at v0 not equal to VALUE0";
70
        return "Value at v0 not equal to VALUE0";
75
    if (v1 != VALUE1)
71
    if (v1 != VALUE1)
76
        return "Value at v1 not equal to VALUE1";
72
        return "Value at v1 not equal to VALUE1";
77
   
73
   
78
    if (!quiet)
-
 
79
        printf("Writing %#x to virtual address %p.\n", 0, PAGE0);
74
    TPRINTF("Writing %#x to virtual address %p.\n", 0, PAGE0);
80
    *((uint32_t *) PAGE0) = 0;
75
    *((uint32_t *) PAGE0) = 0;
81
    if (!quiet)
76
   
82
        printf("Writing %#x to virtual address %p.\n", 0, PAGE1);
77
    TPRINTF("Writing %#x to virtual address %p.\n", 0, PAGE1);
83
    *((uint32_t *) PAGE1) = 0; 
78
    *((uint32_t *) PAGE1) = 0;
84
 
79
   
85
    v0 = *((uint32_t *) PAGE0);
80
    v0 = *((uint32_t *) PAGE0);
86
    v1 = *((uint32_t *) PAGE1);
81
    v1 = *((uint32_t *) PAGE1);
87
   
82
   
88
    if (!quiet) {
-
 
89
        printf("Value at virtual address %p is %#x.\n", PAGE0, *((uint32_t *) PAGE0)); 
83
    TPRINTF("Value at virtual address %p is %#x.\n", PAGE0, *((uint32_t *) PAGE0));
90
        printf("Value at virtual address %p is %#x.\n", PAGE1, *((uint32_t *) PAGE1));
84
    TPRINTF("Value at virtual address %p is %#x.\n", PAGE1, *((uint32_t *) PAGE1));
91
    }
85
   
92
 
-
 
93
    if (v0 != 0)
86
    if (v0 != 0)
94
        return "Value at v0 not equal to 0";
87
        return "Value at v0 not equal to 0";
95
    if (v1 != 0)
88
    if (v1 != 0)
96
        return "Value at v1 not equal to 0";
89
        return "Value at v1 not equal to 0";
97
   
90
   
98
    return NULL;   
91
    return NULL;
99
}
92
}