msg_q.h revision 129edaf7d0025e2828a8bee025f7b1bac7a68da6
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