Rev 3674 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 3674 | Rev 4691 | ||
|---|---|---|---|
| Line 48... | Line 48... | ||
| 48 | * We assume that the address space is already locked. Note that respective |
48 | * We assume that the address space is already locked. Note that respective |
| 49 | * portions of both TSBs are invalidated at a time. |
49 | * portions of both TSBs are invalidated at a time. |
| 50 | * |
50 | * |
| 51 | * @param as Address space. |
51 | * @param as Address space. |
| 52 | * @param page First page to invalidate in TSB. |
52 | * @param page First page to invalidate in TSB. |
| 53 | * @param pages Number of pages to invalidate. Value of (count_t) -1 means the |
53 | * @param pages Number of pages to invalidate. Value of (size_t) -1 means the |
| 54 | * whole TSB. |
54 | * whole TSB. |
| 55 | */ |
55 | */ |
| 56 | void tsb_invalidate(as_t *as, uintptr_t page, count_t pages) |
56 | void tsb_invalidate(as_t *as, uintptr_t page, size_t pages) |
| 57 | { |
57 | { |
| 58 | index_t i0, i; |
58 | size_t i0; |
| - | 59 | size_t i; |
|
| 59 | count_t cnt; |
60 | size_t cnt; |
| 60 | 61 | ||
| 61 | ASSERT(as->arch.itsb && as->arch.dtsb); |
62 | ASSERT(as->arch.itsb && as->arch.dtsb); |
| 62 | 63 | ||
| 63 | i0 = (page >> MMU_PAGE_WIDTH) & TSB_INDEX_MASK; |
64 | i0 = (page >> MMU_PAGE_WIDTH) & TSB_INDEX_MASK; |
| 64 | ASSERT(i0 < ITSB_ENTRY_COUNT && i0 < DTSB_ENTRY_COUNT); |
65 | ASSERT(i0 < ITSB_ENTRY_COUNT && i0 < DTSB_ENTRY_COUNT); |
| 65 | 66 | ||
| 66 | if (pages == (count_t) -1 || (pages * 2) > ITSB_ENTRY_COUNT) |
67 | if (pages == (size_t) -1 || (pages * 2) > ITSB_ENTRY_COUNT) |
| 67 | cnt = ITSB_ENTRY_COUNT; |
68 | cnt = ITSB_ENTRY_COUNT; |
| 68 | else |
69 | else |
| 69 | cnt = pages * 2; |
70 | cnt = pages * 2; |
| 70 | 71 | ||
| 71 | for (i = 0; i < cnt; i++) { |
72 | for (i = 0; i < cnt; i++) { |
| Line 79... | Line 80... | ||
| 79 | /** Copy software PTE to ITSB. |
80 | /** Copy software PTE to ITSB. |
| 80 | * |
81 | * |
| 81 | * @param t Software PTE. |
82 | * @param t Software PTE. |
| 82 | * @param index Zero if lower 8K-subpage, one if higher 8K subpage. |
83 | * @param index Zero if lower 8K-subpage, one if higher 8K subpage. |
| 83 | */ |
84 | */ |
| 84 | void itsb_pte_copy(pte_t *t, index_t index) |
85 | void itsb_pte_copy(pte_t *t, size_t index) |
| 85 | { |
86 | { |
| 86 | as_t *as; |
87 | as_t *as; |
| 87 | tsb_entry_t *tsb; |
88 | tsb_entry_t *tsb; |
| 88 | index_t entry; |
89 | size_t entry; |
| 89 | 90 | ||
| 90 | ASSERT(index <= 1); |
91 | ASSERT(index <= 1); |
| 91 | 92 | ||
| 92 | as = t->as; |
93 | as = t->as; |
| 93 | entry = ((t->page >> MMU_PAGE_WIDTH) + index) & TSB_INDEX_MASK; |
94 | entry = ((t->page >> MMU_PAGE_WIDTH) + index) & TSB_INDEX_MASK; |
| Line 125... | Line 126... | ||
| 125 | * |
126 | * |
| 126 | * @param t Software PTE. |
127 | * @param t Software PTE. |
| 127 | * @param index Zero if lower 8K-subpage, one if higher 8K-subpage. |
128 | * @param index Zero if lower 8K-subpage, one if higher 8K-subpage. |
| 128 | * @param ro If true, the mapping is copied read-only. |
129 | * @param ro If true, the mapping is copied read-only. |
| 129 | */ |
130 | */ |
| 130 | void dtsb_pte_copy(pte_t *t, index_t index, bool ro) |
131 | void dtsb_pte_copy(pte_t *t, size_t index, bool ro) |
| 131 | { |
132 | { |
| 132 | as_t *as; |
133 | as_t *as; |
| 133 | tsb_entry_t *tsb; |
134 | tsb_entry_t *tsb; |
| 134 | index_t entry; |
135 | size_t entry; |
| 135 | 136 | ||
| 136 | ASSERT(index <= 1); |
137 | ASSERT(index <= 1); |
| 137 | 138 | ||
| 138 | as = t->as; |
139 | as = t->as; |
| 139 | entry = ((t->page >> MMU_PAGE_WIDTH) + index) & TSB_INDEX_MASK; |
140 | entry = ((t->page >> MMU_PAGE_WIDTH) + index) & TSB_INDEX_MASK; |