summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/arch/x86/smbios.c22
-rw-r--r--src/include/smbios.h3
2 files changed, 17 insertions, 8 deletions
diff --git a/src/arch/x86/smbios.c b/src/arch/x86/smbios.c
index 44ff578e35..d71c0d5ff9 100644
--- a/src/arch/x86/smbios.c
+++ b/src/arch/x86/smbios.c
@@ -203,6 +203,19 @@ void smbios_fill_dimm_manufacturer_from_id(uint16_t mod_id,
}
}
}
+/* this function will fill the corresponding locator */
+void __weak smbios_fill_dimm_locator(const struct dimm_info *dimm,
+ struct smbios_type17 *t)
+{
+ char locator[40];
+
+ snprintf(locator, sizeof(locator), "Channel-%d-DIMM-%d",
+ dimm->channel_num, dimm->dimm_num);
+ t->device_locator = smbios_add_string(t->eos, locator);
+
+ snprintf(locator, sizeof(locator), "BANK %d", dimm->bank_locator);
+ t->bank_locator = smbios_add_string(t->eos, locator);
+}
static void trim_trailing_whitespace(char *buffer, size_t buffer_size)
{
@@ -280,7 +293,6 @@ static int create_smbios_type17_for_dimm(struct dimm_info *dimm,
unsigned long *current, int *handle)
{
struct smbios_type17 *t = (struct smbios_type17 *)*current;
- char locator[40];
memset(t, 0, sizeof(struct smbios_type17));
t->memory_type = dimm->ddr_type;
@@ -316,13 +328,7 @@ static int create_smbios_type17_for_dimm(struct dimm_info *dimm,
smbios_fill_dimm_manufacturer_from_id(dimm->mod_id, t);
smbios_fill_dimm_serial_number(dimm, t);
-
- snprintf(locator, sizeof(locator), "Channel-%d-DIMM-%d",
- dimm->channel_num, dimm->dimm_num);
- t->device_locator = smbios_add_string(t->eos, locator);
-
- snprintf(locator, sizeof(locator), "BANK %d", dimm->bank_locator);
- t->bank_locator = smbios_add_string(t->eos, locator);
+ smbios_fill_dimm_locator(dimm, t);
/* put '\0' in the end of data */
dimm->module_part_number[DIMM_INFO_PART_NUMBER_SIZE - 1] = '\0';
diff --git a/src/include/smbios.h b/src/include/smbios.h
index 08e6b61ef7..5e069470e1 100644
--- a/src/include/smbios.h
+++ b/src/include/smbios.h
@@ -19,6 +19,7 @@
#define SMBIOS_H
#include <types.h>
+#include <memory_info.h>
unsigned long smbios_write_tables(unsigned long start);
int smbios_add_string(u8 *start, const char *str);
@@ -629,6 +630,8 @@ struct smbios_type127 {
void smbios_fill_dimm_manufacturer_from_id(uint16_t mod_id,
struct smbios_type17 *t);
+void smbios_fill_dimm_locator(const struct dimm_info *dimm,
+ struct smbios_type17 *t);
smbios_board_type smbios_mainboard_board_type(void);