⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sysconfig.c

📁 Lido PXA270平台开发板的最新BSP,包括源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
/*!
******************************************************************************

 @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 + -