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