[OpenBIOS] r570 - in trunk/openbios-devel: arch/ppc/qemu modules

svn at openbios.org svn at openbios.org
Sat Aug 29 17:24:49 CEST 2009


Author: laurent
Date: 2009-08-29 17:24:49 +0200 (Sat, 29 Aug 2009)
New Revision: 570

Modified:
   trunk/openbios-devel/arch/ppc/qemu/main.c
   trunk/openbios-devel/modules/mac-parts.c
Log:
For mac-parts, when no partition number is provided, open the first HFS 
partition (type is "Apple_HFS").

Signed-off-by: Laurent Vivier <Laurent at vivier.eu>



Modified: trunk/openbios-devel/arch/ppc/qemu/main.c
===================================================================
--- trunk/openbios-devel/arch/ppc/qemu/main.c	2009-08-23 12:40:24 UTC (rev 569)
+++ trunk/openbios-devel/arch/ppc/qemu/main.c	2009-08-29 15:24:49 UTC (rev 570)
@@ -126,11 +126,11 @@
 		path++;
 
 	if (!*path)
-		return 0;
+		return -1;
 	path++;
 
 	if (!strchr(path, ','))	/* check if there is a ',' */
-		return 0;
+		return -1;
 
 	return atol(path);
 }
@@ -177,10 +177,16 @@
 	char path[1024];
 	phandle_t chosen_ph = find_dev("/chosen");
 	char *filename, *directory;
+	int partition;
 
 	filename = get_filename(spec, &directory);
-	snprintf(path, sizeof(path), "%s:%d,%s\\%s", get_device(spec),
-		 get_partition(spec), directory, filename);
+	partition = get_partition(spec);
+	if (partition == -1)
+		snprintf(path, sizeof(path), "%s:,%s\\%s", get_device(spec),
+			 directory, filename);
+	else
+		snprintf(path, sizeof(path), "%s:%d,%s\\%s", get_device(spec),
+			 partition, directory, filename);
 
         ELF_DPRINTF("bootpath %s bootargs %s\n", path, args);
 	set_property( chosen_ph, "bootpath", path, strlen(spec)+1 );
@@ -240,8 +246,12 @@
 
     /* read boot script */
 
-    snprintf(bootscript, sizeof(bootscript), "%s:%d,%s",
-             device, partition, script_path);
+    if (partition == -1)
+        snprintf(bootscript, sizeof(bootscript), "%s:,%s",
+                 device, script_path);
+    else
+        snprintf(bootscript, sizeof(bootscript), "%s:%d,%s",
+                 device, partition, script_path);
 
     CHRP_DPRINTF("Trying %s\n", bootscript);
     if ((fd = open_io(bootscript)) == -1) {
@@ -287,7 +297,10 @@
                 strcpy(bootscript + scriptlen, device);
                 scriptlen += strlen(device);
             } else if (strcasecmp(tagbuf, "partition") == 0) {
-		sprintf(bootscript + scriptlen, "%d", partition);
+                if (partition != -1)
+		    sprintf(bootscript + scriptlen, "%d", partition);
+                else
+                    *(bootscript + scriptlen) = 0;
                 scriptlen = strlen(bootscript);
             } else if (strcasecmp(tagbuf, "directory") == 0) {
                 strcpy(bootscript + scriptlen, directory);
@@ -409,11 +422,11 @@
                 uint16_t boot_device = fw_cfg_read_i16(FW_CFG_BOOT_DEVICE);
                 switch (boot_device) {
                 case 'c':
-                    path = strdup("hd:0");
+                    path = strdup("hd:");
                     break;
                 default:
                 case 'd':
-                    path = strdup("cd:0");
+                    path = strdup("cd:");
                     break;
                 }
 	        for( i=0; i < sizeof(chrp_paths) / sizeof(chrp_paths[0]); i++ ) {

Modified: trunk/openbios-devel/modules/mac-parts.c
===================================================================
--- trunk/openbios-devel/modules/mac-parts.c	2009-08-23 12:40:24 UTC (rev 569)
+++ trunk/openbios-devel/modules/mac-parts.c	2009-08-29 15:24:49 UTC (rev 570)
@@ -90,6 +90,7 @@
 		goto out;
 
         if (parnum == -1) {
+		int firstHFS = -1;
 		/* search a bootable partition */
 		/* see PowerPC Microprocessor CHRP bindings */
 
@@ -101,6 +102,10 @@
                             !par.pmPartBlkCnt )
 				goto out;
 
+			if (firstHFS == -1 &&
+			    strcmp(par.pmPartType, "Apple_HFS") == 0)
+				firstHFS = parnum;
+
 			if( (par.pmPartStatus & kPartitionAUXIsBootValid) &&
 			    (par.pmPartStatus & kPartitionAUXIsValid) &&
 			    (par.pmPartStatus & kPartitionAUXIsAllocated) &&
@@ -120,6 +125,10 @@
 			parnum++;
 		}
 		/* not found */
+		if (firstHFS != -1) {
+			parnum = firstHFS;
+			goto found;
+		}
 		ret = 0;
 		goto out;
         }
@@ -135,6 +144,7 @@
 	if( parnum > par.pmMapBlkCnt)
 		goto out;
 
+found:
 	SEEK( (bs * parnum) );
 	READ( &par, sizeof(par) );
 	if( par.pmSig != DESC_PART_SIGNATURE || !par.pmPartBlkCnt )




More information about the OpenBIOS mailing list