]> code.delx.au - refind/blobdiff - refind/gpt.h
New files required for reading and parsing GPT data.
[refind] / refind / gpt.h
diff --git a/refind/gpt.h b/refind/gpt.h
new file mode 100644 (file)
index 0000000..3a6d912
--- /dev/null
@@ -0,0 +1,89 @@
+/*
+ * refind/gpt.h
+ * Functions related to GPT data structures
+ *
+ * Copyright (c) 2014 Roderick W. Smith
+ * All rights reserved.
+ *
+ * This program is distributed under the terms of the GNU General Public
+ * License (GPL) version 3 (GPLv3), a copy of which must be distributed
+ * with this source code or binaries made from it.
+ *
+ */
+
+#include "global.h"
+
+#ifndef __GPT_H_
+#define __GPT_H_
+
+#ifdef __MAKEWITH_GNUEFI
+#include "efi.h"
+#include "efilib.h"
+#else
+#include "../include/tiano_includes.h"
+#endif
+
+#pragma pack(1)
+typedef struct {
+   UINT8   flags;
+   UINT8   start_chs[3];
+   UINT8   type;
+   UINT8   end_chs[3];
+   UINT32  start_lba;
+   UINT32  size;
+} MBR_PART_INFO;
+
+// A 512-byte data structure into which the MBR can be loaded in one
+// go. Also used when loading logical partitions.
+
+typedef struct {
+   UINT8            code[440];
+   UINT32           diskSignature;
+   UINT16           nulls;
+   MBR_PART_INFO    partitions[4];
+   UINT16           MBRSignature;
+} MBR_RECORD;
+
+typedef struct {
+   UINT64  signature;
+   UINT32  spec_revision;
+   UINT32  header_size;
+   UINT32  header_crc32;
+   UINT32  reserved;
+   UINT64  header_lba;
+   UINT64  alternate_header_lba;
+   UINT64  first_usable_lba;
+   UINT64  last_usable_lba;
+   UINT8   disk_guid[16];
+   UINT64  entry_lba;
+   UINT32  entry_count;
+   UINT32  entry_size;
+   UINT32  entry_crc32;
+   UINT8   reserved2[420];
+} GPT_HEADER;
+
+typedef struct {
+   UINT8   type_guid[16];
+   UINT8   partition_guid[16];
+   UINT64  start_lba;
+   UINT64  end_lba;
+   UINT64  attributes;
+   CHAR16  name[36];
+} GPT_ENTRY;
+
+typedef struct _gpt_data {
+   MBR_RECORD         *ProtectiveMBR;
+   GPT_HEADER         *Header;
+   GPT_ENTRY          *Entries;
+   struct _gpt_data   *NextEntry;
+} GPT_DATA;
+
+#pragma pack(0)
+
+VOID ClearGptData(GPT_DATA *Data);
+EFI_STATUS ReadGptData(REFIT_VOLUME *Volume, GPT_DATA **Data);
+CHAR16 * PartNameFromGuid(EFI_GUID *Guid);
+VOID ForgetPartitionTables(VOID);
+VOID AddPartitionTable(REFIT_VOLUME *Volume);
+
+#endif
\ No newline at end of file