Lines Matching +full:- +full:- +full:version

4  * Copyright (C) 2009 Hewlett-Packard Development Company, L.P.
11 * This work is licensed under the terms of the GNU GPL, version 2. See
12 * the COPYING file in the top-level directory.
14 * Contributions after 2012-01-13 are licensed under the terms of the
15 * GNU GPL, version 2 or (at your option) any later version.
21 #include "qemu/config-file.h"
34 * SMBIOS tables provided by user with '-smbios file=<foo>' option
59 const char *manufacturer, *product, *version, *serial, *asset, *location; member
63 const char *manufacturer, *version, *serial, *asset, *sku; member
75 const char *sock_pfx, *manufacturer, *version, *serial, *asset, *part; member
166 .name = "version",
168 .help = "version number",
199 .name = "version",
201 .help = "version number",
236 .name = "version",
238 .help = "version number",
265 .name = "version",
267 .help = "version number",
298 .name = "version",
300 .help = "version number",
302 .name = "max-speed",
306 .name = "current-speed",
322 .name = "processor-family",
326 .name = "processor-id",
506 * entry point uses a 16-bit integer, so we're limited
566 SMBIOS_TABLE_SET_STR(0, bios_version_str, smbios_type0.version); in smbios_build_type_0_table()
568 t->bios_starting_address_segment = cpu_to_le16(0xE800); /* from SeaBIOS */ in smbios_build_type_0_table()
572 t->bios_rom_size = 0; /* hardcoded in SeaBIOS with FIXME comment */ in smbios_build_type_0_table()
574 t->bios_characteristics = cpu_to_le64(0x08); /* Not supported */ in smbios_build_type_0_table()
575 t->bios_characteristics_extension_bytes[0] = 0; in smbios_build_type_0_table()
576 t->bios_characteristics_extension_bytes[1] = 0x14; /* TCD/SVVP | VM */ in smbios_build_type_0_table()
578 t->bios_characteristics_extension_bytes[1] |= 0x08; /* |= UEFI */ in smbios_build_type_0_table()
582 t->system_bios_major_release = smbios_type0.major; in smbios_build_type_0_table()
583 t->system_bios_minor_release = smbios_type0.minor; in smbios_build_type_0_table()
585 t->system_bios_major_release = 0; in smbios_build_type_0_table()
586 t->system_bios_minor_release = 0; in smbios_build_type_0_table()
590 t->embedded_controller_major_release = 0xFF; in smbios_build_type_0_table()
591 t->embedded_controller_minor_release = 0xFF; in smbios_build_type_0_table()
597 * format specified by SMBIOS version 2.6.
602 uuid->time_low = bswap32(uuid->time_low); in smbios_encode_uuid()
603 uuid->time_mid = bswap16(uuid->time_mid); in smbios_encode_uuid()
604 uuid->time_hi_and_version = bswap16(uuid->time_hi_and_version); in smbios_encode_uuid()
613 SMBIOS_TABLE_SET_STR(1, version_str, smbios_type1.version); in smbios_build_type_1_table()
616 smbios_encode_uuid(&t->uuid, &qemu_uuid); in smbios_build_type_1_table()
618 memset(&t->uuid, 0, 16); in smbios_build_type_1_table()
620 t->wake_up_type = 0x06; /* power switch */ in smbios_build_type_1_table()
633 SMBIOS_TABLE_SET_STR(2, version_str, type2.version); in smbios_build_type_2_table()
636 t->feature_flags = 0x01; /* Motherboard */ in smbios_build_type_2_table()
638 t->chassis_handle = cpu_to_le16(0x300); /* Type 3 (System enclosure) */ in smbios_build_type_2_table()
639 t->board_type = 0x0A; /* Motherboard */ in smbios_build_type_2_table()
640 t->contained_element_count = 0; in smbios_build_type_2_table()
650 t->type = 0x01; /* Other */ in smbios_build_type_3_table()
651 SMBIOS_TABLE_SET_STR(3, version_str, type3.version); in smbios_build_type_3_table()
654 t->boot_up_state = 0x03; /* Safe */ in smbios_build_type_3_table()
655 t->power_supply_state = 0x03; /* Safe */ in smbios_build_type_3_table()
656 t->thermal_state = 0x03; /* Safe */ in smbios_build_type_3_table()
657 t->security_status = 0x02; /* Unknown */ in smbios_build_type_3_table()
658 t->oem_defined = cpu_to_le32(0); in smbios_build_type_3_table()
659 t->height = 0; in smbios_build_type_3_table()
660 t->number_of_power_cords = 0; in smbios_build_type_3_table()
661 t->contained_element_count = 0; in smbios_build_type_3_table()
662 t->contained_element_record_length = 0; in smbios_build_type_3_table()
686 t->processor_type = 0x03; /* CPU */ in smbios_build_type_4_table()
687 t->processor_family = 0xfe; /* use Processor Family 2 field */ in smbios_build_type_4_table()
690 t->processor_id[0] = cpu_to_le32(smbios_cpuid_version); in smbios_build_type_4_table()
691 t->processor_id[1] = cpu_to_le32(smbios_cpuid_features); in smbios_build_type_4_table()
693 t->processor_id[0] = cpu_to_le32((uint32_t)type4.processor_id); in smbios_build_type_4_table()
694 t->processor_id[1] = cpu_to_le32(type4.processor_id >> 32); in smbios_build_type_4_table()
696 SMBIOS_TABLE_SET_STR(4, processor_version_str, type4.version); in smbios_build_type_4_table()
697 t->voltage = 0; in smbios_build_type_4_table()
698 t->external_clock = cpu_to_le16(0); /* Unknown */ in smbios_build_type_4_table()
699 t->max_speed = cpu_to_le16(type4.max_speed); in smbios_build_type_4_table()
700 t->current_speed = cpu_to_le16(type4.current_speed); in smbios_build_type_4_table()
701 t->status = 0x41; /* Socket populated, CPU enabled */ in smbios_build_type_4_table()
702 t->processor_upgrade = 0x01; /* Other */ in smbios_build_type_4_table()
703 t->l1_cache_handle = cpu_to_le16(0xFFFF); /* N/A */ in smbios_build_type_4_table()
704 t->l2_cache_handle = cpu_to_le16(0xFFFF); /* N/A */ in smbios_build_type_4_table()
705 t->l3_cache_handle = cpu_to_le16(0xFFFF); /* N/A */ in smbios_build_type_4_table()
713 t->core_count = (cores_per_socket > 255) ? 0xFF : cores_per_socket; in smbios_build_type_4_table()
714 t->core_enabled = t->core_count; in smbios_build_type_4_table()
716 t->thread_count = (threads_per_socket > 255) ? 0xFF : threads_per_socket; in smbios_build_type_4_table()
718 t->processor_characteristics = cpu_to_le16(0x02); /* Unknown */ in smbios_build_type_4_table()
719 t->processor_family2 = cpu_to_le16(type4.processor_family); in smbios_build_type_4_table()
722 t->core_count2 = t->core_enabled2 = cpu_to_le16(cores_per_socket); in smbios_build_type_4_table()
723 t->thread_count2 = cpu_to_le16(threads_per_socket); in smbios_build_type_4_table()
724 } else if (t->core_count == 0xFF || t->thread_count == 0xFF) { in smbios_build_type_4_table()
727 "-machine smbios-entry-point-type=64 option to enable " in smbios_build_type_4_table()
744 SMBIOS_TABLE_SET_STR(8, internal_reference_str, t8->internal_reference); in smbios_build_type_8_table()
745 SMBIOS_TABLE_SET_STR(8, external_reference_str, t8->external_reference); in smbios_build_type_8_table()
747 t->internal_connector_type = 0x0; in smbios_build_type_8_table()
748 t->external_connector_type = t8->connector_type; in smbios_build_type_8_table()
749 t->port_type = t8->port_type; in smbios_build_type_8_table()
764 SMBIOS_TABLE_SET_STR(9, slot_designation, t9->slot_designation); in smbios_build_type_9_table()
765 t->slot_type = t9->slot_type; in smbios_build_type_9_table()
766 t->slot_data_bus_width = t9->slot_data_bus_width; in smbios_build_type_9_table()
767 t->current_usage = t9->current_usage; in smbios_build_type_9_table()
768 t->slot_length = t9->slot_length; in smbios_build_type_9_table()
769 t->slot_id = t9->slot_id; in smbios_build_type_9_table()
770 t->slot_characteristics1 = t9->slot_characteristics1; in smbios_build_type_9_table()
771 t->slot_characteristics2 = t9->slot_characteristics2; in smbios_build_type_9_table()
773 if (t9->pcidev) { in smbios_build_type_9_table()
775 int rc = pci_qdev_find_device(t9->pcidev, &pdev); in smbios_build_type_9_table()
779 t9->pcidev, t9->slot_designation); in smbios_build_type_9_table()
792 t9->pcidev); in smbios_build_type_9_table()
795 t->segment_group_number = cpu_to_le16(0); in smbios_build_type_9_table()
796 t->bus_number = pci_dev_bus_num(pdev); in smbios_build_type_9_table()
797 t->device_number = pdev->devfn; in smbios_build_type_9_table()
800 * Per SMBIOS spec, For slots that are not of the PCI, AGP, PCI-X, in smbios_build_type_9_table()
801 * or PCI-Express type that do not have bus/device/function in smbios_build_type_9_table()
805 t->segment_group_number = 0xff; in smbios_build_type_9_table()
806 t->bus_number = 0xff; in smbios_build_type_9_table()
807 t->device_number = 0xff; in smbios_build_type_9_table()
827 t->count = type11.nvalues; in smbios_build_type_11_table()
846 t->location = 0x01; /* Other */ in smbios_build_type_16_table()
847 t->use = 0x03; /* System memory */ in smbios_build_type_16_table()
848 t->error_correction = 0x06; /* Multi-bit ECC (for Microsoft, per SeaBIOS) */ in smbios_build_type_16_table()
849 size_kb = QEMU_ALIGN_UP(current_machine->ram_size, KiB) / KiB; in smbios_build_type_16_table()
851 t->maximum_capacity = cpu_to_le32(size_kb); in smbios_build_type_16_table()
852 t->extended_maximum_capacity = cpu_to_le64(0); in smbios_build_type_16_table()
854 t->maximum_capacity = cpu_to_le32(MAX_T16_STD_SZ); in smbios_build_type_16_table()
855 t->extended_maximum_capacity = cpu_to_le64(current_machine->ram_size); in smbios_build_type_16_table()
857 t->memory_error_information_handle = cpu_to_le16(0xFFFE); /* Not provided */ in smbios_build_type_16_table()
858 t->number_of_memory_devices = cpu_to_le16(dimm_cnt); in smbios_build_type_16_table()
863 #define MAX_T17_STD_SZ 0x7FFF /* (32G - 1M), in Megabytes */
873 t->physical_memory_array_handle = cpu_to_le16(0x1000); /* Type 16 above */ in smbios_build_type_17_table()
874 t->memory_error_information_handle = cpu_to_le16(0xFFFE); /* Not provided */ in smbios_build_type_17_table()
875 t->total_width = cpu_to_le16(0xFFFF); /* Unknown */ in smbios_build_type_17_table()
876 t->data_width = cpu_to_le16(0xFFFF); /* Unknown */ in smbios_build_type_17_table()
879 t->size = cpu_to_le16(size_mb); in smbios_build_type_17_table()
880 t->extended_size = cpu_to_le32(0); in smbios_build_type_17_table()
883 t->size = cpu_to_le16(MAX_T17_STD_SZ); in smbios_build_type_17_table()
884 t->extended_size = cpu_to_le32(size_mb); in smbios_build_type_17_table()
886 t->form_factor = 0x09; /* DIMM */ in smbios_build_type_17_table()
887 t->device_set = 0; /* Not in a set */ in smbios_build_type_17_table()
891 t->memory_type = 0x07; /* RAM */ in smbios_build_type_17_table()
892 t->type_detail = cpu_to_le16(0x02); /* Other */ in smbios_build_type_17_table()
893 t->speed = cpu_to_le16(type17.speed); in smbios_build_type_17_table()
898 t->attributes = 0; /* Unknown */ in smbios_build_type_17_table()
899 t->configured_clock_speed = t->speed; /* reuse value for max speed */ in smbios_build_type_17_table()
900 t->minimum_voltage = cpu_to_le16(0); /* Unknown */ in smbios_build_type_17_table()
901 t->maximum_voltage = cpu_to_le16(0); /* Unknown */ in smbios_build_type_17_table()
902 t->configured_voltage = cpu_to_le16(0); /* Unknown */ in smbios_build_type_17_table()
915 end = start + size - 1; in smbios_build_type_19_table()
920 t->starting_address = cpu_to_le32(start_kb); in smbios_build_type_19_table()
921 t->ending_address = cpu_to_le32(end_kb); in smbios_build_type_19_table()
922 t->extended_starting_address = in smbios_build_type_19_table()
923 t->extended_ending_address = cpu_to_le64(0); in smbios_build_type_19_table()
925 t->starting_address = t->ending_address = cpu_to_le32(UINT32_MAX); in smbios_build_type_19_table()
926 t->extended_starting_address = cpu_to_le64(start); in smbios_build_type_19_table()
927 t->extended_ending_address = cpu_to_le64(end); in smbios_build_type_19_table()
929 t->memory_array_handle = cpu_to_le16(0x1000); /* Type 16 above */ in smbios_build_type_19_table()
930 t->partition_width = 1; /* One device per row */ in smbios_build_type_19_table()
939 memset(t->reserved, 0, 6); in smbios_build_type_32_table()
940 t->boot_status = 0; /* No errors detected */ in smbios_build_type_32_table()
953 SMBIOS_TABLE_SET_STR(41, reference_designation_str, t41->designation); in smbios_build_type_41_table()
954 t->device_type = t41->kind; in smbios_build_type_41_table()
955 t->device_type_instance = t41->instance; in smbios_build_type_41_table()
956 t->segment_group_number = cpu_to_le16(0); in smbios_build_type_41_table()
957 t->bus_number = 0; in smbios_build_type_41_table()
958 t->device_number = 0; in smbios_build_type_41_table()
960 if (t41->pcidev) { in smbios_build_type_41_table()
962 int rc = pci_qdev_find_device(t41->pcidev, &pdev); in smbios_build_type_41_table()
966 t41->pcidev, t41->designation); in smbios_build_type_41_table()
979 t41->pcidev); in smbios_build_type_41_table()
982 t->segment_group_number = cpu_to_le16(0); in smbios_build_type_41_table()
983 t->bus_number = pci_dev_bus_num(pdev); in smbios_build_type_41_table()
984 t->device_number = pdev->devfn; in smbios_build_type_41_table()
998 void smbios_set_cpuid(uint32_t version, uint32_t features) in smbios_set_cpuid() argument
1000 smbios_cpuid_version = version; in smbios_set_cpuid()
1017 const char *version) in smbios_set_defaults() argument
1023 SMBIOS_SET_DEFAULT(smbios_type1.version, version); in smbios_set_defaults()
1026 SMBIOS_SET_DEFAULT(type2.version, version); in smbios_set_defaults()
1028 SMBIOS_SET_DEFAULT(type3.version, version); in smbios_set_defaults()
1031 SMBIOS_SET_DEFAULT(type4.version, version); in smbios_set_defaults()
1114 assert(ms->smp.sockets >= 1); in smbios_get_tables_ep()
1116 for (i = 0; i < ms->smp.sockets; i++) { in smbios_get_tables_ep()
1127 #define GET_DIMM_SZ ((i < dimm_cnt - 1) ? mc->smbios_memory_device_size \ in smbios_get_tables_ep()
1128 : ((current_machine->ram_size - 1) % mc->smbios_memory_device_size) + 1) in smbios_get_tables_ep()
1130 dimm_cnt = QEMU_ALIGN_UP(current_machine->ram_size, in smbios_get_tables_ep()
1131 mc->smbios_memory_device_size) / in smbios_get_tables_ep()
1132 mc->smbios_memory_device_size; in smbios_get_tables_ep()
1139 * the two tables (T19_BASE - T17_BASE = 512) is not enough. in smbios_get_tables_ep()
1141 offset = (dimm_cnt > (T19_BASE - T17_BASE)) ? \ in smbios_get_tables_ep()
1142 dimm_cnt - (T19_BASE - T17_BASE) : 0; in smbios_get_tables_ep()
1159 assert((mem_array_size + offset) < (T32_BASE - T19_BASE)); in smbios_get_tables_ep()
1166 if (!smbios_check_type4_count(ms->smp.sockets, errp)) { in smbios_get_tables_ep()
1266 return -1; in save_opt_one()
1278 return -1; in save_opt_one()
1283 return -1; in save_opt_one()
1293 *opt->dest = g_renew(char *, *opt->dest, (*opt->ndest) + 1); in save_opt_one()
1294 (*opt->dest)[*opt->ndest] = (char *)g_byte_array_free(data, FALSE); in save_opt_one()
1295 (*opt->ndest)++; in save_opt_one()
1298 *opt->dest = g_renew(char *, *opt->dest, (*opt->ndest) + 1); in save_opt_one()
1299 (*opt->dest)[*opt->ndest] = g_strdup(value); in save_opt_one()
1300 (*opt->ndest)++; in save_opt_one()
1303 return -1; in save_opt_one()
1335 if (size == -1 || size < sizeof(struct smbios_structure_header)) { in smbios_entry_add()
1354 if (header->type <= SMBIOS_MAX_TYPE) { in smbios_entry_add()
1355 if (test_bit(header->type, smbios_have_fields_bitmap)) { in smbios_entry_add()
1358 header->type); in smbios_entry_add()
1361 set_bit(header->type, smbios_have_binfile_bitmap); in smbios_entry_add()
1364 if (header->type == 4) { in smbios_entry_add()
1404 save_opt(&smbios_type0.version, opts, "version"); in smbios_entry_add()
1424 save_opt(&smbios_type1.version, opts, "version"); in smbios_entry_add()
1444 save_opt(&type2.version, opts, "version"); in smbios_entry_add()
1454 save_opt(&type3.version, opts, "version"); in smbios_entry_add()
1465 "processor-family", in smbios_entry_add()
1468 save_opt(&type4.version, opts, "version"); in smbios_entry_add()
1473 type4.processor_id = qemu_opt_get_number(opts, "processor-id", 0); in smbios_entry_add()
1474 type4.max_speed = qemu_opt_get_number(opts, "max-speed", in smbios_entry_add()
1476 type4.current_speed = qemu_opt_get_number(opts, "current-speed", in smbios_entry_add()
1490 save_opt(&t8_i->internal_reference, opts, "internal_reference"); in smbios_entry_add()
1491 save_opt(&t8_i->external_reference, opts, "external_reference"); in smbios_entry_add()
1492 t8_i->connector_type = qemu_opt_get_number(opts, in smbios_entry_add()
1494 t8_i->port_type = qemu_opt_get_number(opts, "port_type", 0); in smbios_entry_add()
1503 save_opt(&t->slot_designation, opts, "slot_designation"); in smbios_entry_add()
1504 t->slot_type = qemu_opt_get_number(opts, "slot_type", 0); in smbios_entry_add()
1505 t->slot_data_bus_width = in smbios_entry_add()
1507 t->current_usage = qemu_opt_get_number(opts, "current_usage", 0); in smbios_entry_add()
1508 t->slot_length = qemu_opt_get_number(opts, "slot_length", 0); in smbios_entry_add()
1509 t->slot_id = qemu_opt_get_number(opts, "slot_id", 0); in smbios_entry_add()
1510 t->slot_characteristics1 = in smbios_entry_add()
1512 t->slot_characteristics2 = in smbios_entry_add()
1514 save_opt(&t->pcidev, opts, "pcidev"); in smbios_entry_add()
1546 save_opt(&t41_i->designation, opts, "designation"); in smbios_entry_add()
1547 t41_i->kind = qapi_enum_parse(&type41_kind_lookup, in smbios_entry_add()
1550 t41_i->kind |= 0x80; /* enabled */ in smbios_entry_add()
1556 t41_i->instance = qemu_opt_get_number(opts, "instance", 1); in smbios_entry_add()
1557 save_opt(&t41_i->pcidev, opts, "pcidev"); in smbios_entry_add()