📄 sysconfig.c
字号:
/*!
******************************************************************************
@Function SysUnInstallISR
@Description uninstalls a system ISR
@Input psDevInfo - devinfo structure
@Return PVRSRV_ERROR :
******************************************************************************/
PVRSRV_ERROR SysUnInstallISR(PPVRSRV_DEV_INFO psDevInfo)
{
SYS_DATA *psSysData;
PVRSRV_ERROR eError;
eError = SysAcquireData(&psSysData);
if(eError != PVRSRV_OK)
{
return eError;
}
psSysData->ui32InstalledISRs--;
if(psSysData->ui32InstalledISRs == 0)
{
eError = HostUnInstallISR(SYSINTR_MARATHON, (IMG_VOID *)psSysData);
}
return(eError);
}
/*****************************************************************************
FUNCTION : SysGetManagedMemoryInfo
PURPOSE : Uninstall system level ISR handler
PARAMETERS :
RETURNS :
*****************************************************************************/
static void FirstAllocateFromExternalHeap(void *pvHandle)
{
SysSDRAMSetState(SYS_SDRAM_POWER_SLEEP); /* Why is this needed */
SysSDRAMSetState(SYS_SDRAM_POWER_ACTIVE);
}
static void LastFreeFromExternalHeap(void *pvHandle)
{
SysSDRAMSetState(SYS_SDRAM_POWER_SHUTDOWN);
}
/*!
******************************************************************************
@Function SysGetManagedMemoryInfo
@Description get memory info
@Input pDescriptor - system pool descriptor
@Input pCount - count
@Return PVRSRV_ERROR :
******************************************************************************/
PVRSRV_ERROR SysGetManagedMemoryInfo(SYS_POOL_DESCRIPTOR **pDescriptor, IMG_UINT32 *pCount)
{
SYS_DATA *psSysData;
PSYS_SPECIFIC_DATA pMSysData;
PVRSRV_ERROR eError;
IMG_UINT32 ui32PoolCount = 1;
eError = SysAcquireData(&psSysData);
if(eError != PVRSRV_OK)
{
return(eError);
}
if(psSysData->psDevInfoList == IMG_NULL)
{
PVR_DPF((PVR_DBG_ERROR,"No Devices initialised yet"));
return(PVRSRV_ERROR_INIT_FAILURE);
}
GET_MARATHON_SYS_DATA(pMSysData);
psSysData->asSysPool[0].BaseSysPAddr.uiAddr = pMSysData->ui32PhysBase + MARATHON_FB_OFFSET + pMSysData->ui32FBInteralSize;
psSysData->asSysPool[0].uSize = pMSysData->ui32FBSize - pMSysData->ui32FBInteralSize;
if(pMSysData->ui32FBInteralSize)
{
psSysData->asSysPool[1].BaseSysPAddr.uiAddr = pMSysData->ui32PhysBase + MARATHON_FB_OFFSET;
psSysData->asSysPool[1].uSize = pMSysData->ui32FBInteralSize;
ui32PoolCount++;
}
*pCount = ui32PoolCount;
*pDescriptor = &psSysData->asSysPool[0];
return(PVRSRV_OK);
}
/*!
******************************************************************************
@Function SysGetDevicePhysOffset
@Description get device physical offset
@Return byte address offset
******************************************************************************/
IMG_UINT32 SysGetDevicePhysOffset(IMG_VOID)
{
SYS_DATA *psSysData;
PVRSRV_ERROR eError;
PVRSRV_DEV_INFO *psDevInfo;
eError = SysAcquireData(&psSysData);
if(eError != PVRSRV_OK)
{
PVR_DPF((PVR_DBG_ERROR,"Cannot acquire sysdata"));
return(0);
}
psDevInfo = psSysData->psDevInfoList;
if(psDevInfo)
{
return(psDevInfo->sDevLocation.sPhysicalBase.uiAddr);
}
else
{
PVR_DPF((PVR_DBG_ERROR,"No Devices initialised yet"));
return(0);
}
}
/*!
******************************************************************************
@Function SysMMUMode
@Description Tell services which mode to use the mbx mmu in if present.
@Return SYS_MMU_MODE
******************************************************************************/
SYS_MMU_MODE
SysMMUMode (IMG_VOID)
{
return SYS_MMU_DISABLE;
}
/*!
******************************************************************************
@Function SysDeviceReset
@Description reset given device at the system level
@Return PVRSRV_ERROR
******************************************************************************/
PVRSRV_ERROR SysDeviceReset(SYS_DATA *psSysData, PVRSRV_DEV_INFO *psDevInfo)
{
PSYS_SPECIFIC_DATA pMSysData;
GET_MARATHON_SYS_DATA(pMSysData);
switch(psDevInfo->sDevId.eDeviceType)
{
case PVRSRV_DEVICE_TYPE_MBX1 :
case PVRSRV_DEVICE_TYPE_MBX1_LITE :
{
WriteHWReg(pMSysData->pvLinRegBaseAddr, MAR_MBX_RESET, 1);
HostWaitus(1000);
WriteHWReg(pMSysData->pvLinRegBaseAddr, MAR_MBX_RESET, 0);
HostWaitus(1000);
break;
}
case PVRSRV_DEVICE_TYPE_PDP :
{
WriteHWReg(pMSysData->pvLinRegBaseAddr, MAR_PDP_RESET, 1);
HostWaitus(1000);
WriteHWReg(pMSysData->pvLinRegBaseAddr, MAR_PDP_RESET, 0);
HostWaitus(1000);
break;
}
case PVRSRV_DEVICE_TYPE_M24VA :
{
WriteHWReg(pMSysData->pvLinRegBaseAddr, MAR_M24VA_RESET, 1);
HostWaitus(1000);
WriteHWReg(pMSysData->pvLinRegBaseAddr, MAR_M24VA_RESET, 0);
HostWaitus(1000);
break;
}
default :
{
PVR_DPF((PVR_DBG_ERROR,"SysDeviceReset: Unsupported Device type"));
return PVRSRV_ERROR_INVALID_DEVICE;
}
}
return PVRSRV_OK;
}
/*****************************************************************************
FUNCTION : SysInitDisplay
PURPOSE : Initialise the display
PARAMETERS : psDevInfo
RETURNS :
*****************************************************************************/
IMG_VOID SysInitDisplay(IMG_VOID)
{
}
/*****************************************************************************
FUNCTION : SysDeInitDisplay
PURPOSE : De-initialise the display
PARAMETERS : psDevInfo
RETURNS :
*****************************************************************************/
IMG_VOID SysDeInitDisplay(IMG_VOID)
{
}
#ifdef PDUMP
/*****************************************************************************
FUNCTION : SysGetPDUMPData
PURPOSE : Gets a pointer to dump data.
PARAMETERS :
RETURNS : pointer to PDump Data
*****************************************************************************/
PVRSRV_PDUMP_MEMMAP* SysGetPDUMPData()
{
if(gpsPDumpMemMap == IMG_NULL)
{
PSYS_SPECIFIC_DATA pMSysData;
IMG_UINT32 ui32val;
GET_MARATHON_SYS_DATA(pMSysData);
/*
Allocate PDUMP data
*/
if(HostAllocMem(PVRSRV_HOST_PAGEABLE_HEAP,
sizeof (PVRSRV_PDUMP_MEMMAP),
&gpsPDumpMemMap,
0) != PVRSRV_OK)
{
return IMG_NULL;
}
/*
Enable 2d PDUMPing?
*/
if(HostReadRegistryInt( 0, POWERVR_REG_ROOT, "Enable2DPDump", &ui32val ))
{
gpsPDumpMemMap->b2DEnabled = ui32val ? IMG_TRUE : IMG_FALSE;
}
else
{
gpsPDumpMemMap->b2DEnabled = IMG_FALSE;
}
gpsPDumpMemMap->ui32StreamCount = 0;
gpsPDumpMemMap->ui32ActiveContexts = 0;
gpsPDumpMemMap->bPDumpingOn = IMG_TRUE;
gpsPDumpMemMap->bVGP =
#ifdef SUPPORT_VGP
IMG_TRUE;
#else /* SUPPORT_VGP */
IMG_FALSE;
#endif /* SUPPORT_VGP */
gpsPDumpMemMap->ui32RefCount = 0;
gpsPDumpMemMap->ui32FBBase = pMSysData->ui32PhysBase + MARATHON_FB_OFFSET;
gpsPDumpMemMap->ui32FBRange = pMSysData->ui32FBSize;
/*
MBX setup
*/
gpsPDumpMemMap->sMBX.ui32RegBase = pMSysData->ui32PhysBase + MARATHON_REG_OFFSET + MBX_REG_OFFSET;
gpsPDumpMemMap->sMBX.ui32RegRange = MBX_REG_SIZE;
gpsPDumpMemMap->sMBX.ui32SPDataStart = pMSysData->ui32SPPhysBase + MBX_SP_OFFSET + MBX_TA_SP_DATA_OFFSET;
gpsPDumpMemMap->sMBX.ui32SPDataRange = MBX_TA_SP_DATA_RANGE;
gpsPDumpMemMap->sMBX.ui32SP2DStart = pMSysData->ui32SPPhysBase + MBX_SP_OFFSET + MBX_TA_SP_2D_DATA_OFFSET;
gpsPDumpMemMap->sMBX.ui32SP2DRange = MBX_TA_SP_2D_DATA_RANGE;
gpsPDumpMemMap->sMBX.ui32SPTermStart = pMSysData->ui32SPPhysBase + MBX_SP_OFFSET + MBX_TA_SP_TERM_OFFSET;
gpsPDumpMemMap->sMBX.ui32SPTermRange = MBX_TA_SP_TERM_RANGE;
/*
PDP setup
*/
gpsPDumpMemMap->sPDP.ui32RegBase = pMSysData->ui32PhysBase + MARATHON_REG_OFFSET + DISPLAY_REG_OFFSET;
gpsPDumpMemMap->sPDP.ui32RegRange = DISPLAY_REG_SIZE;
/*
M24VA setup
*/
gpsPDumpMemMap->sM24VA.ui32RegBase = pMSysData->ui32PhysBase + MARATHON_REG_OFFSET + M24VA_REG_OFFSET;
gpsPDumpMemMap->sM24VA.ui32RegRange = M24VA_SP_SIZE;
gpsPDumpMemMap->sM24VA.ui32SPCMDStart = pMSysData->ui32SPPhysBase + M24VA_SP_OFFSET + M24VA_SP_CMD_OFFSET;
gpsPDumpMemMap->sM24VA.ui32SPCMDRange = M24VA_SP_CMD_RANGE;
gpsPDumpMemMap->sM24VA.ui32SPIDCTStart = pMSysData->ui32SPPhysBase + M24VA_SP_OFFSET + M24VA_SP_IDCT_OFFSET;
gpsPDumpMemMap->sM24VA.ui32SPIDCTRange = M24VA_SP_IDCT_RANGE;
/*
Initialise global PDUMP context
*/
PDUMPINIT(&gpsPDumpMemMap->psGlobalContext);
}
gpsPDumpMemMap->ui32RefCount++;
return gpsPDumpMemMap;
}
/*****************************************************************************
FUNCTION : SysGetPDUMPData
PURPOSE : Gets a pointer to dump data.
PARAMETERS :
RETURNS : pointer to PDump Data
*****************************************************************************/
IMG_VOID SysReleasePDUMPData(PVRSRV_PDUMP_MEMMAP *psPDData)
{
if(psPDData)
{
if(--psPDData->ui32RefCount == 0)
{
/*
Free up global context
*/
PDUMPCLOSE(gpsPDumpMemMap->psGlobalContext);
/*
Free up PDUMP map data
*/
HostFreeMem(PVRSRV_HOST_PAGEABLE_HEAP, psPDData);
gpsPDumpMemMap = IMG_NULL;
}
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -