Changeset dbb6886 in mainline for arch/sparc64/src/mm/tlb.c
- Timestamp:
- 2005-12-13T22:53:26Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 8ad925c
- Parents:
- 91ef0d95
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/sparc64/src/mm/tlb.c
r91ef0d95 rdbb6886 30 30 #include <mm/tlb.h> 31 31 #include <print.h> 32 #include <arch/types.h> 33 #include <typedefs.h> 32 34 33 35 void tlb_arch_init(void) … … 47 49 t.value = itlb_tag_read_read(i); 48 50 49 printf("%d: v a=%Q, context=%d, v=%d, size=%d, nfo=%d, ie=%d, soft2=%X, diag=%X, pa=%X, soft=%X, l=%d, cp=%d, cv=%d, e=%d, p=%d, w=%d, g=%d\n",50 i, t.v a, t.context, d.v, d.size, d.nfo, d.ie, d.soft2, d.diag, d.pa, d.soft, d.l, d.cp, d.cv, d.e, d.p, d.w, d.g);51 printf("%d: vpn=%Q, context=%d, v=%d, size=%d, nfo=%d, ie=%d, soft2=%X, diag=%X, pfn=%X, soft=%X, l=%d, cp=%d, cv=%d, e=%d, p=%d, w=%d, g=%d\n", 52 i, t.vpn, t.context, d.v, d.size, d.nfo, d.ie, d.soft2, d.diag, d.pfn, d.soft, d.l, d.cp, d.cv, d.e, d.p, d.w, d.g); 51 53 } 52 54 … … 56 58 t.value = dtlb_tag_read_read(i); 57 59 58 printf("%d: v a=%Q, context=%d, v=%d, size=%d, nfo=%d, ie=%d, soft2=%X, diag=%X, pa=%X, soft=%X, l=%d, cp=%d, cv=%d, e=%d, p=%d, w=%d, g=%d\n",59 i, t.v a, t.context, d.v, d.size, d.nfo, d.ie, d.soft2, d.diag, d.pa, d.soft, d.l, d.cp, d.cv, d.e, d.p, d.w, d.g);60 printf("%d: vpn=%Q, context=%d, v=%d, size=%d, nfo=%d, ie=%d, soft2=%X, diag=%X, pfn=%X, soft=%X, l=%d, cp=%d, cv=%d, e=%d, p=%d, w=%d, g=%d\n", 61 i, t.vpn, t.context, d.v, d.size, d.nfo, d.ie, d.soft2, d.diag, d.pfn, d.soft, d.l, d.cp, d.cv, d.e, d.p, d.w, d.g); 60 62 } 61 63 62 64 } 65 66 /** Invalidate all unlocked ITLB and DTLB entries. */ 67 void tlb_invalidate_all(void) 68 { 69 int i; 70 tlb_data_t d; 71 tlb_tag_read_reg_t t; 72 73 for (i = 0; i < ITLB_ENTRY_COUNT; i++) { 74 d.value = itlb_data_access_read(i); 75 if (!d.l) { 76 printf("invalidating "); 77 t.value = itlb_tag_read_read(i); 78 d.v = false; 79 itlb_tag_access_write(t.value); 80 itlb_data_access_write(i, d.value); 81 } 82 } 83 84 for (i = 0; i < DTLB_ENTRY_COUNT; i++) { 85 d.value = dtlb_data_access_read(i); 86 if (!d.l) { 87 t.value = dtlb_tag_read_read(i); 88 d.v = false; 89 dtlb_tag_access_write(t.value); 90 dtlb_data_access_write(i, d.value); 91 } 92 } 93 94 } 95 96 /** Invalidate all ITLB and DTLB entries that belong to specified ASID (Context). 97 * 98 * @param asid Address Space ID. 99 */ 100 void tlb_invalidate_asid(asid_t asid) 101 { 102 /* TODO: write asid to some Context register and encode the register in second parameter below. */ 103 itlb_demap(TLB_DEMAP_CONTEXT, TLB_DEMAP_NUCLEUS, 0); 104 dtlb_demap(TLB_DEMAP_CONTEXT, TLB_DEMAP_NUCLEUS, 0); 105 } 106 107 /** Invalidate all ITLB and DLTB entries for specified page in specified address space. 108 * 109 * @param asid Address Space ID. 110 * @param page Page which to sweep out from ITLB and DTLB. 111 */ 112 void tlb_invalidate_page(asid_t asid, __address page) 113 { 114 /* TODO: write asid to some Context register and encode the register in second parameter below. */ 115 itlb_demap(TLB_DEMAP_PAGE, TLB_DEMAP_NUCLEUS, page); 116 dtlb_demap(TLB_DEMAP_PAGE, TLB_DEMAP_NUCLEUS, page); 117 }
Note:
See TracChangeset
for help on using the changeset viewer.