Home | History | Annotate | Download | only in FvbRuntimeService
      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