return EFI_SUCCESS;\r
}\r
\r
-\r
+STATIC\r
VOID\r
EFIAPI\r
GenericArchProtocolNotify (\r
ARCHITECTURAL_PROTOCOL_ENTRY *Entry;\r
VOID *Protocol;\r
BOOLEAN Found;\r
+ LIST_ENTRY *Link;\r
+ LIST_ENTRY TempLinkNode;\r
\r
Found = FALSE;\r
for (Entry = mArchProtocols; Entry->ProtocolGuid != NULL; Entry++) {\r
// When runtime architectural protocol is available, updates CRC32 in the Debug Table\r
//\r
CoreUpdateDebugTableCrc32 ();\r
+\r
+ //\r
+ // Update the Runtime Architectural protocol with the template that the core was\r
+ // using so there would not need to be a dependency on the Runtime AP\r
+ //\r
+\r
+ //\r
+ // Copy all the registered Image to new gRuntime protocol\r
+ //\r
+ for (Link = gRuntimeTemplate.ImageHead.ForwardLink; Link != &gRuntimeTemplate.ImageHead; Link = TempLinkNode.ForwardLink) {\r
+ CopyMem (&TempLinkNode, Link, sizeof(LIST_ENTRY));\r
+ InsertTailList (&gRuntime->ImageHead, Link);\r
+ }\r
+ //\r
+ // Copy all the registered Event to new gRuntime protocol\r
+ //\r
+ for (Link = gRuntimeTemplate.EventHead.ForwardLink; Link != &gRuntimeTemplate.EventHead; Link = TempLinkNode.ForwardLink) {\r
+ CopyMem (&TempLinkNode, Link, sizeof(LIST_ENTRY));\r
+ InsertTailList (&gRuntime->EventHead, Link);\r
+ }\r
+ \r
+ //\r
+ // Clean up gRuntimeTemplate\r
+ //\r
+ gRuntimeTemplate.ImageHead.ForwardLink = &gRuntimeTemplate.ImageHead;\r
+ gRuntimeTemplate.ImageHead.BackLink = &gRuntimeTemplate.ImageHead;\r
+ gRuntimeTemplate.EventHead.ForwardLink = &gRuntimeTemplate.EventHead;\r
+ gRuntimeTemplate.EventHead.BackLink = &gRuntimeTemplate.EventHead;\r
}\r
}\r
\r