Rev 1787 | Rev 2028 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1787 | Rev 2021 | ||
---|---|---|---|
Line 23... | Line 23... | ||
23 | * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
23 | * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
24 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
24 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
25 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
25 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
26 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
27 | */ |
27 | */ |
- | 28 | ||
28 | #include <print.h> |
29 | #include <print.h> |
29 | #include <test.h> |
30 | #include <test.h> |
30 | #include <mm/page.h> |
31 | #include <mm/page.h> |
31 | #include <mm/frame.h> |
32 | #include <mm/frame.h> |
32 | #include <mm/as.h> |
33 | #include <mm/as.h> |
33 | #include <arch/mm/page.h> |
34 | #include <arch/mm/page.h> |
34 | #include <arch/mm/tlb.h> |
35 | #include <arch/mm/tlb.h> |
35 | #include <arch/types.h> |
36 | #include <arch/types.h> |
36 | #include <debug.h> |
37 | #include <debug.h> |
37 | 38 | ||
- | 39 | #ifdef ia64 |
|
38 | 40 | ||
39 | extern void tlb_invalidate_all(void); |
41 | extern void tlb_invalidate_all(void); |
40 | extern void tlb_invalidate_pages(asid_t asid, uintptr_t va, count_t cnt); |
42 | extern void tlb_invalidate_pages(asid_t asid, uintptr_t va, count_t cnt); |
- | 43 | ||
41 | void test(void) |
44 | void test(void) |
42 | { |
45 | { |
43 | tlb_entry_t entryi; |
46 | tlb_entry_t entryi; |
44 | tlb_entry_t entryd; |
47 | tlb_entry_t entryd; |
45 | 48 | ||
46 | int i; |
49 | int i; |
47 | 50 | ||
48 | entryd.word[0] = 0; |
51 | entryd.word[0] = 0; |
49 | entryd.word[1] = 0; |
52 | entryd.word[1] = 0; |
50 | - | ||
51 | entryd.p = true; /* present */ |
- | |
52 | entryd.ma = MA_WRITEBACK; |
- | |
53 | entryd.a = true; /* already accessed */ |
- | |
54 | entryd.d = true; /* already dirty */ |
- | |
55 | entryd.pl = PL_KERNEL; |
- | |
56 | entryd.ar = AR_READ | AR_WRITE; |
- | |
57 | entryd.ppn = 0; |
- | |
58 | entryd.ps = PAGE_WIDTH; |
- | |
59 | - | ||
60 | - | ||
61 | entryi.word[0] = 0; |
- | |
62 | entryi.word[1] = 0; |
- | |
63 | 53 | ||
64 | entryi.p = true; /* present */ |
54 | entryd.p = true; /* present */ |
65 | entryi.ma = MA_WRITEBACK; |
55 | entryd.ma = MA_WRITEBACK; |
66 | entryi.a = true; /* already accessed */ |
56 | entryd.a = true; /* already accessed */ |
67 | entryi.d = true; /* already dirty */ |
57 | entryd.d = true; /* already dirty */ |
68 | entryi.pl = PL_KERNEL; |
58 | entryd.pl = PL_KERNEL; |
69 | entryi.ar = AR_READ | AR_EXECUTE; |
59 | entryd.ar = AR_READ | AR_WRITE; |
70 | entryi.ppn = 0; |
60 | entryd.ppn = 0; |
71 | entryi.ps = PAGE_WIDTH; |
61 | entryd.ps = PAGE_WIDTH; |
72 | - | ||
73 | 62 | ||
74 | for(i=0;i<100;i++) |
63 | entryi.word[0] = 0; |
- | 64 | entryi.word[1] = 0; |
|
- | 65 | ||
- | 66 | entryi.p = true; /* present */ |
|
- | 67 | entryi.ma = MA_WRITEBACK; |
|
- | 68 | entryi.a = true; /* already accessed */ |
|
- | 69 | entryi.d = true; /* already dirty */ |
|
- | 70 | entryi.pl = PL_KERNEL; |
|
- | 71 | entryi.ar = AR_READ | AR_EXECUTE; |
|
- | 72 | entryi.ppn = 0; |
|
- | 73 | entryi.ps = PAGE_WIDTH; |
|
75 | { |
74 | |
- | 75 | for (i = 0; i < 100; i++) { |
|
76 | itc_mapping_insert(0+i*(1<<PAGE_WIDTH),8,entryi); |
76 | itc_mapping_insert(0 + i * (1 << PAGE_WIDTH), 8, entryi); |
77 | dtc_mapping_insert(0+i*(1<<PAGE_WIDTH),9,entryd); |
77 | dtc_mapping_insert(0 + i * (1 << PAGE_WIDTH), 9, entryd); |
78 | } |
78 | } |
79 | 79 | ||
80 | - | ||
81 | tlb_invalidate_pages(8,0x0c000,14); |
80 | tlb_invalidate_pages(8,0x0c000,14); |
82 | 81 | ||
83 | /*tlb_invalidate_all();*/ |
82 | /*tlb_invalidate_all();*/ |
84 | - | ||
85 | } |
83 | } |
- | 84 | ||
- | 85 | #else |
|
- | 86 | ||
- | 87 | void test_purge1(void) |
|
- | 88 | { |
|
- | 89 | printf("This test is availaible only on IA64 platform.\n"); |
|
- | 90 | } |
|
- | 91 | ||
- | 92 | #endif |