summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPeter Stuge <peter@stuge.se>2013-07-06 20:10:36 +0200
committerRonald G. Minnich <rminnich@gmail.com>2013-07-17 17:15:25 +0200
commitcd24e3f6a7adecfc9d3b2a2dd2f81d84acffa91b (patch)
tree10f6d04faf527cac64a9efe3da0ea4e1e560ea04 /src
parent5d8474329755905842b692eb70fa61a60e943661 (diff)
lenovo/x60: Add "IBM ThinkPad Embedded Controller" SMBIOS OEM String
The Linux thinkpad_acpi.c driver looks for this string while reading information about the system it is running on. This commit does not make the module load but it is one of several things that the module looks for on a ThinkPad. The use of 3 defines for the serial number template seems odd but it's done in a way that eliminates magic numbers, yet avoids use of strcpy, strlen, strindex, strchr, or strspan: we can have some correctness assured at compile time. Also, the defines can be copy/pasted for other mainboards and we should void errors due to people not changing magic numbers. Change-Id: Ief5f28d2e27bf959cb579c4c8eea9eecc9a89a7c Signed-off-by: Peter Stuge <peter@stuge.se> Signed-off-by: Ronald G. Minnich <rminnich@gmail.com> Reviewed-on: http://review.coreboot.org/3620 Tested-by: build bot (Jenkins) Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net> Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
Diffstat (limited to 'src')
-rw-r--r--src/mainboard/lenovo/x60/mainboard.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/mainboard/lenovo/x60/mainboard.c b/src/mainboard/lenovo/x60/mainboard.c
index b344ccb364..2f312f0287 100644
--- a/src/mainboard/lenovo/x60/mainboard.c
+++ b/src/mainboard/lenovo/x60/mainboard.c
@@ -36,6 +36,7 @@
#include <pc80/mc146818rtc.h>
#include "dock.h"
#include <arch/x86/include/arch/acpigen.h>
+#include <smbios.h>
#include <x86emu/x86emu.h>
#define PANEL INT15_5F35_CL_DISPLAY_DEFAULT
@@ -133,9 +134,28 @@ static void mainboard_init(device_t dev)
}
}
+static int mainboard_smbios_data(device_t dev, int *handle, unsigned long *current)
+{
+ int len;
+#define SERIALBEGIN "IBM ThinkPad Embedded Controller -["
+#define SERIAL "01234567890123456"
+#define SERIALEND "]-"
+ char tpec[] = SERIALBEGIN SERIAL SERIALEND;
+
+ const char *oem_strings[] = {
+ tpec,
+ };
+
+ h8_build_id_and_function_spec_version(tpec + sizeof(SERIALBEGIN), sizeof(SERIAL));
+ len = smbios_write_type11(current, (*handle)++, oem_strings, ARRAY_SIZE(oem_strings));
+
+ return len;
+}
+
static void mainboard_enable(device_t dev)
{
dev->ops->init = mainboard_init;
+ dev->ops->get_smbios_data = mainboard_smbios_data;
}
struct chip_operations mainboard_ops = {