#ifndef MBR_H #define MBR_H #include "sassert.h" enum MBR_PARTTYPE { MBR_EMPTY = 0, MBR_FAT12 = 0x01, MBR_FAT16_32MB = 0x04, MBR_EXT = 0x05, MBR_FAT16 = 0x06, MBR_IFS = 0x07, MBR_FAT32 = 0x0B, MBR_FAT32_LBA = 0x0C, MBR_FAT16_LBA = 0x0E, MBR_EXT_LBA = 0x0F, MBR_LINUX_SWAP = 0x82, MBR_LINUX = 0x83, }; typedef _Packed struct MBR_CHS { uint8_t head; unsigned sector : 6; unsigned cyl : 10; } MBR_CHS; STATIC_ASSERT(sizeof(MBR_CHS) == 3); typedef _Packed struct MBR_PARTENTRY { uint8_t status; MBR_CHS chsFirst; uint8_t type; MBR_CHS chsLast; uint32_t lbaFirst; uint32_t lbaLen; } MBR_PARTENTRY; STATIC_ASSERT(sizeof(MBR_PARTENTRY) == 16); #define MBR_PARTENTRY_OFFSET_ON_DISK 446 #define MBR_SIGNATURE_OFFSET_ON_DISK 510 #endif // MBR_H