+/**\r
+Add a new entry to the Event Log.\r
+\r
+@param[in, out] EventLogPtr Pointer to the Event Log data.\r
+@param[in, out] LogSize Size of the Event Log.\r
+@param[in] MaxSize Maximum size of the Event Log.\r
+@param[in] NewEventHdr Pointer to a TCG_PCR_EVENT_HDR data structure.\r
+@param[in] NewEventData Pointer to the new event data.\r
+\r
+@retval EFI_SUCCESS The new event log entry was added.\r
+@retval EFI_OUT_OF_RESOURCES No enough memory to log the new event.\r
+\r
+**/\r
+EFI_STATUS\r
+TpmCommLogEvent (\r
+ IN OUT UINT8 **EventLogPtr,\r
+ IN OUT UINTN *LogSize,\r
+ IN UINTN MaxSize,\r
+ IN TCG_PCR_EVENT_HDR *NewEventHdr,\r
+ IN UINT8 *NewEventData\r
+ )\r
+{\r
+ UINTN NewLogSize;\r
+\r
+ //\r
+ // Prevent Event Overflow\r
+ //\r
+ if ((UINTN) NewEventHdr->EventSize > MAX_UINTN - sizeof (*NewEventHdr)) {\r
+ return EFI_OUT_OF_RESOURCES;\r
+ }\r
+\r
+ NewLogSize = sizeof (*NewEventHdr) + NewEventHdr->EventSize;\r
+ if (NewLogSize > MaxSize - *LogSize) {\r
+ return EFI_OUT_OF_RESOURCES;\r
+ }\r
+\r
+ *EventLogPtr += *LogSize;\r
+ *LogSize += NewLogSize;\r
+ CopyMem (*EventLogPtr, NewEventHdr, sizeof (*NewEventHdr));\r
+ CopyMem (\r
+ *EventLogPtr + sizeof (*NewEventHdr),\r
+ NewEventData,\r
+ NewEventHdr->EventSize\r
+ );\r
+ return EFI_SUCCESS;\r
+}\r
+\r