1 /** @file
2 
3   Parts of the SMM/MM implementation that are specific to standalone MM
4 
5 Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR>
6 Copyright (c) 2018, Linaro, Ltd. All rights reserved.<BR>
7 SPDX-License-Identifier: BSD-2-Clause-Patent
8 
9 **/
10 
11 #include <Library/SmmMemLib.h>
12 #include <Library/UefiBootServicesTableLib.h>
13 #include "FaultTolerantWrite.h"
14 #include "FaultTolerantWriteSmmCommon.h"
15 
16 /**
17   This function checks if the buffer is valid per processor architecture and
18   does not overlap with SMRAM.
19 
20   @param Buffer The buffer start address to be checked.
21   @param Length The buffer length to be checked.
22 
23   @retval TRUE  This buffer is valid per processor architecture and does not
24                 overlap with SMRAM.
25   @retval FALSE This buffer is not valid per processor architecture or overlaps
26                 with SMRAM.
27 **/
28 BOOLEAN
FtwSmmIsBufferOutsideSmmValid(IN EFI_PHYSICAL_ADDRESS Buffer,IN UINT64 Length)29 FtwSmmIsBufferOutsideSmmValid (
30   IN EFI_PHYSICAL_ADDRESS  Buffer,
31   IN UINT64                Length
32   )
33 {
34   return TRUE;
35 }
36 
37 /**
38   Internal implementation of CRC32. Depending on the execution context
39   (standalone SMM or DXE vs standalone MM), this function is implemented
40   via a call to the CalculateCrc32 () boot service, or via a library
41   call.
42 
43   If Buffer is NULL, then ASSERT().
44   If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
45 
46   @param[in]  Buffer       A pointer to the buffer on which the 32-bit CRC is to be computed.
47   @param[in]  Length       The number of bytes in the buffer Data.
48 
49   @retval Crc32            The 32-bit CRC was computed for the data buffer.
50 
51 **/
52 UINT32
FtwCalculateCrc32(IN VOID * Buffer,IN UINTN Length)53 FtwCalculateCrc32 (
54   IN  VOID                         *Buffer,
55   IN  UINTN                        Length
56   )
57 {
58   return CalculateCrc32 (Buffer, Length);
59 }
60 
61 /**
62   Notify the system that the SMM FTW driver is ready.
63 **/
64 VOID
FtwNotifySmmReady(VOID)65 FtwNotifySmmReady (
66   VOID
67   )
68 {
69 }
70 
71 /**
72   This function is the entry point of the Fault Tolerant Write driver.
73 
74   @param[in] ImageHandle        A handle for the image that is initializing this driver
75   @param[in] MmSystemTable      A pointer to the MM system table
76 
77   @retval EFI_SUCCESS           The initialization finished successfully.
78   @retval EFI_OUT_OF_RESOURCES  Allocate memory error
79   @retval EFI_INVALID_PARAMETER Workspace or Spare block does not exist
80 
81 **/
82 EFI_STATUS
83 EFIAPI
StandaloneMmFaultTolerantWriteInitialize(IN EFI_HANDLE ImageHandle,IN EFI_MM_SYSTEM_TABLE * MmSystemTable)84 StandaloneMmFaultTolerantWriteInitialize (
85   IN EFI_HANDLE            ImageHandle,
86   IN EFI_MM_SYSTEM_TABLE   *MmSystemTable
87   )
88 {
89   return MmFaultTolerantWriteInitialize ();
90 }
91