| /***********************************************************************
|
| * Copyright (C) 2001, ZTE Corporation.
|
| *
|
| * File Name: drvs_nand.h
|
| * File Mark:
|
| * Description: tu hal interface declaration.
|
| * Others:
|
| * Version: v1.0
|
| * Author: wangxia
|
| * Date: 2008-08-28
|
| *
|
| * History 1:
|
| * Date:
|
| * Version:
|
| * Author:
|
| * Modification:
|
|
|
| * History 2:
|
| **********************************************************************/
|
|
|
| #ifndef HAL_NAND_H
|
| #define HAL_NAND_H
|
|
|
| #ifdef _OS_TOS
|
| #include <cyg/fs/tos_yaffs_nand.h>
|
| #endif
|
| #include "drvs_io.h"
|
| /*************************************************************************
|
| * Include files *
|
| *************************************************************************/
|
|
|
|
|
| /*************************************************************************
|
| * Macro *
|
| *************************************************************************/
|
| #define ZDRV_NAND_PART_NVRO "nvr"
|
| #define ZDRV_NAND_PART_NVRW "nvrw"
|
| #define ZDRV_NAND_PART_YAFFS "cpfs"
|
| /**************************************************************************
|
| * Types *
|
| **************************************************************************/
|
| typedef struct{
|
| UINT8 pbyManu; /* ÖÆÔìÉÌid */
|
| UINT8 pbyDevice; /* оƬid */
|
| UINT8 pbyID3; /* ¸½¼Óid */
|
| UINT8 pbyID4; /* ¸½¼Óid */
|
| UINT8 pbyID5; /* ¸½¼Óid */
|
| }T_ZDrvNand_DeviceID;
|
|
|
| typedef struct{
|
| UINT32 nvBase; /* NVÆðʼµØÖ·*/
|
| UINT32 nvSize; /* NV´óС */
|
| }T_ZDrvNand_NVParam;
|
|
|
| /**
|
| * NAND Flash part information
|
| */
|
| typedef struct _T_Nand_Part_Info
|
| {
|
|
|
| UINT32 PageSize;
|
| UINT32 PageSpareSize;
|
| UINT32 BlockSize;
|
| UINT32 PartOffset;
|
| UINT32 PartSize;
|
| UINT32 TotalSize;
|
| UINT8 *PartName;
|
| T_ZDrvIO_Handle pIoHnd;
|
| }T_Nand_Part_Info;
|
|
|
| typedef enum {
|
|
|
| ZFTL_PART_NVRO_NVRW=0,
|
| ZFTL_PART_NVFAC,
|
| ZFTL_PART_SMS,
|
| ZFTL_PART_SIMNV,
|
| ZFTL_PART_SIMNVFAC,
|
| ZFTL_PART_MAX
|
|
|
| } T_ZFTL_PART_NO;
|
|
|
|
|
| /**************************************************************************
|
| * Global Variable *
|
| **************************************************************************/
|
|
|
|
|
| /**************************************************************************
|
| * Function Prototypes *
|
| **************************************************************************/
|
| /************************************************************************** |
| * Function: zDrvNand_Initiate |
| * Description:initialize nand for hal_init.c |
| * Parameters: |
| * Input:None |
| * Output: None |
| * Returns:None |
| **************************************************************************/ |
| SINT32 zDrvNand_Initiate(VOID);
|
|
|
| /************************************************************************** |
| * Function: zDrvNand_PartRead |
| * Description:read nand base partition. |
| * Parameters: |
| * Input:None |
| * Output: None |
| * Returns:None |
| **************************************************************************/ |
| SINT32 zDrvNand_PartRead(char* part_name,UINT32 offset,UINT32 size,UINT8* buffer);
|
| /************************************************************************** |
| * Function: zDrvNand_PartGetSize |
| * Description:get nand partition size. |
| * Parameters: |
| * Input:None |
| * Output: None |
| * Returns:None |
| **************************************************************************/ |
| UINT32 zDrvNand_PartGetSize(char* part_name);
|
|
|
|
|
| /*******************************************************************************
|
| * Function: zDrvNand_ReadBootflag
|
| * Description: read the bootflag of zx297510
|
| * Parameters:
|
| * Input:
|
| *
|
| * Output:
|
| *
|
| * Returns: 0: open dl usb
|
| * 1: close dl usb
|
| *
|
| * Others: 0xffffffff_ffffffff: USB DL;
|
| * "ZTE7510\0" : NO USB DL
|
| ********************************************************************************/
|
| UINT32 zDrvNand_ReadBootflag( void );
|
|
|
| /*******************************************************************************
|
| * Function: zDrvNand_WriteBootflag
|
| * Description: write the bootflag of zx297510
|
| * Parameters:
|
| * Input:
|
| *
|
| * Output:
|
| *
|
| * Returns:0 success
|
| * 1 fail
|
| *
|
| *
|
| * Others: 0xffffffff_ffffffff: USB DL;
|
| * "ZTE7510\0" : NO USB DL
|
| ********************************************************************************/
|
| UINT32 zDrvNand_WriteBootflag( UINT32 flag );
|
|
|
| /*******************************************************************************
|
| * Function: zDrvNand_ReadUsbtimeout
|
| * Description: read the usbtimeout flag of zx297510
|
| * Parameters:
|
| * Input:
|
| *
|
| * Output:
|
| *
|
| * Returns: flag:usb time out (1~10)
|
| *
|
| *
|
| * Others:
|
| ********************************************************************************/
|
| UINT32 zDrvNand_ReadUsbtimeout( void );
|
|
|
| /*******************************************************************************
|
| * Function: zDrvNand_WriteUsbtimeout
|
| * Description: write the usbtimeout flag of zx297510
|
| * Parameters:
|
| * Input:flag (1~10)
|
| *
|
| * Output:
|
| *
|
| * Returns:
|
| *
|
| *
|
| * Others:
|
| ********************************************************************************/
|
| UINT32 zDrvNand_WriteUsbtimeout( UINT32 flag );
|
|
|
|
|
| /**************************************************************************
|
| * º¯ÊýÃû³Æ£º zDrvNand_GetNVParam
|
| * ¹¦ÄÜÃèÊö£º This function is used to get nv param
|
|
|
| * ²ÎÊý˵Ã÷£º (IN)
|
| none.
|
| (OUT)
|
| nvParam: nvÆðʼµØÖ·´óС.
|
|
|
| * ·µ »Ø Öµ£º 0: ³É¹¦
|
| * !=0: ʧ°Ü
|
|
|
| * ÆäËü˵Ã÷£º none.
|
| **************************************************************************/
|
| extern SINT32 zDrvNand_GetNVParam(T_ZDrvNand_NVParam *nvParam);
|
|
|
| /**************************************************************************
|
| * º¯ÊýÃû³Æ£º zDrvNand_ReadID
|
| * ¹¦ÄÜÃèÊö£º This function is used to identify the nand chip
|
|
|
| * ²ÎÊý˵Ã÷£º (IN)
|
| none.
|
| (OUT)
|
| pbyDevice: ³§ÉÌid,оƬid,¸½¼Óid,¸½¼Óid.
|
|
|
| * ·µ »Ø Öµ£º 0: ³É¹¦
|
| * !=0: ʧ°Ü
|
|
|
| * ÆäËü˵Ã÷£º none.
|
| **************************************************************************/
|
| extern SINT32 zDrvNand_ReadID(T_ZDrvNand_DeviceID *pbyDevice);
|
|
|
|
|
| /**************************************************************************
|
| * º¯ÊýÃû³Æ£º zDrvNand_Initialize
|
| * ¹¦ÄÜÃèÊö£º This function is used to initialize the nand chip
|
|
|
| * ²ÎÊý˵Ã÷£º (IN)
|
| none.
|
| (OUT)
|
| none.
|
|
|
| * ·µ »Ø Öµ£º none.
|
|
|
| * ÆäËü˵Ã÷£º none.
|
| ***************************************************************************/
|
| extern SINT32 zDrvNand_Initialize(void);
|
|
|
| /**************************************************************************
|
| * º¯ÊýÃû³Æ£º zDrvNand_Erase
|
| * ¹¦ÄÜÃèÊö£º This function is used to erase the nand blocks spcified by
|
| dwStart and dwEnd.
|
|
|
| * ²ÎÊý˵Ã÷£º (IN)
|
| dwStart: start address to erase
|
| dwEnd: end address to erase
|
| µØÖ··¶Î§£º( NAND_BASE ~ NAND_BASE + BYTES_IN_NAND )
|
| (OUT)
|
| none.
|
|
|
| * ·µ »Ø Öµ£º 0: ³É¹¦
|
| * !=0: ʧ°Ü
|
|
|
| * ÆäËü˵Ã÷£º ¸Ã¹¦ÄܽöÔÚÕû¿é²Á³ýºÍ¸ñʽ»¯Ê±Ê¹Óá£
|
| дµÄʱºòÎÞÐè²Á³ý±»Ð´ÇøÓò.
|
| ²Á³ýʱdwStart¡¢dwEndËù¿çµÄ¿é£¨Ã¿¿é16K byte£©½«±»È«²¿²Á³ý¡£
|
| **************************************************************************/
|
| extern SINT32 zDrvNand_Erase(UINT32 dwStart, UINT32 dwEnd);
|
|
|
| extern SINT32 zDrvNand_Program_1(T_ZFTL_PART_NO partNo, UINT32 offset, UINT32 len, UINT8* from);
|
| extern SINT32 zDrvNand_Read_1(T_ZFTL_PART_NO partNo, UINT32 offset, UINT32 len, UINT8* to);
|
|
|
| #ifdef _OS_TOS
|
| /**************************************************************************
|
| * Function: zDrvNand_PartOpen
|
| * Description:get nand parameters for ecos fs.
|
| * Parameters:
|
| * Input: part_name:partition name
|
| * Output: pNandPartInfo:part information
|
| * Returns:0: success
|
| * other: error
|
| **************************************************************************/
|
| SINT32 zDrvNand_PartOpen(UINT8* part_name, T_zYaffs_PartInfo *pNandPartInfo);
|
|
|
| /*******************************************************************************
|
| * Function: zDrvNand_PartReadMain
|
| * Description: yaffs read nand main
|
| * Parameters:
|
| * Input:pNandPartInfo:yaffs information;
|
| * dwAddr:start addr;
|
| * dwLen:read length;
|
| * pbyBuf:read buffer;
|
| * Output:
|
| *
|
| * Returns: 0:success;
|
| * others:fail
|
| *
|
| *
|
| * Others:
|
| ********************************************************************************/
|
|
|
| SINT32 zDrvNand_PartReadMain(T_zYaffs_PartInfo *pNandPartInfo, UINT32 dwAddr, UINT32 dwLen, UINT8 *pbyBuf);
|
|
|
| /**************************************************************************
|
| * Function: zDrvNand_PartReadSpare
|
| * Description: read data from flash
|
| * Parameters:
|
| * Input: pNandPartInfo:yaffs information;
|
| * dwAddr: address
|
| * dwLen: length to read
|
| * Output: None
|
| * Returns:
|
| * 0: success
|
| * other: error
|
| * Others: Éϲãµ÷ÓÃzDrvNand_PartReadSpare()µÄº¯Êý dwLen ¶ÁÈ¡µÄ³¤¶È¶¼Îª Õû¸öOOB
|
| dwAddr ¶ÁÈ¡µØÖ·¶¼Îª Ò³µØÖ·¶ÔÆë
|
|
|
| **************************************************************************/
|
| SINT32 zDrvNand_PartReadSpare(T_zYaffs_PartInfo *pNandPartInfo,UINT32 dwAddr, UINT32 dwLen, UINT8 *pbyBuf);
|
|
|
| /**************************************************************************
|
| * Function: zDrvNand_PartWriteMain
|
| * Description: write data to flash of main area
|
| * Parameters:
|
| * Input: pNandPartInfo:yaffs information;
|
| * dwAddr: address
|
| * dwLen: length to read
|
| * pMBuf: buffer in which data is stored
|
| * Output: None
|
| * Returns:
|
| * 0: success
|
| * other: error
|
| * Others: Éϲãµ÷ÓÃzDrvNand_PartWriteMain()µÄº¯Êý dwLen дÈëµÄ³¤¶È1 page,
|
| dwAddr дÈëµØÖ·¶¼Îª Ò³µØÖ·¶ÔÆë
|
|
|
| **************************************************************************/
|
| SINT32 zDrvNand_PartWriteMain(T_zYaffs_PartInfo *pNandPartInfo, UINT32 dwAddr, UINT32 dwLen, UINT8 *pbyBuf);
|
|
|
| /**************************************************************************
|
| * Function: zDrvNand_PartWriteSpare
|
| * Description: write data to flash of spare area
|
| * Parameters:
|
| * Input: pNandPartInfo:yaffs information;
|
| * dwAddr: address
|
| * dwLen: length to read
|
| * pbyBuf: buffer in which data is stored
|
| * Output: None
|
| * Returns:
|
| * 0: success
|
| * other: error
|
| * Others: Éϲãµ÷ÓÃzDrvNand_PartWriteSpare()µÄº¯Êý dwLen дÈëµÄ³¤¶È¶¼ÎªÕû¸öOOB
|
| dwAddr дÈëµØÖ·¶¼Îª Ò³µØÖ·¶ÔÆë
|
|
|
| **************************************************************************/
|
| SINT32 zDrvNand_PartWriteSpare(T_zYaffs_PartInfo *pNandPartInfo, UINT32 dwAddr, UINT32 dwLen, UINT8 *pbyBuf);
|
|
|
| /**************************************************************************
|
| * Function: zDrvNand_PartErase
|
| * Description: erase a block
|
| * Parameters:
|
| * Input: pNandPartInfo:yaffs information;
|
| * dwAddr: address,block aliagn
|
| * Output: None
|
| * Returns:
|
| * 0: success
|
| * other: error
|
| * Others:
|
| **************************************************************************/
|
| SINT32 zDrvNand_PartErase(T_zYaffs_PartInfo *pNandPartInfo, UINT32 dwAddr);
|
|
|
| /**************************************************************************
|
| * Function: zDrvNand_PartCheckBadBlock
|
| * Description:check badblock for ecos fs.
|
| * Parameters:
|
| * Input: pNandPartInfo:part information
|
| * dwAddr:start addrress
|
| * Output: None
|
| * Returns:DRV_SUCCESS: good block
|
| * DRV_ERROR: bad block
|
| **************************************************************************/
|
|
|
| SINT32 zDrvNand_PartCheckBadBlock(T_zYaffs_PartInfo *pNandPartInfo,UINT32 dwAddr);
|
|
|
| /**************************************************************************
|
| * Function: zDrvNand_PartMarkBadBlock
|
| * Description:mark badblock for ecos fs.
|
| * Parameters:
|
| * Input: pNandPartInfo:part information
|
| * dwAddr:start addrress
|
| * Output: None
|
| * Returns:DRV_SUCCESS: mark bad success
|
| * DRV_ERROR: mark bad fail
|
| **************************************************************************/
|
|
|
| SINT32 zDrvNand_PartMarkBadBlock(T_zYaffs_PartInfo *pNandPartInfo,UINT32 dwAddr);
|
| #endif
|
|
|
| /**************************************************************************
|
| * Function: zDrvNand_PartMtdOpen
|
| * Description:get nand parameters for FOTA.
|
| * Parameters:
|
| * Input:None
|
| * Output: None
|
| * Returns:None
|
| **************************************************************************/
|
| SINT32 zDrvNand_PartMtdOpen(UINT8* part_name, T_Nand_Part_Info *pNandPartInfo);
|
|
|
| /**************************************************************************
|
| * Function: zDrvNand_PartMtdRead
|
| * Description:read data for FOTA.
|
| * Parameters:
|
| * Input:None
|
| * Output: None
|
| * Returns:None
|
| **************************************************************************/
|
| SINT32 zDrvNand_PartMtdRead(T_Nand_Part_Info *pNandPartInfo,UINT32 dwAddr, UINT32 dwLen, UINT8 *pbyBuf);
|
| /**************************************************************************
|
| * Function: zDrvNand_PartMtdWrite
|
| * Description:read data for FOTA.
|
| * Parameters:
|
| * Input:None
|
| * Output: None
|
| * Returns:None
|
| **************************************************************************/
|
| SINT32 zDrvNand_PartMtdWrite(T_Nand_Part_Info *pNandPartInfo,UINT32 dwAddr, UINT32 dwLen, UINT8 *pbyBuf);
|
| /**************************************************************************
|
| * Function: zDrvNand_PartMtdErase
|
| * Description:erase data for FOTA.
|
| * Parameters:
|
| * Input:None
|
| * Output: None
|
| * Returns:None
|
| **************************************************************************/
|
| SINT32 zDrvNand_PartMtdErase(T_Nand_Part_Info *pNandPartInfo,UINT32 dwAddr);
|
|
|
| /**************************************************************************
|
| * Function: zDrvNand_NvRwEccMake
|
| * Description:
|
| * Parameters:
|
| * Input:
|
| *
|
| * Output: None
|
| * Returns: 0: ÕýÈ·
|
| ÆäËû: ´íÎó
|
| *
|
| *
|
| * Others:
|
| **************************************************************************/
|
| SINT32 zDrvNand_NvRwEccMake(UINT32 dwStart, UINT32 dwLen);
|
|
|
|
|
|
|
| #endif /* HAL_NAND_H */
|
|
|