xref: /aosp_15_r20/external/libhevc/encoder/osal_thread.c (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_thread.c                                        */
24*c83a76b0SSuyog Pawar /*                                                                           */
25*c83a76b0SSuyog Pawar /*  Description       : This file contains Thread API's implemented for      */
26*c83a76b0SSuyog Pawar /*                      different platforms.                                 */
27*c83a76b0SSuyog Pawar /*                                                                           */
28*c83a76b0SSuyog Pawar /*  List of Functions : osal_thread_create                                   */
29*c83a76b0SSuyog Pawar /*                      osal_thread_destroy                                  */
30*c83a76b0SSuyog Pawar /*                      osal_func                                            */
31*c83a76b0SSuyog Pawar /*                      osal_set_thread_priority                             */
32*c83a76b0SSuyog Pawar /*                      osal_set_thread_core_affinity                        */
33*c83a76b0SSuyog Pawar /*                      osal_thread_sleep                                    */
34*c83a76b0SSuyog Pawar /*                      osal_thread_yield                                    */
35*c83a76b0SSuyog Pawar /*                      osal_thread_suspend                                  */
36*c83a76b0SSuyog Pawar /*                      osal_thread_resume                                   */
37*c83a76b0SSuyog Pawar /*                      osal_thread_wait                                     */
38*c83a76b0SSuyog Pawar /*                      osal_get_thread_handle                               */
39*c83a76b0SSuyog Pawar /*                      osal_get_time                                        */
40*c83a76b0SSuyog Pawar /*                      osal_get_time_usec                                   */
41*c83a76b0SSuyog Pawar /*                      osal_get_last_error                                  */
42*c83a76b0SSuyog Pawar /*                      osal_print_last_error                                */
43*c83a76b0SSuyog Pawar /*                                                                           */
44*c83a76b0SSuyog Pawar /*  Issues / Problems : None                                                 */
45*c83a76b0SSuyog Pawar /*                                                                           */
46*c83a76b0SSuyog Pawar /*  Revision History  :                                                      */
47*c83a76b0SSuyog Pawar /*                                                                           */
48*c83a76b0SSuyog Pawar /*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
49*c83a76b0SSuyog Pawar /*         06 03 2006   Ittiam          Draft                                */
50*c83a76b0SSuyog Pawar /*                                                                           */
51*c83a76b0SSuyog Pawar /*****************************************************************************/
52*c83a76b0SSuyog Pawar 
53*c83a76b0SSuyog Pawar /*****************************************************************************/
54*c83a76b0SSuyog Pawar /* File Includes                                                             */
55*c83a76b0SSuyog Pawar /*****************************************************************************/
56*c83a76b0SSuyog Pawar 
57*c83a76b0SSuyog Pawar /* System include files */
58*c83a76b0SSuyog Pawar #include <stdio.h>
59*c83a76b0SSuyog Pawar 
60*c83a76b0SSuyog Pawar #include <semaphore.h>
61*c83a76b0SSuyog Pawar #include <pthread.h>
62*c83a76b0SSuyog Pawar #include <errno.h>
63*c83a76b0SSuyog Pawar #include <sys/time.h>
64*c83a76b0SSuyog Pawar #include <sys/resource.h>
65*c83a76b0SSuyog Pawar 
66*c83a76b0SSuyog Pawar #include <unistd.h>
67*c83a76b0SSuyog Pawar #include <math.h>
68*c83a76b0SSuyog Pawar #include <sched.h> /*for CPU_SET, etc.. */
69*c83a76b0SSuyog Pawar #include <linux/unistd.h>
70*c83a76b0SSuyog Pawar #include <sys/syscall.h>
71*c83a76b0SSuyog Pawar 
72*c83a76b0SSuyog Pawar /* User include files */
73*c83a76b0SSuyog Pawar #include "cast_types.h"
74*c83a76b0SSuyog Pawar #include "osal.h"
75*c83a76b0SSuyog Pawar #include "osal_handle.h"
76*c83a76b0SSuyog Pawar #include "osal_thread.h"
77*c83a76b0SSuyog Pawar #include "osal_errno.h"
78*c83a76b0SSuyog Pawar 
79*c83a76b0SSuyog Pawar /*****************************************************************************/
80*c83a76b0SSuyog Pawar /* Static Function Declarations                                              */
81*c83a76b0SSuyog Pawar /*****************************************************************************/
82*c83a76b0SSuyog Pawar 
83*c83a76b0SSuyog Pawar static void osal_func(void *param);
84*c83a76b0SSuyog Pawar 
85*c83a76b0SSuyog Pawar /*****************************************************************************/
86*c83a76b0SSuyog Pawar /*                                                                           */
87*c83a76b0SSuyog Pawar /*  Function Name : osal_thread_create                                       */
88*c83a76b0SSuyog Pawar /*                                                                           */
89*c83a76b0SSuyog Pawar /*  Description   : This function create a new thread.                       */
90*c83a76b0SSuyog Pawar /*                                                                           */
91*c83a76b0SSuyog Pawar /*  Inputs        : OSAL handle                                              */
92*c83a76b0SSuyog Pawar /*                  Memory Manager Handle                                    */
93*c83a76b0SSuyog Pawar /*                  Thread creation attributes                               */
94*c83a76b0SSuyog Pawar /*                                                                           */
95*c83a76b0SSuyog Pawar /*  Globals       : None                                                     */
96*c83a76b0SSuyog Pawar /*                                                                           */
97*c83a76b0SSuyog Pawar /*  Processing    : This function calls OS specific thread create API's and  */
98*c83a76b0SSuyog Pawar /*                  creates a new thread with specified attributes.          */
99*c83a76b0SSuyog Pawar /*                                                                           */
100*c83a76b0SSuyog Pawar /*  Outputs       : Status of thread creation                                */
101*c83a76b0SSuyog Pawar /*                                                                           */
102*c83a76b0SSuyog Pawar /*  Returns       : On SUCCESS - 0                                           */
103*c83a76b0SSuyog Pawar /*                  On FAILURE - -1                                          */
104*c83a76b0SSuyog Pawar /*                                                                           */
105*c83a76b0SSuyog Pawar /*  Issues        : Only supports creating threads with default attributes   */
106*c83a76b0SSuyog Pawar /*                                                                           */
107*c83a76b0SSuyog Pawar /*  Revision History:                                                        */
108*c83a76b0SSuyog Pawar /*                                                                           */
109*c83a76b0SSuyog Pawar /*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
110*c83a76b0SSuyog Pawar /*         06 03 2006   Ittiam          Draft                                */
111*c83a76b0SSuyog Pawar /*                                                                           */
112*c83a76b0SSuyog Pawar /*****************************************************************************/
113*c83a76b0SSuyog Pawar 
osal_thread_create(IN void * osal_handle,IN osal_thread_attr_t * attr)114*c83a76b0SSuyog Pawar void *osal_thread_create(IN void *osal_handle, IN osal_thread_attr_t *attr)
115*c83a76b0SSuyog Pawar {
116*c83a76b0SSuyog Pawar     osal_t *handle = (osal_t *)osal_handle;
117*c83a76b0SSuyog Pawar     WORD32 priority = 0;
118*c83a76b0SSuyog Pawar     void *mmr_handle = 0;
119*c83a76b0SSuyog Pawar 
120*c83a76b0SSuyog Pawar     /* If Handle or attributes are not valid, return ERRORED. */
121*c83a76b0SSuyog Pawar     if(0 == attr)
122*c83a76b0SSuyog Pawar         return 0;
123*c83a76b0SSuyog Pawar 
124*c83a76b0SSuyog Pawar     if(0 == handle || 0 == handle->alloc || 0 == handle->free)
125*c83a76b0SSuyog Pawar         return 0;
126*c83a76b0SSuyog Pawar 
127*c83a76b0SSuyog Pawar     /* Initialize MMR handle */
128*c83a76b0SSuyog Pawar     mmr_handle = handle->mmr_handle;
129*c83a76b0SSuyog Pawar 
130*c83a76b0SSuyog Pawar     {
131*c83a76b0SSuyog Pawar         pthread_attr_t tattr;
132*c83a76b0SSuyog Pawar         thread_handle_t *hdl = 0;
133*c83a76b0SSuyog Pawar 
134*c83a76b0SSuyog Pawar         attr->sched_policy = OSAL_SCHED_RR;
135*c83a76b0SSuyog Pawar 
136*c83a76b0SSuyog Pawar         /* Allocate memory for thread handle */
137*c83a76b0SSuyog Pawar         hdl = handle->alloc(mmr_handle, sizeof(thread_handle_t));
138*c83a76b0SSuyog Pawar         if(0 == hdl)
139*c83a76b0SSuyog Pawar             return 0;
140*c83a76b0SSuyog Pawar 
141*c83a76b0SSuyog Pawar         /* Initialize thread handle parameters */
142*c83a76b0SSuyog Pawar         hdl->mmr_handle = mmr_handle;
143*c83a76b0SSuyog Pawar         hdl->hdl = handle;
144*c83a76b0SSuyog Pawar         hdl->exit_code = attr->exit_code;
145*c83a76b0SSuyog Pawar         hdl->priority = priority;
146*c83a76b0SSuyog Pawar         hdl->thread_func = attr->thread_func;
147*c83a76b0SSuyog Pawar         hdl->thread_param = attr->thread_param;
148*c83a76b0SSuyog Pawar 
149*c83a76b0SSuyog Pawar         /* initialized with default attributes */
150*c83a76b0SSuyog Pawar         if(0 != pthread_attr_init(&tattr))
151*c83a76b0SSuyog Pawar         {
152*c83a76b0SSuyog Pawar             handle->free(hdl->mmr_handle, hdl);
153*c83a76b0SSuyog Pawar             return 0;
154*c83a76b0SSuyog Pawar         }
155*c83a76b0SSuyog Pawar 
156*c83a76b0SSuyog Pawar         /* Create the thread */
157*c83a76b0SSuyog Pawar         hdl->thread_id = pthread_create(
158*c83a76b0SSuyog Pawar             &(hdl->thread_handle), /* Thread Handle   */
159*c83a76b0SSuyog Pawar             &tattr, /* Attributes      */
160*c83a76b0SSuyog Pawar             (void *(*)(void *))osal_func,
161*c83a76b0SSuyog Pawar             hdl); /* Parameters      */
162*c83a76b0SSuyog Pawar 
163*c83a76b0SSuyog Pawar         /* In case of error in thread creationn, Free the handle memory and  */
164*c83a76b0SSuyog Pawar         /* return error.                                                     */
165*c83a76b0SSuyog Pawar         if(0 != hdl->thread_id)
166*c83a76b0SSuyog Pawar         {
167*c83a76b0SSuyog Pawar             handle->free(hdl->mmr_handle, hdl);
168*c83a76b0SSuyog Pawar             return 0;
169*c83a76b0SSuyog Pawar         }
170*c83a76b0SSuyog Pawar 
171*c83a76b0SSuyog Pawar         pthread_attr_destroy(&tattr);
172*c83a76b0SSuyog Pawar 
173*c83a76b0SSuyog Pawar         return hdl;
174*c83a76b0SSuyog Pawar     }
175*c83a76b0SSuyog Pawar }
176*c83a76b0SSuyog Pawar 
177*c83a76b0SSuyog Pawar /*****************************************************************************/
178*c83a76b0SSuyog Pawar /*                                                                           */
179*c83a76b0SSuyog Pawar /*  Function Name : osal_thread_destroy                                      */
180*c83a76b0SSuyog Pawar /*                                                                           */
181*c83a76b0SSuyog Pawar /*  Description   : This function calls OS specific API's to close a thread  */
182*c83a76b0SSuyog Pawar /*                  which is represented by specified handle.                */
183*c83a76b0SSuyog Pawar /*                                                                           */
184*c83a76b0SSuyog Pawar /*  Inputs        : Initialized thread handle                                */
185*c83a76b0SSuyog Pawar /*                                                                           */
186*c83a76b0SSuyog Pawar /*  Globals       : None                                                     */
187*c83a76b0SSuyog Pawar /*                                                                           */
188*c83a76b0SSuyog Pawar /*  Processing    : Closing other threads is supported only in windows. So,  */
189*c83a76b0SSuyog Pawar /*                  only windows platform supports this API.                 */
190*c83a76b0SSuyog Pawar /*                                                                           */
191*c83a76b0SSuyog Pawar /*  Outputs       : Status of thread close                                   */
192*c83a76b0SSuyog Pawar /*                                                                           */
193*c83a76b0SSuyog Pawar /*  Returns       : On SUCCESS - 0                                           */
194*c83a76b0SSuyog Pawar /*                  On FAILURE - -1                                          */
195*c83a76b0SSuyog Pawar /*                                                                           */
196*c83a76b0SSuyog Pawar /*  Issues        : None                                                     */
197*c83a76b0SSuyog Pawar /*                                                                           */
198*c83a76b0SSuyog Pawar /*  Revision History:                                                        */
199*c83a76b0SSuyog Pawar /*                                                                           */
200*c83a76b0SSuyog Pawar /*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
201*c83a76b0SSuyog Pawar /*         06 03 2006   Ittiam          Draft                                */
202*c83a76b0SSuyog Pawar /*                                                                           */
203*c83a76b0SSuyog Pawar /*****************************************************************************/
204*c83a76b0SSuyog Pawar 
osal_thread_destroy(IN void * thread_handle)205*c83a76b0SSuyog Pawar WORD32 osal_thread_destroy(IN void *thread_handle)
206*c83a76b0SSuyog Pawar {
207*c83a76b0SSuyog Pawar     /* If thread handle is not valid, return error */
208*c83a76b0SSuyog Pawar     if(0 == thread_handle)
209*c83a76b0SSuyog Pawar         return OSAL_ERROR;
210*c83a76b0SSuyog Pawar 
211*c83a76b0SSuyog Pawar     {
212*c83a76b0SSuyog Pawar         thread_handle_t *hdl = (thread_handle_t *)thread_handle;
213*c83a76b0SSuyog Pawar 
214*c83a76b0SSuyog Pawar         /* Free memory allocated for Thread handle */
215*c83a76b0SSuyog Pawar         ((osal_t *)hdl->hdl)->free(hdl->mmr_handle, hdl);
216*c83a76b0SSuyog Pawar 
217*c83a76b0SSuyog Pawar         return OSAL_SUCCESS;
218*c83a76b0SSuyog Pawar     }
219*c83a76b0SSuyog Pawar }
220*c83a76b0SSuyog Pawar 
221*c83a76b0SSuyog Pawar /*****************************************************************************/
222*c83a76b0SSuyog Pawar /*                                                                           */
223*c83a76b0SSuyog Pawar /*  Function Name : osal_func                                                */
224*c83a76b0SSuyog Pawar /*                                                                           */
225*c83a76b0SSuyog Pawar /*  Description   : This function calls the registered threads calling       */
226*c83a76b0SSuyog Pawar /*                  function                                                 */
227*c83a76b0SSuyog Pawar /*                                                                           */
228*c83a76b0SSuyog Pawar /*  Inputs        : Thread Handle                                            */
229*c83a76b0SSuyog Pawar /*                                                                           */
230*c83a76b0SSuyog Pawar /*  Globals       : None                                                     */
231*c83a76b0SSuyog Pawar /*                                                                           */
232*c83a76b0SSuyog Pawar /*  Processing    : Calls each registered thread function                    */
233*c83a76b0SSuyog Pawar /*                                                                           */
234*c83a76b0SSuyog Pawar /*  Outputs       : None                                                     */
235*c83a76b0SSuyog Pawar /*  Returns       : None                                                     */
236*c83a76b0SSuyog Pawar /*                                                                           */
237*c83a76b0SSuyog Pawar /*  Issues        : None                                                     */
238*c83a76b0SSuyog Pawar /*                                                                           */
239*c83a76b0SSuyog Pawar /*  Revision History:                                                        */
240*c83a76b0SSuyog Pawar /*                                                                           */
241*c83a76b0SSuyog Pawar /*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
242*c83a76b0SSuyog Pawar /*         10 05 2006   Ittiam          Draft                                */
243*c83a76b0SSuyog Pawar /*                                                                           */
244*c83a76b0SSuyog Pawar /*****************************************************************************/
245*c83a76b0SSuyog Pawar 
osal_func(IN void * param)246*c83a76b0SSuyog Pawar void osal_func(IN void *param)
247*c83a76b0SSuyog Pawar {
248*c83a76b0SSuyog Pawar     thread_handle_t *hdl = (thread_handle_t *)param;
249*c83a76b0SSuyog Pawar 
250*c83a76b0SSuyog Pawar     while(1)
251*c83a76b0SSuyog Pawar     {
252*c83a76b0SSuyog Pawar         /* Untill thread returns exit code, invoke the thread function */
253*c83a76b0SSuyog Pawar         if(hdl->exit_code == hdl->thread_func(hdl->thread_param))
254*c83a76b0SSuyog Pawar             break;
255*c83a76b0SSuyog Pawar     }
256*c83a76b0SSuyog Pawar 
257*c83a76b0SSuyog Pawar     /* On Linux platforms call pthread_exit() to release all the resources   */
258*c83a76b0SSuyog Pawar     /* allocated.                                                            */
259*c83a76b0SSuyog Pawar     pthread_exit(NULL);
260*c83a76b0SSuyog Pawar }
261*c83a76b0SSuyog Pawar 
262*c83a76b0SSuyog Pawar /*****************************************************************************/
263*c83a76b0SSuyog Pawar /*                                                                           */
264*c83a76b0SSuyog Pawar /*  Function Name : osal_thread_sleep                                        */
265*c83a76b0SSuyog Pawar /*                                                                           */
266*c83a76b0SSuyog Pawar /*  Description   : This function calls OS specific API and makes thread     */
267*c83a76b0SSuyog Pawar /*                  sleep for specified number of milli seconds.             */
268*c83a76b0SSuyog Pawar /*                                                                           */
269*c83a76b0SSuyog Pawar /*  Inputs        : Initialized thread handle                                */
270*c83a76b0SSuyog Pawar /*                  Time to sleep in millisceonds                            */
271*c83a76b0SSuyog Pawar /*                                                                           */
272*c83a76b0SSuyog Pawar /*  Globals       : None                                                     */
273*c83a76b0SSuyog Pawar /*                                                                           */
274*c83a76b0SSuyog Pawar /*  Processing    : Calls API to sleep for specified number of milli seconds */
275*c83a76b0SSuyog Pawar /*                                                                           */
276*c83a76b0SSuyog Pawar /*  Outputs       : Status of sleep                                          */
277*c83a76b0SSuyog Pawar /*                                                                           */
278*c83a76b0SSuyog Pawar /*  Returns       : On SUCCESS - 0                                           */
279*c83a76b0SSuyog Pawar /*                  On FAILURE - -1                                          */
280*c83a76b0SSuyog Pawar /*                                                                           */
281*c83a76b0SSuyog Pawar /*  Issues        : None                                                     */
282*c83a76b0SSuyog Pawar /*                                                                           */
283*c83a76b0SSuyog Pawar /*  Revision History:                                                        */
284*c83a76b0SSuyog Pawar /*                                                                           */
285*c83a76b0SSuyog Pawar /*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
286*c83a76b0SSuyog Pawar /*         06 03 2006   Ittiam          Draft                                */
287*c83a76b0SSuyog Pawar /*                                                                           */
288*c83a76b0SSuyog Pawar /*****************************************************************************/
289*c83a76b0SSuyog Pawar 
osal_thread_sleep(IN UWORD32 milli_seconds)290*c83a76b0SSuyog Pawar WORD32 osal_thread_sleep(IN UWORD32 milli_seconds)
291*c83a76b0SSuyog Pawar {
292*c83a76b0SSuyog Pawar     {
293*c83a76b0SSuyog Pawar         struct timespec timer;
294*c83a76b0SSuyog Pawar 
295*c83a76b0SSuyog Pawar         /* Convert time in milliseconds into seconds and nano seconds */
296*c83a76b0SSuyog Pawar         timer.tv_sec = milli_seconds / 1000;
297*c83a76b0SSuyog Pawar         milli_seconds -= (timer.tv_sec * 1000);
298*c83a76b0SSuyog Pawar         timer.tv_nsec = milli_seconds * MEGA_CONST;
299*c83a76b0SSuyog Pawar 
300*c83a76b0SSuyog Pawar         /* Using Monotonic clock to sleep, also flag is set to 0 for relative */
301*c83a76b0SSuyog Pawar         /* time to current clock time                                         */
302*c83a76b0SSuyog Pawar         if(0 == clock_nanosleep(CLOCK_MONOTONIC, 0, &timer, NULL))
303*c83a76b0SSuyog Pawar         {
304*c83a76b0SSuyog Pawar             return OSAL_SUCCESS;
305*c83a76b0SSuyog Pawar         }
306*c83a76b0SSuyog Pawar 
307*c83a76b0SSuyog Pawar         return OSAL_ERROR;
308*c83a76b0SSuyog Pawar     }
309*c83a76b0SSuyog Pawar }
310*c83a76b0SSuyog Pawar 
311*c83a76b0SSuyog Pawar /*****************************************************************************/
312*c83a76b0SSuyog Pawar /*                                                                           */
313*c83a76b0SSuyog Pawar /*  Function Name : osal_thread_yield                                        */
314*c83a76b0SSuyog Pawar /*                                                                           */
315*c83a76b0SSuyog Pawar /*  Description   : This function causes the yield its execution.            */
316*c83a76b0SSuyog Pawar /*                                                                           */
317*c83a76b0SSuyog Pawar /*  Inputs        : Thread Handle                                            */
318*c83a76b0SSuyog Pawar /*                                                                           */
319*c83a76b0SSuyog Pawar /*  Globals       : None                                                     */
320*c83a76b0SSuyog Pawar /*                                                                           */
321*c83a76b0SSuyog Pawar /*  Processing    : Calls OS specific yield calls.                           */
322*c83a76b0SSuyog Pawar /*                                                                           */
323*c83a76b0SSuyog Pawar /*  Outputs       : Status of Thread Yield                                   */
324*c83a76b0SSuyog Pawar /*                                                                           */
325*c83a76b0SSuyog Pawar /*  Returns       : On SUCCESS - 0                                           */
326*c83a76b0SSuyog Pawar /*                  On FAILURE - -1                                          */
327*c83a76b0SSuyog Pawar /*                                                                           */
328*c83a76b0SSuyog Pawar /*  Issues        : Yield in WIN32 (whihc is a 16 - bit API) is still present*/
329*c83a76b0SSuyog Pawar /*                  only to maintian backward compatibility. Can get         */
330*c83a76b0SSuyog Pawar /*                  deprecated in future.                                    */
331*c83a76b0SSuyog Pawar /*                                                                           */
332*c83a76b0SSuyog Pawar /*  Revision History:                                                        */
333*c83a76b0SSuyog Pawar /*                                                                           */
334*c83a76b0SSuyog Pawar /*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
335*c83a76b0SSuyog Pawar /*         06 03 2006   Ittiam          Draft                                */
336*c83a76b0SSuyog Pawar /*                                                                           */
337*c83a76b0SSuyog Pawar /*****************************************************************************/
338*c83a76b0SSuyog Pawar 
osal_thread_yield()339*c83a76b0SSuyog Pawar WORD32 osal_thread_yield()
340*c83a76b0SSuyog Pawar {
341*c83a76b0SSuyog Pawar     if(0 == sched_yield())
342*c83a76b0SSuyog Pawar         return OSAL_SUCCESS;
343*c83a76b0SSuyog Pawar 
344*c83a76b0SSuyog Pawar     return OSAL_ERROR;
345*c83a76b0SSuyog Pawar }
346*c83a76b0SSuyog Pawar 
347*c83a76b0SSuyog Pawar /*****************************************************************************/
348*c83a76b0SSuyog Pawar /*                                                                           */
349*c83a76b0SSuyog Pawar /*  Function Name : osal_thread_suspend                                      */
350*c83a76b0SSuyog Pawar /*                                                                           */
351*c83a76b0SSuyog Pawar /*  Description   : This function causes the suspension its execution.       */
352*c83a76b0SSuyog Pawar /*                                                                           */
353*c83a76b0SSuyog Pawar /*  Inputs        : Thread Handle                                            */
354*c83a76b0SSuyog Pawar /*                                                                           */
355*c83a76b0SSuyog Pawar /*  Globals       : None                                                     */
356*c83a76b0SSuyog Pawar /*                                                                           */
357*c83a76b0SSuyog Pawar /*  Processing    : Calls OS specific suspend calls.                         */
358*c83a76b0SSuyog Pawar /*                                                                           */
359*c83a76b0SSuyog Pawar /*  Outputs       : Status of Thread Suspend                                 */
360*c83a76b0SSuyog Pawar /*                                                                           */
361*c83a76b0SSuyog Pawar /*  Returns       : On SUCCESS - 0                                           */
362*c83a76b0SSuyog Pawar /*                  On FAILURE - -1                                          */
363*c83a76b0SSuyog Pawar /*                                                                           */
364*c83a76b0SSuyog Pawar /*  Issues        : API not supported in Redhat Linux. Refer Redhat          */
365*c83a76b0SSuyog Pawar /*                  documentation in:                                        */
366*c83a76b0SSuyog Pawar /*                  http://www.redhat.com/docs/wp/solaris_port/c1347.html    */
367*c83a76b0SSuyog Pawar /*                                                                           */
368*c83a76b0SSuyog Pawar /*  Revision History:                                                        */
369*c83a76b0SSuyog Pawar /*                                                                           */
370*c83a76b0SSuyog Pawar /*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
371*c83a76b0SSuyog Pawar /*         30 03 2006   Ittiam          Draft                                */
372*c83a76b0SSuyog Pawar /*                                                                           */
373*c83a76b0SSuyog Pawar /*****************************************************************************/
374*c83a76b0SSuyog Pawar 
osal_thread_suspend(IN void * thread_handle)375*c83a76b0SSuyog Pawar WORD32 osal_thread_suspend(IN void *thread_handle)
376*c83a76b0SSuyog Pawar {
377*c83a76b0SSuyog Pawar     /* If thread handle is not valid, return error */
378*c83a76b0SSuyog Pawar     if(0 == thread_handle)
379*c83a76b0SSuyog Pawar         return OSAL_ERROR;
380*c83a76b0SSuyog Pawar 
381*c83a76b0SSuyog Pawar     {
382*c83a76b0SSuyog Pawar         /* Thread suspend are not supported in Redhat Linux. Refer link      */
383*c83a76b0SSuyog Pawar         /* http://www.redhat.com/docs/wp/solaris_port/c1347.html             */
384*c83a76b0SSuyog Pawar 
385*c83a76b0SSuyog Pawar         return OSAL_NOT_SUPPORTED;
386*c83a76b0SSuyog Pawar     }
387*c83a76b0SSuyog Pawar }
388*c83a76b0SSuyog Pawar 
389*c83a76b0SSuyog Pawar /*****************************************************************************/
390*c83a76b0SSuyog Pawar /*                                                                           */
391*c83a76b0SSuyog Pawar /*  Function Name : osal_thread_resume                                       */
392*c83a76b0SSuyog Pawar /*                                                                           */
393*c83a76b0SSuyog Pawar /*  Description   : This function causes the resumption its execution.       */
394*c83a76b0SSuyog Pawar /*                                                                           */
395*c83a76b0SSuyog Pawar /*  Inputs        : Thread Handle                                            */
396*c83a76b0SSuyog Pawar /*                                                                           */
397*c83a76b0SSuyog Pawar /*  Globals       : None                                                     */
398*c83a76b0SSuyog Pawar /*                                                                           */
399*c83a76b0SSuyog Pawar /*  Processing    : Calls OS specific resume calls.                          */
400*c83a76b0SSuyog Pawar /*                                                                           */
401*c83a76b0SSuyog Pawar /*  Outputs       : Status of Thread Suspend                                 */
402*c83a76b0SSuyog Pawar /*                                                                           */
403*c83a76b0SSuyog Pawar /*  Returns       : On SUCCESS - 0                                           */
404*c83a76b0SSuyog Pawar /*                  On FAILURE - -1                                          */
405*c83a76b0SSuyog Pawar /*                                                                           */
406*c83a76b0SSuyog Pawar /*  Issues        : API not supported in Redhat Linux. Refer Redhat          */
407*c83a76b0SSuyog Pawar /*                  documentation in:                                        */
408*c83a76b0SSuyog Pawar /*                  http://www.redhat.com/docs/wp/solaris_port/c1347.html    */
409*c83a76b0SSuyog Pawar /*                                                                           */
410*c83a76b0SSuyog Pawar /*  Revision History:                                                        */
411*c83a76b0SSuyog Pawar /*                                                                           */
412*c83a76b0SSuyog Pawar /*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
413*c83a76b0SSuyog Pawar /*         30 03 2006   Ittiam          Draft                                */
414*c83a76b0SSuyog Pawar /*                                                                           */
415*c83a76b0SSuyog Pawar /*****************************************************************************/
416*c83a76b0SSuyog Pawar 
osal_thread_resume(IN void * thread_handle)417*c83a76b0SSuyog Pawar WORD32 osal_thread_resume(IN void *thread_handle)
418*c83a76b0SSuyog Pawar {
419*c83a76b0SSuyog Pawar     /* If thread handle is not valid, return error */
420*c83a76b0SSuyog Pawar     if(0 == thread_handle)
421*c83a76b0SSuyog Pawar         return OSAL_ERROR;
422*c83a76b0SSuyog Pawar 
423*c83a76b0SSuyog Pawar     {
424*c83a76b0SSuyog Pawar         /* Thread suspend are not supported in Redhat Linux. Refer link      */
425*c83a76b0SSuyog Pawar         /* http://www.redhat.com/docs/wp/solaris_port/c1347.html             */
426*c83a76b0SSuyog Pawar 
427*c83a76b0SSuyog Pawar         return OSAL_NOT_SUPPORTED;
428*c83a76b0SSuyog Pawar     }
429*c83a76b0SSuyog Pawar }
430*c83a76b0SSuyog Pawar 
431*c83a76b0SSuyog Pawar /*****************************************************************************/
432*c83a76b0SSuyog Pawar /*                                                                           */
433*c83a76b0SSuyog Pawar /*  Function Name : osal_thread_wait                                         */
434*c83a76b0SSuyog Pawar /*                                                                           */
435*c83a76b0SSuyog Pawar /*  Description   : This function causes the wait untill called thread       */
436*c83a76b0SSuyog Pawar /*                  finishes execution                                       */
437*c83a76b0SSuyog Pawar /*                                                                           */
438*c83a76b0SSuyog Pawar /*  Inputs        : Thread Handle                                            */
439*c83a76b0SSuyog Pawar /*                                                                           */
440*c83a76b0SSuyog Pawar /*  Globals       : None                                                     */
441*c83a76b0SSuyog Pawar /*                                                                           */
442*c83a76b0SSuyog Pawar /*  Processing    : Calls OS specific wait call for wait on another thread   */
443*c83a76b0SSuyog Pawar /*                                                                           */
444*c83a76b0SSuyog Pawar /*  Outputs       : Status of Thread wait                                    */
445*c83a76b0SSuyog Pawar /*                                                                           */
446*c83a76b0SSuyog Pawar /*  Returns       : On SUCCESS - 0                                           */
447*c83a76b0SSuyog Pawar /*                  On FAILURE - -1                                          */
448*c83a76b0SSuyog Pawar /*                                                                           */
449*c83a76b0SSuyog Pawar /*  Issues        : None                                                     */
450*c83a76b0SSuyog Pawar /*                                                                           */
451*c83a76b0SSuyog Pawar /*  Revision History:                                                        */
452*c83a76b0SSuyog Pawar /*                                                                           */
453*c83a76b0SSuyog Pawar /*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
454*c83a76b0SSuyog Pawar /*         30 03 2006   Ittiam          Draft                                */
455*c83a76b0SSuyog Pawar /*                                                                           */
456*c83a76b0SSuyog Pawar /*****************************************************************************/
457*c83a76b0SSuyog Pawar 
osal_thread_wait(IN void * thread_handle)458*c83a76b0SSuyog Pawar WORD32 osal_thread_wait(IN void *thread_handle)
459*c83a76b0SSuyog Pawar {
460*c83a76b0SSuyog Pawar     if(0 == thread_handle)
461*c83a76b0SSuyog Pawar         return OSAL_ERROR;
462*c83a76b0SSuyog Pawar 
463*c83a76b0SSuyog Pawar     {
464*c83a76b0SSuyog Pawar         WORD32 result = 0;
465*c83a76b0SSuyog Pawar         void *status = 0;
466*c83a76b0SSuyog Pawar 
467*c83a76b0SSuyog Pawar         thread_handle_t *hdl = (thread_handle_t *)thread_handle;
468*c83a76b0SSuyog Pawar 
469*c83a76b0SSuyog Pawar         /* Join the thread to wait for thread to complete execution */
470*c83a76b0SSuyog Pawar         result = pthread_join(hdl->thread_handle, (void **)&status);
471*c83a76b0SSuyog Pawar 
472*c83a76b0SSuyog Pawar         return result;
473*c83a76b0SSuyog Pawar     }
474*c83a76b0SSuyog Pawar }
475*c83a76b0SSuyog Pawar 
476*c83a76b0SSuyog Pawar /*****************************************************************************/
477*c83a76b0SSuyog Pawar /*                                                                           */
478*c83a76b0SSuyog Pawar /*  Function Name : osal_get_thread_handle                                   */
479*c83a76b0SSuyog Pawar /*                                                                           */
480*c83a76b0SSuyog Pawar /*  Description   : This function gets current thread handle. Currently not  */
481*c83a76b0SSuyog Pawar /*                  supported                                                */
482*c83a76b0SSuyog Pawar /*                                                                           */
483*c83a76b0SSuyog Pawar /*  Inputs        : OSAL handle.                                             */
484*c83a76b0SSuyog Pawar /*                                                                           */
485*c83a76b0SSuyog Pawar /*  Globals       : None                                                     */
486*c83a76b0SSuyog Pawar /*                                                                           */
487*c83a76b0SSuyog Pawar /*  Processing    : Gets all the thread properities and constructs a new     */
488*c83a76b0SSuyog Pawar /*                  thread handle .                                          */
489*c83a76b0SSuyog Pawar /*                                                                           */
490*c83a76b0SSuyog Pawar /*  Outputs       : Thread handle to current thread.                         */
491*c83a76b0SSuyog Pawar /*                                                                           */
492*c83a76b0SSuyog Pawar /*  Returns       : On SUCCESS - Current thread handle                       */
493*c83a76b0SSuyog Pawar /*                  On FAILURE - NULL                                        */
494*c83a76b0SSuyog Pawar /*                                                                           */
495*c83a76b0SSuyog Pawar /*  Issues        : Not supported on Linux and BIOS platforms.               */
496*c83a76b0SSuyog Pawar /*                                                                           */
497*c83a76b0SSuyog Pawar /*  Revision History:                                                        */
498*c83a76b0SSuyog Pawar /*                                                                           */
499*c83a76b0SSuyog Pawar /*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
500*c83a76b0SSuyog Pawar /*         10 05 2006   Ittiam          Draft                                */
501*c83a76b0SSuyog Pawar /*                                                                           */
502*c83a76b0SSuyog Pawar /*****************************************************************************/
503*c83a76b0SSuyog Pawar 
osal_get_thread_handle(IN void * osal_handle)504*c83a76b0SSuyog Pawar void *osal_get_thread_handle(IN void *osal_handle)
505*c83a76b0SSuyog Pawar {
506*c83a76b0SSuyog Pawar     osal_t *handle = (osal_t *)osal_handle;
507*c83a76b0SSuyog Pawar 
508*c83a76b0SSuyog Pawar     if(0 == osal_handle)
509*c83a76b0SSuyog Pawar         return 0;
510*c83a76b0SSuyog Pawar 
511*c83a76b0SSuyog Pawar     {
512*c83a76b0SSuyog Pawar         thread_handle_t *hdl = handle->alloc(handle->mmr_handle, sizeof(thread_handle_t));
513*c83a76b0SSuyog Pawar         WORD32 schedpolicy;
514*c83a76b0SSuyog Pawar         struct sched_param schedparam;
515*c83a76b0SSuyog Pawar 
516*c83a76b0SSuyog Pawar         if(0 == hdl)
517*c83a76b0SSuyog Pawar             return 0;
518*c83a76b0SSuyog Pawar 
519*c83a76b0SSuyog Pawar         hdl->mmr_handle = handle->mmr_handle;
520*c83a76b0SSuyog Pawar         hdl->hdl = handle;
521*c83a76b0SSuyog Pawar         hdl->exit_code = 0;
522*c83a76b0SSuyog Pawar         hdl->thread_func = 0;
523*c83a76b0SSuyog Pawar         hdl->thread_param = 0;
524*c83a76b0SSuyog Pawar         hdl->thread_handle = pthread_self();
525*c83a76b0SSuyog Pawar         hdl->thread_id = 0;
526*c83a76b0SSuyog Pawar         hdl->priority = schedparam.sched_priority;
527*c83a76b0SSuyog Pawar 
528*c83a76b0SSuyog Pawar         /* Get thread priority from scheduling parameters */
529*c83a76b0SSuyog Pawar         if(0 != pthread_getschedparam(hdl->thread_handle, &schedpolicy, &schedparam))
530*c83a76b0SSuyog Pawar         {
531*c83a76b0SSuyog Pawar             return 0;
532*c83a76b0SSuyog Pawar         }
533*c83a76b0SSuyog Pawar 
534*c83a76b0SSuyog Pawar         return hdl;
535*c83a76b0SSuyog Pawar     }
536*c83a76b0SSuyog Pawar }
537*c83a76b0SSuyog Pawar 
538*c83a76b0SSuyog Pawar /*****************************************************************************/
539*c83a76b0SSuyog Pawar /*                                                                           */
540*c83a76b0SSuyog Pawar /*  Function Name : osal_get_time                                            */
541*c83a76b0SSuyog Pawar /*                                                                           */
542*c83a76b0SSuyog Pawar /*  Description   : This function returns absolute time in milli seconds     */
543*c83a76b0SSuyog Pawar /*                                                                           */
544*c83a76b0SSuyog Pawar /*  Inputs        : None                                                     */
545*c83a76b0SSuyog Pawar /*  Globals       : None                                                     */
546*c83a76b0SSuyog Pawar /*                                                                           */
547*c83a76b0SSuyog Pawar /*  Processing    : Gets the absolute time by calling OS specific API's.     */
548*c83a76b0SSuyog Pawar /*                                                                           */
549*c83a76b0SSuyog Pawar /*  Outputs       : Absolute time in milli seconds.                          */
550*c83a76b0SSuyog Pawar /*                                                                           */
551*c83a76b0SSuyog Pawar /*  Returns       : +ve 32 bit value                                         */
552*c83a76b0SSuyog Pawar /*                                                                           */
553*c83a76b0SSuyog Pawar /*  Issues        : None                                                     */
554*c83a76b0SSuyog Pawar /*                                                                           */
555*c83a76b0SSuyog Pawar /*  Revision History:                                                        */
556*c83a76b0SSuyog Pawar /*                                                                           */
557*c83a76b0SSuyog Pawar /*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
558*c83a76b0SSuyog Pawar /*         06 03 2006   Ittiam          Draft                                */
559*c83a76b0SSuyog Pawar /*                                                                           */
560*c83a76b0SSuyog Pawar /*****************************************************************************/
561*c83a76b0SSuyog Pawar 
osal_get_time()562*c83a76b0SSuyog Pawar UWORD32 osal_get_time()
563*c83a76b0SSuyog Pawar {
564*c83a76b0SSuyog Pawar     {
565*c83a76b0SSuyog Pawar         struct timespec time_val;
566*c83a76b0SSuyog Pawar         int cur_time;
567*c83a76b0SSuyog Pawar 
568*c83a76b0SSuyog Pawar         /* Get the Monotonic time */
569*c83a76b0SSuyog Pawar         clock_gettime(CLOCK_MONOTONIC, &time_val);
570*c83a76b0SSuyog Pawar 
571*c83a76b0SSuyog Pawar         /* Convert time in seconds and micro seconds into milliseconds time */
572*c83a76b0SSuyog Pawar         cur_time = time_val.tv_sec * 1000 + time_val.tv_nsec / 1000000;
573*c83a76b0SSuyog Pawar         return cur_time;
574*c83a76b0SSuyog Pawar     }
575*c83a76b0SSuyog Pawar }
576*c83a76b0SSuyog Pawar 
577*c83a76b0SSuyog Pawar /*****************************************************************************/
578*c83a76b0SSuyog Pawar /*                                                                           */
579*c83a76b0SSuyog Pawar /*  Function Name : osal_get_time_usec                                       */
580*c83a76b0SSuyog Pawar /*                                                                           */
581*c83a76b0SSuyog Pawar /*  Description   : This function returns absolute time in micro seconds     */
582*c83a76b0SSuyog Pawar /*                                                                           */
583*c83a76b0SSuyog Pawar /*  Inputs        : None                                                     */
584*c83a76b0SSuyog Pawar /*  Globals       : None                                                     */
585*c83a76b0SSuyog Pawar /*                                                                           */
586*c83a76b0SSuyog Pawar /*  Processing    : Gets the absolute time by calling OS specific API's.     */
587*c83a76b0SSuyog Pawar /*                                                                           */
588*c83a76b0SSuyog Pawar /*  Outputs       : Absolute time in micro seconds.                          */
589*c83a76b0SSuyog Pawar /*                                                                           */
590*c83a76b0SSuyog Pawar /*  Returns       : +ve 32 bit value                                         */
591*c83a76b0SSuyog Pawar /*                                                                           */
592*c83a76b0SSuyog Pawar /*  Issues        : None                                                     */
593*c83a76b0SSuyog Pawar /*                                                                           */
594*c83a76b0SSuyog Pawar /*  Revision History:                                                        */
595*c83a76b0SSuyog Pawar /*                                                                           */
596*c83a76b0SSuyog Pawar /*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
597*c83a76b0SSuyog Pawar /*         06 03 2009   Ittiam          Draft                                */
598*c83a76b0SSuyog Pawar /*                                                                           */
599*c83a76b0SSuyog Pawar /*****************************************************************************/
600*c83a76b0SSuyog Pawar 
osal_get_time_usec(UWORD32 * sec,UWORD32 * usec)601*c83a76b0SSuyog Pawar WORD32 osal_get_time_usec(UWORD32 *sec, UWORD32 *usec)
602*c83a76b0SSuyog Pawar {
603*c83a76b0SSuyog Pawar     if((0 == sec) || (0 == usec))
604*c83a76b0SSuyog Pawar         return OSAL_ERROR;
605*c83a76b0SSuyog Pawar 
606*c83a76b0SSuyog Pawar     {
607*c83a76b0SSuyog Pawar         struct timespec time_val;
608*c83a76b0SSuyog Pawar 
609*c83a76b0SSuyog Pawar         /* Get the Monotonic time */
610*c83a76b0SSuyog Pawar         clock_gettime(CLOCK_MONOTONIC, &time_val);
611*c83a76b0SSuyog Pawar 
612*c83a76b0SSuyog Pawar         /* Convert time in seconds and micro seconds into milliseconds time */
613*c83a76b0SSuyog Pawar         *sec = time_val.tv_sec;
614*c83a76b0SSuyog Pawar         *usec = time_val.tv_nsec / 1000;
615*c83a76b0SSuyog Pawar 
616*c83a76b0SSuyog Pawar         return OSAL_SUCCESS;
617*c83a76b0SSuyog Pawar     }
618*c83a76b0SSuyog Pawar }
619*c83a76b0SSuyog Pawar 
620*c83a76b0SSuyog Pawar /*****************************************************************************/
621*c83a76b0SSuyog Pawar /*                                                                           */
622*c83a76b0SSuyog Pawar /*  Function Name : osal_get_last_error                                      */
623*c83a76b0SSuyog Pawar /*                                                                           */
624*c83a76b0SSuyog Pawar /*  Description   : This function gets the last error code.                  */
625*c83a76b0SSuyog Pawar /*                                                                           */
626*c83a76b0SSuyog Pawar /*  Inputs        : None                                                     */
627*c83a76b0SSuyog Pawar /*  Globals       : None                                                     */
628*c83a76b0SSuyog Pawar /*                                                                           */
629*c83a76b0SSuyog Pawar /*  Processing    : Gets the last occured error code by calling OS specific  */
630*c83a76b0SSuyog Pawar /*                  API call.                                                */
631*c83a76b0SSuyog Pawar /*                                                                           */
632*c83a76b0SSuyog Pawar /*  Outputs       : Error Number                                             */
633*c83a76b0SSuyog Pawar /*                                                                           */
634*c83a76b0SSuyog Pawar /*  Returns       : If no error - 0                                          */
635*c83a76b0SSuyog Pawar /*                  Else        - +ve number                                 */
636*c83a76b0SSuyog Pawar /*                                                                           */
637*c83a76b0SSuyog Pawar /*  Issues        : None                                                     */
638*c83a76b0SSuyog Pawar /*                                                                           */
639*c83a76b0SSuyog Pawar /*  Revision History:                                                        */
640*c83a76b0SSuyog Pawar /*                                                                           */
641*c83a76b0SSuyog Pawar /*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
642*c83a76b0SSuyog Pawar /*         06 03 2006   Ittiam          Draft                                */
643*c83a76b0SSuyog Pawar /*                                                                           */
644*c83a76b0SSuyog Pawar /*****************************************************************************/
645*c83a76b0SSuyog Pawar 
osal_get_last_error()646*c83a76b0SSuyog Pawar UWORD32 osal_get_last_error()
647*c83a76b0SSuyog Pawar {
648*c83a76b0SSuyog Pawar     UWORD32 get_linux_error(void);
649*c83a76b0SSuyog Pawar     return get_linux_error();
650*c83a76b0SSuyog Pawar }
651*c83a76b0SSuyog Pawar 
652*c83a76b0SSuyog Pawar /*****************************************************************************/
653*c83a76b0SSuyog Pawar /*                                                                           */
654*c83a76b0SSuyog Pawar /*  Function Name : osal_print_last_error                                    */
655*c83a76b0SSuyog Pawar /*                                                                           */
656*c83a76b0SSuyog Pawar /*  Description   : This function prints the last error message.             */
657*c83a76b0SSuyog Pawar /*                                                                           */
658*c83a76b0SSuyog Pawar /*  Inputs        : None                                                     */
659*c83a76b0SSuyog Pawar /*  Globals       : None                                                     */
660*c83a76b0SSuyog Pawar /*                                                                           */
661*c83a76b0SSuyog Pawar /*  Processing    : Gets the last occured error code by calling OS specific  */
662*c83a76b0SSuyog Pawar /*                  API call. It prints argument string (if not NULL),       */
663*c83a76b0SSuyog Pawar /*                  followed by ': ' then the error_string and <new_line>.   */
664*c83a76b0SSuyog Pawar /*                                                                           */
665*c83a76b0SSuyog Pawar /*  Outputs       : None                                                     */
666*c83a76b0SSuyog Pawar /*                                                                           */
667*c83a76b0SSuyog Pawar /*  Returns       : None                                                     */
668*c83a76b0SSuyog Pawar /*                                                                           */
669*c83a76b0SSuyog Pawar /*  Issues        : None                                                     */
670*c83a76b0SSuyog Pawar /*                                                                           */
671*c83a76b0SSuyog Pawar /*  Revision History:                                                        */
672*c83a76b0SSuyog Pawar /*                                                                           */
673*c83a76b0SSuyog Pawar /*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
674*c83a76b0SSuyog Pawar /*         10 03 2006   Ittiam          Draft                                */
675*c83a76b0SSuyog Pawar /*                                                                           */
676*c83a76b0SSuyog Pawar /*****************************************************************************/
677*c83a76b0SSuyog Pawar 
osal_print_last_error(IN const STRWORD8 * string)678*c83a76b0SSuyog Pawar void osal_print_last_error(IN const STRWORD8 *string)
679*c83a76b0SSuyog Pawar {
680*c83a76b0SSuyog Pawar     perror(string);
681*c83a76b0SSuyog Pawar }
682*c83a76b0SSuyog Pawar 
683*c83a76b0SSuyog Pawar /*****************************************************************************/
684*c83a76b0SSuyog Pawar /*                                                                           */
685*c83a76b0SSuyog Pawar /*  Function Name : osal_get_current_tid                                     */
686*c83a76b0SSuyog Pawar /*                                                                           */
687*c83a76b0SSuyog Pawar /*  Description   : Gets the tid of the thread in whose context this call    */
688*c83a76b0SSuyog Pawar /*                  was made                                                 */
689*c83a76b0SSuyog Pawar /*                                                                           */
690*c83a76b0SSuyog Pawar /*  Inputs        : None                                                     */
691*c83a76b0SSuyog Pawar /*  Globals       : None                                                     */
692*c83a76b0SSuyog Pawar /*  Processing    : None                                                     */
693*c83a76b0SSuyog Pawar /*  Outputs       : None                                                     */
694*c83a76b0SSuyog Pawar /*  Returns       : Thread ID, as a WORD32                                   */
695*c83a76b0SSuyog Pawar /*  Issues        : None                                                     */
696*c83a76b0SSuyog Pawar /*                                                                           */
697*c83a76b0SSuyog Pawar /*  Revision History:                                                        */
698*c83a76b0SSuyog Pawar /*                                                                           */
699*c83a76b0SSuyog Pawar /*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
700*c83a76b0SSuyog Pawar /*         07 05 2015   Ittiam          Draft                                */
701*c83a76b0SSuyog Pawar /*                                                                           */
702*c83a76b0SSuyog Pawar /*****************************************************************************/
703*c83a76b0SSuyog Pawar 
osal_get_current_tid(void)704*c83a76b0SSuyog Pawar WORD32 osal_get_current_tid(void)
705*c83a76b0SSuyog Pawar {
706*c83a76b0SSuyog Pawar     return syscall(__NR_gettid);
707*c83a76b0SSuyog Pawar }
708