return EFI_INVALID_PARAMETER;\r
}\r
\r
- if (!mTcgDxeData.GetEventLogCalled[Index]) {\r
- EventLogAreaStruct = &mTcgDxeData.EventLogAreaStruct[Index];\r
- } else {\r
- EventLogAreaStruct = &mTcgDxeData.FinalEventLogAreaStruct[Index];\r
- }\r
+ //\r
+ // Record to normal event log\r
+ //\r
+ EventLogAreaStruct = &mTcgDxeData.EventLogAreaStruct[Index];\r
\r
if (EventLogAreaStruct->EventLogTruncated) {\r
return EFI_VOLUME_FULL;\r
NewEventSize\r
);\r
\r
- if (Status == EFI_DEVICE_ERROR) {\r
- return EFI_DEVICE_ERROR;\r
- } else if (Status == EFI_OUT_OF_RESOURCES) {\r
+ if (Status == EFI_OUT_OF_RESOURCES) {\r
EventLogAreaStruct->EventLogTruncated = TRUE;\r
return EFI_VOLUME_FULL;\r
} else if (Status == EFI_SUCCESS) {\r
EventLogAreaStruct->EventLogStarted = TRUE;\r
- if (mTcgDxeData.GetEventLogCalled[Index]) {\r
+ }\r
+\r
+ //\r
+ // If GetEventLog is called, record to FinalEventsTable, too.\r
+ //\r
+ if (mTcgDxeData.GetEventLogCalled[Index]) {\r
+ if (mTcgDxeData.FinalEventsTable[Index] == NULL) {\r
+ //\r
+ // no need for FinalEventsTable\r
+ //\r
+ return EFI_SUCCESS;\r
+ }\r
+ EventLogAreaStruct = &mTcgDxeData.FinalEventLogAreaStruct[Index];\r
+\r
+ if (EventLogAreaStruct->EventLogTruncated) {\r
+ return EFI_VOLUME_FULL;\r
+ }\r
+\r
+ EventLogAreaStruct->LastEvent = (UINT8*)(UINTN)EventLogAreaStruct->Lasa;\r
+ Status = TcgCommLogEvent (\r
+ &EventLogAreaStruct->LastEvent,\r
+ &EventLogAreaStruct->EventLogSize,\r
+ (UINTN)EventLogAreaStruct->Laml,\r
+ NewEventHdr,\r
+ NewEventHdrSize,\r
+ NewEventData,\r
+ NewEventSize\r
+ );\r
+ if (Status == EFI_OUT_OF_RESOURCES) {\r
+ EventLogAreaStruct->EventLogTruncated = TRUE;\r
+ return EFI_VOLUME_FULL;\r
+ } else if (Status == EFI_SUCCESS) {\r
+ EventLogAreaStruct->EventLogStarted = TRUE;\r
+ //\r
+ // Increase the NumberOfEvents in FinalEventsTable\r
+ //\r
(mTcgDxeData.FinalEventsTable[Index])->NumberOfEvents ++;\r
+ DEBUG ((EFI_D_INFO, "FinalEventsTable->NumberOfEvents - 0x%x\n", (mTcgDxeData.FinalEventsTable[Index])->NumberOfEvents));\r
+ DEBUG ((EFI_D_INFO, " Size - 0x%x\n", (UINTN)EventLogAreaStruct->LastEvent - (UINTN)mTcgDxeData.FinalEventsTable[Index]));\r
}\r
}\r
\r
Lasa = (EFI_PHYSICAL_ADDRESS) (SIZE_4GB - 1);\r
Status = gBS->AllocatePages (\r
AllocateMaxAddress,\r
- EfiACPIMemoryNVS,\r
+ EfiBootServicesData,\r
EFI_SIZE_TO_PAGES (PcdGet32 (PcdTcgLogAreaMinLen)),\r
&Lasa\r
);\r
//\r
for (Index = 0; Index < sizeof(mTcg2EventInfo)/sizeof(mTcg2EventInfo[0]); Index++) {\r
if ((mTcgDxeData.BsCap.SupportedEventLogs & mTcg2EventInfo[Index].LogFormat) != 0) {\r
- Lasa = (EFI_PHYSICAL_ADDRESS) (SIZE_4GB - 1);\r
- Status = gBS->AllocatePages (\r
- AllocateMaxAddress,\r
- EfiACPIMemoryNVS,\r
- EFI_SIZE_TO_PAGES (PcdGet32 (PcdTcg2FinalLogAreaLen)),\r
- &Lasa\r
- );\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
- SetMem ((VOID *)(UINTN)Lasa, PcdGet32 (PcdTcg2FinalLogAreaLen), 0xFF);\r
+ if (mTcg2EventInfo[Index].LogFormat == EFI_TCG2_EVENT_LOG_FORMAT_TCG_2) {\r
+ Lasa = (EFI_PHYSICAL_ADDRESS) (SIZE_4GB - 1);\r
+ Status = gBS->AllocatePages (\r
+ AllocateMaxAddress,\r
+ EfiACPIMemoryNVS,\r
+ EFI_SIZE_TO_PAGES (PcdGet32 (PcdTcg2FinalLogAreaLen)),\r
+ &Lasa\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
+ SetMem ((VOID *)(UINTN)Lasa, PcdGet32 (PcdTcg2FinalLogAreaLen), 0xFF);\r
\r
- //\r
- // Initialize\r
- //\r
- mTcgDxeData.FinalEventsTable[Index] = (VOID *)(UINTN)Lasa;\r
- (mTcgDxeData.FinalEventsTable[Index])->Version = EFI_TCG2_FINAL_EVENTS_TABLE_VERSION;\r
- (mTcgDxeData.FinalEventsTable[Index])->NumberOfEvents = 0;\r
-\r
- mTcgDxeData.FinalEventLogAreaStruct[Index].EventLogFormat = mTcg2EventInfo[Index].LogFormat;\r
- mTcgDxeData.FinalEventLogAreaStruct[Index].Lasa = Lasa + sizeof(EFI_TCG2_FINAL_EVENTS_TABLE);\r
- mTcgDxeData.FinalEventLogAreaStruct[Index].Laml = PcdGet32 (PcdTcg2FinalLogAreaLen) - sizeof(EFI_TCG2_FINAL_EVENTS_TABLE);\r
- mTcgDxeData.FinalEventLogAreaStruct[Index].EventLogSize = 0;\r
- mTcgDxeData.FinalEventLogAreaStruct[Index].LastEvent = (VOID *)(UINTN)mTcgDxeData.FinalEventLogAreaStruct[Index].Lasa;\r
- mTcgDxeData.FinalEventLogAreaStruct[Index].EventLogStarted = FALSE;\r
- mTcgDxeData.FinalEventLogAreaStruct[Index].EventLogTruncated = FALSE;\r
+ //\r
+ // Initialize\r
+ //\r
+ mTcgDxeData.FinalEventsTable[Index] = (VOID *)(UINTN)Lasa;\r
+ (mTcgDxeData.FinalEventsTable[Index])->Version = EFI_TCG2_FINAL_EVENTS_TABLE_VERSION;\r
+ (mTcgDxeData.FinalEventsTable[Index])->NumberOfEvents = 0;\r
+\r
+ mTcgDxeData.FinalEventLogAreaStruct[Index].EventLogFormat = mTcg2EventInfo[Index].LogFormat;\r
+ mTcgDxeData.FinalEventLogAreaStruct[Index].Lasa = Lasa + sizeof(EFI_TCG2_FINAL_EVENTS_TABLE);\r
+ mTcgDxeData.FinalEventLogAreaStruct[Index].Laml = PcdGet32 (PcdTcg2FinalLogAreaLen) - sizeof(EFI_TCG2_FINAL_EVENTS_TABLE);\r
+ mTcgDxeData.FinalEventLogAreaStruct[Index].EventLogSize = 0;\r
+ mTcgDxeData.FinalEventLogAreaStruct[Index].LastEvent = (VOID *)(UINTN)mTcgDxeData.FinalEventLogAreaStruct[Index].Lasa;\r
+ mTcgDxeData.FinalEventLogAreaStruct[Index].EventLogStarted = FALSE;\r
+ mTcgDxeData.FinalEventLogAreaStruct[Index].EventLogTruncated = FALSE;\r
\r
- if (mTcg2EventInfo[Index].LogFormat == EFI_TCG2_EVENT_LOG_FORMAT_TCG_2) {\r
//\r
- // Install to configuration table\r
+ // Install to configuration table for EFI_TCG2_EVENT_LOG_FORMAT_TCG_2 \r
//\r
- Status = gBS->InstallConfigurationTable (&gEfiTcg2FinalEventsTableGuid, (VOID *)mTcgDxeData.FinalEventsTable[1]);\r
+ Status = gBS->InstallConfigurationTable (&gEfiTcg2FinalEventsTableGuid, (VOID *)mTcgDxeData.FinalEventsTable[Index]);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
+ } else {\r
+ //\r
+ // No need to handle EFI_TCG2_EVENT_LOG_FORMAT_TCG_1_2\r
+ //\r
+ mTcgDxeData.FinalEventsTable[Index] = NULL;\r
+ mTcgDxeData.FinalEventLogAreaStruct[Index].EventLogFormat = mTcg2EventInfo[Index].LogFormat;\r
+ mTcgDxeData.FinalEventLogAreaStruct[Index].Lasa = 0;\r
+ mTcgDxeData.FinalEventLogAreaStruct[Index].Laml = 0;\r
+ mTcgDxeData.FinalEventLogAreaStruct[Index].EventLogSize = 0;\r
+ mTcgDxeData.FinalEventLogAreaStruct[Index].LastEvent = 0;\r
+ mTcgDxeData.FinalEventLogAreaStruct[Index].EventLogStarted = FALSE;\r
+ mTcgDxeData.FinalEventLogAreaStruct[Index].EventLogTruncated = FALSE;\r
}\r
}\r
}\r