mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-10-31 20:18:18 +00:00 
			
		
		
		
	A lot changed in the Linux MTD code, since it was last ported from Linux to U-Boot. This patch takes U-Boot NAND support to the level of Linux 2.6.22.1 and will enable support for very large NAND devices (4KB pages) and ease the compatibility between U-Boot and Linux filesystems. This patch is tested on two custom boards with PPC and ARM processors running YAFFS in U-Boot and Linux using gcc-4.1.2 cross compilers. MAKEALL ppc/arm has some issues: * DOC/OneNand/nand_spl is not building (I have not tried porting these parts, and since I do not have any HW and I am not familiar with this code/HW I think its best left to someone else.) Except for the issues mentioned above, I have ported all drivers necessary to run MAKEALL ppc/arm without errors and warnings. Many drivers were trivial to port, but some were not so trivial. The following drivers must be examined carefully and maybe rewritten to some degree: cpu/ppc4xx/ndfc.c cpu/arm926ejs/davinci/nand.c board/delta/nand.c board/zylonite/nand.c Signed-off-by: William Juul <william.juul@tandberg.com> Signed-off-by: Stig Olsen <stig.olsen@tandberg.com> Signed-off-by: Scott Wood <scottwood@freescale.com>
		
			
				
	
	
		
			82 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * $Id: blktrans.h,v 1.6 2005/11/07 11:14:54 gleixner Exp $
 | |
|  *
 | |
|  * (C) 2003 David Woodhouse <dwmw2@infradead.org>
 | |
|  *
 | |
|  * Interface to Linux block layer for MTD 'translation layers'.
 | |
|  *
 | |
|  */
 | |
| 
 | |
| #ifndef __MTD_TRANS_H__
 | |
| #define __MTD_TRANS_H__
 | |
| 
 | |
| /* XXX U-BOOT XXX */
 | |
| #if 0
 | |
| #include <linux/mutex.h>
 | |
| #else
 | |
| #include <linux/list.h>
 | |
| #endif
 | |
| 
 | |
| struct hd_geometry;
 | |
| struct mtd_info;
 | |
| struct mtd_blktrans_ops;
 | |
| struct file;
 | |
| struct inode;
 | |
| 
 | |
| struct mtd_blktrans_dev {
 | |
| 	struct mtd_blktrans_ops *tr;
 | |
| 	struct list_head list;
 | |
| 	struct mtd_info *mtd;
 | |
| /* XXX U-BOOT XXX */
 | |
| #if 0
 | |
| 	struct mutex lock;
 | |
| #endif
 | |
| 	int devnum;
 | |
| 	unsigned long size;
 | |
| 	int readonly;
 | |
| 	void *blkcore_priv; /* gendisk in 2.5, devfs_handle in 2.4 */
 | |
| };
 | |
| 
 | |
| struct blkcore_priv; /* Differs for 2.4 and 2.5 kernels; private */
 | |
| 
 | |
| struct mtd_blktrans_ops {
 | |
| 	char *name;
 | |
| 	int major;
 | |
| 	int part_bits;
 | |
| 	int blksize;
 | |
| 	int blkshift;
 | |
| 
 | |
| 	/* Access functions */
 | |
| 	int (*readsect)(struct mtd_blktrans_dev *dev,
 | |
| 		    unsigned long block, char *buffer);
 | |
| 	int (*writesect)(struct mtd_blktrans_dev *dev,
 | |
| 		     unsigned long block, char *buffer);
 | |
| 
 | |
| 	/* Block layer ioctls */
 | |
| 	int (*getgeo)(struct mtd_blktrans_dev *dev, struct hd_geometry *geo);
 | |
| 	int (*flush)(struct mtd_blktrans_dev *dev);
 | |
| 
 | |
| 	/* Called with mtd_table_mutex held; no race with add/remove */
 | |
| 	int (*open)(struct mtd_blktrans_dev *dev);
 | |
| 	int (*release)(struct mtd_blktrans_dev *dev);
 | |
| 
 | |
| 	/* Called on {de,}registration and on subsequent addition/removal
 | |
| 	   of devices, with mtd_table_mutex held. */
 | |
| 	void (*add_mtd)(struct mtd_blktrans_ops *tr, struct mtd_info *mtd);
 | |
| 	void (*remove_dev)(struct mtd_blktrans_dev *dev);
 | |
| 
 | |
| 	struct list_head devs;
 | |
| 	struct list_head list;
 | |
| 	struct module *owner;
 | |
| 
 | |
| 	struct mtd_blkcore_priv *blkcore_priv;
 | |
| };
 | |
| 
 | |
| extern int register_mtd_blktrans(struct mtd_blktrans_ops *tr);
 | |
| extern int deregister_mtd_blktrans(struct mtd_blktrans_ops *tr);
 | |
| extern int add_mtd_blktrans_dev(struct mtd_blktrans_dev *dev);
 | |
| extern int del_mtd_blktrans_dev(struct mtd_blktrans_dev *dev);
 | |
| 
 | |
| 
 | |
| #endif /* __MTD_TRANS_H__ */
 |