summaryrefslogtreecommitdiff
path: root/dmi.c
diff options
context:
space:
mode:
authorhailfinger <hailfinger@2b7e53f0-3cfb-0310-b3e9-8179ed1497e1>2010-09-26 21:43:53 +0000
committerhailfinger <hailfinger@2b7e53f0-3cfb-0310-b3e9-8179ed1497e1>2010-09-26 21:43:53 +0000
commit139142cfad7698c57f1e9eeaf47e464f23018777 (patch)
treea22c76b7635edc25401fd321434ccdc994c6d298 /dmi.c
parent132b5727df25854761c376e153eeaa840b59a6c4 (diff)
downloadflashrom-139142cfad7698c57f1e9eeaf47e464f23018777.tar.gz
Half a dozen hardcoded strcmp() don't make sense if we need a
chassis-type list anyway once we merge the internal DMI decoder. Provide and array of the most interesting chassis types and annotate them with laptop/non-laptop status. Match the dmidecode chassis type against the strings in the array. Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> Acked-by: Sean Nelson <audiohacked@gmail.com> git-svn-id: https://code.coreboot.org/svn/flashrom/trunk@1182 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
Diffstat (limited to 'dmi.c')
-rw-r--r--dmi.c33
1 files changed, 29 insertions, 4 deletions
diff --git a/dmi.c b/dmi.c
index f18907f..cda6656 100644
--- a/dmi.c
+++ b/dmi.c
@@ -54,6 +54,26 @@ static const char *dmidecode_names[] = {
"baseboard-version",
};
+/* A full list of chassis types can be found in the System Management BIOS
+ * (SMBIOS) Reference Specification 2.7.0 section 7.4.1 "Chassis Types" at
+ * http://www.dmtf.org/sites/default/files/standards/documents/DSP0134_2.7.0.pdf
+ * The types below are the most common ones.
+ */
+static const struct {
+ unsigned char type;
+ unsigned char is_laptop;
+ const char *name;
+} dmi_chassis_types[] = {
+ {0x01, 0, "Other"},
+ {0x02, 0, "Unknown"},
+ {0x03, 0, "Desktop",},
+ {0x08, 1, "Portable"},
+ {0x09, 1, "Laptop"},
+ {0x0a, 1, "Notebook"},
+ {0x0b, 1, "Hand Held"},
+ {0x0e, 1, "Sub Notebook"},
+};
+
#define DMI_COMMAND_LEN_MAX 260
static const char *dmidecode_command = "dmidecode";
@@ -132,10 +152,15 @@ void dmi_init(void)
}
chassis_type = get_dmi_string("chassis-type");
- if (chassis_type && (!strcmp(chassis_type, "Notebook") ||
- !strcmp(chassis_type, "Portable"))) {
- msg_pdbg("Laptop detected via DMI\n");
- is_laptop = 1;
+ if (chassis_type) {
+ for (i = 0; i < ARRAY_SIZE(dmi_chassis_types); i++) {
+ if (!strcasecmp(chassis_type,
+ dmi_chassis_types[i].name) &&
+ dmi_chassis_types[i].is_laptop) {
+ msg_pdbg("Laptop detected via DMI\n");
+ is_laptop = 1;
+ }
+ }
}
free(chassis_type);
}