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 + -
显示快捷键?