1129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/* Copyright (c) 2011, The Linux Foundation. All rights reserved. 2129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * 3129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * Redistribution and use in source and binary forms, with or without 4129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * modification, are permitted provided that the following conditions are 5129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * met: 6129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * * Redistributions of source code must retain the above copyright 7129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * notice, this list of conditions and the following disclaimer. 8129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * * Redistributions in binary form must reproduce the above 9129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * copyright notice, this list of conditions and the following 10129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * disclaimer in the documentation and/or other materials provided 11129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * with the distribution. 12129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * * Neither the name of The Linux Foundation nor the names of its 13129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * contributors may be used to endorse or promote products derived 14129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * from this software without specific prior written permission. 15129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * 16129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 17129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 19129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 20129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 23129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 24129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 25129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 26129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel */ 28129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 29129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#ifndef __MSG_Q_H__ 30129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define __MSG_Q_H__ 31129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 32129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#ifdef __cplusplus 33129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudelextern "C" { 34129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#endif /* __cplusplus */ 35129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 36129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#include <stdlib.h> 37129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 38129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/** Linked List Return Codes */ 39129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudeltypedef enum 40129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel{ 41129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel eMSG_Q_SUCCESS = 0, 42129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel /**< Request was successful. */ 43129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel eMSG_Q_FAILURE_GENERAL = -1, 44129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel /**< Failed because of a general failure. */ 45129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel eMSG_Q_INVALID_PARAMETER = -2, 46129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel /**< Failed because the request contained invalid parameters. */ 47129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel eMSG_Q_INVALID_HANDLE = -3, 48129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel /**< Failed because an invalid handle was specified. */ 49129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel eMSG_Q_UNAVAILABLE_RESOURCE = -4, 50129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel /**< Failed because an there were not enough resources. */ 51129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel eMSG_Q_INSUFFICIENT_BUFFER = -5, 52129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel /**< Failed because an the supplied buffer was too small. */ 53129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel}msq_q_err_type; 54129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 55129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/*=========================================================================== 56129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry StrudelFUNCTION msg_q_init 57129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 58129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry StrudelDESCRIPTION 59129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel Initializes internal structures for message queue. 60129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 61129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel msg_q_data: pointer to an opaque Q handle to be returned; NULL if fails 62129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 63129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry StrudelDEPENDENCIES 64129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel N/A 65129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 66129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry StrudelRETURN VALUE 67129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel Look at error codes above. 68129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 69129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry StrudelSIDE EFFECTS 70129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel N/A 71129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 72129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel===========================================================================*/ 73129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudelmsq_q_err_type msg_q_init(void** msg_q_data); 74129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 75129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/*=========================================================================== 76129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry StrudelFUNCTION msg_q_init2 77129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 78129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry StrudelDESCRIPTION 79129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel Initializes internal structures for message queue. 80129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 81129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry StrudelDEPENDENCIES 82129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel N/A 83129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 84129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry StrudelRETURN VALUE 85129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel opaque handle to the Q created; NULL if create fails 86129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 87129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry StrudelSIDE EFFECTS 88129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel N/A 89129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 90129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel===========================================================================*/ 91129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudelconst void* msg_q_init2(); 92129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 93129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/*=========================================================================== 94129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry StrudelFUNCTION msg_q_destroy 95129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 96129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry StrudelDESCRIPTION 97129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel Releases internal structures for message queue. 98129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 99129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel msg_q_data: State of message queue to be released. 100129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 101129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry StrudelDEPENDENCIES 102129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel N/A 103129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 104129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry StrudelRETURN VALUE 105129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel Look at error codes above. 106129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 107129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry StrudelSIDE EFFECTS 108129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel N/A 109129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 110129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel===========================================================================*/ 111129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudelmsq_q_err_type msg_q_destroy(void** msg_q_data); 112129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 113129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/*=========================================================================== 114129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry StrudelFUNCTION msg_q_snd 115129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 116129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry StrudelDESCRIPTION 117129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel Sends data to the message queue. The passed in data pointer 118129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel is not modified or freed. Passed in msg_obj is expected to live throughout 119129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel the use of the msg_q (i.e. data is not allocated internally) 120129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 121129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel msg_q_data: Message Queue to add the element to. 122129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel msgp: Pointer to data to add into message queue. 123129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel dealloc: Function used to deallocate memory for this element. Pass NULL 124129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel if you do not want data deallocated during a flush operation 125129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 126129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry StrudelDEPENDENCIES 127129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel N/A 128129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 129129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry StrudelRETURN VALUE 130129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel Look at error codes above. 131129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 132129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry StrudelSIDE EFFECTS 133129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel N/A 134129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 135129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel===========================================================================*/ 136129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudelmsq_q_err_type msg_q_snd(void* msg_q_data, void* msg_obj, void (*dealloc)(void*)); 137129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 138129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/*=========================================================================== 139129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry StrudelFUNCTION msg_q_rcv 140129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 141129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry StrudelDESCRIPTION 142129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel Retrieves data from the message queue. msg_obj is the oldest message received 143129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel and pointer is simply removed from message queue. 144129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 145129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel msg_q_data: Message Queue to copy data from into msgp. 146129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel msg_obj: Pointer to space to copy msg_q contents to. 147129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 148129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry StrudelDEPENDENCIES 149129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel N/A 150129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 151129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry StrudelRETURN VALUE 152129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel Look at error codes above. 153129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 154129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry StrudelSIDE EFFECTS 155129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel N/A 156129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 157129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel===========================================================================*/ 158129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudelmsq_q_err_type msg_q_rcv(void* msg_q_data, void** msg_obj); 159129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 160129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/*=========================================================================== 161129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry StrudelFUNCTION msg_q_flush 162129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 163129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry StrudelDESCRIPTION 164129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel Function removes all elements from the message queue. 165129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 166129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel msg_q_data: Message Queue to remove elements from. 167129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 168129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry StrudelDEPENDENCIES 169129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel N/A 170129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 171129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry StrudelRETURN VALUE 172129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel Look at error codes above. 173129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 174129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry StrudelSIDE EFFECTS 175129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel N/A 176129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 177129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel===========================================================================*/ 178129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudelmsq_q_err_type msg_q_flush(void* msg_q_data); 179129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 180129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/*=========================================================================== 181129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry StrudelFUNCTION msg_q_unblock 182129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 183129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry StrudelDESCRIPTION 184129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel This function will stop use of the message queue. All waiters will wake up 185129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel and likely receive nothing from the queue resulting in a negative return 186129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel value. The message queue can no longer be used until it is destroyed 187129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel and initialized again after calling this function. 188129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 189129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel msg_q_data: Message queue to unblock. 190129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 191129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry StrudelDEPENDENCIES 192129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel N/A 193129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 194129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry StrudelRETURN VALUE 195129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel Look at error codes above. 196129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 197129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry StrudelSIDE EFFECTS 198129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel N/A 199129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 200129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel===========================================================================*/ 201129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudelmsq_q_err_type msg_q_unblock(void* msg_q_data); 202129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 203129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#ifdef __cplusplus 204129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel} 205129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#endif /* __cplusplus */ 206129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 207129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#endif /* __MSG_Q_H__ */ 208