53
55
#define GRUB_PC_PARTITION_TYPE_GPT_DISK 0xee
54
56
#define GRUB_PC_PARTITION_TYPE_LINUX_RAID 0xfd
56
/* Constants for BSD disk label. */
57
#define GRUB_PC_PARTITION_BSD_LABEL_SECTOR 1
58
#define GRUB_PC_PARTITION_BSD_LABEL_MAGIC 0x82564557
59
#define GRUB_PC_PARTITION_BSD_MAX_ENTRIES 8
61
/* BSD partition types. */
62
#define GRUB_PC_PARTITION_BSD_TYPE_UNUSED 0
63
#define GRUB_PC_PARTITION_BSD_TYPE_SWAP 1
64
#define GRUB_PC_PARTITION_BSD_TYPE_V6 2
65
#define GRUB_PC_PARTITION_BSD_TYPE_V7 3
66
#define GRUB_PC_PARTITION_BSD_TYPE_SYSV 4
67
#define GRUB_PC_PARTITION_BSD_TYPE_V71K 5
68
#define GRUB_PC_PARTITION_BSD_TYPE_V8 6
69
#define GRUB_PC_PARTITION_BSD_TYPE_BSDFFS 7
70
#define GRUB_PC_PARTITION_BSD_TYPE_MSDOS 8
71
#define GRUB_PC_PARTITION_BSD_TYPE_BSDLFS 9
72
#define GRUB_PC_PARTITION_BSD_TYPE_OTHER 10
73
#define GRUB_PC_PARTITION_BSD_TYPE_HPFS 11
74
#define GRUB_PC_PARTITION_BSD_TYPE_ISO9660 12
75
#define GRUB_PC_PARTITION_BSD_TYPE_BOOT 13
77
/* FreeBSD-specific types. */
78
#define GRUB_PC_PARTITION_FREEBSD_TYPE_VINUM 14
79
#define GRUB_PC_PARTITION_FREEBSD_TYPE_RAID 15
80
#define GRUB_PC_PARTITION_FREEBSD_TYPE_JFS2 21
82
/* NetBSD-specific types. */
83
#define GRUB_PC_PARTITION_NETBSD_TYPE_ADOS 14
84
#define GRUB_PC_PARTITION_NETBSD_TYPE_HFS 15
85
#define GRUB_PC_PARTITION_NETBSD_TYPE_FILECORE 16
86
#define GRUB_PC_PARTITION_NETBSD_TYPE_EXT2FS 17
87
#define GRUB_PC_PARTITION_NETBSD_TYPE_NTFS 18
88
#define GRUB_PC_PARTITION_NETBSD_TYPE_RAID 19
89
#define GRUB_PC_PARTITION_NETBSD_TYPE_CCD 20
90
#define GRUB_PC_PARTITION_NETBSD_TYPE_JFS2 21
91
#define GRUB_PC_PARTITION_NETBSD_TYPE_APPLEUFS 22
93
/* OpenBSD-specific types. */
94
#define GRUB_PC_PARTITION_OPENBSD_TYPE_ADOS 14
95
#define GRUB_PC_PARTITION_OPENBSD_TYPE_HFS 15
96
#define GRUB_PC_PARTITION_OPENBSD_TYPE_FILECORE 16
97
#define GRUB_PC_PARTITION_OPENBSD_TYPE_EXT2FS 17
98
#define GRUB_PC_PARTITION_OPENBSD_TYPE_NTFS 18
99
#define GRUB_PC_PARTITION_OPENBSD_TYPE_RAID 19
101
/* The BSD partition entry. */
102
struct grub_msdos_partition_bsd_entry
105
grub_uint32_t offset;
106
grub_uint32_t fragment_size;
107
grub_uint8_t fs_type;
108
grub_uint8_t fs_fragments;
109
grub_uint16_t fs_cylinders;
110
} __attribute__ ((packed));
112
/* The BSD disk label. Only define members useful for GRUB. */
113
struct grub_msdos_partition_disk_label
116
grub_uint8_t padding[128];
117
grub_uint32_t magic2;
118
grub_uint16_t checksum;
119
grub_uint16_t num_partitions;
120
grub_uint32_t boot_size;
121
grub_uint32_t superblock_size;
122
struct grub_msdos_partition_bsd_entry entries[GRUB_PC_PARTITION_BSD_MAX_ENTRIES];
123
} __attribute__ ((packed));
125
58
/* The partition entry. */
126
59
struct grub_msdos_partition_entry
168
101
} __attribute__ ((packed));
171
struct grub_msdos_partition
173
/* The DOS partition number. */
176
/* The BSD partition number (a == 0). */
179
/* The DOS partition type. */
182
/* The BSD partition type. */
185
/* The offset of the extended partition. */
186
unsigned long ext_offset;
189
105
static inline int
190
106
grub_msdos_partition_is_empty (int type)
200
116
|| type == GRUB_PC_PARTITION_TYPE_LINUX_EXTENDED);
204
grub_msdos_partition_is_bsd (int type)
206
return (type == GRUB_PC_PARTITION_TYPE_FREEBSD
207
|| type == GRUB_PC_PARTITION_TYPE_OPENBSD
208
|| type == GRUB_PC_PARTITION_TYPE_NETBSD);
120
grub_partition_msdos_iterate (grub_disk_t disk,
121
int (*hook) (grub_disk_t disk,
122
const grub_partition_t partition));
211
124
#endif /* ! GRUB_PC_PARTITION_HEADER */