]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
Merge git://git.infradead.org/mtd-2.6
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 9 Jan 2009 20:36:45 +0000 (12:36 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 9 Jan 2009 20:37:15 +0000 (12:37 -0800)
* git://git.infradead.org/mtd-2.6: (67 commits)
  [MTD] [MAPS] Fix printk format warning in nettel.c
  [MTD] [NAND] add cmdline parsing (mtdparts=) support to cafe_nand
  [MTD] CFI: remove major/minor version check for command set 0x0002
  [MTD] [NAND] ndfc driver
  [MTD] [TESTS] Fix some size_t printk format warnings
  [MTD] LPDDR Makefile and KConfig
  [MTD] LPDDR extended physmap driver to support LPDDR flash
  [MTD] LPDDR added new pfow_base parameter
  [MTD] LPDDR Command set driver
  [MTD] LPDDR PFOW definition
  [MTD] LPDDR QINFO records definitions
  [MTD] LPDDR qinfo probing.
  [MTD] [NAND] pxa3xx: convert from ns to clock ticks more accurately
  [MTD] [NAND] pxa3xx: fix non-page-aligned reads
  [MTD] [NAND] fix nandsim sched.h references
  [MTD] [NAND] alauda: use USB API functions rather than constants
  [MTD] struct device - replace bus_id with dev_name(), dev_set_name()
  [MTD] fix m25p80 64-bit divisions
  [MTD] fix dataflash 64-bit divisions
  [MTD] [NAND] Set the fsl elbc ECCM according the settings in bootloader.
  ...

Fixed up trivial debug conflicts in drivers/mtd/devices/{m25p80.c,mtd_dataflash.c}

1  2 
include/linux/mtd/mtd.h

diff --combined include/linux/mtd/mtd.h
index 64433eb411d797c1988efff38b44471ee0587987,adef674855f32f880a3c7e380b03291b86d2f128..3aa5d77c2cdb0053d3c15c5c5bc48b05b97d93a6
@@@ -15,6 -15,8 +15,8 @@@
  #include <linux/mtd/compatmac.h>
  #include <mtd/mtd-abi.h>
  
+ #include <asm/div64.h>
  #define MTD_CHAR_MAJOR 90
  #define MTD_BLOCK_MAJOR 31
  #define MAX_MTD_DEVICES 32
  #define MTD_ERASE_DONE          0x08
  #define MTD_ERASE_FAILED        0x10
  
- #define MTD_FAIL_ADDR_UNKNOWN 0xffffffff
+ #define MTD_FAIL_ADDR_UNKNOWN -1LL
  
  /* If the erase fails, fail_addr might indicate exactly which block failed.  If
     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;
-       u_int cell;
+       unsigned dev;
+       unsigned cell;
        void (*callback) (struct erase_info *self);
        u_long priv;
        u_char state;
@@@ -46,9 -48,9 +48,9 @@@
  };
  
  struct mtd_erase_region_info {
-       u_int32_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 */
+       uint64_t offset;                        /* At which this region starts, from the beginning of the MTD */
+       uint32_t erasesize;             /* For this region */
+       uint32_t numblocks;             /* Number of blocks of erasesize in this region */
        unsigned long *lockmap;         /* If keeping bitmap of locks */
  };
  
@@@ -83,7 -85,7 +85,7 @@@ typedef enum 
   * @datbuf:   data buffer - if NULL only oob data are read/written
   * @oobbuf:   oob data buffer
   *
 - * Note, it is allowed to read more then one OOB area at one go, but not write.
 + * Note, it is allowed to read more than one OOB area at one go, but not write.
   * The interface assumes that the OOB write requests program only one page's
   * OOB area.
   */
@@@ -100,14 -102,14 +102,14 @@@ struct mtd_oob_ops 
  
  struct mtd_info {
        u_char type;
-       u_int32_t flags;
-       u_int32_t size;  // Total size of the MTD
+       uint32_t flags;
+       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
         * information below if they desire
         */
-       u_int32_t erasesize;
+       uint32_t erasesize;
        /* Minimal writable flash unit size. In case of NOR flash it is 1 (even
         * though individual bits can be cleared), in case of NAND flash it is
         * one NAND page (or half, or one-fourths of it), in case of ECC-ed NOR
         * Any driver registering a struct mtd_info must ensure a writesize of
         * 1 or larger.
         */
-       u_int32_t writesize;
+       uint32_t writesize;
+       uint32_t oobsize;   // Amount of OOB data per block (e.g. 16)
+       uint32_t oobavail;  // Available OOB bytes per block
  
-       u_int32_t oobsize;   // Amount of OOB data per block (e.g. 16)
-       u_int32_t oobavail;  // Available OOB bytes per block
+       /*
+        * If erasesize is a power of 2 then the shift is stored in
+        * erasesize_shift otherwise erasesize_shift is zero. Ditto writesize.
+        */
+       unsigned int erasesize_shift;
+       unsigned int writesize_shift;
+       /* Masks based on erasesize_shift and writesize_shift */
+       unsigned int erasesize_mask;
+       unsigned int writesize_mask;
  
        // Kernel-only stuff starts here.
        const char *name;
        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);
        void (*put_device) (struct mtd_info *mtd);
  };
  
+ static inline uint32_t mtd_div_by_eb(uint64_t sz, struct mtd_info *mtd)
+ {
+       if (mtd->erasesize_shift)
+               return sz >> mtd->erasesize_shift;
+       do_div(sz, mtd->erasesize);
+       return sz;
+ }
+ static inline uint32_t mtd_mod_by_eb(uint64_t sz, struct mtd_info *mtd)
+ {
+       if (mtd->erasesize_shift)
+               return sz & mtd->erasesize_mask;
+       return do_div(sz, mtd->erasesize);
+ }
+ static inline uint32_t mtd_div_by_ws(uint64_t sz, struct mtd_info *mtd)
+ {
+       if (mtd->writesize_shift)
+               return sz >> mtd->writesize_shift;
+       do_div(sz, mtd->writesize);
+       return sz;
+ }
+ static inline uint32_t mtd_mod_by_ws(uint64_t sz, struct mtd_info *mtd)
+ {
+       if (mtd->writesize_shift)
+               return sz & mtd->writesize_mask;
+       return do_div(sz, mtd->writesize);
+ }
  
        /* Kernel-side ioctl definitions */