diff options
| author | Stefan Roese <sr@denx.de> | 2009-05-11 16:03:55 +0200 | 
|---|---|---|
| committer | Wolfgang Denk <wd@denx.de> | 2009-06-12 20:45:47 +0200 | 
| commit | 8d2effea23e938631126a7888008a0637e13b389 (patch) | |
| tree | e33073a1e09b6f5c340163a4581b81304fa3fa67 /include/linux/mtd/mtd.h | |
| parent | 0a57265533c412adf6024f4b4955141f4346b2b9 (diff) | |
| download | olio-uboot-2014.01-8d2effea23e938631126a7888008a0637e13b389.tar.xz olio-uboot-2014.01-8d2effea23e938631126a7888008a0637e13b389.zip | |
mtd: Update MTD infrastructure to support 64bit device size
This patch brings the U-Boot MTD infrastructure in sync with the current
Linux MTD version (2.6.30-rc3). Biggest change is the 64bit device size
support and a resync of the mtdpart.c file which has seen multiple fixes
meanwhile.
Signed-off-by: Stefan Roese <sr@denx.de>
Cc: Scott Wood <scottwood@freescale.com>
Cc: Kyungmin Park <kmpark@infradead.org>
Diffstat (limited to 'include/linux/mtd/mtd.h')
| -rw-r--r-- | include/linux/mtd/mtd.h | 29 | 
1 files changed, 21 insertions, 8 deletions
| diff --git a/include/linux/mtd/mtd.h b/include/linux/mtd/mtd.h index 354e3a0bc..c884567b9 100644 --- a/include/linux/mtd/mtd.h +++ b/include/linux/mtd/mtd.h @@ -8,6 +8,7 @@  #define __MTD_MTD_H__  #include <linux/types.h> +#include <div64.h>  #include <linux/mtd/mtd-abi.h>  #define MTD_CHAR_MAJOR 90 @@ -20,6 +21,8 @@  #define MTD_ERASE_DONE          0x08  #define MTD_ERASE_FAILED        0x10 +#define MTD_FAIL_ADDR_UNKNOWN	-1LL +  /*   * Enumeration for NAND/OneNAND flash chip state   */ @@ -37,13 +40,13 @@ enum {  };  /* If the erase fails, fail_addr might indicate exactly which block failed.  If -   fail_addr = 0xffffffff, the failure was not at the device level or was not +   fail_addr = MTD_FAIL_ADDR_UNKNOWN, the failure was not at the device level or was not     specific to any particular block. */  struct erase_info {  	struct mtd_info *mtd; -	u_int32_t addr; -	u_int32_t len; -	u_int32_t fail_addr; +	uint64_t addr; +	uint64_t len; +	uint64_t fail_addr;  	u_long time;  	u_long retries;  	u_int dev; @@ -55,7 +58,7 @@ struct erase_info {  };  struct mtd_erase_region_info { -	u_int32_t offset;			/* At which this region starts, from the beginning of the MTD */ +	uint64_t offset;			/* At which this region starts, from the beginning of the MTD */  	u_int32_t erasesize;		/* For this region */  	u_int32_t numblocks;		/* Number of blocks of erasesize in this region */  	unsigned long *lockmap;		/* If keeping bitmap of locks */ @@ -110,7 +113,7 @@ struct mtd_oob_ops {  struct mtd_info {  	u_char type;  	u_int32_t flags; -	u_int32_t size;	 /* Total size of the MTD */ +	uint64_t size;	 // Total size of the MTD  	/* "Major" erase size for the device. Naïve users may take this  	 * to be the only erase size available, or may use the more detailed @@ -202,8 +205,8 @@ struct mtd_info {  	void (*sync) (struct mtd_info *mtd);  	/* Chip-supported device locking */ -	int (*lock) (struct mtd_info *mtd, loff_t ofs, size_t len); -	int (*unlock) (struct mtd_info *mtd, loff_t ofs, size_t len); +	int (*lock) (struct mtd_info *mtd, loff_t ofs, uint64_t len); +	int (*unlock) (struct mtd_info *mtd, loff_t ofs, uint64_t len);  	/* Power Management functions */  	int (*suspend) (struct mtd_info *mtd); @@ -236,6 +239,16 @@ struct mtd_info {  	void (*put_device) (struct mtd_info *mtd);  }; +static inline uint32_t mtd_div_by_eb(uint64_t sz, struct mtd_info *mtd) +{ +	do_div(sz, mtd->erasesize); +	return sz; +} + +static inline uint32_t mtd_mod_by_eb(uint64_t sz, struct mtd_info *mtd) +{ +	return do_div(sz, mtd->erasesize); +}  	/* Kernel-side ioctl definitions */ |