ClRcT halDevObjCreate (ClUint32T deviceID, 
                        void *pdevCapability,
                        ClUint32T devCapLen ,
                        ClUint32T maxRspTime, 
                        ClUint32T bootUpPriority, 
                        ClHalDeviceObjectH *const phalDevObj)

{
    ClUint32T index=0 ;
    ClUint32T i=0 ;
    CL_FUNC_ENTER();
    
    if(deviceID<=0)
    {
        clLogCritical(CL_LOG_AREA_UNSPECIFIED,CL_LOG_CONTEXT_UNSPECIFIED,"\nhalDevObjCreate Error Invalid DeviceId\n");
        CL_FUNC_EXIT();
        return(CL_HAL_SET_RC( CL_ERR_INVALID_PARAMETER)) ;
    }

    if(NULL ==phalDevObj) 
    { 
        clLogCritical(CL_LOG_AREA_UNSPECIFIED,CL_LOG_CONTEXT_UNSPECIFIED,"\n halDevObjCreate Error NULL for Device \
                      Object Handle\n") ;
        CL_FUNC_EXIT();
        return(CL_HAL_SET_RC(CL_ERR_NULL_POINTER));
    }
ClRcT clHalLibInitialize()
{
    ClRcT rc= CL_OK ; 
    CL_FUNC_ENTER();
    if (CL_TRUE == halInitDone)
    {
        clLogCritical(CL_LOG_AREA_UNSPECIFIED,CL_LOG_CONTEXT_UNSPECIFIED,"\n clHalLibInitialize Called Again \n");
        CL_FUNC_EXIT();
        return (CL_HAL_SET_RC(CL_ERR_INVALID_STATE));
    }
#ifdef DEBUG
    rc= dbgAddComponent(COMP_PREFIX, COMP_NAME, COMP_DEBUG_VAR_PTR);
    if (CL_OK != rc)
    {
        clLogError(CL_LOG_AREA_UNSPECIFIED,CL_LOG_CONTEXT_UNSPECIFIED,"dbgAddComponent Failed \n ");
        CL_FUNC_EXIT();
        return rc;
    }
#endif
    
    memset(&halDevObjTable,0, sizeof(HalDeviceObjTableT));

    halDevObjTable.pphalDeviceObj=(HalDeviceObjectT **)clHeapAllocate((halConfig.
        halNumDevObject)*sizeof(HalDeviceObjectT *));

    if (NULL == halDevObjTable.pphalDeviceObj)
    {
        clLogCritical(CL_LOG_AREA_UNSPECIFIED,CL_LOG_CONTEXT_UNSPECIFIED,"\n clHalLibInitialize Error no memory HAL\n");
        CL_FUNC_EXIT();
        return(CL_HAL_SET_RC(CL_ERR_NO_MEMORY));
    }

    memset(halDevObjTable.pphalDeviceObj,0, ((halConfig.
        halNumDevObject)*sizeof(HalDeviceObjectT *)));
        
    halInitDone = CL_TRUE; 

    /* Create device object(s) from the Configuration Info */
    rc = halDevObjTableCreate ();
    if (rc != CL_OK)
    {
        clLogCritical(CL_LOG_AREA_UNSPECIFIED,CL_LOG_CONTEXT_UNSPECIFIED,"\n halDevObjTableCreate  Failed");
        CL_FUNC_EXIT();
        return rc ;
    }
    clLogTrace(CL_LOG_AREA_UNSPECIFIED,CL_LOG_CONTEXT_UNSPECIFIED,"\nclHalLibInitialize CL_OK\n");
    CL_FUNC_EXIT();
    return (CL_OK) ;
}
ClRcT halObjCreate(ClUint32T omId,
                   ClCorMOIdPtrT moId,
                   ClHalObjectHandleT *const phalObjHandle)
{
    HalObjectT * phalObject = NULL;
    ClRcT ret=CL_OK;
#ifdef CL_DEBUG
    char aFunction[]="halObjCreate";
#endif

    CL_FUNC_ENTER();

    if (NULL == phalObjHandle)
    {
        CL_DEBUG_PRINT(CL_DEBUG_TRACE,("\n %s Error NULL Pointer  \n ",aFunction));
        CL_FUNC_EXIT();
        return (CL_HAL_SET_RC(CL_ERR_NULL_POINTER));
    }
    phalObject =(HalObjectT*) clHeapAllocate((ClUint32T)sizeof(HalObjectT));

    if (NULL == phalObject)
    {
        CL_DEBUG_PRINT(CL_DEBUG_TRACE,("\n %s Error Malloc Failed\n ",aFunction));
        CL_FUNC_EXIT();
        return (CL_HAL_SET_RC( CL_ERR_NO_MEMORY)) ;
    }

    memset(phalObject,0,sizeof(HalObjectT));

    phalObject->omId=omId;

    if(NULL != moId)
    {
        phalObject->moId = (ClCorMOIdPtrT) clHeapAllocate ((ClUint32T)sizeof(ClCorMOIdT));

        if (NULL == phalObject->moId)
        {
            clHeapFree (phalObject);
            CL_DEBUG_PRINT(CL_DEBUG_ERROR,("\n %s Error Malloc Failed\n ",aFunction));
            CL_FUNC_EXIT();
            return (CL_HAL_SET_RC( CL_ERR_NO_MEMORY)) ;
        }

        memset (phalObject->moId,0,sizeof(ClCorMOIdT));
        memcpy (phalObject->moId, moId, sizeof(ClCorMOIdT));
    }
    else
    {
        /* Error Condition */
        /* This needs to be uncommented after fixing the call to clOmObjectCreate &
        clOmCorAndOmObjectsCreate by passing hMOId ,sizeof(ClCorMOIdT) as the last 2parameters.
        As of now  NULL is being passed */
        CL_DEBUG_PRINT(CL_DEBUG_ERROR,("\n %s Error Invalid Parameter \n ",aFunction));
        CL_FUNC_EXIT();
        return (CL_HAL_SET_RC(CL_ERR_INVALID_PARAMETER));
    }

    ret = clCntLlistCreate(halKeyCompare,NULL,halObjContainerDestroy,CL_CNT_UNIQUE_KEY,
                           &(phalObject->hTableRefDevObject));
    if (CL_OK !=ret)
    {
        clHeapFree (phalObject);
        phalObject =NULL;
        CL_DEBUG_PRINT(CL_DEBUG_TRACE,("\n %s Error returned by \
        clCntLlistCreate \n ", aFunction));
        CL_FUNC_EXIT();
        return ret;
    }