📄 device.h
字号:
/*******************************************************************************
* Name : device.h
* Title : Common Device header
* Author : Mike Brassington
* Created : 23rd May 2002
*
* Copyright : 2002 by Imagination Technologies Limited.
* All rights reserved. No part of this software, either
* material or conceptual may be copied or distributed,
* transmitted, transcribed, stored in a retrieval system
* or translated into any human or computer language in any
* form by any means, electronic, mechanical, manual or
* other-wise, or disclosed to third parties without the
* express written permission of Imagination Technologies
* Limited, Unit 8, HomePark Industrial Estate,
* King's Langley, Hertfordshire, WD4 8LZ, U.K.
*
* Description : Device related function templates and defines
*
* Platform : Generic
*
* Modifications:-
* $Log: device.h $
*
* --- Revision Logs Removed ---
*
* --- Revision Logs Removed ---
*
* --- Revision Logs Removed ---
*
* --- Revision Logs Removed ---
*
* --- Revision Logs Removed ---
*
* --- Revision Logs Removed ---
*
* --- Revision Logs Removed ---
*
* --- Revision Logs Removed ---
*
* --- Revision Logs Removed ---
*
* --- Revision Logs Removed ---
*
* --- Revision Logs Removed ---
*******************************************************************************/
#if !defined(__DEVICE_H__)
#define __DEVICE_H__
/**************************************** Public interface into device layer */
PVRSRV_ERROR DevInitDevice(PVRSRV_DEV_INFO *psDevInfo);
PVRSRV_ERROR DevDeInitDevice(PVRSRV_DEV_INFO *psDevInfo);
/* PVRSRV_ERROR DevFindLocation(PVRSRV_DEV_INFO *psDevInfo); */
PVRSRV_ERROR IdentifyDevice(PVRSRV_DEV_INFO *psDevInfo);
PVRSRV_ERROR DevReset(PVRSRV_DEV_INFO *psDevInfo);
#define DEV_SDRAM_POWER_SLEEP 0
#define DEV_SDRAM_POWER_SHUTDOWN 1
#define DEV_SDRAM_POWER_ACTIVE 2
typedef enum _DEV_CLOCK_EDGE_
{
DEV_RISING,
DEV_FALLING
} DEV_CLOCK_EDGE;
typedef enum _DEV_DRIVE_STRENGTH_
{
DEV_3MA,
DEV_6MA_10MA
} DEV_DRIVE_STRENGTH;
typedef enum _DEV_HOST_LCD_FORMAT_
{
DEV_HOST_LCD_555,
DEV_HOST_LCD_556,
DEV_HOST_LCD_565,
DEV_HOST_LCD_655,
DEV_HOST_LCD_665,
DEV_HOST_LCD_666
} DEV_GIB_FORMAT;
typedef enum _DEV_LCD_SOURCE_
{
DEV_SOURCE_PDP,
DEV_SOURCE_HOST
} DEV_LCD_SOURCE;
typedef struct _DEV_LCD_CONFIG_
{
DEV_CLOCK_EDGE eDENPolarity;
DEV_CLOCK_EDGE eFCLKPolarity;
DEV_CLOCK_EDGE eLCLKPolarity;
DEV_CLOCK_EDGE eDataPolarity;
IMG_BOOL bActive;
DEV_DRIVE_STRENGTH eDataStrength;
DEV_DRIVE_STRENGTH eClockStrength;
DEV_LCD_SOURCE eSource;
} DEV_LCD_CONFIG, *PDEV_LCD_CONFIG;
#ifdef SUPPORT_MARATHON_DEVICE
void DevSDRAMSetState(PPVRSRV_DEV_INFO psDevInfo, DWORD dwMode);
bool DevCoreQuery(PPVRSRV_DEV_INFO psDevInfo, DWORD dwCore);
void DevWriteLEDData(DWORD dwData);
void DevWriteLEDBits(BYTE byData);
BYTE DevReadUserSwitches(void);
DWORD DevSetPixClkFrequency(PPVRSRV_DEV_INFO psDevInfo,DWORD dwFreq);
void DevSetPowerState(PPVRSRV_DEV_INFO psDevInfo, PVR_POWER_STATE eState);
DWORD DevSetPWM(PPVRSRV_DEV_INFO psDevInfo, DWORD dwPWM,
DWORD dwPeriod, DWORD dwDutyCycle);
void DevConfigLCD(PPVRSRV_DEV_INFO psDevInfo, DWORD dwLCD,
PDEV_LCD_CONFIG psConfig);
void DevConfigHostLCDFormat(PPVRSRV_DEV_INFO psDevInfo, DEV_GIB_FORMAT eFormat);
void DevMemoryDrain(PPVRSRV_DEV_INFO psDevInfo);
#else
#ifdef SUPPORT_KYRO_AS_MBX_DEVICE
#define DevSDRAMSetState(a,b)
bool DevCoreQuery(PPVRSRV_DEV_INFO psDevInfo, DWORD dwCore);
void DevSetPowerState(PPVRSRV_DEV_INFO psDevInfo, PVR_POWER_STATE eState);
#define DevWriteLEDData(a)
#define DevWriteLEDBits(a)
#define DevReadUserSwitches() 0
#define DevSetPixClkFrequency(a,b) 0
#define DevSetPWM(a,b,c,d) 0
#define DevConfigLCD(a,b,c)
#define DevConfigHostLCDFormat(a,b)
#define DevMemoryDrain(a)
#else
#define DevSDRAMSetState(a,b)
#define DevCoreQuery(a,b) TRUE
#define DevWriteLEDData(a)
#define DevWriteLEDBits(a)
#define DevReadUserSwitches() 0
#define DevSetPixClkFrequency(a,b) 0
#define DevSetPowerState(a,b) 0
#define DevSetPWM(a,b,c,d) 0
#define DevConfigLCD(a,b,c)
#define DevConfigHostLCDFormat(a,b)
#define DevMemoryDrain(a)
#endif
#endif
/* IMG_UINT32 DevDisableInterrupts(PPVRSRV_DEV_INFO psDevInfo); */
/* IMG_UINT32 DevEnableInterrupts(PPVRSRV_DEV_INFO psDevInfo); */
/* IMG_UINT32 DevDecodeInterrupts(PPVRSRV_DEV_INFO psDevInfo); */
IMG_VOID DevDisableVBlank(PPVRSRV_DEV_INFO psDevInfo);
IMG_VOID DevEnableVBlank(PPVRSRV_DEV_INFO psDevInfo);
#define DEV_INTERRUPT_TYPE_MBX 1
#define DEV_INTERRUPT_TYPE_M24VA 2
#define DEV_INTERRUPT_TYPE_VBLANK 4
#if defined(USE_INLINE_FASTREGS)
#ifdef PDUMP
extern PDUMPTAGS_REG geDevPDUMPRegTag;
extern DWORD gdwDevPDUMPCoreOffset;
#define PDUMPREGTAG(tag,offset) {geDevPDUMPRegTag=tag; gdwDevPDUMPCoreOffset=offset;}
#define PDUMPREGMBX PDUMPREGTAG(PDUMPTAGS_REG_MBX, MBX_REG_OFFSET);
#else
#define PDUMPREGTAG(tag,offset)
#define PDUMPREGMBX
#endif
/**************************************************************************
* Function Name : WriteRegDWORD
* Inputs : psDevInfo - identifier for this device
* : dwByteOffset - byte offset of write from start of fast regs
* : dwValue - value to write
* Outputs : None
* Returns : None
* Globals Used : None
* Description : Fastregs write wrapper so we can keep a log of fast regs writes
**************************************************************************/
IMG_VOID INLINE WriteRegDWORD(PPVRSRV_DEV_INFO psDevInfo, IMG_UINT32 ui32ByteOffset, IMG_UINT32 ui32Value)
{
volatile IMG_UINT32 *pui32FastReg = (IMG_PUINT32)((IMG_PBYTE)psDevInfo->sDevMem.ui32SysRegsLinBase + ui32ByteOffset);
ASSERT1((ui32ByteOffset & 3) == 0,("WriteRegDWORD : Byte offset MUST be multiple of 4"));
DPFLX(DBG_FASTREGS, "WriteRegDWORD : Set reg 0x%lx = 0x%lx, device 0x%lx", ui32ByteOffset, ui32Value, psDevInfo);
/* Write value */
*pui32FastReg = ui32Value;
PDUMPREG(geDevPDUMPRegTag, ui32ByteOffset - gdwDevPDUMPCoreOffset, ui32Value);
}
/**************************************************************************
* Function Name : ReadRegDWORD
* Inputs : psDevInfo - identifier for this device
* : dwByteOffset - byte offset of write from start of fast regs
* : dwValue - value to write
* Outputs : DWORD - The read value
* Returns : None
* Globals Used : None
* Description : Fastregs write wrapper so we can keep a log of fast regs writes
**************************************************************************/
INLINE IMG_UINT32 ReadRegDWORD(PPVRSRV_DEV_INFO psDevInfo, IMG_UINT32 ui32ByteOffset)
{
volatile IMG_UINT32* pui32FastReg = (IMG_PUINT32)((IMG_PBYTE)psDevInfo->sDevMem.ui32SysRegsLinBase + ui32ByteOffset);
IMG_UINT32 ui32Value;
ASSERT1((ui32ByteOffset & 3) == 0,("WriteRegDWORD : Byte offset MUST be multiple of 4"));
DPFLX(DBG_FASTREGS, "ReadRegDWORD : Read reg 0x%lx, device 0x%lx", ui32ByteOffset, psDevInfo);
/* Read value */
ui32Value = *pui32FastReg;
return ui32Value;
}
#endif /* #if defined(USE_INLINE_FASTREGS) */
#endif /* __DEVICE_H__ */
/*****************************************************************************
End of file (DEVICE.H)
*****************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -