177943Sdfr/* $FreeBSD: releng/11.0/sys/boot/efi/include/efifs.h 292625 2015-12-22 20:40:34Z emaste $ */ 277943Sdfr#ifndef _EFI_FS_H 377943Sdfr#define _EFI_FS_H 477943Sdfr 577943Sdfr/*++ 677943Sdfr 7163898SmarcelCopyright (c) 1999 - 2002 Intel Corporation. All rights reserved 8163898SmarcelThis software and associated documentation (if any) is furnished 9163898Smarcelunder a license and may only be used or copied in accordance 10163898Smarcelwith the terms of the license. Except as permitted by such 11163898Smarcellicense, no part of this software or documentation may be 12163898Smarcelreproduced, stored in a retrieval system, or transmitted in any 13163898Smarcelform or by any means without the express written consent of 14163898SmarcelIntel Corporation. 1577943Sdfr 1677943SdfrModule Name: 1777943Sdfr 1877943Sdfr efifs.h 1977943Sdfr 2077943SdfrAbstract: 2177943Sdfr 2277943Sdfr EFI File System structures 2377943Sdfr 2477943Sdfr 2577943Sdfr 2677943SdfrRevision History 2777943Sdfr 2877943Sdfr--*/ 2977943Sdfr 3077943Sdfr 31163898Smarcel// 32163898Smarcel// EFI Partition header (normaly starts in LBA 1) 33163898Smarcel// 3477943Sdfr 3577943Sdfr#define EFI_PARTITION_SIGNATURE 0x5053595320494249 3677943Sdfr#define EFI_PARTITION_REVISION 0x00010001 3777943Sdfr#define MIN_EFI_PARTITION_BLOCK_SIZE 512 3877943Sdfr#define EFI_PARTITION_LBA 1 3977943Sdfr 4077943Sdfrtypedef struct _EFI_PARTITION_HEADER { 4177943Sdfr EFI_TABLE_HEADER Hdr; 4277943Sdfr UINT32 DirectoryAllocationNumber; 4377943Sdfr UINT32 BlockSize; 4477943Sdfr EFI_LBA FirstUsableLba; 4577943Sdfr EFI_LBA LastUsableLba; 4677943Sdfr EFI_LBA UnusableSpace; 4777943Sdfr EFI_LBA FreeSpace; 4877943Sdfr EFI_LBA RootFile; 4977943Sdfr EFI_LBA SecutiryFile; 5077943Sdfr} EFI_PARTITION_HEADER; 5177943Sdfr 5277943Sdfr 53163898Smarcel// 54163898Smarcel// File header 55163898Smarcel// 5677943Sdfr 5777943Sdfr#define EFI_FILE_HEADER_SIGNATURE 0x454c494620494249 5877943Sdfr#define EFI_FILE_HEADER_REVISION 0x00010000 5977943Sdfr#define EFI_FILE_STRING_SIZE 260 6077943Sdfr 6177943Sdfrtypedef struct _EFI_FILE_HEADER { 6277943Sdfr EFI_TABLE_HEADER Hdr; 6377943Sdfr UINT32 Class; 6477943Sdfr UINT32 LBALOffset; 6577943Sdfr EFI_LBA Parent; 6677943Sdfr UINT64 FileSize; 6777943Sdfr UINT64 FileAttributes; 6877943Sdfr EFI_TIME FileCreateTime; 6977943Sdfr EFI_TIME FileModificationTime; 7077943Sdfr EFI_GUID VendorGuid; 7177943Sdfr CHAR16 FileString[EFI_FILE_STRING_SIZE]; 7277943Sdfr} EFI_FILE_HEADER; 7377943Sdfr 7477943Sdfr 75163898Smarcel// 76163898Smarcel// Return the file's first LBAL which is in the same 77163898Smarcel// logical block as the file header 78163898Smarcel// 7977943Sdfr 8077943Sdfr#define EFI_FILE_LBAL(a) ((EFI_LBAL *) (((CHAR8 *) (a)) + (a)->LBALOffset)) 8177943Sdfr 8277943Sdfr#define EFI_FILE_CLASS_FREE_SPACE 1 8377943Sdfr#define EFI_FILE_CLASS_EMPTY 2 8477943Sdfr#define EFI_FILE_CLASS_NORMAL 3 8577943Sdfr 8677943Sdfr 87163898Smarcel// 88163898Smarcel// Logical Block Address List - the fundemental block 89163898Smarcel// description structure 90163898Smarcel// 9177943Sdfr 9277943Sdfr#define EFI_LBAL_SIGNATURE 0x4c41424c20494249 9377943Sdfr#define EFI_LBAL_REVISION 0x00010000 9477943Sdfr 9577943Sdfrtypedef struct _EFI_LBAL { 9677943Sdfr EFI_TABLE_HEADER Hdr; 9777943Sdfr UINT32 Class; 9877943Sdfr EFI_LBA Parent; 9977943Sdfr EFI_LBA Next; 10077943Sdfr UINT32 ArraySize; 10177943Sdfr UINT32 ArrayCount; 10277943Sdfr} EFI_LBAL; 10377943Sdfr 104292625Semaste// Array size 10577943Sdfr#define EFI_LBAL_ARRAY_SIZE(lbal,offs,blks) \ 10677943Sdfr (((blks) - (offs) - (lbal)->Hdr.HeaderSize) / sizeof(EFI_RL)) 10777943Sdfr 108163898Smarcel// 109163898Smarcel// Logical Block run-length 110163898Smarcel// 11177943Sdfr 11277943Sdfrtypedef struct { 11377943Sdfr EFI_LBA Start; 11477943Sdfr UINT64 Length; 11577943Sdfr} EFI_RL; 11677943Sdfr 117163898Smarcel// 118163898Smarcel// Return the run-length structure from an LBAL header 119163898Smarcel// 12077943Sdfr 12177943Sdfr#define EFI_LBAL_RL(a) ((EFI_RL*) (((CHAR8 *) (a)) + (a)->Hdr.HeaderSize)) 12277943Sdfr 12377943Sdfr#endif 124