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