1*7ccc4f4eSMario Limonciello /* SPDX-License-Identifier: GPL-2.0-only */
2*7ccc4f4eSMario Limonciello 
3*7ccc4f4eSMario Limonciello #ifndef __PSP_PLATFORM_ACCESS_H
4*7ccc4f4eSMario Limonciello #define __PSP_PLATFORM_ACCESS_H
5*7ccc4f4eSMario Limonciello 
6*7ccc4f4eSMario Limonciello #include <linux/psp.h>
7*7ccc4f4eSMario Limonciello 
8*7ccc4f4eSMario Limonciello enum psp_platform_access_msg {
9*7ccc4f4eSMario Limonciello 	PSP_CMD_NONE = 0x0,
10*7ccc4f4eSMario Limonciello };
11*7ccc4f4eSMario Limonciello 
12*7ccc4f4eSMario Limonciello struct psp_req_buffer_hdr {
13*7ccc4f4eSMario Limonciello 	u32 payload_size;
14*7ccc4f4eSMario Limonciello 	u32 status;
15*7ccc4f4eSMario Limonciello } __packed;
16*7ccc4f4eSMario Limonciello 
17*7ccc4f4eSMario Limonciello struct psp_request {
18*7ccc4f4eSMario Limonciello 	struct psp_req_buffer_hdr header;
19*7ccc4f4eSMario Limonciello 	void *buf;
20*7ccc4f4eSMario Limonciello } __packed;
21*7ccc4f4eSMario Limonciello 
22*7ccc4f4eSMario Limonciello /**
23*7ccc4f4eSMario Limonciello  * psp_send_platform_access_msg() - Send a message to control platform features
24*7ccc4f4eSMario Limonciello  *
25*7ccc4f4eSMario Limonciello  * This function is intended to be used by drivers outside of ccp to communicate
26*7ccc4f4eSMario Limonciello  * with the platform.
27*7ccc4f4eSMario Limonciello  *
28*7ccc4f4eSMario Limonciello  * Returns:
29*7ccc4f4eSMario Limonciello  *  0:           success
30*7ccc4f4eSMario Limonciello  *  -%EBUSY:     mailbox in recovery or in use
31*7ccc4f4eSMario Limonciello  *  -%ENODEV:    driver not bound with PSP device
32*7ccc4f4eSMario Limonciello  *  -%ETIMEDOUT: request timed out
33*7ccc4f4eSMario Limonciello  *  -%EIO:       unknown error (see kernel log)
34*7ccc4f4eSMario Limonciello  */
35*7ccc4f4eSMario Limonciello int psp_send_platform_access_msg(enum psp_platform_access_msg, struct psp_request *req);
36*7ccc4f4eSMario Limonciello 
37*7ccc4f4eSMario Limonciello /**
38*7ccc4f4eSMario Limonciello  * psp_check_platform_access_status() - Checks whether platform features is ready
39*7ccc4f4eSMario Limonciello  *
40*7ccc4f4eSMario Limonciello  * This function is intended to be used by drivers outside of ccp to determine
41*7ccc4f4eSMario Limonciello  * if platform features has initialized.
42*7ccc4f4eSMario Limonciello  *
43*7ccc4f4eSMario Limonciello  * Returns:
44*7ccc4f4eSMario Limonciello  * 0          platform features is ready
45*7ccc4f4eSMario Limonciello  * -%ENODEV   platform features is not ready or present
46*7ccc4f4eSMario Limonciello  */
47*7ccc4f4eSMario Limonciello int psp_check_platform_access_status(void);
48*7ccc4f4eSMario Limonciello 
49*7ccc4f4eSMario Limonciello #endif /* __PSP_PLATFORM_ACCESS_H */
50