[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