in AdvLoggerPkg/Application/DecodeUefiLog/DecodeUefiLog.py [0:0]
def _InitializeLoggerInfo(self, InFile, StartLine):
''' Initialize log Header '''
LoggerInfo = {}
LoggerInfo["StartLine"] = StartLine
LoggerInfo["CurrentLine"] = 0
LoggerInfo["Signature"] = InFile.read(4).decode('utf-8', 'replace')
Version = struct.unpack("=H", InFile.read(2))[0]
LoggerInfo["Version"] = Version
LoggerInfo["BaseTime"] = 0
InFile.read(2)[0] # Skip reserved field
if LoggerInfo["Signature"] != "ALOG":
raise Exception('Error initializing logger info. Invalid signature: %s' % LoggerInfo["Version"])
if Version == self.V0_LOGGER_INFO_VERSION:
InFile.seek(4)
LoggerInfo["LogBufferSize"] = struct.unpack("=I", InFile.read(4))[0]
BaseAddress = struct.unpack("=Q", InFile.read(8))[0] + self.V0_LOGGER_INFO_SIZE
LoggerInfo["LogBuffer"] = self.V0_LOGGER_INFO_SIZE
LoggerInfo["LogCurrent"] = struct.unpack("=Q", InFile.read(8))[0]
LoggerInfo["DiscardedSize"] = struct.unpack("=I", InFile.read(4))[0]
LoggerInfo["SerialInitialized"] = struct.unpack("=B", InFile.read(1))[0]
LoggerInfo["InPermanentRAM"] = struct.unpack("=B", InFile.read(1))[0]
LoggerInfo["ExitBootServices"] = struct.unpack("=B", InFile.read(1))[0]
LoggerInfo["PeiAllocated"] = struct.unpack("=B", InFile.read(1))[0]
LoggerInfo["LogCurrent"] += self.V0_LOGGER_INFO_SIZE
LoggerInfo["Frequency"] = int(2.5e9)
if InFile.tell() != (self.V0_LOGGER_INFO_SIZE):
raise Exception('Error initializing logger info. AmountRead: %d' % InFile.tell())
elif Version == self.V1_LOGGER_INFO_VERSION:
BaseAddress = struct.unpack("=Q", InFile.read(8))[0] + self.V1_LOGGER_INFO_SIZE
LoggerInfo["LogBuffer"] = self.V1_LOGGER_INFO_SIZE
LoggerInfo["LogCurrent"] = struct.unpack("=Q", InFile.read(8))[0]
LoggerInfo["DiscardedSize"] = struct.unpack("=I", InFile.read(4))[0]
LoggerInfo["LogBufferSize"] = struct.unpack("=I", InFile.read(4))[0]
LoggerInfo["InPermanentRAM"] = struct.unpack("=B", InFile.read(1))[0]
LoggerInfo["AtRuntime"] = struct.unpack("=B", InFile.read(1))[0]
LoggerInfo["GoneVirtual"] = struct.unpack("=B", InFile.read(1))[0]
InFile.read(5) # skip reserved2 field
LoggerInfo["Frequency"] = struct.unpack("=Q", InFile.read(8))[0]
LoggerInfo["LogCurrent"] += self.V1_LOGGER_INFO_SIZE
if InFile.tell() != (self.V1_LOGGER_INFO_SIZE):
raise Exception('Error initializing logger info. AmountRead: %d' % InFile.tell())
elif Version == self.V2_LOGGER_INFO_VERSION:
BaseAddress = struct.unpack("=Q", InFile.read(8))[0] + self.V2_LOGGER_INFO_SIZE
LoggerInfo["LogBuffer"] = self.V2_LOGGER_INFO_SIZE
LoggerInfo["LogCurrent"] = struct.unpack("=Q", InFile.read(8))[0]
LoggerInfo["DiscardedSize"] = struct.unpack("=I", InFile.read(4))[0]
LoggerInfo["LogBufferSize"] = struct.unpack("=I", InFile.read(4))[0]
LoggerInfo["InPermanentRAM"] = struct.unpack("=B", InFile.read(1))[0]
LoggerInfo["AtRuntime"] = struct.unpack("=B", InFile.read(1))[0]
LoggerInfo["GoneVirtual"] = struct.unpack("=B", InFile.read(1))[0]
LoggerInfo["HdwInitialized"] = struct.unpack("=B", InFile.read(1))[0]
LoggerInfo["HdwDisabled"] = struct.unpack("=B", InFile.read(1))[0]
InFile.read(3) # skip reserved2 field
LoggerInfo["Frequency"] = struct.unpack("=Q", InFile.read(8))[0]
LoggerInfo["TicksAtTime"] = struct.unpack("=Q", InFile.read(8))[0]
# Reading in the EFI_TIME structure
LoggerInfo["Year"] = struct.unpack("=H", InFile.read(2))[0]
LoggerInfo["Month"] = struct.unpack("=B", InFile.read(1))[0]
LoggerInfo["Day"] = struct.unpack("=B", InFile.read(1))[0]
LoggerInfo["Hour"] = struct.unpack("=B", InFile.read(1))[0]
LoggerInfo["Minute"] = struct.unpack("=B", InFile.read(1))[0]
LoggerInfo["Second"] = struct.unpack("=B", InFile.read(1))[0]
InFile.read(1) # skip Pad1 field
LoggerInfo["Nanosecond"] = struct.unpack("=I", InFile.read(4))[0]
LoggerInfo["TimeZone"] = struct.unpack("=H", InFile.read(2))[0]
LoggerInfo["DayLight"] = struct.unpack("=B", InFile.read(1))[0]
InFile.read(1) # skip Pad2 field
self._Compute_Basetime(LoggerInfo)
LoggerInfo["LogCurrent"] += self.V2_LOGGER_INFO_SIZE
if InFile.tell() != (self.V2_LOGGER_INFO_SIZE):
raise Exception('Error initializing logger info. AmountRead: %d' % InFile.tell())
else:
raise Exception('Error initializing logger info. Unsupported version: 0x%X' % LoggerInfo["Version"])
LoggerInfo["BaseAddress"] = BaseAddress
LoggerInfo["LogCurrent"] -= BaseAddress
LoggerInfo["InFile"] = InFile
return LoggerInfo