diff --git a/Makefile b/Makefile index 5a2e3ca75e..7e66bdb181 100644 --- a/Makefile +++ b/Makefile @@ -219,8 +219,6 @@ $(OBJDIR)/%.o: %.rc $(HEADERS) @$(if $(Q), $(shell echo echo WINDRES $<),) $(Q)$(WINDRES) -o $@ $< -compile: $(OBJ) - install: $(TARGET) rm -f $(OBJDIR)/git_version.o mkdir -p $(DESTDIR)$(BIN_DIR) 2>/dev/null || /bin/true diff --git a/Makefile.wiiu b/Makefile.wiiu index 073b7f7d95..9ac0deb15d 100644 --- a/Makefile.wiiu +++ b/Makefile.wiiu @@ -316,8 +316,6 @@ $(BUILD_DIR)/$(TARGET).rpx: $(BUILD_DIR)/$(TARGET).rpx.elf $(ELF2RPL) .$(TARGET) @touch .$(TARGET).rpx.last $(Q)-$(ELF2RPL) $< $@ -compile: $(OBJ) $(HBL_ELF_OBJ) - clean: rm -f $(OBJ) $(RPX_OBJ) $(HBL_ELF_OBJ) $(TARGET).elf $(TARGET).rpx.elf $(TARGET).rpx rm -f $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).rpx.elf $(BUILD_DIR)/$(TARGET).rpx diff --git a/frontend/drivers/platform_wiiu.c b/frontend/drivers/platform_wiiu.c index 1960e12ec3..2f5d484cff 100644 --- a/frontend/drivers/platform_wiiu.c +++ b/frontend/drivers/platform_wiiu.c @@ -49,7 +49,7 @@ #include "../../retroarch.h" #include "../../gfx/video_driver.h" - +#include "wiiu_main.h" #include "hbl.h" #include "wiiu_dbg.h" #include "system/exception_handler.h" @@ -68,6 +68,10 @@ * The Wii U frontend driver, along with the main() method. */ +/* TODO: If we want greater control over which filesystems get mounted, + * implement callbacks and assign them below. */ +hooks_t hooks = { NULL, NULL }; + static enum frontend_fork wiiu_fork_mode = FRONTEND_FORK_NONE; static const char *elf_path_cst = WIIU_SD_PATH "retroarch/retroarch.elf"; 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..3fcd225294 100644 --- a/wiiu/main.c +++ b/wiiu/main.c @@ -22,6 +22,8 @@ #include #include +#include "wiiu_main.h" + #include "hbl.h" #include "fs/fs_utils.h" @@ -50,7 +52,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 +166,58 @@ 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; +} + 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"); + if(hooks.fs_mount != NULL && hooks.fs_unmount != NULL) + hooks.fs_mount(); else { - iosuhaxMount = 1; - fatInitDefault(); + if(iosuhaxMount) + fatInitDefault(); + else + mount_sd_fat("sd"); } } static void fsdev_exit(void) { - if (iosuhaxMount) - { - fatUnmount("sd:"); - fatUnmount("usb:"); + if(hooks.fs_mount != NULL && hooks.fs_unmount != NULL) - if (mcp_hook_fd >= 0) - MCPHookClose(); - else - IOSUHAX_Close(); - } + hooks.fs_unmount(); else - unmount_sd_fat("sd"); + { + if (iosuhaxMount) + { + fatUnmount("sd:"); + fatUnmount("usb:"); + } + else + unmount_sd_fat("sd"); + } + + 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 diff --git a/wiiu/wiiu_main.h b/wiiu/wiiu_main.h new file mode 100644 index 0000000000..7c16c813c4 --- /dev/null +++ b/wiiu/wiiu_main.h @@ -0,0 +1,16 @@ +#ifndef _MAIN_H +#define _MAIN_H + +#include "wiiu/types.h" + +struct main_hooks { + void (*fs_mount)(void); + void (*fs_unmount)(void); +}; + +typedef struct main_hooks hooks_t; + +extern hooks_t hooks; +extern bool iosuhaxMount; + +#endif /* _MAIN_H */