1 1.1 jakllsch /* $NetBSD: efifs.h,v 1.1.1.1 2014/04/01 16:16:07 jakllsch Exp $ */ 2 1.1 jakllsch 3 1.1 jakllsch #ifndef _EFI_FS_H 4 1.1 jakllsch #define _EFI_FS_H 5 1.1 jakllsch 6 1.1 jakllsch /*++ 7 1.1 jakllsch 8 1.1 jakllsch Copyright (c) 1998 Intel Corporation 9 1.1 jakllsch 10 1.1 jakllsch Module Name: 11 1.1 jakllsch 12 1.1 jakllsch efifs.h 13 1.1 jakllsch 14 1.1 jakllsch Abstract: 15 1.1 jakllsch 16 1.1 jakllsch EFI File System structures 17 1.1 jakllsch 18 1.1 jakllsch 19 1.1 jakllsch 20 1.1 jakllsch Revision History 21 1.1 jakllsch 22 1.1 jakllsch --*/ 23 1.1 jakllsch 24 1.1 jakllsch 25 1.1 jakllsch // 26 1.1 jakllsch // EFI Partition header (normaly starts in LBA 1) 27 1.1 jakllsch // 28 1.1 jakllsch 29 1.1 jakllsch #define EFI_PARTITION_SIGNATURE 0x5053595320494249 30 1.1 jakllsch #define EFI_PARTITION_REVISION 0x00010001 31 1.1 jakllsch #define MIN_EFI_PARTITION_BLOCK_SIZE 512 32 1.1 jakllsch #define EFI_PARTITION_LBA 1 33 1.1 jakllsch 34 1.1 jakllsch typedef struct _EFI_PARTITION_HEADER { 35 1.1 jakllsch EFI_TABLE_HEADER Hdr; 36 1.1 jakllsch UINT32 DirectoryAllocationNumber; 37 1.1 jakllsch UINT32 BlockSize; 38 1.1 jakllsch EFI_LBA FirstUsableLba; 39 1.1 jakllsch EFI_LBA LastUsableLba; 40 1.1 jakllsch EFI_LBA UnusableSpace; 41 1.1 jakllsch EFI_LBA FreeSpace; 42 1.1 jakllsch EFI_LBA RootFile; 43 1.1 jakllsch EFI_LBA SecutiryFile; 44 1.1 jakllsch } EFI_PARTITION_HEADER; 45 1.1 jakllsch 46 1.1 jakllsch 47 1.1 jakllsch // 48 1.1 jakllsch // File header 49 1.1 jakllsch // 50 1.1 jakllsch 51 1.1 jakllsch #define EFI_FILE_HEADER_SIGNATURE 0x454c494620494249 52 1.1 jakllsch #define EFI_FILE_HEADER_REVISION 0x00010000 53 1.1 jakllsch #define EFI_FILE_STRING_SIZE 260 54 1.1 jakllsch 55 1.1 jakllsch typedef struct _EFI_FILE_HEADER { 56 1.1 jakllsch EFI_TABLE_HEADER Hdr; 57 1.1 jakllsch UINT32 Class; 58 1.1 jakllsch UINT32 LBALOffset; 59 1.1 jakllsch EFI_LBA Parent; 60 1.1 jakllsch UINT64 FileSize; 61 1.1 jakllsch UINT64 FileAttributes; 62 1.1 jakllsch EFI_TIME FileCreateTime; 63 1.1 jakllsch EFI_TIME FileModificationTime; 64 1.1 jakllsch EFI_GUID VendorGuid; 65 1.1 jakllsch CHAR16 FileString[EFI_FILE_STRING_SIZE]; 66 1.1 jakllsch } EFI_FILE_HEADER; 67 1.1 jakllsch 68 1.1 jakllsch 69 1.1 jakllsch // 70 1.1 jakllsch // Return the file's first LBAL which is in the same 71 1.1 jakllsch // logical block as the file header 72 1.1 jakllsch // 73 1.1 jakllsch 74 1.1 jakllsch #define EFI_FILE_LBAL(a) ((EFI_LBAL *) (((CHAR8 *) (a)) + (a)->LBALOffset)) 75 1.1 jakllsch 76 1.1 jakllsch #define EFI_FILE_CLASS_FREE_SPACE 1 77 1.1 jakllsch #define EFI_FILE_CLASS_EMPTY 2 78 1.1 jakllsch #define EFI_FILE_CLASS_NORMAL 3 79 1.1 jakllsch 80 1.1 jakllsch 81 1.1 jakllsch // 82 1.1 jakllsch // Logical Block Address List - the fundemental block 83 1.1 jakllsch // description structure 84 1.1 jakllsch // 85 1.1 jakllsch 86 1.1 jakllsch #define EFI_LBAL_SIGNATURE 0x4c41424c20494249 87 1.1 jakllsch #define EFI_LBAL_REVISION 0x00010000 88 1.1 jakllsch 89 1.1 jakllsch typedef struct _EFI_LBAL { 90 1.1 jakllsch EFI_TABLE_HEADER Hdr; 91 1.1 jakllsch UINT32 Class; 92 1.1 jakllsch EFI_LBA Parent; 93 1.1 jakllsch EFI_LBA Next; 94 1.1 jakllsch UINT32 ArraySize; 95 1.1 jakllsch UINT32 ArrayCount; 96 1.1 jakllsch } EFI_LBAL; 97 1.1 jakllsch 98 1.1 jakllsch // Array size 99 1.1 jakllsch #define EFI_LBAL_ARRAY_SIZE(lbal,offs,blks) \ 100 1.1 jakllsch (((blks) - (offs) - (lbal)->Hdr.HeaderSize) / sizeof(EFI_RL)) 101 1.1 jakllsch 102 1.1 jakllsch // 103 1.1 jakllsch // Logical Block run-length 104 1.1 jakllsch // 105 1.1 jakllsch 106 1.1 jakllsch typedef struct { 107 1.1 jakllsch EFI_LBA Start; 108 1.1 jakllsch UINT64 Length; 109 1.1 jakllsch } EFI_RL; 110 1.1 jakllsch 111 1.1 jakllsch // 112 1.1 jakllsch // Return the run-length structure from an LBAL header 113 1.1 jakllsch // 114 1.1 jakllsch 115 1.1 jakllsch #define EFI_LBAL_RL(a) ((EFI_RL*) (((CHAR8 *) (a)) + (a)->Hdr.HeaderSize)) 116 1.1 jakllsch 117 1.1 jakllsch #endif 118 1.1 jakllsch 119