/******************************************************************************
 *
 * Copyright (C) 2018 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at:
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 *****************************************************************************
 * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
*/

/*****************************************************************************/
/*                                                                           */
/*  File Name         : osal.c                                               */
/*                                                                           */
/*  Description       : This file contains all the API's of OSAL             */
/*                      initialization and closure                           */
/*                                                                           */
/*  List of Functions : osal_init                                            */
/*                      osal_register_callbacks                              */
/*                      osal_close                                           */
/*                      osal_get_version                                     */
/*                      osal_print_status_log                                */
/*                                                                           */
/*  Issues / Problems : None                                                 */
/*                                                                           */
/*  Revision History  :                                                      */
/*                                                                           */
/*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
/*         19 04 2006   Ittiam          Draft                                */
/*                                                                           */
/*****************************************************************************/

/*****************************************************************************/
/* File Includes                                                             */
/*****************************************************************************/

/* System include files */
#include <stdio.h>

#include <sys/types.h>
#include <semaphore.h>
#include <pthread.h>

/* User include files */
#include "cast_types.h"
#include "osal.h"
#include "osal_handle.h"

/*****************************************************************************/
/* Constant Macros                                                           */
/*****************************************************************************/

#define OSAL_VERSION "OSAL_v13.1"

/*****************************************************************************/
/*                                                                           */
/*  Function Name : osal_init                                                */
/*                                                                           */
/*  Description   : This function creates and initializes the OSAL instance  */
/*                                                                           */
/*  Inputs        : Memory for OSAL handle                                   */
/*                                                                           */
/*  Globals       : None                                                     */
/*                                                                           */
/*  Processing    : Initializes OSAL handle parameters to default values.    */
/*                                                                           */
/*  Outputs       : Status of OSAL handle initialization                     */
/*                                                                           */
/*  Returns       : On SUCCESS - OSAL_SUCCESS                                */
/*                  On FAILURE - OSAL_ERROR                                  */
/*                                                                           */
/*  Issues        : None                                                     */
/*                                                                           */
/*  Revision History:                                                        */
/*                                                                           */
/*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
/*         19 04 2006   Ittiam          Draft                                */
/*                                                                           */
/*****************************************************************************/

WORD32 osal_init(IN void *osal_handle)
{
    osal_t *handle = (osal_t *)osal_handle;

    /* Validate the input */
    if(0 == osal_handle)
        return OSAL_ERROR;

    /* Initialize call back functions */
    handle->alloc = 0;
    handle->free = 0;
    handle->mmr_handle = 0;

    return OSAL_SUCCESS;
}

/*****************************************************************************/
/*                                                                           */
/*  Function Name : osal_register_callbacks                                  */
/*                                                                           */
/*  Description   : This function registers MMR handle and allocation and    */
/*                  freeing call back functions.                             */
/*                                                                           */
/*  Inputs        : OSAL handle                                              */
/*                  OSAL callback attributes                                 */
/*                                                                           */
/*  Globals       : None                                                     */
/*                                                                           */
/*  Processing    : This function initializes OSAL call back parameters.     */
/*                                                                           */
/*  Outputs       : Status of OSAL callback registration                     */
/*                                                                           */
/*  Returns       : On SUCCESS - OSAL_SUCCESS                                */
/*                  On FAILURE - OSAL_ERROR                                  */
/*                                                                           */
/*  Issues        : None                                                     */
/*                                                                           */
/*  Revision History:                                                        */
/*                                                                           */
/*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
/*         10 05 2006   Ittiam          Draft                                */
/*                                                                           */
/*****************************************************************************/

WORD32 osal_register_callbacks(IN void *osal_handle, IN osal_cb_funcs_t *cb_funcs)
{
    osal_t *handle = (osal_t *)osal_handle;

    /* Validate the input */
    if(0 == handle || 0 == cb_funcs)
        return OSAL_ERROR;

    if(0 == cb_funcs->osal_alloc || 0 == cb_funcs->osal_free)
        return OSAL_ERROR;

    /* Initialize call back parameters */
    handle->mmr_handle = cb_funcs->mmr_handle;
    handle->alloc = cb_funcs->osal_alloc;
    handle->free = cb_funcs->osal_free;

    return OSAL_SUCCESS;
}

/*****************************************************************************/
/*                                                                           */
/*  Function Name : osal_close                                               */
/*                                                                           */
/*  Description   : This function closes the OSAL instance                   */
/*                                                                           */
/*  Inputs        : OSAL handle                                              */
/*                                                                           */
/*  Globals       : None                                                     */
/*                                                                           */
/*  Processing    : Frees the memory allocated for the OSAL handle           */
/*                                                                           */
/*  Outputs       : Status of OSAL instance close                            */
/*                                                                           */
/*  Returns       : On SUCCESS - 0                                           */
/*                  On FALIURE - -1                                          */
/*                                                                           */
/*  Issues        : None                                                     */
/*                                                                           */
/*  Revision History:                                                        */
/*                                                                           */
/*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
/*         19 04 2006   Ittiam          Draft                                */
/*                                                                           */
/*****************************************************************************/

WORD32 osal_close(IN void *osal_handle)
{
    /* Validate input */
    if(0 == osal_handle)
        return OSAL_ERROR;

    return OSAL_SUCCESS;
}

/*****************************************************************************/
/*                                                                           */
/*  Function Name : osal_get_version                                         */
/*                                                                           */
/*  Description   : This function gets the version of OSAL library.          */
/*                                                                           */
/*  Inputs        : None                                                     */
/*  Globals       : None                                                     */
/*                                                                           */
/*  Processing    : Returns a NULL terminated string with has the version of */
/*                  library being used.                                      */
/*                                                                           */
/*  Outputs       : Version of OSAL library.                                 */
/*                                                                           */
/*  Returns       : Pointer to a NULL terminated string                      */
/*                                                                           */
/*  Issues        : None                                                     */
/*                                                                           */
/*  Revision History:                                                        */
/*                                                                           */
/*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
/*         07 03 2006   Ittiam          Draft                                */
/*                                                                           */
/*****************************************************************************/

WORD8 *osal_get_version()
{
    return ((WORD8 *)OSAL_VERSION);
}