1*5f74217cSAbdelkader Boudih /* 2*5f74217cSAbdelkader Boudih * Copyright (c) 2026 Abdelkader Boudih <freebsd@seuros.com> 3*5f74217cSAbdelkader Boudih * 4*5f74217cSAbdelkader Boudih * SPDX-License-Identifier: BSD-2-Clause 5*5f74217cSAbdelkader Boudih */ 6*5f74217cSAbdelkader Boudih 7*5f74217cSAbdelkader Boudih /* 8*5f74217cSAbdelkader Boudih * coreboot(4) userland-visible definitions. 9*5f74217cSAbdelkader Boudih * 10*5f74217cSAbdelkader Boudih * This header is safe to include from both kernel and userland code. 11*5f74217cSAbdelkader Boudih * It contains the /dev/cbmem ioctl interface, CBMEM ID constants, 12*5f74217cSAbdelkader Boudih * and timestamp structures needed by the cbmem(8) utility. 13*5f74217cSAbdelkader Boudih */ 14*5f74217cSAbdelkader Boudih 15*5f74217cSAbdelkader Boudih #ifndef _DEV_COREBOOT_COREBOOT_IOCTL_H_ 16*5f74217cSAbdelkader Boudih #define _DEV_COREBOOT_COREBOOT_IOCTL_H_ 17*5f74217cSAbdelkader Boudih 18*5f74217cSAbdelkader Boudih #include <sys/types.h> 19*5f74217cSAbdelkader Boudih #include <sys/ioccom.h> 20*5f74217cSAbdelkader Boudih 21*5f74217cSAbdelkader Boudih /* 22*5f74217cSAbdelkader Boudih * CBMEM ID constants (from coreboot's BSD-3-Clause cbmem_id.h). 23*5f74217cSAbdelkader Boudih * Used for human-readable CBMEM entry names in sysctl and ioctl output. 24*5f74217cSAbdelkader Boudih */ 25*5f74217cSAbdelkader Boudih #define CBMEM_ID_ACPI 0x41435049 26*5f74217cSAbdelkader Boudih #define CBMEM_ID_ACPI_GNVS 0x474e5653 27*5f74217cSAbdelkader Boudih #define CBMEM_ID_AFTER_CAR 0xc4787a93 28*5f74217cSAbdelkader Boudih #define CBMEM_ID_CBTABLE 0x43425442 29*5f74217cSAbdelkader Boudih #define CBMEM_ID_CBTABLE_FWD 0x43425443 30*5f74217cSAbdelkader Boudih #define CBMEM_ID_CBFS_RO_MCACHE 0x524d5346 31*5f74217cSAbdelkader Boudih #define CBMEM_ID_CBFS_RW_MCACHE 0x574d5346 32*5f74217cSAbdelkader Boudih #define CBMEM_ID_CONSOLE 0x434f4e53 33*5f74217cSAbdelkader Boudih #define CBMEM_ID_ELOG 0x454c4f47 34*5f74217cSAbdelkader Boudih #define CBMEM_ID_FMAP 0x464d4150 35*5f74217cSAbdelkader Boudih #define CBMEM_ID_FREESPACE 0x46524545 36*5f74217cSAbdelkader Boudih #define CBMEM_ID_FSP_RESERVED_MEMORY 0x46535052 37*5f74217cSAbdelkader Boudih #define CBMEM_ID_FSP_RUNTIME 0x52505346 38*5f74217cSAbdelkader Boudih #define CBMEM_ID_FSPM_VERSION 0x56505346 39*5f74217cSAbdelkader Boudih #define CBMEM_ID_IGD_OPREGION 0x4f444749 40*5f74217cSAbdelkader Boudih #define CBMEM_ID_IMD_ROOT 0xff4017ff 41*5f74217cSAbdelkader Boudih #define CBMEM_ID_IMD_SMALL 0x53a11439 42*5f74217cSAbdelkader Boudih #define CBMEM_ID_MEMINFO 0x494d454d 43*5f74217cSAbdelkader Boudih #define CBMEM_ID_MPTABLE 0x534d5054 44*5f74217cSAbdelkader Boudih #define CBMEM_ID_MRCDATA 0x4d524344 45*5f74217cSAbdelkader Boudih #define CBMEM_ID_PIRQ 0x49525154 46*5f74217cSAbdelkader Boudih #define CBMEM_ID_POWER_STATE 0x50535454 47*5f74217cSAbdelkader Boudih #define CBMEM_ID_RAM_OOPS 0x05430095 48*5f74217cSAbdelkader Boudih #define CBMEM_ID_RAMSTAGE 0x9a357a9e 49*5f74217cSAbdelkader Boudih #define CBMEM_ID_REFCODE 0x04efc0de 50*5f74217cSAbdelkader Boudih #define CBMEM_ID_RESUME 0x5245534d 51*5f74217cSAbdelkader Boudih #define CBMEM_ID_ROMSTAGE_INFO 0x47545352 52*5f74217cSAbdelkader Boudih #define CBMEM_ID_ROMSTAGE_RAM_STACK 0x90357ac4 53*5f74217cSAbdelkader Boudih #define CBMEM_ID_ROOT 0xff4007ff 54*5f74217cSAbdelkader Boudih #define CBMEM_ID_SMBIOS 0x534d4254 55*5f74217cSAbdelkader Boudih #define CBMEM_ID_SMM_COMBUFFER 0x53534d32 56*5f74217cSAbdelkader Boudih #define CBMEM_ID_SMM_SAVE_SPACE 0x07e9acee 57*5f74217cSAbdelkader Boudih #define CBMEM_ID_TIMESTAMP 0x54494d45 58*5f74217cSAbdelkader Boudih #define CBMEM_ID_TPM_CB_LOG 0x54435041 59*5f74217cSAbdelkader Boudih #define CBMEM_ID_VBOOT_WORKBUF 0x78007343 60*5f74217cSAbdelkader Boudih #define CBMEM_ID_VPD 0x56504420 61*5f74217cSAbdelkader Boudih 62*5f74217cSAbdelkader Boudih #define CB_MAX_CBMEM_ENTRIES 64 63*5f74217cSAbdelkader Boudih 64*5f74217cSAbdelkader Boudih /* 65*5f74217cSAbdelkader Boudih * /dev/cbmem ioctl interface 66*5f74217cSAbdelkader Boudih */ 67*5f74217cSAbdelkader Boudih struct cbmem_entry_info { 68*5f74217cSAbdelkader Boudih uint32_t id; 69*5f74217cSAbdelkader Boudih uint64_t address; 70*5f74217cSAbdelkader Boudih uint32_t size; 71*5f74217cSAbdelkader Boudih char name[16]; 72*5f74217cSAbdelkader Boudih }; 73*5f74217cSAbdelkader Boudih 74*5f74217cSAbdelkader Boudih struct cbmem_list { 75*5f74217cSAbdelkader Boudih uint32_t count; 76*5f74217cSAbdelkader Boudih struct cbmem_entry_info entries[CB_MAX_CBMEM_ENTRIES]; 77*5f74217cSAbdelkader Boudih }; 78*5f74217cSAbdelkader Boudih 79*5f74217cSAbdelkader Boudih struct cbmem_read_req { 80*5f74217cSAbdelkader Boudih uint32_t id; 81*5f74217cSAbdelkader Boudih uint64_t offset; 82*5f74217cSAbdelkader Boudih uint32_t size; 83*5f74217cSAbdelkader Boudih void *buffer; 84*5f74217cSAbdelkader Boudih }; 85*5f74217cSAbdelkader Boudih 86*5f74217cSAbdelkader Boudih #define CBMEM_IOC_LIST _IOR('C', 1, struct cbmem_list) 87*5f74217cSAbdelkader Boudih #define CBMEM_IOC_READ _IOWR('C', 2, struct cbmem_read_req) 88*5f74217cSAbdelkader Boudih 89*5f74217cSAbdelkader Boudih /* 90*5f74217cSAbdelkader Boudih * Timestamp structures - stored in a CBMEM region. 91*5f74217cSAbdelkader Boudih * Used by both the kernel driver and cbmem(8) utility. 92*5f74217cSAbdelkader Boudih */ 93*5f74217cSAbdelkader Boudih struct cb_timestamp_entry { 94*5f74217cSAbdelkader Boudih uint32_t entry_id; 95*5f74217cSAbdelkader Boudih int64_t entry_stamp; 96*5f74217cSAbdelkader Boudih } __packed; 97*5f74217cSAbdelkader Boudih 98*5f74217cSAbdelkader Boudih struct cb_timestamp_table { 99*5f74217cSAbdelkader Boudih uint64_t base_time; 100*5f74217cSAbdelkader Boudih uint16_t max_entries; 101*5f74217cSAbdelkader Boudih uint16_t tick_freq_mhz; 102*5f74217cSAbdelkader Boudih uint32_t num_entries; 103*5f74217cSAbdelkader Boudih struct cb_timestamp_entry entries[]; 104*5f74217cSAbdelkader Boudih } __packed; 105*5f74217cSAbdelkader Boudih 106*5f74217cSAbdelkader Boudih /* 107*5f74217cSAbdelkader Boudih * TPM CB log structures - stored in a CBMEM region. 108*5f74217cSAbdelkader Boudih * Used by both the kernel driver and cbmem(8) utility. 109*5f74217cSAbdelkader Boudih */ 110*5f74217cSAbdelkader Boudih struct tpm_cb_log_entry { 111*5f74217cSAbdelkader Boudih uint32_t pcr; 112*5f74217cSAbdelkader Boudih uint32_t event_type; 113*5f74217cSAbdelkader Boudih uint8_t digest[20]; /* SHA-1 */ 114*5f74217cSAbdelkader Boudih uint32_t data_len; 115*5f74217cSAbdelkader Boudih } __packed; 116*5f74217cSAbdelkader Boudih 117*5f74217cSAbdelkader Boudih struct tpm_cb_log_table { 118*5f74217cSAbdelkader Boudih uint16_t max_entries; 119*5f74217cSAbdelkader Boudih uint16_t num_entries; 120*5f74217cSAbdelkader Boudih uint32_t entry_size; 121*5f74217cSAbdelkader Boudih } __packed; 122*5f74217cSAbdelkader Boudih 123*5f74217cSAbdelkader Boudih #endif /* _DEV_COREBOOT_COREBOOT_IOCTL_H_ */ 124