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