pseudobml.c

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

C
1,257
字号
/*      BML_Write                                                            */
/* DESCRIPTION                                                               */
/*      This function writes virtual sectors                                 */
/* PARAMETERS                                                                */
/*      nVol       [IN]                                                      */
/*            Volume number                                                  */
/*      nVsn       [IN]                                                      */
/*            First virtual sector number for writing                        */
/*      nSctsInPg  [IN]                                                      */
/*            The number of sectors to write                                 */
/*      pMBuf      [IN]                                                      */
/*            Main sector buffer for writing                                 */
/*      pSBuf      [IN]                                                      */
/*            Spare sector buffer for writing                                */
/*      nFlag      [IN]                                                      */
/*            Options for writing                                            */
/* RETURN VALUES                                                             */
/*      BML_SUCCESS                                                          */
/*            BML_Write 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                                                                     */
/*                                                                           */
/*****************************************************************************/           
INT32
BML_MWrite(UINT32 nVol,  UINT32 nVsn,  UINT32 nNumOfScts,
		  UINT8 *pMBuf, UINT8 *pSBuf, UINT32 nFlag)
{
    BMLPacket   stPacket; 
    UINT32      nResult;

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

    do {
        /* BML_Write */
        stPacket.nVol       = nVol;
        stPacket.nCtrlCode  = PS_HAL_BML_MWRITE;
        stPacket.nVbn       = 0;            // Not used
        stPacket.nVsn       = nVsn;
        stPacket.nNumOfScts = nNumOfScts;
        stPacket.nOpFlag    = nFlag;
        stPacket.pMBuf      = pMBuf;
        stPacket.pSBuf      = pSBuf;
        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_Write() failure. ERR Code=%x\r\n"), nResult));
            break;
        }

    } while(0);

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

    return (INT32)nResult;
}


/*****************************************************************************/
/*                                                                           */
/* NAME                                                                      */
/*      BML_CopyBack                                                         */
/* DESCRIPTION                                                               */
/*      This function copy source virtual sector to target virtual sector    */
/*      using random input method.                                           */
/* PARAMETERS                                                                */
/*      nVol       [IN]                                                      */
/*            Volume number                                                  */
/*      pstCpArg   [IN]                                                      */
/*            pointer of CpBkArg 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                                                                     */
/*                                                                           */
/*****************************************************************************/
INT32
BML_CopyBack(UINT32 nVol, CpBkArg *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_CPBACK;
        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(CpBkArg), 
                        &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_EraseBlk                                                         */
/* DESCRIPTION                                                               */
/*      This function erases a virtual block                                 */
/* PARAMETERS                                                                */
/*      nVol       [IN]                                                      */
/*            Volume number                                                  */
/*      nVbn       [IN]                                                      */
/*            virtual block number for erasing                               */
/*      nFlag      [IN]                                                      */
/*            Options for erasing                                            */
/*            The value of it can be BML_FLAG_SYNC_OP or BML_FLAG_ASYNC_OP.  */
/* RETURN VALUES                                                             */
/*      BML_SUCCESS                                                          */
/*            BML_EraseBlk 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                                                                     */
/*                                                                           */
/*****************************************************************************/
INT32
BML_EraseBlk(UINT32 nVol, UINT32 nVbn, UINT32 nFlag)
{
    BMLPacket   stPacket; 
    UINT32      nResult;

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

    do {
        /* BML_EraseBlk */
        stPacket.nVol       = nVol;
        stPacket.nCtrlCode  = PS_HAL_BML_ERASE;
        stPacket.nVbn       = nVbn;
        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_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_MEraseBlk                                                        */
/* DESCRIPTION                                                               */
/*      This function erases a List of virtual blocks                        */
/* PARAMETERS                                                                */
/*      nVol       [IN]                                                      */
/*            Volume number                                                  */
/*      pstMEBArg  [IN]                                                      */
/*            List of virtual block number for erasing                       */
/*      nFlag      [IN]                                                      */
/*            Options for erasing                                            */
/*            The value of it can be BML_FLAG_SYNC_OP or BML_FLAG_ASYNC_OP.  */
/* RETURN VALUES                                                             */
/*      BML_SUCCESS                                                          */
/*            BML_EraseBlk is completed                                      */
/*      BML_WR_PROTECT_ERROR                                                 */
/*            write protect error                                            */
/*      BML_CRITICAL_ERROR                                                   */
/*            critical error                                                 */
/*      BML_ACQUIRE_SM_ERROR                                                 */
/*            acquiring semaphore is failed                                  */
/*      BML_RELEASE_SM_ERROR                                                 */
/*            releasing semaphore is failed                                  */
/* NOTES                                                                     */
/*                                                                           */
/*****************************************************************************/
INT32
BML_MEraseBlk(UINT32 nVol, MEBArg *pstMEBArg, UINT32 nFlag)
{
    BMLPacket   stPacket; 
    UINT32      nResult;

⌨️ 快捷键说明

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