diff options
-rw-r--r-- | src/arch/x86/smbios.c | 209 |
1 files changed, 81 insertions, 128 deletions
diff --git a/src/arch/x86/smbios.c b/src/arch/x86/smbios.c index 47b54aa116..a8c8772d62 100644 --- a/src/arch/x86/smbios.c +++ b/src/arch/x86/smbios.c @@ -73,7 +73,6 @@ static u8 smbios_get_device_type_from_dev(struct device *dev) } } - int smbios_add_string(u8 *start, const char *str) { int i = 1; @@ -159,76 +158,59 @@ static int smbios_processor_name(u8 *start) } /* this function will fill the corresponding manufacturer */ -void smbios_fill_dimm_manufacturer_from_id(uint16_t mod_id, - struct smbios_type17 *t) +void smbios_fill_dimm_manufacturer_from_id(uint16_t mod_id, struct smbios_type17 *t) { switch (mod_id) { case 0x9b85: - t->manufacturer = smbios_add_string(t->eos, - "Crucial"); + t->manufacturer = smbios_add_string(t->eos, "Crucial"); break; case 0x4304: - t->manufacturer = smbios_add_string(t->eos, - "Ramaxel"); + t->manufacturer = smbios_add_string(t->eos, "Ramaxel"); break; case 0x4f01: - t->manufacturer = smbios_add_string(t->eos, - "Transcend"); + t->manufacturer = smbios_add_string(t->eos, "Transcend"); break; case 0x9801: - t->manufacturer = smbios_add_string(t->eos, - "Kingston"); + t->manufacturer = smbios_add_string(t->eos, "Kingston"); break; case 0x987f: - t->manufacturer = smbios_add_string(t->eos, - "Hynix"); + t->manufacturer = smbios_add_string(t->eos, "Hynix"); break; case 0x9e02: - t->manufacturer = smbios_add_string(t->eos, - "Corsair"); + t->manufacturer = smbios_add_string(t->eos, "Corsair"); break; case 0xb004: - t->manufacturer = smbios_add_string(t->eos, - "OCZ"); + t->manufacturer = smbios_add_string(t->eos, "OCZ"); break; case 0xad80: - t->manufacturer = smbios_add_string(t->eos, - "Hynix/Hyundai"); + t->manufacturer = smbios_add_string(t->eos, "Hynix/Hyundai"); break; case 0x3486: - t->manufacturer = smbios_add_string(t->eos, - "Super Talent"); + t->manufacturer = smbios_add_string(t->eos, "Super Talent"); break; case 0xcd04: - t->manufacturer = smbios_add_string(t->eos, - "GSkill"); + t->manufacturer = smbios_add_string(t->eos, "GSkill"); break; case 0xce80: - t->manufacturer = smbios_add_string(t->eos, - "Samsung"); + t->manufacturer = smbios_add_string(t->eos, "Samsung"); break; case 0xfe02: - t->manufacturer = smbios_add_string(t->eos, - "Elpida"); + t->manufacturer = smbios_add_string(t->eos, "Elpida"); break; case 0x2c80: - t->manufacturer = smbios_add_string(t->eos, - "Micron"); + t->manufacturer = smbios_add_string(t->eos, "Micron"); break; default: { char string_buffer[256]; - snprintf(string_buffer, sizeof(string_buffer), - "Unknown (%x)", mod_id); - t->manufacturer = smbios_add_string(t->eos, - string_buffer); + snprintf(string_buffer, sizeof(string_buffer), "Unknown (%x)", mod_id); + t->manufacturer = smbios_add_string(t->eos, string_buffer); break; } } } /* this function will fill the corresponding locator */ -void __weak smbios_fill_dimm_locator(const struct dimm_info *dimm, - struct smbios_type17 *t) +__weak void smbios_fill_dimm_locator(const struct dimm_info *dimm, struct smbios_type17 *t) { char locator[40]; @@ -256,8 +238,7 @@ static void trim_trailing_whitespace(char *buffer, size_t buffer_size) } /** This function will fill the corresponding part number */ -static void smbios_fill_dimm_part_number(const char *part_number, - struct smbios_type17 *t) +static void smbios_fill_dimm_part_number(const char *part_number, struct smbios_type17 *t) { int invalid; size_t i, len; @@ -303,8 +284,7 @@ static void smbios_fill_dimm_serial_number(const struct dimm_info *dimm, char serial[9]; snprintf(serial, sizeof(serial), "%02hhx%02hhx%02hhx%02hhx", - dimm->serial[0], dimm->serial[1], dimm->serial[2], - dimm->serial[3]); + dimm->serial[0], dimm->serial[1], dimm->serial[2], dimm->serial[3]); t->serial_number = smbios_add_string(t->eos, serial); } @@ -428,7 +408,7 @@ static const char *get_bios_version(void) return coreboot_version; } -const char *__weak smbios_mainboard_bios_version(void) +__weak const char *smbios_mainboard_bios_version(void) { return NULL; } @@ -457,8 +437,7 @@ static int smbios_write_type0(unsigned long *current, int handle) t->bios_rom_size = (rom_size / 65535) - 1; if (CONFIG_ROM_SIZE >= 1 * GiB) { - t->extended_bios_rom_size = - DIV_ROUND_UP(CONFIG_ROM_SIZE, GiB) | (1 << 14); + t->extended_bios_rom_size = DIV_ROUND_UP(CONFIG_ROM_SIZE, GiB) | (1 << 14); } else { t->extended_bios_rom_size = DIV_ROUND_UP(CONFIG_ROM_SIZE, MiB); } @@ -483,42 +462,42 @@ static int smbios_write_type0(unsigned long *current, int handle) return len; } -const char *__weak smbios_mainboard_serial_number(void) +__weak const char *smbios_mainboard_serial_number(void) { return CONFIG_MAINBOARD_SERIAL_NUMBER; } -const char *__weak smbios_mainboard_version(void) +__weak const char *smbios_mainboard_version(void) { return CONFIG_MAINBOARD_VERSION; } -const char *__weak smbios_mainboard_manufacturer(void) +__weak const char *smbios_mainboard_manufacturer(void) { return CONFIG_MAINBOARD_SMBIOS_MANUFACTURER; } -const char *__weak smbios_mainboard_product_name(void) +__weak const char *smbios_mainboard_product_name(void) { return CONFIG_MAINBOARD_SMBIOS_PRODUCT_NAME; } -const char *__weak smbios_mainboard_asset_tag(void) +__weak const char *smbios_mainboard_asset_tag(void) { return ""; } -u8 __weak smbios_mainboard_feature_flags(void) +__weak u8 smbios_mainboard_feature_flags(void) { return 0; } -const char *__weak smbios_mainboard_location_in_chassis(void) +__weak const char *smbios_mainboard_location_in_chassis(void) { return ""; } -smbios_board_type __weak smbios_mainboard_board_type(void) +__weak smbios_board_type smbios_mainboard_board_type(void) { return SMBIOS_BOARD_TYPE_UNKNOWN; } @@ -529,7 +508,7 @@ smbios_board_type __weak smbios_mainboard_board_type(void) * convertible, or tablet enclosure will be used if the appropriate * system type is selected. */ -smbios_enclosure_type __weak smbios_mainboard_enclosure_type(void) +__weak smbios_enclosure_type smbios_mainboard_enclosure_type(void) { if (CONFIG(SYSTEM_TYPE_LAPTOP)) return SMBIOS_ENCLOSURE_LAPTOP; @@ -543,57 +522,57 @@ smbios_enclosure_type __weak smbios_mainboard_enclosure_type(void) return SMBIOS_ENCLOSURE_DESKTOP; } -const char *__weak smbios_system_serial_number(void) +__weak const char *smbios_system_serial_number(void) { return smbios_mainboard_serial_number(); } -const char *__weak smbios_system_version(void) +__weak const char *smbios_system_version(void) { return smbios_mainboard_version(); } -const char *__weak smbios_system_manufacturer(void) +__weak const char *smbios_system_manufacturer(void) { return smbios_mainboard_manufacturer(); } -const char *__weak smbios_system_product_name(void) +__weak const char *smbios_system_product_name(void) { return smbios_mainboard_product_name(); } -void __weak smbios_system_set_uuid(u8 *uuid) +__weak void smbios_system_set_uuid(u8 *uuid) { /* leave all zero */ } -unsigned int __weak smbios_cpu_get_max_speed_mhz(void) +__weak unsigned int smbios_cpu_get_max_speed_mhz(void) { return 0; /* Unknown */ } -unsigned int __weak smbios_cpu_get_current_speed_mhz(void) +__weak unsigned int smbios_cpu_get_current_speed_mhz(void) { return 0; /* Unknown */ } -const char *__weak smbios_system_sku(void) +__weak const char *smbios_system_sku(void) { return ""; } -const char * __weak smbios_chassis_version(void) +__weak const char *smbios_chassis_version(void) { return ""; } -const char * __weak smbios_chassis_serial_number(void) +__weak const char *smbios_chassis_serial_number(void) { return ""; } -const char * __weak smbios_processor_serial_number(void) +__weak const char *smbios_processor_serial_number(void) { return ""; } @@ -619,12 +598,9 @@ static int smbios_write_type1(unsigned long *current, int handle) t->type = SMBIOS_SYSTEM_INFORMATION; t->handle = handle; t->length = len - 2; - t->manufacturer = smbios_add_string(t->eos, - smbios_system_manufacturer()); - t->product_name = smbios_add_string(t->eos, - smbios_system_product_name()); - t->serial_number = smbios_add_string(t->eos, - smbios_system_serial_number()); + t->manufacturer = smbios_add_string(t->eos, smbios_system_manufacturer()); + t->product_name = smbios_add_string(t->eos, smbios_system_product_name()); + t->serial_number = smbios_add_string(t->eos, smbios_system_serial_number()); t->sku = smbios_add_string(t->eos, smbios_system_sku()); t->version = smbios_add_string(t->eos, smbios_system_version()); #ifdef CONFIG_MAINBOARD_FAMILY @@ -636,8 +612,7 @@ static int smbios_write_type1(unsigned long *current, int handle) return len; } -static int smbios_write_type2(unsigned long *current, int handle, - const int chassis_handle) +static int smbios_write_type2(unsigned long *current, int handle, const int chassis_handle) { struct smbios_type2 *t = (struct smbios_type2 *)*current; int len = sizeof(struct smbios_type2); @@ -646,12 +621,9 @@ static int smbios_write_type2(unsigned long *current, int handle, t->type = SMBIOS_BOARD_INFORMATION; t->handle = handle; t->length = len - 2; - t->manufacturer = smbios_add_string(t->eos, - smbios_mainboard_manufacturer()); - t->product_name = smbios_add_string(t->eos, - smbios_mainboard_product_name()); - t->serial_number = smbios_add_string(t->eos, - smbios_mainboard_serial_number()); + t->manufacturer = smbios_add_string(t->eos, smbios_mainboard_manufacturer()); + t->product_name = smbios_add_string(t->eos, smbios_mainboard_product_name()); + t->serial_number = smbios_add_string(t->eos, smbios_mainboard_serial_number()); t->version = smbios_add_string(t->eos, smbios_mainboard_version()); t->asset_tag = smbios_add_string(t->eos, smbios_mainboard_asset_tag()); t->feature_flags = smbios_mainboard_feature_flags(); @@ -673,8 +645,7 @@ static int smbios_write_type3(unsigned long *current, int handle) t->type = SMBIOS_SYSTEM_ENCLOSURE; t->handle = handle; t->length = len - 2; - t->manufacturer = smbios_add_string(t->eos, - smbios_system_manufacturer()); + t->manufacturer = smbios_add_string(t->eos, smbios_system_manufacturer()); t->bootup_state = SMBIOS_STATE_SAFE; t->power_supply_state = SMBIOS_STATE_SAFE; t->thermal_state = SMBIOS_STATE_SAFE; @@ -742,8 +713,7 @@ static int smbios_write_type4(unsigned long *current, int handle) t->l2_cache_handle = 0xffff; t->l3_cache_handle = 0xffff; t->serial_number = smbios_add_string(t->eos, smbios_processor_serial_number()); - t->status = SMBIOS_PROCESSOR_STATUS_CPU_ENABLED | - SMBIOS_PROCESSOR_STATUS_POPULATED; + t->status = SMBIOS_PROCESSOR_STATUS_CPU_ENABLED | SMBIOS_PROCESSOR_STATUS_POPULATED; t->processor_upgrade = get_socket_type(); len = t->length + smbios_string_table_len(t->eos); if (cpu_have_cpuid() && cpuid_get_max_func() >= 0x16) { @@ -762,15 +732,14 @@ static int smbios_write_type4(unsigned long *current, int handle) * Fill in some fields with constant values, as gathering the information * from CPUID is impossible. */ -static int -smbios_write_type7(unsigned long *current, - const int handle, - const u8 level, - const u8 sram_type, - const enum smbios_cache_associativity associativity, - const enum smbios_cache_type type, - const size_t max_cache_size, - const size_t cache_size) +static int smbios_write_type7(unsigned long *current, + const int handle, + const u8 level, + const u8 sram_type, + const enum smbios_cache_associativity associativity, + const enum smbios_cache_type type, + const size_t max_cache_size, + const size_t cache_size) { struct smbios_type7 *t = (struct smbios_type7 *)*current; int len = sizeof(struct smbios_type7); @@ -837,8 +806,7 @@ smbios_write_type7(unsigned long *current, } /* Convert the associativity as integer to the SMBIOS enum if available */ -static enum smbios_cache_associativity -smbios_cache_associativity(const u8 num) +static enum smbios_cache_associativity smbios_cache_associativity(const u8 num) { switch (num) { case 1: @@ -924,8 +892,7 @@ static int smbios_write_type7_cache_parameters(unsigned long *current, const size_t partitions = CPUID_CACHE_PHYS_LINE(res) + 1; const size_t cache_line_size = CPUID_CACHE_COHER_LINE(res) + 1; const size_t number_of_sets = CPUID_CACHE_NO_OF_SETS(res) + 1; - const size_t cache_size = assoc * partitions * cache_line_size * - number_of_sets; + const size_t cache_size = assoc * partitions * cache_line_size * number_of_sets; if (!cache_type) /* No more caches in the system */ @@ -1124,8 +1091,7 @@ static int smbios_write_type17(unsigned long *current, int *handle, int type16) return 0; /* can't find mem info in cbmem */ printk(BIOS_INFO, "Create SMBIOS type 17\n"); - for (i = 0; i < meminfo->dimm_cnt && i < ARRAY_SIZE(meminfo->dimm); - i++) { + for (i = 0; i < meminfo->dimm_cnt && i < ARRAY_SIZE(meminfo->dimm); i++) { struct dimm_info *dimm; dimm = &meminfo->dimm[i]; /* @@ -1272,7 +1238,7 @@ static int smbios_write_type127(unsigned long *current, int handle) /* Generate Type41 entries from devicetree */ static int smbios_walk_device_tree_type41(struct device *dev, int *handle, - unsigned long *current) + unsigned long *current) { static u8 type41_inst_cnt[SMBIOS_DEVICE_TYPE_COUNT + 1] = {}; @@ -1352,16 +1318,14 @@ static int smbios_walk_device_tree_type9(struct device *dev, int *handle, dev->path.pci.devfn); } -static int smbios_walk_device_tree(struct device *tree, int *handle, - unsigned long *current) +static int smbios_walk_device_tree(struct device *tree, int *handle, unsigned long *current) { struct device *dev; int len = 0; for (dev = tree; dev; dev = dev->next) { if (dev->enabled && dev->ops && dev->ops->get_smbios_data) { - printk(BIOS_INFO, "%s (%s)\n", dev_path(dev), - dev_name(dev)); + printk(BIOS_INFO, "%s (%s)\n", dev_path(dev), dev_name(dev)); len += dev->ops->get_smbios_data(dev, handle, current); } len += smbios_walk_device_tree_type9(dev, handle, current); @@ -1391,42 +1355,32 @@ unsigned long smbios_write_tables(unsigned long current) current = ALIGN_UP(current, 16); tables = current; - update_max(len, max_struct_size, smbios_write_type0(¤t, - handle++)); - update_max(len, max_struct_size, smbios_write_type1(¤t, - handle++)); - update_max(len, max_struct_size, smbios_write_type2(¤t, - handle, handle + 1)); /* The chassis handle is the next one */ + update_max(len, max_struct_size, smbios_write_type0(¤t, handle++)); + update_max(len, max_struct_size, smbios_write_type1(¤t, handle++)); + + /* The chassis handle is the next one */ + update_max(len, max_struct_size, smbios_write_type2(¤t, handle, handle + 1)); handle++; - update_max(len, max_struct_size, smbios_write_type3(¤t, - handle++)); + update_max(len, max_struct_size, smbios_write_type3(¤t, handle++)); struct smbios_type4 *type4 = (struct smbios_type4 *)current; - update_max(len, max_struct_size, smbios_write_type4(¤t, - handle++)); - len += smbios_write_type7_cache_parameters(¤t, &handle, - &max_struct_size, type4); - update_max(len, max_struct_size, smbios_write_type11(¤t, - &handle)); + update_max(len, max_struct_size, smbios_write_type4(¤t, handle++)); + len += smbios_write_type7_cache_parameters(¤t, &handle, &max_struct_size, type4); + update_max(len, max_struct_size, smbios_write_type11(¤t, &handle)); if (CONFIG(ELOG)) update_max(len, max_struct_size, - elog_smbios_write_type15(¤t,handle++)); + elog_smbios_write_type15(¤t, handle++)); const int type16 = handle; - update_max(len, max_struct_size, smbios_write_type16(¤t, - &handle)); - update_max(len, max_struct_size, smbios_write_type17(¤t, - &handle, type16)); - update_max(len, max_struct_size, smbios_write_type19(¤t, - &handle)); - update_max(len, max_struct_size, smbios_write_type32(¤t, - handle++)); + update_max(len, max_struct_size, smbios_write_type16(¤t, &handle)); + update_max(len, max_struct_size, smbios_write_type17(¤t, &handle, type16)); + update_max(len, max_struct_size, smbios_write_type19(¤t, &handle)); + update_max(len, max_struct_size, smbios_write_type32(¤t, handle++)); update_max(len, max_struct_size, smbios_walk_device_tree(all_devices, - &handle, ¤t)); + &handle, ¤t)); - update_max(len, max_struct_size, smbios_write_type127(¤t, - handle++)); + update_max(len, max_struct_size, smbios_write_type127(¤t, handle++)); /* Install SMBIOS 2.1 entry point */ memset(se, 0, sizeof(struct smbios_entry)); @@ -1442,8 +1396,7 @@ unsigned long smbios_write_tables(unsigned long current) se->struct_table_length = len; se->intermediate_checksum = smbios_checksum((u8 *)se + 0x10, - sizeof(struct smbios_entry) - - 0x10); + sizeof(struct smbios_entry) - 0x10); se->checksum = smbios_checksum((u8 *)se, sizeof(struct smbios_entry)); /* Install SMBIOS 3.0 entry point */ |