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
GetFvbInfo(IN UINT64 FvLength,OUT EFI_FIRMWARE_VOLUME_HEADER ** FvbInfo)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