Merge pull request #6862 from gblues/master

WIIU: cleanups to wiiu bootstrap code
This commit is contained in:
Twinaphex 2018-06-30 14:31:22 +02:00 committed by GitHub
commit a3ae537c02
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 74 additions and 29 deletions

View File

@ -49,7 +49,6 @@
#include "../../retroarch.h"
#include "../../gfx/video_driver.h"
#include "hbl.h"
#include "wiiu_dbg.h"
#include "system/exception_handler.h"

View File

@ -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;

View File

@ -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();
}

View File

@ -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

View File

@ -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);

View File

@ -6,7 +6,6 @@
#include <stdio.h>
#include <wiiu/os.h>
#include <pwd.h>
#include <features/features_cpu.h>
#include <sys/reent.h>
#include <errno.h>
#include <time.h>

View File

@ -5,7 +5,7 @@
#include <stdint.h>
#include <inttypes.h>
#ifdef WIIU
#ifdef __wiiu__
#include <wiiu/types.h>
#ifdef __cplusplus