*\r
* \r
*/\r
-\r
+#ifndef _RKNAND_BASE_H\r
+#define _RKNAND_BASE_H\r
//#include "api_flash.h"\r
\r
#define DRIVER_NAME "rk29xxnand"\r
char (*GetSNSectorInfo)(char * pbuf);\r
char (*GetChipSectorInfo)(char * pbuf);\r
int emmc_clk_power_save_en;\r
+ char *pdmaBuf;\r
int reserved[20];\r
};\r
\r
extern int rknand_queue_read(int Index, int nSec, void *buf);\r
extern int rknand_queue_write(int Index, int nSec, void *buf,int mode);\r
+extern int rknand_panic_write(int Index, int nSec, void *buf);\r
extern int rknand_buffer_init(char * pbuf,int size);\r
+extern void rknand_buffer_data_init(void);\r
extern void rknand_buffer_shutdown(void);\r
extern int add_rknand_device(struct rknand_info * prknand_Info);\r
extern int get_rknand_device(struct rknand_info ** prknand_Info);\r
-extern void rknand_buffer_sync(void);
\ No newline at end of file
+extern int rknand_buffer_sync(void);\r
+\r
+#endif\r
\r
\r
#define DRIVER_NAME "rk29xxnand"\r
-const char rknand_base_version[] = "rknand_base.c version: 4.26 20110610";\r
+const char rknand_base_version[] = "rknand_base.c version: 4.30 20111009";\r
#define NAND_DEBUG_LEVEL0 0\r
#define NAND_DEBUG_LEVEL1 1\r
#define NAND_DEBUG_LEVEL2 2\r
#define NANDPROC_ROOT NULL\r
#endif\r
\r
+#define DATA_LEN (1024*8*2/4) //Êý¾Ý¿éµ¥Î»word\r
+#define SPARE_LEN (32*8*2/4) //УÑéÊý¾Ý³¤¶È\r
+#define PAGE_LEN (DATA_LEN+SPARE_LEN) //ÿ¸öÊý¾Ýµ¥Î»µÄ³¤¶È\r
#define MAX_BUFFER_SIZE (long)(2048 * 8) //sector\r
long grknand_buf[MAX_BUFFER_SIZE * 512/4] __attribute__((aligned(4096)));\r
+long grknand_dma_buf[PAGE_LEN*4*5] __attribute__((aligned(4096)));\r
\r
static struct proc_dir_entry *my_proc_entry;\r
extern int rkNand_proc_ftlread(char *page);\r
int ret = 0;\r
int sector = len>>9;\r
int LBA = (int)(from>>9);\r
- //printk("rk28xxnand_read: from=%x,len=%x,\n",(int)from,len);\r
+ //if(rknand_debug)\r
+ // printk("rk28xxnand_read: from=%x,sector=%x,\n",(int)LBA,sector);\r
if(sector && gpNandInfo->ftl_read)\r
{\r
ret = gpNandInfo->ftl_read(LBA, sector, buf);\r
int sector = len>>9;\r
int LBA = (int)(from>>9);\r
//printk("*");\r
- //printk(KERN_NOTICE "write: from=%lx,len=%x\n",(int)LBA,sector);\r
+ //if(rknand_debug)\r
+ // printk(KERN_NOTICE "write: from=%lx,sector=%x\n",(int)LBA,sector);\r
//printk_write_log(LBA,sector,buf);\r
if(sector && gpNandInfo->ftl_write)// cmy\r
{\r
\r
int GetParamterInfo(char * pbuf , int len)\r
{\r
- int ret = -1;\r
+ int ret = -1;\r
int sector = (len)>>9;\r
int LBA = 0;\r
if(sector && gpNandInfo->ftl_read)\r
return ret?-1:(sector<<9);\r
}\r
\r
+int GetflashDataByLba(int lba,char * pbuf , int len)\r
+{\r
+ int ret = -1;\r
+ int sector = (len)>>9;\r
+ int LBA = lba;\r
+ if(sector && gpNandInfo->ftl_read)\r
+ {\r
+ ret = gpNandInfo->ftl_read(LBA, sector, pbuf);\r
+ }\r
+ return ret?-1:(sector<<9);\r
+}\r
+\r
\r
static int rk28xxnand_block_isbad(struct mtd_info *mtd, loff_t ofs)\r
{\r
return 0;\r
}\r
\r
- \r
+\r
/*\r
* CMY: Ôö¼ÓÁ˶ÔÃüÁîÐзÖÇøÐÅÏ¢µÄÖ§³Ö\r
* ÈôcmdlineÓÐÌṩ·ÖÇøÐÅÏ¢£¬ÔòʹÓÃcmdlineµÄ·ÖÇøÐÅÏ¢½øÐзÖÇø\r
memset(gpNandInfo,0,sizeof(struct rknand_info));\r
\r
gpNandInfo->bufSize = MAX_BUFFER_SIZE * 512;\r
- gpNandInfo->pbuf = grknand_buf;\r
-\r
+ gpNandInfo->pbuf = (char *)grknand_buf;\r
+ gpNandInfo->pdmaBuf = (char *)grknand_dma_buf;\r
+ //printk(" gpNandInfo->pdmaBuf=0x%x\n", gpNandInfo->pdmaBuf); \r
#ifdef CONFIG_MTD_EMMC_CLK_POWER_SAVE\r
gpNandInfo->emmc_clk_power_save_en = 1;\r
#endif\r