From 665881cb1a993737840a8c50616560d15883d763 Mon Sep 17 00:00:00 2001 From: khali Date: Wed, 13 May 2015 07:14:15 +0000 Subject: dmidecode: Add support for SMBIOS3 EFI table The SMBIOS v3 entry point has a different identifier in the EFI systab. Add support for it, as well as 64-bit addresses. --- CHANGELOG | 4 ++++ dmidecode.c | 13 +++++++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index c355481..123730c 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,7 @@ +2015-05-13 Jean Delvare + + * dmidecode.c: Add support for SMBIOS3 EFI table. + 2015-05-12 Jean Delvare * dmidecode.c: Remove extra blank line after hidden DMI type 40 diff --git a/dmidecode.c b/dmidecode.c index df3a33e..52dca49 100644 --- a/dmidecode.c +++ b/dmidecode.c @@ -4664,7 +4664,7 @@ static int legacy_decode(u8 *buf, const char *devmem, u32 flags) */ #define EFI_NOT_FOUND (-1) #define EFI_NO_SMBIOS (-2) -static int address_from_efi(size_t *address) +static int address_from_efi(off_t *address) { FILE *efi_systab; const char *filename; @@ -4688,12 +4688,13 @@ static int address_from_efi(size_t *address) { char *addrp = strchr(linebuf, '='); *(addrp++) = '\0'; - if (strcmp(linebuf, "SMBIOS") == 0) + if (strcmp(linebuf, "SMBIOS3") == 0 + || strcmp(linebuf, "SMBIOS") == 0) { - *address = strtoul(addrp, NULL, 0); + *address = strtoull(addrp, NULL, 0); if (!(opt.flags & FLAG_QUIET)) - printf("# SMBIOS entry point at 0x%08lx\n", - (unsigned long)*address); + printf("# %s entry point at 0x%08llx\n", + linebuf, (unsigned long long)*address); ret = 0; break; } @@ -4710,7 +4711,7 @@ int main(int argc, char * const argv[]) { int ret = 0; /* Returned value */ int found = 0; - size_t fp; + off_t fp; int efi; u8 *buf; -- cgit v1.2.1