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 void __iomem *shmem; 16 u64 shmem_size; 17 u32 latency; 18 u32 max_access_rate; 19 u16 min_turnaround_time; 20 }; 21 22 /* Generic Communications Channel Shared Memory Region */ 23 #define PCC_SIGNATURE 0x50434300 24 /* Generic Communications Channel Command Field */ 25 #define PCC_CMD_GENERATE_DB_INTR BIT(15) 26 /* Generic Communications Channel Status Field */ 27 #define PCC_STATUS_CMD_COMPLETE BIT(0) 28 #define PCC_STATUS_SCI_DOORBELL BIT(1) 29 #define PCC_STATUS_ERROR BIT(2) 30 #define PCC_STATUS_PLATFORM_NOTIFY BIT(3) 31 /* Initiator Responder Communications Channel Flags */ 32 #define PCC_CMD_COMPLETION_NOTIFY BIT(0) 33 34 #define MAX_PCC_SUBSPACES 256 35 #define PCC_ACK_FLAG_MASK 0x1 36 37 #ifdef CONFIG_PCC 38 extern struct pcc_mbox_chan * 39 pcc_mbox_request_channel(struct mbox_client *cl, int subspace_id); 40 extern void pcc_mbox_free_channel(struct pcc_mbox_chan *chan); 41 extern int pcc_mbox_ioremap(struct mbox_chan *chan); 42 #else 43 static inline struct pcc_mbox_chan * pcc_mbox_request_channel(struct mbox_client * cl,int subspace_id)44pcc_mbox_request_channel(struct mbox_client *cl, int subspace_id) 45 { 46 return ERR_PTR(-ENODEV); 47 } pcc_mbox_free_channel(struct pcc_mbox_chan * chan)48static inline void pcc_mbox_free_channel(struct pcc_mbox_chan *chan) { } pcc_mbox_ioremap(struct mbox_chan * chan)49static inline int pcc_mbox_ioremap(struct mbox_chan *chan) 50 { 51 return 0; 52 }; 53 #endif 54 55 #endif /* _PCC_H */ 56