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