halwrapper.c
来自「SAMSUNG S3C6410 CPU BSP for winmobile6」· C语言 代码 · 共 535 行 · 第 1/2 页
C
535 行
HALWP_INF_PRINT((TEXT("[HALWP:INF] nCtrlCode = PS_HAL_BML_READXID\r\n")));
nRet = BML_GetVolInfo(nVol, &stVolSpec);
*pResult = (UINT32)nRet;
if (nRet != BML_SUCCESS)
{
HALWP_ERR_PRINT((TEXT("[HALWP:ERR] READXID Error\r\n")));
return FALSE;
}
/* Size? XSR_UID_SIZE */
memcpy(pInOutBuf, &stVolSpec.aUID[0], XSR_UID_SIZE);
for ( nIndex=0; nIndex < XSR_UID_SIZE; nIndex++)
{
HALWP_INF_PRINT((TEXT("[HALWP:INF] aUID[%d] = 0x%x\r\n"), nIndex, stVolSpec.aUID[nIndex]));
}
}
break;
#if 0
case PS_HAL_BML_GET_PARTITIONINFO:
{
XSRPartI *pstPartI;
UINT nByteRet;
pstPartI = (XSRPartI*)pInOutBuf;
*pResult = (UINT32)BML_IOCtl(nVol, /* Vol Number */
BML_IOCTL_GET_FULL_PI, /* IO Control Code */
(UINT8 *)NULL, /* *pBufIn */
(UINT32 )0, /* nLenIn */
(UINT8 *)pstPartI, /* *pBufOut */
(UINT32 )sizeof(XSRPartI), /* nLenOut */
(UINT32*)&nByteRet); /* pBytesReturned */
if (nByteRet != sizeof(XSRPartI))
{
*pResult = (UINT32)BML_CRITICAL_ERROR;
}
}
break;
#endif
case PS_HAL_BML_GET_PARTITIONENTRYINFO:
{
XSRPartEntry *pstPartE;
HALWP_INF_PRINT((TEXT("[HALWP:INF] nCtrlCode = PS_HAL_BML_GET_PARTITIONENTRYINFO\r\n")));
pstPartE = (XSRPartEntry*)pInOutBuf;
HALWP_INF_PRINT((TEXT("[HALWP:INF] nCtrlCode = PS_HAL_BML_GET_PARTITIONENTRYINFO\r\n")));
HALWP_INF_PRINT((TEXT("[HALWP:INF] pstInPacket->nVol = %d\r\n"), pstInPacket->nVol));
HALWP_INF_PRINT((TEXT("[HALWP:INF] pstPartE->nID = %d\r\n"), pstPartE->nID));
*pResult = (UINT32)BML_LoadPIEntry(nVol, /* Volume Number */
pstPartE->nID, /* Partition Entry ID */
pstPartE); /* Pointer to Partition Entry */
}
break;
case PS_HAL_BML_GET_VOLUMEINFO:
HALWP_INF_PRINT((TEXT("[HALWP:INF] nCtrlCode = PS_HAL_BML_GET_VOLUMEINFO\r\n")));
HALWP_INF_PRINT((TEXT("[HALWP:INF] nVol = %d\r\n"), nVol));
*pResult = (UINT32)BML_GetVolInfo(nVol, (BMLVolSpec*)pInOutBuf);
break;
case PS_HAL_BML_FORMAT:
HALWP_INF_PRINT((TEXT("[HALWP:INF] nCtrlCode = PS_HAL_BML_FORMAT\r\n")));
HALWP_INF_PRINT((TEXT("[HALWP:INF] nVol = %d\r\n"), nVol));
HALWP_INF_PRINT((TEXT("[HALWP:INF] nFlag = 0x%x\r\n"), (UINT32)nFlag));
*pResult = (UINT32)BML_Format(nVol,
(XSRPartI*)pInOutBuf,
nFlag);
break;
//-------------------------------------------------------------------------------------------//
#if 0 // for XSR v1.3.1 @kathy
case PS_HAL_BML_GET_PLANENUM:
HALWP_INF_PRINT((TEXT("[HALWP:INF] nCtrlCode = PS_HAL_BML_GET_PLANENUM\r\n")));
HALWP_INF_PRINT((TEXT("[HALWP:INF] nVol = %d\r\n"), nVol));
HALWP_INF_PRINT((TEXT("[HALWP:INF] nVbn = %d(0x%x)\r\n"), nVbn));
*pResult = (UINT32)BML_GetPlaneNum(nVol,
nVbn,
(UINT32*)pInOutBuf);
break;
#endif
//-------------------------------------------------------------------------------------------//
case PS_HAL_BML_COPY:
HALWP_INF_PRINT((TEXT("[HALWP:INF] nCtrlCode = PS_HAL_BML_COPY\r\n")));
HALWP_INF_PRINT((TEXT("[HALWP:INF] nVol = %d\r\n"), nVol));
HALWP_INF_PRINT((TEXT("[HALWP:INF] nFlag = 0x%x\r\n"), (UINT32)nFlag));
*pResult = (UINT32)BML_Copy(nVol,
(CopyArg*)pInOutBuf,
nFlag);
break;
case PS_HAL_BML_CPBACK:
HALWP_INF_PRINT((TEXT("[HALWP:INF] nCtrlCode = PS_HAL_BML_CPBACK\r\n")));
HALWP_INF_PRINT((TEXT("[HALWP:INF] nVol = %d\r\n"), nVol));
HALWP_INF_PRINT((TEXT("[HALWP:INF] nFlag = 0x%x\r\n"), (UINT32)nFlag));
*pResult = (UINT32)BML_CopyBack(nVol,
(CpBkArg*)pInOutBuf,
nFlag);
break;
case PS_HAL_BML_FLUSHOP:
HALWP_INF_PRINT((TEXT("[HALWP:INF] nCtrlCode = PS_HAL_BML_FLUSHOP\r\n")));
HALWP_INF_PRINT((TEXT("[HALWP:INF] nVol = %d\r\n"), nVol));
HALWP_INF_PRINT((TEXT("[HALWP:INF] nFlag = 0x%x\r\n"), (UINT32)nFlag));
*pResult = (UINT32)BML_FlushOp(nVol, nFlag);
break;
#if 0 //koogi-2006.01.09 /* removed for XSR v1.5.x */
case PS_HAL_BML_REPLACEBLK:
HALWP_INF_PRINT((TEXT("[HALWP:INF] nCtrlCode = PS_HAL_BML_REPLACEBLK\r\n")));
HALWP_INF_PRINT((TEXT("[HALWP:INF] nVol = %d\r\n"), nVol));
HALWP_INF_PRINT((TEXT("[HALWP:INF] nVbn = %d(0x%x)\r\n"), nVbn));
*pResult = (UINT32)BML_ReplaceBlk(nVol, nVbn);
break;
#endif
case PS_HAL_BML_SET_PARTITIONEXT:
HALWP_INF_PRINT((TEXT("[HALWP:INF] nCtrlCode = PS_HAL_BML_SET_PARTITIONEXT\r\n")));
HALWP_INF_PRINT((TEXT("[HALWP:INF] nVol = %d\r\n"), nVol));
*pResult = (UINT32)BML_StorePIExt(nVol, (XSRPIExt*)pInOutBuf);
break;
case PS_HAL_BML_GET_PARTITIONEXT:
HALWP_INF_PRINT((TEXT("[HALWP:INF] nCtrlCode = PS_HAL_BML_GET_PARTITIONEXT\r\n")));
HALWP_INF_PRINT((TEXT("[HALWP:INF] nVol = %d\r\n"), nVol));
HALWP_INF_PRINT((TEXT("[HALWP:INF] nVbn = %d(0x%x)\r\n"), nVbn));
/* nVbn is used as nID temporary */
*pResult = (UINT32)BML_LoadPIExt(nVol, nVbn, (XSRPIExt*)pInOutBuf);
break;
case PS_HAL_BML_IOCTL:
{
BMLIOCtlPacket *pstBMLIOCtl;
pstBMLIOCtl = (BMLIOCtlPacket*)pInOutBuf;
HALWP_INF_PRINT((TEXT("[HALWP:INF] nCtrlCode = PS_HAL_BML_IOCTL\r\n")));
HALWP_INF_PRINT((TEXT("[HALWP:INF] IOCtlCode = %d\r\n"), pstBMLIOCtl->nCode));
*pResult = (UINT32)BML_IOCtl(nVol, /* Vol Number */
pstBMLIOCtl->nCode, /* IO Control Code */
pstBMLIOCtl->pBufIn, /* *pBufIn */
pstBMLIOCtl->nLenIn, /* nLenIn */
pstBMLIOCtl->pBufOut, /* *pBufOut */
pstBMLIOCtl->nLenOut, /* nLenOut */
pstBMLIOCtl->pByteRet); /* pBytesReturned */
}
break;
#ifndef LLD_OCLD
case PS_HAL_LLD_OTP_READ:
{
INT32 nErr;
HALWP_LOG_PRINT((TEXT("[HALWP: IN] ++ONLD_OTP_Read()\r\n")));
nErr = ONLD_OTP_Read(nVol,
nVsn,
nNumOfScts,
pMBuf,
pSBuf,
nFlag ); // Access OTP area
if (nErr != LLD_SUCCESS)
{
HALWP_ERR_PRINT((TEXT("[HALWP:ERR] ONLD_OTP_Read Error!\r\n")));
return FALSE32;
}
HALWP_LOG_PRINT((TEXT("[HALWP:OUT] --ONLD_OTP_Read()\r\n")));
return TRUE32;
}
break;
case PS_HAL_LLD_OTP_WRITE:
{
INT32 nErr;
/* We can only write OTP from page#0 to page#9 */
if ( nVsn >= 4*10 )
{
HALWP_ERR_PRINT((TEXT("[HALWP:ERR] Invalid nPsn (Not in OTP user area)\r\n")));
return FALSE32;
}
HALWP_LOG_PRINT((TEXT("[HALWP: IN] ++LLD_OTP_Write()\r\n")));
nErr = ONLD_OTP_Write(nVol,
nVsn,
nNumOfScts,
pMBuf,
pSBuf, // Be carefull for OTP lock!!!
nFlag ); // Access OTP area
if (nErr != LLD_SUCCESS)
{
HALWP_ERR_PRINT((TEXT("[HALWP:ERR] ONLD_OTP_Write Error!\r\n")));
return FALSE32;
}
HALWP_LOG_PRINT((TEXT("[HALWP:OUT] --LLD_OTP_Write()\r\n")));
return TRUE32;
}
break;
case PS_HAL_LLD_OTP_STATUS:
{
XsrVolParm* pstParm;
UINT32 nBAddr;
UINT16* pReg;
pstParm = (XsrVolParm*)PAM_GetPAParm();
nBAddr = OAM_Pa2Va(pstParm[nVol].nBaseAddr[0]); //Get OneNAND base address
pReg = (UINT16*)(nBAddr+0x1E480); //Get the pointer of OneNAND controller status register
HALWP_LOG_PRINT( (TEXT("[OTP:INF] The value of OneNAND controller status register=0x%x\r\n"), *pReg));
*pResult = 0;
switch(*pSBuf)
{
case 0: //OTP Lock
if(*pReg & 0x0040) {
*pResult = 1;
}
break;
case 1: // 1st Block OTP Lock
if(*pReg & 0x0020) {
*pResult = 1;
}
break;
default:
HALWP_ERR_PRINT( (TEXT("[HALWP:ERR] PS_HAL_LLD_OTP_STATUS: nLock(%d) is unknown.\r\n"), *pSBuf));
return FALSE;
}
}
break;
#endif
case PS_HAL_OND_POWERUP:
HALWP_INF_PRINT((TEXT("[HALWP:INF] nCtrlCode = PS_HAL_OND_POWERUP\r\n")));
HALWP_INF_PRINT((TEXT("[HALWP:INF] nVol = %d\r\n"), nVol));
HALWP_INF_PRINT((TEXT("[HALWP:INF] nVbn = 0x%x\r\n"), nVbn));
HALWP_INF_PRINT((TEXT("[HALWP:INF] nNumOfBlks = 0x%x\r\n"), nNumOfScts));
*pResult = (UINT32)ONLD_PowerUp(nVol, nVbn, nNumOfScts);
break;
default:
return FALSE;
}
HALWP_LOG_PRINT((TEXT("[HALWP:OUT] --PSII_HALWrapper()\r\n")));
return TRUE;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?