diff --git a/frontend/drivers/platform_wiiu.c b/frontend/drivers/platform_wiiu.c index 156d63ea55..1976beb86a 100644 --- a/frontend/drivers/platform_wiiu.c +++ b/frontend/drivers/platform_wiiu.c @@ -49,7 +49,6 @@ #include "../../retroarch.h" #include "../../gfx/video_driver.h" - #include "hbl.h" #include "wiiu_dbg.h" #include "system/exception_handler.h" diff --git a/wiiu/include/sys/socket.h b/wiiu/include/sys/socket.h index aa1c20f60c..3486f5130f 100644 --- a/wiiu/include/sys/socket.h +++ b/wiiu/include/sys/socket.h @@ -22,12 +22,16 @@ extern "C" { #define SO_REUSEADDR 0x0004 #define SO_NBIO 0x1014 +#define SO_NONBLOCK 0x1016 /* return codes */ #define SO_SUCCESS 0 #define SO_EWOULDBLOCK 6 +#define EWOULDBLOCK SO_EWOULDBLOCK +#define EAGAIN SO_EWOULDBLOCK +#define ENOBUFS 105 /* No buffer space available */ typedef uint32_t socklen_t; typedef uint16_t sa_family_t; diff --git a/wiiu/main.c b/wiiu/main.c index 5a2a2e698e..dd20c62923 100644 --- a/wiiu/main.c +++ b/wiiu/main.c @@ -50,7 +50,8 @@ void __init(void); static void fsdev_init(void); static void fsdev_exit(void); -static int iosuhaxMount = 0; +bool iosuhaxMount = 0; + static int mcp_hook_fd = -1; /* HBL elf entry point */ @@ -163,35 +164,69 @@ void MCPHookClose(void) mcp_hook_fd = -1; } +static bool try_init_iosuhax(void) +{ + int result = IOSUHAX_Open(NULL); + if(result < 0) + result = MCPHookOpen(); + + return (result < 0) ? false : true; +} + +static void try_shutdown_iosuhax(void) +{ + if(!iosuhaxMount) + return; + + if (mcp_hook_fd >= 0) + MCPHookClose(); + else + IOSUHAX_Close(); + + iosuhaxMount = false; +} + +/** + * Mount the filesystem(s) needed by the application. By default, we + * mount the SD card to /sd. + * + * The 'iosuhaxMount' symbol used here is public and can be referenced + * in overriding implementations. + */ +__attribute__((weak)) +void __mount_filesystems(void) +{ + if(iosuhaxMount) + fatInitDefault(); + else + mount_sd_fat("sd"); +} + +/** + * Unmount filesystems. Implementing applications should be careful to + * clean up anything mounted in __mount_filesystems() here. + */ +__attribute__((weak)) +void __unmount_filesystems(void) +{ + if (iosuhaxMount) + { + fatUnmount("sd:"); + fatUnmount("usb:"); + } + else + unmount_sd_fat("sd"); +} + static void fsdev_init(void) { - iosuhaxMount = 0; - int res = IOSUHAX_Open(NULL); + iosuhaxMount = try_init_iosuhax(); - if (res < 0) - res = MCPHookOpen(); - - if (res < 0) - mount_sd_fat("sd"); - else - { - iosuhaxMount = 1; - fatInitDefault(); - } + __mount_filesystems(); } static void fsdev_exit(void) { - if (iosuhaxMount) - { - fatUnmount("sd:"); - fatUnmount("usb:"); - - if (mcp_hook_fd >= 0) - MCPHookClose(); - else - IOSUHAX_Close(); - } - else - unmount_sd_fat("sd"); + __unmount_filesystems(); + try_shutdown_iosuhax(); } diff --git a/wiiu/system/exception_handler.c b/wiiu/system/exception_handler.c index 2caa0779c7..2f2e7f8d99 100644 --- a/wiiu/system/exception_handler.c +++ b/wiiu/system/exception_handler.c @@ -23,8 +23,9 @@ #include "wiiu_dbg.h" #include "exception_handler.h" #include "version.h" +#ifdef HAVE_GIT_VERSION #include "version_git.h" - +#endif /* Settings */ #define NUM_STACK_TRACE_LINES 5 diff --git a/wiiu/system/imports.h b/wiiu/system/imports.h index 0335c18755..e3685aaa1a 100644 --- a/wiiu/system/imports.h +++ b/wiiu/system/imports.h @@ -1,6 +1,13 @@ /* coreinit */ IMPORT_BEGIN(coreinit); +IMPORT(OSScreenInit); +IMPORT(OSScreenGetBufferSizeEx); +IMPORT(OSScreenSetBufferEx); +IMPORT(OSScreenEnableEx); +IMPORT(OSScreenFlipBuffersEx); +IMPORT(OSScreenClearBufferEx); +IMPORT(OSScreenPutFontEx); IMPORT(OSFatal); IMPORT(OSDynLoad_Acquire); IMPORT(OSDynLoad_FindExport); diff --git a/wiiu/system/missing_libc_functions.c b/wiiu/system/missing_libc_functions.c index 76c69f33e3..bc47266b3a 100644 --- a/wiiu/system/missing_libc_functions.c +++ b/wiiu/system/missing_libc_functions.c @@ -6,7 +6,6 @@ #include #include #include -#include #include #include #include diff --git a/wiiu/wiiu_dbg.h b/wiiu/wiiu_dbg.h index 5e22701484..fa259b8d6c 100644 --- a/wiiu/wiiu_dbg.h +++ b/wiiu/wiiu_dbg.h @@ -5,7 +5,7 @@ #include #include -#ifdef WIIU +#ifdef __wiiu__ #include #ifdef __cplusplus