📄 smi.cpp
字号:
pss->m_pREG = (unsigned char *)VirtualAddress(pss->m_nREGPhysical, pss->RegMemorySize());
RETAILMSG(1, (TEXT("m_pREG = 0x%08X\r\n"), pss->m_pREG));
return (TRUE);
// ****************************************************************
#else // For Regular CEPC detection
PCI_SLOT_NUMBER slotNumber;
ULONG bus, device, function;
ULONG length;
PCI_COMMON_CONFIG pciConfig;
int nMonNo = nMonitorNo;
for (bus = 0; bus < PCI_MAX_BUS; bus++)
{
for (device = 0; device < PCI_MAX_DEVICES; device++)
{
slotNumber.u.bits.DeviceNumber = device;
for (function = 0; function < PCI_MAX_FUNCTION; function++)
{
slotNumber.u.bits.FunctionNumber = function;
length = HalGetBusDataByOffset(PCIConfiguration, bus,
slotNumber.u.AsULONG, &pciConfig,
0, sizeof(pciConfig));
if (length == 0 || pciConfig.VendorID == 0xFFFF)
break;
else
{
if ((pciConfig.VendorID == PCI_VENDOR_SMI) &&
(pciConfig.BaseClass == PCI_CLASS_DISPLAY) &&
((pciConfig.SubClass == PCI_SUBCLASS_DISPLAY) || (pciConfig.SubClass == 0x80))
)
{
if (pss->isSupportedChipID(pciConfig.DeviceID))
{
// Check counter to make sure that we find the
// correct card instance
if (nMonNo-- != 0)
break;
length = HalGetBusDataByOffset(PCIConfiguration, bus,
slotNumber.u.AsULONG, &pciConfig,
0, sizeof(pciConfig));
// Patch Alpha chip and its ID
if ((pciConfig.RevisionID == 0xA0) &&
(pciConfig.DeviceID == CHIPID_SM501ALPHA)) // RevA Patch
{
DWORD dwBaseAdd = 0x80000000; //pciConfig.Command | 0x07;
HalSetBusDataByOffset (PCIConfiguration, bus,
slotNumber.u.AsULONG, &dwBaseAdd, 0x10, 0x04);
length = HalGetBusDataByOffset(PCIConfiguration, bus,
slotNumber.u.AsULONG, &pciConfig,
0, sizeof(pciConfig));
}
if (pciConfig.DeviceID == CHIPID_SM501ALPHA)
pciConfig.DeviceID = CHIPID_SM501;
pss->m_nChipID = pciConfig.DeviceID;
pss->m_IRQ = pciConfig.u.type0.InterruptLine;
pss->m_nLAWPhysical = pciConfig.u.type0.BaseAddresses[0];
pss->m_nREGPhysical = pciConfig.u.type0.BaseAddresses[1];
pss->m_nBusNo = bus;
pss->m_nSlotNo = slotNumber.u.AsULONG;
pss->m_pLAW = VirtualAddress(pss->m_nLAWPhysical,
pss->MaxVideoMemorySize());
if (pss->m_pLAW == NULL)
return (FALSE);
pss->m_pREG = VirtualAddress(pss->m_nREGPhysical,
pss->RegMemorySize());
if (pss->m_pREG == NULL)
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 (RegQueryValueEx(hkDrv, TEXT("CrystalFrequency"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - CrystalFreqency = %d.\r\n"),
dwVal));
RETAILMSG(1, (TEXT("SMIVGX - CrystalFreqency = 0x%08X.\r\n"),
dwVal));
g_CrystalFreqency = dwVal;
}
if (RegQueryValueEx(hkDrv, TEXT("VideoInterpolation"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - VideoInterpolation = %d.\r\n"),
dwVal));
RETAILMSG(1, (TEXT("SMIVGX - VideoInterpolation = 0x%08X.\r\n"),
dwVal));
g_VideoInterpolation = dwVal;
}
if (RegQueryValueEx(hkDrv, TEXT("FixedColorKey"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - FixedColorKey = %d.\r\n"),
dwVal));
RETAILMSG(1, (TEXT("SMIVGX - FixedColorKey = 0x%08X.\r\n"),
dwVal));
g_FixedColorKey = dwVal;
}
if (RegQueryValueEx(hkDrv, TEXT("WaitVsync"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - WaitVsync = %d.\r\n"),
dwVal));
RETAILMSG(1, (TEXT("SMIVGX - WaitVsync = 0x%08X.\r\n"),
dwVal));
g_WaitVsync = dwVal;
}
if (RegQueryValueEx(hkDrv, TEXT("SetPowerCEPC"), NULL, &dwType,
(LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
{
DEBUGMSG(GPE_ZONE_INIT, (TEXT("SMIVGX - SetPowerCEPC = %d.\r\n"),
dwVal));
RETAILMSG(1, (TEXT("SMIVGX - SetPowerCEPC = 0x%08X.\r\n"),
dwVal));
g_SetPowerCEPC = 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"),
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -