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