Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 2 Apr 2012 16:30:05 GMT
From:      dfilter@FreeBSD.ORG (dfilter service)
To:        freebsd-ppc@FreeBSD.org
Subject:   Re: powerpc/162091: commit references a PR
Message-ID:  <201204021630.q32GU57Y046829@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR powerpc/162091; it has been noted by GNATS.

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: powerpc/162091: commit references a PR
Date: Mon,  2 Apr 2012 16:26:47 +0000 (UTC)

 Author: andreast
 Date: Mon Apr  2 16:26:32 2012
 New Revision: 233783
 URL: http://svn.freebsd.org/changeset/base/233783
 
 Log:
   - Write the ISO9660 descriptor after the apm partition entries.
   - Fill the needed pmPartStatus flags. At least the OpenBIOS
     implementation relies on these flags.
   
   This commit fixes the panic seen on OS-X when inserting a FreeBSD/ppc disc.
   Additionally OpenBIOS recognizes the partition where the boot code is located.
   This lets us load a FreeBSD/ppc PowerMac kernel inside qemu.
   
   PR:	powerpc/162091
   MFC after:	1 week
 
 Modified:
   head/usr.sbin/makefs/cd9660/cd9660_eltorito.c
 
 Modified: head/usr.sbin/makefs/cd9660/cd9660_eltorito.c
 ==============================================================================
 --- head/usr.sbin/makefs/cd9660/cd9660_eltorito.c	Mon Apr  2 16:13:54 2012	(r233782)
 +++ head/usr.sbin/makefs/cd9660/cd9660_eltorito.c	Mon Apr  2 16:26:32 2012	(r233783)
 @@ -538,9 +538,19 @@ cd9660_write_apm_partition_entry(FILE *f
      off_t sector_start, off_t nsectors, off_t sector_size,
      const char *part_name, const char *part_type)
  {
 -	uint32_t apm32;
 +	uint32_t apm32, part_status;
  	uint16_t apm16;
  
 +	/* See Apple Tech Note 1189 for the details about the pmPartStatus
 +	 * flags.
 +	 * Below the flags which are default:
 +	 * - IsValid     0x01
 +	 * - IsAllocated 0x02
 +	 * - IsReadable  0x10
 +	 * - IsWritable  0x20
 +	 */
 +	part_status = 0x01 | 0x02 | 0x10 | 0x20;
 +
  	if (fseeko(fd, (off_t)(idx + 1) * sector_size, SEEK_SET) == -1)
  		err(1, "fseeko");
  
 @@ -562,6 +572,17 @@ cd9660_write_apm_partition_entry(FILE *f
  	fwrite(part_name, strlen(part_name) + 1, 1, fd);
  	fseek(fd, 32 - strlen(part_name) - 1, SEEK_CUR);
  	fwrite(part_type, strlen(part_type) + 1, 1, fd);
 +	fseek(fd, 32 - strlen(part_type) - 1, SEEK_CUR);
 +
 +	apm32 = 0;
 +	/* pmLgDataStart */
 +        fwrite(&apm32, sizeof(apm32), 1, fd);
 +	/* pmDataCnt */ 
 +	apm32 = htobe32(nsectors);
 +        fwrite(&apm32, sizeof(apm32), 1, fd);
 +	/* pmPartStatus */
 +	apm32 = htobe32(part_status);
 +        fwrite(&apm32, sizeof(apm32), 1, fd);
  
  	return 0;
  }
 @@ -666,12 +687,6 @@ cd9660_write_boot(FILE *fd)
  		cd9660_write_apm_partition_entry(fd, 0, total_parts, 1,
  		    total_parts, 512, "Apple", "Apple_partition_map");
  
 -		/* Write ISO9660 descriptor, enclosing the whole disk */
 -		cd9660_write_apm_partition_entry(fd, 1, total_parts, 0,
 -		    diskStructure.totalSectors *
 -		    (diskStructure.sectorSize / 512), 512, "ISO9660",
 -		    "CD_ROM_Mode_1");
 -
  		/* Write all partition entries */
  		apm_partitions = 0;
  		TAILQ_FOREACH(t, &diskStructure.boot_images, image_list) {
 @@ -679,11 +694,16 @@ cd9660_write_boot(FILE *fd)
  				continue;
  
  			cd9660_write_apm_partition_entry(fd,
 -			    2 + apm_partitions++, total_parts,
 +			    1 + apm_partitions++, total_parts,
  			    t->sector * (diskStructure.sectorSize / 512),
  			    t->num_sectors * (diskStructure.sectorSize / 512),
  			    512, "CD Boot", "Apple_Bootstrap");
  		}
 +		/* Write ISO9660 descriptor, enclosing the whole disk */
 +                cd9660_write_apm_partition_entry(fd, 2 + apm_partitions,
 +		    total_parts, 0, diskStructure.totalSectors *
 +		    (diskStructure.sectorSize / 512), 512, "ISO9660",
 +		    "CD_ROM_Mode_1");
  	}
  
  	return 0;
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201204021630.q32GU57Y046829>