16extern int *__keysUsed;
19#ifdef F___maxTlsValues
22extern int __maxTlsValues;
25#ifdef F___globalTlsLock
26pte_osMutexHandle __globalTlsLock;
28extern pte_osMutexHandle __globalTlsLock;
37extern void *__globalTls;
40#ifdef F_pteTlsGlobalInit
41pte_osResult pteTlsGlobalInit(
int maxEntries)
46 pte_osMutexCreate(&__globalTlsLock);
47 __keysUsed = (
int *)malloc(maxEntries *
sizeof(
int));
49 if (__keysUsed != NULL) {
50 for (i = 0; i < maxEntries; i++) {
54 __maxTlsValues = maxEntries;
57 result = PTE_OS_NO_RESOURCES;
64#ifdef F_pteTlsThreadInit
65void *pteTlsThreadInit(
void)
70 pTlsStruct = (
void **)malloc(__maxTlsValues *
sizeof(
void *));
73 for (i = 0; i < __maxTlsValues; i++) {
77 return (
void *)pTlsStruct;
82pte_osResult __pteTlsAlloc(
unsigned int *pKey)
85 pte_osResult result = PTE_OS_NO_RESOURCES;
87 pte_osMutexLock(__globalTlsLock);
89 for (i = 0; i < __maxTlsValues; i++) {
90 if (__keysUsed[i] == 0) {
99 pte_osMutexUnlock(__globalTlsLock);
103pte_osResult __pteTlsAlloc(
unsigned int *pKey);
106#ifdef F_pteTlsGetValue
107void *pteTlsGetValue(
void *pTlsThreadStruct,
unsigned int index)
109 void **pTls = (
void **)pTlsThreadStruct;
111 if (__keysUsed[index - 1] && pTls != NULL) {
112 return pTls[index - 1];
118void *pteTlsGetValue(
void *pTlsThreadStruct,
unsigned int index);
121#ifdef F___pteTlsSetValue
122pte_osResult __pteTlsSetValue(
void *pTlsThreadStruct,
unsigned int index,
void *value)
125 void **pTls = (
void **)pTlsThreadStruct;
128 pTls[index - 1] = value;
131 result = PTE_OS_INVALID_PARAM;
137pte_osResult __pteTlsSetValue(
void *pTlsThreadStruct,
unsigned int index,
void *value);
140#ifdef F___getTlsStructFromThread
141void *__getTlsStructFromThread(s32 thid)
150 if (threadInfo->tlsPtr) {
151 pTls = threadInfo->tlsPtr;
159void *__getTlsStructFromThread(s32 thid);
163pte_osResult pteTlsFree(
unsigned int index)
167 if (__keysUsed != NULL) {
168 pte_osMutexLock(__globalTlsLock);
169 __keysUsed[index - 1] = 0;
170 pte_osMutexUnlock(__globalTlsLock);
174 result = PTE_OS_GENERAL_FAILURE;
180pte_osResult pteTlsFree(
unsigned int index);
183#ifdef F_pteTlsThreadDestroy
184void pteTlsThreadDestroy(
void *pTlsThreadStruct)
186 free(pTlsThreadStruct);
190#ifdef F_pteTlsGlobalDestroy
191void pteTlsGlobalDestroy(
void)
193 pte_osMutexDelete(__globalTlsLock);
198#ifdef F_pte_osTlsSetValue
199pte_osResult pte_osTlsSetValue(
unsigned int key,
void * value)
203 pTls = __getTlsStructFromThread(GetThreadId());
205 return __pteTlsSetValue(pTls, key, value);
209#ifdef F_pte_osTlsGetValue
210void * pte_osTlsGetValue(
unsigned int index)
214 pTls = __getTlsStructFromThread(GetThreadId());
216 return (
void *) pteTlsGetValue(pTls, index);
221#ifdef F_pte_osTlsAlloc
222pte_osResult pte_osTlsAlloc(
unsigned int *pKey)
224 __getTlsStructFromThread(GetThreadId());
226 return __pteTlsAlloc(pKey);
231#ifdef F_pte_osTlsFree
232pte_osResult pte_osTlsFree(
unsigned int index)
234 return pteTlsFree(index);