Home | History | Annotate | Download | only in PiDxeS3BootScriptLib
      1 /** @file
      2   Support for S3 boot script lib. This file defined some internal macro and internal
      3   data structure
      4 
      5   Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>
      6 
      7   This program and the accompanying materials
      8   are licensed and made available under the terms and conditions
      9   of the BSD License which accompanies this distribution.  The
     10   full text of the license may be found at
     11   http://opensource.org/licenses/bsd-license.php
     12 
     13   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     14   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     15 
     16 **/
     17 #ifndef __INTERNAL_BOOT_SCRIPT_LIB__
     18 #define __INTERNAL_BOOT_SCRIPT_LIB__
     19 
     20 #include <PiDxe.h>
     21 
     22 #include <Guid/EventGroup.h>
     23 #include <Protocol/SmmBase2.h>
     24 #include <Protocol/DxeSmmReadyToLock.h>
     25 #include <Protocol/SmmReadyToLock.h>
     26 #include <Protocol/SmmExitBootServices.h>
     27 #include <Protocol/SmmLegacyBoot.h>
     28 
     29 #include <Library/S3BootScriptLib.h>
     30 
     31 #include <Library/UefiBootServicesTableLib.h>
     32 #include <Library/BaseLib.h>
     33 #include <Library/PcdLib.h>
     34 #include <Library/SmbusLib.h>
     35 #include <Library/IoLib.h>
     36 #include <Library/PciLib.h>
     37 #include <Library/DebugLib.h>
     38 #include <Library/BaseMemoryLib.h>
     39 #include <Library/TimerLib.h>
     40 #include <Library/UefiLib.h>
     41 #include <Library/LockBoxLib.h>
     42 
     43 #include "BootScriptInternalFormat.h"
     44 
     45 #define MAX_IO_ADDRESS 0xFFFF
     46 
     47 //
     48 // Macro to convert a UEFI PCI address to a PCI Library PCI address
     49 //
     50 #define PCI_ADDRESS_ENCODE(A) (UINTN)PCI_LIB_ADDRESS( \
     51         ((((UINTN)(A))& 0xff000000) >> 24), ((((UINTN)(A)) &0x00ff0000) >> 16), ((((UINTN)(A)) & 0xff00) >> 8), ((RShiftU64 ((A), 32) & 0xfff) | ((A)& 0xff)) \
     52         )
     53 
     54 
     55 
     56 typedef union {
     57   UINT8 volatile  *Buf;
     58   UINT8 volatile  *Uint8;
     59   UINT16 volatile *Uint16;
     60   UINT32 volatile *Uint32;
     61   UINT64 volatile *Uint64;
     62   UINTN volatile   Uint;
     63 } PTR;
     64 
     65 
     66 // Minimum and maximum length for SMBus bus block protocols defined in SMBus spec 2.0.
     67 //
     68 #define MIN_SMBUS_BLOCK_LEN               1
     69 #define MAX_SMBUS_BLOCK_LEN               32
     70 
     71 //
     72 // The boot script private data.
     73 //
     74 typedef struct {
     75   UINT8     *TableBase;
     76   UINT32    TableLength;            // Record the actual memory length
     77   UINT16    TableMemoryPageNumber;  // Record the page number Allocated for the table
     78   BOOLEAN   InSmm;                  // Record if this library is in SMM.
     79   BOOLEAN   AtRuntime;              // Record if current state is after SmmExitBootServices or SmmLegacyBoot.
     80   UINT32    BootTimeScriptLength;   // Maintain boot time script length in LockBox after SmmReadyToLock in SMM.
     81   BOOLEAN   SmmLocked;              // Record if current state is after SmmReadyToLock
     82   BOOLEAN   BackFromS3;             // Indicate that the system is back from S3.
     83 } SCRIPT_TABLE_PRIVATE_DATA;
     84 
     85 typedef
     86 EFI_STATUS
     87 (EFIAPI *DISPATCH_ENTRYPOINT_FUNC) (
     88   IN EFI_HANDLE ImageHandle,
     89   IN VOID       *Context
     90   );
     91 
     92 extern SCRIPT_TABLE_PRIVATE_DATA       *mS3BootScriptTablePtr;
     93 
     94 //
     95 // Define Opcode for Label which is implementation specific and no standard spec define.
     96 //
     97 #define  S3_BOOT_SCRIPT_LIB_LABEL_OPCODE    0xFE
     98 
     99 ///
    100 /// The opcode indicate the start of the boot script table.
    101 ///
    102 #define S3_BOOT_SCRIPT_LIB_TABLE_OPCODE                  0xAA
    103 ///
    104 /// The opcode indicate the end of the boot script table.
    105 ///
    106 #define S3_BOOT_SCRIPT_LIB_TERMINATE_OPCODE              0xFF
    107 
    108 
    109 #endif //__INTERNAL_BOOT_SCRIPT_LIB__
    110 
    111