summaryrefslogtreecommitdiff
path: root/src/mainboard
diff options
context:
space:
mode:
authorDuncan Laurie <dlaurie@chromium.org>2013-05-23 14:17:05 -0700
committerStefan Reinauer <stefan.reinauer@coreboot.org>2013-11-25 23:38:21 +0100
commit21a78706addd15fcc682f556566c303a463fcda1 (patch)
tree837dfebece007b022a03c9da1fddd0ddab1a0540 /src/mainboard
parent032be82a11a9cee6cc45df7a5ea94778ea4280d7 (diff)
downloadcoreboot-21a78706addd15fcc682f556566c303a463fcda1.tar.xz
smbios: Add generic type41 write function
Mainboards were defining their own SMBIOS type41 write function. Instead pull this into the generic SMBIOS code and change the existing mainboards to make use of it. Change-Id: I3c8a95ca51fe2a3118dc8d1154011ccfed5fbcbc Signed-off-by: Duncan Laurie <dlaurie@chromium.org> Reviewed-on: https://gerrit.chromium.org/gerrit/56619 Reviewed-by: Stefan Reinauer <reinauer@google.com> Reviewed-on: http://review.coreboot.org/4187 Tested-by: build bot (Jenkins) Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
Diffstat (limited to 'src/mainboard')
-rw-r--r--src/mainboard/google/butterfly/mainboard.c37
-rw-r--r--src/mainboard/google/link/mainboard.c65
-rw-r--r--src/mainboard/google/parrot/mainboard.c50
3 files changed, 50 insertions, 102 deletions
diff --git a/src/mainboard/google/butterfly/mainboard.c b/src/mainboard/google/butterfly/mainboard.c
index 32a830842a..b11c22678f 100644
--- a/src/mainboard/google/butterfly/mainboard.c
+++ b/src/mainboard/google/butterfly/mainboard.c
@@ -343,40 +343,19 @@ static void mainboard_init(device_t dev)
}
}
-static int butterfly_smbios_type41(int *handle, unsigned long *current,
- const char *name, u8 irq, u8 addr)
-{
- struct smbios_type41 *t = (struct smbios_type41 *)*current;
- int len = sizeof(struct smbios_type41);
-
- memset(t, 0, sizeof(struct smbios_type41));
- t->type = SMBIOS_ONBOARD_DEVICES_EXTENDED_INFORMATION;
- t->handle = *handle;
- t->length = len - 2;
- t->reference_designation = smbios_add_string(t->eos, name);
- t->device_type = SMBIOS_DEVICE_TYPE_OTHER;
- t->device_status = 1;
- t->device_type_instance = irq;
- t->segment_group_number = 0;
- t->bus_number = addr;
- t->function_number = 0;
- t->device_number = 0;
-
- len = t->length + smbios_string_table_len(t->eos);
- *current += len;
- *handle += 1;
- return len;
-}
-
static int butterfly_onboard_smbios_data(device_t dev, int *handle,
unsigned long *current)
{
int len = 0;
- len += butterfly_smbios_type41(handle, current,
- BUTTERFLY_TRACKPAD_NAME,
- BUTTERFLY_TRACKPAD_IRQ,
- BUTTERFLY_TRACKPAD_I2C_ADDR);
+ len += smbios_write_type41(
+ current, handle,
+ BUTTERFLY_TRACKPAD_NAME, /* name */
+ BUTTERFLY_TRACKPAD_IRQ, /* instance */
+ 0, /* segment */
+ BUTTERFLY_TRACKPAD_I2C_ADDR, /* bus */
+ 0, /* device */
+ 0); /* function */
return len;
}
diff --git a/src/mainboard/google/link/mainboard.c b/src/mainboard/google/link/mainboard.c
index 2731df0204..08b1c02a96 100644
--- a/src/mainboard/google/link/mainboard.c
+++ b/src/mainboard/google/link/mainboard.c
@@ -180,50 +180,37 @@ static void mainboard_init(device_t dev)
}
}
-static int link_smbios_type41(int *handle, unsigned long *current,
- const char *name, u8 irq, u8 addr)
-{
- struct smbios_type41 *t = (struct smbios_type41 *)*current;
- int len = sizeof(struct smbios_type41);
-
- memset(t, 0, sizeof(struct smbios_type41));
- t->type = SMBIOS_ONBOARD_DEVICES_EXTENDED_INFORMATION;
- t->handle = *handle;
- t->length = len - 2;
- t->reference_designation = smbios_add_string(t->eos, name);
- t->device_type = SMBIOS_DEVICE_TYPE_OTHER;
- t->device_status = 1;
- t->device_type_instance = irq;
- t->segment_group_number = 0;
- t->bus_number = addr;
- t->function_number = 0;
- t->device_number = 0;
-
- len = t->length + smbios_string_table_len(t->eos);
- *current += len;
- *handle += 1;
- return len;
-}
-
static int link_onboard_smbios_data(device_t dev, int *handle,
unsigned long *current)
{
int len = 0;
- len += link_smbios_type41(handle, current,
- LINK_LIGHTSENSOR_NAME,
- LINK_LIGHTSENSOR_IRQ,
- LINK_LIGHTSENSOR_I2C_ADDR);
-
- len += link_smbios_type41(handle, current,
- LINK_TRACKPAD_NAME,
- LINK_TRACKPAD_IRQ,
- LINK_TRACKPAD_I2C_ADDR);
-
- len += link_smbios_type41(handle, current,
- LINK_TOUCHSCREEN_NAME,
- LINK_TOUCHSCREEN_IRQ,
- LINK_TOUCHSCREEN_I2C_ADDR);
+ len += smbios_write_type41(
+ current, handle,
+ LINK_LIGHTSENSOR_NAME, /* name */
+ LINK_LIGHTSENSOR_IRQ, /* instance */
+ 0, /* segment */
+ LINK_LIGHTSENSOR_I2C_ADDR, /* bus */
+ 0, /* device */
+ 0); /* function */
+
+ len += smbios_write_type41(
+ current, handle,
+ LINK_TRACKPAD_NAME, /* name */
+ LINK_TRACKPAD_IRQ, /* instance */
+ 0, /* segment */
+ LINK_TRACKPAD_I2C_ADDR, /* bus */
+ 0, /* device */
+ 0); /* function */
+
+ len += smbios_write_type41(
+ current, handle,
+ LINK_TOUCHSCREEN_NAME, /* name */
+ LINK_TOUCHSCREEN_IRQ, /* instance */
+ 0, /* segment */
+ LINK_TOUCHSCREEN_I2C_ADDR, /* bus */
+ 0, /* device */
+ 0); /* function */
return len;
}
diff --git a/src/mainboard/google/parrot/mainboard.c b/src/mainboard/google/parrot/mainboard.c
index bc505beaff..34cb24e87e 100644
--- a/src/mainboard/google/parrot/mainboard.c
+++ b/src/mainboard/google/parrot/mainboard.c
@@ -156,49 +156,31 @@ static void mainboard_init(device_t dev)
parrot_ec_init();
}
-static int parrot_smbios_type41(int *handle, unsigned long *current,
- const char *name, u8 irq, u8 addr)
-{
- struct smbios_type41 *t = (struct smbios_type41 *)*current;
- int len = sizeof(struct smbios_type41);
-
- memset(t, 0, sizeof(struct smbios_type41));
- t->type = SMBIOS_ONBOARD_DEVICES_EXTENDED_INFORMATION;
- t->handle = *handle;
- t->length = len - 2;
- t->reference_designation = smbios_add_string(t->eos, name);
- t->device_type = SMBIOS_DEVICE_TYPE_OTHER;
- t->device_status = 1;
- t->device_type_instance = irq;
- t->segment_group_number = 0;
- t->bus_number = addr;
- t->function_number = 0;
- t->device_number = 0;
-
- len = t->length + smbios_string_table_len(t->eos);
- *current += len;
- *handle += 1;
- return len;
-}
-
static int parrot_onboard_smbios_data(device_t dev, int *handle,
unsigned long *current)
{
int len = 0;
u8 hardware_version = parrot_rev();
if (hardware_version < 0x2) { /* DVT vs PVT */
- len += parrot_smbios_type41(handle, current,
- PARROT_TRACKPAD_NAME,
- PARROT_TRACKPAD_IRQ_DVT,
- PARROT_TRACKPAD_I2C_ADDR);
+ len += smbios_write_type41(
+ current, handle,
+ PARROT_TRACKPAD_NAME, /* name */
+ PARROT_TRACKPAD_IRQ_DVT, /* instance */
+ 0, /* segment */
+ PARROT_TRACKPAD_I2C_ADDR, /* bus */
+ 0, /* device */
+ 0); /* function */
} else {
- len += parrot_smbios_type41(handle, current,
- PARROT_TRACKPAD_NAME,
- PARROT_TRACKPAD_IRQ_PVT,
- PARROT_TRACKPAD_I2C_ADDR);
+ len += smbios_write_type41(
+ current, handle,
+ PARROT_TRACKPAD_NAME, /* name */
+ PARROT_TRACKPAD_IRQ_PVT, /* instance */
+ 0, /* segment */
+ PARROT_TRACKPAD_I2C_ADDR, /* bus */
+ 0, /* device */
+ 0); /* function */
}
-
return len;
}