Pull OF_quiesce() out of the MI Open Firmware layer and entirely into

PPC ofw_machdep.c, in recognition of its state as a machine specific hack.

Requested by:	marius
This commit is contained in:
Nathan Whitehorn 2010-05-16 22:01:43 +00:00
parent 83e711ec14
commit 4a26780b9a
6 changed files with 35 additions and 67 deletions

View File

@ -339,13 +339,6 @@ METHOD void release {
# Commands for returning control to the firmware
/**
* @brief Turn off firmware background activities
*/
METHOD void quiesce {
ofw_t _ofw;
};
/**
* @brief Temporarily return control to firmware.
*/

View File

@ -105,7 +105,6 @@ static ssize_t ofw_std_write(ofw_t ofw, ihandle_t instance, const void *addr,
static int ofw_std_seek(ofw_t ofw, ihandle_t instance, uint64_t pos);
static caddr_t ofw_std_claim(ofw_t ofw, void *virt, size_t size, u_int align);
static void ofw_std_release(ofw_t ofw, void *virt, size_t size);
static void ofw_std_quiesce(ofw_t ofw);
static void ofw_std_enter(ofw_t ofw);
static void ofw_std_exit(ofw_t ofw);
@ -134,7 +133,6 @@ static ofw_method_t ofw_std_methods[] = {
OFWMETHOD(ofw_seek, ofw_std_seek),
OFWMETHOD(ofw_claim, ofw_std_claim),
OFWMETHOD(ofw_release, ofw_std_release),
OFWMETHOD(ofw_quiesce, ofw_std_quiesce),
OFWMETHOD(ofw_enter, ofw_std_enter),
OFWMETHOD(ofw_exit, ofw_std_exit),
@ -732,23 +730,6 @@ ofw_std_release(ofw_t ofw, void *virt, size_t size)
* Control transfer functions
*/
/* Turn off OF background tasks */
static void
ofw_std_quiesce(ofw_t ofw)
{
struct {
cell_t name;
cell_t nargs;
cell_t nreturns;
} args = {
(cell_t)"quiesce",
0,
0,
};
openfirmware(&args);
}
/* Suspend and drop back to the Open Firmware interface. */
static void
ofw_std_enter(ofw_t ofw)

View File

@ -409,15 +409,6 @@ OF_release(void *virt, size_t size)
* Control transfer functions
*/
/* Turn off OF background tasks */
void
OF_quiesce()
{
OFW_QUIESCE(ofw_obj);
}
/* Suspend and drop back to the Open Firmware interface. */
void
OF_enter()

View File

@ -133,7 +133,6 @@ void *OF_claim(void *virtrequest, size_t size, u_int align);
void OF_release(void *virt, size_t size);
/* Control transfer functions */
void OF_quiesce(void);
void OF_enter(void);
void OF_exit(void) __attribute__((noreturn));

View File

@ -77,6 +77,7 @@ static int (*ofwcall)(void *);
static void *fdt;
int ofw_real_mode;
static void ofw_quiesce(void);
static int openfirmware(void *args);
/*
@ -281,8 +282,6 @@ OF_initial_setup(void *fdt_ptr, void *junk, int (*openfirm)(void *))
boolean_t
OF_bootstrap()
{
char model[32];
phandle_t rootnode;
boolean_t status = FALSE;
mtx_init(&ofw_mutex, "open firmware", NULL, MTX_DEF);
@ -302,12 +301,7 @@ OF_bootstrap()
* On some machines, we need to quiesce OF to turn off
* background processes.
*/
rootnode = OF_finddevice("/");
if (OF_getprop(rootnode, "model", model, sizeof(model)) > 0) {
if (strcmp(model, "PowerMac11,2") == 0 ||
strcmp(model, "PowerMac12,1") == 0)
OF_quiesce();
}
ofw_quiesce();
} else {
status = OF_install(OFW_FDT, 0);
@ -320,6 +314,39 @@ OF_bootstrap()
return (status);
}
static void
ofw_quiesce(void)
{
phandle_t rootnode;
char model[32];
struct {
cell_t name;
cell_t nargs;
cell_t nreturns;
} args;
/*
* Only quiesce Open Firmware on PowerMac11,2 and 12,1. It is
* necessary there to shut down a background thread doing fan
* management, and is harmful on other machines.
*
* Note: we don't need to worry about which OF module we are
* using since this is called only from very early boot, within
* OF's boot context.
*/
rootnode = OF_finddevice("/");
if (OF_getprop(rootnode, "model", model, sizeof(model)) > 0) {
if (strcmp(model, "PowerMac11,2") == 0 ||
strcmp(model, "PowerMac12,1") == 0) {
args.name = (cell_t)(uintptr_t)"quiesce";
args.nargs = 0;
args.nreturns = 0;
openfirmware(&args);
}
}
}
static int
openfirmware(void *args)
{

View File

@ -106,7 +106,6 @@ static ssize_t ofw_real_write(ofw_t, ihandle_t instance, const void *addr,
static int ofw_real_seek(ofw_t, ihandle_t instance, u_int64_t pos);
static caddr_t ofw_real_claim(ofw_t, void *virt, size_t size, u_int align);
static void ofw_real_release(ofw_t, void *virt, size_t size);
static void ofw_real_quiesce(ofw_t);
static void ofw_real_enter(ofw_t);
static void ofw_real_exit(ofw_t);
@ -134,7 +133,6 @@ static ofw_method_t ofw_real_methods[] = {
OFWMETHOD(ofw_seek, ofw_real_seek),
OFWMETHOD(ofw_claim, ofw_real_claim),
OFWMETHOD(ofw_release, ofw_real_release),
OFWMETHOD(ofw_quiesce, ofw_real_quiesce),
OFWMETHOD(ofw_enter, ofw_real_enter),
OFWMETHOD(ofw_exit, ofw_real_exit),
@ -891,27 +889,6 @@ ofw_real_release(ofw_t ofw, void *virt, size_t size)
* Control transfer functions
*/
/* Turn off OF background tasks */
static void
ofw_real_quiesce(ofw_t ofw)
{
vm_offset_t argsptr;
struct {
cell_t name;
cell_t nargs;
cell_t nreturns;
} args;
args.name = (cell_t)(uintptr_t)"quiesce";
args.nargs = 0;
args.nreturns = 0;
ofw_real_start();
argsptr = ofw_real_map(&args, sizeof(args));
openfirmware((void *)argsptr);
ofw_real_stop();
}
/* Suspend and drop back to the Open Firmware interface. */
static void
ofw_real_enter(ofw_t ofw)