some Wii U changes

This commit is contained in:
GaryOderNichts 2021-06-05 01:59:58 +02:00
parent 0c66a50e2d
commit e5b39af6a5
4 changed files with 23 additions and 19 deletions

View File

@ -69,6 +69,9 @@ DWORD WINAPI ThreadProc(LPVOID lpParameter) {
#elif defined(__vita__) #elif defined(__vita__)
int ThreadProc(SceSize args, void *argp) { int ThreadProc(SceSize args, void *argp) {
struct thread_context* ctx = (struct thread_context*)argp; struct thread_context* ctx = (struct thread_context*)argp;
#elif defined(__WIIU__)
int ThreadProc(int argc, const char** argv) {
struct thread_context* ctx = (struct thread_context*)argv;
#else #else
void* ThreadProc(void* context) { void* ThreadProc(void* context) {
struct thread_context* ctx = (struct thread_context*)context; struct thread_context* ctx = (struct thread_context*)context;
@ -88,7 +91,7 @@ void* ThreadProc(void* context) {
free(ctx); free(ctx);
#endif #endif
#if defined(LC_WINDOWS) || defined(__vita__) #if defined(LC_WINDOWS) || defined(__vita__) || defined(__WIIU__)
return 0; return 0;
#else #else
return NULL; return NULL;
@ -123,7 +126,7 @@ int PltCreateMutex(PLT_MUTEX* mutex) {
return -1; return -1;
} }
#elif defined(__WIIU__) #elif defined(__WIIU__)
OSInitMutex(mutex); OSFastMutex_Init(mutex, "");
#else #else
int err = pthread_mutex_init(mutex, NULL); int err = pthread_mutex_init(mutex, NULL);
if (err != 0) { if (err != 0) {
@ -153,7 +156,7 @@ void PltLockMutex(PLT_MUTEX* mutex) {
#elif defined(__vita__) #elif defined(__vita__)
sceKernelLockMutex(*mutex, 1, NULL); sceKernelLockMutex(*mutex, 1, NULL);
#elif defined(__WIIU__) #elif defined(__WIIU__)
OSLockMutex(mutex); OSFastMutex_Lock(mutex);
#else #else
pthread_mutex_lock(mutex); pthread_mutex_lock(mutex);
#endif #endif
@ -165,7 +168,7 @@ void PltUnlockMutex(PLT_MUTEX* mutex) {
#elif defined(__vita__) #elif defined(__vita__)
sceKernelUnlockMutex(*mutex, 1); sceKernelUnlockMutex(*mutex, 1);
#elif defined(__WIIU__) #elif defined(__WIIU__)
OSUnlockMutex(mutex); OSFastMutex_Unlock(mutex);
#else #else
pthread_mutex_unlock(mutex); pthread_mutex_unlock(mutex);
#endif #endif
@ -249,8 +252,8 @@ int PltCreateThread(const char* name, ThreadEntry entry, void* context, PLT_THRE
void* stack_addr = (uint8_t *)memalign(8, stack_size) + stack_size; void* stack_addr = (uint8_t *)memalign(8, stack_size) + stack_size;
if (!OSCreateThread(&thread->thread, if (!OSCreateThread(&thread->thread,
(OSThreadEntryPointFn)ThreadProc, ThreadProc,
(int)ctx, NULL, 0, (char*)ctx,
stack_addr, stack_size, stack_addr, stack_size,
0x10, OS_THREAD_ATTRIB_AFFINITY_ANY)) 0x10, OS_THREAD_ATTRIB_AFFINITY_ANY))
{ {
@ -293,8 +296,8 @@ int PltCreateEvent(PLT_EVENT* event) {
} }
event->signalled = false; event->signalled = false;
#elif defined(__WIIU__) #elif defined(__WIIU__)
OSInitMutex(&event->mutex); OSFastMutex_Init(&event->mutex, "");
OSInitCond(&event->cond); OSFastCond_Init(&event->cond, "");
#else #else
pthread_mutex_init(&event->mutex, NULL); pthread_mutex_init(&event->mutex, NULL);
pthread_cond_init(&event->cond, NULL); pthread_cond_init(&event->cond, NULL);
@ -328,10 +331,10 @@ void PltSetEvent(PLT_EVENT* event) {
sceKernelUnlockMutex(event->mutex, 1); sceKernelUnlockMutex(event->mutex, 1);
sceKernelSignalCondAll(event->cond); sceKernelSignalCondAll(event->cond);
#elif defined(__WIIU__) #elif defined(__WIIU__)
OSLockMutex(&event->mutex); OSFastMutex_Lock(&event->mutex);
event->signalled = 1; event->signalled = 1;
OSUnlockMutex(&event->mutex); OSFastMutex_Unlock(&event->mutex);
OSSignalCond(&event->cond); OSFastCond_Signal(&event->cond);
#else #else
pthread_mutex_lock(&event->mutex); pthread_mutex_lock(&event->mutex);
event->signalled = true; event->signalled = true;
@ -369,11 +372,11 @@ int PltWaitForEvent(PLT_EVENT* event) {
return PLT_WAIT_SUCCESS; return PLT_WAIT_SUCCESS;
#elif defined(__WIIU__) #elif defined(__WIIU__)
OSLockMutex(&event->mutex); OSFastMutex_Lock(&event->mutex);
while (!event->signalled) { while (!event->signalled) {
OSWaitCond(&event->cond, &event->mutex); OSFastCond_Wait(&event->cond, &event->mutex);
} }
OSUnlockMutex(&event->mutex); OSFastMutex_Unlock(&event->mutex);
return PLT_WAIT_SUCCESS; return PLT_WAIT_SUCCESS;
#else #else

View File

@ -30,8 +30,8 @@
#include <netinet/in.h> #include <netinet/in.h>
#include <malloc.h> #include <malloc.h>
#include <coreinit/thread.h> #include <coreinit/thread.h>
#include <coreinit/mutex.h> #include <coreinit/fastmutex.h>
#include <coreinit/condition.h> #include <coreinit/fastcondition.h>
#else #else
#include <unistd.h> #include <unistd.h>
#include <pthread.h> #include <pthread.h>

View File

@ -66,6 +66,7 @@ int setNonFatalRecvTimeoutMs(SOCKET s, int timeoutMs) {
return setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, (char*)&timeoutMs, sizeof(timeoutMs)); return setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, (char*)&timeoutMs, sizeof(timeoutMs));
#elif defined(__WIIU__) #elif defined(__WIIU__)
// timeouts aren't supported on Wii U // timeouts aren't supported on Wii U
return -1;
#else #else
struct timeval val; struct timeval val;

View File

@ -26,10 +26,10 @@ typedef struct _PLT_THREAD {
bool alive; bool alive;
} PLT_THREAD; } PLT_THREAD;
#elif defined(__WIIU__) #elif defined(__WIIU__)
typedef OSMutex PLT_MUTEX; typedef OSFastMutex PLT_MUTEX;
typedef struct _PLT_EVENT { typedef struct _PLT_EVENT {
OSMutex mutex; OSFastMutex mutex;
OSCondition cond; OSFastCondition cond;
int signalled; int signalled;
} PLT_EVENT; } PLT_EVENT;
typedef struct _PLT_THREAD { typedef struct _PLT_THREAD {