summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkhali <khali>2015-05-13 07:14:15 +0000
committerkhali <khali>2015-05-13 07:14:15 +0000
commit665881cb1a993737840a8c50616560d15883d763 (patch)
tree9961ab0b77a1cd7720e01756e6f864e0f827489b
parent29c1ee0b8a146fcfeb9a4ca28283ae820352c6f8 (diff)
downloaddmidecode-665881cb1a993737840a8c50616560d15883d763.tar.gz
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.
-rw-r--r--CHANGELOG4
-rw-r--r--dmidecode.c13
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 <jdelvare@suse.de>
+
+ * dmidecode.c: Add support for SMBIOS3 EFI table.
+
2015-05-12 Jean Delvare <jdelvare@suse.de>
* 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;