diff options
Diffstat (limited to '3rdparty/SDL2/src/thread/psp')
-rw-r--r-- | 3rdparty/SDL2/src/thread/psp/SDL_syscond.c | 224 | ||||
-rw-r--r-- | 3rdparty/SDL2/src/thread/psp/SDL_sysmutex.c | 136 | ||||
-rw-r--r-- | 3rdparty/SDL2/src/thread/psp/SDL_sysmutex_c.h | 22 | ||||
-rw-r--r-- | 3rdparty/SDL2/src/thread/psp/SDL_syssem.c | 161 | ||||
-rw-r--r-- | 3rdparty/SDL2/src/thread/psp/SDL_systhread.c | 112 | ||||
-rw-r--r-- | 3rdparty/SDL2/src/thread/psp/SDL_systhread_c.h | 24 |
6 files changed, 0 insertions, 679 deletions
diff --git a/3rdparty/SDL2/src/thread/psp/SDL_syscond.c b/3rdparty/SDL2/src/thread/psp/SDL_syscond.c deleted file mode 100644 index a84b206c8ae..00000000000 --- a/3rdparty/SDL2/src/thread/psp/SDL_syscond.c +++ /dev/null @@ -1,224 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ -#include "../../SDL_internal.h" - -#if SDL_THREAD_PSP - -/* An implementation of condition variables using semaphores and mutexes */ -/* - This implementation borrows heavily from the BeOS condition variable - implementation, written by Christopher Tate and Owen Smith. Thanks! - */ - -#include "SDL_thread.h" - -struct SDL_cond -{ - SDL_mutex *lock; - int waiting; - int signals; - SDL_sem *wait_sem; - SDL_sem *wait_done; -}; - -/* Create a condition variable */ -SDL_cond * -SDL_CreateCond(void) -{ - SDL_cond *cond; - - cond = (SDL_cond *) SDL_malloc(sizeof(SDL_cond)); - if (cond) { - cond->lock = SDL_CreateMutex(); - cond->wait_sem = SDL_CreateSemaphore(0); - cond->wait_done = SDL_CreateSemaphore(0); - cond->waiting = cond->signals = 0; - if (!cond->lock || !cond->wait_sem || !cond->wait_done) { - SDL_DestroyCond(cond); - cond = NULL; - } - } else { - SDL_OutOfMemory(); - } - return (cond); -} - -/* Destroy a condition variable */ -void -SDL_DestroyCond(SDL_cond * cond) -{ - if (cond) { - if (cond->wait_sem) { - SDL_DestroySemaphore(cond->wait_sem); - } - if (cond->wait_done) { - SDL_DestroySemaphore(cond->wait_done); - } - if (cond->lock) { - SDL_DestroyMutex(cond->lock); - } - SDL_free(cond); - } -} - -/* Restart one of the threads that are waiting on the condition variable */ -int -SDL_CondSignal(SDL_cond * cond) -{ - if (!cond) { - return SDL_SetError("Passed a NULL condition variable"); - } - - /* If there are waiting threads not already signalled, then - signal the condition and wait for the thread to respond. - */ - SDL_LockMutex(cond->lock); - if (cond->waiting > cond->signals) { - ++cond->signals; - SDL_SemPost(cond->wait_sem); - SDL_UnlockMutex(cond->lock); - SDL_SemWait(cond->wait_done); - } else { - SDL_UnlockMutex(cond->lock); - } - - return 0; -} - -/* Restart all threads that are waiting on the condition variable */ -int -SDL_CondBroadcast(SDL_cond * cond) -{ - if (!cond) { - return SDL_SetError("Passed a NULL condition variable"); - } - - /* If there are waiting threads not already signalled, then - signal the condition and wait for the thread to respond. - */ - SDL_LockMutex(cond->lock); - if (cond->waiting > cond->signals) { - int i, num_waiting; - - num_waiting = (cond->waiting - cond->signals); - cond->signals = cond->waiting; - for (i = 0; i < num_waiting; ++i) { - SDL_SemPost(cond->wait_sem); - } - /* Now all released threads are blocked here, waiting for us. - Collect them all (and win fabulous prizes!) :-) - */ - SDL_UnlockMutex(cond->lock); - for (i = 0; i < num_waiting; ++i) { - SDL_SemWait(cond->wait_done); - } - } else { - SDL_UnlockMutex(cond->lock); - } - - return 0; -} - -/* Wait on the condition variable for at most 'ms' milliseconds. - The mutex must be locked before entering this function! - The mutex is unlocked during the wait, and locked again after the wait. - -Typical use: - -Thread A: - SDL_LockMutex(lock); - while ( ! condition ) { - SDL_CondWait(cond, lock); - } - SDL_UnlockMutex(lock); - -Thread B: - SDL_LockMutex(lock); - ... - condition = true; - ... - SDL_CondSignal(cond); - SDL_UnlockMutex(lock); - */ -int -SDL_CondWaitTimeout(SDL_cond * cond, SDL_mutex * mutex, Uint32 ms) -{ - int retval; - - if (!cond) { - return SDL_SetError("Passed a NULL condition variable"); - } - - /* Obtain the protection mutex, and increment the number of waiters. - This allows the signal mechanism to only perform a signal if there - are waiting threads. - */ - SDL_LockMutex(cond->lock); - ++cond->waiting; - SDL_UnlockMutex(cond->lock); - - /* Unlock the mutex, as is required by condition variable semantics */ - SDL_UnlockMutex(mutex); - - /* Wait for a signal */ - if (ms == SDL_MUTEX_MAXWAIT) { - retval = SDL_SemWait(cond->wait_sem); - } else { - retval = SDL_SemWaitTimeout(cond->wait_sem, ms); - } - - /* Let the signaler know we have completed the wait, otherwise - the signaler can race ahead and get the condition semaphore - if we are stopped between the mutex unlock and semaphore wait, - giving a deadlock. See the following URL for details: - http://www-classic.be.com/aboutbe/benewsletter/volume_III/Issue40.html - */ - SDL_LockMutex(cond->lock); - if (cond->signals > 0) { - /* If we timed out, we need to eat a condition signal */ - if (retval > 0) { - SDL_SemWait(cond->wait_sem); - } - /* We always notify the signal thread that we are done */ - SDL_SemPost(cond->wait_done); - - /* Signal handshake complete */ - --cond->signals; - } - --cond->waiting; - SDL_UnlockMutex(cond->lock); - - /* Lock the mutex, as is required by condition variable semantics */ - SDL_LockMutex(mutex); - - return retval; -} - -/* Wait on the condition variable forever */ -int -SDL_CondWait(SDL_cond * cond, SDL_mutex * mutex) -{ - return SDL_CondWaitTimeout(cond, mutex, SDL_MUTEX_MAXWAIT); -} - -#endif /* SDL_THREAD_PSP */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/3rdparty/SDL2/src/thread/psp/SDL_sysmutex.c b/3rdparty/SDL2/src/thread/psp/SDL_sysmutex.c deleted file mode 100644 index 78129fa69ae..00000000000 --- a/3rdparty/SDL2/src/thread/psp/SDL_sysmutex.c +++ /dev/null @@ -1,136 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ -#include "../../SDL_internal.h" - -#if SDL_THREAD_PSP - -/* An implementation of mutexes using semaphores */ - -#include "SDL_thread.h" -#include "SDL_systhread_c.h" - - -struct SDL_mutex -{ - int recursive; - SDL_threadID owner; - SDL_sem *sem; -}; - -/* Create a mutex */ -SDL_mutex * -SDL_CreateMutex(void) -{ - SDL_mutex *mutex; - - /* Allocate mutex memory */ - mutex = (SDL_mutex *) SDL_malloc(sizeof(*mutex)); - if (mutex) { - /* Create the mutex semaphore, with initial value 1 */ - mutex->sem = SDL_CreateSemaphore(1); - mutex->recursive = 0; - mutex->owner = 0; - if (!mutex->sem) { - SDL_free(mutex); - mutex = NULL; - } - } else { - SDL_OutOfMemory(); - } - return mutex; -} - -/* Free the mutex */ -void -SDL_DestroyMutex(SDL_mutex * mutex) -{ - if (mutex) { - if (mutex->sem) { - SDL_DestroySemaphore(mutex->sem); - } - SDL_free(mutex); - } -} - -/* Lock the semaphore */ -int -SDL_mutexP(SDL_mutex * mutex) -{ -#if SDL_THREADS_DISABLED - return 0; -#else - SDL_threadID this_thread; - - if (mutex == NULL) { - return SDL_SetError("Passed a NULL mutex"); - } - - this_thread = SDL_ThreadID(); - if (mutex->owner == this_thread) { - ++mutex->recursive; - } else { - /* The order of operations is important. - We set the locking thread id after we obtain the lock - so unlocks from other threads will fail. - */ - SDL_SemWait(mutex->sem); - mutex->owner = this_thread; - mutex->recursive = 0; - } - - return 0; -#endif /* SDL_THREADS_DISABLED */ -} - -/* Unlock the mutex */ -int -SDL_mutexV(SDL_mutex * mutex) -{ -#if SDL_THREADS_DISABLED - return 0; -#else - if (mutex == NULL) { - return SDL_SetError("Passed a NULL mutex"); - } - - /* If we don't own the mutex, we can't unlock it */ - if (SDL_ThreadID() != mutex->owner) { - return SDL_SetError("mutex not owned by this thread"); - } - - if (mutex->recursive) { - --mutex->recursive; - } else { - /* The order of operations is important. - First reset the owner so another thread doesn't lock - the mutex and set the ownership before we reset it, - then release the lock semaphore. - */ - mutex->owner = 0; - SDL_SemPost(mutex->sem); - } - return 0; -#endif /* SDL_THREADS_DISABLED */ -} - -#endif /* SDL_THREAD_PSP */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/3rdparty/SDL2/src/thread/psp/SDL_sysmutex_c.h b/3rdparty/SDL2/src/thread/psp/SDL_sysmutex_c.h deleted file mode 100644 index 9dba5e16c51..00000000000 --- a/3rdparty/SDL2/src/thread/psp/SDL_sysmutex_c.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ -#include "../../SDL_internal.h" -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/3rdparty/SDL2/src/thread/psp/SDL_syssem.c b/3rdparty/SDL2/src/thread/psp/SDL_syssem.c deleted file mode 100644 index 643406c46ee..00000000000 --- a/3rdparty/SDL2/src/thread/psp/SDL_syssem.c +++ /dev/null @@ -1,161 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ -#include "../../SDL_internal.h" - -#if SDL_THREAD_PSP - -/* Semaphore functions for the PSP. */ - -#include <stdio.h> -#include <stdlib.h> - -#include "SDL_error.h" -#include "SDL_thread.h" - -#include <pspthreadman.h> -#include <pspkerror.h> - -struct SDL_semaphore { - SceUID semid; -}; - - -/* Create a semaphore */ -SDL_sem *SDL_CreateSemaphore(Uint32 initial_value) -{ - SDL_sem *sem; - - sem = (SDL_sem *) malloc(sizeof(*sem)); - if (sem != NULL) { - /* TODO: Figure out the limit on the maximum value. */ - sem->semid = sceKernelCreateSema("SDL sema", 0, initial_value, 255, NULL); - if (sem->semid < 0) { - SDL_SetError("Couldn't create semaphore"); - free(sem); - sem = NULL; - } - } else { - SDL_OutOfMemory(); - } - - return sem; -} - -/* Free the semaphore */ -void SDL_DestroySemaphore(SDL_sem *sem) -{ - if (sem != NULL) { - if (sem->semid > 0) { - sceKernelDeleteSema(sem->semid); - sem->semid = 0; - } - - free(sem); - } -} - -/* TODO: This routine is a bit overloaded. - * If the timeout is 0 then just poll the semaphore; if it's SDL_MUTEX_MAXWAIT, pass - * NULL to sceKernelWaitSema() so that it waits indefinitely; and if the timeout - * is specified, convert it to microseconds. */ -int SDL_SemWaitTimeout(SDL_sem *sem, Uint32 timeout) -{ - Uint32 *pTimeout; - int res; - - if (sem == NULL) { - SDL_SetError("Passed a NULL sem"); - return 0; - } - - if (timeout == 0) { - res = sceKernelPollSema(sem->semid, 1); - if (res < 0) { - return SDL_MUTEX_TIMEDOUT; - } - return 0; - } - - if (timeout == SDL_MUTEX_MAXWAIT) { - pTimeout = NULL; - } else { - timeout *= 1000; /* Convert to microseconds. */ - pTimeout = &timeout; - } - - res = sceKernelWaitSema(sem->semid, 1, pTimeout); - switch (res) { - case SCE_KERNEL_ERROR_OK: - return 0; - case SCE_KERNEL_ERROR_WAIT_TIMEOUT: - return SDL_MUTEX_TIMEDOUT; - default: - return SDL_SetError("WaitForSingleObject() failed"); - } -} - -int SDL_SemTryWait(SDL_sem *sem) -{ - return SDL_SemWaitTimeout(sem, 0); -} - -int SDL_SemWait(SDL_sem *sem) -{ - return SDL_SemWaitTimeout(sem, SDL_MUTEX_MAXWAIT); -} - -/* Returns the current count of the semaphore */ -Uint32 SDL_SemValue(SDL_sem *sem) -{ - SceKernelSemaInfo info; - - if (sem == NULL) { - SDL_SetError("Passed a NULL sem"); - return 0; - } - - if (sceKernelReferSemaStatus(sem->semid, &info) >= 0) { - return info.currentCount; - } - - return 0; -} - -int SDL_SemPost(SDL_sem *sem) -{ - int res; - - if (sem == NULL) { - return SDL_SetError("Passed a NULL sem"); - } - - res = sceKernelSignalSema(sem->semid, 1); - if (res < 0) { - return SDL_SetError("sceKernelSignalSema() failed"); - } - - return 0; -} - -#endif /* SDL_THREAD_PSP */ - -/* vim: ts=4 sw=4 - */ diff --git a/3rdparty/SDL2/src/thread/psp/SDL_systhread.c b/3rdparty/SDL2/src/thread/psp/SDL_systhread.c deleted file mode 100644 index c6003b8ed50..00000000000 --- a/3rdparty/SDL2/src/thread/psp/SDL_systhread.c +++ /dev/null @@ -1,112 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ -#include "../../SDL_internal.h" - -#if SDL_THREAD_PSP - -/* PSP thread management routines for SDL */ - -#include <stdio.h> -#include <stdlib.h> - -#include "SDL_error.h" -#include "SDL_thread.h" -#include "../SDL_systhread.h" -#include "../SDL_thread_c.h" -#include <pspkerneltypes.h> -#include <pspthreadman.h> - - -static int ThreadEntry(SceSize args, void *argp) -{ - SDL_RunThread(*(void **) argp); - return 0; -} - -int SDL_SYS_CreateThread(SDL_Thread *thread, void *args) -{ - SceKernelThreadInfo status; - int priority = 32; - - /* Set priority of new thread to the same as the current thread */ - status.size = sizeof(SceKernelThreadInfo); - if (sceKernelReferThreadStatus(sceKernelGetThreadId(), &status) == 0) { - priority = status.currentPriority; - } - - thread->handle = sceKernelCreateThread(thread->name, ThreadEntry, - priority, thread->stacksize ? ((int) thread->stacksize) : 0x8000, - PSP_THREAD_ATTR_VFPU, NULL); - if (thread->handle < 0) { - return SDL_SetError("sceKernelCreateThread() failed"); - } - - sceKernelStartThread(thread->handle, 4, &args); - return 0; -} - -void SDL_SYS_SetupThread(const char *name) -{ - /* Do nothing. */ -} - -SDL_threadID SDL_ThreadID(void) -{ - return (SDL_threadID) sceKernelGetThreadId(); -} - -void SDL_SYS_WaitThread(SDL_Thread *thread) -{ - sceKernelWaitThreadEnd(thread->handle, NULL); - sceKernelDeleteThread(thread->handle); -} - -void SDL_SYS_DetachThread(SDL_Thread *thread) -{ - /* !!! FIXME: is this correct? */ - sceKernelDeleteThread(thread->handle); -} - -void SDL_SYS_KillThread(SDL_Thread *thread) -{ - sceKernelTerminateDeleteThread(thread->handle); -} - -int SDL_SYS_SetThreadPriority(SDL_ThreadPriority priority) -{ - int value; - - if (priority == SDL_THREAD_PRIORITY_LOW) { - value = 19; - } else if (priority == SDL_THREAD_PRIORITY_HIGH) { - value = -20; - } else { - value = 0; - } - - return sceKernelChangeThreadPriority(sceKernelGetThreadId(),value); - -} - -#endif /* SDL_THREAD_PSP */ - -/* vim: ts=4 sw=4 - */ diff --git a/3rdparty/SDL2/src/thread/psp/SDL_systhread_c.h b/3rdparty/SDL2/src/thread/psp/SDL_systhread_c.h deleted file mode 100644 index 4f74df06aa7..00000000000 --- a/3rdparty/SDL2/src/thread/psp/SDL_systhread_c.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -#include <pspkerneltypes.h> - -typedef SceUID SYS_ThreadHandle; |