xref: /qemu/tests/uefi-test-tools/UefiTestToolsPkg/Include/Guid/BiosTablesTest.h (revision 09a274d82f13683e82a2930b5567f657297a987a)
1*09a274d8SLaszlo Ersek /** @file
2*09a274d8SLaszlo Ersek   Expose the address(es) of the ACPI RSD PTR table(s) in a MB-aligned structure
3*09a274d8SLaszlo Ersek   to the hypervisor.
4*09a274d8SLaszlo Ersek 
5*09a274d8SLaszlo Ersek   The hypervisor locates the MB-aligned structure based on the signature GUID
6*09a274d8SLaszlo Ersek   that is at offset 0 in the structure. Once the RSD PTR address(es) are
7*09a274d8SLaszlo Ersek   retrieved, the hypervisor may perform various ACPI checks.
8*09a274d8SLaszlo Ersek 
9*09a274d8SLaszlo Ersek   This feature is a development aid, for supporting ACPI table unit tests in
10*09a274d8SLaszlo Ersek   hypervisors. Do not enable in production builds.
11*09a274d8SLaszlo Ersek 
12*09a274d8SLaszlo Ersek   Copyright (C) 2019, Red Hat, Inc.
13*09a274d8SLaszlo Ersek 
14*09a274d8SLaszlo Ersek   This program and the accompanying materials are licensed and made available
15*09a274d8SLaszlo Ersek   under the terms and conditions of the BSD License that accompanies this
16*09a274d8SLaszlo Ersek   distribution. The full text of the license may be found at
17*09a274d8SLaszlo Ersek   <http://opensource.org/licenses/bsd-license.php>.
18*09a274d8SLaszlo Ersek 
19*09a274d8SLaszlo Ersek   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT
20*09a274d8SLaszlo Ersek   WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
21*09a274d8SLaszlo Ersek **/
22*09a274d8SLaszlo Ersek 
23*09a274d8SLaszlo Ersek #ifndef __BIOS_TABLES_TEST_H__
24*09a274d8SLaszlo Ersek #define __BIOS_TABLES_TEST_H__
25*09a274d8SLaszlo Ersek 
26*09a274d8SLaszlo Ersek #include <Uefi/UefiBaseType.h>
27*09a274d8SLaszlo Ersek 
28*09a274d8SLaszlo Ersek #define BIOS_TABLES_TEST_GUID                          \
29*09a274d8SLaszlo Ersek   {                                                    \
30*09a274d8SLaszlo Ersek     0x5478594e,                                        \
31*09a274d8SLaszlo Ersek     0xdfcb,                                            \
32*09a274d8SLaszlo Ersek     0x425f,                                            \
33*09a274d8SLaszlo Ersek     { 0x8e, 0x42, 0xc8, 0xaf, 0xf8, 0x8a, 0x88, 0x7a } \
34*09a274d8SLaszlo Ersek   }
35*09a274d8SLaszlo Ersek 
36*09a274d8SLaszlo Ersek extern EFI_GUID gBiosTablesTestGuid;
37*09a274d8SLaszlo Ersek 
38*09a274d8SLaszlo Ersek //
39*09a274d8SLaszlo Ersek // The following structure must be allocated in Boot Services Data type memory,
40*09a274d8SLaszlo Ersek // aligned at a 1MB boundary.
41*09a274d8SLaszlo Ersek //
42*09a274d8SLaszlo Ersek #pragma pack (1)
43*09a274d8SLaszlo Ersek typedef struct {
44*09a274d8SLaszlo Ersek   //
45*09a274d8SLaszlo Ersek   // The signature GUID is written to the MB-aligned structure from
46*09a274d8SLaszlo Ersek   // gBiosTablesTestGuid, but with all bits inverted. That's the actual GUID
47*09a274d8SLaszlo Ersek   // value that the hypervisor should look for at each MB boundary, looping
48*09a274d8SLaszlo Ersek   // over all guest RAM pages with that alignment, until a match is found. The
49*09a274d8SLaszlo Ersek   // bit-flipping occurs in order not to store the actual GUID in any UEFI
50*09a274d8SLaszlo Ersek   // executable, which might confuse guest memory analysis. Note that EFI_GUID
51*09a274d8SLaszlo Ersek   // has little endian representation.
52*09a274d8SLaszlo Ersek   //
53*09a274d8SLaszlo Ersek   EFI_GUID             InverseSignatureGuid;
54*09a274d8SLaszlo Ersek   //
55*09a274d8SLaszlo Ersek   // The Rsdp10 and Rsdp20 fields may be read when the signature GUID matches.
56*09a274d8SLaszlo Ersek   // Rsdp10 is the guest-physical address of the ACPI 1.0 specification RSD PTR
57*09a274d8SLaszlo Ersek   // table, in 8-byte little endian representation. Rsdp20 is the same, for the
58*09a274d8SLaszlo Ersek   // ACPI 2.0 or later specification RSD PTR table. Each of these fields may be
59*09a274d8SLaszlo Ersek   // zero (independently of the other) if the UEFI System Table does not
60*09a274d8SLaszlo Ersek   // provide the corresponding UEFI Configuration Table.
61*09a274d8SLaszlo Ersek   //
62*09a274d8SLaszlo Ersek   EFI_PHYSICAL_ADDRESS Rsdp10;
63*09a274d8SLaszlo Ersek   EFI_PHYSICAL_ADDRESS Rsdp20;
64*09a274d8SLaszlo Ersek } BIOS_TABLES_TEST;
65*09a274d8SLaszlo Ersek #pragma pack ()
66*09a274d8SLaszlo Ersek 
67*09a274d8SLaszlo Ersek #endif // __BIOS_TABLES_TEST_H__
68