Home | History | Annotate | Download | only in OvmfPkg
      1 ## @file

      2 #  This FDF include file computes the end of the scratch buffer used in

      3 #  DecompressMemFvs() [OvmfPkg/Sec/SecMain.c]. It is based on the decompressed

      4 #  (ie. original) size of the LZMA-compressed section of the one FFS file in

      5 #  the FVMAIN_COMPACT firmware volume.

      6 #

      7 #  Copyright (C) 2015, Red Hat, Inc.

      8 #

      9 #  This program and the accompanying materials are licensed and made available

     10 #  under the terms and conditions of the BSD License which accompanies this

     11 #  distribution. The full text of the license may be found at

     12 #  http://opensource.org/licenses/bsd-license.php

     13 #

     14 #  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,

     15 #  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR

     16 #  IMPLIED.

     17 ##

     18 
     19 # The GUID EE4E5898-3914-4259-9D6E-DC7BD79403CF means "LzmaCustomDecompress".

     20 # The decompressed output will have the following structure (see the file

     21 # "9E21FD93-9C72-4c15-8C4B-E77F1DB2D792SEC1.guided.dummy" in the

     22 # Build/Ovmf*/*/FV/Ffs/9E21FD93-9C72-4c15-8C4B-E77F1DB2D792/ directory):

     23 #

     24 # Size                 Contents

     25 # -------------------  --------------------------------------------------------

     26 #                   4  EFI_COMMON_SECTION_HEADER, stating size 124 (0x7C) and

     27 #                      type 0x19 (EFI_SECTION_RAW). The purpose of this section

     28 #                      is to pad the start of PEIFV to 128 bytes.

     29 #                 120  Zero bytes (padding).

     30 #

     31 #                   4  EFI_COMMON_SECTION_HEADER, stating size

     32 #                      (PcdOvmfPeiMemFvSize + 4), and type 0x17

     33 #                      (EFI_SECTION_FIRMWARE_VOLUME_IMAGE).

     34 # PcdOvmfPeiMemFvSize  PEIFV. Note that the above sizes pad the offset of this

     35 #                      object to 128 bytes. See also the "guided.dummy.txt"

     36 #                      file in the same directory.

     37 #

     38 #                   4  EFI_COMMON_SECTION_HEADER, stating size 12 (0xC) and

     39 #                      type 0x19 (EFI_SECTION_RAW). The purpose of this section

     40 #                      is to pad the start of DXEFV to 16 bytes.

     41 #                   8  Zero bytes (padding).

     42 #

     43 #                   4  EFI_COMMON_SECTION_HEADER, stating size

     44 #                      (PcdOvmfDxeMemFvSize + 4), and type 0x17

     45 #                      (EFI_SECTION_FIRMWARE_VOLUME_IMAGE).

     46 # PcdOvmfDxeMemFvSize  DXEFV. Note that the above sizes pad the offset of this

     47 #                      object to 16 bytes. See also the "guided.dummy.txt" file

     48 #                      in the same directory.

     49 #

     50 # The total size after decompression is (128 + PcdOvmfPeiMemFvSize + 16 +

     51 # PcdOvmfDxeMemFvSize).

     52 
     53 DEFINE OUTPUT_SIZE = (128 + gUefiOvmfPkgTokenSpaceGuid.PcdOvmfPeiMemFvSize + 16 + gUefiOvmfPkgTokenSpaceGuid.PcdOvmfDxeMemFvSize)
     54 
     55 # LzmaCustomDecompressLib uses a constant scratch buffer size of 64KB; see

     56 # SCRATCH_BUFFER_REQUEST_SIZE in

     57 # "MdeModulePkg/Library/LzmaCustomDecompressLib/LzmaDecompress.c".

     58 
     59 DEFINE DECOMP_SCRATCH_SIZE = 0x00010000
     60 
     61 # Note: when we use PcdOvmfDxeMemFvBase in this context, BaseTools have not yet

     62 # offset it with MEMFD's base address. For that reason we have to do it manually.

     63 #

     64 # The calculation below mirrors DecompressMemFvs() [OvmfPkg/Sec/SecMain.c].

     65 
     66 DEFINE OUTPUT_BASE                   = ($(MEMFD_BASE_ADDRESS) + gUefiOvmfPkgTokenSpaceGuid.PcdOvmfDxeMemFvBase + 0x00100000)
     67 DEFINE DECOMP_SCRATCH_BASE_UNALIGNED = ($(OUTPUT_BASE) + $(OUTPUT_SIZE))
     68 DEFINE DECOMP_SCRATCH_BASE_ALIGNMENT = 0x000FFFFF
     69 DEFINE DECOMP_SCRATCH_BASE_MASK      = 0xFFF00000
     70 DEFINE DECOMP_SCRATCH_BASE           = (($(DECOMP_SCRATCH_BASE_UNALIGNED) + $(DECOMP_SCRATCH_BASE_ALIGNMENT)) & $(DECOMP_SCRATCH_BASE_MASK))
     71 
     72 SET gUefiOvmfPkgTokenSpaceGuid.PcdOvmfDecompressionScratchEnd = $(DECOMP_SCRATCH_BASE) + $(DECOMP_SCRATCH_SIZE)
     73