@ -57,6 +57,9 @@
# include "qemu/bitmap.h"
# include "qemu/bitmap.h"
# include "acpi-utils.h"
# include "acpi-utils.h"
# include "boot-sector.h"
# include "boot-sector.h"
# include "tpm-emu.h"
# include "hw/acpi/tpm.h"
# define MACHINE_PC "pc"
# define MACHINE_PC "pc"
# define MACHINE_Q35 "q35"
# define MACHINE_Q35 "q35"
@ -874,6 +877,60 @@ static void test_acpi_piix4_tcg_numamem(void)
free_test_data ( & data ) ;
free_test_data ( & data ) ;
}
}
uint64_t tpm_tis_base_addr ;
static void test_acpi_tcg_tpm ( const char * machine , const char * tpm_if ,
uint64_t base )
{
gchar * tmp_dir_name = g_strdup_printf ( " qemu-test_acpi_%s_tcg_%s.XXXXXX " ,
machine , tpm_if ) ;
char * tmp_path = g_dir_make_tmp ( tmp_dir_name , NULL ) ;
TestState test ;
test_data data ;
GThread * thread ;
char * args , * variant = g_strdup_printf ( " .%s " , tpm_if ) ;
tpm_tis_base_addr = base ;
module_call_init ( MODULE_INIT_QOM ) ;
test . addr = g_new0 ( SocketAddress , 1 ) ;
test . addr - > type = SOCKET_ADDRESS_TYPE_UNIX ;
test . addr - > u . q_unix . path = g_build_filename ( tmp_path , " sock " , NULL ) ;
g_mutex_init ( & test . data_mutex ) ;
g_cond_init ( & test . data_cond ) ;
test . data_cond_signal = false ;
thread = g_thread_new ( NULL , tpm_emu_ctrl_thread , & test ) ;
tpm_emu_test_wait_cond ( & test ) ;
memset ( & data , 0 , sizeof ( data ) ) ;
data . machine = machine ;
data . variant = variant ;
args = g_strdup_printf (
" -chardev socket,id=chr,path=%s "
" -tpmdev emulator,id=dev,chardev=chr "
" -device tpm-%s,tpmdev=dev " ,
test . addr - > u . q_unix . path , tpm_if ) ;
test_acpi_one ( args , & data ) ;
g_thread_join ( thread ) ;
g_unlink ( test . addr - > u . q_unix . path ) ;
qapi_free_SocketAddress ( test . addr ) ;
g_rmdir ( tmp_path ) ;
g_free ( variant ) ;
g_free ( tmp_path ) ;
g_free ( tmp_dir_name ) ;
free_test_data ( & data ) ;
}
static void test_acpi_q35_tcg_tpm_tis ( void )
{
test_acpi_tcg_tpm ( " q35 " , " tis " , 0xFED40000 ) ;
}
static void test_acpi_tcg_dimm_pxm ( const char * machine )
static void test_acpi_tcg_dimm_pxm ( const char * machine )
{
{
test_data data ;
test_data data ;
@ -1037,6 +1094,7 @@ int main(int argc, char *argv[])
return ret ;
return ret ;
}
}
qtest_add_func ( " acpi/q35/tpm-tis " , test_acpi_q35_tcg_tpm_tis ) ;
qtest_add_func ( " acpi/piix4 " , test_acpi_piix4_tcg ) ;
qtest_add_func ( " acpi/piix4 " , test_acpi_piix4_tcg ) ;
qtest_add_func ( " acpi/piix4/bridge " , test_acpi_piix4_tcg_bridge ) ;
qtest_add_func ( " acpi/piix4/bridge " , test_acpi_piix4_tcg_bridge ) ;
qtest_add_func ( " acpi/q35 " , test_acpi_q35_tcg ) ;
qtest_add_func ( " acpi/q35 " , test_acpi_q35_tcg ) ;