enum PVRSRV_ERROR PVRSRVSystemPostPowerStateKM( enum PVR_POWER_STATE eNewPowerState) { enum PVRSRV_ERROR eError; struct SYS_DATA *psSysData; enum PVR_POWER_STATE eNewDevicePowerState; eError = SysAcquireData(&psSysData); if (eError != PVRSRV_OK) goto Exit; if (eNewPowerState != psSysData->eCurrentPowerState) { eError = SysSystemPostPowerState(eNewPowerState); if (eError != PVRSRV_OK) goto Exit; } if (_IsSystemStatePowered(eNewPowerState) != _IsSystemStatePowered(psSysData->eCurrentPowerState)) { if (_IsSystemStatePowered(eNewPowerState)) eNewDevicePowerState = PVRSRV_POWER_Unspecified; else eNewDevicePowerState = PVRSRV_POWER_STATE_D3; eError = PVRSRVDevicePostPowerStateKM(IMG_TRUE, 0, eNewDevicePowerState); if (eError != PVRSRV_OK) goto Exit; } PVR_DPF(PVR_DBG_WARNING, "PVRSRVSystemPostPowerStateKM: " "System Power Transition from %d to %d OK", psSysData->eCurrentPowerState, eNewPowerState); psSysData->eCurrentPowerState = eNewPowerState; Exit: PVRSRVPowerUnlock(KERNEL_ID); if (_IsSystemStatePowered(eNewPowerState) && PVRSRVGetInitServerState(PVRSRV_INIT_SERVER_SUCCESSFUL)) PVRSRVCommandCompleteCallbacks(); return eError; }
IMG_EXPORT PVRSRV_ERROR PVRSRVSystemPostPowerStateKM(PVRSRV_SYS_POWER_STATE eNewSysPowerState) { PVRSRV_ERROR eError = PVRSRV_OK; SYS_DATA *psSysData; PVRSRV_DEV_POWER_STATE eNewDevicePowerState; SysAcquireData(&psSysData); if (eNewSysPowerState != psSysData->eCurrentPowerState) { eError = SysSystemPostPowerState(eNewSysPowerState); if (eError != PVRSRV_OK) { goto Exit; } } if (_IsSystemStatePowered(eNewSysPowerState) != _IsSystemStatePowered(psSysData->eCurrentPowerState)) { if (_IsSystemStatePowered(eNewSysPowerState)) { eNewDevicePowerState = PVRSRV_DEV_POWER_STATE_DEFAULT; } else { eNewDevicePowerState = PVRSRV_DEV_POWER_STATE_OFF; } eError = PVRSRVDevicePostPowerStateKM(IMG_TRUE, 0, eNewDevicePowerState); if (eError != PVRSRV_OK) { goto Exit; } } PVR_DPF((PVR_DBG_MESSAGE, "PVRSRVSystemPostPowerStateKM: System Power Transition from %d to %d OK", psSysData->eCurrentPowerState, eNewSysPowerState)); psSysData->eCurrentPowerState = eNewSysPowerState; Exit: PVRSRVPowerUnlock(KERNEL_ID); if (_IsSystemStatePowered(eNewSysPowerState) && PVRSRVGetInitServerState(PVRSRV_INIT_SERVER_SUCCESSFUL)) { PVRSRVCommandCompleteCallbacks(); } return eError; }