ps2sdk  1.1
A collection of Open Source libraries used for developing applications on Sony's PlayStation 2® (PS2).
tlbfunc.c File Reference
#include <kernel.h>
#include <stdio.h>
+ Include dependency graph for tlbfunc.c:

Go to the source code of this file.

Data Structures

struct  SyscallData
 
struct  TLBEntry
 
struct  TLBInfo
 

Macros

#define kprintf(args...)
 
#define TLB_NUM_KERNEL_ENTRIES   0x0D
 
#define TLB_NUM_DEFAULT_ENTRIES   0x12
 
#define TLB_NUM_EXTENDED_ENTRIES   0x08
 

Functions

static int InitTLB32MB (void)
 
void * GetEntryAddress (int syscall)
 
void setup (int syscall, void *function)
 
void InitTLBFunctions (void)
 
void InitTLB (void)
 

Variables

static const struct SyscallData SysEntry []
 
char ** _kExecArg
 
unsigned char tlbsrc []
 
unsigned int size_tlbsrc
 
static const struct TLBEntry kernelTLB [TLB_NUM_KERNEL_ENTRIES]
 
static const struct TLBEntry defaultTLB [TLB_NUM_DEFAULT_ENTRIES]
 
static const struct TLBEntry extendTLB [TLB_NUM_EXTENDED_ENTRIES]
 
static struct TLBInfo TLBInfo ={TLB_NUM_KERNEL_ENTRIES, TLB_NUM_DEFAULT_ENTRIES, TLB_NUM_EXTENDED_ENTRIES, 0, kernelTLB, defaultTLB, extendTLB}
 

Macro Definition Documentation

◆ kprintf

#define kprintf (   args...)

Definition at line 13 of file tlbfunc.c.

◆ TLB_NUM_DEFAULT_ENTRIES

#define TLB_NUM_DEFAULT_ENTRIES   0x12

Definition at line 84 of file tlbfunc.c.

◆ TLB_NUM_EXTENDED_ENTRIES

#define TLB_NUM_EXTENDED_ENTRIES   0x08

Definition at line 85 of file tlbfunc.c.

◆ TLB_NUM_KERNEL_ENTRIES

#define TLB_NUM_KERNEL_ENTRIES   0x0D

Definition at line 83 of file tlbfunc.c.

Function Documentation

◆ GetEntryAddress()

void* GetEntryAddress ( int  syscall)

Referenced by InitTLBFunctions().

◆ InitTLB()

void InitTLB ( void  )

Definition at line 57 of file tlbfunc.c.

57  {
58  if(GetMemorySize()==0x2000000){
59  InitTLB32MB();
60  }
61  else{
62  _InitTLB();
63  }
64 }
int _InitTLB(void)
s32 GetMemorySize(void)
static int InitTLB32MB(void)
Definition: tlbfunc.c:142

◆ InitTLB32MB()

static int InitTLB32MB ( void  )
static

Definition at line 142 of file tlbfunc.c.

142  {
143  unsigned int i, NumTlbEntries, value, TlbEndIndex;
144  const struct TLBEntry *TLBEntry;
145 
147 
148  __asm volatile( "mtc0 $zero, $6\n"
149  "sync.p\n");
150 
151  if(TLBInfo.NumKernelTLBEntries>=0x31){
152  kprintf("# TLB over flow (1)");
153  Exit(1);
154  }
155 
158  }
159 
160  if(TLBInfo.NumDefaultTLBEntries+i>=0x31){
161  kprintf("# TLB over flow (2)");
162  Exit(1);
163  }
164 
165  for(TLBEntry=TLBInfo.defaultTLB,TlbEndIndex=TLBInfo.NumDefaultTLBEntries+i; i<TlbEndIndex; i++,TLBEntry++){
167  }
168 
169  TLBInfo.NumWiredEntries=NumTlbEntries=i;
170  __asm volatile( "mtc0 %0, $6\n"
171  "sync.p\n" ::"r"(NumTlbEntries));
172 
174  if(TLBInfo.NumExtendedTLBEntries+i>=0x31){
175  kprintf("# TLB over flow (3)");
176  Exit(1);
177  }
178 
179  for(TLBEntry=TLBInfo.extendedTLB,TlbEndIndex=TLBInfo.NumExtendedTLBEntries+i; i<TlbEndIndex; i++,TLBEntry++,NumTlbEntries++){
181  }
182  }
183 
184  for(value=0xE0000000+(NumTlbEntries<<13); i<0x30; i++,value+=0x2000){
185  _SetTLBEntry(i, 0, value, 0, 0);
186  }
187 
188  return NumTlbEntries;
189 }
void Exit(s32 exit_code)
int _SetTLBEntry(unsigned int index, unsigned int PageMask, unsigned int EntryHi, unsigned int EntryLo0, unsigned int EntryLo1)
unsigned int EntryLo0
Definition: tlbfunc.c:69
unsigned int EntryHi
Definition: tlbfunc.c:68
unsigned int EntryLo1
Definition: tlbfunc.c:70
unsigned int PageMask
Definition: tlbfunc.c:67
const struct TLBEntry * extendedTLB
Definition: tlbfunc.c:80
unsigned int NumKernelTLBEntries
Definition: tlbfunc.c:74
const struct TLBEntry * defaultTLB
Definition: tlbfunc.c:79
unsigned int NumWiredEntries
Definition: tlbfunc.c:77
unsigned int NumDefaultTLBEntries
Definition: tlbfunc.c:75
unsigned int NumExtendedTLBEntries
Definition: tlbfunc.c:76
const struct TLBEntry * kernelTLB
Definition: tlbfunc.c:78
#define kprintf(args...)
Definition: tlbfunc.c:13

References _SetTLBEntry(), TLBInfo::defaultTLB, TLBEntry::EntryHi, TLBEntry::EntryLo0, TLBEntry::EntryLo1, Exit(), TLBInfo::extendedTLB, TLBInfo::kernelTLB, kprintf, TLBInfo::NumDefaultTLBEntries, TLBInfo::NumExtendedTLBEntries, TLBInfo::NumKernelTLBEntries, TLBInfo::NumWiredEntries, and TLBEntry::PageMask.

◆ InitTLBFunctions()

void InitTLBFunctions ( void  )

Definition at line 41 of file tlbfunc.c.

41  {
42  int i;
43 
44  setup(SysEntry[0].syscall, SysEntry[0].function);
45  Copy((void*)0x80075000, tlbsrc, size_tlbsrc);
46  FlushCache(0);
47  FlushCache(2);
48  setup(SysEntry[1].syscall, SysEntry[1].function);
49 
50  for(i=3; i<8; i++){
51  setup(SysEntry[i].syscall, GetEntryAddress(SysEntry[i].syscall));
52  }
53 
55 }
int Copy(void *dest, const void *src, int size)
void FlushCache(s32 operation)
void * GetEntryAddress(int syscall)
static const struct SyscallData SysEntry[]
Definition: tlbfunc.c:22
unsigned char tlbsrc[]
void setup(int syscall, void *function)
char ** _kExecArg
Definition: tlbsrc.c:26
unsigned int size_tlbsrc

References _kExecArg, Copy(), FlushCache(), GetEntryAddress(), setup(), size_tlbsrc, SyscallData::syscall, SysEntry, and tlbsrc.

◆ setup()

void setup ( int  syscall,
void *  function 
)

Referenced by InitTLBFunctions().

Variable Documentation

◆ _kExecArg

char** _kExecArg
extern

Definition at line 26 of file tlbsrc.c.

Referenced by InitTLBFunctions().

◆ defaultTLB

const struct TLBEntry defaultTLB[TLB_NUM_DEFAULT_ENTRIES]
static
Initial value:
={
{0x0007E000, 0x00080000, 0x0000201F, 0x0000301F},
{0x0007E000, 0x00100000, 0x0000401F, 0x0000501F},
{0x0007E000, 0x00180000, 0x0000601F, 0x0000701F},
{0x001FE000, 0x00200000, 0x0000801F, 0x0000C01F},
{0x001FE000, 0x00400000, 0x0001001F, 0x0001401F},
{0x001FE000, 0x00600000, 0x0001801F, 0x0001C01F},
{0x007FE000, 0x00800000, 0x0002001F, 0x0003001F},
{0x007FE000, 0x01000000, 0x0004001F, 0x0005001F},
{0x007FE000, 0x01800000, 0x0006001F, 0x0007001F},
{0x0007E000, 0x20080000, 0x00002017, 0x00003017},
{0x0007E000, 0x20100000, 0x00004017, 0x00005017},
{0x0007E000, 0x20180000, 0x00006017, 0x00007017},
{0x001FE000, 0x20200000, 0x00008017, 0x0000C017},
{0x001FE000, 0x20400000, 0x00010017, 0x00014017},
{0x001FE000, 0x20600000, 0x00018017, 0x0001C017},
{0x007FE000, 0x20800000, 0x00020017, 0x00030017},
{0x007FE000, 0x21000000, 0x00040017, 0x00050017},
{0x007FE000, 0x21800000, 0x00060017, 0x00070017}
}

Definition at line 57 of file tlbfunc.c.

◆ extendTLB

const struct TLBEntry extendTLB[TLB_NUM_EXTENDED_ENTRIES]
static
Initial value:
={
{0x0007E000, 0x30100000, 0x0000403F, 0x0000503F},
{0x0007E000, 0x30180000, 0x0000603F, 0x0000703F},
{0x001FE000, 0x30200000, 0x0000803F, 0x0000C03F},
{0x001FE000, 0x30400000, 0x0001003F, 0x0001403F},
{0x001FE000, 0x30600000, 0x0001803F, 0x0001C03F},
{0x007FE000, 0x30800000, 0x0002003F, 0x0003003F},
{0x007FE000, 0x31000000, 0x0004003F, 0x0005003F},
{0x007FE000, 0x31800000, 0x0006003F, 0x0007003F}
}

Definition at line 57 of file tlbfunc.c.

◆ kernelTLB

const struct TLBEntry kernelTLB[TLB_NUM_KERNEL_ENTRIES]
static
Initial value:
={
{0x00000000, 0x70000000, 0x80000007, 0x00000007},
{0x00006000, 0xFFFF8000, 0x00001E1F, 0x00001F1F},
{0x00000000, 0x10000000, 0x00400017, 0x00400053},
{0x00000000, 0x10002000, 0x00400097, 0x004000D7},
{0x00000000, 0x10004000, 0x00400117, 0x00400157},
{0x00000000, 0x10006000, 0x00400197, 0x004001D7},
{0x00000000, 0x10008000, 0x00400217, 0x00400257},
{0x00000000, 0x1000A000, 0x00400297, 0x004002D7},
{0x00000000, 0x1000C000, 0x00400313, 0x00400357},
{0x00000000, 0x1000E000, 0x00400397, 0x004003D7},
{0x0001E000, 0x11000000, 0x00440017, 0x00440415},
{0x0001E000, 0x12000000, 0x00480017, 0x00480415},
{0x01FFE000, 0x1E000000, 0x00780017, 0x007C0017}
}

Definition at line 57 of file tlbfunc.c.

◆ size_tlbsrc

unsigned int size_tlbsrc
extern

Referenced by InitTLBFunctions().

◆ SysEntry

const struct SyscallData SysEntry[]
static
Initial value:
={
{0x5A, &kCopy},
{0x5B, (void*)0x80075000},
{0x54, NULL},
{0x55, NULL},
{0x56, NULL},
{0x57, NULL},
{0x58, NULL},
{0x59, NULL},
}
int kCopy(void *dest, const void *src, int size)
#define NULL
Definition: tamtypes.h:91

Definition at line 15 of file tlbfunc.c.

Referenced by InitTLBFunctions().

◆ TLBInfo

◆ tlbsrc

unsigned char tlbsrc[]
extern

Referenced by InitTLBFunctions().