29 char *_kExecArg[] = {NULL};
32 int PutTLBEntry(
unsigned int PageMask,
unsigned int EntryHi,
unsigned int EntryLo0,
unsigned int EntryLo1);
33 int SetTLBEntry(
unsigned int index,
unsigned int PageMask,
unsigned int EntryHi,
unsigned int EntryLo0,
unsigned int EntryLo1);
34 int GetTLBEntry(
unsigned int index,
unsigned int *PageMask,
unsigned int *EntryHi,
unsigned int *EntryLo0,
unsigned int *EntryLo1);
35 int ProbeTLBEntry(
unsigned int EntryHi,
unsigned int *PageMask,
unsigned int *EntryLo0,
unsigned int *EntryLo1);
36 int ExpandScratchPad(
unsigned int page);
42 {0x58, &ProbeTLBEntry},
43 {0x59, &ExpandScratchPad},
50 int _start(
int syscall)
54 for (i = 0; i < 6; i++) {
64 int PutTLBEntry(
unsigned int PageMask,
unsigned int EntryHi,
unsigned int EntryLo0,
unsigned int EntryLo1)
68 switch (EntryHi >> 24) {
78 __asm__ __volatile__(
"tlbwr\n");
80 __asm__ __volatile__(
"tlbp\n");
94 int SetTLBEntry(
unsigned int index,
unsigned int PageMask,
unsigned int EntryHi,
unsigned int EntryLo0,
unsigned int EntryLo1)
105 __asm__ __volatile__(
"tlbwi\n");
116 int GetTLBEntry(
unsigned int index,
unsigned int *PageMask,
unsigned int *EntryHi,
unsigned int *EntryLo0,
unsigned int *EntryLo1)
123 __asm__ __volatile__(
"tlbr\n");
138 int ProbeTLBEntry(
unsigned int EntryHi,
unsigned int *PageMask,
unsigned int *EntryLo0,
unsigned int *EntryLo1)
144 __asm__ __volatile__(
"tlbp\n");
149 __asm__ __volatile__(
"tlbr\n");
163 int ExpandScratchPad(
unsigned int page)
167 if (!(page & 0xFFF)) {
168 if (0xFFFFE < page - 1) {
170 unsigned int PageMask, EntryHi, EntryLo0, EntryLo1;
171 if ((index = ProbeTLBEntry(0x70004000, &PageMask, &EntryLo0, &EntryLo1)) >= 0) {
175 EntryHi = 0xE0010000 + ((index - 1) << 13);
184 __asm__ __volatile__(
"tlbwi\n");
200 EntryHi = 0x70004000;
201 EntryLo0 = ((page + 0x1000) & 0xFFFFF000) >> 6 | 0x1F;
202 EntryLo1 = (page & 0xFFFFF000) >> 6 | 0x1F;
210 __asm__ __volatile__(
"tlbwi\n");