]>
Commit | Line | Data |
---|---|---|
3248f1b4 BW |
1 | /* |
2 | * Utilities for working with ACPI tables | |
3 | * | |
4 | * Copyright (c) 2013 Red Hat Inc. | |
5 | * | |
6 | * Authors: | |
7 | * Michael S. Tsirkin <[email protected]>, | |
8 | * | |
9 | * This work is licensed under the terms of the GNU GPL, version 2 or later. | |
10 | * See the COPYING file in the top-level directory. | |
11 | */ | |
12 | ||
13 | #ifndef TEST_ACPI_UTILS_H | |
14 | #define TEST_ACPI_UTILS_H | |
15 | ||
16 | #include "hw/acpi/acpi-defs.h" | |
17 | #include "libqtest.h" | |
18 | ||
19 | /* DSDT and SSDTs format */ | |
20 | typedef struct { | |
21 | AcpiTableHeader header; | |
22 | gchar *aml; /* aml bytecode from guest */ | |
23 | gsize aml_len; | |
24 | gchar *aml_file; | |
25 | gchar *asl; /* asl code generated from aml */ | |
26 | gsize asl_len; | |
27 | gchar *asl_file; | |
28 | bool tmp_files_retain; /* do not delete the temp asl/aml */ | |
0d876080 | 29 | } AcpiSdtTable; |
3248f1b4 | 30 | |
273e3d92 EB |
31 | #define ACPI_READ_FIELD(qts, field, addr) \ |
32 | do { \ | |
33 | qtest_memread(qts, addr, &field, sizeof(field)); \ | |
34 | addr += sizeof(field); \ | |
2562755e | 35 | } while (0) |
3248f1b4 | 36 | |
273e3d92 EB |
37 | #define ACPI_READ_ARRAY_PTR(qts, arr, length, addr) \ |
38 | do { \ | |
39 | int idx; \ | |
40 | for (idx = 0; idx < length; ++idx) { \ | |
41 | ACPI_READ_FIELD(qts, arr[idx], addr); \ | |
42 | } \ | |
2562755e | 43 | } while (0) |
3248f1b4 | 44 | |
273e3d92 EB |
45 | #define ACPI_READ_ARRAY(qts, arr, addr) \ |
46 | ACPI_READ_ARRAY_PTR(qts, arr, sizeof(arr) / sizeof(arr[0]), addr) | |
3248f1b4 | 47 | |
273e3d92 | 48 | #define ACPI_READ_TABLE_HEADER(qts, table, addr) \ |
3248f1b4 | 49 | do { \ |
273e3d92 EB |
50 | ACPI_READ_FIELD(qts, (table)->signature, addr); \ |
51 | ACPI_READ_FIELD(qts, (table)->length, addr); \ | |
52 | ACPI_READ_FIELD(qts, (table)->revision, addr); \ | |
53 | ACPI_READ_FIELD(qts, (table)->checksum, addr); \ | |
54 | ACPI_READ_ARRAY(qts, (table)->oem_id, addr); \ | |
55 | ACPI_READ_ARRAY(qts, (table)->oem_table_id, addr); \ | |
56 | ACPI_READ_FIELD(qts, (table)->oem_revision, addr); \ | |
57 | ACPI_READ_ARRAY(qts, (table)->asl_compiler_id, addr); \ | |
58 | ACPI_READ_FIELD(qts, (table)->asl_compiler_revision, addr); \ | |
2562755e | 59 | } while (0) |
3248f1b4 BW |
60 | |
61 | #define ACPI_ASSERT_CMP(actual, expected) do { \ | |
3248f1b4 | 62 | char ACPI_ASSERT_CMP_str[5] = {}; \ |
3831c07b | 63 | memcpy(ACPI_ASSERT_CMP_str, &actual, 4); \ |
3248f1b4 BW |
64 | g_assert_cmpstr(ACPI_ASSERT_CMP_str, ==, expected); \ |
65 | } while (0) | |
66 | ||
67 | #define ACPI_ASSERT_CMP64(actual, expected) do { \ | |
3248f1b4 | 68 | char ACPI_ASSERT_CMP_str[9] = {}; \ |
3831c07b | 69 | memcpy(ACPI_ASSERT_CMP_str, &actual, 8); \ |
3248f1b4 BW |
70 | g_assert_cmpstr(ACPI_ASSERT_CMP_str, ==, expected); \ |
71 | } while (0) | |
72 | ||
77af8a2b PDJ |
73 | |
74 | ||
3248f1b4 | 75 | uint8_t acpi_calc_checksum(const uint8_t *data, int len); |
273e3d92 | 76 | uint32_t acpi_find_rsdp_address(QTestState *qts); |
d6caf363 SO |
77 | uint32_t acpi_get_rsdt_address(uint8_t *rsdp_table); |
78 | uint64_t acpi_get_xsdt_address(uint8_t *rsdp_table); | |
79 | void acpi_parse_rsdp_table(QTestState *qts, uint32_t addr, uint8_t *rsdp_table); | |
3248f1b4 BW |
80 | |
81 | #endif /* TEST_ACPI_UTILS_H */ |