1a61127c2SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 269575d38SShane Wang /* 369575d38SShane Wang * tboot.h: shared data structure with tboot and kernel and functions 469575d38SShane Wang * used by kernel for runtime support of Intel(R) Trusted 569575d38SShane Wang * Execution Technology 669575d38SShane Wang * 769575d38SShane Wang * Copyright (c) 2006-2009, Intel Corporation 869575d38SShane Wang */ 969575d38SShane Wang 1069575d38SShane Wang #ifndef _LINUX_TBOOT_H 1169575d38SShane Wang #define _LINUX_TBOOT_H 1269575d38SShane Wang 1369575d38SShane Wang /* these must have the values from 0-5 in this order */ 1469575d38SShane Wang enum { 1569575d38SShane Wang TB_SHUTDOWN_REBOOT = 0, 1669575d38SShane Wang TB_SHUTDOWN_S5, 1769575d38SShane Wang TB_SHUTDOWN_S4, 1869575d38SShane Wang TB_SHUTDOWN_S3, 1969575d38SShane Wang TB_SHUTDOWN_HALT, 2069575d38SShane Wang TB_SHUTDOWN_WFS 2169575d38SShane Wang }; 2269575d38SShane Wang 2369575d38SShane Wang #ifdef CONFIG_INTEL_TXT 248b48463fSLv Zheng #include <linux/acpi.h> 2569575d38SShane Wang /* used to communicate between tboot and the launched kernel */ 2669575d38SShane Wang 2769575d38SShane Wang #define TB_KEY_SIZE 64 /* 512 bits */ 2869575d38SShane Wang 2969575d38SShane Wang #define MAX_TB_MAC_REGIONS 32 3069575d38SShane Wang 3169575d38SShane Wang struct tboot_mac_region { 3269575d38SShane Wang u64 start; /* must be 64 byte -aligned */ 3369575d38SShane Wang u32 size; /* must be 64 byte -granular */ 3469575d38SShane Wang } __packed; 3569575d38SShane Wang 3669575d38SShane Wang /* GAS - Generic Address Structure (ACPI 2.0+) */ 3769575d38SShane Wang struct tboot_acpi_generic_address { 3869575d38SShane Wang u8 space_id; 3969575d38SShane Wang u8 bit_width; 4069575d38SShane Wang u8 bit_offset; 4169575d38SShane Wang u8 access_width; 4269575d38SShane Wang u64 address; 4369575d38SShane Wang } __packed; 4469575d38SShane Wang 4569575d38SShane Wang /* 4669575d38SShane Wang * combines Sx info from FADT and FACS tables per ACPI 2.0+ spec 47*0585c1c0STiezhu Yang * (https://uefi.org/specifications) 4869575d38SShane Wang */ 4969575d38SShane Wang struct tboot_acpi_sleep_info { 5069575d38SShane Wang struct tboot_acpi_generic_address pm1a_cnt_blk; 5169575d38SShane Wang struct tboot_acpi_generic_address pm1b_cnt_blk; 5269575d38SShane Wang struct tboot_acpi_generic_address pm1a_evt_blk; 5369575d38SShane Wang struct tboot_acpi_generic_address pm1b_evt_blk; 5469575d38SShane Wang u16 pm1a_cnt_val; 5569575d38SShane Wang u16 pm1b_cnt_val; 5669575d38SShane Wang u64 wakeup_vector; 5769575d38SShane Wang u32 vector_width; 5869575d38SShane Wang u64 kernel_s3_resume_vector; 5969575d38SShane Wang } __packed; 6069575d38SShane Wang 6169575d38SShane Wang /* 6269575d38SShane Wang * shared memory page used for communication between tboot and kernel 6369575d38SShane Wang */ 6469575d38SShane Wang struct tboot { 6569575d38SShane Wang /* 6669575d38SShane Wang * version 3+ fields: 6769575d38SShane Wang */ 6869575d38SShane Wang 6969575d38SShane Wang /* TBOOT_UUID */ 7069575d38SShane Wang u8 uuid[16]; 7169575d38SShane Wang 7269575d38SShane Wang /* version number: 5 is current */ 7369575d38SShane Wang u32 version; 7469575d38SShane Wang 7569575d38SShane Wang /* physical addr of tb_log_t log */ 7669575d38SShane Wang u32 log_addr; 7769575d38SShane Wang 7869575d38SShane Wang /* 7969575d38SShane Wang * physical addr of entry point for tboot shutdown and 8069575d38SShane Wang * type of shutdown (TB_SHUTDOWN_*) being requested 8169575d38SShane Wang */ 8269575d38SShane Wang u32 shutdown_entry; 8369575d38SShane Wang u32 shutdown_type; 8469575d38SShane Wang 8569575d38SShane Wang /* kernel-specified ACPI info for Sx shutdown */ 8669575d38SShane Wang struct tboot_acpi_sleep_info acpi_sinfo; 8769575d38SShane Wang 8869575d38SShane Wang /* tboot location in memory (physical) */ 8969575d38SShane Wang u32 tboot_base; 9069575d38SShane Wang u32 tboot_size; 9169575d38SShane Wang 9269575d38SShane Wang /* memory regions (phys addrs) for tboot to MAC on S3 */ 9369575d38SShane Wang u8 num_mac_regions; 9469575d38SShane Wang struct tboot_mac_region mac_regions[MAX_TB_MAC_REGIONS]; 9569575d38SShane Wang 9669575d38SShane Wang 9769575d38SShane Wang /* 9869575d38SShane Wang * version 4+ fields: 9969575d38SShane Wang */ 10069575d38SShane Wang 10169575d38SShane Wang /* symmetric key for use by kernel; will be encrypted on S3 */ 10269575d38SShane Wang u8 s3_key[TB_KEY_SIZE]; 10369575d38SShane Wang 10469575d38SShane Wang 10569575d38SShane Wang /* 10669575d38SShane Wang * version 5+ fields: 10769575d38SShane Wang */ 10869575d38SShane Wang 10969575d38SShane Wang /* used to 4byte-align num_in_wfs */ 11069575d38SShane Wang u8 reserved_align[3]; 11169575d38SShane Wang 11269575d38SShane Wang /* number of processors in wait-for-SIPI */ 11369575d38SShane Wang u32 num_in_wfs; 11469575d38SShane Wang } __packed; 11569575d38SShane Wang 11669575d38SShane Wang /* 11769575d38SShane Wang * UUID for tboot data struct to facilitate matching 11869575d38SShane Wang * defined as {663C8DFF-E8B3-4b82-AABF-19EA4D057A08} by tboot, which is 11969575d38SShane Wang * represented as {} in the char array used here 12069575d38SShane Wang */ 12169575d38SShane Wang #define TBOOT_UUID {0xff, 0x8d, 0x3c, 0x66, 0xb3, 0xe8, 0x82, 0x4b, 0xbf,\ 12269575d38SShane Wang 0xaa, 0x19, 0xea, 0x4d, 0x5, 0x7a, 0x8} 12369575d38SShane Wang 124767dea21SChristoph Hellwig bool tboot_enabled(void); 12569575d38SShane Wang extern void tboot_probe(void); 12669575d38SShane Wang extern void tboot_shutdown(u32 shutdown_type); 12769575d38SShane Wang extern struct acpi_table_header *tboot_get_dmar_table( 12869575d38SShane Wang struct acpi_table_header *dmar_tbl); 12969575d38SShane Wang 13069575d38SShane Wang #else 13169575d38SShane Wang 132cafd6659SShane Wang #define tboot_enabled() 0 13369575d38SShane Wang #define tboot_probe() do { } while (0) 13469575d38SShane Wang #define tboot_shutdown(shutdown_type) do { } while (0) 13569575d38SShane Wang #define tboot_sleep(sleep_state, pm1a_control, pm1b_control) \ 13669575d38SShane Wang do { } while (0) 13769575d38SShane Wang #define tboot_get_dmar_table(dmar_tbl) (dmar_tbl) 13869575d38SShane Wang 13969575d38SShane Wang #endif /* !CONFIG_INTEL_TXT */ 14069575d38SShane Wang 14169575d38SShane Wang #endif /* _LINUX_TBOOT_H */ 142