Lines Matching full:table
97 basl_dump_table(const struct basl_table *const table, const bool mem) in basl_dump_table() argument
99 const ACPI_TABLE_HEADER *const header = table->data; in basl_dump_table()
103 data = table->data; in basl_dump_table()
105 data = vm_map_gpa(table->ctx, BHYVE_ACPI_BASE + table->off, in basl_dump_table()
106 table->len); in basl_dump_table()
113 BHYVE_ACPI_BASE + table->off, mem ? "Memory" : "FwCfg"); in basl_dump_table()
114 hexdump(data, table->len, NULL, 0); in basl_dump_table()
122 struct basl_table *table; in basl_dump() local
124 STAILQ_FOREACH(table, &basl_tables, chain) { in basl_dump()
125 BASL_EXEC(basl_dump_table(table, mem)); in basl_dump()
146 basl_finish_install_guest_tables(struct basl_table *const table, uint32_t *const off) in basl_finish_install_guest_tables() argument
150 table->off = roundup2(*off, table->alignment); in basl_finish_install_guest_tables()
151 *off = table->off + table->len; in basl_finish_install_guest_tables()
152 if (*off <= table->off) { in basl_finish_install_guest_tables()
153 warnx("%s: invalid table length 0x%8x @ offset 0x%8x", __func__, in basl_finish_install_guest_tables()
154 table->len, table->off); in basl_finish_install_guest_tables()
158 /* Cause guest BIOS to copy the ACPI table into guest memory. */ in basl_finish_install_guest_tables()
160 qemu_fwcfg_add_file(table->fwcfg_name, table->len, table->data)); in basl_finish_install_guest_tables()
161 BASL_EXEC(qemu_loader_alloc(basl_loader, table->fwcfg_name, in basl_finish_install_guest_tables()
162 table->alignment, QEMU_LOADER_ALLOC_HIGH)); in basl_finish_install_guest_tables()
174 gva = vm_map_gpa(table->ctx, BHYVE_ACPI_BASE + table->off, table->len); in basl_finish_install_guest_tables()
177 (uint64_t)BHYVE_ACPI_BASE + table->off, in basl_finish_install_guest_tables()
178 (uint64_t)BHYVE_ACPI_BASE + table->off + table->len); in basl_finish_install_guest_tables()
181 memcpy(gva, table->data, table->len); in basl_finish_install_guest_tables()
187 basl_finish_patch_checksums(struct basl_table *const table) in basl_finish_patch_checksums() argument
191 STAILQ_FOREACH(checksum, &table->checksums, chain) { in basl_finish_patch_checksums()
199 len = table->len; in basl_finish_patch_checksums()
202 assert(checksum->off < table->len); in basl_finish_patch_checksums()
203 assert(checksum->start < table->len); in basl_finish_patch_checksums()
204 assert(checksum->start + len <= table->len); in basl_finish_patch_checksums()
208 table->fwcfg_name, checksum->off, checksum->start, len)); in basl_finish_patch_checksums()
220 gpa = BHYVE_ACPI_BASE + table->off + checksum->start; in basl_finish_patch_checksums()
222 (gpa < BHYVE_ACPI_BASE + table->off)) { in basl_finish_patch_checksums()
224 __func__, table->off, checksum->start); in basl_finish_patch_checksums()
228 gva = vm_map_gpa(table->ctx, gpa, len); in basl_finish_patch_checksums()
255 struct basl_table *table; in basl_get_table_by_signature() local
257 STAILQ_FOREACH(table, &basl_tables, chain) { in basl_get_table_by_signature()
259 (const ACPI_TABLE_HEADER *)table->data; in basl_get_table_by_signature()
263 return (table); in basl_get_table_by_signature()
272 basl_finish_patch_pointers(struct basl_table *const table) in basl_finish_patch_pointers() argument
276 STAILQ_FOREACH(pointer, &table->pointers, chain) { in basl_finish_patch_pointers()
281 assert(pointer->off < table->len); in basl_finish_patch_pointers()
282 assert(pointer->off + pointer->size <= table->len); in basl_finish_patch_pointers()
286 warnx("%s: could not find ACPI table %.4s", __func__, in basl_finish_patch_pointers()
293 qemu_loader_add_pointer(basl_loader, table->fwcfg_name, in basl_finish_patch_pointers()
306 gpa = BHYVE_ACPI_BASE + table->off; in basl_finish_patch_pointers()
308 warnx("%s: table offset of 0x%8x is too large", in basl_finish_patch_pointers()
309 __func__, table->off); in basl_finish_patch_pointers()
313 gva = vm_map_gpa(table->ctx, gpa, table->len); in basl_finish_patch_pointers()
316 __func__, gpa, gpa + table->len); in basl_finish_patch_pointers()
329 basl_finish_set_length(struct basl_table *const table) in basl_finish_set_length() argument
333 STAILQ_FOREACH(length, &table->lengths, chain) { in basl_finish_set_length()
334 assert(length->off < table->len); in basl_finish_set_length()
335 assert(length->off + length->size <= table->len); in basl_finish_set_length()
337 basl_le_enc((uint8_t *)table->data + length->off, table->len, in basl_finish_set_length()
347 struct basl_table *table; in basl_finish() local
369 STAILQ_FOREACH(table, &basl_tables, chain) { in basl_finish()
370 BASL_EXEC(basl_finish_set_length(table)); in basl_finish()
371 BASL_EXEC(basl_finish_install_guest_tables(table, &off)); in basl_finish()
373 STAILQ_FOREACH(table, &basl_tables, chain) { in basl_finish()
374 BASL_EXEC(basl_finish_patch_pointers(table)); in basl_finish()
379 BASL_EXEC(basl_finish_patch_checksums(table)); in basl_finish()
424 basl_table_add_checksum(struct basl_table *const table, const uint32_t off, in basl_table_add_checksum() argument
429 assert(table != NULL); in basl_table_add_checksum()
441 STAILQ_INSERT_TAIL(&table->checksums, checksum, chain); in basl_table_add_checksum()
447 basl_table_add_length(struct basl_table *const table, const uint32_t off, in basl_table_add_length() argument
452 assert(table != NULL); in basl_table_add_length()
464 STAILQ_INSERT_TAIL(&table->lengths, length, chain); in basl_table_add_length()
470 basl_table_add_pointer(struct basl_table *const table, in basl_table_add_pointer() argument
476 assert(table != NULL); in basl_table_add_pointer()
490 STAILQ_INSERT_TAIL(&table->pointers, pointer, chain); in basl_table_add_pointer()
496 basl_table_append_bytes(struct basl_table *const table, const void *const bytes, in basl_table_append_bytes() argument
501 assert(table != NULL); in basl_table_append_bytes()
504 if (table->len + len <= table->len) { in basl_table_append_bytes()
505 warnx("%s: table too large (table->len 0x%8x len 0x%8x)", in basl_table_append_bytes()
506 __func__, table->len, len); in basl_table_append_bytes()
510 table->data = reallocf(table->data, table->len + len); in basl_table_append_bytes()
511 if (table->data == NULL) { in basl_table_append_bytes()
512 warnx("%s: failed to realloc table to length 0x%8x", __func__, in basl_table_append_bytes()
513 table->len + len); in basl_table_append_bytes()
514 table->len = 0; in basl_table_append_bytes()
518 end = (uint8_t *)table->data + table->len; in basl_table_append_bytes()
519 table->len += len; in basl_table_append_bytes()
527 basl_table_append_checksum(struct basl_table *const table, const uint32_t start, in basl_table_append_checksum() argument
530 assert(table != NULL); in basl_table_append_checksum()
532 BASL_EXEC(basl_table_add_checksum(table, table->len, start, len)); in basl_table_append_checksum()
533 BASL_EXEC(basl_table_append_int(table, 0, 1)); in basl_table_append_checksum()
539 basl_table_append_content(struct basl_table *table, void *data, uint32_t len) in basl_table_append_content() argument
544 return (basl_table_append_bytes(table, in basl_table_append_content()
550 basl_table_append_fwcfg(struct basl_table *const table, in basl_table_append_fwcfg() argument
553 assert(table != NULL); in basl_table_append_fwcfg()
559 BASL_EXEC(qemu_loader_add_pointer(basl_loader, table->fwcfg_name, in basl_table_append_fwcfg()
560 fwcfg_name, table->len, size)); in basl_table_append_fwcfg()
561 BASL_EXEC(basl_table_append_int(table, 0, size)); in basl_table_append_fwcfg()
567 basl_table_append_gas(struct basl_table *const table, const uint8_t space_id, in basl_table_append_gas() argument
579 return (basl_table_append_bytes(table, &gas_le, sizeof(gas_le))); in basl_table_append_gas()
583 basl_table_append_header(struct basl_table *const table, in basl_table_append_header() argument
591 assert(table != NULL); in basl_table_append_header()
592 assert(table->len == 0); in basl_table_append_header()
607 basl_table_append_bytes(table, &header_le, sizeof(header_le))); in basl_table_append_header()
609 BASL_EXEC(basl_table_add_length(table, in basl_table_append_header()
611 BASL_EXEC(basl_table_add_checksum(table, in basl_table_append_header()
619 basl_table_append_int(struct basl_table *const table, const uint64_t val, in basl_table_append_int() argument
627 return (basl_table_append_bytes(table, buf, size)); in basl_table_append_int()
631 basl_table_append_length(struct basl_table *const table, const uint8_t size) in basl_table_append_length() argument
633 assert(table != NULL); in basl_table_append_length()
634 assert(size <= sizeof(table->len)); in basl_table_append_length()
636 BASL_EXEC(basl_table_add_length(table, table->len, size)); in basl_table_append_length()
637 BASL_EXEC(basl_table_append_int(table, 0, size)); in basl_table_append_length()
643 basl_table_append_pointer(struct basl_table *const table, in basl_table_append_pointer() argument
646 assert(table != NULL); in basl_table_append_pointer()
649 BASL_EXEC(basl_table_add_pointer(table, src_signature, table->len, size)); in basl_table_append_pointer()
650 BASL_EXEC(basl_table_append_int(table, 0, size)); in basl_table_append_pointer()
656 basl_table_create(struct basl_table **const table, struct vmctx *ctx, in basl_table_create() argument
661 assert(table != NULL); in basl_table_create()
665 warnx("%s: failed to allocate table", __func__); in basl_table_create()
682 *table = new_table; in basl_table_create()
688 basl_table_register_to_rsdt(struct basl_table *table) in basl_table_register_to_rsdt() argument
692 assert(table != NULL); in basl_table_register_to_rsdt()
694 header = (const ACPI_TABLE_HEADER *)table->data; in basl_table_register_to_rsdt()