xref: /aosp_15_r20/external/coreboot/src/include/cpu/amd/amd64_save_state.h (revision b9411a12aaaa7e1e6a6fb7c5e057f44ee179a49c)
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #ifndef __AMD64_SAVE_STATE_H__
4 #define __AMD64_SAVE_STATE_H__
5 #endif
6 
7 #include <types.h>
8 #include <cpu/x86/smm.h>
9 
10 /* AMD64 x86 SMM State-Save Area
11  * starts @ 0x7e00
12  */
13 #define SMM_AMD64_ARCH_OFFSET 0x7e00
14 #define SMM_AMD64_SAVE_STATE_OFFSET \
15 	SMM_SAVE_STATE_BEGIN(SMM_AMD64_ARCH_OFFSET)
16 typedef struct {
17 	u16	es_selector;
18 	u16	es_attributes;
19 	u32	es_limit;
20 	u64	es_base;
21 
22 	u16	cs_selector;
23 	u16	cs_attributcs;
24 	u32	cs_limit;
25 	u64	cs_base;
26 
27 	u16	ss_selector;
28 	u16	ss_attributss;
29 	u32	ss_limit;
30 	u64	ss_base;
31 
32 	u16	ds_selector;
33 	u16	ds_attributds;
34 	u32	ds_limit;
35 	u64	ds_base;
36 
37 	u16	fs_selector;
38 	u16	fs_attributfs;
39 	u32	fs_limit;
40 	u64	fs_base;
41 
42 	u16	gs_selector;
43 	u16	gs_attributgs;
44 	u32	gs_limit;
45 	u64	gs_base;
46 
47 	u8	reserved0[4];
48 	u16	gdtr_limit;
49 	u8	reserved1[2];
50 	u64	gdtr_base;
51 
52 	u16	ldtr_selector;
53 	u16	ldtr_attributes;
54 	u32	ldtr_limit;
55 	u64	ldtr_base;
56 
57 	u8	reserved2[4];
58 	u16	idtr_limit;
59 	u8	reserved3[2];
60 	u64	idtr_base;
61 
62 	u16	tr_selector;
63 	u16	tr_attributes;
64 	u32	tr_limit;
65 	u64	tr_base;
66 
67 	u64	io_restart_rip;
68 	u64	io_restart_rcx;
69 	u64	io_restart_rsi;
70 	u64	io_restart_rdi;
71 	u32	smm_io_trap_offset;
72 	u32	local_smi_status;
73 
74 	u8	io_restart;
75 	u8	autohalt_restart;
76 
77 	u8	reserved5[6];
78 
79 	u64	efer;
80 
81 	u8	reserved6[36];
82 
83 	u32	smm_revision;
84 	u32	smbase;
85 
86 	u8	reserved7[68];
87 
88 	u64	cr4;
89 	u64	cr3;
90 	u64	cr0;
91 	u64	dr7;
92 	u64	dr6;
93 
94 	u64	rflags;
95 	u64	rip;
96 	u64	r15;
97 	u64	r14;
98 	u64	r13;
99 	u64	r12;
100 	u64	r11;
101 	u64	r10;
102 	u64	r9;
103 	u64	r8;
104 
105 	u64	rdi;
106 	u64	rsi;
107 	u64	rpb;
108 	u64	rsp;
109 	u64	rbx;
110 	u64	rdx;
111 	u64	rcx;
112 	u64	rax;
113 } __packed amd64_smm_state_save_area_t;
114