Rev 1890 | Rev 2048 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1890 | Rev 1891 | ||
---|---|---|---|
Line 33... | Line 33... | ||
33 | */ |
33 | */ |
34 | 34 | ||
35 | #ifndef KERN_sparc64_TSB_H_ |
35 | #ifndef KERN_sparc64_TSB_H_ |
36 | #define KERN_sparc64_TSB_H_ |
36 | #define KERN_sparc64_TSB_H_ |
37 | 37 | ||
38 | #include <arch/mm/tte.h> |
- | |
39 | #include <arch/mm/mmu.h> |
- | |
40 | #include <arch/types.h> |
- | |
41 | #include <typedefs.h> |
- | |
42 | - | ||
43 | /* |
38 | /* |
44 | * ITSB abd DTSB will claim 64K of memory, which |
39 | * ITSB abd DTSB will claim 64K of memory, which |
45 | * is a nice number considered that it is one of |
40 | * is a nice number considered that it is one of |
46 | * the page sizes supported by hardware, which, |
41 | * the page sizes supported by hardware, which, |
47 | * again, is nice because TSBs need to be locked |
42 | * again, is nice because TSBs need to be locked |
Line 49... | Line 44... | ||
49 | */ |
44 | */ |
50 | #define TSB_SIZE 2 /* when changing this, change as.c as well */ |
45 | #define TSB_SIZE 2 /* when changing this, change as.c as well */ |
51 | #define ITSB_ENTRY_COUNT (512*(1<<TSB_SIZE)) |
46 | #define ITSB_ENTRY_COUNT (512*(1<<TSB_SIZE)) |
52 | #define DTSB_ENTRY_COUNT (512*(1<<TSB_SIZE)) |
47 | #define DTSB_ENTRY_COUNT (512*(1<<TSB_SIZE)) |
53 | 48 | ||
- | 49 | #define TSB_TAG_TARGET_CONTEXT_SHIFT 48 |
|
- | 50 | ||
- | 51 | #ifndef __ASM__ |
|
- | 52 | ||
- | 53 | #include <arch/mm/tte.h> |
|
- | 54 | #include <arch/mm/mmu.h> |
|
- | 55 | #include <arch/types.h> |
|
- | 56 | #include <typedefs.h> |
|
- | 57 | ||
- | 58 | /** TSB Tag Target register. */ |
|
- | 59 | union tsb_tag_target { |
|
- | 60 | uint64_t value; |
|
- | 61 | struct { |
|
- | 62 | unsigned invalid : 1; /**< Invalidated by software. */ |
|
- | 63 | unsigned : 2; |
|
- | 64 | unsigned context : 13; /**< Software ASID. */ |
|
- | 65 | unsigned : 6; |
|
- | 66 | uint64_t va_tag : 42; /**< Virtual address bits <63:22>. */ |
|
- | 67 | } __attribute__ ((packed)); |
|
- | 68 | }; |
|
- | 69 | typedef union tsb_tag_target tsb_tag_target_t; |
|
- | 70 | ||
- | 71 | /** TSB entry. */ |
|
54 | struct tsb_entry { |
72 | struct tsb_entry { |
55 | tte_tag_t tag; |
73 | tsb_tag_target_t tag; |
56 | tte_data_t data; |
74 | tte_data_t data; |
57 | } __attribute__ ((packed)); |
75 | } __attribute__ ((packed)); |
58 | typedef struct tsb_entry tsb_entry_t; |
76 | typedef struct tsb_entry tsb_entry_t; |
59 | 77 | ||
60 | /** TSB Base register. */ |
78 | /** TSB Base register. */ |
Line 107... | Line 125... | ||
107 | { |
125 | { |
108 | asi_u64_write(ASI_DMMU, VA_DMMU_TSB_BASE, v); |
126 | asi_u64_write(ASI_DMMU, VA_DMMU_TSB_BASE, v); |
109 | } |
127 | } |
110 | 128 | ||
111 | extern void tsb_invalidate(as_t *as, uintptr_t page, count_t pages); |
129 | extern void tsb_invalidate(as_t *as, uintptr_t page, count_t pages); |
- | 130 | extern void itsb_pte_copy(pte_t *t); |
|
- | 131 | extern void dtsb_pte_copy(pte_t *t, bool ro); |
|
- | 132 | ||
- | 133 | #endif /* !def __ASM__ */ |
|
112 | 134 | ||
113 | #endif |
135 | #endif |
114 | 136 | ||
115 | /** @} |
137 | /** @} |
116 | */ |
138 | */ |