|
75 | 75 | #define out_of_spec "<OUT OF SPEC>"
|
76 | 76 | static const char *bad_index = "<BAD INDEX>";
|
77 | 77 |
|
78 | | -#define SUPPORTED_SMBIOS_VER 0x0301 |
| 78 | +#define SUPPORTED_SMBIOS_VER 0x030100 |
79 | 79 |
|
80 | 80 | #define FLAG_NO_FILE_OFFSET (1 << 0)
|
81 | 81 | #define FLAG_STOP_AT_EOT (1 << 1)
|
@@ -4689,16 +4689,18 @@ static void dmi_table_decode(u8 *buf, u32 len, u16 num, u16 ver, u32 flags)
|
4689 | 4689 | }
|
4690 | 4690 | }
|
4691 | 4691 |
|
4692 | | -static void dmi_table(off_t base, u32 len, u16 num, u16 ver, const char *devmem, |
| 4692 | +static void dmi_table(off_t base, u32 len, u16 num, u32 ver, const char *devmem, |
4693 | 4693 | u32 flags)
|
4694 | 4694 | {
|
4695 | 4695 | u8 *buf;
|
4696 | 4696 |
|
4697 | 4697 | if (ver > SUPPORTED_SMBIOS_VER && !(opt.flags & FLAG_QUIET))
|
4698 | 4698 | {
|
4699 | | - printf("# SMBIOS implementations newer than version %u.%u are not\n" |
| 4699 | + printf("# SMBIOS implementations newer than version %u.%u.%u are not\n" |
4700 | 4700 | "# fully supported by this version of dmidecode.\n",
|
4701 | | - SUPPORTED_SMBIOS_VER >> 8, SUPPORTED_SMBIOS_VER & 0xFF); |
| 4701 | + SUPPORTED_SMBIOS_VER >> 16, |
| 4702 | + (SUPPORTED_SMBIOS_VER >> 8) & 0xFF, |
| 4703 | + SUPPORTED_SMBIOS_VER & 0xFF); |
4702 | 4704 | }
|
4703 | 4705 |
|
4704 | 4706 | if (!(opt.flags & FLAG_QUIET))
|
@@ -4753,7 +4755,7 @@ static void dmi_table(off_t base, u32 len, u16 num, u16 ver, const char *devmem,
|
4753 | 4755 | if (opt.flags & FLAG_DUMP_BIN)
|
4754 | 4756 | dmi_table_dump(buf, len);
|
4755 | 4757 | else
|
4756 | | - dmi_table_decode(buf, len, num, ver, flags); |
| 4758 | + dmi_table_decode(buf, len, num, ver >> 8, flags); |
4757 | 4759 |
|
4758 | 4760 | free(buf);
|
4759 | 4761 | }
|
@@ -4790,13 +4792,13 @@ static void overwrite_smbios3_address(u8 *buf)
|
4790 | 4792 |
|
4791 | 4793 | static int smbios3_decode(u8 *buf, const char *devmem, u32 flags)
|
4792 | 4794 | {
|
4793 | | - u16 ver; |
| 4795 | + u32 ver; |
4794 | 4796 | u64 offset;
|
4795 | 4797 |
|
4796 | 4798 | if (!checksum(buf, buf[0x06]))
|
4797 | 4799 | return 0;
|
4798 | 4800 |
|
4799 | | - ver = (buf[0x07] << 8) + buf[0x08]; |
| 4801 | + ver = (buf[0x07] << 16) + (buf[0x08] << 8) +buf[0x09]; |
4800 | 4802 | if (!(opt.flags & FLAG_QUIET))
|
4801 | 4803 | printf("SMBIOS %u.%u.%u present.\n",
|
4802 | 4804 | buf[0x07], buf[0x08], buf[0x09]);
|
@@ -4861,7 +4863,7 @@ static int smbios_decode(u8 *buf, const char *devmem, u32 flags)
|
4861 | 4863 | ver >> 8, ver & 0xFF);
|
4862 | 4864 |
|
4863 | 4865 | dmi_table(DWORD(buf + 0x18), WORD(buf + 0x16), WORD(buf + 0x1C),
|
4864 | | - ver, devmem, flags); |
| 4866 | + ver << 8, devmem, flags); |
4865 | 4867 |
|
4866 | 4868 | if (opt.flags & FLAG_DUMP_BIN)
|
4867 | 4869 | {
|
@@ -4889,7 +4891,8 @@ static int legacy_decode(u8 *buf, const char *devmem, u32 flags)
|
4889 | 4891 | buf[0x0E] >> 4, buf[0x0E] & 0x0F);
|
4890 | 4892 |
|
4891 | 4893 | dmi_table(DWORD(buf + 0x08), WORD(buf + 0x06), WORD(buf + 0x0C),
|
4892 | | - ((buf[0x0E] & 0xF0) << 4) + (buf[0x0E] & 0x0F), devmem, flags); |
| 4894 | + ((buf[0x0E] & 0xF0) << 12) + ((buf[0x0E] & 0x0F) << 8), |
| 4895 | + devmem, flags); |
4893 | 4896 |
|
4894 | 4897 | if (opt.flags & FLAG_DUMP_BIN)
|
4895 | 4898 | {
|
|
0 commit comments