mirror of
https://github.com/deadw00d/AROS.git
synced 2025-10-26 21:18:42 +00:00
This flag indicates that something has already gone wrong and least amount of code should be used to do reboot or shutdown. This means not running non-critical reset handlers. Note that the handler itself needs to decide whethere it is critical or not.
50 lines
1014 B
C
50 lines
1014 B
C
/*
|
|
Copyright (C) 1995-2013, The AROS Development Team. All rights reserved.
|
|
|
|
Desc: ShutdownA() - Shut down the operating system.
|
|
*/
|
|
|
|
/* Prevent 'timeval redefinition' error */
|
|
#define timeval timeval_AROS
|
|
|
|
#include <aros/debug.h>
|
|
#include <proto/exec.h>
|
|
|
|
#include "exec_intern.h"
|
|
#include "exec_util.h"
|
|
|
|
/* See rom/exec/shutdowna.c for documentation */
|
|
|
|
AROS_LH1(ULONG, ShutdownA,
|
|
AROS_LHA(ULONG, action, D0),
|
|
struct ExecBase *, SysBase, 173, Exec)
|
|
{
|
|
AROS_LIBFUNC_INIT
|
|
|
|
int exitcode;
|
|
|
|
switch(action & SD_ACTION_MASK)
|
|
{
|
|
case SD_ACTION_POWEROFF:
|
|
exitcode = 0;
|
|
break;
|
|
|
|
case SD_ACTION_COLDREBOOT:
|
|
exitcode = 0x81; /* Magic value for our bootstrap */
|
|
break;
|
|
|
|
default:
|
|
return 0; /* Unknown action code */
|
|
}
|
|
|
|
Exec_DoResetCallbacks((struct IntExecBase *)SysBase, action);
|
|
|
|
PD(SysBase).SysIFace->exit(exitcode);
|
|
AROS_HOST_BARRIER
|
|
|
|
/* Just shut up the compiler, we won't return */
|
|
return 0;
|
|
|
|
AROS_LIBFUNC_EXIT
|
|
}
|