summaryrefslogtreecommitdiffstats
path: root/tboot/include/tboot.h
diff options
context:
space:
mode:
Diffstat (limited to 'tboot/include/tboot.h')
-rw-r--r--tboot/include/tboot.h197
1 files changed, 197 insertions, 0 deletions
diff --git a/tboot/include/tboot.h b/tboot/include/tboot.h
new file mode 100644
index 0000000..ecf7dbe
--- /dev/null
+++ b/tboot/include/tboot.h
@@ -0,0 +1,197 @@
+/*
+ * tboot.h: shared data structure with MLE and kernel and functions
+ * used by kernel for runtime support
+ *
+ * Copyright (c) 2006-2010, Intel Corporation
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of the Intel Corporation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+#ifndef __TBOOT_H__
+#define __TBOOT_H__
+
+#ifndef __packed
+#define __packed __attribute__ ((packed))
+#endif
+
+#define TB_CURRENT_VER 7
+
+/* define uuid_t here in case uuid.h wasn't pre-included */
+/* (i.e. so tboot.h can be self-sufficient) */
+#ifndef __UUID_H__
+typedef struct __packed {
+ uint32_t data1;
+ uint16_t data2;
+ uint16_t data3;
+ uint16_t data4;
+ uint8_t data5[6];
+} uuid_t;
+#endif
+
+/*
+ * used to communicate between tboot and the launched kernel (i.e. Xen)
+ */
+
+#define TB_KEY_SIZE 64 /* 512 bits */
+
+#define MAX_TB_MAC_REGIONS 32
+typedef struct __packed {
+ uint64_t start; /* must be 4k byte -aligned */
+ uint32_t size; /* must be 4k byte -granular */
+} tboot_mac_region_t;
+
+/* GAS - Generic Address Structure (ACPI 2.0+) */
+typedef struct __packed {
+ uint8_t space_id; /* only 0,1 (memory, I/O) are supported */
+ uint8_t bit_width;
+ uint8_t bit_offset;
+ uint8_t access_width; /* only 1-3 (byte, word, dword) are supported */
+ uint64_t address;
+} tboot_acpi_generic_address_t;
+
+typedef struct __packed {
+ tboot_acpi_generic_address_t pm1a_cnt_blk;
+ tboot_acpi_generic_address_t pm1b_cnt_blk;
+ tboot_acpi_generic_address_t pm1a_evt_blk;
+ tboot_acpi_generic_address_t pm1b_evt_blk;
+ uint16_t pm1a_cnt_val;
+ uint16_t pm1b_cnt_val;
+ uint64_t wakeup_vector;
+ uint32_t vector_width;
+ uint64_t kernel_s3_resume_vector;
+} tboot_acpi_sleep_info_t;
+
+#define TB_RESMEM_BLOCKS 128
+
+typedef struct __packed {
+ uint64_t addr;
+ uint64_t length;
+} reserve_map_t;
+
+typedef struct __packed {
+ /* version 3+ fields: */
+ uuid_t uuid; /* {663C8DFF-E8B3-4b82-AABF-19EA4D057A08} */
+ uint32_t version; /* currently 7 for EFI support */
+ uint32_t log_addr; /* physical addr of log or NULL if none */
+ uint32_t shutdown_entry; /* entry point for tboot shutdown */
+ uint32_t shutdown_type; /* type of shutdown (TB_SHUTDOWN_*) */
+ tboot_acpi_sleep_info_t
+ acpi_sinfo; /* where kernel put acpi sleep info in Sx */
+ uint32_t tboot_base; /* starting addr for tboot */
+ uint32_t tboot_size; /* size of tboot */
+ uint8_t num_mac_regions; /* number mem regions to MAC on S3 */
+ /* contig regions memory to MAC on S3 */
+ tboot_mac_region_t mac_regions[MAX_TB_MAC_REGIONS];
+ /* version 4+ fields: */
+ /* populated by tboot; will be encrypted */
+ uint8_t s3_key[TB_KEY_SIZE];
+ /* version 5+ fields: */
+ uint8_t reserved_align[3]; /* used to 4byte-align num_in_wfs */
+ uint32_t num_in_wfs; /* number of processors in wait-for-SIPI */
+ /* version 6+ fields: */
+ uint32_t flags;
+ uint64_t ap_wake_addr; /* phys addr of kernel/VMM SIPI vector */
+ uint32_t ap_wake_trigger; /* kernel/VMM writes APIC ID to wake AP */
+ /* version 7+ fields */
+ /* reserve mem blocks to adjust dom0 E820 */
+ uint64_t reserve_map_count;
+ reserve_map_t reserve_map[TB_RESMEM_BLOCKS];
+} tboot_shared_t;
+
+#define TB_SHUTDOWN_REBOOT 0
+#define TB_SHUTDOWN_S5 1
+#define TB_SHUTDOWN_S4 2
+#define TB_SHUTDOWN_S3 3
+#define TB_SHUTDOWN_HALT 4
+#define TB_SHUTDOWN_WFS 5
+
+#define TB_FLAG_AP_WAKE_SUPPORT 0x00000001 /* kernel/VMM use INIT-SIPI-SIPI
+ if clear, ap_wake_* if set */
+
+/* {663C8DFF-E8B3-4b82-AABF-19EA4D057A08} */
+#define TBOOT_SHARED_UUID {0x663c8dff, 0xe8b3, 0x4b82, 0xaabf, \
+ {0x19, 0xea, 0x4d, 0x5, 0x7a, 0x8 }}
+#define TBOOT_MEM_LOG_SIZE 0x8000
+/*
+ * used to log tboot printk output
+ */
+typedef struct {
+ uuid_t uuid;
+ bool is_init;
+ uint16_t max_size;
+ uint16_t curr_pos;
+ char buf[TBOOT_MEM_LOG_SIZE];
+} tboot_log_t;
+
+/* {C0192526-6B30-4db4-844C-A3E953B88174} */
+#define TBOOT_LOG_UUID {0xc0192526, 0x6b30, 0x4db4, 0x844c, \
+ {0xa3, 0xe9, 0x53, 0xb8, 0x81, 0x74 }}
+
+/* The tboot_shared page */
+tboot_shared_t _tboot_shared;
+
+long s3_flag;
+
+static inline void print_tboot_shared(const tboot_shared_t *tboot_shared)
+{
+ printk(TBOOT_DETA"tboot_shared data:\n");
+ printk(TBOOT_DETA"\t version: %d\n", tboot_shared->version);
+ printk(TBOOT_DETA"\t log_addr: 0x%08x\n", tboot_shared->log_addr);
+ printk(TBOOT_DETA"\t shutdown_entry: 0x%08x\n", tboot_shared->shutdown_entry);
+ printk(TBOOT_DETA"\t shutdown_type: %d\n", tboot_shared->shutdown_type);
+ printk(TBOOT_DETA"\t tboot_base: 0x%08x\n", tboot_shared->tboot_base);
+ printk(TBOOT_DETA"\t tboot_size: 0x%x\n", tboot_shared->tboot_size);
+ printk(TBOOT_DETA"\t num_in_wfs: %u\n", tboot_shared->num_in_wfs);
+ printk(TBOOT_DETA"\t flags: 0x%8.8x\n", tboot_shared->flags);
+ printk(TBOOT_DETA"\t ap_wake_addr: 0x%08x\n", (uint32_t)tboot_shared->ap_wake_addr);
+ printk(TBOOT_DETA"\t ap_wake_trigger: %u\n", tboot_shared->ap_wake_trigger);
+}
+
+void begin_initial_launch(void);
+void begin_launch(efi_xen_tboot_data_t *xtd);
+void s3_launch(void);
+void shutdown(void);
+void cpu_wakeup(uint32_t cpuid, uint64_t sipi_vec);
+
+/* policy */
+void verify_all_modules(void);
+void apply_policy(tb_error_t error);
+tb_error_t set_policy(void);
+
+#endif /* __TBOOT_H__ */
+
+/*
+ * Local variables:
+ * mode: C
+ * c-set-style: "BSD"
+ * c-basic-offset: 4
+ * tab-width: 4
+ * indent-tabs-mode: nil
+ * End:
+ */