2 * Copyright (C) 2017 Google
5 * Thiebaud Weksteen <tweek@google.com>
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version
10 * 2 of the License, or (at your option) any later version.
14 #include <linux/efi.h>
15 #include <linux/tpm_eventlog.h>
19 /* read binary bios log from EFI configuration table */
20 int tpm_read_log_efi(struct tpm_chip
*chip
)
23 struct linux_efi_tpm_eventlog
*log_tbl
;
24 struct tpm_bios_log
*log
;
28 if (!(chip
->flags
& TPM_CHIP_FLAG_TPM2
))
31 if (efi
.tpm_log
== EFI_INVALID_TABLE_ADDR
)
36 log_tbl
= memremap(efi
.tpm_log
, sizeof(*log_tbl
), MEMREMAP_WB
);
38 pr_err("Could not map UEFI TPM log table !\n");
42 log_size
= log_tbl
->size
;
45 log_tbl
= memremap(efi
.tpm_log
, sizeof(*log_tbl
) + log_size
,
48 pr_err("Could not map UEFI TPM log table payload!\n");
52 /* malloc EventLog space */
53 log
->bios_event_log
= kmalloc(log_size
, GFP_KERNEL
);
54 if (!log
->bios_event_log
)
56 memcpy(log
->bios_event_log
, log_tbl
->log
, log_size
);
57 log
->bios_event_log_end
= log
->bios_event_log
+ log_size
;
59 tpm_log_version
= log_tbl
->version
;
61 return tpm_log_version
;