1*f80ad8b4SAndroid Build Coastguard Worker /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2*f80ad8b4SAndroid Build Coastguard Worker /* 3*f80ad8b4SAndroid Build Coastguard Worker * Platform Firmware Runtime Update header 4*f80ad8b4SAndroid Build Coastguard Worker * 5*f80ad8b4SAndroid Build Coastguard Worker * Copyright(c) 2021 Intel Corporation. All rights reserved. 6*f80ad8b4SAndroid Build Coastguard Worker */ 7*f80ad8b4SAndroid Build Coastguard Worker #ifndef __PFRUT_H__ 8*f80ad8b4SAndroid Build Coastguard Worker #define __PFRUT_H__ 9*f80ad8b4SAndroid Build Coastguard Worker 10*f80ad8b4SAndroid Build Coastguard Worker #include <linux/ioctl.h> 11*f80ad8b4SAndroid Build Coastguard Worker #include <linux/types.h> 12*f80ad8b4SAndroid Build Coastguard Worker 13*f80ad8b4SAndroid Build Coastguard Worker #define PFRUT_IOCTL_MAGIC 0xEE 14*f80ad8b4SAndroid Build Coastguard Worker 15*f80ad8b4SAndroid Build Coastguard Worker /** 16*f80ad8b4SAndroid Build Coastguard Worker * PFRU_IOC_SET_REV - _IOW(PFRUT_IOCTL_MAGIC, 0x01, unsigned int) 17*f80ad8b4SAndroid Build Coastguard Worker * 18*f80ad8b4SAndroid Build Coastguard Worker * Return: 19*f80ad8b4SAndroid Build Coastguard Worker * * 0 - success 20*f80ad8b4SAndroid Build Coastguard Worker * * -EFAULT - fail to read the revision id 21*f80ad8b4SAndroid Build Coastguard Worker * * -EINVAL - user provides an invalid revision id 22*f80ad8b4SAndroid Build Coastguard Worker * 23*f80ad8b4SAndroid Build Coastguard Worker * Set the Revision ID for Platform Firmware Runtime Update. 24*f80ad8b4SAndroid Build Coastguard Worker */ 25*f80ad8b4SAndroid Build Coastguard Worker #define PFRU_IOC_SET_REV _IOW(PFRUT_IOCTL_MAGIC, 0x01, unsigned int) 26*f80ad8b4SAndroid Build Coastguard Worker 27*f80ad8b4SAndroid Build Coastguard Worker /** 28*f80ad8b4SAndroid Build Coastguard Worker * PFRU_IOC_STAGE - _IOW(PFRUT_IOCTL_MAGIC, 0x02, unsigned int) 29*f80ad8b4SAndroid Build Coastguard Worker * 30*f80ad8b4SAndroid Build Coastguard Worker * Return: 31*f80ad8b4SAndroid Build Coastguard Worker * * 0 - success 32*f80ad8b4SAndroid Build Coastguard Worker * * -EINVAL - stage phase returns invalid result 33*f80ad8b4SAndroid Build Coastguard Worker * 34*f80ad8b4SAndroid Build Coastguard Worker * Stage a capsule image from communication buffer and perform authentication. 35*f80ad8b4SAndroid Build Coastguard Worker */ 36*f80ad8b4SAndroid Build Coastguard Worker #define PFRU_IOC_STAGE _IOW(PFRUT_IOCTL_MAGIC, 0x02, unsigned int) 37*f80ad8b4SAndroid Build Coastguard Worker 38*f80ad8b4SAndroid Build Coastguard Worker /** 39*f80ad8b4SAndroid Build Coastguard Worker * PFRU_IOC_ACTIVATE - _IOW(PFRUT_IOCTL_MAGIC, 0x03, unsigned int) 40*f80ad8b4SAndroid Build Coastguard Worker * 41*f80ad8b4SAndroid Build Coastguard Worker * Return: 42*f80ad8b4SAndroid Build Coastguard Worker * * 0 - success 43*f80ad8b4SAndroid Build Coastguard Worker * * -EINVAL - activate phase returns invalid result 44*f80ad8b4SAndroid Build Coastguard Worker * 45*f80ad8b4SAndroid Build Coastguard Worker * Activate a previously staged capsule image. 46*f80ad8b4SAndroid Build Coastguard Worker */ 47*f80ad8b4SAndroid Build Coastguard Worker #define PFRU_IOC_ACTIVATE _IOW(PFRUT_IOCTL_MAGIC, 0x03, unsigned int) 48*f80ad8b4SAndroid Build Coastguard Worker 49*f80ad8b4SAndroid Build Coastguard Worker /** 50*f80ad8b4SAndroid Build Coastguard Worker * PFRU_IOC_STAGE_ACTIVATE - _IOW(PFRUT_IOCTL_MAGIC, 0x04, unsigned int) 51*f80ad8b4SAndroid Build Coastguard Worker * 52*f80ad8b4SAndroid Build Coastguard Worker * Return: 53*f80ad8b4SAndroid Build Coastguard Worker * * 0 - success 54*f80ad8b4SAndroid Build Coastguard Worker * * -EINVAL - stage/activate phase returns invalid result. 55*f80ad8b4SAndroid Build Coastguard Worker * 56*f80ad8b4SAndroid Build Coastguard Worker * Perform both stage and activation action. 57*f80ad8b4SAndroid Build Coastguard Worker */ 58*f80ad8b4SAndroid Build Coastguard Worker #define PFRU_IOC_STAGE_ACTIVATE _IOW(PFRUT_IOCTL_MAGIC, 0x04, unsigned int) 59*f80ad8b4SAndroid Build Coastguard Worker 60*f80ad8b4SAndroid Build Coastguard Worker /** 61*f80ad8b4SAndroid Build Coastguard Worker * PFRU_IOC_QUERY_CAP - _IOR(PFRUT_IOCTL_MAGIC, 0x05, 62*f80ad8b4SAndroid Build Coastguard Worker * struct pfru_update_cap_info) 63*f80ad8b4SAndroid Build Coastguard Worker * 64*f80ad8b4SAndroid Build Coastguard Worker * Return: 65*f80ad8b4SAndroid Build Coastguard Worker * * 0 - success 66*f80ad8b4SAndroid Build Coastguard Worker * * -EINVAL - query phase returns invalid result 67*f80ad8b4SAndroid Build Coastguard Worker * * -EFAULT - the result fails to be copied to userspace 68*f80ad8b4SAndroid Build Coastguard Worker * 69*f80ad8b4SAndroid Build Coastguard Worker * Retrieve information on the Platform Firmware Runtime Update capability. 70*f80ad8b4SAndroid Build Coastguard Worker * The information is a struct pfru_update_cap_info. 71*f80ad8b4SAndroid Build Coastguard Worker */ 72*f80ad8b4SAndroid Build Coastguard Worker #define PFRU_IOC_QUERY_CAP _IOR(PFRUT_IOCTL_MAGIC, 0x05, struct pfru_update_cap_info) 73*f80ad8b4SAndroid Build Coastguard Worker 74*f80ad8b4SAndroid Build Coastguard Worker /** 75*f80ad8b4SAndroid Build Coastguard Worker * struct pfru_payload_hdr - Capsule file payload header. 76*f80ad8b4SAndroid Build Coastguard Worker * 77*f80ad8b4SAndroid Build Coastguard Worker * @sig: Signature of this capsule file. 78*f80ad8b4SAndroid Build Coastguard Worker * @hdr_version: Revision of this header structure. 79*f80ad8b4SAndroid Build Coastguard Worker * @hdr_size: Size of this header, including the OemHeader bytes. 80*f80ad8b4SAndroid Build Coastguard Worker * @hw_ver: The supported firmware version. 81*f80ad8b4SAndroid Build Coastguard Worker * @rt_ver: Version of the code injection image. 82*f80ad8b4SAndroid Build Coastguard Worker * @platform_id: A platform specific GUID to specify the platform what 83*f80ad8b4SAndroid Build Coastguard Worker * this capsule image support. 84*f80ad8b4SAndroid Build Coastguard Worker */ 85*f80ad8b4SAndroid Build Coastguard Worker struct pfru_payload_hdr { 86*f80ad8b4SAndroid Build Coastguard Worker __u32 sig; 87*f80ad8b4SAndroid Build Coastguard Worker __u32 hdr_version; 88*f80ad8b4SAndroid Build Coastguard Worker __u32 hdr_size; 89*f80ad8b4SAndroid Build Coastguard Worker __u32 hw_ver; 90*f80ad8b4SAndroid Build Coastguard Worker __u32 rt_ver; 91*f80ad8b4SAndroid Build Coastguard Worker __u8 platform_id[16]; 92*f80ad8b4SAndroid Build Coastguard Worker }; 93*f80ad8b4SAndroid Build Coastguard Worker 94*f80ad8b4SAndroid Build Coastguard Worker enum pfru_dsm_status { 95*f80ad8b4SAndroid Build Coastguard Worker DSM_SUCCEED = 0, 96*f80ad8b4SAndroid Build Coastguard Worker DSM_FUNC_NOT_SUPPORT = 1, 97*f80ad8b4SAndroid Build Coastguard Worker DSM_INVAL_INPUT = 2, 98*f80ad8b4SAndroid Build Coastguard Worker DSM_HARDWARE_ERR = 3, 99*f80ad8b4SAndroid Build Coastguard Worker DSM_RETRY_SUGGESTED = 4, 100*f80ad8b4SAndroid Build Coastguard Worker DSM_UNKNOWN = 5, 101*f80ad8b4SAndroid Build Coastguard Worker DSM_FUNC_SPEC_ERR = 6, 102*f80ad8b4SAndroid Build Coastguard Worker }; 103*f80ad8b4SAndroid Build Coastguard Worker 104*f80ad8b4SAndroid Build Coastguard Worker /** 105*f80ad8b4SAndroid Build Coastguard Worker * struct pfru_update_cap_info - Runtime update capability information. 106*f80ad8b4SAndroid Build Coastguard Worker * 107*f80ad8b4SAndroid Build Coastguard Worker * @status: Indicator of whether this query succeed. 108*f80ad8b4SAndroid Build Coastguard Worker * @update_cap: Bitmap to indicate whether the feature is supported. 109*f80ad8b4SAndroid Build Coastguard Worker * @code_type: A buffer containing an image type GUID. 110*f80ad8b4SAndroid Build Coastguard Worker * @fw_version: Platform firmware version. 111*f80ad8b4SAndroid Build Coastguard Worker * @code_rt_version: Code injection runtime version for anti-rollback. 112*f80ad8b4SAndroid Build Coastguard Worker * @drv_type: A buffer containing an image type GUID. 113*f80ad8b4SAndroid Build Coastguard Worker * @drv_rt_version: The version of the driver update runtime code. 114*f80ad8b4SAndroid Build Coastguard Worker * @drv_svn: The secure version number(SVN) of the driver update runtime code. 115*f80ad8b4SAndroid Build Coastguard Worker * @platform_id: A buffer containing a platform ID GUID. 116*f80ad8b4SAndroid Build Coastguard Worker * @oem_id: A buffer containing an OEM ID GUID. 117*f80ad8b4SAndroid Build Coastguard Worker * @oem_info_len: Length of the buffer containing the vendor specific information. 118*f80ad8b4SAndroid Build Coastguard Worker */ 119*f80ad8b4SAndroid Build Coastguard Worker struct pfru_update_cap_info { 120*f80ad8b4SAndroid Build Coastguard Worker __u32 status; 121*f80ad8b4SAndroid Build Coastguard Worker __u32 update_cap; 122*f80ad8b4SAndroid Build Coastguard Worker 123*f80ad8b4SAndroid Build Coastguard Worker __u8 code_type[16]; 124*f80ad8b4SAndroid Build Coastguard Worker __u32 fw_version; 125*f80ad8b4SAndroid Build Coastguard Worker __u32 code_rt_version; 126*f80ad8b4SAndroid Build Coastguard Worker 127*f80ad8b4SAndroid Build Coastguard Worker __u8 drv_type[16]; 128*f80ad8b4SAndroid Build Coastguard Worker __u32 drv_rt_version; 129*f80ad8b4SAndroid Build Coastguard Worker __u32 drv_svn; 130*f80ad8b4SAndroid Build Coastguard Worker 131*f80ad8b4SAndroid Build Coastguard Worker __u8 platform_id[16]; 132*f80ad8b4SAndroid Build Coastguard Worker __u8 oem_id[16]; 133*f80ad8b4SAndroid Build Coastguard Worker 134*f80ad8b4SAndroid Build Coastguard Worker __u32 oem_info_len; 135*f80ad8b4SAndroid Build Coastguard Worker }; 136*f80ad8b4SAndroid Build Coastguard Worker 137*f80ad8b4SAndroid Build Coastguard Worker /** 138*f80ad8b4SAndroid Build Coastguard Worker * struct pfru_com_buf_info - Communication buffer information. 139*f80ad8b4SAndroid Build Coastguard Worker * 140*f80ad8b4SAndroid Build Coastguard Worker * @status: Indicator of whether this query succeed. 141*f80ad8b4SAndroid Build Coastguard Worker * @ext_status: Implementation specific query result. 142*f80ad8b4SAndroid Build Coastguard Worker * @addr_lo: Low 32bit physical address of the communication buffer to hold 143*f80ad8b4SAndroid Build Coastguard Worker * a runtime update package. 144*f80ad8b4SAndroid Build Coastguard Worker * @addr_hi: High 32bit physical address of the communication buffer to hold 145*f80ad8b4SAndroid Build Coastguard Worker * a runtime update package. 146*f80ad8b4SAndroid Build Coastguard Worker * @buf_size: Maximum size in bytes of the communication buffer. 147*f80ad8b4SAndroid Build Coastguard Worker */ 148*f80ad8b4SAndroid Build Coastguard Worker struct pfru_com_buf_info { 149*f80ad8b4SAndroid Build Coastguard Worker __u32 status; 150*f80ad8b4SAndroid Build Coastguard Worker __u32 ext_status; 151*f80ad8b4SAndroid Build Coastguard Worker __u64 addr_lo; 152*f80ad8b4SAndroid Build Coastguard Worker __u64 addr_hi; 153*f80ad8b4SAndroid Build Coastguard Worker __u32 buf_size; 154*f80ad8b4SAndroid Build Coastguard Worker }; 155*f80ad8b4SAndroid Build Coastguard Worker 156*f80ad8b4SAndroid Build Coastguard Worker /** 157*f80ad8b4SAndroid Build Coastguard Worker * struct pfru_updated_result - Platform firmware runtime update result information. 158*f80ad8b4SAndroid Build Coastguard Worker * @status: Indicator of whether this update succeed. 159*f80ad8b4SAndroid Build Coastguard Worker * @ext_status: Implementation specific update result. 160*f80ad8b4SAndroid Build Coastguard Worker * @low_auth_time: Low 32bit value of image authentication time in nanosecond. 161*f80ad8b4SAndroid Build Coastguard Worker * @high_auth_time: High 32bit value of image authentication time in nanosecond. 162*f80ad8b4SAndroid Build Coastguard Worker * @low_exec_time: Low 32bit value of image execution time in nanosecond. 163*f80ad8b4SAndroid Build Coastguard Worker * @high_exec_time: High 32bit value of image execution time in nanosecond. 164*f80ad8b4SAndroid Build Coastguard Worker */ 165*f80ad8b4SAndroid Build Coastguard Worker struct pfru_updated_result { 166*f80ad8b4SAndroid Build Coastguard Worker __u32 status; 167*f80ad8b4SAndroid Build Coastguard Worker __u32 ext_status; 168*f80ad8b4SAndroid Build Coastguard Worker __u64 low_auth_time; 169*f80ad8b4SAndroid Build Coastguard Worker __u64 high_auth_time; 170*f80ad8b4SAndroid Build Coastguard Worker __u64 low_exec_time; 171*f80ad8b4SAndroid Build Coastguard Worker __u64 high_exec_time; 172*f80ad8b4SAndroid Build Coastguard Worker }; 173*f80ad8b4SAndroid Build Coastguard Worker 174*f80ad8b4SAndroid Build Coastguard Worker /** 175*f80ad8b4SAndroid Build Coastguard Worker * struct pfrt_log_data_info - Log Data from telemetry service. 176*f80ad8b4SAndroid Build Coastguard Worker * @status: Indicator of whether this update succeed. 177*f80ad8b4SAndroid Build Coastguard Worker * @ext_status: Implementation specific update result. 178*f80ad8b4SAndroid Build Coastguard Worker * @chunk1_addr_lo: Low 32bit physical address of the telemetry data chunk1 179*f80ad8b4SAndroid Build Coastguard Worker * starting address. 180*f80ad8b4SAndroid Build Coastguard Worker * @chunk1_addr_hi: High 32bit physical address of the telemetry data chunk1 181*f80ad8b4SAndroid Build Coastguard Worker * starting address. 182*f80ad8b4SAndroid Build Coastguard Worker * @chunk2_addr_lo: Low 32bit physical address of the telemetry data chunk2 183*f80ad8b4SAndroid Build Coastguard Worker * starting address. 184*f80ad8b4SAndroid Build Coastguard Worker * @chunk2_addr_hi: High 32bit physical address of the telemetry data chunk2 185*f80ad8b4SAndroid Build Coastguard Worker * starting address. 186*f80ad8b4SAndroid Build Coastguard Worker * @max_data_size: Maximum supported size of data of all data chunks combined. 187*f80ad8b4SAndroid Build Coastguard Worker * @chunk1_size: Data size in bytes of the telemetry data chunk1 buffer. 188*f80ad8b4SAndroid Build Coastguard Worker * @chunk2_size: Data size in bytes of the telemetry data chunk2 buffer. 189*f80ad8b4SAndroid Build Coastguard Worker * @rollover_cnt: Number of times telemetry data buffer is overwritten 190*f80ad8b4SAndroid Build Coastguard Worker * since telemetry buffer reset. 191*f80ad8b4SAndroid Build Coastguard Worker * @reset_cnt: Number of times telemetry services resets that results in 192*f80ad8b4SAndroid Build Coastguard Worker * rollover count and data chunk buffers are reset. 193*f80ad8b4SAndroid Build Coastguard Worker */ 194*f80ad8b4SAndroid Build Coastguard Worker struct pfrt_log_data_info { 195*f80ad8b4SAndroid Build Coastguard Worker __u32 status; 196*f80ad8b4SAndroid Build Coastguard Worker __u32 ext_status; 197*f80ad8b4SAndroid Build Coastguard Worker __u64 chunk1_addr_lo; 198*f80ad8b4SAndroid Build Coastguard Worker __u64 chunk1_addr_hi; 199*f80ad8b4SAndroid Build Coastguard Worker __u64 chunk2_addr_lo; 200*f80ad8b4SAndroid Build Coastguard Worker __u64 chunk2_addr_hi; 201*f80ad8b4SAndroid Build Coastguard Worker __u32 max_data_size; 202*f80ad8b4SAndroid Build Coastguard Worker __u32 chunk1_size; 203*f80ad8b4SAndroid Build Coastguard Worker __u32 chunk2_size; 204*f80ad8b4SAndroid Build Coastguard Worker __u32 rollover_cnt; 205*f80ad8b4SAndroid Build Coastguard Worker __u32 reset_cnt; 206*f80ad8b4SAndroid Build Coastguard Worker }; 207*f80ad8b4SAndroid Build Coastguard Worker 208*f80ad8b4SAndroid Build Coastguard Worker /** 209*f80ad8b4SAndroid Build Coastguard Worker * struct pfrt_log_info - Telemetry log information. 210*f80ad8b4SAndroid Build Coastguard Worker * @log_level: The telemetry log level. 211*f80ad8b4SAndroid Build Coastguard Worker * @log_type: The telemetry log type(history and execution). 212*f80ad8b4SAndroid Build Coastguard Worker * @log_revid: The telemetry log revision id. 213*f80ad8b4SAndroid Build Coastguard Worker */ 214*f80ad8b4SAndroid Build Coastguard Worker struct pfrt_log_info { 215*f80ad8b4SAndroid Build Coastguard Worker __u32 log_level; 216*f80ad8b4SAndroid Build Coastguard Worker __u32 log_type; 217*f80ad8b4SAndroid Build Coastguard Worker __u32 log_revid; 218*f80ad8b4SAndroid Build Coastguard Worker }; 219*f80ad8b4SAndroid Build Coastguard Worker 220*f80ad8b4SAndroid Build Coastguard Worker /** 221*f80ad8b4SAndroid Build Coastguard Worker * PFRT_LOG_IOC_SET_INFO - _IOW(PFRUT_IOCTL_MAGIC, 0x06, 222*f80ad8b4SAndroid Build Coastguard Worker * struct pfrt_log_info) 223*f80ad8b4SAndroid Build Coastguard Worker * 224*f80ad8b4SAndroid Build Coastguard Worker * Return: 225*f80ad8b4SAndroid Build Coastguard Worker * * 0 - success 226*f80ad8b4SAndroid Build Coastguard Worker * * -EFAULT - fail to get the setting parameter 227*f80ad8b4SAndroid Build Coastguard Worker * * -EINVAL - fail to set the log level 228*f80ad8b4SAndroid Build Coastguard Worker * 229*f80ad8b4SAndroid Build Coastguard Worker * Set the PFRT log level and log type. The input information is 230*f80ad8b4SAndroid Build Coastguard Worker * a struct pfrt_log_info. 231*f80ad8b4SAndroid Build Coastguard Worker */ 232*f80ad8b4SAndroid Build Coastguard Worker #define PFRT_LOG_IOC_SET_INFO _IOW(PFRUT_IOCTL_MAGIC, 0x06, struct pfrt_log_info) 233*f80ad8b4SAndroid Build Coastguard Worker 234*f80ad8b4SAndroid Build Coastguard Worker /** 235*f80ad8b4SAndroid Build Coastguard Worker * PFRT_LOG_IOC_GET_INFO - _IOR(PFRUT_IOCTL_MAGIC, 0x07, 236*f80ad8b4SAndroid Build Coastguard Worker * struct pfrt_log_info) 237*f80ad8b4SAndroid Build Coastguard Worker * 238*f80ad8b4SAndroid Build Coastguard Worker * Return: 239*f80ad8b4SAndroid Build Coastguard Worker * * 0 - success 240*f80ad8b4SAndroid Build Coastguard Worker * * -EINVAL - fail to get the log level 241*f80ad8b4SAndroid Build Coastguard Worker * * -EFAULT - fail to copy the result back to userspace 242*f80ad8b4SAndroid Build Coastguard Worker * 243*f80ad8b4SAndroid Build Coastguard Worker * Retrieve log level and log type of the telemetry. The information is 244*f80ad8b4SAndroid Build Coastguard Worker * a struct pfrt_log_info. 245*f80ad8b4SAndroid Build Coastguard Worker */ 246*f80ad8b4SAndroid Build Coastguard Worker #define PFRT_LOG_IOC_GET_INFO _IOR(PFRUT_IOCTL_MAGIC, 0x07, struct pfrt_log_info) 247*f80ad8b4SAndroid Build Coastguard Worker 248*f80ad8b4SAndroid Build Coastguard Worker /** 249*f80ad8b4SAndroid Build Coastguard Worker * PFRT_LOG_IOC_GET_DATA_INFO - _IOR(PFRUT_IOCTL_MAGIC, 0x08, 250*f80ad8b4SAndroid Build Coastguard Worker * struct pfrt_log_data_info) 251*f80ad8b4SAndroid Build Coastguard Worker * 252*f80ad8b4SAndroid Build Coastguard Worker * Return: 253*f80ad8b4SAndroid Build Coastguard Worker * * 0 - success 254*f80ad8b4SAndroid Build Coastguard Worker * * -EINVAL - fail to get the log buffer information 255*f80ad8b4SAndroid Build Coastguard Worker * * -EFAULT - fail to copy the log buffer information to userspace 256*f80ad8b4SAndroid Build Coastguard Worker * 257*f80ad8b4SAndroid Build Coastguard Worker * Retrieve data information about the telemetry. The information 258*f80ad8b4SAndroid Build Coastguard Worker * is a struct pfrt_log_data_info. 259*f80ad8b4SAndroid Build Coastguard Worker */ 260*f80ad8b4SAndroid Build Coastguard Worker #define PFRT_LOG_IOC_GET_DATA_INFO _IOR(PFRUT_IOCTL_MAGIC, 0x08, struct pfrt_log_data_info) 261*f80ad8b4SAndroid Build Coastguard Worker 262*f80ad8b4SAndroid Build Coastguard Worker #endif /* __PFRUT_H__ */ 263