Lines Matching +full:uuid +full:- +full:dev
24 #include "hw/acpi/aml-build.h"
63 for (i = maxlen - len; i > 0; i--) { in build_append_padded_str()
70 g_array_append_vals(array, val->data, val->len); in build_append_array()
80 entry->base = base; in crs_range_insert()
81 entry->limit = limit; in crs_range_insert()
94 range_set->io_ranges = g_ptr_array_new_with_free_func(crs_range_free); in crs_range_set_init()
95 range_set->mem_ranges = g_ptr_array_new_with_free_func(crs_range_free); in crs_range_set_init()
96 range_set->mem_64bit_ranges = in crs_range_set_init()
102 g_ptr_array_free(range_set->io_ranges, true); in crs_range_set_free()
103 g_ptr_array_free(range_set->mem_ranges, true); in crs_range_set_free()
104 g_ptr_array_free(range_set->mem_64bit_ranges, true); in crs_range_set_free()
112 if (entry_a->base < entry_b->base) { in crs_range_compare()
113 return -1; in crs_range_compare()
114 } else if (entry_a->base > entry_b->base) { in crs_range_compare()
122 * crs_replace_with_free_ranges - given the 'used' ranges within [start - end]
124 * Example: If the input array is { [a1 - a2],[b1 - b2] }, the function
125 * will return { [base - a1], [a2 - b1], [b2 - limit] }.
135 for (i = 0; i < ranges->len; i++) { in crs_replace_with_free_ranges()
138 if (free_base < used->base) { in crs_replace_with_free_ranges()
139 crs_range_insert(free_ranges, free_base, used->base - 1); in crs_replace_with_free_ranges()
142 free_base = used->limit + 1; in crs_replace_with_free_ranges()
150 for (i = 0; i < free_ranges->len; i++) { in crs_replace_with_free_ranges()
158 * crs_range_merge - merges adjacent ranges in the given array.
168 if (!range->len) { in crs_range_merge()
175 range_base = entry->base; in crs_range_merge()
176 range_limit = entry->limit; in crs_range_merge()
177 for (i = 1; i < range->len; i++) { in crs_range_merge()
179 if (entry->base - 1 == range_limit) { in crs_range_merge()
180 range_limit = entry->limit; in crs_range_merge()
183 range_base = entry->base; in crs_range_merge()
184 range_limit = entry->limit; in crs_range_merge()
190 for (i = 0; i < tmp->len; i++) { in crs_range_merge()
192 crs_range_insert(range, entry->base, entry->limit); in crs_range_merge()
207 g_array_append_vals(array, "____", ACPI_NAMESEG_LEN - len); in build_append_nameseg()
285 PACKAGE_LENGTH_1BYTE_SHIFT = 6, /* Up to 63 - use extra 2 bits. */
328 length &= (1 << PACKAGE_LENGTH_4BYTE_SHIFT) - 1; in build_prepend_package_length()
333 length &= (1 << PACKAGE_LENGTH_3BYTE_SHIFT) - 1; in build_prepend_package_length()
338 length &= (1 << PACKAGE_LENGTH_2BYTE_SHIFT) - 1; in build_prepend_package_length()
345 byte = ((length_bytes - 1) << PACKAGE_LENGTH_1BYTE_SHIFT) | length; in build_prepend_package_length()
361 build_prepend_package_length(package, package->len, true); in build_package()
405 * @access_width must be 0, see ACPI 2.0:Table 5-1
439 offset = array->len; in build_append_named_dword()
441 assert(array->len == offset + 4); in build_append_named_dword()
453 var->block_flags = AML_NO_OPCODE; in aml_alloc()
454 var->buf = build_alloc_array(); in aml_alloc()
462 var->op = op; in aml_opcode()
463 var->block_flags = AML_OPCODE; in aml_opcode()
471 var->op = op; in aml_bundle()
472 var->block_flags = flags; in aml_bundle()
479 build_free_array(var->buf); in aml_free()
502 build_append_int(data, array->len); in build_buffer()
503 g_array_prepend_vals(array, data->data, data->len); in build_buffer()
511 build_append_array(buf, child->buf); in aml_append()
513 switch (child->block_flags) { in aml_append()
515 build_append_byte(parent_ctx->buf, child->op); in aml_append()
518 build_extop_package(buf, child->op); in aml_append()
521 build_package(buf, child->op); in aml_append()
532 build_buffer(buf, child->op); in aml_append()
539 build_append_array(parent_ctx->buf, buf); in aml_append()
549 build_append_namestringv(var->buf, name_format, ap); in aml_scope()
566 build_append_byte(var->buf, 0x5B); /* ExtOpPrefix */ in aml_debug()
567 build_append_byte(var->buf, 0x31); /* DebugOp */ in aml_debug()
578 build_append_int(var->buf, val); in aml_int()
591 build_append_namestringv(var->buf, name_format, ap); in aml_name()
600 build_append_namestring(var->buf, "%s", name); in aml_name_decl()
619 build_append_byte(var->buf, 0x00 /* NullNameOp */); in aml_to_integer()
631 build_append_byte(var->buf, 0x00 /* NullNameOp */); in aml_to_hexstring()
644 build_append_byte(var->buf, 0x00 /* NullNameOp */); in aml_to_buffer()
657 build_append_byte(var->buf, 0x00 /* NullNameOp */); in aml_to_decimalstring()
673 * @op: 1-byte opcode
693 build_append_byte(var->buf, 0x00 /* NullNameOp */); in build_opcode_2arg_dst()
803 build_append_namestring(var->buf, "%s", method); in aml_call0()
811 build_append_namestring(var->buf, "%s", method); in aml_call1()
820 build_append_namestring(var->buf, "%s", method); in aml_call2()
830 build_append_namestring(var->buf, "%s", method); in aml_call3()
841 build_append_namestring(var->buf, "%s", method); in aml_call4()
854 build_append_namestring(var->buf, "%s", method); in aml_call5()
868 build_append_namestring(var->buf, "%s", method); in aml_call6()
906 build_append_byte(var->buf, 0x8C); /* GPIO Connection Descriptor */ in aml_gpio_connection()
907 build_append_int_noprefix(var->buf, length, 2); /* Length */ in aml_gpio_connection()
908 build_append_byte(var->buf, 1); /* Revision ID */ in aml_gpio_connection()
909 build_append_byte(var->buf, type); /* GPIO Connection Type */ in aml_gpio_connection()
911 build_append_int_noprefix(var->buf, con_and_pro, 2); in aml_gpio_connection()
913 build_append_int_noprefix(var->buf, flags, 2); in aml_gpio_connection()
914 /* Pin Configuration 0 = Default 1 = Pull-up 2 = Pull-down 3 = No Pull */ in aml_gpio_connection()
915 build_append_byte(var->buf, pin_config); in aml_gpio_connection()
917 build_append_int_noprefix(var->buf, output_drive, 2); in aml_gpio_connection()
919 build_append_int_noprefix(var->buf, debounce_timeout, 2); in aml_gpio_connection()
921 build_append_int_noprefix(var->buf, pin_table_offset, 2); in aml_gpio_connection()
922 build_append_byte(var->buf, 0); /* Resource Source Index */ in aml_gpio_connection()
924 build_append_int_noprefix(var->buf, resource_source_name_offset, 2); in aml_gpio_connection()
926 build_append_int_noprefix(var->buf, vendor_data_offset, 2); in aml_gpio_connection()
928 build_append_int_noprefix(var->buf, vendor_data_len, 2); in aml_gpio_connection()
931 build_append_int_noprefix(var->buf, pin_list[i], 2); in aml_gpio_connection()
935 build_append_namestring(var->buf, "%s", resource_source_name); in aml_gpio_connection()
936 build_append_byte(var->buf, '\0'); in aml_gpio_connection()
938 /* Vendor-defined Data */ in aml_gpio_connection()
940 g_array_append_vals(var->buf, vendor_data, vendor_data_len); in aml_gpio_connection()
967 * ACPI 1.0b: 6.4.3.4 32-Bit Fixed Location Memory Range Descriptor
974 build_append_byte(var->buf, 0x86); /* Memory32Fixed Resource Descriptor */ in aml_memory32_fixed()
975 build_append_byte(var->buf, 9); /* Length, bits[7:0] value = 9 */ in aml_memory32_fixed()
976 build_append_byte(var->buf, 0); /* Length, bits[15:8] value = 0 */ in aml_memory32_fixed()
977 build_append_byte(var->buf, read_and_write); /* Write status, 1 rw 0 ro */ in aml_memory32_fixed()
980 build_append_byte(var->buf, extract32(addr, 0, 8)); /* bits[7:0] */ in aml_memory32_fixed()
981 build_append_byte(var->buf, extract32(addr, 8, 8)); /* bits[15:8] */ in aml_memory32_fixed()
982 build_append_byte(var->buf, extract32(addr, 16, 8)); /* bits[23:16] */ in aml_memory32_fixed()
983 build_append_byte(var->buf, extract32(addr, 24, 8)); /* bits[31:24] */ in aml_memory32_fixed()
986 build_append_byte(var->buf, extract32(size, 0, 8)); /* bits[7:0] */ in aml_memory32_fixed()
987 build_append_byte(var->buf, extract32(size, 8, 8)); /* bits[15:8] */ in aml_memory32_fixed()
988 build_append_byte(var->buf, extract32(size, 16, 8)); /* bits[23:16] */ in aml_memory32_fixed()
989 build_append_byte(var->buf, extract32(size, 24, 8)); /* bits[31:24] */ in aml_memory32_fixed()
1011 build_append_byte(var->buf, 0x89); /* Extended irq descriptor */ in aml_interrupt()
1012 build_append_byte(var->buf, len & 0xFF); /* Length, bits[7:0] */ in aml_interrupt()
1013 build_append_byte(var->buf, len >> 8); /* Length, bits[15:8] */ in aml_interrupt()
1014 build_append_byte(var->buf, irq_flags); /* Interrupt Vector Information. */ in aml_interrupt()
1015 build_append_byte(var->buf, irq_count); /* Interrupt table length */ in aml_interrupt()
1019 build_append_int_noprefix(var->buf, irq_list[i], 4); in aml_interrupt()
1029 build_append_byte(var->buf, 0x47); /* IO port descriptor */ in aml_io()
1030 build_append_byte(var->buf, dec); in aml_io()
1031 build_append_byte(var->buf, min_base & 0xff); in aml_io()
1032 build_append_byte(var->buf, (min_base >> 8) & 0xff); in aml_io()
1033 build_append_byte(var->buf, max_base & 0xff); in aml_io()
1034 build_append_byte(var->buf, (max_base >> 8) & 0xff); in aml_io()
1035 build_append_byte(var->buf, aln); in aml_io()
1036 build_append_byte(var->buf, len); in aml_io()
1053 build_append_byte(var->buf, 0x22); /* IRQ descriptor 2 byte form */ in aml_irq_no_flags()
1056 build_append_byte(var->buf, irq_mask & 0xFF); /* IRQ mask bits[7:0] */ in aml_irq_no_flags()
1057 build_append_byte(var->buf, irq_mask >> 8); /* IRQ mask bits[15:8] */ in aml_irq_no_flags()
1092 build_append_byte(var->buf, 0x95 /* LLessOp */); in aml_lgreater_equal()
1129 * bit 0-2: ArgCount (0-7) in aml_method()
1133 * bit 4-7: reserved (must be 0) in aml_method()
1138 build_append_namestring(var->buf, "%s", name); in aml_method()
1139 build_append_byte(var->buf, methodflags); /* MethodFlags: ArgCount */ in aml_method()
1149 build_append_namestringv(var->buf, name_format, ap); in aml_device()
1172 build_append_byte(var->buf, 0x0); in aml_buffer()
1174 build_append_byte(var->buf, byte_list[i]); in aml_buffer()
1185 build_append_byte(var->buf, num_elements); in aml_package()
1194 build_append_byte(var->buf, 0x5B); /* ExtOpPrefix */ in aml_operation_region()
1195 build_append_byte(var->buf, 0x80); /* OpRegionOp */ in aml_operation_region()
1196 build_append_namestring(var->buf, "%s", name); in aml_operation_region()
1197 build_append_byte(var->buf, rs); in aml_operation_region()
1199 build_append_int(var->buf, len); in aml_operation_region()
1207 build_append_nameseg(var->buf, name); in aml_named_field()
1208 build_append_pkg_length(var->buf, length, false); in aml_named_field()
1217 build_append_byte(var->buf, 0x00); in aml_reserved_field()
1218 build_append_pkg_length(var->buf, length, false); in aml_reserved_field()
1231 build_append_namestring(var->buf, "%s", name); in aml_field()
1232 build_append_byte(var->buf, flags); in aml_field()
1242 build_append_namestring(var->buf, "%s", name); in create_field_common()
1251 build_append_byte(var->buf, 0x5B); /* ExtOpPrefix */ in aml_create_field()
1252 build_append_byte(var->buf, 0x13); /* CreateFieldOp */ in aml_create_field()
1256 build_append_namestring(var->buf, "%s", name); in aml_create_field()
1286 g_array_append_vals(var->buf, s, len + 1); in aml_string()
1305 build_append_int(var->buf, num_elements); in aml_varpackage()
1316 build_append_namestringv(var->buf, name_format, ap); in aml_processor()
1318 build_append_byte(var->buf, proc_id); /* ProcID */ in aml_processor()
1319 build_append_int_noprefix(var->buf, pblk_addr, sizeof(pblk_addr)); in aml_processor()
1320 build_append_byte(var->buf, pblk_len); /* PblkLen */ in aml_processor()
1327 return c - 'A' + 10; in Hex2Digit()
1330 return c - '0'; in Hex2Digit()
1333 /* ACPI 1.0b: 15.2.3.6.4.1 EISAID Macro - Convert EISA ID String To Integer */
1340 id = (str[0] - 0x40) << 26 | in aml_eisaid()
1341 (str[1] - 0x40) << 21 | in aml_eisaid()
1342 (str[2] - 0x40) << 16 | in aml_eisaid()
1348 build_append_byte(var->buf, 0x0C); /* DWordPrefix */ in aml_eisaid()
1349 build_append_int_noprefix(var->buf, bswap32(id), sizeof(id)); in aml_eisaid()
1353 /* ACPI 1.0b: 6.4.3.5.5 Word Address Space Descriptor: bytes 3-5 */
1361 build_append_byte(var->buf, type); in aml_as_desc_header()
1362 build_append_byte(var->buf, flags); in aml_as_desc_header()
1363 build_append_byte(var->buf, type_flags); /* Type Specific Flags */ in aml_as_desc_header()
1376 build_append_byte(var->buf, 0x88); /* Word Address Space Descriptor */ in aml_word_as_desc()
1378 build_append_byte(var->buf, 0x0D); in aml_word_as_desc()
1379 build_append_byte(var->buf, 0x0); in aml_word_as_desc()
1383 build_append_int_noprefix(var->buf, addr_gran, sizeof(addr_gran)); in aml_word_as_desc()
1384 build_append_int_noprefix(var->buf, addr_min, sizeof(addr_min)); in aml_word_as_desc()
1385 build_append_int_noprefix(var->buf, addr_max, sizeof(addr_max)); in aml_word_as_desc()
1386 build_append_int_noprefix(var->buf, addr_trans, sizeof(addr_trans)); in aml_word_as_desc()
1387 build_append_int_noprefix(var->buf, len, sizeof(len)); in aml_word_as_desc()
1400 build_append_byte(var->buf, 0x87); /* DWord Address Space Descriptor */ in aml_dword_as_desc()
1402 build_append_byte(var->buf, 23); in aml_dword_as_desc()
1403 build_append_byte(var->buf, 0x0); in aml_dword_as_desc()
1408 build_append_int_noprefix(var->buf, addr_gran, sizeof(addr_gran)); in aml_dword_as_desc()
1409 build_append_int_noprefix(var->buf, addr_min, sizeof(addr_min)); in aml_dword_as_desc()
1410 build_append_int_noprefix(var->buf, addr_max, sizeof(addr_max)); in aml_dword_as_desc()
1411 build_append_int_noprefix(var->buf, addr_trans, sizeof(addr_trans)); in aml_dword_as_desc()
1412 build_append_int_noprefix(var->buf, len, sizeof(len)); in aml_dword_as_desc()
1425 build_append_byte(var->buf, 0x8A); /* QWord Address Space Descriptor */ in aml_qword_as_desc()
1427 build_append_byte(var->buf, 0x2B); in aml_qword_as_desc()
1428 build_append_byte(var->buf, 0x0); in aml_qword_as_desc()
1432 build_append_int_noprefix(var->buf, addr_gran, sizeof(addr_gran)); in aml_qword_as_desc()
1433 build_append_int_noprefix(var->buf, addr_min, sizeof(addr_min)); in aml_qword_as_desc()
1434 build_append_int_noprefix(var->buf, addr_max, sizeof(addr_max)); in aml_qword_as_desc()
1435 build_append_int_noprefix(var->buf, addr_trans, sizeof(addr_trans)); in aml_qword_as_desc()
1436 build_append_int_noprefix(var->buf, len, sizeof(len)); in aml_qword_as_desc()
1540 build_append_byte(var->buf, 0x2A); /* Byte 0: DMA Descriptor */ in aml_dma()
1541 build_append_byte(var->buf, 1U << channel); /* Byte 1: _DMA - DmaChannel */ in aml_dma()
1542 build_append_byte(var->buf, flags); /* Byte 2 */ in aml_dma()
1550 build_append_byte(var->buf, 0x5B); /* ExtOpPrefix */ in aml_sleep()
1551 build_append_byte(var->buf, 0x22); /* SleepOp */ in aml_sleep()
1571 * ACPI 3.0: 17.5.124 ToUUID (Convert String to UUID Macro)
1572 * e.g. UUID: aabbccdd-eeff-gghh-iijj-kkllmmnnoopp
1573 * call aml_touuid("aabbccdd-eeff-gghh-iijj-kkllmmnnoopp");
1575 Aml *aml_touuid(const char *uuid) in aml_touuid() argument
1579 assert(strlen(uuid) == 36); in aml_touuid()
1580 assert(uuid[8] == '-'); in aml_touuid()
1581 assert(uuid[13] == '-'); in aml_touuid()
1582 assert(uuid[18] == '-'); in aml_touuid()
1583 assert(uuid[23] == '-'); in aml_touuid()
1585 build_append_byte(var->buf, Hex2Byte(uuid + 6)); /* dd - at offset 00 */ in aml_touuid()
1586 build_append_byte(var->buf, Hex2Byte(uuid + 4)); /* cc - at offset 01 */ in aml_touuid()
1587 build_append_byte(var->buf, Hex2Byte(uuid + 2)); /* bb - at offset 02 */ in aml_touuid()
1588 build_append_byte(var->buf, Hex2Byte(uuid + 0)); /* aa - at offset 03 */ in aml_touuid()
1590 build_append_byte(var->buf, Hex2Byte(uuid + 11)); /* ff - at offset 04 */ in aml_touuid()
1591 build_append_byte(var->buf, Hex2Byte(uuid + 9)); /* ee - at offset 05 */ in aml_touuid()
1593 build_append_byte(var->buf, Hex2Byte(uuid + 16)); /* hh - at offset 06 */ in aml_touuid()
1594 build_append_byte(var->buf, Hex2Byte(uuid + 14)); /* gg - at offset 07 */ in aml_touuid()
1596 build_append_byte(var->buf, Hex2Byte(uuid + 19)); /* ii - at offset 08 */ in aml_touuid()
1597 build_append_byte(var->buf, Hex2Byte(uuid + 21)); /* jj - at offset 09 */ in aml_touuid()
1599 build_append_byte(var->buf, Hex2Byte(uuid + 24)); /* kk - at offset 10 */ in aml_touuid()
1600 build_append_byte(var->buf, Hex2Byte(uuid + 26)); /* ll - at offset 11 */ in aml_touuid()
1601 build_append_byte(var->buf, Hex2Byte(uuid + 28)); /* mm - at offset 12 */ in aml_touuid()
1602 build_append_byte(var->buf, Hex2Byte(uuid + 30)); /* nn - at offset 13 */ in aml_touuid()
1603 build_append_byte(var->buf, Hex2Byte(uuid + 32)); /* oo - at offset 14 */ in aml_touuid()
1604 build_append_byte(var->buf, Hex2Byte(uuid + 34)); /* pp - at offset 15 */ in aml_touuid()
1618 build_append_byte(var->buf, str[i]); in aml_unicode()
1619 build_append_byte(var->buf, 0); in aml_unicode()
1654 build_append_byte(var->buf, 0x5B); /* ExtOpPrefix */ in aml_mutex()
1655 build_append_byte(var->buf, 0x01); /* MutexOp */ in aml_mutex()
1656 build_append_namestring(var->buf, "%s", name); in aml_mutex()
1658 build_append_byte(var->buf, sync_level); in aml_mutex()
1666 build_append_byte(var->buf, 0x5B); /* ExtOpPrefix */ in aml_acquire()
1667 build_append_byte(var->buf, 0x23); /* AcquireOp */ in aml_acquire()
1669 build_append_int_noprefix(var->buf, timeout, sizeof(timeout)); in aml_acquire()
1677 build_append_byte(var->buf, 0x5B); /* ExtOpPrefix */ in aml_release()
1678 build_append_byte(var->buf, 0x27); /* ReleaseOp */ in aml_release()
1710 desc->array = array; in acpi_table_begin()
1711 desc->table_offset = array->len; in acpi_table_begin()
1717 g_assert(strlen(desc->sig) == 4); in acpi_table_begin()
1718 g_array_append_vals(array, desc->sig, 4); /* Signature */ in acpi_table_begin()
1724 build_append_int_noprefix(array, desc->rev, 1); /* Revision */ in acpi_table_begin()
1726 build_append_padded_str(array, desc->oem_id, 6, '\0'); /* OEMID */ in acpi_table_begin()
1728 build_append_padded_str(array, desc->oem_table_id, 8, '\0'); in acpi_table_begin()
1739 * Table 5-2 DESCRIPTION_HEADER Fields in acpi_table_end()
1742 uint32_t table_len = desc->array->len - desc->table_offset; in acpi_table_end()
1744 gchar *len_ptr = &desc->array->data[desc->table_offset + 4]; in acpi_table_end()
1753 desc->table_offset, table_len, desc->table_offset + checksum_offset); in acpi_table_end()
1758 unsigned off = table_data->len; in acpi_data_push()
1760 return table_data->data + off; in acpi_data_push()
1766 return table->len; in acpi_data_len()
1771 uint32_t offset = table_data->len; in acpi_add_table()
1777 tables->rsdp = g_array_new(false, true /* clear */, 1); in acpi_build_tables_init()
1778 tables->table_data = g_array_new(false, true /* clear */, 1); in acpi_build_tables_init()
1779 tables->tcpalog = g_array_new(false, true /* clear */, 1); in acpi_build_tables_init()
1780 tables->vmgenid = g_array_new(false, true /* clear */, 1); in acpi_build_tables_init()
1781 tables->hardware_errors = g_array_new(false, true /* clear */, 1); in acpi_build_tables_init()
1782 tables->linker = bios_linker_loader_init(); in acpi_build_tables_init()
1787 bios_linker_loader_cleanup(tables->linker); in acpi_build_tables_cleanup()
1788 g_array_free(tables->rsdp, true); in acpi_build_tables_cleanup()
1789 g_array_free(tables->table_data, true); in acpi_build_tables_cleanup()
1790 g_array_free(tables->tcpalog, mfre); in acpi_build_tables_cleanup()
1791 g_array_free(tables->vmgenid, mfre); in acpi_build_tables_cleanup()
1792 g_array_free(tables->hardware_errors, mfre); in acpi_build_tables_cleanup()
1802 int tbl_off = tbl->len; /* Table offset in the RSDP file */ in build_rsdp()
1804 switch (rsdp_data->revision) { in build_rsdp()
1807 g_assert(rsdp_data->rsdt_tbl_offset); in build_rsdp()
1811 g_assert(rsdp_data->xsdt_tbl_offset); in build_rsdp()
1823 g_array_append_vals(tbl, rsdp_data->oem_id, 6); /* OEMID */ in build_rsdp()
1824 build_append_int_noprefix(tbl, rsdp_data->revision, 1); /* Revision */ in build_rsdp()
1826 if (rsdp_data->rsdt_tbl_offset) { in build_rsdp()
1831 *rsdp_data->rsdt_tbl_offset); in build_rsdp()
1839 if (rsdp_data->revision == 0) { in build_rsdp()
1852 *rsdp_data->xsdt_tbl_offset); in build_rsdp()
1875 for (i = 0; i < table_offsets->len; ++i) { in build_rsdt()
1877 uint32_t rsdt_entry_offset = table.array->len; in build_rsdt()
1904 for (i = 0; i < table_offsets->len; ++i) { in build_xsdt()
1906 uint64_t xsdt_entry_offset = table.array->len; in build_xsdt()
1942 * Table 5-80 Device Handle - PCI
1962 /* Device Handle - ACPI */ in build_append_srat_acpi_device_handle()
1991 /* Flags - GI Enabled */ in build_srat_pci_generic_initiator()
2017 /* Flags - GP Enabled */ in build_srat_acpi_generic_port()
2031 int nb_numa_nodes = ms->numa_state->num_nodes; in build_slit()
2040 assert(ms->numa_state->nodes[i].distance[j]); in build_slit()
2042 ms->numa_state->nodes[i].distance[j], in build_slit()
2060 build_append_byte(tbl, 0); /* Type 0 - processor */ in build_processor_hierarchy_node()
2088 build_append_int_noprefix(table_data, f->interface_type, 1); in build_spcr()
2092 build_append_gas(table_data, f->base_addr.id, f->base_addr.width, in build_spcr()
2093 f->base_addr.offset, f->base_addr.size, in build_spcr()
2094 f->base_addr.addr); in build_spcr()
2096 build_append_int_noprefix(table_data, f->interrupt_type, 1); in build_spcr()
2098 build_append_int_noprefix(table_data, f->pc_interrupt, 1); in build_spcr()
2100 build_append_int_noprefix(table_data, f->interrupt, 4); in build_spcr()
2102 build_append_int_noprefix(table_data, f->baud_rate, 1); in build_spcr()
2104 build_append_int_noprefix(table_data, f->parity, 1); in build_spcr()
2106 build_append_int_noprefix(table_data, f->stop_bits, 1); in build_spcr()
2108 build_append_int_noprefix(table_data, f->flow_control, 1); in build_spcr()
2110 build_append_int_noprefix(table_data, f->language, 1); in build_spcr()
2112 build_append_int_noprefix(table_data, f->terminal_type, 1); in build_spcr()
2114 build_append_int_noprefix(table_data, f->pci_device_id, 2); in build_spcr()
2116 build_append_int_noprefix(table_data, f->pci_vendor_id, 2); in build_spcr()
2118 build_append_int_noprefix(table_data, f->pci_bus, 1); in build_spcr()
2120 build_append_int_noprefix(table_data, f->pci_device, 1); in build_spcr()
2122 build_append_int_noprefix(table_data, f->pci_function, 1); in build_spcr()
2124 build_append_int_noprefix(table_data, f->pci_flags, 4); in build_spcr()
2126 build_append_int_noprefix(table_data, f->pci_segment, 1); in build_spcr()
2132 build_append_int_noprefix(table_data, f->uart_clk_freq, 4); in build_spcr()
2134 build_append_int_noprefix(table_data, f->precise_baudrate, 4); in build_spcr()
2136 build_append_int_noprefix(table_data, f->namespace_string_length, 2); in build_spcr()
2138 build_append_int_noprefix(table_data, f->namespace_string_offset, 2); in build_spcr()
2140 g_array_append_vals(table_data, name, f->namespace_string_length); in build_spcr()
2152 CPUArchIdList *cpus = ms->possible_cpus; in build_pptt()
2153 int64_t socket_id = -1, cluster_id = -1, core_id = -1; in build_pptt()
2155 uint32_t pptt_start = table_data->len; in build_pptt()
2164 * sorted from top to down levels in mc->possible_cpu_arch_ids(). in build_pptt()
2168 for (n = 0; n < cpus->len; n++) { in build_pptt()
2169 if (cpus->cpus[n].props.socket_id != socket_id) { in build_pptt()
2170 assert(cpus->cpus[n].props.socket_id > socket_id); in build_pptt()
2171 socket_id = cpus->cpus[n].props.socket_id; in build_pptt()
2172 cluster_id = -1; in build_pptt()
2173 core_id = -1; in build_pptt()
2174 socket_offset = table_data->len - pptt_start; in build_pptt()
2180 if (mc->smp_props.clusters_supported && mc->smp_props.has_clusters) { in build_pptt()
2181 if (cpus->cpus[n].props.cluster_id != cluster_id) { in build_pptt()
2182 assert(cpus->cpus[n].props.cluster_id > cluster_id); in build_pptt()
2183 cluster_id = cpus->cpus[n].props.cluster_id; in build_pptt()
2184 core_id = -1; in build_pptt()
2185 cluster_offset = table_data->len - pptt_start; in build_pptt()
2194 if (ms->smp.threads == 1) { in build_pptt()
2200 if (cpus->cpus[n].props.core_id != core_id) { in build_pptt()
2201 assert(cpus->cpus[n].props.core_id > core_id); in build_pptt()
2202 core_id = cpus->cpus[n].props.core_id; in build_pptt()
2203 core_offset = table_data->len - pptt_start; in build_pptt()
2225 AcpiTable table = { .sig = "FACP", .rev = f->rev, in build_fadt()
2231 off = tbl->len; in build_fadt()
2233 if (f->facs_tbl_offset) { /* don't patch if not supported by platform */ in build_fadt()
2236 ACPI_BUILD_TABLE_FILE, *f->facs_tbl_offset); in build_fadt()
2240 off = tbl->len; in build_fadt()
2242 if (f->dsdt_tbl_offset) { /* don't patch if not supported by platform */ in build_fadt()
2245 ACPI_BUILD_TABLE_FILE, *f->dsdt_tbl_offset); in build_fadt()
2249 build_append_int_noprefix(tbl, f->int_model /* Multiple APIC */, 1); in build_fadt()
2252 build_append_int_noprefix(tbl, f->sci_int, 2); /* SCI_INT */ in build_fadt()
2253 build_append_int_noprefix(tbl, f->smi_cmd, 4); /* SMI_CMD */ in build_fadt()
2254 build_append_int_noprefix(tbl, f->acpi_enable_cmd, 1); /* ACPI_ENABLE */ in build_fadt()
2255 build_append_int_noprefix(tbl, f->acpi_disable_cmd, 1); /* ACPI_DISABLE */ in build_fadt()
2259 build_append_int_noprefix(tbl, f->pm1a_evt.address, 4); /* PM1a_EVT_BLK */ in build_fadt()
2261 build_append_int_noprefix(tbl, f->pm1a_cnt.address, 4); /* PM1a_CNT_BLK */ in build_fadt()
2264 build_append_int_noprefix(tbl, f->pm_tmr.address, 4); /* PM_TMR_BLK */ in build_fadt()
2265 build_append_int_noprefix(tbl, f->gpe0_blk.address, 4); /* GPE0_BLK */ in build_fadt()
2268 build_append_int_noprefix(tbl, f->pm1a_evt.bit_width / 8, 1); in build_fadt()
2270 build_append_int_noprefix(tbl, f->pm1a_cnt.bit_width / 8, 1); in build_fadt()
2272 build_append_int_noprefix(tbl, f->pm_tmr.bit_width / 8, 1); /* PM_TMR_LEN */ in build_fadt()
2274 build_append_int_noprefix(tbl, f->gpe0_blk.bit_width / 8, 1); in build_fadt()
2278 build_append_int_noprefix(tbl, f->plvl2_lat, 2); /* P_LVL2_LAT */ in build_fadt()
2279 build_append_int_noprefix(tbl, f->plvl3_lat, 2); /* P_LVL3_LAT */ in build_fadt()
2286 build_append_int_noprefix(tbl, f->rtc_century, 1); /* CENTURY */ in build_fadt()
2288 if (f->rev == 1) { in build_fadt()
2292 build_append_int_noprefix(tbl, f->iapc_boot_arch, 2); in build_fadt()
2295 build_append_int_noprefix(tbl, f->flags, 4); /* Flags */ in build_fadt()
2297 if (f->rev == 1) { in build_fadt()
2301 build_append_gas_from_struct(tbl, &f->reset_reg); /* RESET_REG */ in build_fadt()
2302 build_append_int_noprefix(tbl, f->reset_val, 1); /* RESET_VALUE */ in build_fadt()
2304 if ((f->rev >= 6) || ((f->rev == 5) && f->minor_ver > 0)) { in build_fadt()
2305 build_append_int_noprefix(tbl, f->arm_boot_arch, 2); /* ARM_BOOT_ARCH */ in build_fadt()
2307 build_append_int_noprefix(tbl, f->minor_ver, 1); in build_fadt()
2314 off = tbl->len; in build_fadt()
2316 if (f->xdsdt_tbl_offset) { in build_fadt()
2319 ACPI_BUILD_TABLE_FILE, *f->xdsdt_tbl_offset); in build_fadt()
2322 build_append_gas_from_struct(tbl, &f->pm1a_evt); /* X_PM1a_EVT_BLK */ in build_fadt()
2325 build_append_gas_from_struct(tbl, &f->pm1a_cnt); /* X_PM1a_CNT_BLK */ in build_fadt()
2330 build_append_gas_from_struct(tbl, &f->pm_tmr); /* X_PM_TMR_BLK */ in build_fadt()
2331 build_append_gas_from_struct(tbl, &f->gpe0_blk); /* X_GPE0_BLK */ in build_fadt()
2334 if (f->rev <= 4) { in build_fadt()
2339 build_append_gas_from_struct(tbl, &f->sleep_ctl); in build_fadt()
2341 build_append_gas_from_struct(tbl, &f->sleep_sts); in build_fadt()
2343 if (f->rev == 5) { in build_fadt()
2351 assert(f->rev == 6); in build_fadt()
2359 * build_tpm2 - Build the TPM2 table as specified in
2405 log_addr_offset = table_data->len; in build_tpm2()
2423 uint8_t max_bus = pci_bus_num(host->bus); in build_crs()
2429 for (devfn = 0; devfn < ARRAY_SIZE(host->bus->devices); devfn++) { in build_crs()
2431 PCIDevice *dev = host->bus->devices[devfn]; in build_crs() local
2433 if (!dev) { in build_crs()
2438 PCIIORegion *r = &dev->io_regions[i]; in build_crs()
2440 range_base = r->addr; in build_crs()
2441 range_limit = r->addr + r->size - 1; in build_crs()
2444 * Work-around for old bioses in build_crs()
2451 if (r->type & PCI_BASE_ADDRESS_SPACE_IO) { in build_crs()
2455 uint64_t length = range_limit - range_base + 1; in build_crs()
2466 type = dev->config[PCI_HEADER_TYPE] & ~PCI_HEADER_TYPE_MULTI_FUNCTION; in build_crs()
2468 uint8_t subordinate = dev->config[PCI_SUBORDINATE_BUS]; in build_crs()
2473 range_base = pci_bridge_get_base(dev, PCI_BASE_ADDRESS_SPACE_IO); in build_crs()
2474 range_limit = pci_bridge_get_limit(dev, PCI_BASE_ADDRESS_SPACE_IO); in build_crs()
2477 * Work-around for old bioses in build_crs()
2486 pci_bridge_get_base(dev, PCI_BASE_ADDRESS_SPACE_MEMORY); in build_crs()
2488 pci_bridge_get_limit(dev, PCI_BASE_ADDRESS_SPACE_MEMORY); in build_crs()
2491 * Work-around for old bioses in build_crs()
2495 uint64_t length = range_limit - range_base + 1; in build_crs()
2506 pci_bridge_get_base(dev, PCI_BASE_ADDRESS_MEM_PREFETCH); in build_crs()
2508 pci_bridge_get_limit(dev, PCI_BASE_ADDRESS_MEM_PREFETCH); in build_crs()
2511 * Work-around for old bioses in build_crs()
2515 uint64_t length = range_limit - range_base + 1; in build_crs()
2528 for (i = 0; i < temp_range_set.io_ranges->len; i++) { in build_crs()
2533 0, entry->base, entry->limit, io_offset, in build_crs()
2534 entry->limit - entry->base + 1)); in build_crs()
2535 crs_range_insert(range_set->io_ranges, entry->base, entry->limit); in build_crs()
2539 for (i = 0; i < temp_range_set.mem_ranges->len; i++) { in build_crs()
2541 assert(entry->limit <= UINT32_MAX && in build_crs()
2542 (entry->limit - entry->base + 1) <= UINT32_MAX); in build_crs()
2547 0, entry->base, entry->limit, mmio32_offset, in build_crs()
2548 entry->limit - entry->base + 1)); in build_crs()
2549 crs_range_insert(range_set->mem_ranges, entry->base, entry->limit); in build_crs()
2553 for (i = 0; i < temp_range_set.mem_64bit_ranges->len; i++) { in build_crs()
2559 0, entry->base, entry->limit, mmio64_offset, in build_crs()
2560 entry->limit - entry->base + 1)); in build_crs()
2561 crs_range_insert(range_set->mem_64bit_ranges, in build_crs()
2562 entry->base, entry->limit); in build_crs()
2570 pci_bus_num(host->bus), in build_crs()
2573 max_bus - pci_bus_num(host->bus) + 1)); in build_crs()
2587 build_append_byte(var->buf, 0x8e); /* Serial Bus Connection Descriptor */ in aml_serial_bus_device()
2588 build_append_int_noprefix(var->buf, length, sizeof(length)); in aml_serial_bus_device()
2589 build_append_byte(var->buf, 1); /* Revision ID */ in aml_serial_bus_device()
2590 build_append_byte(var->buf, 0); /* Resource Source Index */ in aml_serial_bus_device()
2591 build_append_byte(var->buf, serial_bus_type); /* Serial Bus Type */ in aml_serial_bus_device()
2592 build_append_byte(var->buf, flags); /* General Flags */ in aml_serial_bus_device()
2593 build_append_int_noprefix(var->buf, type_flags, /* Type Specific Flags */ in aml_serial_bus_device()
2595 build_append_byte(var->buf, revid); /* Type Specification Revision ID */ in aml_serial_bus_device()
2596 build_append_int_noprefix(var->buf, data_length, sizeof(data_length)); in aml_serial_bus_device()
2609 build_append_int_noprefix(var->buf, 100000, 4); in aml_i2c_serial_bus_device()
2610 build_append_int_noprefix(var->buf, address, sizeof(address)); in aml_i2c_serial_bus_device()
2613 g_array_append_vals(var->buf, resource_source, resource_source_len); in aml_i2c_serial_bus_device()