svn commit: r213758 - in user/nwhitehorn/ps3: dev/ofw powerpc/aim
Nathan Whitehorn
nwhitehorn at FreeBSD.org
Wed Oct 13 02:10:56 UTC 2010
Author: nwhitehorn
Date: Wed Oct 13 02:10:56 2010
New Revision: 213758
URL: http://svn.freebsd.org/changeset/base/213758
Log:
Make the generic OF layer do the right thing (all OF client interface
routines return errors) if no OF client interface module is installed
instead of calling NULL functions.
Modified:
user/nwhitehorn/ps3/dev/ofw/openfirm.c
user/nwhitehorn/ps3/powerpc/aim/mmu_oea64.c
Modified: user/nwhitehorn/ps3/dev/ofw/openfirm.c
==============================================================================
--- user/nwhitehorn/ps3/dev/ofw/openfirm.c Wed Oct 13 02:09:06 2010 (r213757)
+++ user/nwhitehorn/ps3/dev/ofw/openfirm.c Wed Oct 13 02:10:56 2010 (r213758)
@@ -76,7 +76,7 @@ MALLOC_DEFINE(M_OFWPROP, "openfirm", "Op
static ihandle_t stdout;
-static ofw_def_t *ofw_def_impl;
+static ofw_def_t *ofw_def_impl = NULL;
static ofw_t ofw_obj;
static struct ofw_kobj ofw_kernel_obj;
static struct kobj_ops ofw_kernel_kops;
@@ -118,6 +118,9 @@ OF_init(void *cookie)
phandle_t chosen;
int rv;
+ if (ofw_def_impl == NULL)
+ return (-1);
+
ofw_obj = &ofw_kernel_obj;
/*
* Take care of compiling the selected class, and
@@ -156,6 +159,9 @@ int
OF_test(const char *name)
{
+ if (ofw_def_impl == NULL)
+ return (-1);
+
return (OFW_TEST(ofw_obj, name));
}
@@ -167,6 +173,9 @@ OF_interpret(const char *cmd, int nretur
int i = 0;
int status;
+ if (ofw_def_impl == NULL)
+ return (-1);
+
status = OFW_INTERPRET(ofw_obj, cmd, nreturns, slots);
if (status == -1)
return (status);
@@ -188,6 +197,9 @@ phandle_t
OF_peer(phandle_t node)
{
+ if (ofw_def_impl == NULL)
+ return (0);
+
return (OFW_PEER(ofw_obj, node));
}
@@ -196,6 +208,9 @@ phandle_t
OF_child(phandle_t node)
{
+ if (ofw_def_impl == NULL)
+ return (0);
+
return (OFW_CHILD(ofw_obj, node));
}
@@ -204,6 +219,9 @@ phandle_t
OF_parent(phandle_t node)
{
+ if (ofw_def_impl == NULL)
+ return (0);
+
return (OFW_PARENT(ofw_obj, node));
}
@@ -212,6 +230,9 @@ phandle_t
OF_instance_to_package(ihandle_t instance)
{
+ if (ofw_def_impl == NULL)
+ return (-1);
+
return (OFW_INSTANCE_TO_PACKAGE(ofw_obj, instance));
}
@@ -220,6 +241,9 @@ ssize_t
OF_getproplen(phandle_t package, const char *propname)
{
+ if (ofw_def_impl == NULL)
+ return (-1);
+
return (OFW_GETPROPLEN(ofw_obj, package, propname));
}
@@ -228,6 +252,9 @@ ssize_t
OF_getprop(phandle_t package, const char *propname, void *buf, size_t buflen)
{
+ if (ofw_def_impl == NULL)
+ return (-1);
+
return (OFW_GETPROP(ofw_obj, package, propname, buf, buflen));
}
@@ -276,6 +303,9 @@ int
OF_nextprop(phandle_t package, const char *previous, char *buf, size_t size)
{
+ if (ofw_def_impl == NULL)
+ return (-1);
+
return (OFW_NEXTPROP(ofw_obj, package, previous, buf, size));
}
@@ -284,6 +314,9 @@ int
OF_setprop(phandle_t package, const char *propname, const void *buf, size_t len)
{
+ if (ofw_def_impl == NULL)
+ return (-1);
+
return (OFW_SETPROP(ofw_obj, package, propname, buf,len));
}
@@ -292,6 +325,9 @@ ssize_t
OF_canon(const char *device, char *buf, size_t len)
{
+ if (ofw_def_impl == NULL)
+ return (-1);
+
return (OFW_CANON(ofw_obj, device, buf, len));
}
@@ -300,6 +336,9 @@ phandle_t
OF_finddevice(const char *device)
{
+ if (ofw_def_impl == NULL)
+ return (-1);
+
return (OFW_FINDDEVICE(ofw_obj, device));
}
@@ -308,6 +347,9 @@ ssize_t
OF_instance_to_path(ihandle_t instance, char *buf, size_t len)
{
+ if (ofw_def_impl == NULL)
+ return (-1);
+
return (OFW_INSTANCE_TO_PATH(ofw_obj, instance, buf, len));
}
@@ -316,6 +358,9 @@ ssize_t
OF_package_to_path(phandle_t package, char *buf, size_t len)
{
+ if (ofw_def_impl == NULL)
+ return (-1);
+
return (OFW_PACKAGE_TO_PATH(ofw_obj, package, buf, len));
}
@@ -328,7 +373,7 @@ OF_call_method(const char *method, ihand
cell_t args_n_results[12];
int n, status;
- if (nargs > 6)
+ if (nargs > 6 || ofw_def_impl == NULL)
return (-1);
va_start(ap, nreturns);
for (n = 0; n < nargs; n++)
@@ -354,6 +399,9 @@ ihandle_t
OF_open(const char *device)
{
+ if (ofw_def_impl == NULL)
+ return (0);
+
return (OFW_OPEN(ofw_obj, device));
}
@@ -362,6 +410,9 @@ void
OF_close(ihandle_t instance)
{
+ if (ofw_def_impl == NULL)
+ return;
+
OFW_CLOSE(ofw_obj, instance);
}
@@ -370,6 +421,9 @@ ssize_t
OF_read(ihandle_t instance, void *addr, size_t len)
{
+ if (ofw_def_impl == NULL)
+ return (-1);
+
return (OFW_READ(ofw_obj, instance, addr, len));
}
@@ -378,6 +432,9 @@ ssize_t
OF_write(ihandle_t instance, const void *addr, size_t len)
{
+ if (ofw_def_impl == NULL)
+ return (-1);
+
return (OFW_WRITE(ofw_obj, instance, addr, len));
}
@@ -386,6 +443,9 @@ int
OF_seek(ihandle_t instance, uint64_t pos)
{
+ if (ofw_def_impl == NULL)
+ return (-1);
+
return (OFW_SEEK(ofw_obj, instance, pos));
}
@@ -398,6 +458,9 @@ void *
OF_claim(void *virt, size_t size, u_int align)
{
+ if (ofw_def_impl == NULL)
+ return ((void *)-1);
+
return (OFW_CLAIM(ofw_obj, virt, size, align));
}
@@ -406,6 +469,9 @@ void
OF_release(void *virt, size_t size)
{
+ if (ofw_def_impl == NULL)
+ return;
+
OFW_RELEASE(ofw_obj, virt, size);
}
@@ -418,6 +484,9 @@ void
OF_enter()
{
+ if (ofw_def_impl == NULL)
+ return;
+
OFW_ENTER(ofw_obj);
}
@@ -425,6 +494,8 @@ OF_enter()
void
OF_exit()
{
+ if (ofw_def_impl == NULL)
+ panic("OF_exit: Open Firmware not available");
/* Should not return */
OFW_EXIT(ofw_obj);
Modified: user/nwhitehorn/ps3/powerpc/aim/mmu_oea64.c
==============================================================================
--- user/nwhitehorn/ps3/powerpc/aim/mmu_oea64.c Wed Oct 13 02:09:06 2010 (r213757)
+++ user/nwhitehorn/ps3/powerpc/aim/mmu_oea64.c Wed Oct 13 02:10:56 2010 (r213758)
@@ -1134,7 +1134,9 @@ moea64_late_bootstrap(mmu_t mmup, vm_off
* mode.
*/
- if (!ofw_real_mode) {
+ chosen = OF_finddevice("/chosen");
+
+ if (chosen != -1 && OF_getprop(chosen, "mmu", &mmui, 4) != -1) {
#ifndef __powerpc64__
moea64_pinit(mmup, &ofw_pmap);
More information about the svn-src-user
mailing list