xref: /aosp_15_r20/external/libhevc/encoder/osal_semaphore.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_semaphore.c                                     */
24*c83a76b0SSuyog Pawar /*                                                                           */
25*c83a76b0SSuyog Pawar /*  Description       : This file contains all the necessary function        */
26*c83a76b0SSuyog Pawar /*                      definitions required to operate on semaphore         */
27*c83a76b0SSuyog Pawar /*                                                                           */
28*c83a76b0SSuyog Pawar /*  List of Functions : osal_sem_create                                      */
29*c83a76b0SSuyog Pawar /*                      osal_sem_destroy                                     */
30*c83a76b0SSuyog Pawar /*                      osal_sem_wait                                        */
31*c83a76b0SSuyog Pawar /*                      osal_sem_wait_timed                                  */
32*c83a76b0SSuyog Pawar /*                      osal_sem_post                                        */
33*c83a76b0SSuyog Pawar /*                      osal_sem_count                                       */
34*c83a76b0SSuyog Pawar /*                      query_semaphore                                      */
35*c83a76b0SSuyog Pawar /*                                                                           */
36*c83a76b0SSuyog Pawar /*  Issues / Problems : None                                                 */
37*c83a76b0SSuyog Pawar /*                                                                           */
38*c83a76b0SSuyog Pawar /*  Revision History  :                                                      */
39*c83a76b0SSuyog Pawar /*                                                                           */
40*c83a76b0SSuyog Pawar /*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
41*c83a76b0SSuyog Pawar /*         07 03 2006   Ittiam          Draft                                */
42*c83a76b0SSuyog Pawar /*                                                                           */
43*c83a76b0SSuyog Pawar /*****************************************************************************/
44*c83a76b0SSuyog Pawar 
45*c83a76b0SSuyog Pawar /*****************************************************************************/
46*c83a76b0SSuyog Pawar /* File Includes                                                             */
47*c83a76b0SSuyog Pawar /*****************************************************************************/
48*c83a76b0SSuyog Pawar 
49*c83a76b0SSuyog Pawar /* System include files */
50*c83a76b0SSuyog Pawar #include <stdio.h>
51*c83a76b0SSuyog Pawar 
52*c83a76b0SSuyog Pawar #include <semaphore.h>
53*c83a76b0SSuyog Pawar #include <errno.h>
54*c83a76b0SSuyog Pawar 
55*c83a76b0SSuyog Pawar /* User include files */
56*c83a76b0SSuyog Pawar #include "cast_types.h"
57*c83a76b0SSuyog Pawar #include "osal.h"
58*c83a76b0SSuyog Pawar #include "osal_handle.h"
59*c83a76b0SSuyog Pawar #include "osal_semaphore.h"
60*c83a76b0SSuyog Pawar 
61*c83a76b0SSuyog Pawar /*****************************************************************************/
62*c83a76b0SSuyog Pawar /* Static Function Declarations                                              */
63*c83a76b0SSuyog Pawar /*****************************************************************************/
64*c83a76b0SSuyog Pawar 
65*c83a76b0SSuyog Pawar /*****************************************************************************/
66*c83a76b0SSuyog Pawar /*                                                                           */
67*c83a76b0SSuyog Pawar /*  Function Name : osal_sem_create                                          */
68*c83a76b0SSuyog Pawar /*                                                                           */
69*c83a76b0SSuyog Pawar /*  Description   : This function creates the semaphore and returns the      */
70*c83a76b0SSuyog Pawar /*                  handle to the user.                                      */
71*c83a76b0SSuyog Pawar /*                                                                           */
72*c83a76b0SSuyog Pawar /*  Inputs        : Memory manager hamdle                                    */
73*c83a76b0SSuyog Pawar /*                  Attributes to sempahore handle                           */
74*c83a76b0SSuyog Pawar /*                                                                           */
75*c83a76b0SSuyog Pawar /*  Globals       : None                                                     */
76*c83a76b0SSuyog Pawar /*                                                                           */
77*c83a76b0SSuyog Pawar /*  Processing    : Allocates memory for handle and creates the semaphore    */
78*c83a76b0SSuyog Pawar /*                  with specified initialized value by calling OS specific  */
79*c83a76b0SSuyog Pawar /*                  API's.                                                   */
80*c83a76b0SSuyog Pawar /*                                                                           */
81*c83a76b0SSuyog Pawar /*  Outputs       : Semaphore handle                                         */
82*c83a76b0SSuyog Pawar /*                                                                           */
83*c83a76b0SSuyog Pawar /*  Returns       : On SUCCESS - Semaphore handle                            */
84*c83a76b0SSuyog Pawar /*                  On FAILURE - NULL                                        */
85*c83a76b0SSuyog Pawar /*                                                                           */
86*c83a76b0SSuyog Pawar /*  Issues        : None                                                     */
87*c83a76b0SSuyog Pawar /*                                                                           */
88*c83a76b0SSuyog Pawar /*  Revision History:                                                        */
89*c83a76b0SSuyog Pawar /*                                                                           */
90*c83a76b0SSuyog Pawar /*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
91*c83a76b0SSuyog Pawar /*         07 03 2006   Ittiam          Draft                                */
92*c83a76b0SSuyog Pawar /*                                                                           */
93*c83a76b0SSuyog Pawar /*****************************************************************************/
94*c83a76b0SSuyog Pawar 
osal_sem_create(IN void * osal_handle,IN osal_sem_attr_t * attr)95*c83a76b0SSuyog Pawar void *osal_sem_create(IN void *osal_handle, IN osal_sem_attr_t *attr)
96*c83a76b0SSuyog Pawar {
97*c83a76b0SSuyog Pawar     osal_t *handle = (osal_t *)osal_handle;
98*c83a76b0SSuyog Pawar     void *mmr_handle = 0;
99*c83a76b0SSuyog Pawar 
100*c83a76b0SSuyog Pawar     if(0 == handle || 0 == handle->alloc || 0 == handle->free)
101*c83a76b0SSuyog Pawar         return 0;
102*c83a76b0SSuyog Pawar 
103*c83a76b0SSuyog Pawar     /* Initialize MMR handle */
104*c83a76b0SSuyog Pawar     mmr_handle = handle->mmr_handle;
105*c83a76b0SSuyog Pawar 
106*c83a76b0SSuyog Pawar     if(0 == attr)
107*c83a76b0SSuyog Pawar         return 0;
108*c83a76b0SSuyog Pawar 
109*c83a76b0SSuyog Pawar     /* Currenlty naming semaphores is not supported */
110*c83a76b0SSuyog Pawar     {
111*c83a76b0SSuyog Pawar         /* Allocate memory for the sempahore handle */
112*c83a76b0SSuyog Pawar         sem_handle_t *sem_handle = handle->alloc(mmr_handle, sizeof(sem_handle_t));
113*c83a76b0SSuyog Pawar 
114*c83a76b0SSuyog Pawar         if(0 == sem_handle)
115*c83a76b0SSuyog Pawar             return 0;
116*c83a76b0SSuyog Pawar 
117*c83a76b0SSuyog Pawar         /* Initialize Semaphore handle parameters */
118*c83a76b0SSuyog Pawar         sem_handle->mmr_handle = mmr_handle;
119*c83a76b0SSuyog Pawar         sem_handle->hdl = handle;
120*c83a76b0SSuyog Pawar 
121*c83a76b0SSuyog Pawar         /* Create a sempahore */
122*c83a76b0SSuyog Pawar         if(-1 == sem_init(
123*c83a76b0SSuyog Pawar                      &(sem_handle->sem_handle), /* Semaphore handle     */
124*c83a76b0SSuyog Pawar                      0, /* Shared only between threads */
125*c83a76b0SSuyog Pawar                      attr->value)) /* Initialize value.           */
126*c83a76b0SSuyog Pawar         {
127*c83a76b0SSuyog Pawar             handle->free(sem_handle->mmr_handle, sem_handle);
128*c83a76b0SSuyog Pawar             return 0;
129*c83a76b0SSuyog Pawar         }
130*c83a76b0SSuyog Pawar 
131*c83a76b0SSuyog Pawar         return sem_handle;
132*c83a76b0SSuyog Pawar     }
133*c83a76b0SSuyog Pawar }
134*c83a76b0SSuyog Pawar 
135*c83a76b0SSuyog Pawar /*****************************************************************************/
136*c83a76b0SSuyog Pawar /*                                                                           */
137*c83a76b0SSuyog Pawar /*  Function Name : osal_sem_destroy                                         */
138*c83a76b0SSuyog Pawar /*                                                                           */
139*c83a76b0SSuyog Pawar /*  Description   : This function closes the opened semaphore                */
140*c83a76b0SSuyog Pawar /*                                                                           */
141*c83a76b0SSuyog Pawar /*  Inputs        : Initialized Semaphore handle.                            */
142*c83a76b0SSuyog Pawar /*                                                                           */
143*c83a76b0SSuyog Pawar /*  Globals       : None                                                     */
144*c83a76b0SSuyog Pawar /*                                                                           */
145*c83a76b0SSuyog Pawar /*  Processing    : Calls OS specific API's to close the semaphore.          */
146*c83a76b0SSuyog Pawar /*                                                                           */
147*c83a76b0SSuyog Pawar /*  Outputs       : Status of Semaphore close                                */
148*c83a76b0SSuyog Pawar /*                                                                           */
149*c83a76b0SSuyog Pawar /*  Returns       : On SUCCESS - 0                                           */
150*c83a76b0SSuyog Pawar /*                  On FAILURE - -1                                          */
151*c83a76b0SSuyog Pawar /*                                                                           */
152*c83a76b0SSuyog Pawar /*  Issues        : None                                                     */
153*c83a76b0SSuyog Pawar /*                                                                           */
154*c83a76b0SSuyog Pawar /*  Revision History:                                                        */
155*c83a76b0SSuyog Pawar /*                                                                           */
156*c83a76b0SSuyog Pawar /*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
157*c83a76b0SSuyog Pawar /*         07 03 2006   Ittiam          Draft                                */
158*c83a76b0SSuyog Pawar /*                                                                           */
159*c83a76b0SSuyog Pawar /*****************************************************************************/
160*c83a76b0SSuyog Pawar 
osal_sem_destroy(IN void * sem_handle)161*c83a76b0SSuyog Pawar WORD32 osal_sem_destroy(IN void *sem_handle)
162*c83a76b0SSuyog Pawar {
163*c83a76b0SSuyog Pawar     if(0 == sem_handle)
164*c83a76b0SSuyog Pawar         return OSAL_ERROR;
165*c83a76b0SSuyog Pawar 
166*c83a76b0SSuyog Pawar     {
167*c83a76b0SSuyog Pawar         sem_handle_t *handle = (sem_handle_t *)sem_handle;
168*c83a76b0SSuyog Pawar 
169*c83a76b0SSuyog Pawar         /* Validate OSAL handle */
170*c83a76b0SSuyog Pawar         if(0 == handle->hdl || 0 == handle->hdl->free)
171*c83a76b0SSuyog Pawar             return OSAL_ERROR;
172*c83a76b0SSuyog Pawar 
173*c83a76b0SSuyog Pawar         /* Destroy the semaphore */
174*c83a76b0SSuyog Pawar         if(0 == sem_destroy(&(handle->sem_handle)))
175*c83a76b0SSuyog Pawar         {
176*c83a76b0SSuyog Pawar             handle->hdl->free(handle->mmr_handle, handle);
177*c83a76b0SSuyog Pawar             return OSAL_SUCCESS;
178*c83a76b0SSuyog Pawar         }
179*c83a76b0SSuyog Pawar 
180*c83a76b0SSuyog Pawar         return OSAL_ERROR;
181*c83a76b0SSuyog Pawar     }
182*c83a76b0SSuyog Pawar }
183*c83a76b0SSuyog Pawar 
184*c83a76b0SSuyog Pawar /*****************************************************************************/
185*c83a76b0SSuyog Pawar /*                                                                           */
186*c83a76b0SSuyog Pawar /*  Function Name : osal_sem_wait                                            */
187*c83a76b0SSuyog Pawar /*                                                                           */
188*c83a76b0SSuyog Pawar /*  Description   : This function waits for semaphore to be unlocked and     */
189*c83a76b0SSuyog Pawar /*                  then locks the semaphore and control returns back.       */
190*c83a76b0SSuyog Pawar /*                                                                           */
191*c83a76b0SSuyog Pawar /*  Inputs        : Initialized Semaphore handle                             */
192*c83a76b0SSuyog Pawar /*                                                                           */
193*c83a76b0SSuyog Pawar /*  Globals       : None                                                     */
194*c83a76b0SSuyog Pawar /*                                                                           */
195*c83a76b0SSuyog Pawar /*  Processing    : This fucntion calls blocking semaphore lock API's which  */
196*c83a76b0SSuyog Pawar /*                  block the caller till semaphore is locked by them or a   */
197*c83a76b0SSuyog Pawar /*                  signal occurs which results in API function failure      */
198*c83a76b0SSuyog Pawar /*                                                                           */
199*c83a76b0SSuyog Pawar /*  Outputs       : Status of Semaphore wait                                 */
200*c83a76b0SSuyog Pawar /*                                                                           */
201*c83a76b0SSuyog Pawar /*  Returns       : On SUCCESS - 0                                           */
202*c83a76b0SSuyog Pawar /*                  On FAILURE - -1                                          */
203*c83a76b0SSuyog Pawar /*                                                                           */
204*c83a76b0SSuyog Pawar /*  Issues        : None                                                     */
205*c83a76b0SSuyog Pawar /*                                                                           */
206*c83a76b0SSuyog Pawar /*  Revision History:                                                        */
207*c83a76b0SSuyog Pawar /*                                                                           */
208*c83a76b0SSuyog Pawar /*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
209*c83a76b0SSuyog Pawar /*         07 03 2006   Ittiam          Draft                                */
210*c83a76b0SSuyog Pawar /*                                                                           */
211*c83a76b0SSuyog Pawar /*****************************************************************************/
212*c83a76b0SSuyog Pawar 
osal_sem_wait(IN void * sem_handle)213*c83a76b0SSuyog Pawar WORD32 osal_sem_wait(IN void *sem_handle)
214*c83a76b0SSuyog Pawar {
215*c83a76b0SSuyog Pawar     if(0 == sem_handle)
216*c83a76b0SSuyog Pawar         return OSAL_ERROR;
217*c83a76b0SSuyog Pawar 
218*c83a76b0SSuyog Pawar     {
219*c83a76b0SSuyog Pawar         sem_handle_t *handle = (sem_handle_t *)sem_handle;
220*c83a76b0SSuyog Pawar 
221*c83a76b0SSuyog Pawar         /* Wait on Semaphore object infinitly */
222*c83a76b0SSuyog Pawar         return sem_wait(&(handle->sem_handle));
223*c83a76b0SSuyog Pawar     }
224*c83a76b0SSuyog Pawar }
225*c83a76b0SSuyog Pawar 
226*c83a76b0SSuyog Pawar /*****************************************************************************/
227*c83a76b0SSuyog Pawar /*                                                                           */
228*c83a76b0SSuyog Pawar /*  Function Name : osal_sem_post                                            */
229*c83a76b0SSuyog Pawar /*                                                                           */
230*c83a76b0SSuyog Pawar /*  Description   : This function releases the lock on the semaphore         */
231*c83a76b0SSuyog Pawar /*                                                                           */
232*c83a76b0SSuyog Pawar /*  Inputs        : Initialized Semaphore handle                             */
233*c83a76b0SSuyog Pawar /*                                                                           */
234*c83a76b0SSuyog Pawar /*  Globals       : None                                                     */
235*c83a76b0SSuyog Pawar /*                                                                           */
236*c83a76b0SSuyog Pawar /*  Processing    : Calls OS specific API's to release the lock on Semaphore */
237*c83a76b0SSuyog Pawar /*                                                                           */
238*c83a76b0SSuyog Pawar /*  Outputs       : Status of semaphore lock release                         */
239*c83a76b0SSuyog Pawar /*                                                                           */
240*c83a76b0SSuyog Pawar /*  Returns       : On SUCCESS - 0                                           */
241*c83a76b0SSuyog Pawar /*                  On FAILURE - -1                                          */
242*c83a76b0SSuyog Pawar /*                                                                           */
243*c83a76b0SSuyog Pawar /*  Issues        : None                                                     */
244*c83a76b0SSuyog Pawar /*                                                                           */
245*c83a76b0SSuyog Pawar /*  Revision History:                                                        */
246*c83a76b0SSuyog Pawar /*                                                                           */
247*c83a76b0SSuyog Pawar /*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
248*c83a76b0SSuyog Pawar /*         07 03 2006   Ittiam          Draft                                */
249*c83a76b0SSuyog Pawar /*                                                                           */
250*c83a76b0SSuyog Pawar /*****************************************************************************/
251*c83a76b0SSuyog Pawar 
osal_sem_post(IN void * sem_handle)252*c83a76b0SSuyog Pawar WORD32 osal_sem_post(IN void *sem_handle)
253*c83a76b0SSuyog Pawar {
254*c83a76b0SSuyog Pawar     if(0 == sem_handle)
255*c83a76b0SSuyog Pawar         return OSAL_ERROR;
256*c83a76b0SSuyog Pawar 
257*c83a76b0SSuyog Pawar     {
258*c83a76b0SSuyog Pawar         sem_handle_t *handle = (sem_handle_t *)sem_handle;
259*c83a76b0SSuyog Pawar 
260*c83a76b0SSuyog Pawar         /* Semaphore Post */
261*c83a76b0SSuyog Pawar         return sem_post(&(handle->sem_handle));
262*c83a76b0SSuyog Pawar     }
263*c83a76b0SSuyog Pawar }
264*c83a76b0SSuyog Pawar 
265*c83a76b0SSuyog Pawar /*****************************************************************************/
266*c83a76b0SSuyog Pawar /*                                                                           */
267*c83a76b0SSuyog Pawar /*  Function Name : osal_sem_count                                           */
268*c83a76b0SSuyog Pawar /*                                                                           */
269*c83a76b0SSuyog Pawar /*  Description   : This function returns the count of semaphore             */
270*c83a76b0SSuyog Pawar /*                                                                           */
271*c83a76b0SSuyog Pawar /*  Inputs        : Handle to Semaphore                                      */
272*c83a76b0SSuyog Pawar /*                  Pointer to value holder                                  */
273*c83a76b0SSuyog Pawar /*                                                                           */
274*c83a76b0SSuyog Pawar /*  Globals       : None                                                     */
275*c83a76b0SSuyog Pawar /*                                                                           */
276*c83a76b0SSuyog Pawar /*  Processing    : Calls OS specific API calls to query on semaphore        */
277*c83a76b0SSuyog Pawar /*                                                                           */
278*c83a76b0SSuyog Pawar /*  Outputs       : Status of Query                                          */
279*c83a76b0SSuyog Pawar /*                                                                           */
280*c83a76b0SSuyog Pawar /*  Returns       : On SUCCESS - 0                                           */
281*c83a76b0SSuyog Pawar /*                  On FAILURE - -1                                          */
282*c83a76b0SSuyog Pawar /*                                                                           */
283*c83a76b0SSuyog Pawar /*  Issues        : None                                                     */
284*c83a76b0SSuyog Pawar /*                                                                           */
285*c83a76b0SSuyog Pawar /*  Revision History:                                                        */
286*c83a76b0SSuyog Pawar /*                                                                           */
287*c83a76b0SSuyog Pawar /*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
288*c83a76b0SSuyog Pawar /*         30 03 2006   Ittiam          Draft                                */
289*c83a76b0SSuyog Pawar /*                                                                           */
290*c83a76b0SSuyog Pawar /*****************************************************************************/
291*c83a76b0SSuyog Pawar 
osal_sem_count(IN void * sem_handle,OUT WORD32 * count)292*c83a76b0SSuyog Pawar WORD32 osal_sem_count(IN void *sem_handle, OUT WORD32 *count)
293*c83a76b0SSuyog Pawar {
294*c83a76b0SSuyog Pawar     if(0 == sem_handle || 0 == count)
295*c83a76b0SSuyog Pawar         return OSAL_ERROR;
296*c83a76b0SSuyog Pawar 
297*c83a76b0SSuyog Pawar     {
298*c83a76b0SSuyog Pawar         sem_handle_t *handle = (sem_handle_t *)sem_handle;
299*c83a76b0SSuyog Pawar 
300*c83a76b0SSuyog Pawar         if(-1 == sem_getvalue(&(handle->sem_handle), count))
301*c83a76b0SSuyog Pawar             return OSAL_ERROR;
302*c83a76b0SSuyog Pawar 
303*c83a76b0SSuyog Pawar         return OSAL_SUCCESS;
304*c83a76b0SSuyog Pawar     }
305*c83a76b0SSuyog Pawar }
306*c83a76b0SSuyog Pawar 
307*c83a76b0SSuyog Pawar /*****************************************************************************/
308*c83a76b0SSuyog Pawar /*                                                                           */
309*c83a76b0SSuyog Pawar /*  Function Name : query_semaphore                                          */
310*c83a76b0SSuyog Pawar /*                                                                           */
311*c83a76b0SSuyog Pawar /*  Description   : This function calls NtQuerySemaphore() API call of       */
312*c83a76b0SSuyog Pawar /*                  ntdll.dll                                                */
313*c83a76b0SSuyog Pawar /*                                                                           */
314*c83a76b0SSuyog Pawar /*  Inputs        : Handle to Semaphore                                      */
315*c83a76b0SSuyog Pawar /*                  Pointer to value holder                                  */
316*c83a76b0SSuyog Pawar /*                                                                           */
317*c83a76b0SSuyog Pawar /*  Globals       : None                                                     */
318*c83a76b0SSuyog Pawar /*                                                                           */
319*c83a76b0SSuyog Pawar /*  Processing    : This function calls NtQuerySemaphore() API call of       */
320*c83a76b0SSuyog Pawar /*                  ntdll.dll                                                */
321*c83a76b0SSuyog Pawar /*                                                                           */
322*c83a76b0SSuyog Pawar /*  Outputs       : Status of Query                                          */
323*c83a76b0SSuyog Pawar /*                                                                           */
324*c83a76b0SSuyog Pawar /*  Returns       : On SUCCESS - 0                                           */
325*c83a76b0SSuyog Pawar /*                  On FAILURE - -1                                          */
326*c83a76b0SSuyog Pawar /*                                                                           */
327*c83a76b0SSuyog Pawar /*  Issues        : None                                                     */
328*c83a76b0SSuyog Pawar /*                                                                           */
329*c83a76b0SSuyog Pawar /*  Revision History:                                                        */
330*c83a76b0SSuyog Pawar /*                                                                           */
331*c83a76b0SSuyog Pawar /*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
332*c83a76b0SSuyog Pawar /*         30 03 2006   Ittiam          Draft                                */
333*c83a76b0SSuyog Pawar /*                                                                           */
334*c83a76b0SSuyog Pawar /*****************************************************************************/
335