xref: /aosp_15_r20/external/libhevc/encoder/osal.h (revision c83a76b084498d55f252f48b2e3786804cdf24b7)
1*c83a76b0SSuyog Pawar /******************************************************************************
2*c83a76b0SSuyog Pawar  *
3*c83a76b0SSuyog Pawar  * Copyright (C) 2018 The Android Open Source Project
4*c83a76b0SSuyog Pawar  *
5*c83a76b0SSuyog Pawar  * Licensed under the Apache License, Version 2.0 (the "License");
6*c83a76b0SSuyog Pawar  * you may not use this file except in compliance with the License.
7*c83a76b0SSuyog Pawar  * You may obtain a copy of the License at:
8*c83a76b0SSuyog Pawar  *
9*c83a76b0SSuyog Pawar  * http://www.apache.org/licenses/LICENSE-2.0
10*c83a76b0SSuyog Pawar  *
11*c83a76b0SSuyog Pawar  * Unless required by applicable law or agreed to in writing, software
12*c83a76b0SSuyog Pawar  * distributed under the License is distributed on an "AS IS" BASIS,
13*c83a76b0SSuyog Pawar  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*c83a76b0SSuyog Pawar  * See the License for the specific language governing permissions and
15*c83a76b0SSuyog Pawar  * limitations under the License.
16*c83a76b0SSuyog Pawar  *
17*c83a76b0SSuyog Pawar  *****************************************************************************
18*c83a76b0SSuyog Pawar  * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19*c83a76b0SSuyog Pawar */
20*c83a76b0SSuyog Pawar 
21*c83a76b0SSuyog Pawar /*****************************************************************************/
22*c83a76b0SSuyog Pawar /*                                                                           */
23*c83a76b0SSuyog Pawar /*  File Name         : osal.h                                               */
24*c83a76b0SSuyog Pawar /*                                                                           */
25*c83a76b0SSuyog Pawar /*  Description       : This file contains all the necessary OSAL Constants, */
26*c83a76b0SSuyog Pawar /*                      Enums, Structures and API declarations.              */
27*c83a76b0SSuyog Pawar /*                                                                           */
28*c83a76b0SSuyog Pawar /*  List of Functions : None                                                 */
29*c83a76b0SSuyog Pawar /*                                                                           */
30*c83a76b0SSuyog Pawar /*  Issues / Problems : None                                                 */
31*c83a76b0SSuyog Pawar /*                                                                           */
32*c83a76b0SSuyog Pawar /*  Revision History  :                                                      */
33*c83a76b0SSuyog Pawar /*                                                                           */
34*c83a76b0SSuyog Pawar /*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
35*c83a76b0SSuyog Pawar /*         03 03 2006   Ittiam          Draft                                */
36*c83a76b0SSuyog Pawar /*                                                                           */
37*c83a76b0SSuyog Pawar /*****************************************************************************/
38*c83a76b0SSuyog Pawar 
39*c83a76b0SSuyog Pawar #ifndef OSAL_H
40*c83a76b0SSuyog Pawar #define OSAL_H
41*c83a76b0SSuyog Pawar 
42*c83a76b0SSuyog Pawar /* C linkage specifiers for C++ declarations. */
43*c83a76b0SSuyog Pawar #ifdef __cplusplus
44*c83a76b0SSuyog Pawar extern "C"
45*c83a76b0SSuyog Pawar {
46*c83a76b0SSuyog Pawar #endif /* __cplusplus */
47*c83a76b0SSuyog Pawar 
48*c83a76b0SSuyog Pawar /*****************************************************************************/
49*c83a76b0SSuyog Pawar /* Constants                                                                 */
50*c83a76b0SSuyog Pawar /*****************************************************************************/
51*c83a76b0SSuyog Pawar 
52*c83a76b0SSuyog Pawar /* OSAL handle size */
53*c83a76b0SSuyog Pawar #define OSAL_HANDLE_SIZE 40
54*c83a76b0SSuyog Pawar 
55*c83a76b0SSuyog Pawar /* Number of select entries */
56*c83a76b0SSuyog Pawar #define OSAL_SELECT_MAX 20
57*c83a76b0SSuyog Pawar 
58*c83a76b0SSuyog Pawar /* OSAL Return Status */
59*c83a76b0SSuyog Pawar #define OSAL_SUCCESS 0
60*c83a76b0SSuyog Pawar #define OSAL_ERROR -1
61*c83a76b0SSuyog Pawar #define OSAL_NOT_SUPPORTED -2
62*c83a76b0SSuyog Pawar #define OSAL_TIMEOUT -3
63*c83a76b0SSuyog Pawar 
64*c83a76b0SSuyog Pawar /* OSAL thread priority levels.                                              */
65*c83a76b0SSuyog Pawar /*     OSAL_PRIORITY_1         represents    MINIMUM,                        */
66*c83a76b0SSuyog Pawar /*     OSAL_PRIORITY_10        represents    MAXIMUM,                        */
67*c83a76b0SSuyog Pawar /*     OSAL_PRIORITY_DEFAULT   represnts     DEFAULT SYSTEM PRIROTIY LEVEL   */
68*c83a76b0SSuyog Pawar #define OSAL_PRIORITY_DEFAULT 0
69*c83a76b0SSuyog Pawar #define OSAL_PRIORITY_1 1
70*c83a76b0SSuyog Pawar #define OSAL_PRIORITY_2 2
71*c83a76b0SSuyog Pawar #define OSAL_PRIORITY_3 3
72*c83a76b0SSuyog Pawar #define OSAL_PRIORITY_4 4
73*c83a76b0SSuyog Pawar #define OSAL_PRIORITY_5 5
74*c83a76b0SSuyog Pawar #define OSAL_PRIORITY_6 6
75*c83a76b0SSuyog Pawar #define OSAL_PRIORITY_7 7
76*c83a76b0SSuyog Pawar #define OSAL_PRIORITY_8 8
77*c83a76b0SSuyog Pawar #define OSAL_PRIORITY_9 9
78*c83a76b0SSuyog Pawar #define OSAL_PRIORITY_10 10
79*c83a76b0SSuyog Pawar 
80*c83a76b0SSuyog Pawar /* OSAL socket option levels */
81*c83a76b0SSuyog Pawar #define OSAL_SOL_SOCKET 10000
82*c83a76b0SSuyog Pawar #define OSAL_IPPROTO_IP 10001
83*c83a76b0SSuyog Pawar 
84*c83a76b0SSuyog Pawar /* OSAL socket options */
85*c83a76b0SSuyog Pawar #define OSAL_BROADCAST 1000
86*c83a76b0SSuyog Pawar #define OSAL_REUSEADDR 1001
87*c83a76b0SSuyog Pawar #define OSAL_KEEPALIVE 1002
88*c83a76b0SSuyog Pawar #define OSAL_LINGER 1003
89*c83a76b0SSuyog Pawar #define OSAL_OOBINLINE 1004
90*c83a76b0SSuyog Pawar #define OSAL_SNDBUF 1005
91*c83a76b0SSuyog Pawar #define OSAL_RCVBUF 1006
92*c83a76b0SSuyog Pawar #define OSAL_RCVTIMEO 1007
93*c83a76b0SSuyog Pawar #define OSAL_SNDTIMEO 1008
94*c83a76b0SSuyog Pawar #define OSAL_ADD_MEMBERSHIP 1009
95*c83a76b0SSuyog Pawar #define OSAL_DROP_MEMBERSHIP 1010
96*c83a76b0SSuyog Pawar #define OSAL_TTL 1011
97*c83a76b0SSuyog Pawar #define OSAL_DSCP 1012
98*c83a76b0SSuyog Pawar #define OSAL_MULTICAST_TTL 1013
99*c83a76b0SSuyog Pawar #define OSAL_ADDSRC_MEMBERSHIP 1014
100*c83a76b0SSuyog Pawar #define OSAL_DROPSRC_MEMBERSHIP 1015
101*c83a76b0SSuyog Pawar 
102*c83a76b0SSuyog Pawar     /*****************************************************************************/
103*c83a76b0SSuyog Pawar     /* Enums                                                                     */
104*c83a76b0SSuyog Pawar     /*****************************************************************************/
105*c83a76b0SSuyog Pawar 
106*c83a76b0SSuyog Pawar     /* Protocols supported. */
107*c83a76b0SSuyog Pawar     typedef enum
108*c83a76b0SSuyog Pawar     {
109*c83a76b0SSuyog Pawar         OSAL_TCP, /* Address family = AF_INET, Type = SOCK_STREAM, Protocol = 0 */
110*c83a76b0SSuyog Pawar         OSAL_UDP /* Address family = AF_INET, Type = SOCK_DGRAM,  Protocol = 0 */
111*c83a76b0SSuyog Pawar     } OSAL_PROTOCOL_T;
112*c83a76b0SSuyog Pawar 
113*c83a76b0SSuyog Pawar     /* File Descriptor types. Used to specify the type of activity to check on   */
114*c83a76b0SSuyog Pawar     /* a socket.                                                                 */
115*c83a76b0SSuyog Pawar     typedef enum
116*c83a76b0SSuyog Pawar     {
117*c83a76b0SSuyog Pawar         OSAL_READ_FD,
118*c83a76b0SSuyog Pawar         OSAL_WRITE_FD,
119*c83a76b0SSuyog Pawar         OSAL_EXCEPT_FD
120*c83a76b0SSuyog Pawar     } OSAL_FD_TYPE_T;
121*c83a76b0SSuyog Pawar 
122*c83a76b0SSuyog Pawar     /* Scheduling policies supported */
123*c83a76b0SSuyog Pawar     typedef enum
124*c83a76b0SSuyog Pawar     {
125*c83a76b0SSuyog Pawar         OSAL_SCHED_RR,
126*c83a76b0SSuyog Pawar         OSAL_SCHED_FIFO,
127*c83a76b0SSuyog Pawar         OSAL_SCHED_OTHER
128*c83a76b0SSuyog Pawar     } OSAL_SCHED_POLICY_TYPE_T;
129*c83a76b0SSuyog Pawar 
130*c83a76b0SSuyog Pawar     /*****************************************************************************/
131*c83a76b0SSuyog Pawar     /* Structures                                                                */
132*c83a76b0SSuyog Pawar     /*****************************************************************************/
133*c83a76b0SSuyog Pawar 
134*c83a76b0SSuyog Pawar     /* Structure to initialize OSAL */
135*c83a76b0SSuyog Pawar     typedef struct
136*c83a76b0SSuyog Pawar     {
137*c83a76b0SSuyog Pawar         /* Handle of memory manager being used. NULL is a valid argument.*/
138*c83a76b0SSuyog Pawar         void *mmr_handle;
139*c83a76b0SSuyog Pawar 
140*c83a76b0SSuyog Pawar         /* Call back API to be called during allocation */
141*c83a76b0SSuyog Pawar         void *(*osal_alloc)(void *mmr_handle, UWORD32 size);
142*c83a76b0SSuyog Pawar 
143*c83a76b0SSuyog Pawar         /* Call back API for freeing */
144*c83a76b0SSuyog Pawar         void (*osal_free)(void *mmr_handle, void *mem);
145*c83a76b0SSuyog Pawar     } osal_cb_funcs_t;
146*c83a76b0SSuyog Pawar 
147*c83a76b0SSuyog Pawar     /* The structure (osal_mbox_attr_t) contains the attributes of the thread    */
148*c83a76b0SSuyog Pawar     /* which are passed to osal_mbox_create() API. The created Mail box has      */
149*c83a76b0SSuyog Pawar     /* attributes specified using the structure variable.                        */
150*c83a76b0SSuyog Pawar     typedef struct
151*c83a76b0SSuyog Pawar     {
152*c83a76b0SSuyog Pawar         void *thread_handle; /* Thread to be associated with mail box.      */
153*c83a76b0SSuyog Pawar         STRWORD8 *name; /* NULL terminated string name for mail box   */
154*c83a76b0SSuyog Pawar         UWORD32 msg_size; /* Length of each message.                     */
155*c83a76b0SSuyog Pawar         UWORD32 mbx_len; /* Maximum number of messages.                 */
156*c83a76b0SSuyog Pawar     } osal_mbox_attr_t;
157*c83a76b0SSuyog Pawar 
158*c83a76b0SSuyog Pawar     /* The structure (osal_sem_attr_t) contains the attributes of the semaphore  */
159*c83a76b0SSuyog Pawar     /* which are passed to osal_sem_create() API. The Semaphore attributes like  */
160*c83a76b0SSuyog Pawar     /* initial value of semaphore.                                               */
161*c83a76b0SSuyog Pawar     typedef struct
162*c83a76b0SSuyog Pawar     {
163*c83a76b0SSuyog Pawar         WORD32 value;
164*c83a76b0SSuyog Pawar     } osal_sem_attr_t;
165*c83a76b0SSuyog Pawar 
166*c83a76b0SSuyog Pawar     /* The Structure (osal_thread_attr_t) contains the attributes of the thread  */
167*c83a76b0SSuyog Pawar     /* which are passed to osal_thread_create() API. The created thread has      */
168*c83a76b0SSuyog Pawar     /* attributes specified using the structure variable.                        */
169*c83a76b0SSuyog Pawar     typedef struct
170*c83a76b0SSuyog Pawar     {
171*c83a76b0SSuyog Pawar         /* Function from where thread execution starts */
172*c83a76b0SSuyog Pawar         void *thread_func;
173*c83a76b0SSuyog Pawar 
174*c83a76b0SSuyog Pawar         /* Parameters for thread function. */
175*c83a76b0SSuyog Pawar         void *thread_param;
176*c83a76b0SSuyog Pawar 
177*c83a76b0SSuyog Pawar         /* Stack size in bytes. For default value, set to '0' */
178*c83a76b0SSuyog Pawar         UWORD32 stack_size;
179*c83a76b0SSuyog Pawar 
180*c83a76b0SSuyog Pawar         /* This attribute specifies a pre-allocated block of size 'stack_size'   */
181*c83a76b0SSuyog Pawar         /* to be used for the task's private stack. For default value, set to    */
182*c83a76b0SSuyog Pawar         /* 'NULL'.                                                               */
183*c83a76b0SSuyog Pawar         void *stack_addr;
184*c83a76b0SSuyog Pawar 
185*c83a76b0SSuyog Pawar         /* NULL terminated string name for thread. For default value, set to     */
186*c83a76b0SSuyog Pawar         /* 'NULL'.                                                               */
187*c83a76b0SSuyog Pawar         WORD8 *name;
188*c83a76b0SSuyog Pawar 
189*c83a76b0SSuyog Pawar         /* Flag determining whether to use OSAL Thread priority mapping or not.  */
190*c83a76b0SSuyog Pawar         /* Value set to 1 - use OSAL thread priority mapping.                    */
191*c83a76b0SSuyog Pawar         /* Value set to 0 - Direct value set as thread priority                  */
192*c83a76b0SSuyog Pawar         WORD32 priority_map_flag;
193*c83a76b0SSuyog Pawar 
194*c83a76b0SSuyog Pawar         /* Priority range shall be considered + ve values for increasing         */
195*c83a76b0SSuyog Pawar         /* priority and negative values for decreasing priority. The range shall */
196*c83a76b0SSuyog Pawar         /* be mapped to specific OS range internally through OSAL. For default   */
197*c83a76b0SSuyog Pawar         /* value, set to '0'.                                                    */
198*c83a76b0SSuyog Pawar         WORD32 priority;
199*c83a76b0SSuyog Pawar 
200*c83a76b0SSuyog Pawar         /* Exit return value on which thread shall exit */
201*c83a76b0SSuyog Pawar         WORD32 exit_code;
202*c83a76b0SSuyog Pawar 
203*c83a76b0SSuyog Pawar         /* Scheduling policy of the thread */
204*c83a76b0SSuyog Pawar         OSAL_SCHED_POLICY_TYPE_T sched_policy;
205*c83a76b0SSuyog Pawar 
206*c83a76b0SSuyog Pawar         /* Mask to specify on which cores the thread can run */
207*c83a76b0SSuyog Pawar         ULWORD64 core_affinity_mask;
208*c83a76b0SSuyog Pawar 
209*c83a76b0SSuyog Pawar         /* Specifies on which group of processors the thread can run */
210*c83a76b0SSuyog Pawar         WORD16 group_num;
211*c83a76b0SSuyog Pawar 
212*c83a76b0SSuyog Pawar     } osal_thread_attr_t;
213*c83a76b0SSuyog Pawar 
214*c83a76b0SSuyog Pawar     /* The structure (osal_socket_attr_t) contains the attributes of the socket  */
215*c83a76b0SSuyog Pawar     /* which are to be specified during socket creation.                         */
216*c83a76b0SSuyog Pawar     typedef struct
217*c83a76b0SSuyog Pawar     {
218*c83a76b0SSuyog Pawar         OSAL_PROTOCOL_T protocol;
219*c83a76b0SSuyog Pawar     } osal_socket_attr_t;
220*c83a76b0SSuyog Pawar 
221*c83a76b0SSuyog Pawar     /* The structure (osal_sockaddr_t) is used to uniquely determine a socket in */
222*c83a76b0SSuyog Pawar     /* the network. The socket can be addressed using IP address and port number.*/
223*c83a76b0SSuyog Pawar     typedef struct
224*c83a76b0SSuyog Pawar     {
225*c83a76b0SSuyog Pawar         WORD8 ip_addr[16];
226*c83a76b0SSuyog Pawar         UWORD16 port;
227*c83a76b0SSuyog Pawar     } osal_sockaddr_t;
228*c83a76b0SSuyog Pawar 
229*c83a76b0SSuyog Pawar     /* The structure contains the select engine thread parameters like thread    */
230*c83a76b0SSuyog Pawar     /* name thread priority etc.                                                 */
231*c83a76b0SSuyog Pawar     typedef struct
232*c83a76b0SSuyog Pawar     {
233*c83a76b0SSuyog Pawar         /* Flag determining whether to use OSAL Thread priority mapping or not.  */
234*c83a76b0SSuyog Pawar         /* Value set to 1 - use OSAL thread priority mapping.                    */
235*c83a76b0SSuyog Pawar         /* Value set to 0 - Direct value set as thread priority                  */
236*c83a76b0SSuyog Pawar         WORD32 priority_map_flag;
237*c83a76b0SSuyog Pawar 
238*c83a76b0SSuyog Pawar         /* Priority range shall be considered + ve values for increasing         */
239*c83a76b0SSuyog Pawar         /* priority and negative values for decreasing priority. The range shall */
240*c83a76b0SSuyog Pawar         /* be mapped to specific OS range internally through OSAL. For default   */
241*c83a76b0SSuyog Pawar         /* value, set to '0'.                                                    */
242*c83a76b0SSuyog Pawar         WORD32 priority;
243*c83a76b0SSuyog Pawar 
244*c83a76b0SSuyog Pawar         /* NULL terminated string name for thread. For default value, set to     */
245*c83a76b0SSuyog Pawar         /* 'NULL'.                                                               */
246*c83a76b0SSuyog Pawar         WORD8 *name;
247*c83a76b0SSuyog Pawar 
248*c83a76b0SSuyog Pawar         /* Timeout for thread sleep in micro seconds */
249*c83a76b0SSuyog Pawar         UWORD32 select_timeout;
250*c83a76b0SSuyog Pawar 
251*c83a76b0SSuyog Pawar         /* Timeout for SELECT system called by osal library in micro seconds */
252*c83a76b0SSuyog Pawar         UWORD32 select_poll_interval;
253*c83a76b0SSuyog Pawar     } osal_select_engine_attr_t;
254*c83a76b0SSuyog Pawar 
255*c83a76b0SSuyog Pawar     /* The structure used to register sockets to select engine. This structure   */
256*c83a76b0SSuyog Pawar     /* has to be updated for each socket handle and select register has to be    */
257*c83a76b0SSuyog Pawar     /* done. Currently registration is supported one at a time.                  */
258*c83a76b0SSuyog Pawar     /* Note: Function 'init' is assumed to return the socket handle.             */
259*c83a76b0SSuyog Pawar     typedef struct osal_select_entry_t
260*c83a76b0SSuyog Pawar     {
261*c83a76b0SSuyog Pawar         /* Socket handle to be registered. */
262*c83a76b0SSuyog Pawar         void *socket_handle;
263*c83a76b0SSuyog Pawar 
264*c83a76b0SSuyog Pawar         /* Activity to select for. */
265*c83a76b0SSuyog Pawar         OSAL_FD_TYPE_T type;
266*c83a76b0SSuyog Pawar 
267*c83a76b0SSuyog Pawar         /* Call back called before doing select. The function init is assumed to */
268*c83a76b0SSuyog Pawar         /* return the socket handle. In case of NULL being returning by this     */
269*c83a76b0SSuyog Pawar         /* function, The socket will be unregistered                             */
270*c83a76b0SSuyog Pawar         void *(*init)(void *);
271*c83a76b0SSuyog Pawar 
272*c83a76b0SSuyog Pawar         /* Argument to init function */
273*c83a76b0SSuyog Pawar         void *init_param;
274*c83a76b0SSuyog Pawar 
275*c83a76b0SSuyog Pawar         /* Call back function on select success */
276*c83a76b0SSuyog Pawar         WORD32 (*call_back)(void *socket_handle, void *call_back_param);
277*c83a76b0SSuyog Pawar 
278*c83a76b0SSuyog Pawar         /* Call back function parameters */
279*c83a76b0SSuyog Pawar         void *call_back_param;
280*c83a76b0SSuyog Pawar 
281*c83a76b0SSuyog Pawar         /* Call back called when the socket is unregistered. If set to NULL,     */
282*c83a76b0SSuyog Pawar         /* this will not be called. The socket that has been registered is the   */
283*c83a76b0SSuyog Pawar         /* first argument, the second argument will be terminate_param           */
284*c83a76b0SSuyog Pawar         void (*terminate)(void *, void *);
285*c83a76b0SSuyog Pawar 
286*c83a76b0SSuyog Pawar         /* Argument to terminate callback */
287*c83a76b0SSuyog Pawar         void *terminate_param;
288*c83a76b0SSuyog Pawar 
289*c83a76b0SSuyog Pawar         /* Exit code of the call back function. */
290*c83a76b0SSuyog Pawar         WORD32 exit_code;
291*c83a76b0SSuyog Pawar 
292*c83a76b0SSuyog Pawar         /* Identifier. Do not initialize this. */
293*c83a76b0SSuyog Pawar         WORD32 id;
294*c83a76b0SSuyog Pawar     } osal_select_entry_t;
295*c83a76b0SSuyog Pawar 
296*c83a76b0SSuyog Pawar     /* File descriptor structure. Used in osal_socket_select() API call.         */
297*c83a76b0SSuyog Pawar     /* Currently maximum number of sockets that can be set is fixed to           */
298*c83a76b0SSuyog Pawar     /* SELECT_MAX                                                                */
299*c83a76b0SSuyog Pawar     /* Note : To initialize osal_fd_set structure variable, call API             */
300*c83a76b0SSuyog Pawar     /*        osal_socket_fd_zero() for Initialization. If initialization is not */
301*c83a76b0SSuyog Pawar     /*        done, behaviour of osal_socket_select() and fd_set API's is        */
302*c83a76b0SSuyog Pawar     /*        undefined.                                                         */
303*c83a76b0SSuyog Pawar     typedef struct
304*c83a76b0SSuyog Pawar     {
305*c83a76b0SSuyog Pawar         void *array[OSAL_SELECT_MAX]; /* Array for holding the socket descriptors*/
306*c83a76b0SSuyog Pawar         WORD32 count; /* Number of socket descriptors in array   */
307*c83a76b0SSuyog Pawar     } osal_fd_set_t;
308*c83a76b0SSuyog Pawar 
309*c83a76b0SSuyog Pawar     /* Timeout value for osal_socket_select() API. */
310*c83a76b0SSuyog Pawar     typedef struct
311*c83a76b0SSuyog Pawar     {
312*c83a76b0SSuyog Pawar         WORD32 tv_sec; /* Time in seconds.                            */
313*c83a76b0SSuyog Pawar         WORD32 tv_usec; /* Time in micro seconds.                      */
314*c83a76b0SSuyog Pawar     } osal_timeval_t;
315*c83a76b0SSuyog Pawar 
316*c83a76b0SSuyog Pawar     /* Attributes for setting Linger option for socket */
317*c83a76b0SSuyog Pawar     typedef struct
318*c83a76b0SSuyog Pawar     {
319*c83a76b0SSuyog Pawar         UWORD16 l_onoff;
320*c83a76b0SSuyog Pawar         UWORD16 l_linger;
321*c83a76b0SSuyog Pawar     } osal_sockopt_linger_t;
322*c83a76b0SSuyog Pawar 
323*c83a76b0SSuyog Pawar     /* Attributes for Joining or dropping from a multicast group */
324*c83a76b0SSuyog Pawar     typedef struct
325*c83a76b0SSuyog Pawar     {
326*c83a76b0SSuyog Pawar         WORD8 imr_multiaddr[16];
327*c83a76b0SSuyog Pawar         WORD8 imr_interface[16];
328*c83a76b0SSuyog Pawar         WORD8 imr_srcaddr[16];
329*c83a76b0SSuyog Pawar     } osal_ip_mreq_t;
330*c83a76b0SSuyog Pawar 
331*c83a76b0SSuyog Pawar     /*****************************************************************************/
332*c83a76b0SSuyog Pawar     /* Extern OSAL Initialization Function Declarations                          */
333*c83a76b0SSuyog Pawar     /*****************************************************************************/
334*c83a76b0SSuyog Pawar 
335*c83a76b0SSuyog Pawar     /* Allocates memory for the OSAL instance handle. It also allocates memory   */
336*c83a76b0SSuyog Pawar     /* for storing debug information.                                            */
337*c83a76b0SSuyog Pawar     extern WORD32 osal_init(IN void *osal_handle);
338*c83a76b0SSuyog Pawar 
339*c83a76b0SSuyog Pawar     /* Releases all the resources held by the OSAL handle */
340*c83a76b0SSuyog Pawar     extern WORD32 osal_close(IN void *osal_handle);
341*c83a76b0SSuyog Pawar 
342*c83a76b0SSuyog Pawar     /* This function registers MMR call backs for OSAL */
343*c83a76b0SSuyog Pawar     extern WORD32 osal_register_callbacks(IN void *osal_handle, IN osal_cb_funcs_t *cb_funcs);
344*c83a76b0SSuyog Pawar 
345*c83a76b0SSuyog Pawar     /*****************************************************************************/
346*c83a76b0SSuyog Pawar     /* Extern Mail Box Function Declarations                                     */
347*c83a76b0SSuyog Pawar     /*****************************************************************************/
348*c83a76b0SSuyog Pawar 
349*c83a76b0SSuyog Pawar     /* Allocates memory for mail box handle. Creates a mail box which is         */
350*c83a76b0SSuyog Pawar     /* associated with the thread and updates the mail box, which returned for   */
351*c83a76b0SSuyog Pawar     /* further actions to be performed on the mail box.                          */
352*c83a76b0SSuyog Pawar     extern void *osal_mbox_create(IN void *osal_handle, IN osal_mbox_attr_t *attr);
353*c83a76b0SSuyog Pawar 
354*c83a76b0SSuyog Pawar     /* Closes the mail box and frees the memory allocated for mail box handle. */
355*c83a76b0SSuyog Pawar     extern WORD32 osal_mbox_destroy(IN void *mbox_handle);
356*c83a76b0SSuyog Pawar 
357*c83a76b0SSuyog Pawar     /* Posts a message to the mail box */
358*c83a76b0SSuyog Pawar     extern WORD32 osal_mbox_post(IN void *mbox_handle, IN void *buf, IN UWORD32 len);
359*c83a76b0SSuyog Pawar 
360*c83a76b0SSuyog Pawar     /* Gets the message form the specified mail box. If there are not messages   */
361*c83a76b0SSuyog Pawar     /* in mail box, it waits infinitely till a message arrives.                  */
362*c83a76b0SSuyog Pawar     extern WORD32 osal_mbox_get(IN void *mbox_handle, OUT void *buf, IN UWORD32 len);
363*c83a76b0SSuyog Pawar 
364*c83a76b0SSuyog Pawar     /* Gets the message from the specified mail box within the timeout period.   */
365*c83a76b0SSuyog Pawar     /* If no messages are present in specified time, error code is returned. The */
366*c83a76b0SSuyog Pawar     /* error can be got from osal_get_last_error() API                           */
367*c83a76b0SSuyog Pawar     extern WORD32
368*c83a76b0SSuyog Pawar         osal_mbox_get_timed(IN void *mbox_handle, OUT void *buf, IN UWORD32 len, IN UWORD32 timeout);
369*c83a76b0SSuyog Pawar 
370*c83a76b0SSuyog Pawar     /*****************************************************************************/
371*c83a76b0SSuyog Pawar     /* Extern Custom Mail Box Function Declarations                               */
372*c83a76b0SSuyog Pawar     /*****************************************************************************/
373*c83a76b0SSuyog Pawar 
374*c83a76b0SSuyog Pawar     /* Allocates memory for mail box handle. Creates a mail box which is         */
375*c83a76b0SSuyog Pawar     /* associated with the thread and updates the mail box, which returned for   */
376*c83a76b0SSuyog Pawar     /* further actions to be performed on the mail box.                          */
377*c83a76b0SSuyog Pawar     extern void *osal_custom_mbox_create(IN void *osal_handle, IN osal_mbox_attr_t *attr);
378*c83a76b0SSuyog Pawar 
379*c83a76b0SSuyog Pawar     /* Closes the mail box and frees the memory allocated for mail box handle. */
380*c83a76b0SSuyog Pawar     extern WORD32 osal_custom_mbox_destroy(IN void *mbox_handle);
381*c83a76b0SSuyog Pawar 
382*c83a76b0SSuyog Pawar     /* Posts a message to the mail box */
383*c83a76b0SSuyog Pawar     extern WORD32 osal_custom_mbox_post(IN void *cust_mbox_handle, IN void *buf, IN UWORD32 len);
384*c83a76b0SSuyog Pawar 
385*c83a76b0SSuyog Pawar     /* Gets the message form the specified mail box. If there are not messages   */
386*c83a76b0SSuyog Pawar     /* in mail box, it waits infinitely till a message arrives.                  */
387*c83a76b0SSuyog Pawar     extern WORD32 osal_custom_mbox_get(IN void *cust_mbox_handle, OUT void *buf, IN UWORD32 len);
388*c83a76b0SSuyog Pawar 
389*c83a76b0SSuyog Pawar     /* Gets the message from the specified mail box within the timeout period.   */
390*c83a76b0SSuyog Pawar     /* If no messages are present in specified time, error code is returned. The */
391*c83a76b0SSuyog Pawar     /* error can be got from osal_get_last_error() API                           */
392*c83a76b0SSuyog Pawar     extern WORD32 osal_custom_mbox_get_timed(
393*c83a76b0SSuyog Pawar         IN void *cust_mbox_handle, OUT void *buf, IN UWORD32 len, IN UWORD32 timeout);
394*c83a76b0SSuyog Pawar 
395*c83a76b0SSuyog Pawar     /*****************************************************************************/
396*c83a76b0SSuyog Pawar     /* Extern Mutex Function Declarations                                        */
397*c83a76b0SSuyog Pawar     /*****************************************************************************/
398*c83a76b0SSuyog Pawar 
399*c83a76b0SSuyog Pawar     /* Creates a mutex and returns the to mutex */
400*c83a76b0SSuyog Pawar     extern void *osal_mutex_create(IN void *osal_handle);
401*c83a76b0SSuyog Pawar 
402*c83a76b0SSuyog Pawar     /* Closes the mutex. */
403*c83a76b0SSuyog Pawar     extern WORD32 osal_mutex_destroy(IN void *mutex_handle);
404*c83a76b0SSuyog Pawar 
405*c83a76b0SSuyog Pawar     /* Waits infinitely till mutex lock is got. */
406*c83a76b0SSuyog Pawar     extern WORD32 osal_mutex_lock(IN void *mutex_handle);
407*c83a76b0SSuyog Pawar 
408*c83a76b0SSuyog Pawar     /* Releases the lock held on the mutex. */
409*c83a76b0SSuyog Pawar     extern WORD32 osal_mutex_unlock(IN void *mutex_handle);
410*c83a76b0SSuyog Pawar 
411*c83a76b0SSuyog Pawar     /*****************************************************************************/
412*c83a76b0SSuyog Pawar     /* Extern Semaphore Function Declarations                                    */
413*c83a76b0SSuyog Pawar     /*****************************************************************************/
414*c83a76b0SSuyog Pawar 
415*c83a76b0SSuyog Pawar     /* Creates a semaphore and returns the handle to semaphore. */
416*c83a76b0SSuyog Pawar     extern void *osal_sem_create(IN void *osal_handle, IN osal_sem_attr_t *attr);
417*c83a76b0SSuyog Pawar 
418*c83a76b0SSuyog Pawar     /* Closes the semaphore. */
419*c83a76b0SSuyog Pawar     extern WORD32 osal_sem_destroy(IN void *sem_handle);
420*c83a76b0SSuyog Pawar 
421*c83a76b0SSuyog Pawar     /* Waits infinitely till semaphore is zero. */
422*c83a76b0SSuyog Pawar     extern WORD32 osal_sem_wait(IN void *sem_handle);
423*c83a76b0SSuyog Pawar 
424*c83a76b0SSuyog Pawar     /* Increments the value of semaphore by one. */
425*c83a76b0SSuyog Pawar     extern WORD32 osal_sem_post(IN void *sem_handle);
426*c83a76b0SSuyog Pawar 
427*c83a76b0SSuyog Pawar     /* Returns the current value of semaphore. */
428*c83a76b0SSuyog Pawar     extern WORD32 osal_sem_count(IN void *sem_handle, OUT WORD32 *count);
429*c83a76b0SSuyog Pawar 
430*c83a76b0SSuyog Pawar     /*****************************************************************************/
431*c83a76b0SSuyog Pawar     /* Extern Conditional Variable Function Declarations                         */
432*c83a76b0SSuyog Pawar     /*****************************************************************************/
433*c83a76b0SSuyog Pawar 
434*c83a76b0SSuyog Pawar     /* Creates a conditional variable and returns the handle to it. */
435*c83a76b0SSuyog Pawar     extern void *osal_cond_var_create(IN void *osal_handle);
436*c83a76b0SSuyog Pawar 
437*c83a76b0SSuyog Pawar     /* Destroys the conditional variable. */
438*c83a76b0SSuyog Pawar     extern WORD32 osal_cond_var_destroy(IN void *cond_var_handle);
439*c83a76b0SSuyog Pawar 
440*c83a76b0SSuyog Pawar     /* Waits infinitely till conditional variable receives signal. */
441*c83a76b0SSuyog Pawar     extern WORD32 osal_cond_var_wait(IN void *cond_var_handle, IN void *mutex_handle);
442*c83a76b0SSuyog Pawar 
443*c83a76b0SSuyog Pawar     /* Signals on conditional variable. */
444*c83a76b0SSuyog Pawar     extern WORD32 osal_cond_var_signal(IN void *cond_var_handle);
445*c83a76b0SSuyog Pawar 
446*c83a76b0SSuyog Pawar     /*****************************************************************************/
447*c83a76b0SSuyog Pawar     /* Extern Thread Function Declarations                                       */
448*c83a76b0SSuyog Pawar     /*****************************************************************************/
449*c83a76b0SSuyog Pawar 
450*c83a76b0SSuyog Pawar     /* Creates a thread with specified parameters */
451*c83a76b0SSuyog Pawar     extern void *osal_thread_create(IN void *osal_handle, IN osal_thread_attr_t *attr);
452*c83a76b0SSuyog Pawar 
453*c83a76b0SSuyog Pawar     /* Closes or halts the execution of thread specified by the handle. */
454*c83a76b0SSuyog Pawar     extern WORD32 osal_thread_destroy(IN void *thread_handle);
455*c83a76b0SSuyog Pawar 
456*c83a76b0SSuyog Pawar     /* Makes the thread sleep for specified number of milliseconds */
457*c83a76b0SSuyog Pawar     extern WORD32 osal_thread_sleep(IN UWORD32 milli_seconds);
458*c83a76b0SSuyog Pawar 
459*c83a76b0SSuyog Pawar     /* Yields the execution of thread. */
460*c83a76b0SSuyog Pawar     extern WORD32 osal_thread_yield(void);
461*c83a76b0SSuyog Pawar 
462*c83a76b0SSuyog Pawar     /* Suspends the execution of thread until osal_thread_resume API is called. */
463*c83a76b0SSuyog Pawar     extern WORD32 osal_thread_suspend(IN void *thread_handle);
464*c83a76b0SSuyog Pawar 
465*c83a76b0SSuyog Pawar     /* Resumes the execution of thread which was suspended by                    */
466*c83a76b0SSuyog Pawar     /* osal_thread_suspend API call.                                             */
467*c83a76b0SSuyog Pawar     extern WORD32 osal_thread_resume(IN void *thread_handle);
468*c83a76b0SSuyog Pawar 
469*c83a76b0SSuyog Pawar     /* Waits infinitely till the thread, whose handle is passed, completes       */
470*c83a76b0SSuyog Pawar     /* execution.                                                                */
471*c83a76b0SSuyog Pawar     extern WORD32 osal_thread_wait(IN void *thread_handle);
472*c83a76b0SSuyog Pawar 
473*c83a76b0SSuyog Pawar     /* Returns current thread handle */
474*c83a76b0SSuyog Pawar     extern void *osal_get_thread_handle(IN void *osal_handle);
475*c83a76b0SSuyog Pawar 
476*c83a76b0SSuyog Pawar     /*****************************************************************************/
477*c83a76b0SSuyog Pawar     /* Extern Network Socket Function Declarations                               */
478*c83a76b0SSuyog Pawar     /*****************************************************************************/
479*c83a76b0SSuyog Pawar 
480*c83a76b0SSuyog Pawar     /* Initializes network resources */
481*c83a76b0SSuyog Pawar     extern WORD32 osal_network_init(void);
482*c83a76b0SSuyog Pawar 
483*c83a76b0SSuyog Pawar     /* Un-initializes all the network resources */
484*c83a76b0SSuyog Pawar     extern WORD32 osal_network_close(void);
485*c83a76b0SSuyog Pawar 
486*c83a76b0SSuyog Pawar     /* Creates the socket and returns the socket descriptor. */
487*c83a76b0SSuyog Pawar     extern void *osal_socket_create(IN void *osal_handle, IN osal_socket_attr_t *attr);
488*c83a76b0SSuyog Pawar 
489*c83a76b0SSuyog Pawar     /* Closes the open socket. */
490*c83a76b0SSuyog Pawar     extern WORD32 osal_socket_destroy(IN void *socket_handle);
491*c83a76b0SSuyog Pawar 
492*c83a76b0SSuyog Pawar     /* Binds to the specified port number on the local machine. Socket_create    */
493*c83a76b0SSuyog Pawar     /* API has to be called before calling socket_bind.                          */
494*c83a76b0SSuyog Pawar     extern WORD32 osal_socket_bind(IN void *socket_handle, IN osal_sockaddr_t *addr);
495*c83a76b0SSuyog Pawar 
496*c83a76b0SSuyog Pawar     /* Starts listening at the specified port for any incoming connections.      */
497*c83a76b0SSuyog Pawar     /* Socket descriptor should be bound before calling socket_listen            */
498*c83a76b0SSuyog Pawar     extern WORD32 osal_socket_listen(IN void *socket_handle, IN WORD32 backlog);
499*c83a76b0SSuyog Pawar 
500*c83a76b0SSuyog Pawar     /* Accepts incoming connection. If listen queue is empty it blocks till a    */
501*c83a76b0SSuyog Pawar     /* successful connection is made.                                            */
502*c83a76b0SSuyog Pawar     extern void *osal_socket_accept(IN void *socket_handle, OUT osal_sockaddr_t *addr);
503*c83a76b0SSuyog Pawar 
504*c83a76b0SSuyog Pawar     /* Makes a connection request to the remote address specified. */
505*c83a76b0SSuyog Pawar     extern WORD32 osal_socket_connect(IN void *socket_handle, IN osal_sockaddr_t *addr);
506*c83a76b0SSuyog Pawar 
507*c83a76b0SSuyog Pawar     /* Sends the specified number of bytes of data */
508*c83a76b0SSuyog Pawar     extern WORD32 osal_socket_send(
509*c83a76b0SSuyog Pawar         IN void *socket_handle, IN const WORD8 *buf, IN WORD32 len, IN WORD32 flags);
510*c83a76b0SSuyog Pawar 
511*c83a76b0SSuyog Pawar     /* Receives data over TCP connection. */
512*c83a76b0SSuyog Pawar     extern WORD32
513*c83a76b0SSuyog Pawar         osal_socket_recv(IN void *socket_handle, OUT WORD8 *buf, IN WORD32 len, IN WORD32 flags);
514*c83a76b0SSuyog Pawar 
515*c83a76b0SSuyog Pawar     /* Sends data over a datagram protocol */
516*c83a76b0SSuyog Pawar     extern WORD32 osal_socket_sendto(
517*c83a76b0SSuyog Pawar         IN void *socket_handle,
518*c83a76b0SSuyog Pawar         IN const WORD8 *buf,
519*c83a76b0SSuyog Pawar         IN WORD32 len,
520*c83a76b0SSuyog Pawar         IN WORD32 flags,
521*c83a76b0SSuyog Pawar         IN osal_sockaddr_t *to);
522*c83a76b0SSuyog Pawar 
523*c83a76b0SSuyog Pawar     /* Receives packet over a UDP connection */
524*c83a76b0SSuyog Pawar     extern WORD32 osal_socket_recvfrom(
525*c83a76b0SSuyog Pawar         IN void *socket_handle,
526*c83a76b0SSuyog Pawar         OUT WORD8 *buf,
527*c83a76b0SSuyog Pawar         IN WORD32 len,
528*c83a76b0SSuyog Pawar         IN WORD32 flags,
529*c83a76b0SSuyog Pawar         OUT osal_sockaddr_t *from);
530*c83a76b0SSuyog Pawar 
531*c83a76b0SSuyog Pawar     /* Polls the specified sockets for specified activity */
532*c83a76b0SSuyog Pawar     extern WORD32 osal_socket_select(
533*c83a76b0SSuyog Pawar         INOUT osal_fd_set_t *readfds,
534*c83a76b0SSuyog Pawar         INOUT osal_fd_set_t *writefds,
535*c83a76b0SSuyog Pawar         INOUT osal_fd_set_t *exceptfds,
536*c83a76b0SSuyog Pawar         INOUT osal_timeval_t *timeout);
537*c83a76b0SSuyog Pawar 
538*c83a76b0SSuyog Pawar     /* Gets the socket options */
539*c83a76b0SSuyog Pawar     extern WORD32 osal_socket_getsockopt(
540*c83a76b0SSuyog Pawar         IN void *socket_handle,
541*c83a76b0SSuyog Pawar         IN WORD32 level,
542*c83a76b0SSuyog Pawar         IN WORD32 optname,
543*c83a76b0SSuyog Pawar         OUT WORD8 *optval,
544*c83a76b0SSuyog Pawar         INOUT WORD32 *optlen);
545*c83a76b0SSuyog Pawar 
546*c83a76b0SSuyog Pawar     /* Sets the socket options to specified values */
547*c83a76b0SSuyog Pawar     extern WORD32 osal_socket_setsockopt(
548*c83a76b0SSuyog Pawar         IN void *socket_handle,
549*c83a76b0SSuyog Pawar         IN WORD32 level,
550*c83a76b0SSuyog Pawar         IN WORD32 optname,
551*c83a76b0SSuyog Pawar         IN const WORD8 *optval,
552*c83a76b0SSuyog Pawar         IN WORD32 optlen);
553*c83a76b0SSuyog Pawar 
554*c83a76b0SSuyog Pawar     /* Adds the specified socket handle to the file descriptor set */
555*c83a76b0SSuyog Pawar     extern WORD32 osal_socket_fd_set(IN void *socket_handle, OUT osal_fd_set_t *set);
556*c83a76b0SSuyog Pawar 
557*c83a76b0SSuyog Pawar     /* Checks the file descriptor set for the presence of socket handle. */
558*c83a76b0SSuyog Pawar     extern WORD32 osal_socket_fd_isset(IN void *socket_handle, IN osal_fd_set_t *set);
559*c83a76b0SSuyog Pawar 
560*c83a76b0SSuyog Pawar     /* Resets the file descriptor set */
561*c83a76b0SSuyog Pawar     extern void osal_socket_fd_zero(INOUT osal_fd_set_t *set);
562*c83a76b0SSuyog Pawar 
563*c83a76b0SSuyog Pawar     /* Removes the specified socket handle from the file descriptor set */
564*c83a76b0SSuyog Pawar     extern WORD32 osal_socket_fd_clr(IN void *socket_handle, OUT osal_fd_set_t *set);
565*c83a76b0SSuyog Pawar 
566*c83a76b0SSuyog Pawar     /* To convert short integer from host byte order to network byte order */
567*c83a76b0SSuyog Pawar     extern UWORD16 osal_htons(IN UWORD16 hostshort);
568*c83a76b0SSuyog Pawar 
569*c83a76b0SSuyog Pawar     /* To convert long integer from host to network byte order */
570*c83a76b0SSuyog Pawar     extern UWORD32 osal_htonl(IN UWORD32 hostlong);
571*c83a76b0SSuyog Pawar 
572*c83a76b0SSuyog Pawar     /* To convert short integer from network to host byte order */
573*c83a76b0SSuyog Pawar     extern UWORD16 osal_ntohs(IN UWORD16 netshort);
574*c83a76b0SSuyog Pawar 
575*c83a76b0SSuyog Pawar     /* To convert long integer from network to host byte order */
576*c83a76b0SSuyog Pawar     extern UWORD32 osal_ntohl(IN UWORD32 netlong);
577*c83a76b0SSuyog Pawar 
578*c83a76b0SSuyog Pawar     /*****************************************************************************/
579*c83a76b0SSuyog Pawar     /* Extern Select Engine Function Declarations                                */
580*c83a76b0SSuyog Pawar     /*****************************************************************************/
581*c83a76b0SSuyog Pawar 
582*c83a76b0SSuyog Pawar     /* Initializes the select engine. */
583*c83a76b0SSuyog Pawar     extern void *
584*c83a76b0SSuyog Pawar         osal_select_engine_init(IN void *osal_handle, IN osal_select_engine_attr_t *se_attr);
585*c83a76b0SSuyog Pawar 
586*c83a76b0SSuyog Pawar     /* Closes the select engine. */
587*c83a76b0SSuyog Pawar     extern WORD32 osal_select_engine_close(IN void *select_engine);
588*c83a76b0SSuyog Pawar 
589*c83a76b0SSuyog Pawar     /* Registers the socket handle specified in the entry. */
590*c83a76b0SSuyog Pawar     extern WORD32
591*c83a76b0SSuyog Pawar         osal_select_engine_register(IN void *select_engine, IN osal_select_entry_t *entry);
592*c83a76b0SSuyog Pawar 
593*c83a76b0SSuyog Pawar     /* Un-registers the specified socket handle. */
594*c83a76b0SSuyog Pawar     extern WORD32 osal_select_engine_unregister(
595*c83a76b0SSuyog Pawar         IN void *select_engine, IN void *socket_handle, IN OSAL_FD_TYPE_T fd_type);
596*c83a76b0SSuyog Pawar     /*****************************************************************************/
597*c83a76b0SSuyog Pawar     /* Extern Other Function Declarations                                        */
598*c83a76b0SSuyog Pawar     /*****************************************************************************/
599*c83a76b0SSuyog Pawar 
600*c83a76b0SSuyog Pawar     /* Returns time in milliseconds */
601*c83a76b0SSuyog Pawar     extern UWORD32 osal_get_time(void);
602*c83a76b0SSuyog Pawar 
603*c83a76b0SSuyog Pawar     /* For time in micro-second resolution */
604*c83a76b0SSuyog Pawar     extern WORD32 osal_get_time_usec(UWORD32 *sec, UWORD32 *usec);
605*c83a76b0SSuyog Pawar 
606*c83a76b0SSuyog Pawar     /* Returns the last error code. 0 is no error */
607*c83a76b0SSuyog Pawar     extern UWORD32 osal_get_last_error(void);
608*c83a76b0SSuyog Pawar 
609*c83a76b0SSuyog Pawar     /* Prints the last error code. 0 is no error */
610*c83a76b0SSuyog Pawar     extern void osal_print_last_error(IN const STRWORD8 *string);
611*c83a76b0SSuyog Pawar 
612*c83a76b0SSuyog Pawar     /* Gets the version of library in NULL terminated string form. */
613*c83a76b0SSuyog Pawar     extern WORD8 *osal_get_version(void);
614*c83a76b0SSuyog Pawar 
615*c83a76b0SSuyog Pawar     /* Gets the tid of the thread in whose context this call was made */
616*c83a76b0SSuyog Pawar     extern WORD32 osal_get_current_tid(void);
617*c83a76b0SSuyog Pawar 
618*c83a76b0SSuyog Pawar /* C linkage specifiers for C++ declarations. */
619*c83a76b0SSuyog Pawar #ifdef __cplusplus
620*c83a76b0SSuyog Pawar }
621*c83a76b0SSuyog Pawar #endif /* __cplusplus */
622*c83a76b0SSuyog Pawar 
623*c83a76b0SSuyog Pawar #endif /* OSAL_H */
624