|  | What:		/sys/firmware/dmi/ | 
|  | Date:		February 2011 | 
|  | Contact:	Mike Waychison <mikew@google.com> | 
|  | Description: | 
|  | Many machines' firmware (x86 and ia64) export DMI / | 
|  | SMBIOS tables to the operating system.  Getting at this | 
|  | information is often valuable to userland, especially in | 
|  | cases where there are OEM extensions used. | 
|  |  | 
|  | The kernel itself does not rely on the majority of the | 
|  | information in these tables being correct.  It equally | 
|  | cannot ensure that the data as exported to userland is | 
|  | without error either. | 
|  |  | 
|  | DMI is structured as a large table of entries, where | 
|  | each entry has a common header indicating the type and | 
|  | length of the entry, as well as a firmware-provided | 
|  | 'handle' that is supposed to be unique amongst all | 
|  | entries. | 
|  |  | 
|  | Some entries are required by the specification, but many | 
|  | others are optional.  In general though, users should | 
|  | never expect to find a specific entry type on their | 
|  | system unless they know for certain what their firmware | 
|  | is doing.  Machine to machine experiences will vary. | 
|  |  | 
|  | Multiple entries of the same type are allowed.  In order | 
|  | to handle these duplicate entry types, each entry is | 
|  | assigned by the operating system an 'instance', which is | 
|  | derived from an entry type's ordinal position.  That is | 
|  | to say, if there are 'N' multiple entries with the same type | 
|  | 'T' in the DMI tables (adjacent or spread apart, it | 
|  | doesn't matter), they will be represented in sysfs as | 
|  | entries "T-0" through "T-(N-1)": | 
|  |  | 
|  | Example entry directories: | 
|  |  | 
|  | /sys/firmware/dmi/entries/17-0 | 
|  | /sys/firmware/dmi/entries/17-1 | 
|  | /sys/firmware/dmi/entries/17-2 | 
|  | /sys/firmware/dmi/entries/17-3 | 
|  | ... | 
|  |  | 
|  | Instance numbers are used in lieu of the firmware | 
|  | assigned entry handles as the kernel itself makes no | 
|  | guarantees that handles as exported are unique, and | 
|  | there are likely firmware images that get this wrong in | 
|  | the wild. | 
|  |  | 
|  | Each DMI entry in sysfs has the common header values | 
|  | exported as attributes: | 
|  |  | 
|  | handle	: The 16bit 'handle' that is assigned to this | 
|  | entry by the firmware.  This handle may be | 
|  | referred to by other entries. | 
|  | length	: The length of the entry, as presented in the | 
|  | entry itself.  Note that this is _not the | 
|  | total count of bytes associated with the | 
|  | entry_.  This value represents the length of | 
|  | the "formatted" portion of the entry.  This | 
|  | "formatted" region is sometimes followed by | 
|  | the "unformatted" region composed of nul | 
|  | terminated strings, with termination signalled | 
|  | by a two nul characters in series. | 
|  | raw	: The raw bytes of the entry. This includes the | 
|  | "formatted" portion of the entry, the | 
|  | "unformatted" strings portion of the entry, | 
|  | and the two terminating nul characters. | 
|  | type	: The type of the entry.  This value is the same | 
|  | as found in the directory name.  It indicates | 
|  | how the rest of the entry should be interpreted. | 
|  | instance: The instance ordinal of the entry for the | 
|  | given type.  This value is the same as found | 
|  | in the parent directory name. | 
|  | position: The ordinal position (zero-based) of the entry | 
|  | within the entirety of the DMI entry table. | 
|  |  | 
|  | === Entry Specialization === | 
|  |  | 
|  | Some entry types may have other information available in | 
|  | sysfs.  Not all types are specialized. | 
|  |  | 
|  | --- Type 15 - System Event Log --- | 
|  |  | 
|  | This entry allows the firmware to export a log of | 
|  | events the system has taken.  This information is | 
|  | typically backed by nvram, but the implementation | 
|  | details are abstracted by this table.  This entry's data | 
|  | is exported in the directory: | 
|  |  | 
|  | /sys/firmware/dmi/entries/15-0/system_event_log | 
|  |  | 
|  | and has the following attributes (documented in the | 
|  | SMBIOS / DMI specification under "System Event Log (Type 15)": | 
|  |  | 
|  | area_length | 
|  | header_start_offset | 
|  | data_start_offset | 
|  | access_method | 
|  | status | 
|  | change_token | 
|  | access_method_address | 
|  | header_format | 
|  | per_log_type_descriptor_length | 
|  | type_descriptors_supported_count | 
|  |  | 
|  | As well, the kernel exports the binary attribute: | 
|  |  | 
|  | raw_event_log	: The raw binary bits of the event log | 
|  | as described by the DMI entry. |