static PVRSRV_ERROR DevDeInitMSVDX(IMG_VOID *pvDeviceNode) { PVRSRV_DEVICE_NODE *psDeviceNode = (PVRSRV_DEVICE_NODE *)pvDeviceNode; PVRSRV_ERROR eError; /* should deinit all resource */ eError = PVRSRVRemovePowerDevice(psDeviceNode->sDevId.ui32DeviceIndex); if (eError != PVRSRV_OK) return eError; return PVRSRV_OK; }
PVRSRV_ERROR PVRSRVRegisterPowerDevice(IMG_UINT32 ui32DeviceIndex, PFN_PRE_POWER pfnPrePower, PFN_POST_POWER pfnPostPower, PFN_PRE_CLOCKSPEED_CHANGE pfnPreClockSpeedChange, PFN_POST_CLOCKSPEED_CHANGE pfnPostClockSpeedChange, IMG_HANDLE hDevCookie, PVRSRV_DEV_POWER_STATE eCurrentPowerState, PVRSRV_DEV_POWER_STATE eDefaultPowerState) { PVRSRV_ERROR eError; SYS_DATA *psSysData; PVRSRV_POWER_DEV *psPowerDevice; if (pfnPrePower == IMG_NULL && pfnPostPower == IMG_NULL) { return PVRSRVRemovePowerDevice(ui32DeviceIndex); } SysAcquireData(&psSysData); eError = OSAllocMem( PVRSRV_OS_PAGEABLE_HEAP, sizeof(PVRSRV_POWER_DEV), (IMG_VOID **)&psPowerDevice, IMG_NULL, "Power Device"); if(eError != PVRSRV_OK) { PVR_DPF((PVR_DBG_ERROR,"PVRSRVRegisterPowerDevice: Failed to alloc PVRSRV_POWER_DEV")); return eError; } psPowerDevice->pfnPrePower = pfnPrePower; psPowerDevice->pfnPostPower = pfnPostPower; psPowerDevice->pfnPreClockSpeedChange = pfnPreClockSpeedChange; psPowerDevice->pfnPostClockSpeedChange = pfnPostClockSpeedChange; psPowerDevice->hDevCookie = hDevCookie; psPowerDevice->ui32DeviceIndex = ui32DeviceIndex; psPowerDevice->eCurrentPowerState = eCurrentPowerState; psPowerDevice->eDefaultPowerState = eDefaultPowerState; List_PVRSRV_POWER_DEV_Insert(&(psSysData->psPowerDeviceList), psPowerDevice); return (PVRSRV_OK); }
enum PVRSRV_ERROR PVRSRVRegisterPowerDevice(u32 ui32DeviceIndex, enum PVRSRV_ERROR (*pfnPrePower)(void *, enum PVR_POWER_STATE, enum PVR_POWER_STATE), enum PVRSRV_ERROR (*pfnPostPower)(void *, enum PVR_POWER_STATE, enum PVR_POWER_STATE), enum PVRSRV_ERROR (*pfnPreClockSpeedChange)(void *, IMG_BOOL, enum PVR_POWER_STATE), enum PVRSRV_ERROR (*pfnPostClockSpeedChange)(void *, IMG_BOOL, enum PVR_POWER_STATE), void *hDevCookie, enum PVR_POWER_STATE eCurrentPowerState, enum PVR_POWER_STATE eDefaultPowerState) { enum PVRSRV_ERROR eError; struct SYS_DATA *psSysData; struct PVRSRV_POWER_DEV *psPowerDevice; if (pfnPrePower == NULL && pfnPostPower == NULL) return PVRSRVRemovePowerDevice(ui32DeviceIndex); eError = SysAcquireData(&psSysData); if (eError != PVRSRV_OK) return eError; eError = OSAllocMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(struct PVRSRV_POWER_DEV), (void **) &psPowerDevice, NULL); if (eError != PVRSRV_OK) { PVR_DPF(PVR_DBG_ERROR, "PVRSRVRegisterPowerDevice: " "Failed to alloc struct PVRSRV_POWER_DEV"); return eError; } psPowerDevice->pfnPrePower = pfnPrePower; psPowerDevice->pfnPostPower = pfnPostPower; psPowerDevice->pfnPreClockSpeedChange = pfnPreClockSpeedChange; psPowerDevice->pfnPostClockSpeedChange = pfnPostClockSpeedChange; psPowerDevice->hDevCookie = hDevCookie; psPowerDevice->ui32DeviceIndex = ui32DeviceIndex; psPowerDevice->eCurrentPowerState = eCurrentPowerState; psPowerDevice->eDefaultPowerState = eDefaultPowerState; psPowerDevice->psNext = psSysData->psPowerDeviceList; psSysData->psPowerDeviceList = psPowerDevice; return PVRSRV_OK; }
PVRSRV_ERROR PVRSRVRegisterPowerDevice(IMG_UINT32 ui32DeviceIndex, PFN_PRE_POWER pfnDevicePrePower, PFN_POST_POWER pfnDevicePostPower, PFN_SYS_DEV_PRE_POWER pfnSystemPrePower, PFN_SYS_DEV_POST_POWER pfnSystemPostPower, PFN_PRE_CLOCKSPEED_CHANGE pfnPreClockSpeedChange, PFN_POST_CLOCKSPEED_CHANGE pfnPostClockSpeedChange, IMG_HANDLE hDevCookie, PVRSRV_DEV_POWER_STATE eCurrentPowerState, PVRSRV_DEV_POWER_STATE eDefaultPowerState) { PVRSRV_DATA *psPVRSRVData = PVRSRVGetPVRSRVData(); PVRSRV_POWER_DEV *psPowerDevice; if (pfnDevicePrePower == IMG_NULL && pfnDevicePostPower == IMG_NULL) { return PVRSRVRemovePowerDevice(ui32DeviceIndex); } psPowerDevice = OSAllocMem(sizeof(PVRSRV_POWER_DEV)); if (psPowerDevice == IMG_NULL) { PVR_DPF((PVR_DBG_ERROR,"PVRSRVRegisterPowerDevice: Failed to alloc PVRSRV_POWER_DEV")); return PVRSRV_ERROR_OUT_OF_MEMORY; } /* setup device for power manager */ psPowerDevice->pfnDevicePrePower = pfnDevicePrePower; psPowerDevice->pfnDevicePostPower = pfnDevicePostPower; psPowerDevice->pfnSystemPrePower = pfnSystemPrePower; psPowerDevice->pfnSystemPostPower = pfnSystemPostPower; psPowerDevice->pfnPreClockSpeedChange = pfnPreClockSpeedChange; psPowerDevice->pfnPostClockSpeedChange = pfnPostClockSpeedChange; psPowerDevice->hDevCookie = hDevCookie; psPowerDevice->ui32DeviceIndex = ui32DeviceIndex; psPowerDevice->eCurrentPowerState = eCurrentPowerState; psPowerDevice->eDefaultPowerState = eDefaultPowerState; /* insert into power device list */ List_PVRSRV_POWER_DEV_Insert(&(psPVRSRVData->psPowerDeviceList), psPowerDevice); return (PVRSRV_OK); }