/* SPDX-License-Identifier: GPL-2.0-only */ #ifndef __PSP_PLATFORM_ACCESS_H #define __PSP_PLATFORM_ACCESS_H #include <linux/psp.h> enum psp_platform_access_msg { PSP_CMD_NONE = 0x0, PSP_I2C_REQ_BUS_CMD = 0x64, PSP_DYNAMIC_BOOST_GET_NONCE, PSP_DYNAMIC_BOOST_SET_UID, PSP_DYNAMIC_BOOST_GET_PARAMETER, PSP_DYNAMIC_BOOST_SET_PARAMETER, }; struct psp_req_buffer_hdr { u32 payload_size; u32 status; } __packed; struct psp_request { struct psp_req_buffer_hdr header; void *buf; } __packed; /** * psp_send_platform_access_msg() - Send a message to control platform features * * This function is intended to be used by drivers outside of ccp to communicate * with the platform. * * Returns: * 0: success * -%EBUSY: mailbox in recovery or in use * -%ENODEV: driver not bound with PSP device * -%ETIMEDOUT: request timed out * -%EIO: unknown error (see kernel log) */ int psp_send_platform_access_msg(enum psp_platform_access_msg, struct psp_request *req); /** * psp_ring_platform_doorbell() - Ring platform doorbell * * This function is intended to be used by drivers outside of ccp to ring the * platform doorbell with a message. * * Returns: * 0: success * -%EBUSY: mailbox in recovery or in use * -%ENODEV: driver not bound with PSP device * -%ETIMEDOUT: request timed out * -%EIO: error will be stored in result argument */ int psp_ring_platform_doorbell(int msg, u32 *result); /** * psp_check_platform_access_status() - Checks whether platform features is ready * * This function is intended to be used by drivers outside of ccp to determine * if platform features has initialized. * * Returns: * 0 platform features is ready * -%ENODEV platform features is not ready or present */ int psp_check_platform_access_status(void); #endif /* __PSP_PLATFORM_ACCESS_H */