Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit b604050

Browse files
committed
dmidecode: Add support for 3-digit versions
The version of the SMBIOS specification being implemented includes the 3rd digit since version 3.0.0, so we should use it when comparing with what dmidecode supports. Signed-off-by: Jean Delvare <jdelvare@suse.de>
1 parent 20b852d commit b604050

File tree

2 files changed

+18
-9
lines changed

2 files changed

+18
-9
lines changed

‎CHANGELOG‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
2017年04月27日 Jean Delvare <jdelvare@suse.de>
2+
3+
Update to support SMBIOS specification version 3.1.1.
4+
5+
* dmidecode.c: Add support for 3-digit versions.
6+
17
2017年04月27日 Jean Delvare <jdelvare@suse.de>
28

39
Update to support SMBIOS specification version 3.1.0.

‎dmidecode.c‎

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@
7575
#define out_of_spec "<OUT OF SPEC>"
7676
static const char *bad_index = "<BAD INDEX>";
7777

78-
#define SUPPORTED_SMBIOS_VER 0x0301
78+
#define SUPPORTED_SMBIOS_VER 0x030100
7979

8080
#define FLAG_NO_FILE_OFFSET (1 << 0)
8181
#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)
46894689
}
46904690
}
46914691

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,
46934693
u32 flags)
46944694
{
46954695
u8 *buf;
46964696

46974697
if (ver > SUPPORTED_SMBIOS_VER && !(opt.flags & FLAG_QUIET))
46984698
{
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"
47004700
"# 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);
47024704
}
47034705

47044706
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,
47534755
if (opt.flags & FLAG_DUMP_BIN)
47544756
dmi_table_dump(buf, len);
47554757
else
4756-
dmi_table_decode(buf, len, num, ver, flags);
4758+
dmi_table_decode(buf, len, num, ver >> 8, flags);
47574759

47584760
free(buf);
47594761
}
@@ -4790,13 +4792,13 @@ static void overwrite_smbios3_address(u8 *buf)
47904792

47914793
static int smbios3_decode(u8 *buf, const char *devmem, u32 flags)
47924794
{
4793-
u16 ver;
4795+
u32 ver;
47944796
u64 offset;
47954797

47964798
if (!checksum(buf, buf[0x06]))
47974799
return 0;
47984800

4799-
ver = (buf[0x07] << 8) + buf[0x08];
4801+
ver = (buf[0x07] << 16) + (buf[0x08] << 8) +buf[0x09];
48004802
if (!(opt.flags & FLAG_QUIET))
48014803
printf("SMBIOS %u.%u.%u present.\n",
48024804
buf[0x07], buf[0x08], buf[0x09]);
@@ -4861,7 +4863,7 @@ static int smbios_decode(u8 *buf, const char *devmem, u32 flags)
48614863
ver >> 8, ver & 0xFF);
48624864

48634865
dmi_table(DWORD(buf + 0x18), WORD(buf + 0x16), WORD(buf + 0x1C),
4864-
ver, devmem, flags);
4866+
ver << 8, devmem, flags);
48654867

48664868
if (opt.flags & FLAG_DUMP_BIN)
48674869
{
@@ -4889,7 +4891,8 @@ static int legacy_decode(u8 *buf, const char *devmem, u32 flags)
48894891
buf[0x0E] >> 4, buf[0x0E] & 0x0F);
48904892

48914893
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);
48934896

48944897
if (opt.flags & FLAG_DUMP_BIN)
48954898
{

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /