1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
2 | /* |
3 | * PCC (Platform Communications Channel) methods |
4 | */ |
5 | |
6 | #ifndef _PCC_H |
7 | #define _PCC_H |
8 | |
9 | #include <linux/mailbox_controller.h> |
10 | #include <linux/mailbox_client.h> |
11 | |
12 | struct pcc_mbox_chan { |
13 | struct mbox_chan *mchan; |
14 | u64 shmem_base_addr; |
15 | u64 shmem_size; |
16 | u32 latency; |
17 | u32 max_access_rate; |
18 | u16 min_turnaround_time; |
19 | }; |
20 | |
21 | /* Generic Communications Channel Shared Memory Region */ |
22 | #define PCC_SIGNATURE 0x50434300 |
23 | /* Generic Communications Channel Command Field */ |
24 | #define PCC_CMD_GENERATE_DB_INTR BIT(15) |
25 | /* Generic Communications Channel Status Field */ |
26 | #define PCC_STATUS_CMD_COMPLETE BIT(0) |
27 | #define PCC_STATUS_SCI_DOORBELL BIT(1) |
28 | #define PCC_STATUS_ERROR BIT(2) |
29 | #define PCC_STATUS_PLATFORM_NOTIFY BIT(3) |
30 | /* Initiator Responder Communications Channel Flags */ |
31 | #define PCC_CMD_COMPLETION_NOTIFY BIT(0) |
32 | |
33 | #define MAX_PCC_SUBSPACES 256 |
34 | |
35 | #ifdef CONFIG_PCC |
36 | extern struct pcc_mbox_chan * |
37 | pcc_mbox_request_channel(struct mbox_client *cl, int subspace_id); |
38 | extern void pcc_mbox_free_channel(struct pcc_mbox_chan *chan); |
39 | #else |
40 | static inline struct pcc_mbox_chan * |
41 | pcc_mbox_request_channel(struct mbox_client *cl, int subspace_id) |
42 | { |
43 | return ERR_PTR(-ENODEV); |
44 | } |
45 | static inline void pcc_mbox_free_channel(struct pcc_mbox_chan *chan) { } |
46 | #endif |
47 | |
48 | #endif /* _PCC_H */ |
49 | |