xref: /aosp_15_r20/external/arm-trusted-firmware/plat/xilinx/common/include/ipi.h (revision 54fd6939e177f8ff529b10183254802c76df6d08)
1*54fd6939SJiyong Park /*
2*54fd6939SJiyong Park  * Copyright (c) 2018, Xilinx, Inc. All rights reserved.
3*54fd6939SJiyong Park  *
4*54fd6939SJiyong Park  * SPDX-License-Identifier: BSD-3-Clause
5*54fd6939SJiyong Park  */
6*54fd6939SJiyong Park 
7*54fd6939SJiyong Park /* Xilinx IPI management configuration data and macros */
8*54fd6939SJiyong Park 
9*54fd6939SJiyong Park #ifndef IPI_H
10*54fd6939SJiyong Park #define IPI_H
11*54fd6939SJiyong Park 
12*54fd6939SJiyong Park #include <stdint.h>
13*54fd6939SJiyong Park 
14*54fd6939SJiyong Park /*********************************************************************
15*54fd6939SJiyong Park  * IPI mailbox status macros
16*54fd6939SJiyong Park  ********************************************************************/
17*54fd6939SJiyong Park #define IPI_MB_STATUS_IDLE		0
18*54fd6939SJiyong Park #define IPI_MB_STATUS_SEND_PENDING	1
19*54fd6939SJiyong Park #define IPI_MB_STATUS_RECV_PENDING	2
20*54fd6939SJiyong Park 
21*54fd6939SJiyong Park /*********************************************************************
22*54fd6939SJiyong Park  * IPI mailbox call is secure or not macros
23*54fd6939SJiyong Park  ********************************************************************/
24*54fd6939SJiyong Park #define IPI_MB_CALL_NOTSECURE	0
25*54fd6939SJiyong Park #define IPI_MB_CALL_SECURE	1
26*54fd6939SJiyong Park 
27*54fd6939SJiyong Park /*********************************************************************
28*54fd6939SJiyong Park  * IPI secure check
29*54fd6939SJiyong Park  ********************************************************************/
30*54fd6939SJiyong Park #define IPI_SECURE_MASK  0x1U
31*54fd6939SJiyong Park #define IPI_IS_SECURE(I) ((ipi_table[(I)].secure_only & \
32*54fd6939SJiyong Park 			   IPI_SECURE_MASK) ? 1 : 0)
33*54fd6939SJiyong Park 
34*54fd6939SJiyong Park /*********************************************************************
35*54fd6939SJiyong Park  * Struct definitions
36*54fd6939SJiyong Park  ********************************************************************/
37*54fd6939SJiyong Park 
38*54fd6939SJiyong Park /* structure to maintain IPI configuration information */
39*54fd6939SJiyong Park struct ipi_config {
40*54fd6939SJiyong Park 	unsigned int ipi_bit_mask;
41*54fd6939SJiyong Park 	unsigned int ipi_reg_base;
42*54fd6939SJiyong Park 	unsigned char secure_only;
43*54fd6939SJiyong Park };
44*54fd6939SJiyong Park 
45*54fd6939SJiyong Park /*********************************************************************
46*54fd6939SJiyong Park  * IPI APIs declarations
47*54fd6939SJiyong Park  ********************************************************************/
48*54fd6939SJiyong Park 
49*54fd6939SJiyong Park /* Initialize IPI configuration table */
50*54fd6939SJiyong Park void ipi_config_table_init(const struct ipi_config *ipi_table,
51*54fd6939SJiyong Park 			   uint32_t total_ipi);
52*54fd6939SJiyong Park 
53*54fd6939SJiyong Park /* Validate IPI mailbox access */
54*54fd6939SJiyong Park int ipi_mb_validate(uint32_t local, uint32_t remote, unsigned int is_secure);
55*54fd6939SJiyong Park 
56*54fd6939SJiyong Park /* Open the IPI mailbox */
57*54fd6939SJiyong Park void ipi_mb_open(uint32_t local, uint32_t remote);
58*54fd6939SJiyong Park 
59*54fd6939SJiyong Park /* Release the IPI mailbox */
60*54fd6939SJiyong Park void ipi_mb_release(uint32_t local, uint32_t remote);
61*54fd6939SJiyong Park 
62*54fd6939SJiyong Park /* Enquire IPI mailbox status */
63*54fd6939SJiyong Park int ipi_mb_enquire_status(uint32_t local, uint32_t remote);
64*54fd6939SJiyong Park 
65*54fd6939SJiyong Park /* Trigger notification on the IPI mailbox */
66*54fd6939SJiyong Park void ipi_mb_notify(uint32_t local, uint32_t remote, uint32_t is_blocking);
67*54fd6939SJiyong Park 
68*54fd6939SJiyong Park /* Ack IPI mailbox notification */
69*54fd6939SJiyong Park void ipi_mb_ack(uint32_t local, uint32_t remote);
70*54fd6939SJiyong Park 
71*54fd6939SJiyong Park /* Disable IPI mailbox notification interrupt */
72*54fd6939SJiyong Park void ipi_mb_disable_irq(uint32_t local, uint32_t remote);
73*54fd6939SJiyong Park 
74*54fd6939SJiyong Park /* Enable IPI mailbox notification interrupt */
75*54fd6939SJiyong Park void ipi_mb_enable_irq(uint32_t local, uint32_t remote);
76*54fd6939SJiyong Park 
77*54fd6939SJiyong Park #endif /* IPI_H */
78