diff options
author | Duncan Laurie <dlaurie@chromium.org> | 2012-06-23 16:13:42 -0700 |
---|---|---|
committer | Ronald G. Minnich <rminnich@gmail.com> | 2012-07-25 00:46:56 +0200 |
commit | 472ec9cd7ecb3d283bc05941c7dbb54a10813614 (patch) | |
tree | 99355bde492ce16a6c8b13b380fdd93f07616721 /src/include | |
parent | 696262bd99fb7e4177dbce533ae50a287871d830 (diff) |
ELOG: Add support for generating SMBIOS type15 table
This standared SMBIOS 0able describes the location and format
of the event log to the OS and applications. In this case the
pointer is a 32bit physical address pointer to the log in
memory mapped flash.
Look for SMBIOS type15 entry with 'dmidecode -t 15'
Handle 0x0004, DMI type 15, 23 bytes
System Event Log
Area Length: 4095 bytes
Header Start Offset: 0x0000
Header Length: 8 bytes
Data Start Offset: 0x0008
Access Method: Memory-mapped physical 32-bit address
Access Address: 0xFFB6F000
Status: Valid, Not Full
Change Token: 0x00000000
Header Format: OEM-specific
Supported Log Type Descriptors: 0
Change-Id: I1e7729e604000f197e26e69991a2867e869197a6
Signed-off-by: Duncan Laurie <dlaurie@chromium.org>
Reviewed-on: http://review.coreboot.org/1314
Tested-by: build bot (Jenkins)
Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
Diffstat (limited to 'src/include')
-rw-r--r-- | src/include/elog.h | 1 | ||||
-rw-r--r-- | src/include/smbios.h | 31 |
2 files changed, 32 insertions, 0 deletions
diff --git a/src/include/elog.h b/src/include/elog.h index c6599a249c..897a90bf41 100644 --- a/src/include/elog.h +++ b/src/include/elog.h @@ -113,6 +113,7 @@ extern void elog_add_event_byte(u8 event_type, u8 data); extern void elog_add_event_word(u8 event_type, u16 data); extern void elog_add_event_dword(u8 event_type, u32 data); extern void elog_add_event_wake(u8 source, u32 instance); +extern int elog_smbios_write_type15(unsigned long *current, int handle); #endif /* !CONFIG_ELOG */ diff --git a/src/include/smbios.h b/src/include/smbios.h index 7912ba151f..c65851550a 100644 --- a/src/include/smbios.h +++ b/src/include/smbios.h @@ -28,6 +28,7 @@ typedef enum { SMBIOS_PROCESSOR_INFORMATION=4, SMBIOS_CACHE_INFORMATION=7, SMBIOS_SYSTEM_SLOTS=9, + SMBIOS_EVENT_LOG=15, SMBIOS_PHYS_MEMORY_ARRAY=16, SMBIOS_MEMORY_DEVICE=17, SMBIOS_MEMORY_ARRAY_MAPPED_ADDRESS=19, @@ -138,6 +139,36 @@ struct smbios_type4 { char eos[2]; } __attribute__((packed)); +struct smbios_type15 { + u8 type; + u8 length; + u16 handle; + u16 area_length; + u16 header_offset; + u16 data_offset; + u8 access_method; + u8 log_status; + u32 change_token; + u32 address; + u8 header_format; + u8 log_type_descriptors; + u8 log_type_descriptor_length; + char eos[2]; +} __attribute__((packed)); + +enum { + SMBIOS_EVENTLOG_ACCESS_METHOD_IO8 = 0, + SMBIOS_EVENTLOG_ACCESS_METHOD_IO8X2, + SMBIOS_EVENTLOG_ACCESS_METHOD_IO16, + SMBIOS_EVENTLOG_ACCESS_METHOD_MMIO32, + SMBIOS_EVENTLOG_ACCESS_METHOD_GPNV, +}; + +enum { + SMBIOS_EVENTLOG_STATUS_VALID = 1, /* Bit 0 */ + SMBIOS_EVENTLOG_STATUS_FULL = 2, /* Bit 1 */ +}; + struct smbios_type16 { u8 type; u8 length; |