1 /*
2  *   Creation Date: <1999/07/06 15:45:12 samuel>
3  *   Time-stamp: <2002/10/20 16:31:48 samuel>
4  *
5  *	<partition_table.h>
6  *
7  *	Headers describing the partition table
8  *
9  *   Copyright (C) 1999, 2002 Samuel Rydh (samuel@ibrium.se)
10  *
11  *   This program is free software; you can redistribute it and/or
12  *   modify it under the terms of the GNU General Public License
13  *   as published by the Free Software Foundation
14  *
15  */
16 
17 #ifndef _H_PARTITION_TABLE
18 #define _H_PARTITION_TABLE
19 
20 /* This information is based upon IM vol V. */
21 
22 #define DESC_MAP_SIGNATURE	0x4552
23 #define DESC_PART_SIGNATURE	0x504d
24 
25 enum {
26 	kPartitionAUXIsValid         = 0x00000001,
27 	kPartitionAUXIsAllocated     = 0x00000002,
28 	kPartitionAUXIsInUse         = 0x00000004,
29 	kPartitionAUXIsBootValid     = 0x00000008,
30 	kPartitionAUXIsReadable      = 0x00000010,
31 	kPartitionAUXIsWriteable     = 0x00000020,
32 	kPartitionAUXIsBootCodePositionIndependent = 0x00000040,
33 	kPartitionISMountedAtStartup = 0x40000000,
34 	kPartitionIsStartup          = 0x80000000,
35 	kPartitionIsChainCompatible  = 0x00000100,
36 	kPartitionIsRealDeviceDriver = 0x00000200,
37 	kPartitionCanChainToNext     = 0x00000400,
38 };
39 
40 typedef struct {
41 	u32		ddBlock;		/* first block of driver */
42 	u16		ddSize;			/* driver size in blocks */
43 	s16		ddType;			/* 1 & -1 for SCSI */
44 } driver_entry_t;
45 
46 typedef struct { /* Block 0 of a device */
47 	u16		sbSig;			/* always 0x4552 */
48 	u16		sbBlockSize;		/* 512 */
49 	s32		sbBlkCount;		/* #blocks on device */
50 	u16		sbDevType;    		/* 0 */
51 	u16		sbDevID;      		/* 0 */
52 	u32		sbData;      		/* 0 */
53 	s16		sbDrvrCount;		/* #driver descriptors */
54 
55 	/* driver entries goes here */
56 	driver_entry_t	drivers[61] __attribute__ ((packed));
57 
58 	u16		filler1;
59 	u32		filler2;
60 } desc_map_t;
61 
62 typedef struct { /* Partition descriptor */
63 	u16		pmSig;			/* always 0x504d 'PM' */
64 	u16		pmSigPad;		/* 0 */
65 	u32		pmMapBlkCnt;		/* #blocks in partition map */
66 	u32		pmPyPartStart;		/* first physical block of part. */
67 	u32		pmPartBlkCnt;		/* #blocks in partition */
68 	char		pmPartName[32];		/* partition name */
69 	char		pmPartType[32];		/* partition type */
70 
71 	/* these fields may or may not be used */
72 	u32		pmLgDataStart;
73 	u32		pmDataCnt;
74 	u32		pmPartStatus;
75 	u32		pmLgBootStart;
76 	u32		pmBootSize;
77 	u32		pmBootLoad;
78 	u32		pmBootLoad2;
79 	u32		pmBootEntry;
80 	u32		pmBootEntry2;
81 	u32		pmBootCksum;
82 	char		pmProcessor[16];
83 
84 	char		filler[376];		/* might contain extra information */
85 } part_entry_t;
86 
87 
88 #endif   /* _H_PARTITION_TABLE */
89