Node = GetFirstNode (&mRecordsBuffer);\r
RemoveEntryList (Node);\r
\r
- Record = CR (Node, DATAHUB_STATUSCODE_RECORD, Node, DATAHUB_STATUS_CODE_SIGNATURE);\r
+ Record = _CR (Node, DATAHUB_STATUSCODE_RECORD, Node);\r
} else {\r
if (CurrentTpl > EFI_TPL_NOTIFY) {\r
gBS->RestoreTPL (CurrentTpl);\r
\r
\r
/**\r
- Release a mRecordBuffer entry allocated by AcquirRecordBuffer ().\r
+ Retrieve one record from Records FIFO. The record would be removed from FIFO and \r
+ release to free record buffer.\r
\r
- @param Record Point to record buffer which is acquired by AcquirRecordBuffer()\r
+ @return !NULL Point to record, which is ready to be logged.\r
+ @return NULL the FIFO of record is empty.\r
\r
**/\r
-VOID\r
-FreeRecordBuffer (\r
- IN DATAHUB_STATUSCODE_RECORD *Record\r
+DATAHUB_STATUSCODE_RECORD *\r
+RetrieveRecord (\r
+ VOID\r
)\r
{\r
- EFI_TPL CurrentTpl;\r
-\r
- ASSERT (Record != NULL);\r
+ DATAHUB_STATUSCODE_RECORD *Record = NULL;\r
+ LIST_ENTRY *Node;\r
+ EFI_TPL CurrentTpl;\r
\r
CurrentTpl = gBS->RaiseTPL (EFI_TPL_HIGH_LEVEL);\r
\r
- RemoveEntryList (&Record->Node);\r
- InsertTailList (&mRecordsBuffer, &Record->Node);\r
+ if (!IsListEmpty (&mRecordsFifo)) {\r
+ Node = GetFirstNode (&mRecordsFifo);\r
+ Record = CR (Node, DATAHUB_STATUSCODE_RECORD, Node, DATAHUB_STATUS_CODE_SIGNATURE);\r
+\r
+ RemoveEntryList (&Record->Node);\r
+ InsertTailList (&mRecordsBuffer, &Record->Node);\r
+ Record->Signature = 0;\r
+ }\r
\r
gBS->RestoreTPL (CurrentTpl);\r
+\r
+ return Record;\r
}\r
\r
\r
DATAHUB_STATUSCODE_RECORD *Record;\r
UINT32 Size;\r
UINT64 DataRecordClass;\r
- LIST_ENTRY *Node;\r
- EFI_TPL CurrentTpl;\r
\r
//\r
// Log DataRecord in Data Hub.\r
// Journal records fifo to find all record entry.\r
//\r
- //\r
- CurrentTpl = gBS->RaiseTPL (EFI_TPL_HIGH_LEVEL);\r
-\r
- for (Node = mRecordsFifo.ForwardLink; Node != &mRecordsFifo;) {\r
- Record = CR (Node, DATAHUB_STATUSCODE_RECORD, Node, DATAHUB_STATUS_CODE_SIGNATURE);\r
- Node = Node->ForwardLink;\r
-\r
+ while (1) {\r
+ Record = RetrieveRecord ();\r
+ if (Record == NULL) {\r
+ break;\r
+ }\r
//\r
// Add in the size of the header we added.\r
//\r
Size\r
);\r
\r
-\r
-\r
- FreeRecordBuffer (Record);\r
}\r
-\r
- gBS->RestoreTPL (CurrentTpl);\r
}\r
\r
\r