1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (c) 2015-2019, ARM Limited and Contributors. All rights reserved. 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu */ 6*91f16700Schasinglulu 7*91f16700Schasinglulu /*! 8*91f16700Schasinglulu * Header file for the IPC implementation. 9*91f16700Schasinglulu */ 10*91f16700Schasinglulu 11*91f16700Schasinglulu #ifndef SCI_IPC_H 12*91f16700Schasinglulu #define SCI_IPC_H 13*91f16700Schasinglulu 14*91f16700Schasinglulu /* Includes */ 15*91f16700Schasinglulu 16*91f16700Schasinglulu #include <sci/sci_types.h> 17*91f16700Schasinglulu 18*91f16700Schasinglulu /* Defines */ 19*91f16700Schasinglulu 20*91f16700Schasinglulu /* Types */ 21*91f16700Schasinglulu 22*91f16700Schasinglulu /* Functions */ 23*91f16700Schasinglulu 24*91f16700Schasinglulu /*! 25*91f16700Schasinglulu * This function opens an IPC channel. 26*91f16700Schasinglulu * 27*91f16700Schasinglulu * @param[out] ipc return pointer for ipc handle 28*91f16700Schasinglulu * @param[in] id id of channel to open 29*91f16700Schasinglulu * 30*91f16700Schasinglulu * @return Returns an error code (SC_ERR_NONE = success, SC_ERR_IPC 31*91f16700Schasinglulu * otherwise). 32*91f16700Schasinglulu * 33*91f16700Schasinglulu * The \a id parameter is implementation specific. Could be an MU 34*91f16700Schasinglulu * address, pointer to a driver path, channel index, etc. 35*91f16700Schasinglulu */ 36*91f16700Schasinglulu sc_err_t sc_ipc_open(sc_ipc_t *ipc, sc_ipc_id_t id); 37*91f16700Schasinglulu 38*91f16700Schasinglulu /*! 39*91f16700Schasinglulu * This function closes an IPC channel. 40*91f16700Schasinglulu * 41*91f16700Schasinglulu * @param[in] ipc id of channel to close 42*91f16700Schasinglulu */ 43*91f16700Schasinglulu void sc_ipc_close(sc_ipc_t ipc); 44*91f16700Schasinglulu 45*91f16700Schasinglulu /*! 46*91f16700Schasinglulu * This function reads a message from an IPC channel. 47*91f16700Schasinglulu * 48*91f16700Schasinglulu * @param[in] ipc id of channel read from 49*91f16700Schasinglulu * @param[out] data pointer to message buffer to read 50*91f16700Schasinglulu * 51*91f16700Schasinglulu * This function will block if no message is available to be read. 52*91f16700Schasinglulu */ 53*91f16700Schasinglulu void sc_ipc_read(sc_ipc_t ipc, void *data); 54*91f16700Schasinglulu 55*91f16700Schasinglulu /*! 56*91f16700Schasinglulu * This function writes a message to an IPC channel. 57*91f16700Schasinglulu * 58*91f16700Schasinglulu * @param[in] ipc id of channel to write to 59*91f16700Schasinglulu * @param[in] data pointer to message buffer to write 60*91f16700Schasinglulu * 61*91f16700Schasinglulu * This function will block if the outgoing buffer is full. 62*91f16700Schasinglulu */ 63*91f16700Schasinglulu void sc_ipc_write(sc_ipc_t ipc, void *data); 64*91f16700Schasinglulu 65*91f16700Schasinglulu extern sc_ipc_t ipc_handle; 66*91f16700Schasinglulu 67*91f16700Schasinglulu #endif /* SCI_IPC_H */ 68