Commit 926e6940 authored by Cédric Le Goater's avatar Cédric Le Goater Committed by Benjamin Herrenschmidt

powerpc/boot: Add byteswapping routines in oflib

Values will need to be byte-swapped when calling prom (big endian) from
a little endian boot wrapper.
Signed-off-by: default avatarCédric Le Goater <clg@fr.ibm.com>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent 163bed77
...@@ -20,4 +20,7 @@ void of_console_init(void); ...@@ -20,4 +20,7 @@ void of_console_init(void);
typedef u32 __be32; typedef u32 __be32;
#define cpu_to_be32(x) (x)
#define be32_to_cpu(x) (x)
#endif /* _PPC_BOOT_OF_H_ */ #endif /* _PPC_BOOT_OF_H_ */
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
#include "of.h" #include "of.h"
static void *of_stdout_handle; static unsigned int of_stdout_handle;
static int of_console_open(void) static int of_console_open(void)
{ {
...@@ -27,8 +27,10 @@ static int of_console_open(void) ...@@ -27,8 +27,10 @@ static int of_console_open(void)
if (((devp = of_finddevice("/chosen")) != NULL) if (((devp = of_finddevice("/chosen")) != NULL)
&& (of_getprop(devp, "stdout", &of_stdout_handle, && (of_getprop(devp, "stdout", &of_stdout_handle,
sizeof(of_stdout_handle)) sizeof(of_stdout_handle))
== sizeof(of_stdout_handle))) == sizeof(of_stdout_handle))) {
of_stdout_handle = be32_to_cpu(of_stdout_handle);
return 0; return 0;
}
return -1; return -1;
} }
......
...@@ -42,13 +42,13 @@ int of_call_prom(const char *service, int nargs, int nret, ...) ...@@ -42,13 +42,13 @@ int of_call_prom(const char *service, int nargs, int nret, ...)
struct prom_args args; struct prom_args args;
va_list list; va_list list;
args.service = ADDR(service); args.service = cpu_to_be32(ADDR(service));
args.nargs = nargs; args.nargs = cpu_to_be32(nargs);
args.nret = nret; args.nret = cpu_to_be32(nret);
va_start(list, nret); va_start(list, nret);
for (i = 0; i < nargs; i++) for (i = 0; i < nargs; i++)
args.args[i] = va_arg(list, prom_arg_t); args.args[i] = cpu_to_be32(va_arg(list, prom_arg_t));
va_end(list); va_end(list);
for (i = 0; i < nret; i++) for (i = 0; i < nret; i++)
...@@ -57,7 +57,7 @@ int of_call_prom(const char *service, int nargs, int nret, ...) ...@@ -57,7 +57,7 @@ int of_call_prom(const char *service, int nargs, int nret, ...)
if (prom(&args) < 0) if (prom(&args) < 0)
return -1; return -1;
return (nret > 0)? args.args[nargs]: 0; return (nret > 0) ? be32_to_cpu(args.args[nargs]) : 0;
} }
static int of_call_prom_ret(const char *service, int nargs, int nret, static int of_call_prom_ret(const char *service, int nargs, int nret,
...@@ -67,13 +67,13 @@ static int of_call_prom_ret(const char *service, int nargs, int nret, ...@@ -67,13 +67,13 @@ static int of_call_prom_ret(const char *service, int nargs, int nret,
struct prom_args args; struct prom_args args;
va_list list; va_list list;
args.service = ADDR(service); args.service = cpu_to_be32(ADDR(service));
args.nargs = nargs; args.nargs = cpu_to_be32(nargs);
args.nret = nret; args.nret = cpu_to_be32(nret);
va_start(list, rets); va_start(list, rets);
for (i = 0; i < nargs; i++) for (i = 0; i < nargs; i++)
args.args[i] = va_arg(list, prom_arg_t); args.args[i] = cpu_to_be32(va_arg(list, prom_arg_t));
va_end(list); va_end(list);
for (i = 0; i < nret; i++) for (i = 0; i < nret; i++)
...@@ -84,9 +84,9 @@ static int of_call_prom_ret(const char *service, int nargs, int nret, ...@@ -84,9 +84,9 @@ static int of_call_prom_ret(const char *service, int nargs, int nret,
if (rets != (void *) 0) if (rets != (void *) 0)
for (i = 1; i < nret; ++i) for (i = 1; i < nret; ++i)
rets[i-1] = args.args[nargs+i]; rets[i-1] = be32_to_cpu(args.args[nargs+i]);
return (nret > 0)? args.args[nargs]: 0; return (nret > 0) ? be32_to_cpu(args.args[nargs]) : 0;
} }
/* returns true if s2 is a prefix of s1 */ /* returns true if s2 is a prefix of s1 */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment