[OpenBIOS] r592 - trunk/openbios-devel/modules
svn at openbios.org
svn at openbios.org
Mon Nov 2 22:17:40 CET 2009
Author: laurent
Date: 2009-11-02 23:17:40 +0100 (Mon, 02 Nov 2009)
New Revision: 592
Modified:
trunk/openbios-devel/modules/client.c
Log:
client interface: add verbosity in traces
Signed-off-by: Laurent Vivier <Laurent at vivier.eu>
Modified: trunk/openbios-devel/modules/client.c
===================================================================
--- trunk/openbios-devel/modules/client.c 2009-11-01 23:27:35 UTC (rev 591)
+++ trunk/openbios-devel/modules/client.c 2009-11-02 22:17:40 UTC (rev 592)
@@ -36,7 +36,179 @@
ulong args[10]; /* MAX NUM ARGS! */
} prom_args_t;
+#ifdef DEBUG_CIF
+static void memdump(const char *mem, unsigned long size)
+{
+ int i;
+
+ if (size == (unsigned long) -1)
+ return;
+ for (i = 0; i < size; i += 16) {
+ int j;
+
+ printk("0x%08lx ", (unsigned long)mem + i);
+
+ for (j = 0; j < 16 && i + j < size; j++)
+ printk(" %02x", *(unsigned char*)(mem + i + j));
+
+ for ( ; j < 16; j++)
+ printk(" __");
+
+ printk(" ");
+
+ for (j = 0; j < 16 && i + j < size; j++) {
+ unsigned char c = *(mem + i + j);
+ if (isprint(c))
+ printk("%c", c);
+ else
+ printk(".");
+ }
+ printk("\n");
+ }
+}
+
+static void dump_service(prom_args_t *pb)
+{
+ int i;
+ printk("[ nargs %ld nret %ld ] ", pb->nargs, pb->nret);
+ if (strcmp(pb->service, "test") == 0) {
+ printk("test(\"%s\") = ", (char*)pb->args[0]);
+ } else if (strcmp(pb->service, "peer") == 0) {
+ printk("peer(0x%08lx) = ", pb->args[0]);
+ } else if (strcmp(pb->service, "child") == 0) {
+ printk("child(0x%08lx) = ", pb->args[0]);
+ } else if (strcmp(pb->service, "parent") == 0) {
+ printk("parent(0x%08lx) = ", pb->args[0]);
+ } else if (strcmp(pb->service, "instance-to-package") == 0) {
+ printk("instance-to-package(0x%08lx) = ", pb->args[0]);
+ } else if (strcmp(pb->service, "getproplen") == 0) {
+ printk("getproplen(0x%08lx, \"%s\") = ",
+ pb->args[0], (char*)pb->args[1]);
+ } else if (strcmp(pb->service, "getprop") == 0) {
+ printk("getprop(0x%08lx, \"%s\", 0x%08lx, %ld) = ",
+ pb->args[0], (char*)pb->args[1],
+ pb->args[2], pb->args[3]);
+ } else if (strcmp(pb->service, "nextprop") == 0) {
+ printk("nextprop(0x%08lx, \"%s\", 0x%08lx) = ",
+ pb->args[0], (char*)pb->args[1], pb->args[2]);
+ } else if (strcmp(pb->service, "setprop") == 0) {
+ printk("setprop(0x%08lx, \"%s\", 0x%08lx, %ld)\n",
+ pb->args[0], (char*)pb->args[1],
+ pb->args[2], pb->args[3]);
+ memdump((char*)pb->args[2], pb->args[3]);
+ printk(" = ");
+ } else if (strcmp(pb->service, "canon") == 0) {
+ printk("canon(\"%s\", 0x%08lx, %ld)\n",
+ (char*)pb->args[0], pb->args[1], pb->args[2]);
+ } else if (strcmp(pb->service, "finddevice") == 0) {
+ printk("finddevice(\"%s\") = ", (char*)pb->args[0]);
+ } else if (strcmp(pb->service, "instance-to-path") == 0) {
+ printk("instance-to-path(0x%08lx, 0x%08lx, %ld) = ",
+ pb->args[0], pb->args[1], pb->args[2]);
+ } else if (strcmp(pb->service, "package-to-path") == 0) {
+ printk("package-to-path(0x%08lx, 0x%08lx, %ld) = ",
+ pb->args[0], pb->args[1], pb->args[2]);
+ } else if (strcmp(pb->service, "open") == 0) {
+ printk("open(\"%s\") = ", (char*)pb->args[0]);
+ } else if (strcmp(pb->service, "close") == 0) {
+ printk("close(0x%08lx)\n", pb->args[0]);
+ } else if (strcmp(pb->service, "read") == 0) {
+ printk("read(0x%08lx, 0x%08lx, %ld) = ",
+ pb->args[0], pb->args[1], pb->args[2]);
+ } else if (strcmp(pb->service, "write") == 0) {
+ printk("write(0x%08lx, 0x%08lx, %ld)\n",
+ pb->args[0], pb->args[1], pb->args[2]);
+ memdump((char*)pb->args[1], pb->args[2]);
+ printk(" = ");
+ } else if (strcmp(pb->service, "seek") == 0) {
+ printk("seek(0x%08lx, 0x%08lx, 0x%08lx) = ",
+ pb->args[0], pb->args[1], pb->args[2]);
+ } else if (strcmp(pb->service, "claim") == 0) {
+ printk("claim(0x8%lx, %ld, %ld) = ",
+ pb->args[0], pb->args[1], pb->args[2]);
+ } else if (strcmp(pb->service, "release") == 0) {
+ printk("release(0x8%lx, %ld)\n",
+ pb->args[0], pb->args[1]);
+ } else if (strcmp(pb->service, "boot") == 0) {
+ printk("boot \"%s\"\n", (char*)pb->args[0]);
+ } else if (strcmp(pb->service, "enter") == 0) {
+ printk("enter()\n");
+ } else if (strcmp(pb->service, "exit") == 0) {
+ printk("exit()\n");
+ } else {
+ printk("of_client_interface: %s ", pb->service );
+ for( i = 0; i < pb->nargs; i++ )
+ printk("%lx ", pb->args[i] );
+ printk("\n");
+ }
+}
+
+static void dump_return(prom_args_t *pb)
+{
+ int i;
+ if (strcmp(pb->service, "test") == 0) {
+ printk(" %ld\n", pb->args[pb->nargs]);
+ } else if (strcmp(pb->service, "peer") == 0) {
+ printk("0x%08lx\n", pb->args[pb->nargs]);
+ } else if (strcmp(pb->service, "child") == 0) {
+ printk("0x%08lx\n", pb->args[pb->nargs]);
+ } else if (strcmp(pb->service, "parent") == 0) {
+ printk("0x%08lx\n", pb->args[pb->nargs]);
+ } else if (strcmp(pb->service, "instance-to-package") == 0) {
+ printk("0x%08lx\n", pb->args[pb->nargs]);
+ } else if (strcmp(pb->service, "getproplen") == 0) {
+ printk("0x%08lx\n", pb->args[pb->nargs]);
+ } else if (strcmp(pb->service, "getprop") == 0) {
+ printk("%ld\n", pb->args[pb->nargs]);
+ memdump((char*)pb->args[2], pb->args[pb->nargs]);
+ } else if (strcmp(pb->service, "nextprop") == 0) {
+ printk("%ld\n", pb->args[pb->nargs]);
+ memdump((char*)pb->args[2], pb->args[pb->nargs]);
+ } else if (strcmp(pb->service, "setprop") == 0) {
+ printk("%ld\n", pb->args[pb->nargs]);
+ } else if (strcmp(pb->service, "canon") == 0) {
+ printk("%ld\n", pb->args[pb->nargs]);
+ memdump((char*)pb->args[1], pb->args[pb->nargs]);
+ } else if (strcmp(pb->service, "finddevice") == 0) {
+ printk("0x%08lx\n", pb->args[pb->nargs]);
+ } else if (strcmp(pb->service, "instance-to-path") == 0) {
+ printk("%ld\n", pb->args[pb->nargs]);
+ memdump((char*)pb->args[1], pb->args[pb->nargs]);
+ } else if (strcmp(pb->service, "package-to-path") == 0) {
+ printk("%ld\n", pb->args[pb->nargs]);
+ memdump((char*)pb->args[1], pb->args[pb->nargs]);
+ } else if (strcmp(pb->service, "open") == 0) {
+ printk("0x%08lx\n", pb->args[pb->nargs]);
+ } else if (strcmp(pb->service, "close") == 0) {
+ /* do nothing */
+ } else if (strcmp(pb->service, "read") == 0) {
+ printk("%ld\n", pb->args[pb->nargs]);
+ memdump((char*)pb->args[1], pb->args[pb->nargs]);
+ } else if (strcmp(pb->service, "write") == 0) {
+ printk("%ld\n", pb->args[pb->nargs]);
+ } else if (strcmp(pb->service, "seek") == 0) {
+ printk("%ld\n", pb->args[pb->nargs]);
+ } else if (strcmp(pb->service, "claim") == 0) {
+ printk("0x%08lx\n", pb->args[pb->nargs]);
+ } else if (strcmp(pb->service, "release") == 0) {
+ /* do nothing */
+ } else if (strcmp(pb->service, "boot") == 0) {
+ /* do nothing */
+ } else if (strcmp(pb->service, "enter") == 0) {
+ /* do nothing */
+ } else if (strcmp(pb->service, "exit") == 0) {
+ /* do nothing */
+ } else {
+ printk("of_client_interface return:");
+ for (i = 0; i < pb->nret; i++) {
+ printk("%lx ", pb->args[pb->nargs + i]);
+ }
+ printk("\n");
+ }
+}
+#endif
+
/* call-method, interpret */
static int
handle_calls( prom_args_t *pb )
@@ -89,10 +261,7 @@
if( pb->nargs < 0 || pb->nret < 0 )
return -1;
#ifdef DEBUG_CIF
- printk("of_client_interface: %s ", pb->service );
- for( i=0; i<pb->nargs; i++ )
- printk("%lx ", pb->args[i] );
- printk("\n");
+ dump_service(pb);
#endif
/* call-method exceptions are special */
@@ -124,11 +293,7 @@
dstackcnt = dstacksave;
}
- printk("of_client_interface return:");
- for (i = 0; i < pb->nret; i++) {
- printk("%lx ", pb->args[pb->nargs + i]);
- }
- printk("\n");
+ dump_return(pb);
#endif
return 0;
}
More information about the OpenBIOS
mailing list