/*!
******************************************************************************

 @Function				SYSDEVKM_GetCpuKmAddr

******************************************************************************/
IMG_RESULT SYSDEVKM_GetCpuKmAddr(
	IMG_HANDLE				hSysDevHandle,
	SYSDEVKM_eRegionId		eRegionId,
	IMG_VOID **				ppvCpuKmAddr,
	IMG_UINT32 *			pui32Size
)
{
	SYSDEVKM_sDevice *		psDevice = (SYSDEVKM_sDevice *)hSysDevHandle;
	IMG_UINT32				ui32Result;
	
	IMG_ASSERT(hSysDevHandle != IMG_NULL);
	if (hSysDevHandle == IMG_NULL)
	{
		return IMG_ERROR_GENERIC_FAILURE;
	}

	ui32Result = SYSDEVU_GetCpuAddrs(psDevice->ui32DeviceId, eRegionId, ppvCpuKmAddr, IMG_NULL, pui32Size);
	IMG_ASSERT(ui32Result == IMG_SUCCESS);
	if (ui32Result != IMG_SUCCESS)
	{
		return ui32Result;
	}

	return IMG_SUCCESS;
}
/*!
******************************************************************************

 @Function                SYSDEVU_GetCpuKmAddr

******************************************************************************/
IMG_RESULT SYSDEVU_GetCpuKmAddr(
	SYSDEVU_sInfo *		hSysDevHandle,
    SYSDEVU_eRegionId	eRegionId,
    IMG_VOID **         ppvCpuKmAddr,
    IMG_UINT32 *        pui32Size
)
{
	SYSDEVU_sInfo *  psDevice = (SYSDEVU_sInfo *)hSysDevHandle;
    IMG_PHYSADDR        paCpuPhysAddr;
    IMG_UINT32          ui32Result;
    IMG_HANDLE          hRegHandle;

    IMG_ASSERT(hSysDevHandle != IMG_NULL);
    if (hSysDevHandle == IMG_NULL)
    {
        return IMG_ERROR_GENERIC_FAILURE;
    }

    ui32Result = SYSDEVU_GetCpuAddrs(psDevice, eRegionId, ppvCpuKmAddr, &paCpuPhysAddr, pui32Size);
    IMG_ASSERT(ui32Result == IMG_SUCCESS);
    if (ui32Result != IMG_SUCCESS)
    {
        return ui32Result;
    }

    /* Add this to the list of mappable regions...*/
    if (!SYSBRGU_GetMappableRegion(paCpuPhysAddr))
    {
        ui32Result = SYSBRGU_CreateMappableRegion(paCpuPhysAddr, *pui32Size,
                                                  SYS_MEMATTRIB_UNCACHED, NULL, &hRegHandle);
        IMG_ASSERT(ui32Result == IMG_SUCCESS);
        if (ui32Result != IMG_SUCCESS)
        {
            return ui32Result;
        }
    }

    return IMG_SUCCESS;
}