2007-07-22 Robert Millan <rmh@aybabtu.com>
* include/grub/ieee1275/ieee1275.h (grub_ieee1275_flag): Add GRUB_IEEE1275_FLAG_BROKEN_OUTPUT flag. * kern/powerpc/ieee1275/cmain.c (grub_ieee1275_find_options): Set this flag when running on SmartFirmware. * term/ieee1275/ofconsole.c (grub_ofconsole_init): Avoid running "output-device output" command when GRUB_IEEE1275_FLAG_BROKEN_OUTPUT was set. * kern/powerpc/ieee1275/openfw.c (grub_ieee1275_encode_devname): Increase partno when GRUB_IEEE1275_FLAG_0_BASED_PARTITIONS flag is set, rather than decreasing it. * util/i386/pc/grub-setup.c (setup): When embedding is required, but there's not enough space to do it, fail in the same way as when it can't be done because there are no partitions. * util/powerpc/ieee1275/grub-install.in: Improve error message shown when nvsetenv failed.
This commit is contained in:
		
							parent
							
								
									969c02ec31
								
							
						
					
					
						commit
						ad0686cc6d
					
				
					 7 changed files with 44 additions and 7 deletions
				
			
		
							
								
								
									
										21
									
								
								ChangeLog
									
										
									
									
									
								
							
							
						
						
									
										21
									
								
								ChangeLog
									
										
									
									
									
								
							|  | @ -1,3 +1,24 @@ | ||||||
|  | 2007-07-22  Robert Millan  <rmh@aybabtu.com> | ||||||
|  | 
 | ||||||
|  | 	* include/grub/ieee1275/ieee1275.h (grub_ieee1275_flag): Add | ||||||
|  | 	GRUB_IEEE1275_FLAG_BROKEN_OUTPUT flag. | ||||||
|  | 	* kern/powerpc/ieee1275/cmain.c (grub_ieee1275_find_options): Set this | ||||||
|  | 	flag when running on SmartFirmware. | ||||||
|  | 	* term/ieee1275/ofconsole.c (grub_ofconsole_init): Avoid running | ||||||
|  | 	"output-device output" command when GRUB_IEEE1275_FLAG_BROKEN_OUTPUT | ||||||
|  | 	was set. | ||||||
|  | 
 | ||||||
|  | 	* kern/powerpc/ieee1275/openfw.c (grub_ieee1275_encode_devname): | ||||||
|  | 	Increase partno when GRUB_IEEE1275_FLAG_0_BASED_PARTITIONS flag is set, | ||||||
|  | 	rather than decreasing it. | ||||||
|  | 
 | ||||||
|  | 	* util/i386/pc/grub-setup.c (setup): When embedding is required, but | ||||||
|  | 	there's not enough space to do it, fail in the same way as when it | ||||||
|  | 	can't be done because there are no partitions. | ||||||
|  | 
 | ||||||
|  | 	* util/powerpc/ieee1275/grub-install.in: Improve error message shown | ||||||
|  | 	when nvsetenv failed. | ||||||
|  | 
 | ||||||
| 2007-07-22  Yoshinori K. Okuji  <okuji@enbug.org> | 2007-07-22  Yoshinori K. Okuji  <okuji@enbug.org> | ||||||
| 
 | 
 | ||||||
| 	* conf/i386-pc.rmk (CLEANFILES): Removed for grub-mkrescue, | 	* conf/i386-pc.rmk (CLEANFILES): Removed for grub-mkrescue, | ||||||
|  |  | ||||||
|  | @ -79,6 +79,9 @@ enum grub_ieee1275_flag | ||||||
|   /* CHRP specifies partitions are numbered from 1 (partition 0 refers to the
 |   /* CHRP specifies partitions are numbered from 1 (partition 0 refers to the
 | ||||||
|      whole disk). However, CodeGen firmware numbers partitions from 0.  */ |      whole disk). However, CodeGen firmware numbers partitions from 0.  */ | ||||||
|   GRUB_IEEE1275_FLAG_0_BASED_PARTITIONS, |   GRUB_IEEE1275_FLAG_0_BASED_PARTITIONS, | ||||||
|  | 
 | ||||||
|  |   /* CodeGen firmware does not correctly implement "output-device output" */ | ||||||
|  |   GRUB_IEEE1275_FLAG_BROKEN_OUTPUT, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| extern int EXPORT_FUNC(grub_ieee1275_test_flag) (enum grub_ieee1275_flag flag); | extern int EXPORT_FUNC(grub_ieee1275_test_flag) (enum grub_ieee1275_flag flag); | ||||||
|  |  | ||||||
|  | @ -62,7 +62,10 @@ grub_ieee1275_find_options (void) | ||||||
|   grub_ieee1275_finddevice ("/openprom", &openprom); |   grub_ieee1275_finddevice ("/openprom", &openprom); | ||||||
|   rc = grub_ieee1275_get_property (openprom, "SmartFirmware-version", 0, 0, 0); |   rc = grub_ieee1275_get_property (openprom, "SmartFirmware-version", 0, 0, 0); | ||||||
|   if (rc >= 0) |   if (rc >= 0) | ||||||
|  |     { | ||||||
|       grub_ieee1275_set_flag (GRUB_IEEE1275_FLAG_0_BASED_PARTITIONS); |       grub_ieee1275_set_flag (GRUB_IEEE1275_FLAG_0_BASED_PARTITIONS); | ||||||
|  |       grub_ieee1275_set_flag (GRUB_IEEE1275_FLAG_BROKEN_OUTPUT); | ||||||
|  |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void cmain (uint32_t r3, uint32_t r4, uint32_t r5); | void cmain (uint32_t r3, uint32_t r4, uint32_t r5); | ||||||
|  |  | ||||||
|  | @ -372,7 +372,7 @@ grub_ieee1275_encode_devname (const char *path) | ||||||
| 
 | 
 | ||||||
|       if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_0_BASED_PARTITIONS)) |       if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_0_BASED_PARTITIONS)) | ||||||
| 	/* GRUB partition 1 is OF partition 0.  */ | 	/* GRUB partition 1 is OF partition 0.  */ | ||||||
| 	partno--; | 	partno++; | ||||||
| 
 | 
 | ||||||
|       /* Assume partno will require less than five bytes to encode.  */ |       /* Assume partno will require less than five bytes to encode.  */ | ||||||
|       encoding = grub_malloc (grub_strlen (device) + 3 + 5); |       encoding = grub_malloc (grub_strlen (device) + 3 + 5); | ||||||
|  |  | ||||||
|  | @ -311,7 +311,9 @@ grub_ofconsole_init (void) | ||||||
|   int col; |   int col; | ||||||
| 
 | 
 | ||||||
|   /* The latest PowerMacs don't actually initialize the screen for us, so we
 |   /* The latest PowerMacs don't actually initialize the screen for us, so we
 | ||||||
|    * use this trick to re-open the output device.  */ |    * use this trick to re-open the output device (but we avoid doing this on | ||||||
|  |    * platforms where it's known to be broken). */ | ||||||
|  |   if (! grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_BROKEN_OUTPUT)) | ||||||
|     grub_ieee1275_interpret ("output-device output", 0); |     grub_ieee1275_interpret ("output-device output", 0); | ||||||
| 
 | 
 | ||||||
|   if (grub_ieee1275_get_property (grub_ieee1275_chosen, "stdout", data, |   if (grub_ieee1275_get_property (grub_ieee1275_chosen, "stdout", data, | ||||||
|  |  | ||||||
|  | @ -105,6 +105,7 @@ setup (const char *prefix, const char *dir, | ||||||
|   grub_file_t file; |   grub_file_t file; | ||||||
|   FILE *fp; |   FILE *fp; | ||||||
|   unsigned long first_start = ~0UL; |   unsigned long first_start = ~0UL; | ||||||
|  |   int able_to_embed = 1; | ||||||
|    |    | ||||||
|   auto void save_first_sector (grub_disk_addr_t sector, unsigned offset, |   auto void save_first_sector (grub_disk_addr_t sector, unsigned offset, | ||||||
| 			       unsigned length); | 			       unsigned length); | ||||||
|  | @ -323,8 +324,13 @@ setup (const char *prefix, const char *dir, | ||||||
| 
 | 
 | ||||||
| 	  goto finish; | 	  goto finish; | ||||||
| 	} | 	} | ||||||
|  |       else | ||||||
|  |         able_to_embed = 0; | ||||||
|     } |     } | ||||||
|   else if (must_embed) |   else | ||||||
|  |     able_to_embed = 0; | ||||||
|  | 
 | ||||||
|  |   if (must_embed && !able_to_embed) | ||||||
|     grub_util_error ("Can't embed the core image, but this is required when\n" |     grub_util_error ("Can't embed the core image, but this is required when\n" | ||||||
| 		     "the root device is on a RAID array or LVM volume."); | 		     "the root device is on a RAID array or LVM volume."); | ||||||
|    |    | ||||||
|  |  | ||||||
|  | @ -208,9 +208,11 @@ if test $update_nvram = yes; then | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     # Point boot-device at the new grub install |     # Point boot-device at the new grub install | ||||||
|     "$nvsetenv" boot-device "$ofpath:$partno,"'\grub' || { |     boot_device="boot-device $ofpath:$partno,\\grub" | ||||||
|  |     "$nvsetenv" "$boot_device" || { | ||||||
| 	echo "$nvsetenv failed." | 	echo "$nvsetenv failed." | ||||||
| 	echo "You will have to set boot-device manually." | 	echo "You will have to set boot-device manually.  At the Open Firmware prompt, type:" | ||||||
|  | 	echo "  setenv $boot_device" | ||||||
| 	exit 1 | 	exit 1 | ||||||
|     } |     } | ||||||
| fi | fi | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue