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

📄 smi.cpp

📁 VoyagerGX display driver for Windows CE .NET 5.XX Silicon Motion, Inc. VoyagerGX Driver is architec
💻 CPP
📖 第 1 页 / 共 4 页
字号:
								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 + -