1 /** @file 2 * 3 * Copyright (c) 2012-2014, ARM Limited. All rights reserved. 4 * 5 * This program and the accompanying materials 6 * are licensed and made available under the terms and conditions of the BSD License 7 * which accompanies this distribution. The full text of the license may be found at 8 * http://opensource.org/licenses/bsd-license.php 9 * 10 * THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 12 * 13 **/ 14 15 #ifndef __BOOTMONFS_INTERNAL_H__ 16 #define __BOOTMONFS_INTERNAL_H__ 17 18 #include <PiDxe.h> 19 #include <Library/UefiLib.h> 20 #include <Library/DebugLib.h> 21 #include <Library/BaseMemoryLib.h> 22 #include <Library/MemoryAllocationLib.h> 23 24 #include <Protocol/BlockIo.h> 25 #include <Protocol/DiskIo.h> 26 #include <Protocol/FirmwareVolumeBlock.h> 27 #include <Protocol/SimpleFileSystem.h> 28 29 #include <Guid/BootMonFsFileInfo.h> 30 #include <Guid/FileInfo.h> 31 #include <Guid/FileSystemInfo.h> 32 #include <Guid/FileSystemVolumeLabelInfo.h> 33 34 #include "BootMonFsHw.h" 35 36 #define BOOTMON_FS_VOLUME_LABEL L"NOR Flash" 37 38 typedef struct _BOOTMON_FS_INSTANCE BOOTMON_FS_INSTANCE; 39 40 typedef struct { 41 LIST_ENTRY Link; 42 VOID* Buffer; 43 UINTN Size; 44 UINT64 Offset; // Offset from the start of the file 45 } BOOTMON_FS_FILE_REGION; 46 47 typedef struct { 48 UINT32 Signature; 49 LIST_ENTRY Link; 50 BOOTMON_FS_INSTANCE *Instance; 51 52 UINTN HwDescAddress; 53 HW_IMAGE_DESCRIPTION HwDescription; 54 55 EFI_FILE_PROTOCOL File; 56 57 // 58 // The following fields are relevant only if the file is open. 59 // 60 61 EFI_FILE_INFO *Info; 62 UINT64 Position; 63 // If the file needs to be flushed then this list contain the memory 64 // buffer that creates this file 65 LIST_ENTRY RegionToFlushLink; 66 UINT64 OpenMode; 67 } BOOTMON_FS_FILE; 68 69 #define BOOTMON_FS_FILE_SIGNATURE SIGNATURE_32('b', 'o', 't', 'f') 70 #define BOOTMON_FS_FILE_FROM_FILE_THIS(a) CR (a, BOOTMON_FS_FILE, File, BOOTMON_FS_FILE_SIGNATURE) 71 #define BOOTMON_FS_FILE_FROM_LINK_THIS(a) CR (a, BOOTMON_FS_FILE, Link, BOOTMON_FS_FILE_SIGNATURE) 72 73 struct _BOOTMON_FS_INSTANCE { 74 UINT32 Signature; 75 EFI_HANDLE ControllerHandle; 76 77 LIST_ENTRY Link; 78 79 EFI_DRIVER_BINDING_PROTOCOL *Binding; 80 EFI_DISK_IO_PROTOCOL *DiskIo; 81 EFI_BLOCK_IO_PROTOCOL *BlockIo; 82 EFI_BLOCK_IO_MEDIA *Media; 83 EFI_DEVICE_PATH_PROTOCOL *DevicePath; 84 85 EFI_SIMPLE_FILE_SYSTEM_PROTOCOL Fs; 86 87 EFI_FILE_SYSTEM_INFO FsInfo; 88 CHAR16 Label[20]; 89 90 BOOTMON_FS_FILE *RootFile; // All the other files are linked to this root 91 BOOLEAN Initialized; 92 }; 93 94 #define BOOTMON_FS_SIGNATURE SIGNATURE_32('b', 'o', 't', 'm') 95 #define BOOTMON_FS_FROM_FS_THIS(a) CR (a, BOOTMON_FS_INSTANCE, Fs, BOOTMON_FS_SIGNATURE) 96 #define BOOTMON_FS_FROM_LINK(a) CR (a, BOOTMON_FS_INSTANCE, Link, BOOTMON_FS_SIGNATURE) 97 98 #include "BootMonFsApi.h" 99 100 #endif 101 102