diff --git a/Makefile.ps3 b/Makefile.ps3 index 7de6b66635..52939d2bdd 100644 --- a/Makefile.ps3 +++ b/Makefile.ps3 @@ -67,7 +67,7 @@ endif PPU_LDLIBS = -ldbgfont $(GL_LIBS) -lretroarch_ps3 -lretro_ps3 -lcgc -lgcm_cmd -lgcm_sys_stub -lresc_stub -lm -lio_stub -lfs_stub -lsysutil_stub -lsysutil_game_stub -lsysutil_screenshot_stub -lsysutil_np_stub -lpngdec_stub -ljpgdec_stub -lsysmodule_stub -laudio_stub -lnet_stub -lnetctl_stub -lpthread -DEFINES += -DHAVE_DEFAULT_RETROPAD_INPUT -DRARCH_CONSOLE -DHAVE_OPENGL -DHAVE_OPENGL_TEXREF -DHAVE_HEADSET -DHAVE_VID_CONTEXT -DHAVE_OPENGLES -DHAVE_CG -DHAVE_CG_MENU -DHAVE_FILEBROWSER -DHAVE_HDD_CACHE_PARTITION -DHAVE_FBO -DHAVE_RARCH_MAIN_WRAP -DHAVE_SYSMODULES -DHAVE_SYSUTILS -DHAVE_RARCH_EXEC -DHAVE_RGL -DHAVE_LIBRETRO_MANAGEMENT -DHAVE_RSOUND -DHAVE_ZLIB -D__CELLOS_LV2__ -DHAVE_CONFIGFILE=1 -DHAVE_NETPLAY=1 -DHAVE_SOCKET_LEGACY=1 -DHAVE_OSKUTIL -DHAVE_MOUSE -DHAVE_GRIFFIN=1 -DHAVE_MULTIMAN=1 -DPACKAGE_VERSION=\"$(RARCH_VERSION)\" -Dmain=rarch_main -DPC_DEVELOPMENT_IP_ADDRESS=\"$(PC_DEVELOPMENT_IP_ADDRESS)\" -DPC_DEVELOPMENT_UDP_PORT=$(PC_DEVELOPMENT_UDP_PORT) +DEFINES += -DHAVE_DEFAULT_RETROPAD_INPUT -DHAVE_THREAD -DRARCH_CONSOLE -DHAVE_OPENGL -DHAVE_OPENGL_TEXREF -DHAVE_HEADSET -DHAVE_VID_CONTEXT -DHAVE_OPENGLES -DHAVE_CG -DHAVE_CG_MENU -DHAVE_FILEBROWSER -DHAVE_HDD_CACHE_PARTITION -DHAVE_FBO -DHAVE_RARCH_MAIN_WRAP -DHAVE_SYSMODULES -DHAVE_SYSUTILS -DHAVE_RARCH_EXEC -DHAVE_RGL -DHAVE_LIBRETRO_MANAGEMENT -DHAVE_RSOUND -DHAVE_ZLIB -D__CELLOS_LV2__ -DHAVE_CONFIGFILE=1 -DHAVE_NETPLAY=1 -DHAVE_SOCKET_LEGACY=1 -DHAVE_OSKUTIL -DHAVE_MOUSE -DHAVE_GRIFFIN=1 -DHAVE_MULTIMAN=1 -DPACKAGE_VERSION=\"$(RARCH_VERSION)\" -Dmain=rarch_main -DPC_DEVELOPMENT_IP_ADDRESS=\"$(PC_DEVELOPMENT_IP_ADDRESS)\" -DPC_DEVELOPMENT_UDP_PORT=$(PC_DEVELOPMENT_UDP_PORT) ifeq ($(DEBUG), 1) PPU_OPTIMIZE_LV := -O0 -g diff --git a/Makefile.ps3.retroarch b/Makefile.ps3.retroarch index 0fae2c3873..f88e0e683b 100644 --- a/Makefile.ps3.retroarch +++ b/Makefile.ps3.retroarch @@ -41,7 +41,7 @@ else PPU_CXXLD = $(CELL_SDK)/host-win32/ppu/bin/ppu-lv2-ld.exe endif -DEFINES += -DHAVE_DEFAULT_RETROPAD_INPUT -DRARCH_CONSOLE -DHAVE_OPENGL -DHAVE_OPENGL_TEXREF -DHAVE_HEADSET -DHAVE_VID_CONTEXT -DHAVE_OPENGLES -DHAVE_CG -DHAVE_CG_MENU -DHAVE_FILEBROWSER -DHAVE_HDD_CACHE_PARTITION -DHAVE_FBO -DHAVE_RARCH_MAIN_WRAP -DHAVE_SYSMODULES -DHAVE_SYSUTILS -DHAVE_RARCH_EXEC -DHAVE_RGL -DHAVE_LIBRETRO_MANAGEMENT -DHAVE_RSOUND -DHAVE_ZLIB -D__CELLOS_LV2__ -DHAVE_CONFIGFILE=1 -DHAVE_NETPLAY=1 -DHAVE_SOCKET_LEGACY=1 -DHAVE_OSKUTIL -DHAVE_MOUSE -DHAVE_GRIFFIN=1 -DHAVE_MULTIMAN=1 -DPACKAGE_VERSION=\"$(RARCH_VERSION)\" -Dmain=rarch_main -DPC_DEVELOPMENT_IP_ADDRESS=\"$(PC_DEVELOPMENT_IP_ADDRESS)\" -DPC_DEVELOPMENT_UDP_PORT=$(PC_DEVELOPMENT_UDP_PORT) +DEFINES += -DHAVE_DEFAULT_RETROPAD_INPUT -DHAVE_THREAD -DRARCH_CONSOLE -DHAVE_OPENGL -DHAVE_OPENGL_TEXREF -DHAVE_HEADSET -DHAVE_VID_CONTEXT -DHAVE_OPENGLES -DHAVE_CG -DHAVE_CG_MENU -DHAVE_FILEBROWSER -DHAVE_HDD_CACHE_PARTITION -DHAVE_FBO -DHAVE_RARCH_MAIN_WRAP -DHAVE_SYSMODULES -DHAVE_SYSUTILS -DHAVE_RARCH_EXEC -DHAVE_RGL -DHAVE_LIBRETRO_MANAGEMENT -DHAVE_RSOUND -DHAVE_ZLIB -D__CELLOS_LV2__ -DHAVE_CONFIGFILE=1 -DHAVE_NETPLAY=1 -DHAVE_SOCKET_LEGACY=1 -DHAVE_OSKUTIL -DHAVE_MOUSE -DHAVE_GRIFFIN=1 -DHAVE_MULTIMAN=1 -DPACKAGE_VERSION=\"$(RARCH_VERSION)\" -Dmain=rarch_main -DPC_DEVELOPMENT_IP_ADDRESS=\"$(PC_DEVELOPMENT_IP_ADDRESS)\" -DPC_DEVELOPMENT_UDP_PORT=$(PC_DEVELOPMENT_UDP_PORT) ifeq ($(DEBUG), 1) PPU_OPTIMIZE_LV := -O0 -g diff --git a/ps3/ps3_audio.c b/ps3/ps3_audio.c index ec0c1a8fbf..5939a9ec0d 100644 --- a/ps3/ps3_audio.c +++ b/ps3/ps3_audio.c @@ -25,7 +25,6 @@ #endif #include -#include #include "../fifo_buffer.h" #include "sdk_defines.h" @@ -51,15 +50,16 @@ typedef struct volatile bool quit_thread; fifo_buffer_t *buffer; - pthread_t thread; + sys_ppu_thread_t thread; sys_lwmutex_t lock; sys_lwmutex_t cond_lock; sys_lwcond_t cond; } ps3_audio_t; -static void *event_loop(void *data) +static void event_loop(uint64_t data) { - ps3_audio_t *aud = data; + void * ptr_data = (void*)(uintptr_t)data; + ps3_audio_t *aud = ptr_data; sys_event_queue_t id; sys_ipc_key_t key; sys_event_t event; @@ -85,8 +85,7 @@ static void *event_loop(void *data) } pAudioRemoveNotifyEventQueue(key); - pthread_exit(NULL); - return NULL; + sys_ppu_thread_exit(0); } static void *ps3_audio_init(const char *device, unsigned rate, unsigned latency) @@ -141,7 +140,7 @@ static void *ps3_audio_init(const char *device, unsigned rate, unsigned latency) pLwCondCreate(&data->cond, &data->cond_lock, &cond_attr); pAudioPortStart(data->audio_port); - pthread_create(&data->thread, NULL, event_loop, data); + sys_ppu_thread_create(&data->thread, event_loop, (uint64_t)data, 1500, 0x1000, SYS_PPU_THREAD_CREATE_JOINABLE, (char*)"sound"); return data; } @@ -188,11 +187,12 @@ static void ps3_audio_set_nonblock_state(void *data, bool state) static void ps3_audio_free(void *data) { + uint64_t val; ps3_audio_t *aud = data; aud->quit_thread = true; pAudioPortStart(aud->audio_port); - pthread_join(aud->thread, NULL); + sys_ppu_thread_join(aud->thread, &val); pAudioPortStop(aud->audio_port); pAudioPortClose(aud->audio_port); diff --git a/ps3/thread.c b/ps3/thread.c deleted file mode 100644 index af368f02e9..0000000000 --- a/ps3/thread.c +++ /dev/null @@ -1,161 +0,0 @@ -/* RetroArch - A frontend for libretro. - * Copyright (C) 2010-2012 - Hans-Kristian Arntzen - * - * RetroArch is free software: you can redistribute it and/or modify it under the terms - * of the GNU General Public License as published by the Free Software Found- - * ation, either version 3 of the License, or (at your option) any later version. - * - * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - * PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with RetroArch. - * If not, see . - */ - -#include "thread.h" -#include - -#include -#include - -struct thread_data -{ - void (*func)(void*); - void *userdata; -}; - -struct sthread -{ - pthread_t id; -}; - -static void *thread_wrap(void *data_) -{ - struct thread_data *data = (struct thread_data*)data_; - data->func(data->userdata); - free(data); - return NULL; -} - -sthread_t *sthread_create(void (*thread_func)(void*), void *userdata) -{ - sthread_t *thr = (sthread_t*)calloc(1, sizeof(*thr)); - if (!thr) - return NULL; - - struct thread_data *data = (struct thread_data*)calloc(1, sizeof(*data)); - if (!data) - { - free(thr); - return NULL; - } - - data->func = thread_func; - data->userdata = userdata; - - if (pthread_create(&thr->id, NULL, thread_wrap, data) < 0) - { - free(data); - free(thr); - return NULL; - } - - return thr; -} - -void sthread_join(sthread_t *thread) -{ - pthread_join(thread->id, NULL); - free(thread); -} - -struct slock -{ - pthread_mutex_t lock; -}; - -slock_t *slock_new(void) -{ - slock_t *lock = (slock_t*)calloc(1, sizeof(*lock)); - if (!lock) - return NULL; - - if (pthread_mutex_init(&lock->lock, NULL) < 0) - { - free(lock); - return NULL; - } - - return lock; -} - -void slock_free(slock_t *lock) -{ - pthread_mutex_destroy(&lock->lock); - free(lock); -} - -void slock_lock(slock_t *lock) -{ - pthread_mutex_lock(&lock->lock); -} - -void slock_unlock(slock_t *lock) -{ - pthread_mutex_unlock(&lock->lock); -} - -struct scond -{ - pthread_cond_t cond; -}; - -scond_t *scond_new(void) -{ - scond_t *cond = (scond_t*)calloc(1, sizeof(*cond)); - if (!cond) - return NULL; - - if (pthread_cond_init(&cond->cond, NULL) < 0) - { - free(cond); - return NULL; - } - - return cond; -} - -void scond_free(scond_t *cond) -{ - pthread_cond_destroy(&cond->cond); - free(cond); -} - -void scond_wait(scond_t *cond, slock_t *lock) -{ - pthread_cond_wait(&cond->cond, &lock->lock); -} - -#ifndef RARCH_CONSOLE -bool scond_wait_timeout(scond_t *cond, slock_t *lock, unsigned timeout_ms) -{ - struct timespec now; - - clock_gettime(CLOCK_REALTIME, &now); - - now.tv_sec += timeout_ms / 1000; - now.tv_nsec += timeout_ms * 1000000L; - - now.tv_sec += now.tv_nsec / 1000000000L; - now.tv_nsec = now.tv_nsec % 1000000000L; - - int ret = pthread_cond_timedwait(&cond->cond, &lock->lock, &now); - return ret == 0; -} -#endif - -void scond_signal(scond_t *cond) -{ - pthread_cond_signal(&cond->cond); -}