📄 smi.cpp
字号:
return (FALSE);
// make sure the card is enabled
// -- some platforms may only enable one video card
USHORT newCommand = 0x1E; //pciConfig.Command | 0x07;
HalSetBusDataByOffset (PCIConfiguration, bus,
slotNumber.u.AsULONG, &newCommand, 0x04, 0x02);
return (TRUE);
}
}
}
}
}
}
return (FALSE);
#endif // WCEFA
}
//
// GetSingleSYSINTR
//
// Inputs: hkDrv = registry key handle
// VarName = name of the registry variable
//
// Outputs: SYSINTR value
//
// Returns: None
//
DWORD GetSingleValue(HKEY hkDrv, LPCTSTR lpszVarName, ULONG dwDefault = 0)
{
DWORD dwType;
DWORD dwVal;
DWORD dwSize = sizeof(DWORD);
if (RegQueryValueEx(hkDrv, lpszVarName, NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
return dwVal;
}
else
{
return dwDefault;
}
}
//
// QueryRegistrySetting
//
// Inputs: lpRegString = The Windows CE registry key for the settings
// lpSettings = Pointer to SMISETTINGS class
//
// Outputs: lpSettings = Contains the registry settings
//
// Returns: None
//
void QueryRegistrySetting(LPCTSTR lpRegString, SMISETTINGS *lpSettings)
{
HKEY hkDrv = NULL;
DWORD dwType, dwSize, dwVal;
DWORD dwStatus;
// open a handle to Driver configuration information
dwStatus = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpRegString, 0, 0, &hkDrv);
if(dwStatus != ERROR_SUCCESS)
return;
dwSize = sizeof(DWORD);
// Read the bpp of the display(s)
if (RegQueryValueEx(hkDrv, TEXT("Bpp"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - Bpp = %d.\r\n"),
dwVal));
lpSettings->m_dwBpp = dwVal;
}
if (RegQueryValueEx(hkDrv, TEXT("CxScreen"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - Screen Width = %d.\r\n"),
dwVal));
lpSettings->m_dwCxScreen = dwVal;
}
if (RegQueryValueEx(hkDrv, TEXT("CyScreen"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - Screen Height = %d.\r\n"),
dwVal));
lpSettings->m_dwCyScreen = dwVal;
}
if (RegQueryValueEx(hkDrv, TEXT("CxPanel"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - Panel Width = %d.\r\n"),
dwVal));
lpSettings->m_dwCxPanel = dwVal;
}
if (RegQueryValueEx(hkDrv, TEXT("CyPanel"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - Panel Height = %d.\r\n"),
dwVal));
lpSettings->m_dwCyPanel = dwVal;
}
if (RegQueryValueEx(hkDrv, TEXT("PanningX"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - Panel Origin X = %d.\r\n"),
dwVal));
lpSettings->m_dwPanningX = dwVal;
}
if (RegQueryValueEx(hkDrv, TEXT("PanningY"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - Panning Origin Y = %d.\r\n"),
dwVal));
lpSettings->m_dwPanningY = dwVal;
}
// Read all special feature here in form of
// "F<FeatureName>" ie. FDualApp, FRotation, FRotationAngle, etc
if (RegQueryValueEx(hkDrv, TEXT("Angle"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - Rotation Angle = %d.\r\n"),
dwVal));
lpSettings->m_nRotateAngle = dwVal;
}
if (RegQueryValueEx(hkDrv, TEXT("RefreshRate"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - Refresh Rate = %d.\r\n"),
dwVal));
lpSettings->m_nFrequency = dwVal;
}
if (RegQueryValueEx(hkDrv, TEXT("TestClock"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - TestClock = %d.\r\n"),
dwVal));
lpSettings->m_nTestClock = dwVal;
}
if (RegQueryValueEx(hkDrv, TEXT("CxZoom"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - CxZoom = %d.\r\n"),
dwVal));
lpSettings->m_dwCxZoom = dwVal;
}
if (RegQueryValueEx(hkDrv, TEXT("CyZoom"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - CyZoom = %d.\r\n"),
dwVal));
lpSettings->m_dwCyZoom = dwVal;
}
if (RegQueryValueEx(hkDrv, TEXT("CursorZoom"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - CursorZoom = %d.\r\n"),
dwVal));
lpSettings->m_nCursorZoomEnabled = dwVal;
}
// Query the "DisplayType" setting in the registry. Default is PANEL_OUTPUT.
if (RegQueryValueEx(hkDrv, TEXT("DisplayType"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - DisplayType = %d.\r\n"),
dwVal));
lpSettings->m_nDisplayType = (BOOL) dwVal;
}
// Query the "SaveRestore" setting in the registry. Default is 0.
if (RegQueryValueEx(hkDrv, TEXT("SaveRestore"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - SaveRestore = %d.\r\n"),
dwVal));
lpSettings->m_nSaveRestoreEnabled = (BOOL) dwVal;
}
// Query the "SaveSurface" setting in the registry. Default is FALSE.
if (RegQueryValueEx(hkDrv, TEXT("SaveSurface"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("Selecting SaveSurface mode = %d.\r\n"),
dwVal));
g_bSaveSurface = (BOOL) dwVal;
}
// Read all special panel here in form of
// "P<Company><Width>x<Height><Model/Customer>" ie. PTosh400x234N (N for Nextech)
// The following 2 options are deprecated
if (RegQueryValueEx(hkDrv, TEXT("MSTN320x240"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - MSTN320x240 = %d.\r\n"),
dwVal));
if (dwVal != 0)
lpSettings->SetPanelType(SSP_HITACHI320x240MSTN);
}
if (RegQueryValueEx(hkDrv, TEXT("Plexus_800x600TFT"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - Plexus_800x600TFT = %d.\r\n"),
dwVal));
if (dwVal != 0)
lpSettings->SetPanelType(SSP_PLEXUS800x600TFT);
}
// This is the new method
if (RegQueryValueEx(hkDrv, TEXT("PanelType"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - PanelType = 0x%08X.\r\n"),
dwVal));
lpSettings->SetPanelType(dwVal);
}
// Read back special mode table register data
DWORD dwBuf[SSS_MAX];
DWORD dwBufSize = SSS_MAX*sizeof(DWORD);
ZeroMemory(dwBuf, dwBufSize);
if (RegQueryValueEx(hkDrv, TEXT("PanelSettings"), NULL, &dwType,
(LPBYTE)dwBuf, &dwBufSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - PanelSettings = 0x%08X.\r\n"),
dwBuf[0]));
lpSettings->SetPanelSettings(dwBuf);
}
if (RegQueryValueEx(hkDrv, TEXT("Gamma"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - Gamma = %d.\r\n"),
dwVal));
lpSettings->m_nGamma = dwVal;
}
if (RegQueryValueEx(hkDrv, TEXT("OverlayDisabled"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - OverlayDisabled = %d.\r\n"),
dwVal));
lpSettings->m_bOverlayDisabled = dwVal;
}
if (RegQueryValueEx(hkDrv, TEXT("CSCDisabled"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - CSCDisabled = %d.\r\n"),
dwVal));
lpSettings->m_bCSCDisabled = dwVal;
}
#if defined(HOST_ENABLE)
if (RegQueryValueEx(hkDrv, TEXT("FB_BASE"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - FrameBuffer Base = %d.\r\n"),
dwVal));
RETAILMSG(1, (TEXT("SMIVGX - FrameBuffer Base = 0x%08X.\r\n"),
dwVal));
lpSettings->m_nLAWPhysical = dwVal;
}
if (RegQueryValueEx(hkDrv, TEXT("FG_BASE"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - Register Base = %d.\r\n"),
dwVal));
RETAILMSG(1, (TEXT("SMIVGX - Register Base = 0x%08X.\r\n"),
dwVal));
lpSettings->m_nREGPhysical = dwVal;
}
#endif
#ifdef CMDLIST
if (RegQueryValueEx(hkDrv, TEXT("CMDLISTBUF_ADDR"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - CMDlist buffer Base = %d.\r\n"),
dwVal));
RETAILMSG(1, (TEXT("SMIVGX - CMDlist buffer Base = 0x%08X.\r\n"),
dwVal));
lpSettings->m_cmdlist_address = dwVal;
}
if (RegQueryValueEx(hkDrv, TEXT("CMDLISTBUF_SIZE"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - CMDlist buffer size = %d.\r\n"),
dwVal));
RETAILMSG(1, (TEXT("SMIVGX - CMDlist buffer size = 0x%08X.\r\n"),
dwVal));
lpSettings->m_cmdlist_size = dwVal;
}
#endif
if (RegQueryValueEx(hkDrv, TEXT("SDRAM_BASE"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - SDRAM Base = %d.\r\n"),
dwVal));
RETAILMSG(1, (TEXT("SMIVGX - SDRAM Base = 0x%08X.\r\n"),
dwVal));
lpSettings->m_sdrambase = dwVal;
}
#ifdef VGXDMA
if (RegQueryValueEx(hkDrv, TEXT("VGXDMABUF_ADDR"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - VGXDMA buffer Base = %d.\r\n"),
dwVal));
RETAILMSG(1, (TEXT("SMIVGX - VGXDMA buffer Base = 0x%08X.\r\n"),
dwVal));
lpSettings->m_VGXDMA_address = dwVal;
}
if (RegQueryValueEx(hkDrv, TEXT("VGXDMABUF_SIZE"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - VGXDMA buffer size = %d.\r\n"),
dwVal));
RETAILMSG(1, (TEXT("SMIVGX - VGXDMA buffer size = 0x%08X.\r\n"),
dwVal));
lpSettings->m_VGXDMA_size = dwVal;
}
#endif
#ifndef DISABLE_INTERRUPT_MANAGEMENT
lpSettings->m_IntInfo.SYSINTR = GetSingleValue(hkDrv, TEXT("VgxSysIntr"));
#endif
// Read Power Monitor initial state
#ifdef FORCE_INITIAL_OFF
lpSettings->m_bEnablePowerMonitor = FALSE;
MESSAGE(MESSAGE_ZONE, (TEXT("QueryRegistrySetting() - Initial state of Power Monitor: forced %s\r\n"),
lpSettings->m_bEnablePowerMonitor? TEXT("ON") : TEXT("OFF")));
#else
if (RegQueryValueEx(hkDrv, TEXT("PowerMonitor"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
lpSettings->m_bEnablePowerMonitor = dwVal? TRUE : FALSE;
MESSAGE(MESSAGE_ZONE, (TEXT("QueryRegistrySetting() - Initial state of Power Monitor: %s\r\n"),
lpSettings->m_bEnablePowerMonitor? TEXT("ON") : TEXT("OFF")));
}
else
{
// Default value is PCIBus
lpSettings->m_bEnablePowerMonitor = FALSE;
MESSAGE(MESSAGE_ZONE, (TEXT("QueryRegistrySetting() - Initial state of Power Monitor: auto %s\r\n"),
lpSettings->m_bEnablePowerMonitor? TEXT("ON") : TEXT("OFF")));
}
#endif
RegCloseKey(hkDrv);
}
//
// QueryRegistrySettingLoadcepc (called when /L option used with Loadcepc)
//
// Inputs: lpRegString = The Windows CE registry key for the settings
// lpSettings = Pointer to SMISETTINGS class
//
// Outputs: lpSettings = Contains the registry settings
//
// Returns: None
//
void QueryRegistrySettingLoadcepc(LPCTSTR lpRegString, SMISETTINGS *lpSettings)
{
HKEY hkDrv = NULL;
DWORD dwType, dwSize, dwVal;
DWORD dwStatus;
// open a handle to Driver configuration information
dwStatus = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpRegString,0,0, &hkDrv);
if(dwStatus != ERROR_SUCCESS)
return;
dwSize = sizeof(DWORD);
if (RegQueryValueEx(hkDrv, TEXT("RefreshRate"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - Refresh Rate = %d.\r\n"),
dwVal));
lpSettings->m_nFrequency = dwVal;
}
if (RegQueryValueEx(hkDrv, TEXT("TestClock"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - TestClock = %d.\r\n"),
dwVal));
lpSettings->m_nTestClock = dwVal;
}
// Query the "DisplayType" setting in the registry. Default is PANEL_OUTPUT.
if (RegQueryValueEx(hkDrv, TEXT("DisplayType"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - DisplayType = %d.\r\n"),
dwVal));
lpSettings->m_nDisplayType = (BOOL) dwVal;
}
// Query the "SaveRestore" setting in the registry. Default is 0.
if (RegQueryValueEx(hkDrv, TEXT("SaveRestore"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - SaveRestore = %d.\r\n"),
dwVal));
lpSettings->m_nSaveRestoreEnabled = (BOOL) dwVal;
}
// Query the "SaveSurface" setting in the registry. Default is FALSE.
if (RegQueryValueEx(hkDrv, TEXT("SaveSurface"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("Selecting SaveSurface mode = %d.\r\n"),
dwVal));
g_bSaveSurface = (BOOL) dwVal;
}
#if defined(HOST_ENABLE)
if (RegQueryValueEx(hkDrv, TEXT("FB_BASE"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - FrameBuffer Base = %d.\r\n"),
dwVal));
RETAILMSG(1, (TEXT("SMIVGX - FrameBuffer Base = 0x%08X.\r\n"),
dwVal));
lpSettings->m_nLAWPhysical = dwVal;
}
if (RegQueryValueEx(hkDrv, TEXT("FG_BASE"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - Register Base = %d.\r\n"),
dwVal));
RETAILMSG(1, (TEXT("SMIVGX - Register Base = 0x%08X.\r\n"),
dwVal));
lpSettings->m_nREGPhysical = dwVal;
}
#endif
#ifdef CMDLIST
if (RegQueryValueEx(hkDrv, TEXT("CMDLISTBUF_ADDR"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - CMDlist buffer Base = %d.\r\n"),
dwVal));
RETAILMSG(1, (TEXT("SMIVGX - CMDlist buffer Base = 0x%08X.\r\n"),
dwVal));
lpSettings->m_cmdlist_address = dwVal;
}
if (RegQueryValueEx(hkDrv, TEXT("CMDLISTBUF_SIZE"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - CMDlist buffer size = %d.\r\n"),
dwVal));
RETAILMSG(1, (TEXT("SMIVGX - CMDlist buffer size = 0x%08X.\r\n"),
dwVal));
lpSettings->m_cmdlist_size = dwVal;
}
#endif
if (RegQueryValueEx(hkDrv, TEXT("SDRAM_BASE"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - SDRAM Base = %d.\r\n"),
dwVal));
RETAILMSG(1, (TEXT("SMIVGX - SDRAM Base = 0x%08X.\r\n"),
dwVal));
lpSettings->m_sdrambase = dwVal;
}
#ifdef VGXDMA
if (RegQueryValueEx(hkDrv, TEXT("VGXDMABUF_ADDR"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -