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
|
---|
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
|
---|
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
|
---|
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
|
---|
84 | StandaloneMmFaultTolerantWriteInitialize (
|
---|
85 | IN EFI_HANDLE ImageHandle,
|
---|
86 | IN EFI_MM_SYSTEM_TABLE *MmSystemTable
|
---|
87 | )
|
---|
88 | {
|
---|
89 | return MmFaultTolerantWriteInitialize ();
|
---|
90 | }
|
---|