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