130 lines
4.2 KiB
C
130 lines
4.2 KiB
C
/*
|
|
* nand_lib.h for SUNXI NAND .
|
|
*
|
|
* Copyright (C) 2016 Allwinner.
|
|
*
|
|
*
|
|
* This file is licensed under the terms of the GNU General Public
|
|
* License version 2. This program is licensed "as is" without any
|
|
* warranty of any kind, whether express or implied.
|
|
*/
|
|
|
|
#ifndef __BSP_NAND_H__
|
|
#define __BSP_NAND_H__
|
|
|
|
#include "nand_type.h"
|
|
|
|
/*for partition*/
|
|
#define MAX_PART_COUNT_PER_FTL 24
|
|
#define MAX_PARTITION 4
|
|
#define ND_MAX_PARTITION_COUNT (MAX_PART_COUNT_PER_FTL*MAX_PARTITION)
|
|
|
|
typedef struct boot_flash_info {
|
|
__u32 chip_cnt;
|
|
__u32 blk_cnt_per_chip;
|
|
__u32 blocksize;
|
|
__u32 pagesize;
|
|
__u32 pagewithbadflag; /*the 1st byte of spare area of this page */
|
|
} boot_flash_info_t;
|
|
|
|
struct boot_physical_param {
|
|
__u32 chip; /*chip no*/
|
|
__u32 block; /* block no within chip*/
|
|
__u32 page; /* apge no within block*/
|
|
__u32 sectorbitmap; /*done't care*/
|
|
void *mainbuf; /*data buf*/
|
|
void *oobbuf; /*oob buf*/
|
|
};
|
|
|
|
#define PARTITION_NAME_SIZE 16
|
|
|
|
struct _nand_disk {
|
|
unsigned int size;
|
|
unsigned int type;
|
|
unsigned char name[PARTITION_NAME_SIZE];
|
|
};
|
|
|
|
struct _nand_phy_partition {
|
|
void *dat;
|
|
};
|
|
|
|
struct _nftl_blk {
|
|
unsigned int nftl_logic_size;
|
|
struct _nand_partition *nand;
|
|
struct _nftl_blk *nftl_blk_next;
|
|
void *nftl_zone;
|
|
void *cfg;
|
|
unsigned int time;
|
|
unsigned int ops_time; /* add ecape time for ops nftl */
|
|
unsigned int time_flush;
|
|
void *nftl_thread;
|
|
void *blk_lock;
|
|
int (*read_data)(struct _nftl_blk *nftl_blk, unsigned int sector,
|
|
unsigned int len, unsigned char *buf);
|
|
int (*write_data)(struct _nftl_blk *nftl_blk, unsigned int sector,
|
|
unsigned int len, unsigned char *buf);
|
|
int (*flush_write_cache)(struct _nftl_blk *nftl_blk,
|
|
unsigned int num);
|
|
int (*discard)(struct _nftl_blk *nftl_blk, unsigned int sector,
|
|
unsigned int len);
|
|
int (*shutdown_op)(struct _nftl_blk *nftl_blk);
|
|
int (*read_sector_data)(struct _nftl_blk *nftl_blk,
|
|
unsigned int sector, unsigned int len,
|
|
unsigned char *buf);
|
|
int (*write_sector_data)(struct _nftl_blk *nftl_blk,
|
|
unsigned int sector, unsigned int len,
|
|
unsigned char *buf);
|
|
int (*flush_sector_write_cache)(struct _nftl_blk *nftl_blk,
|
|
unsigned int num);
|
|
};
|
|
|
|
extern __s32 PHY_SimpleErase(struct boot_physical_param *eraseop);
|
|
extern __s32 PHY_SimpleErase_2CH(struct boot_physical_param *eraseop);
|
|
extern __s32 PHY_SimpleErase_CurCH(struct boot_physical_param *eraseop);
|
|
extern __s32 PHY_SimpleRead(struct boot_physical_param *readop);
|
|
extern __s32 PHY_SimpleRead_CurCH(struct boot_physical_param *readop);
|
|
extern __s32 PHY_SimpleRead_2CH(struct boot_physical_param *readop);
|
|
extern __s32 PHY_SimpleWrite(struct boot_physical_param *writeop);
|
|
extern __s32 PHY_SimpleWrite_CurCH(struct boot_physical_param *writeop);
|
|
extern __s32 PHY_SimpleWrite_1K(struct boot_physical_param *writeop);
|
|
extern __s32 PHY_SimpleWrite_1KCurCH(struct boot_physical_param *writeop);
|
|
extern __s32 PHY_SimpleWrite_Seq(struct boot_physical_param *writeop);
|
|
extern __s32 PHY_SimpleRead_Seq(struct boot_physical_param *readop);
|
|
extern __s32 PHY_SimpleRead_1K(struct boot_physical_param *readop);
|
|
extern __s32 PHY_SimpleRead_1KCurCH(struct boot_physical_param *readop);
|
|
extern __s32 PHY_WaitAllRbReady(void);
|
|
extern int nand_uboot_erase_all_chip(void);
|
|
|
|
extern __s32 NFC_LSBEnable(__u32 chip, __u32 read_retry_type);
|
|
extern __s32 NFC_LSBDisable(__u32 chip, __u32 read_retry_type);
|
|
extern __s32 NFC_LSBInit(__u32 read_retry_type);
|
|
extern __s32 NFC_LSBExit(__u32 read_retry_type);
|
|
extern __u32 NAND_GetChannelCnt(void);
|
|
|
|
extern void ClearNandStruct(void);
|
|
extern __u32 get_storage_type(void);
|
|
|
|
|
|
/*for param get&set*/
|
|
extern __u32 NAND_GetFrequencePar(void);
|
|
extern __s32 NAND_SetFrequencePar(__u32 FrequencePar);
|
|
extern __u32 NAND_GetNandVersion(void);
|
|
extern __s32 NAND_GetFlashInfo(boot_flash_info_t *info);
|
|
|
|
extern __s32 NAND_DragonboardTest(void);
|
|
|
|
struct _nand_info *NandHwInit(void);
|
|
__s32 NandHwExit(void);
|
|
__s32 NandHwSuperStandby(void);
|
|
__s32 NandHwSuperResume(void);
|
|
__s32 NandHwNormalStandby(void);
|
|
__s32 NandHwNormalResume(void);
|
|
__s32 NandHwShutDown(void);
|
|
|
|
/*for NFTL*/
|
|
int nftl_initialize(struct _nftl_blk *nftl_blk, int no);
|
|
extern int nand_info_init(struct _nand_info *nand_info, unsigned char chip,
|
|
uint16 start_block, unsigned char *mbr_data);
|
|
|
|
#endif
|