[PATCH] dmi: dmi_decode: check acpi battery if type 22 is present.

Alex Hung alex.hung at canonical.com
Tue Jan 31 15:02:36 UTC 2012


Signed-off-by: Alex Hung <alex.hung at canonical.com>
---
 src/dmi/dmi_decode/dmi_decode.c |   13 +++++++++++--
 1 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/src/dmi/dmi_decode/dmi_decode.c b/src/dmi/dmi_decode/dmi_decode.c
index 486a826..02790d9 100644
--- a/src/dmi/dmi_decode/dmi_decode.c
+++ b/src/dmi/dmi_decode/dmi_decode.c
@@ -49,6 +49,7 @@
 #define DMI_ILLEGAL_MAPPED_ADDR_RANGE	"DMIIllegalMappedAddrRange"
 #define DMI_MGMT_CTRL_HOST_TYPE		"DMIMgmtCtrlHostType"
 #define DMI_INVALID_ENTRY_LENGTH	"DMIInvalidEntryLength"
+#define DMI_INVALID_HARDWARE_ENTRY	"DMIInvalidHardwareEntry"
 
 #define GET_UINT16(x) (uint16_t)(*(const uint16_t *)(x))
 #define GET_UINT32(x) (uint32_t)(*(const uint32_t *)(x))
@@ -241,6 +242,8 @@ static void dmi_decode_entry(fwts_framework *fw,
 	int	i;
 	int 	len;
 	int	failed_count = fw->minor_tests.failed;
+	int	battery_count;
+	int	ret;
 
 	switch (hdr->type) {
 		case 0: /* 7.1 */
@@ -644,7 +647,7 @@ static void dmi_decode_entry(fwts_framework *fw,
 					"(range allowed 0x01..0x08, 0xa0..0xa2) "
 					"while accessing '%s', field '%s', offset 0x%2.2x",
 					data[0x5], table, "Interface", 0x5);
-}
+			}
 			break;
 
 		case 22: /* 7.23 */
@@ -666,8 +669,14 @@ static void dmi_decode_entry(fwts_framework *fw,
 				break;
 			if (data[0x09] == 0x02)
 				dmi_str_check(fw, table, addr, "SBDS Device Chemistry", hdr, 0x14);
-			break;
 
+			ret = fwts_battery_get_count(fw, &battery_count);
+			if (ret != FWTS_OK || battery_count < 1) {
+				fwts_failed(fw, LOG_LEVEL_MEDIUM, DMI_INVALID_HARDWARE_ENTRY,
+					"Invalid Hardware Configuration "
+					"(no battery found) ");
+			}
+			break;
 		case 23: /* 7.24 */
 			table = "System Reset (Type 23)";
 			if (hdr->length < 0x0D)
-- 
1.7.5.4





More information about the fwts-devel mailing list