summaryrefslogtreecommitdiffhomepage
path: root/dev/kernel/FirmwareKit/GPT.h
blob: 370f2517531d566a1d1f883f90d8b8098166e9c9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
/* -------------------------------------------

  Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved.

------------------------------------------- */

#pragma once

#include <FirmwareKit/EFI/EFI.h>
#include <NeKit/Defines.h>

#define kSectorAlignGPT_PartTbl (420U)
#define kSectorAlignGPT_PartEntry (72U)
#define kMagicLenGPT (8U)
#define kMagicGPT ("EFI PART")  // "EFI PART"
#define kGPTPartitionTableLBA (512U + sizeof(GPT_PARTITION_TABLE))

namespace Kernel {
struct GPT_PARTITION_TABLE;
struct GPT_PARTITION_ENTRY;

struct PACKED GPT_PARTITION_TABLE final {
  Char    Signature[kMagicLenGPT];
  UInt32  Revision;
  UInt32  HeaderSize;
  UInt32  CRC32;
  UInt32  Reserved1;
  UInt64  LBAHeader;
  UInt64  LBAAltHeader;
  UInt64  FirstGPTEntry;
  UInt64  LastGPTEntry;
  EfiGUID Guid;
  UInt64  StartingLBA;
  UInt32  NumPartitionEntries;
  UInt32  SizeOfEntries;
  UInt32  CRC32PartEntry;
  UInt8   Reserved2[kSectorAlignGPT_PartTbl];
};

struct PACKED GPT_PARTITION_ENTRY {
  EfiGUID PartitionTypeGUID;
  EfiGUID UniquePartitionGUID;
  UInt64  StartLBA;
  UInt64  EndLBA;
  UInt64  Attributes;
  UInt8   Name[kSectorAlignGPT_PartEntry];
};
}  // namespace Kernel