firmware: dmi_scan: Use full dmi version for SMBIOS3
New SMBIOS3 spec adds additional field for versioning - docrev. The docrev identifies the revision of a specification implemented in the table structures, so display SMBIOSv3 versions in format, like "3.22.1". In case of only 32 bit entry point for versions > 3 display dmi version like "3.22.x" as we don't know the docrev. In other cases display version like it was. Signed-off-by: Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org> Signed-off-by: Matt Fleming <matt.fleming@intel.com>
This commit is contained in:
Родитель
9eccca0843
Коммит
95be58df74
|
@ -17,7 +17,7 @@
|
|||
*/
|
||||
static const char dmi_empty_string[] = " ";
|
||||
|
||||
static u16 __initdata dmi_ver;
|
||||
static u32 dmi_ver __initdata;
|
||||
/*
|
||||
* Catch too early calls to dmi_check_system():
|
||||
*/
|
||||
|
@ -198,7 +198,7 @@ static void __init dmi_save_uuid(const struct dmi_header *dm, int slot,
|
|||
* the UUID are supposed to be little-endian encoded. The specification
|
||||
* says that this is the defacto standard.
|
||||
*/
|
||||
if (dmi_ver >= 0x0206)
|
||||
if (dmi_ver >= 0x020600)
|
||||
sprintf(s, "%pUL", d);
|
||||
else
|
||||
sprintf(s, "%pUB", d);
|
||||
|
@ -470,7 +470,7 @@ static void __init dmi_format_ids(char *buf, size_t len)
|
|||
*/
|
||||
static int __init dmi_present(const u8 *buf)
|
||||
{
|
||||
int smbios_ver;
|
||||
u32 smbios_ver;
|
||||
|
||||
if (memcmp(buf, "_SM_", 4) == 0 &&
|
||||
buf[5] < 32 && dmi_checksum(buf, buf[5])) {
|
||||
|
@ -503,14 +503,16 @@ static int __init dmi_present(const u8 *buf)
|
|||
if (dmi_walk_early(dmi_decode) == 0) {
|
||||
if (smbios_ver) {
|
||||
dmi_ver = smbios_ver;
|
||||
pr_info("SMBIOS %d.%d present.\n",
|
||||
dmi_ver >> 8, dmi_ver & 0xFF);
|
||||
pr_info("SMBIOS %d.%d%s present.\n",
|
||||
dmi_ver >> 8, dmi_ver & 0xFF,
|
||||
(dmi_ver < 0x0300) ? "" : ".x");
|
||||
} else {
|
||||
dmi_ver = (buf[14] & 0xF0) << 4 |
|
||||
(buf[14] & 0x0F);
|
||||
pr_info("Legacy DMI %d.%d present.\n",
|
||||
dmi_ver >> 8, dmi_ver & 0xFF);
|
||||
}
|
||||
dmi_ver <<= 8;
|
||||
dmi_format_ids(dmi_ids_string, sizeof(dmi_ids_string));
|
||||
printk(KERN_DEBUG "DMI: %s\n", dmi_ids_string);
|
||||
return 0;
|
||||
|
@ -528,7 +530,8 @@ static int __init dmi_smbios3_present(const u8 *buf)
|
|||
{
|
||||
if (memcmp(buf, "_SM3_", 5) == 0 &&
|
||||
buf[6] < 32 && dmi_checksum(buf, buf[6])) {
|
||||
dmi_ver = get_unaligned_be16(buf + 7);
|
||||
dmi_ver = get_unaligned_be32(buf + 6);
|
||||
dmi_ver &= 0xFFFFFF;
|
||||
dmi_len = get_unaligned_le32(buf + 12);
|
||||
dmi_base = get_unaligned_le64(buf + 16);
|
||||
|
||||
|
@ -545,8 +548,9 @@ static int __init dmi_smbios3_present(const u8 *buf)
|
|||
dmi_num = dmi_len / 4;
|
||||
|
||||
if (dmi_walk_early(dmi_decode) == 0) {
|
||||
pr_info("SMBIOS %d.%d present.\n",
|
||||
dmi_ver >> 8, dmi_ver & 0xFF);
|
||||
pr_info("SMBIOS %d.%d.%d present.\n",
|
||||
dmi_ver >> 16, (dmi_ver >> 8) & 0xFF,
|
||||
dmi_ver & 0xFF);
|
||||
dmi_format_ids(dmi_ids_string, sizeof(dmi_ids_string));
|
||||
pr_debug("DMI: %s\n", dmi_ids_string);
|
||||
return 0;
|
||||
|
|
Загрузка…
Ссылка в новой задаче