2013-01-28 20:36:39 +00:00
|
|
|
/**
|
|
|
|
******************************************************************************
|
|
|
|
* Xenia : Xbox 360 Emulator Research Project *
|
|
|
|
******************************************************************************
|
|
|
|
* Copyright 2013 Ben Vanik. All rights reserved. *
|
|
|
|
* Released under the BSD license - see LICENSE in the root for more details. *
|
|
|
|
******************************************************************************
|
|
|
|
*/
|
|
|
|
|
2014-01-05 01:12:46 +00:00
|
|
|
#include <xenia/kernel/xboxkrnl_hal.h>
|
2013-01-28 20:36:39 +00:00
|
|
|
|
2014-01-05 01:12:46 +00:00
|
|
|
#include <xenia/kernel/kernel_state.h>
|
|
|
|
#include <xenia/kernel/xboxkrnl_private.h>
|
|
|
|
#include <xenia/kernel/util/shim_utils.h>
|
2013-01-31 06:44:32 +00:00
|
|
|
|
2013-01-28 20:36:39 +00:00
|
|
|
|
|
|
|
using namespace xe;
|
|
|
|
using namespace xe::kernel;
|
|
|
|
using namespace xe::kernel::xboxkrnl;
|
|
|
|
|
|
|
|
|
2013-05-27 01:43:57 +00:00
|
|
|
namespace xe {
|
|
|
|
namespace kernel {
|
2013-01-28 20:36:39 +00:00
|
|
|
|
|
|
|
|
2013-05-27 05:04:12 +00:00
|
|
|
void xeHalReturnToFirmware(uint32_t routine) {
|
|
|
|
KernelState* state = shared_kernel_state_;
|
|
|
|
XEASSERTNOTNULL(state);
|
|
|
|
|
2013-01-28 20:36:39 +00:00
|
|
|
// void
|
|
|
|
// IN FIRMWARE_REENTRY Routine
|
|
|
|
|
|
|
|
// Routine must be 1 'HalRebootRoutine'
|
2013-05-27 05:04:12 +00:00
|
|
|
XEASSERT(routine == 1);
|
|
|
|
|
|
|
|
// TODO(benvank): diediedie much more gracefully
|
|
|
|
// Not sure how to blast back up the stack in LLVM without exceptions, though.
|
|
|
|
XELOGE("Game requested shutdown via HalReturnToFirmware");
|
|
|
|
exit(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
SHIM_CALL HalReturnToFirmware_shim(
|
2013-12-07 06:57:16 +00:00
|
|
|
PPCContext* ppc_state, KernelState* state) {
|
2013-01-28 20:36:39 +00:00
|
|
|
uint32_t routine = SHIM_GET_ARG_32(0);
|
|
|
|
|
|
|
|
XELOGD(
|
2013-02-09 16:05:39 +00:00
|
|
|
"HalReturnToFirmware(%d)",
|
2013-01-28 20:36:39 +00:00
|
|
|
routine);
|
|
|
|
|
2013-05-27 05:04:12 +00:00
|
|
|
xeHalReturnToFirmware(routine);
|
2013-01-28 20:36:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2013-05-27 01:43:57 +00:00
|
|
|
} // namespace kernel
|
|
|
|
} // namespace xe
|
2013-01-28 20:36:39 +00:00
|
|
|
|
|
|
|
|
|
|
|
void xe::kernel::xboxkrnl::RegisterHalExports(
|
|
|
|
ExportResolver* export_resolver, KernelState* state) {
|
2013-05-27 03:10:10 +00:00
|
|
|
SHIM_SET_MAPPING("xboxkrnl.exe", HalReturnToFirmware, state);
|
2013-01-28 20:36:39 +00:00
|
|
|
}
|