lld.h

来自「SAMSUNG S3C6410 CPU BSP for winmobile6」· C头文件 代码 · 共 261 行 · 第 1/2 页

H
261
字号
#define LLD_FLAG_ASYNC_OP           (1 << 0)            /* Write/Erase/Copy  */
#define LLD_FLAG_SYNC_OP            (0 << 0)            /* Write/Erase/Copy  */
#define LLD_FLAG_SYNC_OP_INV        (~LLD_FLAG_ASYNC_OP)/* Write/Erase/Copy  */

#define LLD_FLAG_ECC_ON             (1 << 1)
#define LLD_FLAG_ECC_OFF            (0 << 1)
#define LLD_FLAG_ECC_OFF_INV        (~LLD_FLAG_ECC_ON)

/*****************************************************************************/
/* LLD IO Ctrl Code                                                          */
/*****************************************************************************/
/* IOC Code */
#define IOC_SET_SECURE_LT           0x01    /* Set Lock-Tighten     */
#define IOC_GET_SECURE_STAT         0x02    /* Get Secure Status    */
#define IOC_RESET_NAND_DEV          0x03    /* Reset NAND Device    */
#define IOC_SET_BLOCK_LOCK          0x04    /* Block Lock           */	/* added for XSR v1.5.x */

/* IOC Return Value */
#define LLD_IOC_SECURE_LT           0x01    /* Lock-Tight           */
#define LLD_IOC_SECURE_LS           0x02    /* Locked Status        */
#define LLD_IOC_SECURE_US           0x04    /* Unlocked Status      */

/* Set Device lock-tight */
#define LLD_IOC_SET_SECURE_LT       XSR_IOCTL_CODE(XSR_MODULE_LLD,          \
                                                   IOC_SET_SECURE_LT,       \
                                                   XSR_METHOD_INOUT_DIRECT, \
                                                   XSR_ANY_ACCESS)

/* Set Device lock-tight */	/* added for XSR v1.5.x */
#define LLD_IOC_SET_BLOCK_LOCK      XSR_IOCTL_CODE(XSR_MODULE_LLD,          \
                                                   IOC_SET_BLOCK_LOCK,      \
                                                   XSR_METHOD_INOUT_DIRECT, \
                                                   XSR_ANY_ACCESS)
/* Get Device security status 
   return value 
      DEV_LT : Device is lock-tighten
      DEV_AL : All blocks of device are locked
      DEV_UL : There is an unlocked block       */
#define LLD_IOC_GET_SECURE_STAT     XSR_IOCTL_CODE(XSR_MODULE_LLD,          \
                                                   IOC_GET_SECURE_STAT,     \
                                                   XSR_METHOD_INOUT_DIRECT, \
                                                   XSR_READ_ACCESS)
/* Reset Nand Device */
#define LLD_IOC_RESET_NAND_DEV      XSR_IOCTL_CODE(XSR_MODULE_LLD,          \
                                                   IOC_RESET_NAND_DEV,      \
                                                   XSR_METHOD_INOUT_DIRECT, \
                                                   XSR_ANY_ACCESS)

/*****************************************************************************/
/* Data Structures                                                           */
/*****************************************************************************/
typedef struct {                /*                               offset size */ 
    UINT8   nMCode;             /* Manufacturer Code              0x00   1   */
    UINT8   nDCode;             /* Device Code                    0x01   1   */
    UINT16  nNumOfBlks;         /* The Number of Blocks           0x02   2   */
                                                                           
    UINT16  nPgsPerBlk;         /* The Number of Pages per Block  0x04   2   */
    UINT16  nBlksInRsv;         /* The Number of Blocks           0x06   2  
                                   in Reserved Block Pool                    */

    UINT8   nSctsPerPg;         /* The Number of Sectors per Page 0x08   1   */
    UINT8   nNumOfPlane;        /* The Number of Plane            0x09   1   */
    UINT8   nMEFlag;            /* Multiple Erase Flag            0x0A   1   */
                                                                           
    UINT8   nBWidth;            /* Device Bus Width               0x0C   1   */
    UINT8   nBadPos;            /* BadBlock Information Position  0x0E   1   */
    UINT8   nLsnPos;            /* LSN Position                   0x0E   1   */
    UINT8   nEccPos;            /* ECC Value Position             0x0F   1   */

    UINT8   aUID[XSR_UID_SIZE]; /* UID                            0x10   16, 
                                   0xFF(absence case of UID)                 */

                                /* Op Time based on nano second              */
    UINT32  nTrTime;            /* Physical Read Operation Time   0x20   2   */
    UINT32  nTwTime;            /* Physical Write Operation Time  0x22   2   */
    UINT32  nTeTime;            /* Physical Erase Operation Time  0x24   2   */
    UINT32  nTfTime;            /* Data Transfer Time             0x26   2   */
} LLDSpec;

typedef struct {
    UINT16 nMEListSbn;          /* MEList Semi-physical Block Number         */
    UINT16 nMEListPbn;          /* MEList Physical Block Number              */
} LLDMEList;

typedef struct {
    LLDMEList  *pstMEList;      /* Pointer to LLDMEList                      */
    UINT16      nNumOfMList;    /* Number of Entries of LLDMEList            */
    UINT16      nBitMapErr;     /* Error Bitmap Position of MEList           */
    BOOL32      bFlag;          /* Valid Flag                                */
} LLDMEArg;


/*****************************************************************************/
/* LLD Function Table Data Structures                                        */
/*****************************************************************************/
typedef struct {
    INT32 (*Init)           (VOID  *pParm);
    INT32 (*Open)           (UINT32 nDev);   
    INT32 (*Close)          (UINT32 nDev);   
    INT32 (*Read)           (UINT32 nDev,  UINT32 nPsn,    UINT32 nScts, 
                             UINT8 *pMBuf, UINT8 *pSBuf,   UINT32 nFlag);
    INT32 (*Write)          (UINT32 nDev,  UINT32 nPsn,    UINT32 nScts, 
                             UINT8 *pMBuf, UINT8 *pSBuf,   UINT32 nFlag);
    INT32 (*MRead)          (UINT32 nDev,  UINT32 nPsn,    UINT32 nScts, 
                             SGL  *pstSGL, UINT8 *pSBuf,   UINT32 nFlag);
    INT32 (*MWrite)         (UINT32 nDev,  UINT32 nPsn,    UINT32 nScts, 
                             SGL  *pstSGL, UINT8 *pSBuf,   UINT32 nFlag,
							 UINT32 *pErrPsn);
    INT32 (*CopyBack)       (UINT32 nDev,  CpBkArg *pstCpArg, 
                             UINT32 nFlag);
    INT32 (*Erase)          (UINT32 nDev,  UINT32 Pbn,     UINT32 nFlag);
    INT32 (*GetDevInfo)     (UINT32 nDev,  LLDSpec *pstDevInfo);
    INT32 (*ChkInitBadBlk)  (UINT32 nDev,  UINT32 Pbn);
    INT32 (*FlushOp)        (UINT32 nDev); 
    INT32 (*SetRWArea)      (UINT32 nDev,  UINT32 nSUbn,   UINT32 nUBlks);
    INT32 (*GetPrevOpData)  (UINT32 nDev,  UINT8 *pMBuf,   UINT8 *pSBuf);
    INT32 (*IOCtl)          (UINT32 nDev,  UINT32 nCmd,
                             UINT8 *pBufI, UINT32 nLenI,
                             UINT8 *pBufO, UINT32 nLenO,
                             UINT32 *pByteRet);

    INT32 (*MErase)         (UINT32 nDev,  LLDMEArg *pstMEArg, 
                             UINT32 nFlag);
    INT32 (*EraseVerify)    (UINT32 nDev,  LLDMEArg *pstMEArg, 
                             UINT32 nFlag);

} LowFuncTbl;

#endif /* _XSR_LLD_H_ */

⌨️ 快捷键说明

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