1 /* 2 * Copyright (c) 2016, Freescale Semiconductor, Inc. 3 * Copyright 2017-2020 NXP 4 * 5 * SPDX-License-Identifier: BSD-3-Clause 6 * 7 * Redistribution and use in source and binary forms, with or without modification, 8 * are permitted provided that the following conditions are met: 9 * 10 * o Redistributions of source code must retain the above copyright notice, this list 11 * of conditions and the following disclaimer. 12 * 13 * o Redistributions in binary form must reproduce the above copyright notice, this 14 * list of conditions and the following disclaimer in the documentation and/or 15 * other materials provided with the distribution. 16 * 17 * o Neither the name of the copyright holder nor the names of its 18 * contributors may be used to endorse or promote products derived from this 19 * software without specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 23 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 24 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR 25 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 26 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 27 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 28 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 30 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 */ 32 33 /*! 34 * Header file for the IPC implementation. 35 */ 36 37 #ifndef SC_IPC_H 38 #define SC_IPC_H 39 40 /* Includes */ 41 42 #include "main/types.h" 43 44 /* Defines */ 45 46 /* Types */ 47 48 /* Functions */ 49 50 /*! 51 * This function opens an IPC channel. 52 * 53 * @param[out] ipc return pointer for ipc handle 54 * @param[in] id id of channel to open 55 * 56 * @return Returns an error code (SC_ERR_NONE = success, SC_ERR_IPC 57 * otherwise). 58 * 59 * The \a id parameter is implementation specific. Could be an MU 60 * address, pointer to a driver path, channel index, etc. 61 */ 62 sc_err_t sc_ipc_open(sc_ipc_t *ipc, sc_ipc_id_t id); 63 64 /*! 65 * This function closes an IPC channel. 66 * 67 * @param[in] ipc id of channel to close 68 */ 69 void sc_ipc_close(sc_ipc_t ipc); 70 71 /*! 72 * This function reads a message from an IPC channel. 73 * 74 * @param[in] ipc id of channel read from 75 * @param[out] data pointer to message buffer to read 76 * 77 * This function will block if no message is available to be read. 78 */ 79 void sc_ipc_read(sc_ipc_t ipc, void *data); 80 81 /*! 82 * This function writes a message to an IPC channel. 83 * 84 * @param[in] ipc id of channel to write to 85 * @param[in] data pointer to message buffer to write 86 * 87 * This function will block if the outgoing buffer is full. 88 */ 89 void sc_ipc_write(sc_ipc_t ipc, const void *data); 90 91 #endif /* SC_IPC_H */ 92 93