Revision: 13728
          http://edk2.svn.sourceforge.net/edk2/?rev=13728&view=rev
Author:   qianouyang
Date:     2012-09-12 10:20:34 +0000 (Wed, 12 Sep 2012)
Log Message:
-----------
Add Tper Reset Logic by using MOR bit.

Signed-off-by: Ouyang, Qian <[email protected]>
Reviewed-by: Tian, Feng <[email protected]>
             Dong, Guo <[email protected]>

Modified Paths:
--------------
    trunk/edk2/SecurityPkg/Tcg/MemoryOverwriteControl/TcgMor.c
    trunk/edk2/SecurityPkg/Tcg/MemoryOverwriteControl/TcgMor.h
    trunk/edk2/SecurityPkg/Tcg/MemoryOverwriteControl/TcgMor.inf

Modified: trunk/edk2/SecurityPkg/Tcg/MemoryOverwriteControl/TcgMor.c
===================================================================
--- trunk/edk2/SecurityPkg/Tcg/MemoryOverwriteControl/TcgMor.c  2012-09-12 
10:19:50 UTC (rev 13727)
+++ trunk/edk2/SecurityPkg/Tcg/MemoryOverwriteControl/TcgMor.c  2012-09-12 
10:20:34 UTC (rev 13728)
@@ -4,7 +4,7 @@
   This driver initilize MemoryOverwriteRequestControl variable. It 
   will clear MOR_CLEAR_MEMORY_BIT bit if it is set.
 
-Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2009 - 2012, Intel Corporation. All rights reserved.<BR>
 This program and the accompanying materials 
 are licensed and made available under the terms and conditions of the BSD 
License 
 which accompanies this distribution.  The full text of the license may be 
found at 
@@ -17,7 +17,51 @@
 
 #include "TcgMor.h"
 
+UINT8    mMorControl;
+
 /**
+  Ready to Boot Event notification handler.
+
+  Sequence of OS boot events is measured in this event notification handler.
+
+  @param[in]  Event     Event whose notification function is being invoked
+  @param[in]  Context   Pointer to the notification function's context
+
+**/
+VOID
+EFIAPI
+OnReadyToBoot (
+  IN      EFI_EVENT                 Event,
+  IN      VOID                      *Context
+  )
+{
+  UINTN       DataSize;
+  
+  if (MOR_CLEAR_MEMORY_VALUE (mMorControl) == 0x0) {
+    //
+    // MorControl is expected, directly return to avoid unnecessary variable 
operation
+    //
+    return ;
+  }
+  //
+  // Clear MOR_CLEAR_MEMORY_BIT
+  //
+  DEBUG ((EFI_D_INFO, "TcgMor: Clear MorClearMemory bit\n"));
+  mMorControl &= 0xFE;  
+
+  DataSize = sizeof (mMorControl);
+  gRT->SetVariable (
+         MEMORY_OVERWRITE_REQUEST_VARIABLE_NAME, 
+         &gEfiMemoryOverwriteControlDataGuid, 
+         EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | 
EFI_VARIABLE_RUNTIME_ACCESS,
+         DataSize, 
+         &mMorControl
+         );
+
+}
+
+
+/**
   Entry Point for TCG MOR Control driver.
 
   @param[in] ImageHandle  Image handle of this driver.
@@ -34,48 +78,49 @@
   )
 {
   EFI_STATUS  Status;
-  UINT8       MorControl;
   UINTN       DataSize;
+  EFI_EVENT   Event;
 
   ///
   /// The firmware is required to create the MemoryOverwriteRequestControl 
UEFI variable.
   ///
 
-  DataSize = sizeof (MorControl);
+  DataSize = sizeof (mMorControl);
   Status = gRT->GetVariable (
                   MEMORY_OVERWRITE_REQUEST_VARIABLE_NAME, 
                   &gEfiMemoryOverwriteControlDataGuid, 
                   NULL, 
                   &DataSize, 
-                  &MorControl
+                  &mMorControl
                   );
   if (EFI_ERROR (Status)) {
     //
     // Set default value to 0
     //
-    MorControl = 0;
+    mMorControl = 0;
+    DEBUG ((EFI_D_INFO, "TcgMor: Create 
gEfiMemoryOverwriteControlDataGuid!\n"));
+    Status = gRT->SetVariable (
+                    MEMORY_OVERWRITE_REQUEST_VARIABLE_NAME, 
+                    &gEfiMemoryOverwriteControlDataGuid, 
+                    EFI_VARIABLE_NON_VOLATILE | 
EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
+                    DataSize, 
+                    &mMorControl
+                    );
+    ASSERT_EFI_ERROR (Status);
+    
   } else {
-    if (MOR_CLEAR_MEMORY_VALUE (MorControl) == 0x0) {
-      //
-      // MorControl is expected, directly return to avoid unnecessary variable 
operation
-      //
-      return EFI_SUCCESS;
-    }
     //
-    // Clear MOR_CLEAR_MEMORY_BIT
+    // Create a Ready To Boot Event and Clear the MorControl bit in the call 
back function.
     //
-    DEBUG ((EFI_D_INFO, "TcgMor: Clear MorClearMemory bit\n"));
-    MorControl &= 0xFE;
-  }
+    DEBUG ((EFI_D_INFO, "TcgMor: Create ReadyToBoot Event for MorControl Bit 
cleanning!\n"));
+    Status = EfiCreateEventReadyToBootEx (
+               TPL_CALLBACK,
+               OnReadyToBoot,
+               NULL,
+               &Event
+               );
+  }    
   
-  Status = gRT->SetVariable (
-                  MEMORY_OVERWRITE_REQUEST_VARIABLE_NAME, 
-                  &gEfiMemoryOverwriteControlDataGuid, 
-                  EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS 
| EFI_VARIABLE_RUNTIME_ACCESS,
-                  DataSize, 
-                  &MorControl
-                  );
-  ASSERT_EFI_ERROR (Status);
   return Status;
 }
 

Modified: trunk/edk2/SecurityPkg/Tcg/MemoryOverwriteControl/TcgMor.h
===================================================================
--- trunk/edk2/SecurityPkg/Tcg/MemoryOverwriteControl/TcgMor.h  2012-09-12 
10:19:50 UTC (rev 13727)
+++ trunk/edk2/SecurityPkg/Tcg/MemoryOverwriteControl/TcgMor.h  2012-09-12 
10:20:34 UTC (rev 13728)
@@ -1,7 +1,7 @@
 /** @file
   The header file for TcgMor.
 
-Copyright (c) 2009, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2009 - 2012, Intel Corporation. All rights reserved.<BR>
 This program and the accompanying materials 
 are licensed and made available under the terms and conditions of the BSD 
License 
 which accompanies this distribution.  The full text of the license may be 
found at 
@@ -22,6 +22,7 @@
 #include <Library/UefiDriverEntryPoint.h>
 #include <Library/UefiRuntimeServicesTableLib.h>
 #include <Library/DebugLib.h>
+#include <Library/UefiLib.h>
 
 #endif
 

Modified: trunk/edk2/SecurityPkg/Tcg/MemoryOverwriteControl/TcgMor.inf
===================================================================
--- trunk/edk2/SecurityPkg/Tcg/MemoryOverwriteControl/TcgMor.inf        
2012-09-12 10:19:50 UTC (rev 13727)
+++ trunk/edk2/SecurityPkg/Tcg/MemoryOverwriteControl/TcgMor.inf        
2012-09-12 10:20:34 UTC (rev 13728)
@@ -1,7 +1,7 @@
 ## @file
 #  Component description file for Memory Overwrite Control driver.
 #
-# Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2009 - 2012, Intel Corporation. All rights reserved.<BR>
 # This program and the accompanying materials
 # are licensed and made available under the terms and conditions of the BSD 
License
 # which accompanies this distribution. The full text of the license may be 
found at
@@ -39,6 +39,7 @@
   UefiRuntimeServicesTableLib
   ReportStatusCodeLib
   DebugLib
+  UefiLib
 
 [Guids]
   gEfiMemoryOverwriteControlDataGuid            # GUID ALWAYS_CONSUMED

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits

Reply via email to