1 /**@file 2 Copyright (c) 2007, Intel Corporation. All rights reserved.<BR> 3 This program and the accompanying materials 4 are licensed and made available under the terms and conditions of the BSD License 5 which accompanies this distribution. The full text of the license may be found at 6 http://opensource.org/licenses/bsd-license.php 7 8 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 9 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 10 11 Module Name: 12 13 FvbInfo.c 14 15 Abstract: 16 17 Defines data structure that is the volume header found.These data is intent 18 to decouple FVB driver with FV header. 19 20 **/ 21 #include "FileIo.h" 22 #include "FlashLayout.h" 23 24 typedef struct { 25 UINT64 FvLength; 26 EFI_FIRMWARE_VOLUME_HEADER FvbInfo; 27 EFI_FV_BLOCK_MAP_ENTRY End; 28 } EFI_FVB_MEDIA_INFO; 29 30 #define FVB_MEDIA_BLOCK_SIZE FIRMWARE_BLOCK_SIZE 31 #define RECOVERY_BOIS_BLOCK_NUM FIRMWARE_BLOCK_NUMBER 32 #define SYSTEM_NV_BLOCK_NUM 2 33 34 EFI_FVB_MEDIA_INFO mPlatformFvbMediaInfo[] = { 35 // 36 // Systen NvStorage FVB 37 // 38 { 39 NV_STORAGE_FVB_SIZE, 40 { 41 { 42 0, 43 }, // ZeroVector[16] 44 EFI_SYSTEM_NV_DATA_FV_GUID, 45 NV_STORAGE_FVB_SIZE, 46 EFI_FVH_SIGNATURE, 47 EFI_FVB2_READ_ENABLED_CAP | 48 EFI_FVB2_READ_STATUS | 49 EFI_FVB2_WRITE_ENABLED_CAP | 50 EFI_FVB2_WRITE_STATUS | 51 EFI_FVB2_ERASE_POLARITY, 52 sizeof (EFI_FIRMWARE_VOLUME_HEADER) + sizeof (EFI_FV_BLOCK_MAP_ENTRY), 53 0, // CheckSum 54 0, // ExtHeaderOffset 55 { 56 0, 57 }, // Reserved[1] 58 1, // Revision 59 { 60 NV_STORAGE_FVB_BLOCK_NUM, 61 FV_BLOCK_SIZE, 62 } 63 }, 64 { 65 0, 66 0 67 } 68 }, 69 // 70 // System FTW FVB 71 // 72 { 73 NV_FTW_FVB_SIZE, 74 { 75 { 76 0, 77 }, // ZeroVector[16] 78 EFI_SYSTEM_NV_DATA_FV_GUID, 79 NV_FTW_FVB_SIZE, 80 EFI_FVH_SIGNATURE, 81 EFI_FVB2_READ_ENABLED_CAP | 82 EFI_FVB2_READ_STATUS | 83 EFI_FVB2_WRITE_ENABLED_CAP | 84 EFI_FVB2_WRITE_STATUS | 85 EFI_FVB2_ERASE_POLARITY, 86 sizeof (EFI_FIRMWARE_VOLUME_HEADER) + sizeof (EFI_FV_BLOCK_MAP_ENTRY), 87 0, // CheckSum 88 0, // ExtHeaderOffset 89 { 90 0, 91 }, // Reserved[1] 92 1, // Revision 93 { 94 NV_FTW_FVB_BLOCK_NUM, 95 FV_BLOCK_SIZE, 96 } 97 }, 98 { 99 0, 100 0 101 } 102 } 103 }; 104 105 EFI_STATUS 106 GetFvbInfo ( 107 IN UINT64 FvLength, 108 OUT EFI_FIRMWARE_VOLUME_HEADER **FvbInfo 109 ) 110 { 111 UINTN Index; 112 113 for (Index = 0; Index < sizeof (mPlatformFvbMediaInfo) / sizeof (EFI_FVB_MEDIA_INFO); Index += 1) { 114 if (mPlatformFvbMediaInfo[Index].FvLength == FvLength) { 115 *FvbInfo = &mPlatformFvbMediaInfo[Index].FvbInfo; 116 return EFI_SUCCESS; 117 } 118 } 119 120 return EFI_NOT_FOUND; 121 } 122