pseudobml.c

来自「SAMSUNG S3C6410 CPU BSP for winmobile6」· C语言 代码 · 共 1,257 行 · 第 1/5 页

C
1,257
字号
    BMLP_LOG_PRINT((TEXT("[BMLP: IN] ++BML_EraseBlk()\r\n")));

    do {
        /* BML_EraseBlk */
        stPacket.nVol       = nVol;
        stPacket.nCtrlCode  = PS_HAL_BML_MEraseBlk;
        stPacket.nVbn       = 0;			// Not used
        stPacket.nVsn       = 0;            // Not used
        stPacket.nNumOfScts = 0;            // Not used
        stPacket.nOpFlag    = nFlag;
        stPacket.pMBuf      = NULL;
        stPacket.pSBuf      = NULL;
        stPacket.pstMEBArg	= pstMEBArg;	// by kathy
     	stPacket.pSGLBuf = 0;				/* added for XSR v1.5.x */
    
        KernelIoControl(IOCTL_POCKETSTOREII_CMD,    /* IO Control Code  */
                        &stPacket,                  /* Input buffer     */
                        sizeof(BMLPacket),
                        NULL,                       /* Output buffer    */
                        0, 
                        &nResult);
                        
        if (nResult != BML_SUCCESS)
        {
            BMLP_ERR_PRINT((TEXT("[BMLP:ERR]  BML_EraseBlk() failure. ERR Code=%x\r\n"), nResult));
            break;
        }

    } while(0);

    BMLP_LOG_PRINT((TEXT("[BMLP:OUT] --BML_EraseBlk()\r\n")));

    return (INT32)nResult;
}

/*****************************************************************************/
/*                                                                           */
/* NAME                                                                      */
/*      BML_Copy                                                             */
/* DESCRIPTION                                                               */
/*      This function copy source virtual sector to target virtual sector    */
/*                                                                           */
/* PARAMETERS                                                                */
/*      nVol       [IN]                                                      */
/*            Volume number                                                  */
/*      pstCpArg   [IN]                                                      */
/*            pointer of CopyArg structure                                   */
/*      nFlag      [IN]                                                      */
/*            Options for copyback                                           */
/* RETURN VALUES                                                             */
/*      BML_SUCCESS                                                          */
/*            BML_CopyBack is completed                                      */
/*      BML_WR_PROTECT_ERROR                                                 */
/*            write protect error                                            */
/*      BML_CRITICAL_ERROR                                                   */
/*            critical error                                                 */
/*      BML_INVALID_PARAM                                                    */
/*            invalid parameters                                             */
/*      BML_ACQUIRE_SM_ERROR                                                 */
/*            acquiring semaphore is failed                                  */
/*      BML_RELEASE_SM_ERROR                                                 */
/*            releasing semaphore is failed                                  */
/* NOTES                                                                     */
/*      This function performs FlushOp function of LLD first                 */
/*                                                                           */
/*****************************************************************************/
INT32
BML_Copy(UINT32  nVol, CopyArg *pstCpArg, UINT32 nFlag)
{
    BMLPacket   stPacket; 
    UINT32      nResult;

    BMLP_LOG_PRINT((TEXT("[BMLP: IN] ++BML_CopyBack()\r\n")));

    do {
        /* BML_CopyBack */
        stPacket.nVol       = nVol;
        stPacket.nCtrlCode  = PS_HAL_BML_COPY;
        stPacket.nVbn       = 0;            // Not used
        stPacket.nVsn       = 0;            // Not used
        stPacket.nNumOfScts = 0;            // Not used
        stPacket.nOpFlag    = nFlag;
        stPacket.pMBuf      = NULL;
        stPacket.pSBuf      = NULL;
        stPacket.pstMEBArg	= 0;			// by kathy
    	stPacket.pSGLBuf = 0;				/* added for XSR v1.5.x */
    
        KernelIoControl(IOCTL_POCKETSTOREII_CMD,  /* IO Control Code  */
                        &stPacket,              /* Input buffer     */
                        sizeof(BMLPacket),
                        pstCpArg,               /* Output buffer    */
                        sizeof(CopyArg), 
                        &nResult);
                        
        if (nResult != BML_SUCCESS)
        {
            BMLP_ERR_PRINT((TEXT("[BMLP:ERR]  BML_CopyBack() failure. ERR Code=%x\r\n"), nResult));
            break;
        }

    } while(0);

    BMLP_LOG_PRINT((TEXT("[BMLP:OUT] --BML_CopyBack()\r\n")));

    return (INT32)nResult;
}


/*****************************************************************************/
/*                                                                           */
/* NAME                                                                      */
/*      BML_FlushOp                                                          */
/* DESCRIPTION                                                               */
/*      This function flushes the current operation in the given volume.     */
/* PARAMETERS                                                                */
/*      nVol       [IN]                                                      */
/*            Volume number                                                  */
/*      nFlag      [IN]                                                      */
/*            If nFlag is BML_NORMAL_MODE, it handles the FIL error.         */
/*            If nFlag is BML_EMERGENCY_MODE, it handles the FIL error.      */
/* RETURN VALUES                                                             */
/*      BML_SUCCESS                                                          */
/*          BML_FlushOp is completed,                                        */
/*      BML_CRITICAL_ERROR                                                   */
/*          critical error occurs                                            */
/*		BML_INVALID_PARAM                                                    */
/*			If volume data structure isn't initilized, it returns            */
/*      BML_ACQUIRE_SM_ERROR                                                 */
/*          acquiring semaphore is failed                                    */
/*      BML_RELEASE_SM_ERROR                                                 */
/*          releasing semaphore is failed                                    */
/* NOTES                                                                     */
/*      if nFlag is BML_EMERGENCY_MODE, BML_FlushOp waits for 2 * erase time */
/*      maximally.                                                           */
/*                                                                           */
/*****************************************************************************/
INT32
BML_FlushOp(UINT32 nVol, UINT32 nFlag)
{
    BMLPacket   stPacket; 
    UINT32      nResult;

    BMLP_LOG_PRINT((TEXT("[BMLP: IN] ++BML_FlushOp()\r\n")));

    do {
        /* BML_FlushOp */
        stPacket.nVol       = nVol;
        stPacket.nCtrlCode  = PS_HAL_BML_FLUSHOP;
        stPacket.nVbn       = 0;            // Not used
        stPacket.nVsn       = 0;            // Not used
        stPacket.nNumOfScts = 0;            // Not used
        stPacket.nOpFlag    = nFlag;
        stPacket.pMBuf      = NULL;
        stPacket.pSBuf      = NULL;
        stPacket.pstMEBArg	= 0;			// by kathy
    	stPacket.pSGLBuf = 0;				/* added for XSR v1.5.x */
    
        KernelIoControl(IOCTL_POCKETSTOREII_CMD,    /* IO Control Code  */
                        &stPacket,                  /* Input buffer     */
                        sizeof(BMLPacket),
                        NULL,                       /* Output buffer    */
                        0, 
                        &nResult);
                        
        if (nResult != BML_SUCCESS)
        {
            BMLP_ERR_PRINT((TEXT("[BMLP:ERR]  BML_FlushOp() failure. ERR Code=%x\r\n"), nResult));
            break;
        }

    } while(0);

    BMLP_LOG_PRINT((TEXT("[BMLP:OUT] --BML_FlushOp()\r\n")));

    return (INT32)nResult;
}


/*****************************************************************************/
/*                                                                           */
/* NAME                                                                      */
/*		BML_ReplaceBlk                                                       */
/* DESCRIPTION                                                               */
/*      This function replace the given virtual block                        */
/*                                                                           */
/* PARAMETERS                                                                */
/*		nVol                                                                 */
/*			volume number                                                    */
/*      nVbn                                                                 */
/*          virtual block number                                             */
/* RETURN VALUES                                                             */
/*      BML_SUCCESS                                                          */
/*			BML_ProtectROArea is completed                                   */
/*		BML_INVALID_PARAM                                                    */
/*			invalid parameters                                               */
/*      BML_ACQUIRE_SM_ERROR                                                 */
/*          acquiring semaphore is failed                                    */
/*      BML_RELEASE_SM_ERROR                                                 */
/*          releasing semaphore is failed                                    */
/* NOTES                                                                     */
/*                                                                           */
/*****************************************************************************/
INT32
BML_ReplaceBlk(UINT32 nVol, UINT32 nVbn)
{
    BMLPacket   stPacket; 
    UINT32      nResult;

    BMLP_LOG_PRINT((TEXT("[BMLP: IN] ++BML_ReplaceBlk()\r\n")));

    do {
        /* BML_ReplaceBlk */
        stPacket.nVol       = nVol;
        stPacket.nCtrlCode  = PS_HAL_BML_REPLACEBLK;
        stPacket.nVbn       = nVbn;         // Not used
        stPacket.nVsn       = 0;            // Not used
        stPacket.nNumOfScts = 0;            // Not used
        stPacket.nOpFlag    = 0;            // Not used
        stPacket.pMBuf      = NULL;
        stPacket.pSBuf      = NULL;
        stPacket.pstMEBArg	= 0;			// by kathy
    	stPacket.pSGLBuf = 0;				/* added for XSR v1.5.x */
    
        KernelIoControl(IOCTL_POCKETSTOREII_CMD,    /* IO Control Code  */
                        &stPacket,                  /* Input buffer     */
                        sizeof(BMLPacket),
                        NULL,                       /* Output buffer    */
                        0, 
                        &nResult);
                        
        if (nResult != BML_SUCCESS)
        {
            BMLP_ERR_PRINT((TEXT("[BMLP:ERR]  BML_ReplaceBlk() failure. ERR Code=%x\r\n"), nResult));
            break;
        }

    } while(0);

    BMLP_LOG_PRINT((TEXT("[BMLP:OUT] --BML_ReplaceBlk()\r\n")));

    return (INT32)nResult;
}


/*****************************************************************************/
/*                                                                           */
/* NAME                                                                      */
/*		BML_LoadPIEntry                                                      */
/* DESCRIPTION                                                

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?