📄 ioctl.c
字号:
else
{
// Check the boot arg structure for the default display settings.
__try
{
((PDWORD)lpOutBuf)[0] = (DWORD)LCD_WIDTH;
((PDWORD)lpOutBuf)[1] = (DWORD)LCD_HEIGHT;
((PDWORD)lpOutBuf)[2] = (DWORD)LCD_BPP;
if (lpBytesReturned)
{
*lpBytesReturned = sizeof (DWORD)*3;
}
}
__except(GetExceptionCode()==STATUS_ACCESS_VIOLATION ?
EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
{
dwErr = ERROR_INVALID_PARAMETER;
}
}
if (dwErr)
{
OALMSG(OAL_ERROR, (TEXT("[OAL:ERR] OALIoCtlHalQueryDisplaySettings() Failed dwErr = 0x%08x\r\n"), dwErr));
NKSetLastError(dwErr);
}
OALMSG(OAL_IOCTL&&OAL_FUNC, (TEXT("++OALIoCtlHalQueryDisplaySettings()\r\n")));
return !dwErr;
}
//------------------------------------------------------------------------------
//
// Function: OALIoCtlHalSetSystemLevel
//
// For Testing DVS level manually
// NOTE!!! Remove UpdateDVS() in the OALTimerIntrHandler() function
//
static BOOL OALIoCtlHalSetSystemLevel(
UINT32 dwIoControlCode, VOID *lpInBuf, UINT32 nInBufSize,
VOID *lpOutBuf, UINT32 nOutBufSize, UINT32* lpBytesReturned)
{
DWORD dwErr = 0;
DWORD dwTargetLevel;
OALMSG(OAL_IOCTL&&OAL_FUNC, (TEXT("++OALIoCtlHalSetSystemLevel()\r\n")));
if (lpBytesReturned)
{
*lpBytesReturned = 0;
}
if (lpInBuf == NULL)
{
dwErr = ERROR_INVALID_PARAMETER;
}
else if (sizeof(DWORD) > nInBufSize)
{
dwErr = ERROR_INSUFFICIENT_BUFFER;
}
else
{
__try
{
dwTargetLevel = *((PDWORD)lpInBuf);
if (dwTargetLevel >= SYS_LEVEL_MAX)
{
dwErr = ERROR_INVALID_PARAMETER;
}
else
{
ChangeDVSLevel((SYSTEM_ACTIVE_LEVEL)dwTargetLevel);
}
}
__except(GetExceptionCode()==STATUS_ACCESS_VIOLATION ?
EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
{
dwErr = ERROR_INVALID_PARAMETER;
}
}
if (dwErr)
{
OALMSG(OAL_ERROR, (TEXT("[OAL:ERR] OALIoCtlHalSetSystemLevel() Failed dwErr = 0x%08x\r\n"), dwErr));
NKSetLastError(dwErr);
}
OALMSG(OAL_IOCTL&&OAL_FUNC, (TEXT("++OALIoCtlHalSetSystemLevel()\r\n")));
return !dwErr;
}
//------------------------------------------------------------------------------
//
// Function: OALIoCtlHalProfileDVS
//
// For Profiling DVS transition and CPU idle/active rate
// NOTE!!! Enable #define DVS_LEVEL_PROFILE in DVS.c
//
static BOOL OALIoCtlHalProfileDVS(
UINT32 dwIoControlCode, VOID *lpInBuf, UINT32 nInBufSize,
VOID *lpOutBuf, UINT32 nOutBufSize, UINT32* lpBytesReturned)
{
DWORD dwErr = 0;
DWORD dwProfileOnOff;
OALMSG(OAL_IOCTL&&OAL_FUNC, (TEXT("++OALIoCtlHalProfileDVS()\r\n")));
if (lpBytesReturned)
{
*lpBytesReturned = 0;
}
if (lpInBuf == NULL)
{
dwErr = ERROR_INVALID_PARAMETER;
}
else if (sizeof(DWORD) > nInBufSize)
{
dwErr = ERROR_INSUFFICIENT_BUFFER;
}
else
{
__try
{
dwProfileOnOff = *((PDWORD)lpInBuf);
if (dwProfileOnOff == 0)
{
ProfileDVSOnOff(FALSE);
}
else
{
ProfileDVSOnOff(TRUE);
}
}
__except(GetExceptionCode()==STATUS_ACCESS_VIOLATION ?
EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
{
dwErr = ERROR_INVALID_PARAMETER;
}
}
if (dwErr)
{
OALMSG(OAL_ERROR, (TEXT("[OAL:ERR] OALIoCtlHalProfileDVS() Failed dwErr = 0x%08x\r\n"), dwErr));
NKSetLastError(dwErr);
}
OALMSG(OAL_IOCTL&&OAL_FUNC, (TEXT("++OALIoCtlHalProfileDVS()\r\n")));
return !dwErr;
}
//------------------------------------------------------------------------------
//
// Function: OALIoCtlHalClockInfo
//
// For Get Current Clock Information from register
//
// lpInBuf : NULL
// lpInBufSize : Don't care
// lpOutBuf : struct ClockInfo{}
// lpOutBuf : sizeof(struct ClockInfo{})
static BOOL OALIoCtlHalClockInfo(
UINT32 dwIoControlCode, VOID *lpInBuf, UINT32 nInBufSize,
VOID *lpOutBuf, UINT32 nOutBufSize, UINT32* lpBytesReturned)
{
DWORD dwErr = 0;
OALMSG(OAL_IOCTL&&OAL_FUNC, (TEXT("++OALIoCtlHalClockInfo()\r\n")));
if (lpBytesReturned)
{
*lpBytesReturned = 0;
}
if (lpOutBuf == NULL)
{
dwErr = ERROR_INVALID_PARAMETER;
}
else if (sizeof(ClockInfo) > nOutBufSize)
{
dwErr = ERROR_INSUFFICIENT_BUFFER;
}
else
{
__try
{
FillClockInfo(lpOutBuf);
}
__except(GetExceptionCode()==STATUS_ACCESS_VIOLATION ?
EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
{
dwErr = ERROR_INVALID_PARAMETER;
}
}
if (dwErr)
{
OALMSG(OAL_ERROR, (TEXT("[OAL:ERR] OALIoCtlHalClockInfo() Failed dwErr = 0x%08x\r\n"), dwErr));
NKSetLastError(dwErr);
}
OALMSG(OAL_IOCTL&&OAL_FUNC, (TEXT("++OALIoCtlHalClockInfo()\r\n")));
return !dwErr;
}
//------------------------------------------------------------------------------
//
// Function: OALIoCtlHalInitRegistry
//
static BOOL OALIoCtlHalInitRegistry(
UINT32 code, VOID *pInpBuffer, UINT32 inpSize, VOID *pOutBuffer,
UINT32 outSize, UINT32 *pOutSize)
{
KITLIoctl(IOCTL_HAL_INITREGISTRY, NULL, 0, NULL, 0, NULL);
return TRUE;
}
//------------------------------------------------------------------------------
//
// define PSII control
//
#define __PSII_DEFINED__
CRITICAL_SECTION csPocketStoreVFL;
#if defined(__PSII_DEFINED__)
UINT32 PSII_HALWrapper(VOID *pPacket, VOID *pInOutBuf, UINT32 *pResult);
#endif //#if defined(__PSII_DEFINED__)
#define IOCTL_POCKETSTORE_CMD CTL_CODE(FILE_DEVICE_HAL, 4070, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_POCKETSTOREII_CMD CTL_CODE(FILE_DEVICE_HAL, 4080, METHOD_BUFFERED, FILE_ANY_ACCESS)
BOOL OALIoCtlPostInit(
UINT32 code, VOID *pInpBuffer, UINT32 inpSize, VOID *pOutBuffer,
UINT32 outSize, UINT32 *pOutSize)
{
RETAILMSG(1,(TEXT("[OEMIO:INF] + IOCTL_HAL_POSTINIT\r\n")));
InitializeCriticalSection(&csPocketStoreVFL);
RETAILMSG(1,(TEXT("[OEMIO:INF] - IOCTL_HAL_POSTINIT\r\n")));
return TRUE;
}
BOOL OALIoCtlPocketStoreCMD(
UINT32 code, VOID *pInpBuffer, UINT32 inpSize, VOID *pOutBuffer,
UINT32 outSize, UINT32 *pOutSize)
{
BOOL bResult;
EnterCriticalSection(&csPocketStoreVFL);
bResult = PSII_HALWrapper(pInpBuffer, pOutBuffer, pOutSize);
LeaveCriticalSection(&csPocketStoreVFL);
if (bResult == FALSE)
{
RETAILMSG(1,(TEXT("[OEMIO:INF] * IOCTL_POCKETSTOREII_CMD Failed\r\n")));
return FALSE;
}
return TRUE;
}
//------------------------------------------------------------------------------
//
// Global: g_oalIoCtlTable[]
//
// IOCTL handler table. This table includes the IOCTL code/handler pairs
// defined in the IOCTL configuration file. This global array is exported
// via oal_ioctl.h and is used by the OAL IOCTL component.
//
const OAL_IOCTL_HANDLER g_oalIoCtlTable[] =
{
#if defined(__PSII_DEFINED__)
{ IOCTL_POCKETSTOREII_CMD, 0, OALIoCtlPocketStoreCMD },
{ IOCTL_HAL_POSTINIT, 0, OALIoCtlPostInit },
#endif //#if defined(__PSII_DEFINED__)
#include "ioctl_tab.h"
};
//------------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -