//\r
DATA_HUB_INSTANCE mPrivateData;\r
\r
-//\r
-// Worker functions private to this file\r
-//\r
-DATA_HUB_FILTER_DRIVER *\r
-FindFilterDriverByEvent (\r
- IN LIST_ENTRY *Head,\r
- IN EFI_EVENT Event\r
- );\r
-\r
-EFI_DATA_RECORD_HEADER *\r
-GetNextDataRecord (\r
- IN LIST_ENTRY *Head,\r
- IN UINT64 ClassFilter,\r
- IN OUT UINT64 *PtrCurrentMTC\r
- );\r
-\r
/**\r
Log data record into the data logging hub\r
\r
return EFI_SUCCESS;\r
}\r
\r
+/**\r
+ Search the Head doubly linked list for the passed in MTC. Return the \r
+ matching element in Head and the MTC on the next entry.\r
+\r
+ @param Head Head of Data Log linked list.\r
+ @param ClassFilter Only match the MTC if it is in the same Class as the\r
+ ClassFilter.\r
+ @param PtrCurrentMTC On IN contians MTC to search for. On OUT contians next\r
+ MTC in the data log list or zero if at end of the list.\r
+ \r
+ @retval EFI_DATA_LOG_ENTRY Return pointer to data log data from Head list.\r
+ @retval NULL If no data record exists.\r
+\r
+**/\r
+EFI_DATA_RECORD_HEADER *\r
+GetNextDataRecord (\r
+ IN LIST_ENTRY *Head,\r
+ IN UINT64 ClassFilter,\r
+ IN OUT UINT64 *PtrCurrentMTC\r
+ )\r
+\r
+{\r
+ EFI_DATA_ENTRY *LogEntry;\r
+ LIST_ENTRY *Link;\r
+ BOOLEAN ReturnFirstEntry;\r
+ EFI_DATA_RECORD_HEADER *Record;\r
+ EFI_DATA_ENTRY *NextLogEntry;\r
+\r
+ //\r
+ // If MonotonicCount == 0 just return the first one\r
+ //\r
+ ReturnFirstEntry = (BOOLEAN) (*PtrCurrentMTC == 0);\r
+\r
+ Record = NULL;\r
+ for (Link = GetFirstNode(Head); Link != Head; Link = GetNextNode(Head, Link)) {\r
+ LogEntry = DATA_ENTRY_FROM_LINK (Link);\r
+ if ((LogEntry->Record->DataRecordClass & ClassFilter) == 0) {\r
+ //\r
+ // Skip any entry that does not have the correct ClassFilter\r
+ //\r
+ continue;\r
+ }\r
+\r
+ if ((LogEntry->Record->LogMonotonicCount == *PtrCurrentMTC) || ReturnFirstEntry) {\r
+ //\r
+ // Return record to the user\r
+ //\r
+ Record = LogEntry->Record;\r
+\r
+ //\r
+ // Calculate the next MTC value. If there is no next entry set\r
+ // MTC to zero.\r
+ //\r
+ *PtrCurrentMTC = 0;\r
+ for (Link = GetNextNode(Head, Link); Link != Head; Link = GetNextNode(Head, Link)) {\r
+ NextLogEntry = DATA_ENTRY_FROM_LINK (Link);\r
+ if ((NextLogEntry->Record->DataRecordClass & ClassFilter) != 0) {\r
+ //\r
+ // Return the MTC of the next thing to search for if found\r
+ //\r
+ *PtrCurrentMTC = NextLogEntry->Record->LogMonotonicCount;\r
+ break;\r
+ }\r
+ }\r
+ //\r
+ // Record found exit loop and return\r
+ //\r
+ break;\r
+ }\r
+ }\r
+\r
+ return Record;\r
+}\r
+\r
+/**\r
+ Search the Head list for a EFI_DATA_HUB_FILTER_DRIVER member that\r
+ represents Event and return it.\r
+\r
+ @param Head Pointer to head of dual linked list of EFI_DATA_HUB_FILTER_DRIVER structures.\r
+ @param Event Event to be search for in the Head list.\r
+\r
+ @retval EFI_DATA_HUB_FILTER_DRIVER Returned if Event stored in the Head doubly linked list.\r
+ @retval NULL If Event is not in the list\r
+\r
+**/\r
+DATA_HUB_FILTER_DRIVER *\r
+FindFilterDriverByEvent (\r
+ IN LIST_ENTRY *Head,\r
+ IN EFI_EVENT Event\r
+ )\r
+{\r
+ DATA_HUB_FILTER_DRIVER *FilterEntry;\r
+ LIST_ENTRY *Link;\r
+\r
+ for (Link = GetFirstNode(Head); Link != Head; Link = GetNextNode(Head, Link)) {\r
+ FilterEntry = FILTER_ENTRY_FROM_LINK (Link);\r
+ if (FilterEntry->Event == Event) {\r
+ return FilterEntry;\r
+ }\r
+ }\r
+\r
+ return NULL;\r
+}\r
+\r
/**\r
\r
Get a previously logged data record and the MonotonicCount for the next\r
return EFI_SUCCESS;\r
}\r
\r
-/**\r
- Search the Head list for a EFI_DATA_HUB_FILTER_DRIVER member that\r
- represents Event and return it.\r
-\r
- @param Head Pointer to head of dual linked list of EFI_DATA_HUB_FILTER_DRIVER structures.\r
- @param Event Event to be search for in the Head list.\r
-\r
- @retval EFI_DATA_HUB_FILTER_DRIVER Returned if Event stored in the Head doubly linked list.\r
- @retval NULL If Event is not in the list\r
-\r
-**/\r
-DATA_HUB_FILTER_DRIVER *\r
-FindFilterDriverByEvent (\r
- IN LIST_ENTRY *Head,\r
- IN EFI_EVENT Event\r
- )\r
-{\r
- DATA_HUB_FILTER_DRIVER *FilterEntry;\r
- LIST_ENTRY *Link;\r
-\r
- for (Link = GetFirstNode(Head); Link != Head; Link = GetNextNode(Head, Link)) {\r
- FilterEntry = FILTER_ENTRY_FROM_LINK (Link);\r
- if (FilterEntry->Event == Event) {\r
- return FilterEntry;\r
- }\r
- }\r
-\r
- return NULL;\r
-}\r
-\r
-/**\r
- Search the Head doubly linked list for the passed in MTC. Return the \r
- matching element in Head and the MTC on the next entry.\r
-\r
- @param Head Head of Data Log linked list.\r
- @param ClassFilter Only match the MTC if it is in the same Class as the\r
- ClassFilter.\r
- @param PtrCurrentMTC On IN contians MTC to search for. On OUT contians next\r
- MTC in the data log list or zero if at end of the list.\r
- \r
- @retval EFI_DATA_LOG_ENTRY Return pointer to data log data from Head list.\r
- @retval NULL If no data record exists.\r
-\r
-**/\r
-EFI_DATA_RECORD_HEADER *\r
-GetNextDataRecord (\r
- IN LIST_ENTRY *Head,\r
- IN UINT64 ClassFilter,\r
- IN OUT UINT64 *PtrCurrentMTC\r
- )\r
-\r
-{\r
- EFI_DATA_ENTRY *LogEntry;\r
- LIST_ENTRY *Link;\r
- BOOLEAN ReturnFirstEntry;\r
- EFI_DATA_RECORD_HEADER *Record;\r
- EFI_DATA_ENTRY *NextLogEntry;\r
-\r
- //\r
- // If MonotonicCount == 0 just return the first one\r
- //\r
- ReturnFirstEntry = (BOOLEAN) (*PtrCurrentMTC == 0);\r
-\r
- Record = NULL;\r
- for (Link = GetFirstNode(Head); Link != Head; Link = GetNextNode(Head, Link)) {\r
- LogEntry = DATA_ENTRY_FROM_LINK (Link);\r
- if ((LogEntry->Record->DataRecordClass & ClassFilter) == 0) {\r
- //\r
- // Skip any entry that does not have the correct ClassFilter\r
- //\r
- continue;\r
- }\r
-\r
- if ((LogEntry->Record->LogMonotonicCount == *PtrCurrentMTC) || ReturnFirstEntry) {\r
- //\r
- // Return record to the user\r
- //\r
- Record = LogEntry->Record;\r
-\r
- //\r
- // Calculate the next MTC value. If there is no next entry set\r
- // MTC to zero.\r
- //\r
- *PtrCurrentMTC = 0;\r
- for (Link = GetNextNode(Head, Link); Link != Head; Link = GetNextNode(Head, Link)) {\r
- NextLogEntry = DATA_ENTRY_FROM_LINK (Link);\r
- if ((NextLogEntry->Record->DataRecordClass & ClassFilter) != 0) {\r
- //\r
- // Return the MTC of the next thing to search for if found\r
- //\r
- *PtrCurrentMTC = NextLogEntry->Record->LogMonotonicCount;\r
- break;\r
- }\r
- }\r
- //\r
- // Record found exit loop and return\r
- //\r
- break;\r
- }\r
- }\r
\r
- return Record;\r
-}\r
\r
/**\r
Driver's Entry point routine that install Driver to produce Data Hub protocol. \r