File tree 3 files changed +33
-6
lines changed
3 files changed +33
-6
lines changed Original file line number Diff line number Diff line change @@ -270,7 +270,7 @@ GLOBAL(_entry)
270
270
*/
271
271
/* Linux expects Zero Page address in %esi, it is already there */
272
272
/* Multiboot2 expects MBI address in %ebx and magic number in %eax */
273
- mov %esi , %ebx
273
+ mov %edi , %ebx
274
274
mov $MULTIBOOT2_BOOTLOADER_MAGIC, %eax
275
275
/* Simple payload expects argument on stack followed by return address */
276
276
push %esi
Original file line number Diff line number Diff line change 31
31
* Common SLRT Table Header
32
32
*/
33
33
struct slr_entry_hdr {
34
- u16 tag ;
35
- u16 size ;
34
+ u32 tag ;
35
+ u32 size ;
36
36
} __packed ;
37
37
38
38
/*
@@ -62,7 +62,7 @@ struct slr_bl_context {
62
62
*/
63
63
struct slr_entry_dl_info {
64
64
struct slr_entry_hdr hdr ;
65
- u32 dce_size ;
65
+ u64 dce_size ;
66
66
u64 dce_base ;
67
67
u64 dlme_size ;
68
68
u64 dlme_base ;
@@ -77,11 +77,24 @@ struct slr_entry_dl_info {
77
77
struct slr_entry_log_info {
78
78
struct slr_entry_hdr hdr ;
79
79
u16 format ;
80
- u16 reserved [ 3 ] ;
80
+ u16 reserved ;
81
81
u32 size ;
82
82
u64 addr ;
83
83
} __packed ;
84
84
85
+ /*
86
+ * AMD SKINIT Info table
87
+ */
88
+ struct slr_entry_amd_info {
89
+ struct slr_entry_hdr hdr ;
90
+ u64 next ;
91
+ u32 type ;
92
+ u32 len ;
93
+ u64 slrt_size ;
94
+ u64 slrt_base ;
95
+ u64 boot_params_base ;
96
+ } __packed ;
97
+
85
98
/* Secure Kernel Loader */
86
99
extern struct slr_table bootloader_data ;
87
100
Original file line number Diff line number Diff line change @@ -255,13 +255,27 @@ typedef struct {
255
255
static asm_return_t amdsl_launch ()
256
256
{
257
257
struct slr_entry_dl_info * dl_info ;
258
+ struct slr_entry_amd_info * amd_info ;
259
+ struct tpm * tpm ;
258
260
asm_return_t ret ;
259
261
262
+ print ("Enter amdsl_launch()\n" );
263
+
264
+ tpm = enable_tpm ();
265
+ tpm_request_locality (tpm , 2 );
266
+ event_log_init (tpm );
267
+
268
+ print ("TPM enabled and logging initialized\n" );
269
+
260
270
dl_info = next_entry_with_tag (NULL , SLR_ENTRY_DL_INFO );
271
+ amd_info = next_entry_with_tag (NULL , SLR_ENTRY_AMD_INFO );
261
272
262
273
if ( dl_info == NULL
274
+ || amd_info == NULL
263
275
|| dl_info -> hdr .size != sizeof (* dl_info )
264
276
|| end_of_slrt () < _p (& dl_info [1 ])
277
+ || amd_info -> hdr .size != sizeof (* amd_info )
278
+ || end_of_slrt () < _p (& amd_info [1 ])
265
279
|| dl_info -> dlme_base >= 0x100000000ULL
266
280
|| dl_info -> dlme_base + dl_info -> dlme_size >= 0x100000000ULL
267
281
|| dl_info -> dlme_entry >= dl_info -> dlme_size
@@ -290,7 +304,7 @@ static asm_return_t amdsl_launch()
290
304
}
291
305
292
306
ret .dlme_entry = _p (dl_info -> dlme_base + dl_info -> dlme_entry );
293
- ret .dlme_arg = _p (dl_info -> bl_context . context );
307
+ ret .dlme_arg = _p (amd_info -> boot_params_base );
294
308
295
309
/* End of the line, off to the protected mode entry into the kernel */
296
310
print ("dlme_entry:\n" );
You can’t perform that action at this time.
0 commit comments