diff --git a/0001-Exclude-.gitignore-from-published-packages.patch b/0001-Exclude-.gitignore-from-published-packages.patch
new file mode 100644
index 0000000..f8d4bcb
--- /dev/null
+++ b/0001-Exclude-.gitignore-from-published-packages.patch
@@ -0,0 +1,21 @@
+From 906d19ceffbbbc21bbbd433e9b2c3c1592a0af18 Mon Sep 17 00:00:00 2001
+From: Jean Delvare <jdelvare@suse.de>
+Date: Wed, 24 May 2017 11:12:04 +0200
+Subject: [PATCH 01/21] Exclude .gitignore from published packages
+
+---
+ .gitattributes | 2 ++
+ 1 file changed, 2 insertions(+)
+ create mode 100644 .gitattributes
+
+diff --git a/.gitattributes b/.gitattributes
+new file mode 100644
+index 0000000..5966153
+--- /dev/null
++++ b/.gitattributes
+@@ -0,0 +1,2 @@
++.gitattributes export-ignore
++.gitignore export-ignore
+-- 
+2.17.1
+
diff --git a/0001-dmidecode-Add-system-family-direct-string-option.patch b/0001-dmidecode-Add-system-family-direct-string-option.patch
deleted file mode 100644
index fedf1df..0000000
--- a/0001-dmidecode-Add-system-family-direct-string-option.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From aad65d8a53a00d5426990fc8b5af9d749fc879b9 Mon Sep 17 00:00:00 2001
-From: Mika Westerberg <mika.westerberg@linux.intel.com>
-Date: Thu, 1 Jun 2017 14:21:38 +0300
-Subject: [PATCH] dmidecode: Add system-family direct string option
-
-This allows users to print system-family using '-s' option.
-
-Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
-Signed-off-by: Jean Delvare <jdelvare@suse.de>
----
- dmiopt.c        | 1 +
- man/dmidecode.8 | 2 +-
- 2 files changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/dmiopt.c b/dmiopt.c
-index da42546..a36cf16 100644
---- a/dmiopt.c
-+++ b/dmiopt.c
-@@ -156,6 +156,7 @@ static const struct string_keyword opt_string_keyword[] = {
- 	{ "system-version", 1, 0x06 },
- 	{ "system-serial-number", 1, 0x07 },
- 	{ "system-uuid", 1, 0x08 },             /* dmi_system_uuid() */
-+	{ "system-family", 1, 0x1a },
- 	{ "baseboard-manufacturer", 2, 0x04 },
- 	{ "baseboard-product-name", 2, 0x05 },
- 	{ "baseboard-version", 2, 0x06 },
-diff --git a/man/dmidecode.8 b/man/dmidecode.8
-index bef204e..e3b6b2a 100644
---- a/man/dmidecode.8
-+++ b/man/dmidecode.8
-@@ -74,7 +74,7 @@ Only display the value of the \s-1DMI\s0 string identified by \fBKEYWORD\fR.
- \fBbios-version\fR, \fBbios-release-date\fR,
- \fBsystem-manufacturer\fR, \fBsystem-product-name\fR,
- \fBsystem-version\fR, \fBsystem-serial-number\fR,
--\fBsystem-uuid\fR,
-+\fBsystem-uuid\fR, \fBsystem-family\fR,
- \fBbaseboard-manufacturer\fR, \fBbaseboard-product-name\fR,
- \fBbaseboard-version\fR, \fBbaseboard-serial-number\fR,
- \fBbaseboard-asset-tag\fR, \fBchassis-manufacturer\fR,
--- 
-2.9.4
-
diff --git a/0002-Use-the-appropriate-git-diff-drivers-for-C-source-fi.patch b/0002-Use-the-appropriate-git-diff-drivers-for-C-source-fi.patch
new file mode 100644
index 0000000..59ad158
--- /dev/null
+++ b/0002-Use-the-appropriate-git-diff-drivers-for-C-source-fi.patch
@@ -0,0 +1,22 @@
+From 72a97484031ee4e1189ec6588377dbe82ead5780 Mon Sep 17 00:00:00 2001
+From: Jean Delvare <jdelvare@suse.de>
+Date: Wed, 24 May 2017 11:36:28 +0200
+Subject: [PATCH 02/21] Use the appropriate git diff drivers for C source files
+
+---
+ .gitattributes | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/.gitattributes b/.gitattributes
+index 5966153..dd61eef 100644
+--- a/.gitattributes
++++ b/.gitattributes
+@@ -1,2 +1,5 @@
+ .gitattributes export-ignore
+ .gitignore export-ignore
++
++*.c	diff=cpp
++*.h	diff=cpp
+-- 
+2.17.1
+
diff --git a/0003-dmidecode-Add-system-family-direct-string-option.patch b/0003-dmidecode-Add-system-family-direct-string-option.patch
new file mode 100644
index 0000000..add3b2d
--- /dev/null
+++ b/0003-dmidecode-Add-system-family-direct-string-option.patch
@@ -0,0 +1,42 @@
+From aad65d8a53a00d5426990fc8b5af9d749fc879b9 Mon Sep 17 00:00:00 2001
+From: Mika Westerberg <mika.westerberg@linux.intel.com>
+Date: Thu, 1 Jun 2017 14:21:38 +0300
+Subject: [PATCH 03/21] dmidecode: Add system-family direct string option
+
+This allows users to print system-family using '-s' option.
+
+Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
+Signed-off-by: Jean Delvare <jdelvare@suse.de>
+---
+ dmiopt.c        | 1 +
+ man/dmidecode.8 | 2 +-
+ 2 files changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/dmiopt.c b/dmiopt.c
+index da42546..a36cf16 100644
+--- a/dmiopt.c
++++ b/dmiopt.c
+@@ -156,6 +156,7 @@ static const struct string_keyword opt_string_keyword[] = {
+ 	{ "system-version", 1, 0x06 },
+ 	{ "system-serial-number", 1, 0x07 },
+ 	{ "system-uuid", 1, 0x08 },             /* dmi_system_uuid() */
++	{ "system-family", 1, 0x1a },
+ 	{ "baseboard-manufacturer", 2, 0x04 },
+ 	{ "baseboard-product-name", 2, 0x05 },
+ 	{ "baseboard-version", 2, 0x06 },
+diff --git a/man/dmidecode.8 b/man/dmidecode.8
+index bef204e..e3b6b2a 100644
+--- a/man/dmidecode.8
++++ b/man/dmidecode.8
+@@ -74,7 +74,7 @@ Only display the value of the \s-1DMI\s0 string identified by \fBKEYWORD\fR.
+ \fBbios-version\fR, \fBbios-release-date\fR,
+ \fBsystem-manufacturer\fR, \fBsystem-product-name\fR,
+ \fBsystem-version\fR, \fBsystem-serial-number\fR,
+-\fBsystem-uuid\fR,
++\fBsystem-uuid\fR, \fBsystem-family\fR,
+ \fBbaseboard-manufacturer\fR, \fBbaseboard-product-name\fR,
+ \fBbaseboard-version\fR, \fBbaseboard-serial-number\fR,
+ \fBbaseboard-asset-tag\fR, \fBchassis-manufacturer\fR,
+-- 
+2.17.1
+
diff --git a/0004-Goodbye-CHANGELOG-welcome-NEWS.patch b/0004-Goodbye-CHANGELOG-welcome-NEWS.patch
new file mode 100644
index 0000000..fafaaf4
--- /dev/null
+++ b/0004-Goodbye-CHANGELOG-welcome-NEWS.patch
@@ -0,0 +1,1773 @@
+From 82a34ddbc524ad17e13cd873c223f20d14a5c705 Mon Sep 17 00:00:00 2001
+From: Jean Delvare <jdelvare@suse.de>
+Date: Sat, 8 Jul 2017 11:41:15 +0200
+Subject: [PATCH 04/21] Goodbye CHANGELOG, welcome NEWS
+
+The CHANGELOG file as it exists today is essentially redundant with
+git log. It's not really user friendly, and duplicates the work on
+the committer side.
+
+Delete that file, and replace it with a more structured NEWS file,
+listing only the most relevant changes in each version. The contents
+would be pretty much the same as the release announcements.
+
+This initial version covers most past releases.
+---
+ CHANGELOG | 1614 -----------------------------------------------------
+ NEWS      |  123 ++++
+ 2 files changed, 123 insertions(+), 1614 deletions(-)
+ delete mode 100644 CHANGELOG
+ create mode 100644 NEWS
+
+diff --git a/CHANGELOG b/CHANGELOG
+deleted file mode 100644
+index 6f9123d..0000000
+--- a/CHANGELOG
++++ /dev/null
+@@ -1,1614 +0,0 @@
+-2015-09-03  Jean Delvare  <jdelvare@suse.de>
+-
+-	* version.h: Set version to 3.1.
+-
+-2017-05-23  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c, dmiopt.c: Add a new option to extract OEM strings, like
+-	  we already have for many other strings.
+-	* dmidecode.8: Document the new option.
+-
+-2017-04-27  Jean Delvare  <jdelvare@suse.de>
+-
+-	Update to support SMBIOS specification version 3.1.1.
+-
+-	* dmidecode.c: Add support for 3-digit versions.
+-	* dmidecode.c: Add new enumerated values for processors (DMI type 4).
+-
+-2017-04-27  Jean Delvare  <jdelvare@suse.de>
+-
+-	Update to support SMBIOS specification version 3.1.0.
+-
+-	* dmidecode.c: Add support for extended BIOS ROM size (DMI type 0).
+-	* dmidecode.c: Add new enumerated values for chassis types
+-	  (DMI type 3).
+-	* dmidecode.c: Add new enumerated values for processors (DMI type 4).
+-	* dmidecode.c: Don't assume 8-bit processor family in dmi_processor_id
+-	  (DMI type 4).
+-	* dmidecode.c: Decode the MIDR register on ARM processors
+-	  (DMI type 4).
+-	* dmidecode.c: Add support for large cache sizes (DMI type 7).
+-	* dmidecode.c: Add Mini PCIe system slot enumerated values
+-	  (DMI type 9).
+-	* dmidecode.c: Clarify the memory speed unit (DMI type 17).
+-	* dmidecode.c: Add support for structure type 43 (TPM Device).
+-
+-2017-04-11  Jean Delvare  <jdelvare@suse.de>
+-
+-	* util.c: Don't leak a file descriptor in function read_file.
+-	* util.c, util.c, dmidecode.c: Let callers pass an offset to function
+-	  read_file.
+-	* dmidecode.c: Fix reading from SMBIOS 3 dump files using a 64-bit
+-	  entry point.
+-
+-2017-04-10  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c: Decode the processor ID of the Intel Core M, AMD
+-	  Athlon X4 and AMD Opteron X1000/X2000 processors (DMI type 4).
+-	* dmidecode.c: Display the IPMI interrupt number as a decimal
+-	  number (DMI type 38).
+-
+-2017-01-20  Jean Delvare  <jdelvare@suse.de>
+-
+-	* biosdecode.c: Decode the entry point defined in the Intel
+-	  Multiprocessor specification.
+-
+-2017-01-20  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c: Only decode one DMI table.
+-	  This fixes Savannah bug #50022:
+-	  https://savannah.nongnu.org/bugs/?50022
+-
+-2016-09-22  Jean Delvare  <jdelvare@suse.de>
+-
+-	* README: Explain that we can no longer support Cygwin.
+-
+-2016-06-30  Petr Oros  <poros@redhat.com>
+-
+-	* dmidecode.c: Unmask LRDIMM in memory type detail (DMI type 17).
+-
+-2015-11-02  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c, util.c, util.h: Let read_file return the actual data
+-	  size.
+-	* dmidecode.c: Use read_file to read the DMI table from sysfs.
+-	  This fixes Savannah bug #46176:
+-	  https://savannah.nongnu.org/bugs/?46176
+-	* dmidecode.c: Check the sysfs entry point length.
+-
+-2015-10-21  Xie XiuQi  <xiexiuqi@huawei.com>
+-
+-	* dmidecode.c: Handle SMBIOS 3.0 entry points on EFI systems.
+-
+-2015-10-20  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c: Handle OEM-specific types in group associations
+-	  (DMI type 14).
+-
+-2015-10-14  Jean Delvare  <jdelvare@suse.de>
+-
+-	* util.c: Avoid SIGBUS on mmap failure.
+-	  This fixes Savannah bug #46066:
+-	  https://savannah.nongnu.org/bugs/?46066
+-	* util.c: Fix error paths in mem_chunk.
+-
+-2015-10-01  Roy Franz  <roy.franz@linaro.org>
+-
+-	* dmiopt.c: Add "--no-sysfs" option description to -h output.
+-
+-2015-09-03  Jean Delvare  <jdelvare@suse.de>
+-
+-	* version.h: Set version to 3.0.
+-
+-2015-08-04  Tyler Bell  <tyler.bell@hp.com>
+-
+-	* dmioem.c: Decode HP-specific DMI type 233
+-	* dmioem.c: Refactored HP-specific types 209 and 221 to use common code
+-	* dmioem.c: Documented spec for HP-specific types 209, 221 and 233
+-
+-2015-05-21  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c: Fix up invalid DMI type 34 structure length.
+-	* dmioem.c: Decode HP-specific DMI types 212 and 219.
+-	* dmioem.c: Move function is_printable to dmidecode.c.
+-
+-2015-05-13  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c: Add support for SMBIOS3 EFI table.
+-	* dmidecode.c: Fix warnings about comparison between signed and
+-	  unsigned integers.
+-	* util.c: Fix warnings about unused labels when building without
+-	  -DUSE_MMAP.
+-	* dmioem.c: Strip spaces at the end of vendor names.
+-	* dmioem.c: Decode Acer-specific DMI type 170.
+-
+-2015-05-12  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c: Remove extra blank line after hidden DMI type 40
+-	  structure.
+-
+-2015-05-04  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c: Move table decoding to a separate function.
+-	* dmidecode.c: Simplify function dmi_table_dump.
+-	* dmidecode.c: Display types 41 and 42 in quiet mode too.
+-	* dmidecode.c: Get OEM vendor from System Information (DMI type 1).
+-
+-2015-04-28  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.h, dmiopt.h: Fix sparse errors.
+-	* biosdecode.c, dmiopt.c, ownership.c, vpdopt.c: Fix sparse warnings.
+-	* util.c: Fix sparse warning.
+-
+-2015-04-27  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c: Fix --dump-bin when reading from sysfs.
+-
+-2015-04-27  Jean Delvare  <jdelvare@suse.de>
+-
+-	Update to support SMBIOS specification version 3.0.0.
+-
+-	* dmidecode.c: Add support for the new _SM3_ 64-bit entry point
+-	  defined in the SMBIOS specification version 3.0.0, including
+-	  support of 64-bit addresses and 32-bit table lengths.
+-	* dmidecode.c: Add 3 new chassis types (DMI type 3).
+-	* dmidecode.c: Add 4 new processor families (DMI type 4).
+-	* dmidecode.c: Add 4 new Intel socket types (DMI type 4).
+-	* dmidecode.c: Add 13 new slot types (DMI type 9).
+-	* dmidecode.c: Add 4 new memory device types (DMI type 17).
+-	* dmidecode.c: Add support for processors with more than 255 cores
+-	  or threads (DMI type 4).
+-	* dmidecode.c: Stop decoding v3 tables at End-of-Table marker.
+-
+-2015-04-21  Roy Franz  <roy.franz@linaro.org>
+-
+-	* util.c, util.h: Add utility function read_file, which reads an
+-	  entire binary file into a buffer.
+-	* dmidecode.c: Add passing of flags parameter to dmi_table.
+-	* dmidecode.c: Add reading of SMBIOS tables from sysfs.
+-	* dmidecode.c, dmiopt.c, dmiopt.h: Add --no-sysfs option to disable
+-	  use of sysfs.
+-	* dmidecode.8: Document the changes above.
+-
+-2015-04-20  Jean Delvare  <jdelvare@suse.de>
+-
+-	* biosdecode.c: Add support for the _SM3_ entry point, as defined in
+-	  the SMBIOS 3.0.0 specification.
+-
+-2014-11-14  Jean Delvare  <jdelvare@suse.de>
+-
+-	* man/dmidecode.8: Add a note about DMI strings available from sysfs
+-	  on Linux.
+-
+-2014-10-13  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c: Add support for DDR4 (DMI type 17). Patch from Tomohiro
+-	  Kimura. The value was taken from preliminary SMBIOS specification
+-	  version 3.0.0d.
+-	  This fixes Savannah bug #43370:
+-	  https://savannah.nongnu.org/bugs/?43370
+-
+-2014-07-11  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c: Decode the CPUID of recent AMD processors (DMI type 4).
+-
+-2014-03-20  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c: Let legacy_decode be quiet in dump mode too.
+-	* dmidecode.c: Skip the SMBIOS version comparison in quiet mode.
+-	  Patch from Jens Rosenboom.
+-
+-2014-02-25  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c: Fix spacing of memory module voltage attributes
+-	  (DMI type 17).
+-
+-2014-01-13  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c: Decode ID of PCI Express 3 slots (DMI type 9).
+-	  This fixes Savannah bug #40178:
+-	  https://savannah.nongnu.org/bugs/?40178
+-
+-2014-01-13  Jean Delvare  <jdelvare@suse.de>
+-
+-	* LICENSE: Update to the latest upstream version. Amongst other
+-	  things, this fixes the FSF address.
+-
+-2013-04-24  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c: Strip trailing zeroes from memory voltage values
+-	  (DMI type 17).
+-	* dmidecode.c: Fix support for new processor upgrade types (DMI
+-	  type 4) and new memory device type (DMI type 17.)
+-
+-2013-04-17  Anton Arapov  <anton@redhat.com>
+-
+-	* version.h: Set version to 2.12.
+-
+-2013-04-17  Anton Arapov  <anton@redhat.com>
+-
+-	Update to support SMBIOS specification version 2.8.0.
+-
+-	* dmidecode.c: Correct processor family name (DMI type 4).
+-	* dmidecode.c: Correct typo in processor upgrade type (DMI type 4).
+-	* dmidecode.c: Add 9 new processor families (DMI type 4).
+-	* dmidecode.c: Add 2 new Intel socket types (DMI type 4).
+-	* dmidecode.c: Add Min/Max/Configured memory voltages (DMI type 17).
+-	* dmidecode.c: Add LRDIMM to memory device list (DMI type 17).
+-
+-2012-03-26  Anton Arapov  <anton@redhat.com>
+-
+-	* man/dmidecode.8: Add missing DMI type introduced with SMBIOS 2.7+, and
+-	  include the information about the extra output when dmidecode is run
+-	  on a hardware that has non-supported SMBIOS version.
+-
+-2012-03-12  Anton Arapov  <anton@redhat.com>
+-
+-	* dmioem.c: Add "PXE" to the HP OEM Type 209 output so it is similar to
+-	  the "iSCSI" description in HP OEM Type 221. Patch from Naga Chumbalkar.
+-
+-2011-11-18  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c: Properly print the hexadecimal value of invalid
+-	  string characters.
+-
+-2011-11-14  Anton Arapov  <anton@redhat.com>
+-
+-	* dmidecode.c: Make dmi_chassis_type aware of the lock bit.
+-	  Patch from Stefan Tauner.
+-	* config.h: Haiku dropped the _BEOS_ definition in favor of its own
+-	  platform identification _HAIKU_. Patch from Francois Revol.
+-
+-2011-04-20  Jean Delvare  <jdelvare@suse.de>
+-
+-	Update to support SMBIOS specification version 2.7.1.
+-
+-	* dmidecode.c: Add 6 AMD processor families (DMI type 4).
+-	* dmidecode.c: Add cache associativity value
+-	  "20-way Set-associative" (DMI type 7).
+-	* dmidecode.c: Add PCI Express 3 slot types (DMI type 9).
+-
+-2011-01-25  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c: Fix boundary checks of memory array location codes
+-	  (DMI type 16). Reported by Andrey Matveyev.
+-
+-2011-01-19  Anton Arapov  <anton@redhat.com>
+-
+-	* version.h: Set version to 2.11.
+-
+-2010-11-24  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c: Assume that the max power capacity is expressed in
+-	  Watts, not milliWatts (DMI type 39). The specification isn't
+-	  clear about the actual unit, but the only implementation I've
+-	  seen (HP Proliant G7) clearly uses Watts. Also, using milliWatts
+-	  would limit the max value that can be stored to 32 W, which
+-	  doesn't make much sense.
+-	* dmidecode.c: Fix offset of partition width (DMI type 19).
+-	* dmidecode.c: Decode BIOS language information flags
+-	  (DMI type 13).
+-	* dmidecode.c: Fix CPU flags mask (DMI type 4).
+-	* dmidecode.c: Reword "PCI Express Gen 2" to just "PCI Express 2"
+-	  (DMI type 9).
+-	* dmidecode.c: Decode the slot ID for all PCI Express and PCI
+-	  Express 2 slots (DMI type 9).
+-
+-2010-11-24  Jean Delvare  <jdelvare@suse.de>
+-
+-	Update to support SMBIOS specification version 2.7.0.
+-
+-	* dmidecode.c: Update all references to the SMBIOS specification
+-	  to match the new numbering.
+-	* dmidecode.c: Add UEFI support and virtual machine flags to BIOS
+-	  characteristics (DMI type 0).
+-	* dmideocde.c: Add SKU number field to system enclosure or chassis
+-	  (DMI type 3).
+-	* dmidecode.c: Add many Intel, AMD and VIA CPU family names
+-	  (DMI type 4).
+-	* dmidecode.c: Add many socket formats (DMI type 4).
+-	* dmidecode.c: Add processor characteristics flags (DMI type 4).
+-	* util.c, util.h: Add utility function u64_range, which computes
+-	  the range between two u64 values.
+-	* dmidecode.c: Add support for memory arrays of 2 TB and more
+-	  (DMI types 16, 19 and 20).
+-	* dmidecode.c: Add support for memory devices of 32 GB and more
+-	  (DMI type 17).
+-	* dmidecode.c: Add description of cooling device (DMI type 27).
+-	* dmidecode.c: Add limited support for new DMI type 42 (Management
+-	  Controller Host Interface).
+-
+-2010-11-16  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c: Handle ambiguous processor family value 0x30
+-	  (DMI type 4).
+-	* dmidecode.c: Prevent unlikely array overrun when decoding
+-	  processor family value 0xBE (DMI type 4).
+-	* dmidecode.c: Handle DMI type 2 record of size 0x0E.
+-
+-2010-11-11  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c: Fix decoding of IPMI base address LSB.
+-
+-2010-11-09  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c: Drop redundant/obsolete references to
+-	  CIM_Processor.Family.
+-
+-2010-10-26  Jean Delvare  <jdelvare@suse.de>
+-
+-	Update to support Intel AP-485 (CPUID) revision 36 (was 32).
+-
+-	* dmidecode.c: Update the link to the AP-485 document, the revision
+-	  and the table number.
+-	* dmidecode.c: Update two CPU flag descriptions (FXSR and HTT).
+-	  Drop CPU flag IA64.
+-	* dmidecode.c: Update the list of processors for which we decode the
+-	  CPUID flags.
+-
+-2010-10-11  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c: One more SMBIOS version fix-up case.
+-	* Makefile: Rework BSD make compatibility trick. The previous
+-	  trick would break GNU make 3.82.
+-
+-2010-09-29  Anton Arapov  <anton@redhat.com>
+-
+-	* util.c: makes dmidecode fall back to regular reads if the mmap
+-	  fails. Patch from Olof Johansson.
+-
+-2010-09-21  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c: Fix Xeon 7xxx entries in CPU name lookup table
+-	  (DMI type 4). Patch from Paul Flo Williams.
+-
+-2009-08-28  Jarod Wilson  <jarod@redhat.com>
+-
+-	Update to support SMBIOS specification version 2.6.1.
+-
+-	* dmidecode.c: Add processor types "Dual-Core Xeon 5200",
+-	  "Dual-Core Xeon 7200", "Quad-Core Xeon 7300", "QuadCore Xeon 7400",
+-	  "Multi-Core Xeon 7400", "Core i7", "Dual-Core Celeron",
+-	  "Multi-Core Xeon", "Dual-Core Xeon 3xxx", "Quad-Core Xeon 3xxx",
+-	  "Dual-Core Xeon 5xxx", "Quad-Core Xeon 5xxx", "Dual-Core Xeon 7xxx",
+-	  "Quad-Core Xeon 7xxx" and "Multi-Core Xeon 7xxx" (DMI type 4).
+-	* dmidecode.c: Add slot types "PCI Express Gen 2 x1",
+-	  "PCI Express Gen 2 x2", "PCI Express Gen 2 x4",
+-	  "PCI Express Gen 2 x8" and "PCI Express Gen 2 x16" (DMI type 9).
+-	* dmidecode.c: Add memory device types "DDR3" and "FB-DIMM"
+-	  (DMI type 17).
+-	* dmidecode.c: Add cache associativity types "12-way Set-associative",
+-	  "24-way Set-associative", "32-way Set-associative",
+-	  "48-way Set-associative" and "64-way Set-associative" (DMI type 7).
+-
+-2009-07-27  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmioem.c: Recognize "Hewlett-Packard" as a possible DMI vendor
+-	  string for HP. Orginal patch from Thomas Hiller (HP).
+-	* dmidecode.c: Add processor upgrade type "Socket LGA1366"
+-	  (DMI type 4).
+-
+-2009-06-19  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c: Fix decoding of memory array capacity. A maximum
+-	  capacity of 128 GB would erroneously be reported as Unknown,
+-	  while a unknown capacity would be erroneously reported as 2048
+-	  GB. Bug reported by Lin Li (HP).
+-
+-2009-04-30  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c: Warn if decoding an SMBIOS implementation which is
+-	  newer than what we support.
+-
+-2009-04-04  Jean Delvare  <jdelvare@suse.de>
+-
+-	* Makefile: Clarify license.
+-
+-2008-11-23  Jean Delvare  <jdelvare@suse.de>
+-
+-	* biosdecode.c: Stop using the inline keyword. It causes more
+-	  portability issues than is worth given how little we care about
+-	  performance in this tool, and recent versions of gcc know when
+-	  to inline functions anyway.
+-	* version.h: Set version to 2.10.
+-
+-2008-11-14  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c: Handle chassis information records of size 19
+-	  (DMI type 3).
+-
+-2008-11-10  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c: Claim to support revision 32 of Intel AP-485
+-	  (CPUID). No relevant change since revision 31.
+-	* dmidecode.c: Update reference to AMD CPUID document.
+-
+-2008-11-09  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c: Decode the CPUID of more Intel, VIA and AMD
+-	  processors (DMI type 4).
+-	* dmidecode.c: More CPUID exceptions based on the version string
+-	  (DMI type 4).
+-	* README: Drop reference to the Linux kernel.
+-	* README: Drop "model-specific issues" common problem entry, it is
+-	  no longer relevant.
+-	* README: Simplify "IA-64" common problem entry, most of the
+-	  issues are solved by now.
+-
+-2008-11-08  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c: Add many processor types taken from the CIM Schema.
+-	* dmidecode.c: Drop all references to the DMTF Master MIF
+-	  document. This document hasn't been updated in years, so the
+-	  additions it may contain are no longer relevant.
+-
+-2008-11-07  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c: Handle base board information records of size 9
+-	  (DMI type 2).
+-	* dmidecode.c: Don't display access time equivalent of memory
+-	  device speed (DMI type 17). The access time didn't add much
+-	  value, and rounding effects made it look bad at times.
+-
+-2008-11-07  Jean Delvare  <jdelvare@suse.de>
+-
+-	Update to support SMBIOS specification version 2.6, fourth round.
+-
+-	* dmidecode.c: Initial support for additional information entries
+-	  (DMI type 40). Proper support of this new entry type would
+-	  require redesigning a large part of the code, so I am waiting
+-	  to see actual implementations of it to decide whether it's worth
+-	  the effort.
+-	* dmidecode.c, dmidecode.8: Update reference SMBIOS document.
+-	* dmiopt.c, dmidecode.8: Include entry type 41 in --type baseboard.
+-
+-2008-11-05  Jean Delvare  <jdelvare@suse.de>
+-
+-	Update to support SMBIOS specification version 2.6, third round.
+-
+-	* dmidecode.c: Decode the group number, bus number and
+-	  device/function number of system slots (DMI type 9).
+-	  Based on a preliminary patch by Matt Domsch.
+-	* dmidecode.c: Decode onboard devices extended information
+-	  entries (DMI type 41). Based on a preliminary patch by Matt
+-	  Domsch.
+-	* dmidecode.c: Add slot types "PCI Express x1", "PCI Express x2",
+-	  "PCI Express x4", "PCI Express x8" and "PCI Express x16"
+-	  (DMI type 9).
+-	* dmidecode.c: Decode the memory device rank (DMI type 17).
+-
+-2008-11-02  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c: Use binary search for dmi_processor_family, it's
+-	  faster than linear search (DMI type 4).
+-	* dmidecode.c: Decode boot integrity services entry point entries
+-	  (DMI type 31).
+-
+-2008-10-31  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c: The compiler knows how to reuse strings, it doesn't
+-	  need our help, and actually it does a better job without it. So,
+-	  turn out_of_spec into a define.
+-	* dmidecode.c: Optimize functions dmi_processor_status(),
+-	  dmi_cache_location(), dmi_system_reset_boot_option() and
+-	  dmi_ipmi_register_spacing().
+-
+-2008-10-30  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c, dmiopt.c, dmidecode.8: Option --dump is only a
+-	  modifier as --quiet is, so it's not actually mutually exclusive
+-	  with the output format options.
+-	* dmidecode.c: Make options --dump-bin and --quiet work together.
+-	* dmidecode.c: Delay string filtering when option --dump is used.
+-	* dmidecode.c: Refactor dmi_processor_family function to avoid
+-	  code duplication.
+-	* dmidecode.c: Fix up invalid SMBIOS version 2.51.
+-
+-2008-10-29  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c: Handle special case of processor family code 0xBE,
+-	  which can be both Core 2 or K7. We use the processor
+-	  manufacturer string as a hint (DMI type 4).
+-
+-2008-10-28  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c, dmidecode.h, dmiopt.c, dmiopt.h: Don't use function
+-	  pointers for special string cases. Each special case is itself
+-	  special and needs to call a function with its own prototype, so
+-	  better have dedicated code to handle it all.
+-	* dmidecode.c, dmidecode.h, dmioem.c, dmioem.h: Mark a few
+-	  pointers const.
+-	* dmidecode.c, util.c, util.h: When dumping the DMI table to a
+-	  binary file, truncate the file first.
+-	* dmidecode.c: Support Processor Family 2 field also when queried
+-	  with option --string.
+-
+-2008-10-27  Jean Delvare  <jdelvare@suse.de>
+-
+-	Update to support SMBIOS specification version 2.6, second round.
+-
+-	* dmidecode.c: Add support for Processor Family 2 field
+-	  (DMI type 4).
+-	* dmidecode.c: Add processor types "Turion 64 X2", "Core Solo",
+-	  "Core 2 Duo", "ESA/390 G6", "z/Architectur", "C7-M", "C7-D",
+-	  "C7" and "Eden" (DMI type 4).
+-	* dmidecode.c: Fix typo in processor type "AMD29000" (DMI type 4).
+-	* dmidecode.c: Add processor upgrade types "Socket S1",
+-	  "Socket AM2" and "Socket F (1207)" (DMI type 4).
+-
+-2008-10-26  Jean Delvare  <jdelvare@suse.de>
+-
+-	Update to support SMBIOS specification version 2.6, first round.
+-
+-	* dmidecode.c: Byte-swap the first 3 fields of the UUID
+-	  (DMI type 1).
+-	* dmidecode.c: Add chassis types "Blade" and "Blade Enclosure"
+-	  (DMI type 3).
+-
+-2008-10-26  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmiopt.c, dmidecode.8: Simplify the handling and documentation
+-	  of mutually exclusive output format options.
+-	* dmidecode.8: Document the binary dump file format.
+-	* dmidecode.c: Don't display the source dump file name in quiet
+-	  mode.
+-	* biosdecode.c, dmidecode.c, dmioem.c, dmiopt.c, dmiopt.h,
+-	  ownership.c, types.h, util.c, vpddecode.c, vpdopt.c, vpdopt.h:
+-	  Mass coding-style change: add spaces around operators.
+-	* vpddecode.c: Fix --quiet option.
+-	* dmidecode.h, dmiopt.h: Pass version information to print
+-	  callback functions.
+-	* dmidecode.c: Fix up invalid SMBIOS version.
+-	* dmidecode.c: Handle base board information records of size 10
+-	  (DMI type 2).
+-
+-2008-10-25  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c: Limit indentation in smbios_decode and
+-	  legacy_decode.
+-	* dmidecode.c, dmiopt.c: Write binary dump to a compact file
+-	  rather than a sparse file.
+-	* dmidecode.c, dmiopt.c, dmiopt.h: New option --from-dump, read
+-	  the DMI data from a binary file.
+-	* dmidecode.8: Update the option --dump-bin, document the new
+-	  option --from-dump.
+-
+-2008-08-28  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c: Add missing colon to temperature probe label.
+-	  Patch from Alex Iribarren.
+-
+-2008-02-16  Jean Delvare  <jdelvare@suse.de>
+-
+-	* util.c, util.h: New helper function write_dump.
+-	* dmidecode.c, dmiopt.c, dmiopt.h: New option --dump-bin, dump
+-	  the DMI data to a sparse binary file.
+-	* dmidecode.8: Document the new option --dump-bin.
+-	* Makefile, biosdecode.c, dmidecode.c, dmidecode.h, dmioem.c,
+-	  dmioem.h, dmiopt.c, dmiopt.h, ownership.c, util.c, util.h,
+-	  vpddecode.c, vpdopt.c, vpdopt.h: Update copyright statements.
+-	* dmidecode.c: Adjust the error message which is displayed when
+-	  the table is unreachable.
+-
+-2007-06-30  Jean Delvare  <jdelvare@suse.de>
+-
+-	* config.h: Add support for Solaris (x86 only, of course). Based
+-	  on a patch by Sun's Dan Mick, brought to my knowledge by
+-	  Attila Nagy.
+-
+-2007-06-27  Jean Delvare  <jdelvare@suse.de>
+-
+-	* Makefile: Fix the uninstall-man target.
+-
+-2007-06-07  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c: If the SMBIOS entry point decoding fails (for
+-	  example due to a bad checksum), still try decoding the
+-	  encapsulated DMI entry point. Suggested by Luke Suchocki.
+-	* dmidecode.c: Replace all occurrences of "KB" by the more
+-	  correct "kB".
+-
+-2007-03-16  Jean Delvare  <jdelvare@suse.de>
+-
+-	* vpddecode.c: Stop asking the user to report bad checksums,
+-	  unaligned records and the like. Such machines exist, too bad,
+-	  we have to live with it.
+-
+-2007-02-27  Jean Delvare  <jdelvare@suse.de>
+-
+-	* biosdecode.c: Fix a compilation error with non-C99 compilers.
+-	  Patch from Francois Revol.
+-
+-2007-02-26  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c: Fix an array overrun while decoding the system
+-	  event log status (DMI type 15).
+-	* biosdecode.c: Use printf instead of fwrite.
+-	* dmidecode.8: Some OEM-specific types can be decoded now.
+-	* biosdecode.8: List the FJKEYINF entry point type.
+-	* vpddecode.8: The product name is no longer displayed.
+-	* version.h: Set version to 2.9.
+-
+-2007-02-16  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c: Do not print the BIOS base address and runtime size
+-	  if the base address is 0. This happens on IA-64 because there's
+-	  no BIOS.
+-	* Makefile, README: Do not build biosdecode, ownership and
+-	  vpddecode on IA-64, as IA-64 systems have no BIOS. This was
+-	  quite tricky to keep both GNU make and BSD make happy, but it
+-	  seems that I finally succeeded.
+-
+-2007-02-13  Jean Delvare  <jdelvare@suse.de>
+-
+-	Update to support SMBIOS specification version 2.5, second round.
+-
+-	* dmidecode.c: Decode new processor characteristics (multi-core,
+-	  multi-thread, 64-bit) (DMI type 4).
+-	* dmidecode.c: Decode slot ID of AGP 8x and PCI Express slots (DMI
+-	  type 9).
+-
+-	* dmidecode.c: Fix the mask of 3 bitfield tests. This will let
+-	  the memory type of some systems be properly reported as SDRAM.
+-	* dmidecode.c: Fix the AMD processors signature decoding.
+-	* README: Minor edits.
+-
+-2007-02-12  Jens Elkner  <elkner@linofee.org>
+-
+-	Update to support SMBIOS specification version 2.5, first round.
+-
+-	* dmidecode.c: Add chassis types "CompactPCI" and "AdvancedTCA"
+-	  (DMI type 3).
+-	* dmidecode.c: Add processor types "Turion 64",
+-	  "Dual-Core Opteron", "Athlon 64 X2", "Celeron D", "Pentium D"
+-	  and "Pentium EE" (DMI type 4).
+-	* dmidecode.c: Add processor upgrade types "Socket mPGA604",
+-	  "Socket LGA771" and "Socket LGA775" (DMI type 4).
+-	* dmidecode.c: Add connector type "SAS/SATA Plug Receptacle" and
+-	  port types "SATA" and "SAS" (DMI type 8).
+-	* dmidecode.c: Add on-board device types "PATA Controller",
+-	  "SATA Controller" and "SAS Controller" (DMI type 10).
+-	* dmidecode.c: Add memory device form factor "FB-DIMM" and memory
+-	  device type "DDR2 FB-DIMM" (DMI type 17).
+-
+-2007-02-12  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmioem.c: Share the code between HP-specific types 209 and 221.
+-	  Both types are really the same, only the title is different.
+-	* dmioem.c: Make the HP-specific types 209 and 221 output a bit
+-	  more verbose.
+-	* dmidecode.c: Let --type decode OEM-specific entries when
+-	  possible.
+-	* dmidecode.c: Include decoded OEM-specific entries in quiet mode
+-	  output (--quiet).
+-	* dmidecode.c: Do not complain about truncated entries in quiet
+-	  mode.
+-	* dmioem.c: Decode HP-specific type 204 entries in a safer way:
+-	  check the length before decoding, and don't assume that all
+-	  strings are provided in the same order as they are used.
+-
+-	Update to support Intel AP-485 (CPUID) revision 31 (was 28).
+-
+-	* dmidecode.c: New CPUID flag IA64.
+-	* dmidecode.c: Fix the decoding of Intel extended family.
+-
+-2007-02-11  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmioem.c, dmioem.h: New.
+-	* Makefile, dmidecode.c, dmidecode.h, dmioem.c, dmioem.h: Move the
+-	  decoding of OEM-specific entries to a separate source file.
+-	* dmidecode.c: DMI type 38 is tested by now.
+-	* dmioem.c: The PCI function is typically represented as a single
+-	  digit.
+-	* Makefile, dmiopt.c, vpdopt.c, util.h: Define an ARRAY_SIZE macro
+-	  which computes the size of a static array, and use it where
+-	  relevant.
+-
+-2007-02-11  John Cagle  <jcagle@kernel.org>
+-
+-	* dmidecode.c: Add support for 3 HP-specific entries: system/rack
+-	  locator (type 204), NIC MAC information (type 209) and NIC iSCSI
+-	  MAC information (type 221).
+-
+-2007-01-14  Jean Delvare  <jdelvare@suse.de>
+-
+-	* vpddecode.c: Fix a rare warning.
+-	* biosdecode.c: Add support for the FJKEYINF entry point, which
+-	  contains data related to the "application panel" on Fujitsu
+-	  laptops.
+-
+-2006-05-23  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c: Fix a recently introduced compilation error with
+-	  non-C99 compilers.
+-	* dmidecode.c: Check for short entries (less than 4 bytes), stop
+-	  with an error when one is encountered.
+-
+-2006-05-13  Jean Delvare  <jdelvare@suse.de>
+-
+-	* vpddecode.c, README: Drop the product name lookup table. It
+-	  was reported to be unreliable too many times, and was also
+-	  difficult to maintain.
+-
+-2006-05-10  Jean Delvare  <jdelvare@suse.de>
+-
+-	* dmidecode.c: Don't cast from u8* to dmi_header*, else
+-	  architectures which do not support unaligned memory accesses
+-	  may break. Instead, copy the members individually. That's a
+-	  bit slower, but that's also safer and we only need to do it
+-	  once per DMI entry, so it's not time critical. So far, we
+-	  were using a trick to later work around the unaligned memory
+-	  access, but the compiler would still warn about the risk,
+-	  which is always confusing.
+-	* config.h, types.h, README: Automatically enable the unaligned
+-	  memory access workaround on ia64.
+-	* types.h: Inline U64. It makes sense per se and also lets us
+-	  get rid of a warning about U64 being unused.
+-	* dmidecode.c: Detect EFI at run-time rather than compilation-
+-	  time. Based on an original patch from Matthew Garrett. This
+-	  will make x86 binaries work for both PC systems with BIOS and
+-	  Macintosh systems with EFI. Also prevent a possible, though
+-	  unlikely, NULL-pointer dereference in the EFI code.
+-
+-2006-02-25  Jean Delvare
+-
+-	* dmidecode.c: Fix typo reported by David Wilson (DMI case 3).
+-
+-2006-02-04  Jean Delvare
+-
+-	* vpddecode.c: Update lookup table from revision 2006-01-31 of IBM
+-	  reference document (add product ID "7B").
+-	* version.h: Set version to 2.8.
+-
+-2006-01-21  Jean Delvare
+-
+-	* vpddecode.c: The mysterious last character of xSeries records
+-	  may be a BIOS revision. Display it as such when present and
+-	  non zero, and ask users to report.
+-	* vpddecode.c: Adjust an error message.
+-	* dmidecode.8: Update the sample entry to match the new output
+-	  format.
+-	* README: Improve the IA-64 specific section and the vpddecode
+-	  tool description.
+-	* vpdopt.h: Add missing system header file include.
+-
+-2006-01-20  Jean Delvare
+-
+-	* vpddecode.c: Assume a constant length of 12 characters for the
+-	  "Default Flash Image File Name" entry. The 13th character never
+-	  contained anything useful, so it probably has a different
+-	  meaning (unknown for now).
+-
+-2005-12-24  Jean Delvare
+-
+-	* vpddecode.c: Scan for VPD records on 4-byte boundaries instead
+-	  of 16-byte boundaries. This is needed for some eServer xSeries
+-	  206. Still emit a warning if a VPD record is found not on a
+-	  16-byte boundary.
+-
+-2005-10-26  Jean Delvare
+-
+-	* vpddecode.c: Add product ID "NR". Reported by Klaus Muth.
+-	* vpddecode.c: Update lookup table from revision 2005-10-06 of IBM
+-	  reference document (add product IDs "77" and "78").
+-
+-2005-10-05  Jean Delvare
+-
+-	Update to support IPMI specification version 2.0 (was 1.5).
+-
+-	* dmidecode.c: Support IPMI interface type SSIF. Original patch
+-	  by Garry Belka.
+-
+-2005-10-04  Jean Delvare
+-
+-	* vpdopt.c: Display the list of all valid string keywords when
+-	  --string is used without an argument.
+-	* vpddecode.8: Document the new -s, --string option.
+-	* dmidecode.8: List the four new string keywords.
+-	* vpddecode.c: Keep quiet when --string is used, even when no VPD
+-	  record is found.
+-
+-2005-10-03  Jean Delvare
+-
+-	* biosdecode.c: Fix a potential (but highly improbable) buffer
+-	  overrun in the VPD record decoding.
+-	* biosdecode.c: Change the xSeries checksumming method to
+-	  accommodate a strange xSeries 440 VPD record, as was done in
+-	  vpddecode.c some weeks ago. Do not display the default flash
+-	  image file name anymore, it's not so useful and the field length
+-	  is now uncertain.
+-	* vpdopt.c, vpdopt.h: New.
+-	* Makefile, vpddecode.c, vpdopt.c, vpdopt.h: Move the command line
+-	  handling of vpddecode to a separate source file.
+-	* vpddecode.c, vpdopt.c, vpdopt.h: Add option -s, --string. It
+-	  prints one selected VPD string instead of the regular output.
+-
+-2005-09-24  Jean Delvare
+-
+-	* dmiopt.c: Fix incorrect header include. The strcasecmp function
+-	  is defined in <strings.h>, not <string.h>. Reported by Petter
+-	  Reinholdtsen.
+-
+-2005-09-14  Jean Delvare
+-
+-	* dmidecode.h: New.
+-	* dmidecode.c, dmidecode.h, Makefile: Export four specific
+-	  decoding functions, make them suitable for external call.
+-	* dmidecode.c, dmiopt.c, dmiopt.h, Makefile: Make it possible
+-	  for --string to print decoded binary data rather than only
+-	  DMI strings. Add four such string keywords.
+-	* dmidecode.c, dmiopt.c, dmiopt.h: Modify the opt structure
+-	  to handle the string option more efficiently.
+-
+-2005-09-13  Jean Delvare
+-
+-	* vpddecode.c: Slightly change the xSeries checksumming method to
+-	  accommodate a strange xSeries 440 VPD record. Also tweak the
+-	  decoding of the "Default Flash Image File Name" entry. Thanks
+-	  to Torsten Seemann for providing a test VPD record.
+-
+-2005-09-05  Jean Delvare
+-
+-	* Makefile: Use -Wundef.
+-
+-2005-08-31  Jean Delvare
+-
+-	* dmidecode.c: Drop trailing dot from handle description line.
+-
+-2005-08-29  Jean Delvare
+-
+-	* dmidecode.c: Reword a comment about CPUID.
+-	* dmidecode.c: Claim to support revision 28 of Intel AP-485
+-	  (CPUID). No relevant change since revision 27.
+-
+-2005-08-25  Jean Delvare
+-
+-	* vpddecode.c: Add product ID "VI". Reported by Torsten Seemann.
+-	* vpddecode.c: Update lookup table from revision 2005-06-24 of IBM
+-	  reference document (add product IDs "1U", "1X", "70", "74", "75"
+-	  and "76", update product ID "1Y").
+-	* dmiopt.c: Complain about unknown options again.
+-	* biosdecode.c, ownership.c, vpddecode.c: getopt_long() will never
+-	  return ':'.
+-
+-2005-08-04  Jean Delvare
+-
+-	* README: Manual pages document the command line interface.
+-	  A discussion list exists for developers. Mmap is used on
+-	  most systems, not just Linux.
+-	* version.h: Set version to 2.7.
+-
+-2005-08-02  Jean Delvare
+-
+-	* dmiopt.c, dmidecode.8: Options --dump and --quiet are mutually
+-	  exclusive.
+-
+-2005-06-23  Jean Delvare
+-
+-	* dmiopt.c, dmidecode.8: Options --dump and --string are mutually
+-	  exclusive.
+-
+-2005-06-22  Jean Delvare
+-
+-	* dmiopt.c: Display the list of all valid type or string keywords
+-	  when --type or --string, respectively, is used without an
+-	  argument or with an invalid one.
+-	* dmidecode.8: Document the new -s, --string option. Update the
+-	  -t, --type option documentation.
+-	* dmiopt.c, dmidecode.8: Add string keyword "bios-release-date",
+-	  the Linux kernel uses it.
+-	* dmidecode.c, dmidecode.8: Fix typo ("Controler" becomes
+-	  "Controller").
+-
+-2005-06-21  Jean Delvare
+-
+-	* dmidecode.c, dmiopt.c, dmiopt.h: Add option -s, --string. It
+-	  prints one selected DMI string instead of the regular output.
+-
+-2005-06-18  Jean Delvare
+-
+-	* dmidecode.c: Hide handle references and entries of unknown
+-	  type when --quiet is used.
+-	* dmidecode.8: Document the new -q, --quiet option.
+-	* dmidecode.c: Stop decoding at end of table entry when --quiet
+-	  is used. Also don't warn about incorrect table length or entries
+-	  count when --quiet is used.
+-
+-2005-06-17  Jean Delvare
+-
+-	* dmidecode.c, dmiopt.c, dmiopt.h: Add option -q, --quiet. It
+-	  makes the output less verbose.
+-	* dmidecode.c: Suppress one level of indentation in the output,
+-	  insert blank lines between records. This will hopefully make
+-	  the output easier to read.
+-	* dmidecode.c: Hide table address and size when --type is used.
+-
+-2005-06-16  Jean Delvare
+-
+-	* dmidecode.8: Document the new -t, --type option.
+-
+-2005-06-15  Jean Delvare
+-
+-	* dmiopt.c, dmiopt.h: New.
+-	* Makefile, dmidecode.c, dmiopt.c, dmiopt.h: Move the command line
+-	  handling of dmidecode to a separate source file.
+-	* dmiopt.c: Define keywords to be used with --type (instead of
+-	  numeric values).
+-
+-2005-06-14  Jean Delvare
+-
+-	* dmidecode.c: Centralize the main exit point. This allows fixing
+-	  a minor, recently introduced memory leak which was happening on
+-	  error conditions.
+-
+-2005-06-13  Jean Delvare
+-
+-	* dmidecode.c: Add option -t, --type. It limits the output to
+-	  the given type(s) of DMI entries.
+-
+-2005-05-25  Jean Delvare
+-
+-	* vpddecode.c: Add product IDs "KE", "NT" and "ZR". Reported by
+-	  Bernd Krumboeck.
+-
+-2005-05-15  Jean Delvare
+-
+-	* dmidecode.8, vpddecode.8: Document the new -u, --dump option.
+-
+-	Update to support SMBIOS specification version 2.4 (was 2.4
+-	preliminary). There is actually no difference between 2.4
+-	preliminary and 2.4 final.
+-
+-	* dmidecode.c: Update the "System Management BIOS Reference
+-	  Specification" version.
+-
+-2005-04-26  Jean Delvare
+-
+-	* vpddecode.c: Add product ID "M1". Reported by Myke Olson.
+-	* vpddecode.c: Add option -u, --dump. It disables decoding of the
+-	  VPD records, a raw dump is displayed instead. This option is
+-	  mainly intended for debugging.
+-
+-2005-04-03  Jean Delvare
+-
+-	* Makefile: Use variables for install and rm commands, so that these
+-	  can be overridden by the caller.
+-
+-2005-03-25  Jean Delvare
+-
+-	* Makefile: Install some documentation files (README, CHANGELOG,
+-	  AUTHORS).
+-
+-	Update to support SMBIOS specification version 2.4 preliminary
+-	[11/18/2004] (was 2.3.4).
+-
+-	* dmidecode.c: Add BIOS characteristics (DMI type 0).
+-	* dmidecode.c: Display BIOS and firmware revisions where available
+-	  (DMI type 0).
+-	* dmidecode.c: Display system SKU number and family where available
+-	  (DMI type 1).
+-	* dmidecode.c: Add system slot types and widths (DMI type 9).
+-	* dmidecode.c: Add memory device type "DDR2" (DMI type 17).
+-
+-2005-03-20  Jean Delvare
+-
+-	* Makefile: Install manual pages under $(prefix)/share/man by
+-	  default, instead of $(prefix)/man, so as to comply with the FHS.
+-
+-2005-03-08  Jean Delvare
+-
+-	* vpddecode.c: Update lookup table from revision 2005-03-08 of IBM
+-	  reference document (add product ID "1V", update product ID "1R").
+-	  Thanks to Ingo van Lil for reporting about product ID "1V".
+-
+-2005-03-06  Jean Delvare
+-
+-	* dmidecode.c: Add option -u, --dump. It disables decoding of the
+-	  entries, raw dumps are displayed instead. This option is mainly
+-	  intended for debugging.
+-	* Makefile: Use -Winline.
+-	* dmidecode.c: Make ASCII filtering of strings faster.
+-
+-2005-02-28  Jean Delvare
+-
+-	* version.h: Set version to 2.6.
+-	* Makefile: ownership.o depends on version.h.
+-
+-2005-02-24  Jean Delvare
+-
+-	* vpddecode.c: Add product ID "2C". Reported by Tomek Mateja.
+-
+-2005-02-17  Jean Delvare
+-
+-	* vpddecode.c: Add product IDs "OP" and "PN". Reported by Scott
+-	  Denham.
+-	* vpddecode.c: Fix typo in one product name (560E improperly
+-	  spelled 650E).
+-	* vpddecode.c: Add product IDs "IW" and "IY", as added recently
+-	  on IBM's reference web page. Update reference.
+-	* config.h: Use mmap on all but BeOS, instead of only Linux.
+-
+-2005-02-12  Jean Delvare
+-
+-	* util.c: Fix incorrect length in munmap call.
+-	* Makefile: Use -Wmissing-prototypes.
+-	* dmidecode.c: Fix maximum battery error value.
+-
+-2005-02-11  Jean Delvare
+-
+-	* Makefile: Discard -pedantic, we don't really need this.
+-	* util.c: Display an error message on memory shortage. Suggested
+-	  by Don Howard.
+-
+-	Fix a bug causing dmidecode to crash on some systems with more than
+-	2 GB of memory. This is a signed vs unsigned issue, which existed
+-	up to version 2.2, was fixed in 2.3 but reintroduced in a different
+-	form in 2.5 as part of a code clean up and refactoring.
+-	https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=112355
+-	Thanks to Petter Reinholdtsen for reporting. Thanks to Don Howard
+-	for additional insight.
+-
+-	* dmidecode.c, util.c, util.h: Use size_t instead of off_t when
+-	  handling memory addresses.
+-
+-2005-02-10  Jean Delvare
+-
+-	* dmidecode.c: Add option -h, --help, display a usage summary.
+-	* biosdecode.c, ownership.c, vpddecode.c: Copy command-line handling
+-	  from dmidecode.c.
+-	* biosdecode.8, dmidecode.8, ownership.8, vpddecode.8: Document
+-	  the new command-line interface.
+-
+-2005-02-06  Jean Delvare
+-
+-	* Makefile: Everything depends on config.h.
+-	* dmidecode.c: Add basic command-line handling. This was suggested
+-	  a long time ago by Erwan Velu.
+-
+-2005-02-01  Jean Delvare
+-
+-	* vpddecode.c: Add product IDs "AP", "KP" and "RD". Reported by
+-	  David Rosala.
+-
+-2005-01-17  Jean Delvare
+-
+-	* README: Add a note about Cygwin. Thanks to Dominik Klein for
+-	  reporting success.
+-
+-2004-12-10  Jean Delvare
+-
+-	Increase portability and configurability to in order to support BeOS.
+-
+-	* config.h: New.
+-	* config.h: Define a default memory device.
+-	* biosdecode.c, dmidecode.c, ownership.c, vpddecide.c: Include
+-	  config.h and use the defined default memory device.
+-	* Makefile, config.h, util.c, README: Move USE_MMAP to config.h,
+-	  use mmap on Linux only.
+-
+-2004-11-22  Jean Delvare
+-
+-	* biosdecode.c: Avoid size_t in printf. Should remove a warning on
+-	  ia64. Thanks to Petter Reinholdtsen for reporting.
+-	* util.c: Use sysconf(_SC_PAGESIZE) instead of getpagesize() where
+-	  available. This may remove a warning on ia64 as a side effect.
+-	  Thanks to Petter Reinholdtsen for reporting.
+-
+-2004-11-21  Jean Delvare
+-
+-	* util.c, util.h: Function myread has no more user outside of util.c.
+-	* biosdecode.c: Speed improvements.
+-
+-2004-11-20  Jean Delvare
+-
+-	* biosdecode.c, ownership.c, vpddecode.c: Make use of the mem_chunk
+-	  function.
+-	* vpddecode.c: Simplify the memory loop code a bit.
+-
+-2004-11-12  Jean Delvare
+-
+-	* dmidecode.c: Hide bank connection type for non-installed memory
+-	  modules.
+-	* dmidecode.c: Reference comment fix.
+-	* dmidecode.c: Hide watchdog timer details when no watchdog is
+-	  present. Change label for no watchdog.
+-	* README: Match case change for PREFIX (now prefix) in the Makefile
+-	  file. Reported by Raul Nunez de Arenas Coronado.
+-
+-2004-11-12  Jean Delvare
+-
+-	Update to support DMTF Master MIF version 040707 (was 030621).
+-
+-	* dmidecode.c: One additional processor type (Sempron).
+-	* dmidecode.c: One additional processor type (Efficeon TM8800).
+-	* dmidecode.c: One additional processor upgrade type (Socket 939).
+-	* dmidecode.c: Add the AMD Sempron to the list of x86-class
+-	  processors.
+-
+-	Update to support Intel AP-485 (CPUID) revision 27 (was 25).
+-
+-	* dmidecode.c: Rename SBF flag to PBE.
+-
+-2004-11-11  Jean Delvare
+-
+-	* util.c: More helpful error messages.
+-	* util.c: Use MAP_SHARED instead of MAP_PRIVATE in mmap.
+-	* version.h: Set version to 2.5.
+-
+-2004-11-10  Jean Delvare
+-
+-	* README: Update dmidecode presentation (copied from the web page).
+-	  Move the list of supported systems from the documentation section
+-	  to the installation section.
+-
+-2004-11-09  Jean Delvare
+-
+-	* vpddecode.c: Update product ID "1R". Reported by Marco Wertejuk.
+-
+-2004-10-24  Jean Delvare
+-
+-	* util.c: Workaround missing MAP_FAILED definition, needed on
+-	  old systems. Original patch from Durval Menezes.
+-
+-2004-10-14  Jean Delvare
+-
+-	* dmidecode.c: Search for EFI systab at /sys/firmware/efi/systab.
+-	  Original patch from Alex Williamson.
+-	* dmidecode.c: Remove warning about legacy_decode not being used
+-	  when USE_EFI is defined.
+-	* dmidecode.c: Detect missing SMBIOS entry point in efi/systab.
+-	* dmidecode.c: Fix fatal typo in USE_EFI-specific code.
+-
+-2004-10-01  Roberto Nibali  <ratz@tac.ch>
+-
+-	* Makefile: Be LDFLAGS aware.
+-
+-2004-07-24  Jean Delvare
+-
+-	* util.c: Add missing header include.
+-
+-2004-06-11  Jean Delvare
+-
+-	* vpddecode.c: Add product IDs "GE" and "T2". Reported by Doug Brenner.
+-
+-2004-05-02  Jean Delvare
+-
+-	* dmidecode.c: Move legacy DMI entry point decoding to a separate
+-	  function.
+-	* dmidecode.c: Use a 64 kB buffer for searching entry points,
+-	  instead of repeated 16-byte reads.
+-	* util.c, util.h: New mem_chunk function. It returns a buffer
+-	  containing a copy of a given chunk of the physical memory.
+-	* dmidecode.c: Make use of the new mem_chunk function.
+-
+-2004-04-30  Jean Delvare
+-
+-	* vpddecode.c: Add product ID "JP". Reported by Bernd Krumboeck.
+-
+-2004-04-22  Jean Delvare
+-
+-	* dmidecode.c, biosdecode.c, ownership.c, types.h: Move common
+-	  WORD-like macros to types.h.
+-
+-2004-04-21  Jean Delvare
+-
+-	* dmidecode.c, biosdecode.c: Fix my contact information.
+-	* dmidecode.c: Update copyright year.
+-
+-2004-04-20  Jean Delvare
+-
+-	* README: Correct Chad Smith's name. Reported by Martin Pool.
+-
+-2004-04-15  Jean Delvare
+-
+-	* vpddecode.c: Add product ID "PL". Reported by Mark Syms.
+-
+-2004-04-14  Jean Delvare
+-
+-	* vpddecode.c: Add product ID "PD". Reported by Roger Koot.
+-
+-2004-04-11  Jean Delvare
+-
+-	* dmidecode.c, Makefile, README: Drop TABLE_LITTLEENDIAN.
+-	* README: Update manual pages information.
+-
+-2004-04-02  Jean Delvare
+-
+-	* vpddecode.c: Add product ID "NV". Reported by Shawn Starr.
+-
+-2004-03-27  Jean Delvare
+-
+-	* vpddecode.c: Add product ID "24". Reported by Paul Sturm.
+-	* dmidecode.c: Fix two missing comas in string enumerations. Thanks to
+-	  Joshua Goldenhar for reporting the first one.
+-
+-2004-03-24  Jean Delvare
+-
+-	* vpddecode.c: Add product ID "PJ". Reported by Roger Koot.
+-	* vpddecode.c: Rename two Netvista systems to use their real name
+-	  instead of machine type.
+-
+-2004-03-20  Petter Reinholdtsen  <pere@hungry.com>
+-
+-	* Makefile: Make it easier to select where to install the binaries
+-	  and manual pages, and to use different paths when building and
+-	  installing.
+-
+-2004-03-19  Jean Delvare
+-
+-	* vpddecode.c: Add product ID "2A". Reported by Rafael Avila
+-	  de Espindola.
+-	* version.h: Set version to 2.4.
+-
+-2004-03-07  Jean Delvare
+-
+-	* biosdecode.c, vpddecode.c: Add a third checksumming method for
+-	  VPD records.
+-	* vpddecode.c: Add product ID "PI", update "20". Reported by
+-	  Zing Zing Shishak.
+-
+-2004-03-05  Jean Delvare
+-
+-	* README: Update.
+-
+-2004-02-25  Jean Delvare
+-
+-	* dmidecode.c: Support CPUID document revision 25 (no change).
+-	* dmidecode.c: Shorten the EOF error message.
+-
+-2004-02-23  Jean Delvare
+-
+-	* man/biosdecode.8, man/dmidecode.8, man/ownership.8,
+-	  man/vpddecode.8: New.
+-	* Makefile: Handle new manual pages.
+-
+-2003-12-28  Jean Delvare
+-
+-	* vpddecode.c: Add product ID "PT". Reported by Ramiro Barreiro.
+-
+-2003-12-17  Jean Delvare
+-
+-	* vpddecode.c: Add product ID "RE". Reported by Josef Moellers.
+-	* vpddecode.c, biosdecode.c: Handle longer VPD records as seen on
+-	  xSeries. These have a different checksumming method.
+-
+-2003-12-03  Jean Delvare
+-
+-	* vpddecode.c: Add product ID "TT". Reported by Hugues Lepesant.
+-	* vpddecode.c, biosdecode.c: Fix typo ("Bios" becomes "BIOS").
+-	* dmidecode.c: Add another exception to the CPUID-supporting CPU list
+-	  ("Pentium III MMX").
+-	* dmidecode.c: Number devices in multi-device on board device
+-	  information structures (DMI case 10).
+-
+-2003-11-13  Jean Delvare
+-
+-	* dmidecode.c: Automatically detect architectures on which to use EFI
+-	  (ia64 for now). Suggested by Jeff Moyer.
+-
+-2003-11-11  Jean Delvare
+-
+-	* vpddecode.c: Add product ID "KX". Reported by Klaus Ade Johnstad,
+-	  confirmed by Pamela Huntley.
+-	* dmidecode.c: Display CPUID values as decimal, not hexadecimal.
+-	  This is a reversal of the 2003-07-18 change to be consistent with
+-	  /proc/cpuinfo under Linux.
+-	* dmidecode.c: Fix processor ID decoding for older 80486. Not very
+-	  important since such systems are unlikely to support SMBIOS.
+-	* dmidecode.c: Modify CPU signature display for AMD processors.
+-	* vpddecode.c, biosdecode.c: Fix incorrect VPD checksumming.
+-
+-2003-10-24  Jean Delvare
+-
+-	* dmidecode.c: Add another exception to the CPUID-supporting CPU list.
+-
+-2003-10-19  Jean Delvare
+-
+-	* README: Clarify why mmap is used. Fix typo.
+-	* Makefile: Add deleting core to the clean target.
+-	* version.h: Set version to 2.3.
+-
+-2003-10-17  Jean Delvare
+-
+-	* biosdecode.c: Use (void) instead of __attribute__ ((unused)) to
+-	  declare that a function parameter isn't used. According to Alexandre
+-	  Duret-Lutz, this is the portable way do to it. Fix typo in comment.
+-	* dmidecode.c: Fix typo.
+-
+-2003-10-16  Jean Delvare
+-
+-	* dmidecode.c: Remove useless comparison in dmi_system_boot_status.
+-	  Thanks to Alexandre Duret-Lutz for pointing this out.
+-	* biosdecode.c: Add a missing length check in acpi_decode. Found
+-	  using Valgrind.
+-	* biosdecode.c: Fix buffer overrun in main. Found using Valgrind.
+-
+-2003-10-14  Jean Delvare
+-
+-	* dmidecode.c: Update DMTF reference addresses.
+-	* dmidecode.c: List two more processors (Athlon64 and Pentium M)
+-	  as x86-class (i.e. supporting CPUID).
+-
+-2003-10-11  Jean Delvare
+-
+-	Update to support DMTF Master MIF version 030621 (was 021205).
+-
+-	* dmidecode.c: Handle unknown processor voltage.
+-	* dmidecode.c: Fix typo in event log method.
+-	* dmidecode.c: One additional processor type (Pentium M).
+-	* dmidecode.c: Add the AMD Opteron to the list of x86-class
+-	  processors. Thanks to Mike Cooper for providing information.
+-	* vpddecode.c: New program for decoding a machine's VPD structure
+-	  (only found in IBM machines).
+-	* Makefile: Update accordingly.
+-	* Makefile: Fix dependencies for ownership. Add strip target. Various
+-	  cleanups (reordering, comments, optimization and debug flags).
+-	* README: Update to reflect the addition of the strip target and the
+-	  vpddecode program. Some additional changes and fixes.
+-
+-2003-10-10  Jean Delvare
+-
+-	* dmidecode.c: Change mmap options to prevent dmidecode from being
+-	  killed by the Linux kernel in some rare cases. Reported by
+-	  Mike Cooper.
+-	* dmidecode.c: Various code cleanups and optimizations.
+-
+-2003-10-09  Jean Delvare
+-
+-	* dmidecode.c: Fix a bug that prevented dmidecode to reach DMI tables
+-	  beyond the 2GB memory limit. Reported by Mike Cooper.
+-	* ownership.c: Add one reference. Code cleanups.
+-	* CHANGELOG: Fix typo.
+-
+-2003-10-08  Jean Delvare
+-
+-	* biosdecode.c: Fix potentially wrong checksum on Sony-specific entry.
+-	* biosdecode.c: Unimportant changes (comment, typo...) in
+-	  Compaq-specific section.
+-	* biosdecode.c: Add support for VPD (vital product data, IBM-specific).
+-	* CHANGELOG: Various updates.
+-
+-2003-10-07  Jean Delvare
+-
+-	* ownership.c: Fix a harmless warning on x86_64. Reported by Mike
+-	  Cooper.
+-
+-2003-09-19  Jean Delvare
+-
+-	* dmidecode.c: Explicitly say when no SMBIOS nor DMI entry point
+-	  was found. Implicitly suggested by Sergey Leonovich.
+-
+-2003-09-11  Jean Delvare
+-
+-	* Makefile: Don't use $^ since it isn't supported by BSD make.
+-	  Reported by Hugues Lepesant.
+-
+-2003-09-05  Jean Delvare
+-
+-	* Makefile: Fix missing ownership dependency for install target.
+-	  Reported by Mario Lang.
+-
+-2003-08-08  Jean Delvare
+-
+-	* dmidecode.c: Update the README file (mainly the now solved laptop
+-	  and IA-64 issues, and add a section for biosdecode and ownership).
+-	* version.h: Set version to 2.2.
+-
+-2003-07-18  Jean Delvare
+-
+-	* dmidecode.c: Display CPUID values as hexadecimal, not decimal.
+-	* dmidecode.c: Shift the I2C slave address by one bit to the right
+-	  (DMI case 38).
+-
+-2003-06-27  Jean Delvare
+-
+-	* biosdecode.c: Better display of Compaq-specific entries (thank to
+-	  some documentation).
+-
+-2003-06-25  Jean Delvare
+-
+-	* dmidecode.c: Remove fp_last (not useful anymore). Reworded the "table
+-	  is unreachable" message to mention the -DUSE_MMAP solution.
+-
+-2003-06-19  Jean Delvare
+-
+-	* dmidecode.c: Add support for IA-64.
+-	* Makefile: Add new option CFLAGS modifier lines for IA-64.
+-
+-2003-06-17  Jean Delvare
+-
+-	* dmidecode.c, biosdecode.c: Move common "util" functions to util.c.
+-	* util.c, util.h: New.
+-	* types.h: New.
+-	* Makefile: Update accordingly.
+-	* biosdecode.c: Add detection of Compaq-specific entries.
+-	* ownership.c: New program for finding a machine's ownership tag
+-	  (only found in Compaq machines). Requested by Luc Van de Velde.
+-	* Makefile: Update again.
+-
+-2003-06-10  Jean Delvare
+-
+-	* dmidecode.c: Fix typo in IPMI register spacing table.
+-	* version.h: Set version to 2.1.
+-
+-2003-06-04  Jean Delvare
+-
+-	* Makefile: Restore optional CFLAGS modifier lines.
+-	* README: New.
+-
+-2003-05-30  Jean Delvare
+-
+-	* dmidecode.c: Cleaner handling of unreachable table.
+-
+-2003-05-27  Jean Delvare
+-
+-	Update to support Intel AP-485 specification (CPUID) revision 023
+-	(was 021).
+-
+-	* dmidecode.c: Add SBF flag to processor ID (DMI case 4). Add comment
+-	  about new flags returned in ECX.
+-
+-2003-05-26  Jean Delvare
+-
+-	Update to support SMBIOS specification version 2.3.4 (was 2.3.3).
+-
+-	* dmidecode.c: Add processor and processor upgrade names (DMI case 4).
+-	* dmidecode.c: Add slot names (DMI case 9).
+-
+-2003-05-22  Jean Delvare
+-
+-	* dmidecode.c: Fix typo reported by David Wilson (DMI case 6).
+-
+-2003-03-08  Jean Delvare
+-
+-	* dmidecode.c: Decode more fields according to the IPMI specification
+-	  (DMI case 38).
+-
+-2003-03-07  Jean Delvare
+-
+-	Fixed IPMI device information (DMI case 38). Thanks to Richard Sharpe
+-	for pointing the bugs out.
+-
+-	* dmidecode.c: Fix IPMI interface type being shifted by one.
+-	* dmidecode.c: Fix NV storage device being improperly displayed.
+-	* dmidecode.c: Reword IPMI specification revision into specification
+-	  version, as suggested in the IPMI specification itself.
+-	* dmidecode.c: Add a reference to the IPMI specification.
+-	* dmidecode.c: Show I2C address as hexadecimal.
+-	* dmidecode.c: Base address is a QWORD, not DWORD.
+-	* dmidecode.c: Decode some extra fields according to the IPMI
+-	  specification.
+-
+-2003-03-06  Jean Delvare
+-
+-	* dmidecode.c, biosdecode.c: Move all changelog entries to CHANGELOG.
+-	* CHANGELOG: New. Format inspired by Heroes' ChangeLog file.
+-	* dmidecode.c, biosdecode.c, Makefile: Update copyright years.
+-	* dmidecode.c, biosdecode.c, Makefile: Move version definition to
+-	  version.h. Update dependencies accordingly.
+-	* version.h: New.
+-
+-2002-10-21  Jean Delvare
+-
+-	* dmidecode.c: Change supported log type descriptors display.
+-	* dmidecode.c: Code optimization in event log status.
+-	* dmidecode.c: Remove extra newline in voltage probe accuracy.
+-	* dmidecode.c: Display "OEM-specific" if type is 128 or more.
+-	* dmidecode.c: Do not display Strings on dump if there are no strings.
+-	* dmidecode.c: Add ASCII-filtering to dmi_string.
+-	* dmidecode.c: Convert all dates to ISO 8601.
+-
+-2002-10-18  Jean Delvare
+-
+-	* dmidecode.c: Complete rewrite.
+-	* dmidecode.c: Now complies with SMBIOS specification 2.3.3.
+-	* dmidecode.c: Move all non-DMI stuff to biosdecode.c.
+-	* biosdecode.c: New.
+-
+-2002-10-15  Jean Delvare
+-
+-	* dmidecode.c: Fix bad index in DMI case 27 (cooling device).
+-
+-2002-10-14  Jean Delvare
+-
+-	* dmidecode.c: Fix typo in dmi_memory_array_location.
+-	* dmidecode.c: Replace Kbyte by kB in DMI case 16.
+-	* dmidecode.c: Add DDR entry in dmi_memory_device_type.
+-	* dmidecode.c: Fix extra s in SYSID.
+-
+-2002-10-12  Jean Delvare
+-
+-	* dmidecode.c: Fix maximum cache size and installed size being
+-	  inverted.
+-	* dmidecode.c: Fix typos in port types.
+-
+-2002-10-10  Jean Delvare
+-
+-	* dmidecode.c: Remove extra semicolon at the end of
+-	  dmi_memory_array_use.
+-	* dmidecode.c: Fix compilation warnings.
+-	* dmidecode.c: Add missing backslash in DMI case 37.
+-	* dmidecode.c: Fix BIOS ROM size (DMI case 0).
+-
+-2002-10-05  Jean Delvare
+-
+-	* dmidecode.c: More ACPI decoded.
+-	* dmidecode.c: More PNP decoded.
+-	* dmidecode.c: More SYSID decoded.
+-	* dmidecode.c: PCI Interrupt Routing decoded.
+-	* dmidecode.c: BIOS32 Service Directory decoded.
+-	* dmidecode.c: Sony system detection (unconfirmed).
+-	* dmidecode.c: Checksums verified whenever possible.
+-	* dmidecode.c: Better checks on file read and close.
+-	* dmidecode.c: Define VERSION and display version at beginning.
+-	* dmidecode.c: More secure decoding (won't run off the table in any
+-	  case).
+-	* dmidecode.c: Do not try to decode more structures than announced.
+-	* dmidecode.c: Fix an off-by-one error that caused the last address
+-	  being scanned to be 0x100000, not 0xFFFF0 as it should.
+-
+-2002-09-28  Jean Delvare
+-
+-	* dmidecode.c: Fix missing coma in dmi_bus_name.
+-	* dmidecode.c: Remove unwanted bitmaskings in dmi_mgmt_dev_type,
+-	  dmi_mgmt_addr_type, dmi_fan_type, dmi_volt_loc, dmi_temp_loc and
+-	  dmi_status.
+-	* dmidecode.c: Fix DMI table read bug ("dmi: read: Success").
+-	* dmidecode.c: Make the code pass -W again.
+-	* dmidecode.c: Fix return value of dmi_card_size.
+-
+-2002-09-20  Dave Johnson  <ddj@cascv.brown.edu>
+-
+-	* dmidecode.c: Fix comparisons in dmi_bus_name.
+-	* dmidecode.c: Fix comparison in dmi_processor_type.
+-	* dmidecode.c: Fix bitmasking in dmi_onboard_type.
+-	* dmidecode.c: Fix return value of dmi_temp_loc.
+-
+-2002-09-17  Larry Lile  <llile@dreamworks.com>
+-
+-	* dmidecode.c: Type 16 & 17 structures displayed per SMBIOS 2.3.1 spec.
+-
+-2002-08-23  Alan Cox  <alan@redhat.com>
+-
+-	* dmidecode.c: Make the code pass -Wall -pedantic by fixing a few
+-	  harmless sign of pointer mismatches.
+-	* dmidecode.c: Correct main() prototype.
+-	* dmidecode.c: Check for compilers with wrong type sizes.
+-
+-2002-08-09  Jean Delvare
+-
+-	* dmidecode.c: Better DMI struct count/size error display.
+-	* dmidecode.c: More careful memory access in dmi_table.
+-	* dmidecode.c: DMI case 13 (Language) decoded.
+-	* dmidecode.c: C++ style comments removed. Commented out code removed.
+-	* dmidecode.c: DMI 0.0 case handled.
+-	* dmideocde.c: Fix return value of dmi_port_type and
+-	  dmi_port_connector_type.
+-
+-2002-08-06  Jean Delvare
+-
+-	* dmidecode.c: Reposition file pointer after DMI table display.
+-	* dmidecode.c: Disable first RSD PTR checksum (was not correct anyway).
+-	* dmidecode.c: Show actual DMI struct count and occupied size.
+-	* dmidecode.c: Check for NULL after malloc.
+-	* dmidecode.c: Use SEEK_* constants instead of numeric values.
+-	* dmidecode.c: Code optimization (and warning fix) in DMI cases 10 and
+-	  14.
+-	* dmidecode.c: Add else's to avoid unneeded cascaded if's in main loop.
+-	* dmidecode.c: Code optimization in DMI information display.
+-	* dmidecode.c: Fix all compilation warnings.
+-
+-2002-08-03  Mark D. Studebaker  <mds@paradyne.com>
+-
+-	* dmidecode.c: Better indent in dump_raw_data.
+-	* dmidecode.c: Fix return value of dmi_bus_name.
+-	* dmidecode.c: Additional sensor fields decoded.
+-	* dmidecode.c: Fix compilation warnings.
+-
+-2001-12-13  Arjan van de Ven  <arjanv@redhat.com>
+-
+-	* dmidecode.c: Fix memory bank type (DMI case 6).
+-
+-2001-07-02  Matt Domsch  <Matt_Domsch@dell.com>
+-
+-	* dmidecode.c: Additional structures displayed per SMBIOS 2.3.1 spec.
+diff --git a/NEWS b/NEWS
+new file mode 100644
+index 0000000..827dafd
+--- /dev/null
++++ b/NEWS
+@@ -0,0 +1,123 @@
++Version 3.1 (Tue May 23 2017)
++  - Support for SMBIOS 3.1.0 and 3.1.1. This includes new chassis types, new
++    processor family names, new processor family upgrade names, and new slot
++    types, as well as support of larger BIOS ROM sizes and cache sizes, and a
++    new structure type (43, TPM Device.)
++  - A new command line option to query OEM strings.
++  - All error messages are now printed on stderr (#47274, #48158.)
++  - Several bug fixes related to 64-bit entry points (#50037 and more.)
++  - Important bug fixes:
++    #46176 (Unexpected end of file error)
++    #46066 (Crash with SIGBUS)
++  - Various minor fixes, improvements and cleanups.
++
++Version 3.0 (Thu Sep 03 2015)
++  - Support for SMBIOS 3.0. This includes new chassis types, new
++    processor family names, new processor family upgrade names, new slot
++    types, and new memory device types.
++  - Support for the new 64-bit entry point (_SM3_) defined in SMBIOS 3.0.
++  - Support for the new kernel interface (as of Linux v4.2) as an
++    alternative to relying /dev/mem to access the entry point and DMI
++    table.
++  - Decoding of Acer-specific DMI type 170.
++  - Decoding of HP-specific DMI types 212, 219 and 233.
++  - Various minor fixes and output format cleanups.
++
++Version 2.12 (Wed Apr 17 2013)
++  - Support of the SMBIOS 2.8.0 specification.
++
++Version 2.11 (Wed Jan 19 2011)
++  - Support of the SMBIOS 2.7.0 specification:
++    - UEFI support
++    - Virtual machine flags in BIOS characteristics
++    - Limited support for the Management Controller Host Interface
++  - Various fixes that address stability.
++
++Version 2.10 (Sun Nov 23 2008)
++  - Support for Solaris (x86 only, of course).
++  - Possibility to dump the SMBIOS/DMI table to a small binary file
++    (option --dump-bin).
++  - Possibility to read the SMBIOS/DMI table from such binary files
++    (option --from-dump).
++  - Support for SMBIOS 2.6. This includes new chassis types, new
++    processor family names, new processor family upgrade names, bus
++    address for system slots, and a new entry type for on-board devices,
++    amongst many other minor changes.
++  - Support for DMI entry type 31 (Boot integrity services).
++  - Many processor family names taken from the CIM Schema document.
++  - (vpddecode) No longer ask users to report broken records.
++  - (vpddecode) Fix --quiet option.
++
++Version 2.9 (Mon Feb 26 2007)
++  - Support of the SMBIOS 2.5 specification. It adds many enumerated
++    values for recent hardware, as well as CPU core and thread count
++    reporting.
++  - Decoding of 3 HP-specific entries. More vendor-specific entries can
++    be supported later if vendors contribute code or documentation.
++  - Run-time detection of EFI, so that a single binary can support
++    Intel-based Macintosh machines and regular x86 machines.
++  - Better IA-64 support.
++  - Fixes to the decoding of individual fields, including the CPU
++    signature of recent CPU models.
++  - (biosdecode) Support of the FJKEYINF entry point type (for Fujitsu laptops).
++  - (vpddecode) The product name look-up table was dropped. It was unreliable
++    and a burden to maintain.
++  - biosdecode, ownership and vpddecode are no longer built on IA-64.
++
++Version 2.8 (Sat Feb 04 2006)
++  - Option --string has four additional keywords available:
++    system-uuid, chassis-type, processor-family and processor-frequency.
++    These needed additional work because, technically speaking, they are
++    not DMI strings.
++  - IPMI interface type SSIF was added. This is a new interface type
++    defined by IPMI 2.0.
++  - (vpddecode) New --string option, much similar in spirit to
++    dmidecode's. Available keywords are bios-build-id, box-serial-number,
++    motherboard-serial-number, machine-type-model and bios-release-date.
++  - (vpddecode) 9 product names were added to the lookup table.
++  -  A few bug fixes, cleanups and minor improvements all around the place.
++
++Version 2.7 (Thu Aug 04 2005)
++  - New command line interface. For example, it is now possible to limit
++    the output of dmidecode to a given DMI type, or to extract a single
++    string from the DMI table. The documentation has been updated
++    accordingly.
++  - The default output of dmidecode was slightly modified to be more
++    easily readable by humans. This might break tools parsing its output.
++    Such tools may benefit from the new command line interface, although
++    this interface shouldn't be considered stable until version 2.8.
++  - (vpddecode) New command line interface.
++  - (vpddecode) 6 product names were added.
++
++Version 2.6 (Mon Feb 28 2005)
++  - Fixes a 2 GB memory limit regression.
++  - Basic command-line handling.
++  - BeOS and Cygwin support.
++
++Version 2.5 (Thu Nov 11 2004)
++  - Code cleanups.
++  - Compatibility fixes.
++  - Documentation updates.
++
++Version 2.4 (Fri Mar 19 2004)
++  - Manual pages added.
++  - (vpddecode) Many improvements.
++  - A few fixes and minor improvements.
++
++Version 2.3 (Sun Oct 19 2003)
++  - Support of x86_64 systems.
++  - Support of systems with 2 GB and more memory.
++  - Loads of bug fixes and corrections.
++  - New tool "vpddecode" added.
++
++Version 2.2 (Fri Aug 08 2003)
++  - Support of IA-64 systems.
++  - Support of IBM and Fujitsu-Siemens laptops.
++  - Many minor bug fixes.
++  - New tool "ownership" added.
++
++Version 2.1 (Tue Jun 10 2003)
++  - Support of the SMBIOS 2.3.4 specification.
++  - Better support of IPMI.
++  - Minor bugs fixed.
++  - Documentation added.
+-- 
+2.17.1
+
diff --git a/0005-Fix-install-doc-target.patch b/0005-Fix-install-doc-target.patch
new file mode 100644
index 0000000..e4a0ff8
--- /dev/null
+++ b/0005-Fix-install-doc-target.patch
@@ -0,0 +1,46 @@
+From 371056cc0345ba8e950f0c002a0e145a3930b39c Mon Sep 17 00:00:00 2001
+From: Jean Delvare <jdelvare@suse.de>
+Date: Mon, 17 Jul 2017 09:45:39 +0200
+Subject: [PATCH 05/21] Fix install-doc target
+
+CHANGELOG was replaced by NEWS but I forgot to update the references
+to that file.
+
+This fixes bug #51475:
+https://savannah.nongnu.org/bugs/?51475
+
+Fixes: 82a34ddbc524 ("Goodbye CHANGELOG, welcome NEWS")
+---
+ Makefile | 2 +-
+ README   | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 1f54a1f..77c9310 100644
+--- a/Makefile
++++ b/Makefile
+@@ -134,7 +134,7 @@ uninstall-man :
+ install-doc :
+ 	$(INSTALL_DIR) $(DESTDIR)$(docdir)
+ 	$(INSTALL_DATA) README $(DESTDIR)$(docdir)
+-	$(INSTALL_DATA) CHANGELOG $(DESTDIR)$(docdir)
++	$(INSTALL_DATA) NEWS $(DESTDIR)$(docdir)
+ 	$(INSTALL_DATA) AUTHORS $(DESTDIR)$(docdir)
+ 
+ uninstall-doc :
+diff --git a/README b/README
+index f612b36..c87e52c 100644
+--- a/README
++++ b/README
+@@ -56,7 +56,7 @@ Each tool has a manual page, found in the "man" subdirectory. Manual pages
+ are installed by "make install". See these manual pages for command line
+ interface details and tool specific information.
+ 
+-For an history of the changes made to dmidecode, see the CHANGELOG file.
++For an history of the changes made to dmidecode, see the NEWS file.
+ 
+ If you need help, your best chances are to visit the web page (see the
+ INSTALLATION section above) or to get in touch with the developers directly.
+-- 
+2.17.1
+
diff --git a/0006-biosdecode-Add-option-pir-full.patch b/0006-biosdecode-Add-option-pir-full.patch
new file mode 100644
index 0000000..04f4577
--- /dev/null
+++ b/0006-biosdecode-Add-option-pir-full.patch
@@ -0,0 +1,135 @@
+From 6486331cf66e35bcf01e1c15c4396af68b6eb4d4 Mon Sep 17 00:00:00 2001
+From: Jean Delvare <jdelvare@suse.de>
+Date: Tue, 25 Jul 2017 11:21:22 +0200
+Subject: [PATCH 06/21] biosdecode: Add option --pir full
+
+Add an option to decode the details of the PIR table.
+
+This implements support request #109339:
+https://savannah.nongnu.org/support/index.php?109339
+---
+ biosdecode.c     | 59 +++++++++++++++++++++++++++---------------------
+ man/biosdecode.8 |  3 +++
+ 2 files changed, 36 insertions(+), 26 deletions(-)
+
+diff --git a/biosdecode.c b/biosdecode.c
+index ad3d4bc..8293e61 100644
+--- a/biosdecode.c
++++ b/biosdecode.c
+@@ -73,12 +73,16 @@ struct opt
+ {
+ 	const char *devmem;
+ 	unsigned int flags;
++	unsigned char pir;
+ };
+ static struct opt opt;
+ 
+ #define FLAG_VERSION            (1 << 0)
+ #define FLAG_HELP               (1 << 1)
+ 
++#define PIR_SHORT               0
++#define PIR_FULL                1
++
+ struct bios_entry {
+ 	const char *anchor;
+ 	size_t anchor_len; /* computed */
+@@ -386,32 +390,29 @@ static int pir_decode(const u8 *p, size_t len)
+ 			i, p[(i + 1) * 16], p[(i + 1) * 16 + 1] >> 3);
+ 		pir_slot_number(p[(i + 1) * 16 + 14]);
+ 		printf("\n");
+-/*		printf("\tSlot Entry %u\n", i);
+-		printf("\t\tID: %02x:%02x\n",
+-			p[(i + 1) * 16], p[(i + 1) * 16 + 1] >> 3);
+-		printf("\t\tLink Value for INTA#: %u\n",
+-			p[(i + 1) * 16 + 2]);
+-		printf("\t\tIRQ Bitmap for INTA#:");
+-		pir_irqs(WORD(p + (i + 1) * 16 + 3));
+-		printf("\n");
+-		printf("\t\tLink Value for INTB#: %u\n",
+-			p[(i + 1) * 16 + 5]);
+-		printf("\t\tIRQ Bitmap for INTB#:");
+-		pir_irqs(WORD(p + (i + 1) * 16 + 6));
+-		printf("\n");
+-		printf("\t\tLink Value for INTC#: %u\n",
+-			p[(i + 1) * 16 + 8]);
+-		printf("\t\tIRQ Bitmap for INTC#:");
+-		pir_irqs(WORD(p + (i + 1) * 16 + 9));
+-		printf("\n");
+-		printf("\t\tLink Value for INTD#: %u\n",
+-			p[(i + 1) * 16 + 11]);
+-		printf("\t\tIRQ Bitmap for INTD#:");
+-		pir_irqs(WORD(p + (i + 1) * 16 + 12));
+-		printf("\n");
+-		printf("\t\tSlot Number:");
+-		pir_slot_number(p[(i + 1) * 16 + 14]);
+-		printf("\n");*/
++		if (opt.pir == PIR_FULL)
++		{
++			printf("\t\tLink Value for INTA#: %u\n",
++				p[(i + 1) * 16 + 2]);
++			printf("\t\tIRQ Bitmap for INTA#:");
++			pir_irqs(WORD(p + (i + 1) * 16 + 3));
++			printf("\n");
++			printf("\t\tLink Value for INTB#: %u\n",
++				p[(i + 1) * 16 + 5]);
++			printf("\t\tIRQ Bitmap for INTB#:");
++			pir_irqs(WORD(p + (i + 1) * 16 + 6));
++			printf("\n");
++			printf("\t\tLink Value for INTC#: %u\n",
++				p[(i + 1) * 16 + 8]);
++			printf("\t\tIRQ Bitmap for INTC#:");
++			pir_irqs(WORD(p + (i + 1) * 16 + 9));
++			printf("\n");
++			printf("\t\tLink Value for INTD#: %u\n",
++				p[(i + 1) * 16 + 11]);
++			printf("\t\tIRQ Bitmap for INTD#:");
++			pir_irqs(WORD(p + (i + 1) * 16 + 12));
++			printf("\n");
++		}
+ 	}
+ 
+ 	return 1;
+@@ -616,6 +617,7 @@ static int parse_command_line(int argc, char * const argv[])
+ 	const char *optstring = "d:hV";
+ 	struct option longopts[] = {
+ 		{ "dev-mem", required_argument, NULL, 'd' },
++		{ "pir", required_argument, NULL, 'P' },
+ 		{ "help", no_argument, NULL, 'h' },
+ 		{ "version", no_argument, NULL, 'V' },
+ 		{ NULL, 0, NULL, 0 }
+@@ -627,6 +629,10 @@ static int parse_command_line(int argc, char * const argv[])
+ 			case 'd':
+ 				opt.devmem = optarg;
+ 				break;
++			case 'P':
++				if (strcmp(optarg, "full") == 0)
++					opt.pir = PIR_FULL;
++				break;
+ 			case 'h':
+ 				opt.flags |= FLAG_HELP;
+ 				break;
+@@ -646,6 +652,7 @@ static void print_help(void)
+ 		"Usage: biosdecode [OPTIONS]\n"
+ 		"Options are:\n"
+ 		" -d, --dev-mem FILE     Read memory from device FILE (default: " DEFAULT_MEM_DEV ")\n"
++		"     --pir full         Decode the details of the PCI IRQ routing table\n"
+ 		" -h, --help             Display this help text and exit\n"
+ 		" -V, --version          Display the version and exit\n";
+ 
+diff --git a/man/biosdecode.8 b/man/biosdecode.8
+index c39d6a0..a96eb68 100644
+--- a/man/biosdecode.8
++++ b/man/biosdecode.8
+@@ -60,6 +60,9 @@ program.
+ .BR "-d" ", " "--dev-mem FILE"
+ Read memory from device \fBFILE\fR (default: \fB/dev/mem\fR)
+ .TP
++.BR "  " "  " "--pir full"
++Decode the details of the PCI IRQ routing table
++.TP
+ .BR "-h" ", " "--help"
+ Display usage information and exit
+ .TP
+-- 
+2.17.1
+
diff --git a/0007-biosdecode-Clean-up-the-PIR-table-output.patch b/0007-biosdecode-Clean-up-the-PIR-table-output.patch
new file mode 100644
index 0000000..7b6e399
--- /dev/null
+++ b/0007-biosdecode-Clean-up-the-PIR-table-output.patch
@@ -0,0 +1,95 @@
+From baeacaa7b9930badc074eaad3700b075ed9d622f Mon Sep 17 00:00:00 2001
+From: Jean Delvare <jdelvare@suse.de>
+Date: Tue, 25 Jul 2017 11:21:27 +0200
+Subject: [PATCH 07/21] biosdecode: Clean up the PIR table output
+
+* Remove entry numbers.
+* Use "Device" instead of "ID".
+* Put repeated code in a function.
+* Don't display unconnected links.
+* Shorten "slot number" to just "slot".
+---
+ biosdecode.c | 42 ++++++++++++++++++------------------------
+ 1 file changed, 18 insertions(+), 24 deletions(-)
+
+diff --git a/biosdecode.c b/biosdecode.c
+index 8293e61..b37e510 100644
+--- a/biosdecode.c
++++ b/biosdecode.c
+@@ -355,7 +355,7 @@ static void pir_slot_number(u8 code)
+ 	if (code == 0)
+ 		printf(" on-board");
+ 	else
+-		printf(" slot number %u", code);
++		printf(" slot %u", code);
+ }
+ 
+ static size_t pir_length(const u8 *p)
+@@ -363,6 +363,16 @@ static size_t pir_length(const u8 *p)
+ 	return WORD(p + 6);
+ }
+ 
++static void pir_link_bitmap(char letter, const u8 *p)
++{
++	if (p[0] == 0) /* Not connected */
++		return;
++
++	printf("\t\tINT%c#: Link 0x%02x, IRQ Bitmap", letter, p[0]);
++	pir_irqs(WORD(p + 1));
++	printf("\n");
++}
++
+ static int pir_decode(const u8 *p, size_t len)
+ {
+ 	int i;
+@@ -372,7 +382,7 @@ static int pir_decode(const u8 *p, size_t len)
+ 
+ 	printf("PCI Interrupt Routing %u.%u present.\n",
+ 		p[5], p[4]);
+-	printf("\tRouter ID: %02x:%02x.%1x\n",
++	printf("\tRouter Device: %02x:%02x.%1x\n",
+ 		p[8], p[9]>>3, p[9] & 0x07);
+ 	printf("\tExclusive IRQs:");
+ 	pir_irqs(WORD(p + 10));
+@@ -386,32 +396,16 @@ static int pir_decode(const u8 *p, size_t len)
+ 
+ 	for (i = 1; i <= (WORD(p + 6) - 32) / 16; i++)
+ 	{
+-		printf("\tSlot Entry %u: ID %02x:%02x,",
+-			i, p[(i + 1) * 16], p[(i + 1) * 16 + 1] >> 3);
++		printf("\tDevice: %02x:%02x,",
++			p[(i + 1) * 16], p[(i + 1) * 16 + 1] >> 3);
+ 		pir_slot_number(p[(i + 1) * 16 + 14]);
+ 		printf("\n");
+ 		if (opt.pir == PIR_FULL)
+ 		{
+-			printf("\t\tLink Value for INTA#: %u\n",
+-				p[(i + 1) * 16 + 2]);
+-			printf("\t\tIRQ Bitmap for INTA#:");
+-			pir_irqs(WORD(p + (i + 1) * 16 + 3));
+-			printf("\n");
+-			printf("\t\tLink Value for INTB#: %u\n",
+-				p[(i + 1) * 16 + 5]);
+-			printf("\t\tIRQ Bitmap for INTB#:");
+-			pir_irqs(WORD(p + (i + 1) * 16 + 6));
+-			printf("\n");
+-			printf("\t\tLink Value for INTC#: %u\n",
+-				p[(i + 1) * 16 + 8]);
+-			printf("\t\tIRQ Bitmap for INTC#:");
+-			pir_irqs(WORD(p + (i + 1) * 16 + 9));
+-			printf("\n");
+-			printf("\t\tLink Value for INTD#: %u\n",
+-				p[(i + 1) * 16 + 11]);
+-			printf("\t\tIRQ Bitmap for INTD#:");
+-			pir_irqs(WORD(p + (i + 1) * 16 + 12));
+-			printf("\n");
++			pir_link_bitmap('A', p + (i + 1) * 16 + 2);
++			pir_link_bitmap('B', p + (i + 1) * 16 + 5);
++			pir_link_bitmap('C', p + (i + 1) * 16 + 8);
++			pir_link_bitmap('D', p + (i + 1) * 16 + 11);
+ 		}
+ 	}
+ 
+-- 
+2.17.1
+
diff --git a/0008-biosdecode-Avoid-repeating-pointer-arithmetic.patch b/0008-biosdecode-Avoid-repeating-pointer-arithmetic.patch
new file mode 100644
index 0000000..f347511
--- /dev/null
+++ b/0008-biosdecode-Avoid-repeating-pointer-arithmetic.patch
@@ -0,0 +1,53 @@
+From 2b5c925d19e1eeecf6a24809396fed2774ee0695 Mon Sep 17 00:00:00 2001
+From: Jean Delvare <jdelvare@suse.de>
+Date: Tue, 25 Jul 2017 11:21:30 +0200
+Subject: [PATCH 08/21] biosdecode: Avoid repeating pointer arithmetic
+
+This makes the code both more efficient and more readable.
+---
+ biosdecode.c | 18 +++++++++---------
+ 1 file changed, 9 insertions(+), 9 deletions(-)
+
+diff --git a/biosdecode.c b/biosdecode.c
+index b37e510..99a27fe 100644
+--- a/biosdecode.c
++++ b/biosdecode.c
+@@ -375,7 +375,7 @@ static void pir_link_bitmap(char letter, const u8 *p)
+ 
+ static int pir_decode(const u8 *p, size_t len)
+ {
+-	int i;
++	int i, n;
+ 
+ 	if (len < 32 || !checksum(p, WORD(p + 6)))
+ 		return 0;
+@@ -394,18 +394,18 @@ static int pir_decode(const u8 *p, size_t len)
+ 		printf("\tMiniport Data: 0x%08X\n",
+ 			DWORD(p + 16));
+ 
+-	for (i = 1; i <= (WORD(p + 6) - 32) / 16; i++)
++	n = (len - 32) / 16;
++	for (i = 1, p += 32; i <= n; i++, p += 16)
+ 	{
+-		printf("\tDevice: %02x:%02x,",
+-			p[(i + 1) * 16], p[(i + 1) * 16 + 1] >> 3);
+-		pir_slot_number(p[(i + 1) * 16 + 14]);
++		printf("\tDevice: %02x:%02x,", p[0], p[1] >> 3);
++		pir_slot_number(p[14]);
+ 		printf("\n");
+ 		if (opt.pir == PIR_FULL)
+ 		{
+-			pir_link_bitmap('A', p + (i + 1) * 16 + 2);
+-			pir_link_bitmap('B', p + (i + 1) * 16 + 5);
+-			pir_link_bitmap('C', p + (i + 1) * 16 + 8);
+-			pir_link_bitmap('D', p + (i + 1) * 16 + 11);
++			pir_link_bitmap('A', p + 2);
++			pir_link_bitmap('B', p + 5);
++			pir_link_bitmap('C', p + 8);
++			pir_link_bitmap('D', p + 11);
+ 		}
+ 	}
+ 
+-- 
+2.17.1
+
diff --git a/0009-dmioem-Reflect-HPE-s-new-company-name.patch b/0009-dmioem-Reflect-HPE-s-new-company-name.patch
new file mode 100644
index 0000000..548c98d
--- /dev/null
+++ b/0009-dmioem-Reflect-HPE-s-new-company-name.patch
@@ -0,0 +1,141 @@
+From ee07a1b4249560d620d05194eb8ff61b40d3ce23 Mon Sep 17 00:00:00 2001
+From: Jerry Hoemann <jerry.hoemann@hpe.com>
+Date: Wed, 13 Sep 2017 15:54:22 -0600
+Subject: [PATCH 09/21] dmioem: Reflect HPE's new company name
+
+After Hewlett Packard Enterprise split from Hewlett-Packard, DMI OEM
+tables reflect the new company name.  Gen10 and subsequent systems will
+use HPE.  Gen9 and prior systems continue to use the old "HP" name.
+
+Signed-off-by: Jerry Hoemann <jerry.hoemann@hpe.com>
+Signed-off-by: Jean Delvare <jdelvare@suse.de>
+---
+ dmioem.c | 32 +++++++++++++++++++-------------
+ 1 file changed, 19 insertions(+), 13 deletions(-)
+
+diff --git a/dmioem.c b/dmioem.c
+index 034ad9f..a032344 100644
+--- a/dmioem.c
++++ b/dmioem.c
+@@ -35,6 +35,7 @@ enum DMI_VENDORS
+ 	VENDOR_UNKNOWN,
+ 	VENDOR_HP,
+ 	VENDOR_ACER,
++	VENDOR_HPE,
+ };
+ 
+ static enum DMI_VENDORS dmi_vendor = VENDOR_UNKNOWN;
+@@ -58,12 +59,14 @@ void dmi_set_vendor(const char *s)
+ 
+ 	if (strncmp(s, "HP", len) == 0 || strncmp(s, "Hewlett-Packard", len) == 0)
+ 		dmi_vendor = VENDOR_HP;
++	else if (strncmp(s, "HPE", len) == 0 || strncmp(s, "Hewlett Packard Enterprise", len) == 0)
++		dmi_vendor = VENDOR_HPE;
+ 	else if (strncmp(s, "Acer", len) == 0)
+ 		dmi_vendor = VENDOR_ACER;
+ }
+ 
+ /*
+- * HP-specific data structures are decoded here.
++ * HPE-specific data structures are decoded here.
+  *
+  * Code contributed by John Cagle and Tyler Bell.
+  */
+@@ -98,14 +101,15 @@ static int dmi_decode_hp(const struct dmi_header *h)
+ 	u8 *data = h->data;
+ 	int nic, ptr;
+ 	u32 feat;
++	const char *company = (dmi_vendor == VENDOR_HP) ? "HP" : "HPE";
+ 
+ 	switch (h->type)
+ 	{
+ 		case 204:
+ 			/*
+-			 * Vendor Specific: HP ProLiant System/Rack Locator
++			 * Vendor Specific: HPE ProLiant System/Rack Locator
+ 			 */
+-			printf("HP ProLiant System/Rack Locator\n");
++			printf("%s ProLiant System/Rack Locator\n", company);
+ 			if (h->length < 0x0B) break;
+ 			printf("\tRack Name: %s\n", dmi_string(h, data[0x04]));
+ 			printf("\tEnclosure Name: %s\n", dmi_string(h, data[0x05]));
+@@ -119,7 +123,7 @@ static int dmi_decode_hp(const struct dmi_header *h)
+ 		case 209:
+ 		case 221:
+ 			/*
+-			 * Vendor Specific: HP ProLiant NIC MAC Information
++			 * Vendor Specific: HPE ProLiant NIC MAC Information
+ 			 *
+ 			 * This prints the BIOS NIC number,
+ 			 * PCI bus/device/function, and MAC address
+@@ -137,9 +141,10 @@ static int dmi_decode_hp(const struct dmi_header *h)
+ 			 *
+ 			 * Type 221: is deprecated in the latest docs
+ 			 */
+-			printf(h->type == 221 ?
+-				"HP BIOS iSCSI NIC PCI and MAC Information\n" :
+-				"HP BIOS PXE NIC PCI and MAC Information\n");
++			printf("%s %s\n", company,
++				h->type == 221 ?
++					"BIOS iSCSI NIC PCI and MAC Information" :
++					"BIOS PXE NIC PCI and MAC Information");
+ 			nic = 1;
+ 			ptr = 4;
+ 			while (h->length >= ptr + 8)
+@@ -155,7 +160,7 @@ static int dmi_decode_hp(const struct dmi_header *h)
+ 
+ 		case 233:
+ 			/*
+-			 * Vendor Specific: HP ProLiant NIC MAC Information
++			 * Vendor Specific: HPE ProLiant NIC MAC Information
+ 			 *
+ 			 * This prints the BIOS NIC number,
+ 			 * PCI bus/device/function, and MAC address
+@@ -171,7 +176,7 @@ static int dmi_decode_hp(const struct dmi_header *h)
+ 			 *  0x08  |   MAC  | 32B   | MAC addr padded w/ 0s
+ 			 *  0x28  | Port No| BYTE  | Each NIC maps to a Port
+ 			 */
+-			printf("HP BIOS PXE NIC PCI and MAC Information\n");
++			printf("%s BIOS PXE NIC PCI and MAC Information\n", company);
+ 			if (h->length < 0x0E) break;
+ 			/* If the record isn't long enough, we don't have an ID
+ 			 * use 0xFF to use the internal counter.
+@@ -183,11 +188,11 @@ static int dmi_decode_hp(const struct dmi_header *h)
+ 
+ 		case 212:
+ 			/*
+-			 * Vendor Specific: HP 64-bit CRU Information
++			 * Vendor Specific: HPE 64-bit CRU Information
+ 			 *
+ 			 * Source: hpwdt kernel driver
+ 			 */
+-			printf("HP 64-bit CRU Information\n");
++			printf("%s 64-bit CRU Information\n", company);
+ 			if (h->length < 0x18) break;
+ 			printf("\tSignature: 0x%08x", DWORD(data + 0x04));
+ 			if (is_printable(data + 0x04, 4))
+@@ -208,11 +213,11 @@ static int dmi_decode_hp(const struct dmi_header *h)
+ 
+ 		case 219:
+ 			/*
+-			 * Vendor Specific: HP ProLiant Information
++			 * Vendor Specific: HPE ProLiant Information
+ 			 *
+ 			 * Source: hpwdt kernel driver
+ 			 */
+-			printf("HP ProLiant Information\n");
++			printf("%s ProLiant Information\n", company);
+ 			if (h->length < 0x08) break;
+ 			printf("\tPower Features: 0x%08x\n", DWORD(data + 0x04));
+ 			if (h->length < 0x0C) break;
+@@ -281,6 +286,7 @@ int dmi_decode_oem(const struct dmi_header *h)
+ 	switch (dmi_vendor)
+ 	{
+ 		case VENDOR_HP:
++		case VENDOR_HPE:
+ 			return dmi_decode_hp(h);
+ 		case VENDOR_ACER:
+ 			return dmi_decode_acer(h);
+-- 
+2.17.1
+
diff --git a/0010-dmioem-Sort-vendor-names-alphabetically.patch b/0010-dmioem-Sort-vendor-names-alphabetically.patch
new file mode 100644
index 0000000..0abdca3
--- /dev/null
+++ b/0010-dmioem-Sort-vendor-names-alphabetically.patch
@@ -0,0 +1,134 @@
+From 6517fa7c8c8a74a9eae9e6192de316ef8952f2a8 Mon Sep 17 00:00:00 2001
+From: Jean Delvare <jdelvare@suse.de>
+Date: Thu, 14 Sep 2017 10:08:10 +0200
+Subject: [PATCH 10/21] dmioem: Sort vendor names alphabetically
+
+Signed-off-by: Jean Delvare <jdelvare@suse.de>
+---
+ dmioem.c | 92 ++++++++++++++++++++++++++++----------------------------
+ 1 file changed, 46 insertions(+), 46 deletions(-)
+
+diff --git a/dmioem.c b/dmioem.c
+index a032344..8a72ac9 100644
+--- a/dmioem.c
++++ b/dmioem.c
+@@ -33,8 +33,8 @@
+ enum DMI_VENDORS
+ {
+ 	VENDOR_UNKNOWN,
+-	VENDOR_HP,
+ 	VENDOR_ACER,
++	VENDOR_HP,
+ 	VENDOR_HPE,
+ };
+ 
+@@ -57,12 +57,54 @@ void dmi_set_vendor(const char *s)
+ 	while (len && s[len - 1] == ' ')
+ 		len--;
+ 
+-	if (strncmp(s, "HP", len) == 0 || strncmp(s, "Hewlett-Packard", len) == 0)
++	if (strncmp(s, "Acer", len) == 0)
++		dmi_vendor = VENDOR_ACER;
++	else if (strncmp(s, "HP", len) == 0 || strncmp(s, "Hewlett-Packard", len) == 0)
+ 		dmi_vendor = VENDOR_HP;
+ 	else if (strncmp(s, "HPE", len) == 0 || strncmp(s, "Hewlett Packard Enterprise", len) == 0)
+ 		dmi_vendor = VENDOR_HPE;
+-	else if (strncmp(s, "Acer", len) == 0)
+-		dmi_vendor = VENDOR_ACER;
++}
++
++/*
++ * Acer-specific data structures are decoded here.
++ */
++
++static int dmi_decode_acer(const struct dmi_header *h)
++{
++	u8 *data = h->data;
++	u16 cap;
++
++	switch (h->type)
++	{
++		case 170:
++			/*
++			 * Vendor Specific: Acer Hotkey Function
++			 *
++			 * Source: acer-wmi kernel driver
++			 *
++			 * Probably applies to some laptop models of other
++			 * brands, including Fujitsu-Siemens, Medion, Lenovo,
++			 * and eMachines.
++			 */
++			printf("Acer Hotkey Function\n");
++			if (h->length < 0x0F) break;
++			cap = WORD(data + 0x04);
++			printf("\tFunction bitmap for Communication Button: 0x%04hx\n", cap);
++			printf("\t\tWiFi: %s\n", cap & 0x0001 ? "Yes" : "No");
++			printf("\t\t3G: %s\n", cap & 0x0040 ? "Yes" : "No");
++			printf("\t\tWiMAX: %s\n", cap & 0x0080 ? "Yes" : "No");
++			printf("\t\tBluetooth: %s\n", cap & 0x0800 ? "Yes" : "No");
++			printf("\tFunction bitmap for Application Button: 0x%04hx\n", WORD(data + 0x06));
++			printf("\tFunction bitmap for Media Button: 0x%04hx\n", WORD(data + 0x08));
++			printf("\tFunction bitmap for Display Button: 0x%04hx\n", WORD(data + 0x0A));
++			printf("\tFunction bitmap for Others Button: 0x%04hx\n", WORD(data + 0x0C));
++			printf("\tCommunication Function Key Number: %d\n", data[0x0E]);
++			break;
++
++		default:
++			return 0;
++	}
++	return 1;
+ }
+ 
+ /*
+@@ -235,48 +277,6 @@ static int dmi_decode_hp(const struct dmi_header *h)
+ 	return 1;
+ }
+ 
+-/*
+- * Acer-specific data structures are decoded here.
+- */
+-
+-static int dmi_decode_acer(const struct dmi_header *h)
+-{
+-	u8 *data = h->data;
+-	u16 cap;
+-
+-	switch (h->type)
+-	{
+-		case 170:
+-			/*
+-			 * Vendor Specific: Acer Hotkey Function
+-			 *
+-			 * Source: acer-wmi kernel driver
+-			 *
+-			 * Probably applies to some laptop models of other
+-			 * brands, including Fujitsu-Siemens, Medion, Lenovo,
+-			 * and eMachines.
+-			 */
+-			printf("Acer Hotkey Function\n");
+-			if (h->length < 0x0F) break;
+-			cap = WORD(data + 0x04);
+-			printf("\tFunction bitmap for Communication Button: 0x%04hx\n", cap);
+-			printf("\t\tWiFi: %s\n", cap & 0x0001 ? "Yes" : "No");
+-			printf("\t\t3G: %s\n", cap & 0x0040 ? "Yes" : "No");
+-			printf("\t\tWiMAX: %s\n", cap & 0x0080 ? "Yes" : "No");
+-			printf("\t\tBluetooth: %s\n", cap & 0x0800 ? "Yes" : "No");
+-			printf("\tFunction bitmap for Application Button: 0x%04hx\n", WORD(data + 0x06));
+-			printf("\tFunction bitmap for Media Button: 0x%04hx\n", WORD(data + 0x08));
+-			printf("\tFunction bitmap for Display Button: 0x%04hx\n", WORD(data + 0x0A));
+-			printf("\tFunction bitmap for Others Button: 0x%04hx\n", WORD(data + 0x0C));
+-			printf("\tCommunication Function Key Number: %d\n", data[0x0E]);
+-			break;
+-
+-		default:
+-			return 0;
+-	}
+-	return 1;
+-}
+-
+ /*
+  * Dispatch vendor-specific entries decoding
+  * Return 1 if decoding was successful, 0 otherwise
+-- 
+2.17.1
+
diff --git a/0011-UEFI-support-on-FreeBSD.patch b/0011-UEFI-support-on-FreeBSD.patch
new file mode 100644
index 0000000..1997855
--- /dev/null
+++ b/0011-UEFI-support-on-FreeBSD.patch
@@ -0,0 +1,89 @@
+From e629bccb2ced5f9e52e142bd841d310434975c63 Mon Sep 17 00:00:00 2001
+From: Alexey Dokuchaev <danfe@nsu.ru>
+Date: Thu, 30 Nov 2017 16:27:48 +0100
+Subject: [PATCH 11/21] UEFI support on FreeBSD
+
+Currently, dmidecode(8) does not work on FreeBSD booted in UEFI mode.
+Previously it was understandable, since there are no things like Linuxish
+/proc/efi/systab or /sys/firmware/efi/systab to read from under FreeBSD.
+
+However, 7 months ago, ambrisko@ had added support for exposing the SMBIOS
+anchor base address via kernel environment:
+
+    https://svnweb.freebsd.org/base?view=revision&revision=307326
+
+I've patched dmidecode.c to try to get the address from hint.smbios.0.mem
+and fall back to traditional address space scanning.  I've tested it both
+on EFI (amd64 laptop) and non-EFI (i386 desktop) machines.
+---
+ dmidecode.c | 33 +++++++++++++++++++++++++++++++++
+ 1 file changed, 33 insertions(+)
+
+diff --git a/dmidecode.c b/dmidecode.c
+index 6559567..aadef75 100644
+--- a/dmidecode.c
++++ b/dmidecode.c
+@@ -64,6 +64,11 @@
+ #include <stdlib.h>
+ #include <unistd.h>
+ 
++#ifdef __FreeBSD__
++#include <errno.h>
++#include <kenv.h>
++#endif
++
+ #include "version.h"
+ #include "config.h"
+ #include "types.h"
+@@ -4934,13 +4939,18 @@ static int legacy_decode(u8 *buf, const char *devmem, u32 flags)
+ #define EFI_NO_SMBIOS   (-2)
+ static int address_from_efi(off_t *address)
+ {
++#if defined(__linux__)
+ 	FILE *efi_systab;
+ 	const char *filename;
+ 	char linebuf[64];
++#elif defined(__FreeBSD__)
++	char addrstr[KENV_MVALLEN + 1];
++#endif
+ 	int ret;
+ 
+ 	*address = 0; /* Prevent compiler warning */
+ 
++#if defined(__linux__)
+ 	/*
+ 	 * Linux up to 2.6.6: /proc/efi/systab
+ 	 * Linux 2.6.7 and up: /sys/firmware/efi/systab
+@@ -4972,6 +4982,29 @@ static int address_from_efi(off_t *address)
+ 
+ 	if (ret == EFI_NO_SMBIOS)
+ 		fprintf(stderr, "%s: SMBIOS entry point missing\n", filename);
++#elif defined(__FreeBSD__)
++	/*
++	 * On FreeBSD, SMBIOS anchor base address in UEFI mode is exposed
++	 * via kernel environment:
++	 * https://svnweb.freebsd.org/base?view=revision&revision=307326
++	 */
++	ret = kenv(KENV_GET, "hint.smbios.0.mem", addrstr, sizeof(addrstr));
++	if (ret == -1)
++	{
++		if (errno != ENOENT)
++			perror("kenv");
++		return EFI_NOT_FOUND;
++	}
++
++	*address = strtoull(addrstr, NULL, 0);
++	if (!(opt.flags & FLAG_QUIET))
++		printf("# SMBIOS entry point at 0x%08llx\n",
++		    (unsigned long long)*address);
++
++	ret = 0;
++#else
++	ret = EFI_NOT_FOUND;
++#endif
+ 	return ret;
+ }
+ 
+-- 
+2.17.1
+
diff --git a/0012-dmidecode-Share-common-EFI-code.patch b/0012-dmidecode-Share-common-EFI-code.patch
new file mode 100644
index 0000000..af737e7
--- /dev/null
+++ b/0012-dmidecode-Share-common-EFI-code.patch
@@ -0,0 +1,57 @@
+From 97d23fb9a642574ef4415e71e4a01387d06744d6 Mon Sep 17 00:00:00 2001
+From: Jean Delvare <jdelvare@suse.de>
+Date: Thu, 30 Nov 2017 16:27:56 +0100
+Subject: [PATCH 12/21] dmidecode: Share common EFI code
+
+Avoid duplicating code between OS-specific paths.
+---
+ dmidecode.c | 15 ++++++++-------
+ 1 file changed, 8 insertions(+), 7 deletions(-)
+
+diff --git a/dmidecode.c b/dmidecode.c
+index aadef75..87faaa9 100644
+--- a/dmidecode.c
++++ b/dmidecode.c
+@@ -4946,6 +4946,7 @@ static int address_from_efi(off_t *address)
+ #elif defined(__FreeBSD__)
+ 	char addrstr[KENV_MVALLEN + 1];
+ #endif
++	const char *eptype;
+ 	int ret;
+ 
+ 	*address = 0; /* Prevent compiler warning */
+@@ -4970,9 +4971,7 @@ static int address_from_efi(off_t *address)
+ 		 || strcmp(linebuf, "SMBIOS") == 0)
+ 		{
+ 			*address = strtoull(addrp, NULL, 0);
+-			if (!(opt.flags & FLAG_QUIET))
+-				printf("# %s entry point at 0x%08llx\n",
+-				       linebuf, (unsigned long long)*address);
++			eptype = linebuf;
+ 			ret = 0;
+ 			break;
+ 		}
+@@ -4997,14 +4996,16 @@ static int address_from_efi(off_t *address)
+ 	}
+ 
+ 	*address = strtoull(addrstr, NULL, 0);
+-	if (!(opt.flags & FLAG_QUIET))
+-		printf("# SMBIOS entry point at 0x%08llx\n",
+-		    (unsigned long long)*address);
+-
++	eptype = "SMBIOS";
+ 	ret = 0;
+ #else
+ 	ret = EFI_NOT_FOUND;
+ #endif
++
++	if (ret == 0 && !(opt.flags & FLAG_QUIET))
++		printf("# %s entry point at 0x%08llx\n",
++		       eptype, (unsigned long long)*address);
++
+ 	return ret;
+ }
+ 
+-- 
+2.17.1
+
diff --git a/0013-dmidecode-Fix-firmware-version-of-TPM-device.patch b/0013-dmidecode-Fix-firmware-version-of-TPM-device.patch
new file mode 100644
index 0000000..cf9a621
--- /dev/null
+++ b/0013-dmidecode-Fix-firmware-version-of-TPM-device.patch
@@ -0,0 +1,30 @@
+From 174387405e98cd94c627832ae23abcb9be7e5623 Mon Sep 17 00:00:00 2001
+From: Jean Delvare <jdelvare@suse.de>
+Date: Wed, 31 Jan 2018 18:52:47 +0100
+Subject: [PATCH 13/21] dmidecode: Fix firmware version of TPM device
+
+Both the operator (detected by clang, reported by Xorg) and the mask
+for the minor firmware version field of TPM devices were wrong.
+
+Signed-off-by: Jean Delvare <jdelvare@suse.de>
+Fixes: 48a8132058a0 ("dmidecode: Add support for structure type 43 (TPM Device)")
+---
+ dmidecode.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/dmidecode.c b/dmidecode.c
+index 87faaa9..a593170 100644
+--- a/dmidecode.c
++++ b/dmidecode.c
+@@ -4511,7 +4511,7 @@ static void dmi_decode(const struct dmi_header *h, u16 ver)
+ 				case 0x02:
+ 					printf("\tFirmware Revision: %u.%u\n",
+ 						DWORD(data + 0x0A) >> 16,
+-						DWORD(data + 0x0A) && 0xFF);
++						DWORD(data + 0x0A) & 0xFFFF);
+ 					/*
+ 					 * We skip the next 4 bytes, as their
+ 					 * format is not standardized and their
+-- 
+2.17.1
+
diff --git a/0014-dmioem-decode-HPE-UEFI-type-219-Misc-Features.patch b/0014-dmioem-decode-HPE-UEFI-type-219-Misc-Features.patch
new file mode 100644
index 0000000..4ba9d41
--- /dev/null
+++ b/0014-dmioem-decode-HPE-UEFI-type-219-Misc-Features.patch
@@ -0,0 +1,36 @@
+From 2ba4fab210e23cc97db57217af9a6f3b35a9b666 Mon Sep 17 00:00:00 2001
+From: Jerry Hoemann <jerry.hoemann@hpe.com>
+Date: Wed, 11 Apr 2018 14:33:20 +0200
+Subject: [PATCH 14/21] dmioem: decode HPE UEFI type 219 Misc Features
+
+The incorrect "Misc Feature" bit in type 219 table was being used to
+identify that the platform is capable of booting with UEFI.
+
+For corresponding kernel change please see:
+
+	commit(c42cbe41727a)
+
+in linux.
+
+Signed-off-by: Jerry Hoemann <jerry.hoemann@hpe.com>
+Signed-off-by: Jean Delvare <jdelvare@suse.de>
+---
+ dmioem.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/dmioem.c b/dmioem.c
+index 8a72ac9..1742330 100644
+--- a/dmioem.c
++++ b/dmioem.c
+@@ -268,7 +268,7 @@ static int dmi_decode_hp(const struct dmi_header *h)
+ 			feat = DWORD(data + 0x10);
+ 			printf("\tMisc. Features: 0x%08x\n", feat);
+ 			printf("\t\tiCRU: %s\n", feat & 0x0001 ? "Yes" : "No");
+-			printf("\t\tUEFI: %s\n", feat & 0x0408 ? "Yes" : "No");
++			printf("\t\tUEFI: %s\n", feat & 0x1400 ? "Yes" : "No");
+ 			break;
+ 
+ 		default:
+-- 
+2.17.1
+
diff --git a/0015-dmidecode-Use-lowercase-letters-for-UUID.patch b/0015-dmidecode-Use-lowercase-letters-for-UUID.patch
new file mode 100644
index 0000000..ed1ba0b
--- /dev/null
+++ b/0015-dmidecode-Use-lowercase-letters-for-UUID.patch
@@ -0,0 +1,35 @@
+From aec83995082070c47edf394c4b7f9f17fea7fd16 Mon Sep 17 00:00:00 2001
+From: Jean Delvare <jdelvare@suse.de>
+Date: Mon, 16 Apr 2018 09:42:25 +0200
+Subject: [PATCH 15/21] dmidecode: Use lowercase letters for UUID
+
+RFC 4122 asks for letters a-f in UUID to be lowercase. Follow this
+recommendation.
+
+This closes bug #53569:
+https://savannah.nongnu.org/bugs/index.php?53569
+---
+ dmidecode.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/dmidecode.c b/dmidecode.c
+index a593170..d18a258 100644
+--- a/dmidecode.c
++++ b/dmidecode.c
+@@ -445,11 +445,11 @@ static void dmi_system_uuid(const u8 *p, u16 ver)
+ 	 * for older versions.
+ 	 */
+ 	if (ver >= 0x0206)
+-		printf("%02X%02X%02X%02X-%02X%02X-%02X%02X-%02X%02X-%02X%02X%02X%02X%02X%02X",
++		printf("%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x",
+ 			p[3], p[2], p[1], p[0], p[5], p[4], p[7], p[6],
+ 			p[8], p[9], p[10], p[11], p[12], p[13], p[14], p[15]);
+ 	else
+-		printf("%02X%02X%02X%02X-%02X%02X-%02X%02X-%02X%02X-%02X%02X%02X%02X%02X%02X",
++		printf("%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x",
+ 			p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7],
+ 			p[8], p[9], p[10], p[11], p[12], p[13], p[14], p[15]);
+ }
+-- 
+2.17.1
+
diff --git a/0016-dmidecode-Extensions-to-Memory-Device-Type-17.patch b/0016-dmidecode-Extensions-to-Memory-Device-Type-17.patch
new file mode 100644
index 0000000..69807af
--- /dev/null
+++ b/0016-dmidecode-Extensions-to-Memory-Device-Type-17.patch
@@ -0,0 +1,145 @@
+From 29e626f6ed3edb72ebd2ca3fe0e1fbd956ab71a1 Mon Sep 17 00:00:00 2001
+From: Jerry Hoemann <jerry.hoemann@hpe.com>
+Date: Wed, 20 Jun 2018 09:51:53 +0200
+Subject: [PATCH 16/21] dmidecode: Extensions to Memory Device (Type 17)
+
+The DSP0134 v3.2.0 extended the Memory Device (Type 17) structure
+starting at offset 28h continuing to 4Ch to reflect persistent memory.
+
+Signed-off-by: Jerry Hoemann <jerry.hoemann@hpe.com>
+Signed-off-by: Jean Delvare <jdelvare@suse.de>
+---
+ dmidecode.c | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 110 insertions(+)
+
+diff --git a/dmidecode.c b/dmidecode.c
+index d18a258..f8c3b30 100644
+--- a/dmidecode.c
++++ b/dmidecode.c
+@@ -2507,6 +2507,79 @@ static void dmi_memory_device_speed(u16 code)
+ 		printf(" %u MT/s", code);
+ }
+ 
++static void dmi_memory_technology(u8 code)
++{
++	/* 7.18.6 */
++	static const char * const technology[] = {
++		"Other", /* 0x01 */
++		"Unknown",
++		"DRAM",
++		"NVDIMM-N",
++		"NVDIMM-F",
++		"NVDIMM-P",
++		"Intel persistent memory" /* 0x07 */
++	};
++	if (code >= 0x01 && code <= 0x07)
++		printf(" %s", technology[code - 0x01]);
++	else
++		printf(" %s", out_of_spec);
++}
++
++static void dmi_memory_operating_mode_capability(u16 code)
++{
++	/* 7.18.7 */
++	static const char * const mode[] = {
++		"Other", /* 1 */
++		"Unknown",
++		"Volatile memory",
++		"Byte-accessible persistent memory",
++		"Block-accessible persistent memory" /* 5 */
++	};
++
++	if ((code & 0xFFFE) == 0)
++		printf(" None");
++	else {
++		int i;
++
++		for (i = 1; i <= 5; i++)
++			if (code & (1 << i))
++				printf(" %s", mode[i - 1]);
++	}
++}
++
++static void dmi_memory_manufacturer_id(u16 code)
++{
++	/* 7.18.8 */
++	/* 7.18.10 */
++	/* LSB is 7-bit Odd Parity number of continuation codes */
++	if (code == 0)
++		printf(" Unknown");
++	else
++		printf(" Bank %d, Hex 0x%02X", (code & 0x7F) + 1, code >> 8);
++}
++
++static void dmi_memory_product_id(u16 code)
++{
++	/* 7.18.9 */
++	/* 7.18.11 */
++	if (code == 0)
++		printf(" Unknown");
++	else
++		printf(" 0x%04X", code);
++}
++
++static void dmi_memory_size(u64 code)
++{
++	/* 7.18.12 */
++	/* 7.18.13 */
++	if (code.h == 0xFFFFFFFF && code.l == 0xFFFFFFFF)
++		printf(" Unknown");
++	else if (code.h == 0x0 && code.l == 0x0)
++		printf(" None");
++	else
++		dmi_print_memory_size(code, 0);
++}
++
+ /*
+  * 7.19 32-bit Memory Error Information (Type 18)
+  */
+@@ -3907,6 +3980,43 @@ static void dmi_decode(const struct dmi_header *h, u16 ver)
+ 			printf("\tConfigured Voltage:");
+ 			dmi_memory_voltage_value(WORD(data + 0x26));
+ 			printf("\n");
++			if (h->length < 0x34) break;
++			printf("\tMemory Technology:");
++			dmi_memory_technology(data[0x28]);
++			printf("\n");
++			printf("\tMemory Operating Mode Capability:");
++			dmi_memory_operating_mode_capability(WORD(data + 0x29));
++			printf("\n");
++			printf("\tFirmware Version: %s\n",
++				dmi_string(h, data[0x2B]));
++			printf("\tModule Manufacturer ID:");
++			dmi_memory_manufacturer_id(WORD(data + 0x2C));
++			printf("\n");
++			printf("\tModule Product ID:");
++			dmi_memory_product_id(WORD(data + 0x2E));
++			printf("\n");
++			printf("\tMemory Subsystem Controller Manufacturer ID:");
++			dmi_memory_manufacturer_id(WORD(data + 0x30));
++			printf("\n");
++			printf("\tMemory Subsystem Controller Product ID:");
++			dmi_memory_product_id(WORD(data + 0x32));
++			printf("\n");
++			if (h->length < 0x3C) break;
++			printf("\tNon-Volatile Size:");
++			dmi_memory_size(QWORD(data + 0x34));
++			printf("\n");
++			if (h->length < 0x44) break;
++			printf("\tVolatile Size:");
++			dmi_memory_size(QWORD(data + 0x3C));
++			printf("\n");
++			if (h->length < 0x4C) break;
++			printf("\tCache Size:");
++			dmi_memory_size(QWORD(data + 0x44));
++			printf("\n");
++			if (h->length < 0x54) break;
++			printf("\tLogical Size:");
++			dmi_memory_size(QWORD(data + 0x4C));
++			printf("\n");
+ 			break;
+ 
+ 		case 18: /* 7.19 32-bit Memory Error Information */
+-- 
+2.17.1
+
diff --git a/0017-dmidecode-Add-option-to-filter-output-based-upon-han.patch b/0017-dmidecode-Add-option-to-filter-output-based-upon-han.patch
new file mode 100644
index 0000000..7de6c89
--- /dev/null
+++ b/0017-dmidecode-Add-option-to-filter-output-based-upon-han.patch
@@ -0,0 +1,141 @@
+From a40f10bcae68caf6fd00379c06f92f34ba5c8d07 Mon Sep 17 00:00:00 2001
+From: Jerry Hoemann <jerry.hoemann@hpe.com>
+Date: Tue, 3 Jul 2018 09:55:57 +0200
+Subject: [PATCH 17/21] dmidecode: Add option to filter output based upon
+ handle
+
+Add option "--handle HANDLE" to dmiopt to allow user to filter
+output to only those entry that matches HANDLE.
+
+Signed-off-by: Jerry Hoemann <jerry.hoemann@hpe.com>
+Signed-off-by: Jean Delvare <jdelvare@suse.de>
+---
+ dmidecode.c     |  2 ++
+ dmiopt.c        | 26 +++++++++++++++++++++++---
+ dmiopt.h        |  1 +
+ man/dmidecode.8 |  4 ++++
+ 4 files changed, 30 insertions(+), 3 deletions(-)
+
+diff --git a/dmidecode.c b/dmidecode.c
+index f8c3b30..fa6ecf1 100644
+--- a/dmidecode.c
++++ b/dmidecode.c
+@@ -4732,6 +4732,7 @@ static void dmi_table_decode(u8 *buf, u32 len, u16 num, u16 ver, u32 flags)
+ 
+ 		to_dmi_header(&h, data);
+ 		display = ((opt.type == NULL || opt.type[h.type])
++			&& (opt.handle == ~0U || opt.handle == h.handle)
+ 			&& !((opt.flags & FLAG_QUIET) && (h.type == 126 || h.type == 127))
+ 			&& !opt.string);
+ 
+@@ -5144,6 +5145,7 @@ int main(int argc, char * const argv[])
+ 	/* Set default option values */
+ 	opt.devmem = DEFAULT_MEM_DEV;
+ 	opt.flags = 0;
++	opt.handle = ~0U;
+ 
+ 	if (parse_command_line(argc, argv)<0)
+ 	{
+diff --git a/dmiopt.c b/dmiopt.c
+index a36cf16..1531ddf 100644
+--- a/dmiopt.c
++++ b/dmiopt.c
+@@ -240,6 +240,19 @@ static int parse_opt_oem_string(const char *arg)
+ 	return 0;
+ }
+ 
++static u32 parse_opt_handle(const char *arg)
++{
++	u32 val;
++	char *next;
++
++	val = strtoul(arg, &next, 0);
++	if (next == arg || *next != '\0' || val > 0xffff)
++	{
++		fprintf(stderr, "Invalid handle number: %s\n", arg);
++		return ~0;
++	}
++	return val;
++}
+ 
+ /*
+  * Command line options handling
+@@ -249,7 +262,7 @@ static int parse_opt_oem_string(const char *arg)
+ int parse_command_line(int argc, char * const argv[])
+ {
+ 	int option;
+-	const char *optstring = "d:hqs:t:uV";
++	const char *optstring = "d:hqs:t:uH:V";
+ 	struct option longopts[] = {
+ 		{ "dev-mem", required_argument, NULL, 'd' },
+ 		{ "help", no_argument, NULL, 'h' },
+@@ -259,6 +272,7 @@ int parse_command_line(int argc, char * const argv[])
+ 		{ "dump", no_argument, NULL, 'u' },
+ 		{ "dump-bin", required_argument, NULL, 'B' },
+ 		{ "from-dump", required_argument, NULL, 'F' },
++		{ "handle", required_argument, NULL, 'H' },
+ 		{ "oem-string", required_argument, NULL, 'O' },
+ 		{ "no-sysfs", no_argument, NULL, 'S' },
+ 		{ "version", no_argument, NULL, 'V' },
+@@ -300,6 +314,11 @@ int parse_command_line(int argc, char * const argv[])
+ 				if (opt.type == NULL)
+ 					return -1;
+ 				break;
++			case 'H':
++				opt.handle = parse_opt_handle(optarg);
++				if (opt.handle  == ~0U)
++					return -1;
++				break;
+ 			case 'u':
+ 				opt.flags |= FLAG_DUMP;
+ 				break;
+@@ -326,9 +345,9 @@ int parse_command_line(int argc, char * const argv[])
+ 
+ 	/* Check for mutually exclusive output format options */
+ 	if ((opt.string != NULL) + (opt.type != NULL)
+-	  + !!(opt.flags & FLAG_DUMP_BIN) > 1)
++	  + !!(opt.flags & FLAG_DUMP_BIN) + (opt.handle != ~0U) > 1)
+ 	{
+-		fprintf(stderr, "Options --string, --type and --dump-bin are mutually exclusive\n");
++		fprintf(stderr, "Options --string, --type, --handle and --dump-bin are mutually exclusive\n");
+ 		return -1;
+ 	}
+ 
+@@ -351,6 +370,7 @@ void print_help(void)
+ 		" -q, --quiet            Less verbose output\n"
+ 		" -s, --string KEYWORD   Only display the value of the given DMI string\n"
+ 		" -t, --type TYPE        Only display the entries of given type\n"
++		" -H, --handle HANDLE    Only display the entry of given handle\n"
+ 		" -u, --dump             Do not decode the entries\n"
+ 		"     --dump-bin FILE    Dump the DMI data to a binary file\n"
+ 		"     --from-dump FILE   Read the DMI data from a binary file\n"
+diff --git a/dmiopt.h b/dmiopt.h
+index c676308..2374637 100644
+--- a/dmiopt.h
++++ b/dmiopt.h
+@@ -35,6 +35,7 @@ struct opt
+ 	u8 *type;
+ 	const struct string_keyword *string;
+ 	char *dumpfile;
++	u32 handle;
+ };
+ extern struct opt opt;
+ 
+diff --git a/man/dmidecode.8 b/man/dmidecode.8
+index e3b6b2a..df861e1 100644
+--- a/man/dmidecode.8
++++ b/man/dmidecode.8
+@@ -115,6 +115,10 @@ is printed and
+ .B dmidecode
+ exits with an error.
+ .TP
++.BR "-H" ", " "--handle HANDLE"
++Only display the entry whose handle matches \fBHANDLE\fR.  \fBHANDLE\fR
++is a 16-bit integer.
++.TP
+ .BR "-u" ", " "--dump"
+ Do not decode the entries, dump their contents as hexadecimal instead.
+ Note that this is still a text output, no binary data will be thrown upon
+-- 
+2.17.1
+
diff --git a/0018-dmidecode-Argument-processing.patch b/0018-dmidecode-Argument-processing.patch
new file mode 100644
index 0000000..4ee4fdd
--- /dev/null
+++ b/0018-dmidecode-Argument-processing.patch
@@ -0,0 +1,39 @@
+From 5a83719602d847290f80e79c898f0a7543ce8778 Mon Sep 17 00:00:00 2001
+From: Jerry Hoemann <jerry.hoemann@hpe.com>
+Date: Tue, 3 Jul 2018 09:56:27 +0200
+Subject: [PATCH 18/21] dmidecode: Argument processing
+
+Tighten up the numeric argument processing for parse_opt_type and
+parse_opt_oem_string to catch more typos.
+
+Signed-off-by: Jerry Hoemann <jerry.hoemann@hpe.com>
+Signed-off-by: Jean Delvare <jdelvare@suse.de>
+---
+ dmiopt.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/dmiopt.c b/dmiopt.c
+index 1531ddf..2f285f3 100644
+--- a/dmiopt.c
++++ b/dmiopt.c
+@@ -113,7 +113,7 @@ static u8 *parse_opt_type(u8 *p, const char *arg)
+ 		char *next;
+ 
+ 		val = strtoul(arg, &next, 0);
+-		if (next == arg)
++		if (next == arg || (*next != '\0' && *next != ',' && *next != ' '))
+ 		{
+ 			fprintf(stderr, "Invalid type keyword: %s\n", arg);
+ 			print_opt_type_list();
+@@ -228,7 +228,7 @@ static int parse_opt_oem_string(const char *arg)
+ 		goto done;
+ 
+ 	val = strtoul(arg, &next, 10);
+-	if (next == arg || val == 0x00 || val > 0xff)
++	if (next == arg  || *next != '\0' || val == 0x00 || val > 0xff)
+ 	{
+ 		fprintf(stderr, "Invalid OEM string number: %s\n", arg);
+ 		return -1;
+-- 
+2.17.1
+
diff --git a/0019-dmidecode-Avoid-OOB-read-on-invalid-entry-point-leng.patch b/0019-dmidecode-Avoid-OOB-read-on-invalid-entry-point-leng.patch
new file mode 100644
index 0000000..a5fed5b
--- /dev/null
+++ b/0019-dmidecode-Avoid-OOB-read-on-invalid-entry-point-leng.patch
@@ -0,0 +1,55 @@
+From 8ff32018e8dd53c26d1f0daef118037fdae58c68 Mon Sep 17 00:00:00 2001
+From: Jean Delvare <jdelvare@suse.de>
+Date: Wed, 1 Aug 2018 09:54:45 +0200
+Subject: [PATCH 19/21] dmidecode: Avoid OOB read on invalid entry point length
+
+Don't let the entry point checksum verification run beyond the end of
+the buffer holding it (32 bytes).
+
+This bug was discovered by Lionel Debroux using the AFL fuzzer and
+AddressSanitizer.
+
+Signed-off-by: Jean Delvare <jdelvare@suse.de>
+---
+ dmidecode.c | 18 ++++++++++++++++++
+ 1 file changed, 18 insertions(+)
+
+diff --git a/dmidecode.c b/dmidecode.c
+index fa6ecf1..474ca7b 100644
+--- a/dmidecode.c
++++ b/dmidecode.c
+@@ -4928,6 +4928,15 @@ static int smbios3_decode(u8 *buf, const char *devmem, u32 flags)
+ 	u32 ver;
+ 	u64 offset;
+ 
++	/* Don't let checksum run beyond the buffer */
++	if (buf[0x06] > 0x20)
++	{
++		fprintf(stderr,
++			"Entry point length too large (%u bytes, expected %u).\n",
++			(unsigned int)buf[0x06], 0x18U);
++		return 0;
++	}
++
+ 	if (!checksum(buf, buf[0x06]))
+ 		return 0;
+ 
+@@ -4966,6 +4975,15 @@ static int smbios_decode(u8 *buf, const char *devmem, u32 flags)
+ {
+ 	u16 ver;
+ 
++	/* Don't let checksum run beyond the buffer */
++	if (buf[0x05] > 0x20)
++	{
++		fprintf(stderr,
++			"Entry point length too large (%u bytes, expected %u).\n",
++			(unsigned int)buf[0x05], 0x1FU);
++		return 0;
++	}
++
+ 	if (!checksum(buf, buf[0x05])
+ 	 || memcmp(buf + 0x10, "_DMI_", 5) != 0
+ 	 || !checksum(buf + 0x10, 0x0F))
+-- 
+2.17.1
+
diff --git a/0020-dmidecode-Validate-structure-completeness-before-dec.patch b/0020-dmidecode-Validate-structure-completeness-before-dec.patch
new file mode 100644
index 0000000..02f477c
--- /dev/null
+++ b/0020-dmidecode-Validate-structure-completeness-before-dec.patch
@@ -0,0 +1,99 @@
+From 4cbba9a8e76ffc640eaf7dd25acbd3c1c6504669 Mon Sep 17 00:00:00 2001
+From: Jean Delvare <jdelvare@suse.de>
+Date: Wed, 1 Aug 2018 09:54:51 +0200
+Subject: [PATCH 20/21] dmidecode: Validate structure completeness before
+ decoding
+
+Ensure that the whole DMI structure fits in the announced table
+length before performing any action on it. Otherwise we might end up
+reading beyond the end of our memory buffer.
+
+This bug was discovered by Lionel Debroux using the AFL fuzzer and
+AddressSanitizer. Its probability is very low, as it requires a DMI
+table corrupted in one of two very specific ways to trigger.
+
+This bug exists since dmidecode version 2.9, although it is hard to
+test because option --from-dump was only introduced in version 2.10.
+
+Signed-off-by: Jean Delvare <jdelvare@suse.de>
+---
+ dmidecode.c | 39 ++++++++++++++++++++++-----------------
+ 1 file changed, 22 insertions(+), 17 deletions(-)
+
+diff --git a/dmidecode.c b/dmidecode.c
+index 474ca7b..76faed9 100644
+--- a/dmidecode.c
++++ b/dmidecode.c
+@@ -4754,6 +4754,7 @@ static void dmi_table_decode(u8 *buf, u32 len, u16 num, u16 ver, u32 flags)
+ 			}
+ 			break;
+ 		}
++		i++;
+ 
+ 		/* In quiet mode, stop decoding at end of table marker */
+ 		if ((opt.flags & FLAG_QUIET) && h.type == 127)
+@@ -4764,6 +4765,22 @@ static void dmi_table_decode(u8 *buf, u32 len, u16 num, u16 ver, u32 flags)
+ 			printf("Handle 0x%04X, DMI type %d, %d bytes\n",
+ 				h.handle, h.type, h.length);
+ 
++		/* Look for the next handle */
++		next = data + h.length;
++		while ((unsigned long)(next - buf + 1) < len
++		    && (next[0] != 0 || next[1] != 0))
++			next++;
++		next += 2;
++
++		/* Make sure the whole structure fits in the table */
++		if ((unsigned long)(next - buf) > len)
++		{
++			if (display && !(opt.flags & FLAG_QUIET))
++				printf("\t<TRUNCATED>\n\n");
++			data = next;
++			break;
++		}
++
+ 		/* assign vendor for vendor-specific decodes later */
+ 		if (h.type == 1 && h.length >= 5)
+ 			dmi_set_vendor(dmi_string(&h, data[0x04]));
+@@ -4772,33 +4789,21 @@ static void dmi_table_decode(u8 *buf, u32 len, u16 num, u16 ver, u32 flags)
+ 		if (h.type == 34)
+ 			dmi_fixup_type_34(&h, display);
+ 
+-		/* look for the next handle */
+-		next = data + h.length;
+-		while ((unsigned long)(next - buf + 1) < len
+-		    && (next[0] != 0 || next[1] != 0))
+-			next++;
+-		next += 2;
+ 		if (display)
+ 		{
+-			if ((unsigned long)(next - buf) <= len)
++			if (opt.flags & FLAG_DUMP)
+ 			{
+-				if (opt.flags & FLAG_DUMP)
+-				{
+-					dmi_dump(&h, "\t");
+-					printf("\n");
+-				}
+-				else
+-					dmi_decode(&h, ver);
++				dmi_dump(&h, "\t");
++				printf("\n");
+ 			}
+-			else if (!(opt.flags & FLAG_QUIET))
+-				printf("\t<TRUNCATED>\n\n");
++			else
++				dmi_decode(&h, ver);
+ 		}
+ 		else if (opt.string != NULL
+ 		      && opt.string->type == h.type)
+ 			dmi_table_string(&h, data, ver);
+ 
+ 		data = next;
+-		i++;
+ 
+ 		/* SMBIOS v3 requires stopping at this marker */
+ 		if (h.type == 127 && (flags & FLAG_STOP_AT_EOT))
+-- 
+2.17.1
+
diff --git a/0021-dmidecode-Don-t-allocate-more-memory-than-needed.patch b/0021-dmidecode-Don-t-allocate-more-memory-than-needed.patch
new file mode 100644
index 0000000..8988146
--- /dev/null
+++ b/0021-dmidecode-Don-t-allocate-more-memory-than-needed.patch
@@ -0,0 +1,64 @@
+From bd78a5dfd47043db08982464bcae4759c0980975 Mon Sep 17 00:00:00 2001
+From: Jean Delvare <jdelvare@suse.de>
+Date: Wed, 1 Aug 2018 09:54:55 +0200
+Subject: [PATCH 21/21] dmidecode: Don't allocate more memory than needed
+
+If the actual DMI table size is less than the announced maximum
+(which is allowed for 64-bit SMBIOS 3 entry points), we may allocate
+significantly more memory than is actually needed. If reading from
+/dev/mem, there's nothing we can do about that. However, is reading
+from sysfs or from a dump file, we can easily check the file size
+and compute the actual table size from it. That way we only allocate
+the required amount of memory.
+
+Credits to Lionel Debroux for seeding the idea when performing fuzz
+testing on dmidecode.
+
+Signed-off-by: Jean Delvare <jdelvare@suse.de>
+---
+ util.c | 15 ++++++++++++---
+ 1 file changed, 12 insertions(+), 3 deletions(-)
+
+diff --git a/util.c b/util.c
+index 0aafcb1..7049817 100644
+--- a/util.c
++++ b/util.c
+@@ -90,16 +90,16 @@ int checksum(const u8 *buf, size_t len)
+ 
+ /*
+  * Reads all of file from given offset, up to max_len bytes.
+- * A buffer of max_len bytes is allocated by this function, and
++ * A buffer of at most max_len bytes is allocated by this function, and
+  * needs to be freed by the caller.
+  * This provides a similar usage model to mem_chunk()
+  *
+- * Returns pointer to buffer of max_len bytes, or NULL on error, and
++ * Returns a pointer to the allocated buffer, or NULL on error, and
+  * sets max_len to the length actually read.
+- *
+  */
+ void *read_file(off_t base, size_t *max_len, const char *filename)
+ {
++	struct stat statbuf;
+ 	int fd;
+ 	size_t r2 = 0;
+ 	ssize_t r;
+@@ -124,6 +124,15 @@ void *read_file(off_t base, size_t *max_len, const char *filename)
+ 		goto out;
+ 	}
+ 
++	/*
++	 * Check file size, don't allocate more than can be read.
++	 */
++	if (fstat(fd, &statbuf) == 0)
++	{
++		if (base + (off_t)*max_len > statbuf.st_size)
++			*max_len = statbuf.st_size - base;
++	}
++
+ 	if ((p = malloc(*max_len)) == NULL)
+ 	{
+ 		perror("malloc");
+-- 
+2.17.1
+
diff --git a/dmidecode.spec b/dmidecode.spec
index 058ff52..d4d7f31 100644
--- a/dmidecode.spec
+++ b/dmidecode.spec
@@ -1,11 +1,31 @@
 Summary:        Tool to analyse BIOS DMI data
 Name:           dmidecode
 Version:        3.1
-Release:        6%{?dist}
+Release:        7%{?dist}
 Epoch:          1
 License:        GPLv2+
 Source0:        http://download.savannah.gnu.org/releases/%{name}/%{name}-%{version}.tar.xz
-Patch0:         0001-dmidecode-Add-system-family-direct-string-option.patch
+Patch1:         0001-Exclude-.gitignore-from-published-packages.patch
+Patch2:         0002-Use-the-appropriate-git-diff-drivers-for-C-source-fi.patch
+Patch3:         0003-dmidecode-Add-system-family-direct-string-option.patch
+Patch4:         0004-Goodbye-CHANGELOG-welcome-NEWS.patch
+Patch5:         0005-Fix-install-doc-target.patch
+Patch6:         0006-biosdecode-Add-option-pir-full.patch
+Patch7:         0007-biosdecode-Clean-up-the-PIR-table-output.patch
+Patch8:         0008-biosdecode-Avoid-repeating-pointer-arithmetic.patch
+Patch9:         0009-dmioem-Reflect-HPE-s-new-company-name.patch
+Patch10:        0010-dmioem-Sort-vendor-names-alphabetically.patch
+Patch11:        0011-UEFI-support-on-FreeBSD.patch
+Patch12:        0012-dmidecode-Share-common-EFI-code.patch
+Patch13:        0013-dmidecode-Fix-firmware-version-of-TPM-device.patch
+Patch14:        0014-dmioem-decode-HPE-UEFI-type-219-Misc-Features.patch
+Patch15:        0015-dmidecode-Use-lowercase-letters-for-UUID.patch
+Patch16:        0016-dmidecode-Extensions-to-Memory-Device-Type-17.patch
+Patch17:        0017-dmidecode-Add-option-to-filter-output-based-upon-han.patch
+Patch18:        0018-dmidecode-Argument-processing.patch
+Patch19:        0019-dmidecode-Avoid-OOB-read-on-invalid-entry-point-leng.patch
+Patch20:        0020-dmidecode-Validate-structure-completeness-before-dec.patch
+Patch21:        0021-dmidecode-Don-t-allocate-more-memory-than-needed.patch
 URL:            http://www.nongnu.org/dmidecode/
 BuildRequires:  gcc make
 ExclusiveArch:  %{ix86} x86_64 ia64 aarch64
@@ -23,7 +43,27 @@ I/O ports (e.g. serial, parallel, USB).
 
 %prep
 %setup -q
-%patch0 -p1 -b .system-family
+#%patch1 -p1
+#%patch2 -p1
+%patch3 -p1
+%patch4 -p1
+%patch5 -p1
+%patch6 -p1
+%patch7 -p1
+%patch8 -p1
+%patch9 -p1
+%patch10 -p1
+%patch11 -p1
+%patch12 -p1
+%patch13 -p1
+%patch14 -p1
+%patch15 -p1
+%patch16 -p1
+%patch17 -p1
+%patch18 -p1
+%patch19 -p1
+%patch20 -p1
+%patch21 -p1
 
 %build
 make %{?_smp_mflags} CFLAGS="%{optflags}" LDFLAGS="%{__global_ldflags}"
@@ -44,6 +84,9 @@ make %{?_smp_mflags} DESTDIR=%{buildroot} prefix=%{_prefix} install-bin install-
 %{_mandir}/man8/*
 
 %changelog
+* Thu Aug 02 2018 Anton Arapov <aarapov@redhat.com> - 1:3.1-7
+- patched up to upstream commit bd78a5dfd4
+
 * Thu Jul 12 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1:3.1-6
 - Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild