1 /* Copyright (c) 2011, The Linux Foundation. All rights reserved. 2 * 3 * Redistribution and use in source and binary forms, with or without 4 * modification, are permitted provided that the following conditions are 5 * met: 6 * * Redistributions of source code must retain the above copyright 7 * notice, this list of conditions and the following disclaimer. 8 * * Redistributions in binary form must reproduce the above 9 * copyright notice, this list of conditions and the following 10 * disclaimer in the documentation and/or other materials provided 11 * with the distribution. 12 * * Neither the name of The Linux Foundation nor the names of its 13 * contributors may be used to endorse or promote products derived 14 * from this software without specific prior written permission. 15 * 16 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 20 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 23 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 24 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 25 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 26 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 #ifndef __MSG_Q_H__ 30 #define __MSG_Q_H__ 31 32 #ifdef __cplusplus 33 extern "C" { 34 #endif /* __cplusplus */ 35 36 #include <stdlib.h> 37 38 /** Linked List Return Codes */ 39 typedef enum 40 { 41 eMSG_Q_SUCCESS = 0, 42 /**< Request was successful. */ 43 eMSG_Q_FAILURE_GENERAL = -1, 44 /**< Failed because of a general failure. */ 45 eMSG_Q_INVALID_PARAMETER = -2, 46 /**< Failed because the request contained invalid parameters. */ 47 eMSG_Q_INVALID_HANDLE = -3, 48 /**< Failed because an invalid handle was specified. */ 49 eMSG_Q_UNAVAILABLE_RESOURCE = -4, 50 /**< Failed because an there were not enough resources. */ 51 eMSG_Q_INSUFFICIENT_BUFFER = -5, 52 /**< Failed because an the supplied buffer was too small. */ 53 }msq_q_err_type; 54 55 /*=========================================================================== 56 FUNCTION msg_q_init 57 58 DESCRIPTION 59 Initializes internal structures for message queue. 60 61 msg_q_data: pointer to an opaque Q handle to be returned; NULL if fails 62 63 DEPENDENCIES 64 N/A 65 66 RETURN VALUE 67 Look at error codes above. 68 69 SIDE EFFECTS 70 N/A 71 72 ===========================================================================*/ 73 msq_q_err_type msg_q_init(void** msg_q_data); 74 75 /*=========================================================================== 76 FUNCTION msg_q_init2 77 78 DESCRIPTION 79 Initializes internal structures for message queue. 80 81 DEPENDENCIES 82 N/A 83 84 RETURN VALUE 85 opaque handle to the Q created; NULL if create fails 86 87 SIDE EFFECTS 88 N/A 89 90 ===========================================================================*/ 91 const void* msg_q_init2(); 92 93 /*=========================================================================== 94 FUNCTION msg_q_destroy 95 96 DESCRIPTION 97 Releases internal structures for message queue. 98 99 msg_q_data: State of message queue to be released. 100 101 DEPENDENCIES 102 N/A 103 104 RETURN VALUE 105 Look at error codes above. 106 107 SIDE EFFECTS 108 N/A 109 110 ===========================================================================*/ 111 msq_q_err_type msg_q_destroy(void** msg_q_data); 112 113 /*=========================================================================== 114 FUNCTION msg_q_snd 115 116 DESCRIPTION 117 Sends data to the message queue. The passed in data pointer 118 is not modified or freed. Passed in msg_obj is expected to live throughout 119 the use of the msg_q (i.e. data is not allocated internally) 120 121 msg_q_data: Message Queue to add the element to. 122 msgp: Pointer to data to add into message queue. 123 dealloc: Function used to deallocate memory for this element. Pass NULL 124 if you do not want data deallocated during a flush operation 125 126 DEPENDENCIES 127 N/A 128 129 RETURN VALUE 130 Look at error codes above. 131 132 SIDE EFFECTS 133 N/A 134 135 ===========================================================================*/ 136 msq_q_err_type msg_q_snd(void* msg_q_data, void* msg_obj, void (*dealloc)(void*)); 137 138 /*=========================================================================== 139 FUNCTION msg_q_rcv 140 141 DESCRIPTION 142 Retrieves data from the message queue. msg_obj is the oldest message received 143 and pointer is simply removed from message queue. 144 145 msg_q_data: Message Queue to copy data from into msgp. 146 msg_obj: Pointer to space to copy msg_q contents to. 147 148 DEPENDENCIES 149 N/A 150 151 RETURN VALUE 152 Look at error codes above. 153 154 SIDE EFFECTS 155 N/A 156 157 ===========================================================================*/ 158 msq_q_err_type msg_q_rcv(void* msg_q_data, void** msg_obj); 159 160 /*=========================================================================== 161 FUNCTION msg_q_rmv 162 163 DESCRIPTION 164 Remove data from the message queue. msg_obj is the oldest message received 165 and pointer is simply removed from message queue. 166 167 msg_q_data: Message Queue to copy data from into msgp. 168 msg_obj: Pointer to space to copy msg_q contents to. 169 170 DEPENDENCIES 171 N/A 172 173 RETURN VALUE 174 Look at error codes above. 175 176 SIDE EFFECTS 177 N/A 178 179 ===========================================================================*/ 180 msq_q_err_type msg_q_rmv(void* msg_q_data, void** msg_obj); 181 182 183 /*=========================================================================== 184 FUNCTION msg_q_flush 185 186 DESCRIPTION 187 Function removes all elements from the message queue. 188 189 msg_q_data: Message Queue to remove elements from. 190 191 DEPENDENCIES 192 N/A 193 194 RETURN VALUE 195 Look at error codes above. 196 197 SIDE EFFECTS 198 N/A 199 200 ===========================================================================*/ 201 msq_q_err_type msg_q_flush(void* msg_q_data); 202 203 /*=========================================================================== 204 FUNCTION msg_q_unblock 205 206 DESCRIPTION 207 This function will stop use of the message queue. All waiters will wake up 208 and likely receive nothing from the queue resulting in a negative return 209 value. The message queue can no longer be used until it is destroyed 210 and initialized again after calling this function. 211 212 msg_q_data: Message queue to unblock. 213 214 DEPENDENCIES 215 N/A 216 217 RETURN VALUE 218 Look at error codes above. 219 220 SIDE EFFECTS 221 N/A 222 223 ===========================================================================*/ 224 msq_q_err_type msg_q_unblock(void* msg_q_data); 225 226 #ifdef __cplusplus 227 } 228 #endif /* __cplusplus */ 229 230 #endif /* __MSG_Q_H__ */ 231