1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * linux/drivers/mtd/rknand/rknand_base.c 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright (C) 2005-2009 Fuzhou Rockchip Electronics 6*4882a593Smuzhiyun * ZYF <zyf@rock-chips.com> 7*4882a593Smuzhiyun * 8*4882a593Smuzhiyun * 9*4882a593Smuzhiyun */ 10*4882a593Smuzhiyun #ifndef _RKNAND_BASE_H 11*4882a593Smuzhiyun #define _RKNAND_BASE_H 12*4882a593Smuzhiyun //#include "api_flash.h" 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun #define DRIVER_NAME "rk29xxnand" 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun #define NAND_DEBUG_LEVEL0 0 17*4882a593Smuzhiyun #define NAND_DEBUG_LEVEL1 1 18*4882a593Smuzhiyun #define NAND_DEBUG_LEVEL2 2 19*4882a593Smuzhiyun #define NAND_DEBUG_LEVEL3 3 20*4882a593Smuzhiyun //#define PAGE_REMAP 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun #ifndef CONFIG_RKFTL_PAGECACHE_SIZE 23*4882a593Smuzhiyun #define CONFIG_RKFTL_PAGECACHE_SIZE 64 //����pageӳ������С����λΪMB,mount ��/data/data�¡� 24*4882a593Smuzhiyun #endif 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun extern unsigned long SysImageWriteEndAdd; 27*4882a593Smuzhiyun extern int g_num_partitions; 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun /* 30*4882a593Smuzhiyun * rknand_state_t - chip states 31*4882a593Smuzhiyun * Enumeration for Rknand flash chip state 32*4882a593Smuzhiyun */ 33*4882a593Smuzhiyun typedef enum { 34*4882a593Smuzhiyun FL_READY, 35*4882a593Smuzhiyun FL_READING, 36*4882a593Smuzhiyun FL_WRITING, 37*4882a593Smuzhiyun FL_ERASING, 38*4882a593Smuzhiyun FL_SYNCING, 39*4882a593Smuzhiyun FL_UNVALID, 40*4882a593Smuzhiyun } rknand_state_t; 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun struct rknand_chip { 43*4882a593Smuzhiyun wait_queue_head_t wq; 44*4882a593Smuzhiyun rknand_state_t state; 45*4882a593Smuzhiyun int rknand_schedule_enable;//1 enable ,0 disable 46*4882a593Smuzhiyun void (*pFlashCallBack)(void);//call back funtion 47*4882a593Smuzhiyun }; 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun struct rknand_info { 50*4882a593Smuzhiyun int enable; 51*4882a593Smuzhiyun char *pbuf; 52*4882a593Smuzhiyun int bufSize; 53*4882a593Smuzhiyun unsigned int SysImageWriteEndAdd; 54*4882a593Smuzhiyun unsigned int nandCapacity; 55*4882a593Smuzhiyun struct rknand_chip rknand; 56*4882a593Smuzhiyun int (*ftl_cache_en)(int en); 57*4882a593Smuzhiyun int (*ftl_read) (int Index, int nSec, void *buf); 58*4882a593Smuzhiyun int (*ftl_write) (int Index, int nSec, void *buf ,int mode); 59*4882a593Smuzhiyun int (*ftl_write_panic) (int Index, int nSec, void *buf); 60*4882a593Smuzhiyun int (*ftl_close)(void); 61*4882a593Smuzhiyun int (*ftl_sync)(void); 62*4882a593Smuzhiyun int (*proc_bufread)(char *page); 63*4882a593Smuzhiyun int (*proc_ftlread)(char *page); 64*4882a593Smuzhiyun int (*rknand_schedule_enable)(int en); 65*4882a593Smuzhiyun int (*add_rknand_device)(struct rknand_info * prknand_Info); 66*4882a593Smuzhiyun int (*get_rknand_device)(struct rknand_info ** prknand_Info); 67*4882a593Smuzhiyun void (*rknand_buffer_shutdown)(void); 68*4882a593Smuzhiyun int (*GetIdBlockSysData)(char * buf, int Sector); 69*4882a593Smuzhiyun char (*GetSNSectorInfo)(char * pbuf); 70*4882a593Smuzhiyun char (*GetChipSectorInfo)(char * pbuf); 71*4882a593Smuzhiyun int emmc_clk_power_save_en; 72*4882a593Smuzhiyun char *pdmaBuf; 73*4882a593Smuzhiyun void (*nand_timing_config)(unsigned long AHBnKHz); 74*4882a593Smuzhiyun void (*rknand_suspend)(void); 75*4882a593Smuzhiyun void (*rknand_resume)(void); 76*4882a593Smuzhiyun int (*rknand_re_init)(void); 77*4882a593Smuzhiyun void (*rknand_dev_cache_flush)(void); 78*4882a593Smuzhiyun int (*ftl_discard) (int Index, int nSec); 79*4882a593Smuzhiyun int reserved[20]; 80*4882a593Smuzhiyun }; 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun extern int rknand_queue_read(int Index, int nSec, void *buf); 83*4882a593Smuzhiyun extern int rknand_queue_write(int Index, int nSec, void *buf,int mode); 84*4882a593Smuzhiyun extern int rknand_buffer_init(char * pbuf,int size); 85*4882a593Smuzhiyun extern void rknand_buffer_data_init(void); 86*4882a593Smuzhiyun extern void rknand_buffer_shutdown(void); 87*4882a593Smuzhiyun extern int add_rknand_device(struct rknand_info * prknand_Info); 88*4882a593Smuzhiyun extern int get_rknand_device(struct rknand_info ** prknand_Info); 89*4882a593Smuzhiyun extern int rknand_buffer_sync(void); 90*4882a593Smuzhiyun extern void rknand_cache_flush(void); 91*4882a593Smuzhiyun extern void rknand_dev_cache_flush(void); 92*4882a593Smuzhiyun 93*4882a593Smuzhiyun #endif 94