diff options
author | Angel Pons <th3fanbus@gmail.com> | 2021-06-28 17:18:06 +0200 |
---|---|---|
committer | Patrick Georgi <pgeorgi@google.com> | 2021-07-01 07:37:21 +0000 |
commit | d62a5012d6e5904279eb56507bc2a021d2acce77 (patch) | |
tree | 2b8a4eb40ed8842ca8f237501182a3684931ac2a /src/mainboard/emulation | |
parent | ca01baa065e25242945bdfa8631694a6e903f17f (diff) |
SMBIOS: Introduce `smbios_carve_table` function
Factor out some boilerplate code into a helper `smbios_carve_table`
function, which zeroes out the table memory and fills in the header
fields common to all tables.
Change-Id: Iece2f64f9151d3c79813f6264dfb3a92d98c2035
Signed-off-by: Angel Pons <th3fanbus@gmail.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/55907
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org>
Reviewed-by: Michał Żygowski <michal.zygowski@3mdeb.com>
Diffstat (limited to 'src/mainboard/emulation')
-rw-r--r-- | src/mainboard/emulation/qemu-i440fx/northbridge.c | 21 |
1 files changed, 8 insertions, 13 deletions
diff --git a/src/mainboard/emulation/qemu-i440fx/northbridge.c b/src/mainboard/emulation/qemu-i440fx/northbridge.c index 01d036a6a0..2f70f98f93 100644 --- a/src/mainboard/emulation/qemu-i440fx/northbridge.c +++ b/src/mainboard/emulation/qemu-i440fx/northbridge.c @@ -165,31 +165,25 @@ static void cpu_pci_domain_read_resources(struct device *dev) #if CONFIG(GENERATE_SMBIOS_TABLES) static int qemu_get_smbios_data16(int handle, unsigned long *current) { - struct smbios_type16 *t = (struct smbios_type16 *)*current; - int len = sizeof(*t); + struct smbios_type16 *t = smbios_carve_table(*current, SMBIOS_PHYS_MEMORY_ARRAY, + sizeof(*t), handle); - memset(t, 0, sizeof(*t)); - t->type = SMBIOS_PHYS_MEMORY_ARRAY; - t->handle = handle; - t->length = len - 2; t->location = MEMORY_ARRAY_LOCATION_SYSTEM_BOARD; t->use = MEMORY_ARRAY_USE_SYSTEM; t->memory_error_correction = MEMORY_ARRAY_ECC_NONE; t->maximum_capacity = qemu_get_memory_size(); + + const int len = sizeof(*t); *current += len; return len; } static int qemu_get_smbios_data17(int handle, int parent_handle, unsigned long *current) { - struct smbios_type17 *t = (struct smbios_type17 *)*current; - int len; + struct smbios_type17 *t = smbios_carve_table(*current, SMBIOS_MEMORY_DEVICE, + sizeof(*t), handle); - memset(t, 0, sizeof(*t)); - t->type = SMBIOS_MEMORY_DEVICE; - t->handle = handle; t->phys_memory_array_handle = parent_handle; - t->length = sizeof(*t) - 2; t->size = qemu_get_memory_size() / 1024; t->data_width = 64; t->total_width = 64; @@ -200,7 +194,8 @@ static int qemu_get_smbios_data17(int handle, int parent_handle, unsigned long * t->speed = 200; t->clock_speed = 200; t->manufacturer = smbios_add_string(t->eos, CONFIG_MAINBOARD_VENDOR); - len = t->length + smbios_string_table_len(t->eos); + + const int len = t->length + smbios_string_table_len(t->eos); *current += len; return len; } |