blob: daa6ad126b08dd2a6eb15e1f6f4600def8e3b503 [file] [log] [blame]
/***********************************************************************
* 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 */