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 12struct 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 36extern struct pcc_mbox_chan * 37pcc_mbox_request_channel(struct mbox_client *cl, int subspace_id); 38extern void pcc_mbox_free_channel(struct pcc_mbox_chan *chan); 39#else 40static inline struct pcc_mbox_chan * 41pcc_mbox_request_channel(struct mbox_client *cl, int subspace_id) 42{ 43 return ERR_PTR(-ENODEV); 44} 45static inline void pcc_mbox_free_channel(struct pcc_mbox_chan *chan) { } 46#endif 47 48#endif /* _PCC_H */ 49