Files
openbios/modules/mac-parts.h
Laurent Vivier 2df8b7381b If the partition type is the mac partition type, this patch allows to
not select the partition to boot from but to boot from the first 
bootable partition.

"PowerPC Microprocessor Common Hardware Reference Platform (CHRP)
System binding to:
IEEE Std 1275-1994 Standard for Boot (Initialization, Configuration) 
Firmware
Revision: 1.8"

"Chapter 11.1.2. Open Method Algorith"

"[...] If the partition component is present, it selects the desired 
partition, where partition 0 refers to the entire disk, partition 1 
refers to the first partition, partition 2 to the second, and so forth. 
If the partition component is absent and the disk has an FDISK or Mac 
partition, the first "bootable" partition is used. [...]"



git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@542 f158a5a8-5612-0410-a976-696ce0be7e32
2009-08-08 22:00:10 +00:00

89 lines
2.5 KiB
C

/*
* Creation Date: <1999/07/06 15:45:12 samuel>
* Time-stamp: <2002/10/20 16:31:48 samuel>
*
* <partition_table.h>
*
* Headers describing the partition table
*
* Copyright (C) 1999, 2002 Samuel Rydh (samuel@ibrium.se)
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation
*
*/
#ifndef _H_PARTITION_TABLE
#define _H_PARTITION_TABLE
/* This information is based upon IM vol V. */
#define DESC_MAP_SIGNATURE 0x4552
#define DESC_PART_SIGNATURE 0x504d
enum {
kPartitionAUXIsValid = 0x00000001,
kPartitionAUXIsAllocated = 0x00000002,
kPartitionAUXIsInUse = 0x00000004,
kPartitionAUXIsBootValid = 0x00000008,
kPartitionAUXIsReadable = 0x00000010,
kPartitionAUXIsWriteable = 0x00000020,
kPartitionAUXIsBootCodePositionIndependent = 0x00000040,
kPartitionISMountedAtStartup = 0x40000000,
kPartitionIsStartup = 0x80000000,
kPartitionIsChainCompatible = 0x00000100,
kPartitionIsRealDeviceDriver = 0x00000200,
kPartitionCanChainToNext = 0x00000400,
};
typedef struct {
long ddBlock; /* first block of driver */
short ddSize; /* driver size in blocks */
short ddType; /* 1 & -1 for SCSI */
} driver_entry_t;
typedef struct { /* Block 0 of a device */
short sbSig; /* always 0x4552 */
short sbBlockSize; /* 512 */
long sbBlkCount; /* #blocks on device */
short sbDevType; /* 0 */
short sbDevID; /* 0 */
long sbData; /* 0 */
short sbDrvrCount; /* #driver descriptors */
/* driver entries goes here */
driver_entry_t drivers[61] __attribute__ ((packed));
short filler1;
long filler2;
} desc_map_t;
typedef struct { /* Partition descriptor */
short pmSig; /* always 0x504d 'PM' */
short pmSigPad; /* 0 */
ulong pmMapBlkCnt; /* #blocks in partition map */
ulong pmPyPartStart; /* first physical block of part. */
ulong pmPartBlkCnt; /* #blocks in partition */
char pmPartName[32]; /* partition name */
char pmPartType[32]; /* partition type */
/* these fields may or may not be used */
ulong pmLgDataStart;
ulong pmDataCnt;
ulong pmPartStatus;
ulong pmLgBootStart;
ulong pmBootSize;
ulong pmBootLoad;
ulong pmBootLoad2;
ulong pmBootEntry;
ulong pmBootEntry2;
ulong pmBootCksum;
char pmProcessor[16];
char filler[376]; /* might contain extra information */
} part_entry_t;
#endif /* _H_PARTITION_TABLE */