diff options
Diffstat (limited to 'ANDROID_3.4.5/include/linux/mtd')
36 files changed, 0 insertions, 5226 deletions
diff --git a/ANDROID_3.4.5/include/linux/mtd/bbm.h b/ANDROID_3.4.5/include/linux/mtd/bbm.h deleted file mode 100644 index 5bc50e08..00000000 --- a/ANDROID_3.4.5/include/linux/mtd/bbm.h +++ /dev/null @@ -1,176 +0,0 @@ -/* - * linux/include/linux/mtd/bbm.h - * - * NAND family Bad Block Management (BBM) header file - * - Bad Block Table (BBT) implementation - * - * Copyright © 2005 Samsung Electronics - * Kyungmin Park <kyungmin.park@samsung.com> - * - * Copyright © 2000-2005 - * Thomas Gleixner <tglx@linuxtronix.de> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - * - */ -#ifndef __LINUX_MTD_BBM_H -#define __LINUX_MTD_BBM_H - -/* The maximum number of NAND chips in an array */ -#define NAND_MAX_CHIPS 8 - -/** - * struct nand_bbt_descr - bad block table descriptor - * @options: options for this descriptor - * @pages: the page(s) where we find the bbt, used with option BBT_ABSPAGE - * when bbt is searched, then we store the found bbts pages here. - * Its an array and supports up to 8 chips now - * @offs: offset of the pattern in the oob area of the page - * @veroffs: offset of the bbt version counter in the oob are of the page - * @version: version read from the bbt page during scan - * @len: length of the pattern, if 0 no pattern check is performed - * @maxblocks: maximum number of blocks to search for a bbt. This number of - * blocks is reserved at the end of the device where the tables are - * written. - * @reserved_block_code: if non-0, this pattern denotes a reserved (rather than - * bad) block in the stored bbt - * @pattern: pattern to identify bad block table or factory marked good / - * bad blocks, can be NULL, if len = 0 - * - * Descriptor for the bad block table marker and the descriptor for the - * pattern which identifies good and bad blocks. The assumption is made - * that the pattern and the version count are always located in the oob area - * of the first block. - */ -struct nand_bbt_descr { - int options; - int pages[NAND_MAX_CHIPS]; - int offs; - int veroffs; - uint8_t version[NAND_MAX_CHIPS]; - int len; - int maxblocks; - int reserved_block_code; - uint8_t *pattern; - int page_offset[2]; /* used to record bad block signature in which pages.*/ -}; - -/* Options for the bad block table descriptors */ - -/* The number of bits used per block in the bbt on the device */ -#define NAND_BBT_NRBITS_MSK 0x0000000F -#define NAND_BBT_1BIT 0x00000001 -#define NAND_BBT_2BIT 0x00000002 -#define NAND_BBT_4BIT 0x00000004 -#define NAND_BBT_8BIT 0x00000008 -/* The bad block table is in the last good block of the device */ -#define NAND_BBT_LASTBLOCK 0x00000010 -/* The bbt is at the given page, else we must scan for the bbt */ -#define NAND_BBT_ABSPAGE 0x00000020 -/* The bbt is at the given page, else we must scan for the bbt */ -#define NAND_BBT_SEARCH 0x00000040 -/* bbt is stored per chip on multichip devices */ -#define NAND_BBT_PERCHIP 0x00000080 -/* bbt has a version counter at offset veroffs */ -#define NAND_BBT_VERSION 0x00000100 -/* Create a bbt if none exists */ -#define NAND_BBT_CREATE 0x00000200 -/* - * Create an empty BBT with no vendor information. Vendor's information may be - * unavailable, for example, if the NAND controller has a different data and OOB - * layout or if this information is already purged. Must be used in conjunction - * with NAND_BBT_CREATE. - */ -#define NAND_BBT_CREATE_EMPTY 0x00000400 -/* Search good / bad pattern through all pages of a block */ -#define NAND_BBT_SCANALLPAGES 0x00000800 -/* Scan block empty during good / bad block scan */ -#define NAND_BBT_SCANEMPTY 0x00001000 -/* Write bbt if neccecary */ -#define NAND_BBT_WRITE 0x00002000 -/* Read and write back block contents when writing bbt */ -#define NAND_BBT_SAVECONTENT 0x00004000 -/* Search good / bad pattern on the first and the second page */ -#define NAND_BBT_SCAN2NDPAGE 0x00008000 -/* Search good / bad pattern on the last page of the eraseblock */ -#define NAND_BBT_SCANLASTPAGE 0x00010000 -/* - * Use a flash based bad block table. By default, OOB identifier is saved in - * OOB area. This option is passed to the default bad block table function. - */ -#define NAND_BBT_USE_FLASH 0x00020000 -/* Do not store flash based bad block table in OOB area; store it in-band */ -#define NAND_BBT_NO_OOB 0x00040000 -/* - * Do not write new bad block markers to OOB; useful, e.g., when ECC covers - * entire spare area. Must be used with NAND_BBT_USE_FLASH. - */ -#define NAND_BBT_NO_OOB_BBM 0x00080000 - -/* - * Flag set by nand_create_default_bbt_descr(), marking that the nand_bbt_descr - * was allocated dynamicaly and must be freed in nand_release(). Has no meaning - * in nand_chip.bbt_options. - */ -#define NAND_BBT_DYNAMICSTRUCT 0x80000000 - -/* The maximum number of blocks to scan for a bbt */ -#define NAND_BBT_SCAN_MAXBLOCKS 4 - -/* - * Constants for oob configuration - */ -#define NAND_SMALL_BADBLOCK_POS 5 -#define NAND_LARGE_BADBLOCK_POS 0 -#define ONENAND_BADBLOCK_POS 0 - -/* - * Bad block scanning errors - */ -#define ONENAND_BBT_READ_ERROR 1 -#define ONENAND_BBT_READ_ECC_ERROR 2 -#define ONENAND_BBT_READ_FATAL_ERROR 4 - -/** - * struct bbm_info - [GENERIC] Bad Block Table data structure - * @bbt_erase_shift: [INTERN] number of address bits in a bbt entry - * @badblockpos: [INTERN] position of the bad block marker in the oob area - * @options: options for this descriptor - * @bbt: [INTERN] bad block table pointer - * @isbad_bbt: function to determine if a block is bad - * @badblock_pattern: [REPLACEABLE] bad block scan pattern used for - * initial bad block scan - * @priv: [OPTIONAL] pointer to private bbm date - */ -struct bbm_info { - int bbt_erase_shift; - int badblockpos; - int options; - - uint8_t *bbt; - - int (*isbad_bbt)(struct mtd_info *mtd, loff_t ofs, int allowbbt); - - /* TODO Add more NAND specific fileds */ - struct nand_bbt_descr *badblock_pattern; - - void *priv; -}; - -/* OneNAND BBT interface */ -extern int onenand_scan_bbt(struct mtd_info *mtd, struct nand_bbt_descr *bd); -extern int onenand_default_bbt(struct mtd_info *mtd); - -#endif /* __LINUX_MTD_BBM_H */ diff --git a/ANDROID_3.4.5/include/linux/mtd/blktrans.h b/ANDROID_3.4.5/include/linux/mtd/blktrans.h deleted file mode 100644 index ed270bd2..00000000 --- a/ANDROID_3.4.5/include/linux/mtd/blktrans.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright © 2003-2010 David Woodhouse <dwmw2@infradead.org> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifndef __MTD_TRANS_H__ -#define __MTD_TRANS_H__ - -#include <linux/mutex.h> -#include <linux/kref.h> -#include <linux/sysfs.h> - -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; - struct mutex lock; - int devnum; - bool bg_stop; - unsigned long size; - int readonly; - int open; - struct kref ref; - struct gendisk *disk; - struct attribute_group *disk_attributes; - struct task_struct *thread; - struct request_queue *rq; - spinlock_t queue_lock; - void *priv; - fmode_t file_mode; -}; - -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); - int (*discard)(struct mtd_blktrans_dev *dev, - unsigned long block, unsigned nr_blocks); - void (*background)(struct mtd_blktrans_dev *dev); - - /* 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; -}; - -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); -extern int mtd_blktrans_cease_background(struct mtd_blktrans_dev *dev); - - -#endif /* __MTD_TRANS_H__ */ diff --git a/ANDROID_3.4.5/include/linux/mtd/cfi.h b/ANDROID_3.4.5/include/linux/mtd/cfi.h deleted file mode 100644 index 37ef6b19..00000000 --- a/ANDROID_3.4.5/include/linux/mtd/cfi.h +++ /dev/null @@ -1,564 +0,0 @@ -/* - * Copyright © 2000-2010 David Woodhouse <dwmw2@infradead.org> et al. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifndef __MTD_CFI_H__ -#define __MTD_CFI_H__ - -#include <linux/delay.h> -#include <linux/types.h> -#include <linux/bug.h> -#include <linux/interrupt.h> -#include <linux/mtd/flashchip.h> -#include <linux/mtd/map.h> -#include <linux/mtd/cfi_endian.h> -#include <linux/mtd/xip.h> - -#ifdef CONFIG_MTD_CFI_I1 -#define cfi_interleave(cfi) 1 -#define cfi_interleave_is_1(cfi) (cfi_interleave(cfi) == 1) -#else -#define cfi_interleave_is_1(cfi) (0) -#endif - -#ifdef CONFIG_MTD_CFI_I2 -# ifdef cfi_interleave -# undef cfi_interleave -# define cfi_interleave(cfi) ((cfi)->interleave) -# else -# define cfi_interleave(cfi) 2 -# endif -#define cfi_interleave_is_2(cfi) (cfi_interleave(cfi) == 2) -#else -#define cfi_interleave_is_2(cfi) (0) -#endif - -#ifdef CONFIG_MTD_CFI_I4 -# ifdef cfi_interleave -# undef cfi_interleave -# define cfi_interleave(cfi) ((cfi)->interleave) -# else -# define cfi_interleave(cfi) 4 -# endif -#define cfi_interleave_is_4(cfi) (cfi_interleave(cfi) == 4) -#else -#define cfi_interleave_is_4(cfi) (0) -#endif - -#ifdef CONFIG_MTD_CFI_I8 -# ifdef cfi_interleave -# undef cfi_interleave -# define cfi_interleave(cfi) ((cfi)->interleave) -# else -# define cfi_interleave(cfi) 8 -# endif -#define cfi_interleave_is_8(cfi) (cfi_interleave(cfi) == 8) -#else -#define cfi_interleave_is_8(cfi) (0) -#endif - -#ifndef cfi_interleave -#warning No CONFIG_MTD_CFI_Ix selected. No NOR chip support can work. -static inline int cfi_interleave(void *cfi) -{ - BUG(); - return 0; -} -#endif - -static inline int cfi_interleave_supported(int i) -{ - switch (i) { -#ifdef CONFIG_MTD_CFI_I1 - case 1: -#endif -#ifdef CONFIG_MTD_CFI_I2 - case 2: -#endif -#ifdef CONFIG_MTD_CFI_I4 - case 4: -#endif -#ifdef CONFIG_MTD_CFI_I8 - case 8: -#endif - return 1; - - default: - return 0; - } -} - - -/* NB: these values must represents the number of bytes needed to meet the - * device type (x8, x16, x32). Eg. a 32 bit device is 4 x 8 bytes. - * These numbers are used in calculations. - */ -#define CFI_DEVICETYPE_X8 (8 / 8) -#define CFI_DEVICETYPE_X16 (16 / 8) -#define CFI_DEVICETYPE_X32 (32 / 8) -#define CFI_DEVICETYPE_X64 (64 / 8) - - -/* Device Interface Code Assignments from the "Common Flash Memory Interface - * Publication 100" dated December 1, 2001. - */ -#define CFI_INTERFACE_X8_ASYNC 0x0000 -#define CFI_INTERFACE_X16_ASYNC 0x0001 -#define CFI_INTERFACE_X8_BY_X16_ASYNC 0x0002 -#define CFI_INTERFACE_X32_ASYNC 0x0003 -#define CFI_INTERFACE_X16_BY_X32_ASYNC 0x0005 -#define CFI_INTERFACE_NOT_ALLOWED 0xffff - - -/* NB: We keep these structures in memory in HOST byteorder, except - * where individually noted. - */ - -/* Basic Query Structure */ -struct cfi_ident { - uint8_t qry[3]; - uint16_t P_ID; - uint16_t P_ADR; - uint16_t A_ID; - uint16_t A_ADR; - uint8_t VccMin; - uint8_t VccMax; - uint8_t VppMin; - uint8_t VppMax; - uint8_t WordWriteTimeoutTyp; - uint8_t BufWriteTimeoutTyp; - uint8_t BlockEraseTimeoutTyp; - uint8_t ChipEraseTimeoutTyp; - uint8_t WordWriteTimeoutMax; - uint8_t BufWriteTimeoutMax; - uint8_t BlockEraseTimeoutMax; - uint8_t ChipEraseTimeoutMax; - uint8_t DevSize; - uint16_t InterfaceDesc; - uint16_t MaxBufWriteSize; - uint8_t NumEraseRegions; - uint32_t EraseRegionInfo[0]; /* Not host ordered */ -} __attribute__((packed)); - -/* Extended Query Structure for both PRI and ALT */ - -struct cfi_extquery { - uint8_t pri[3]; - uint8_t MajorVersion; - uint8_t MinorVersion; -} __attribute__((packed)); - -/* Vendor-Specific PRI for Intel/Sharp Extended Command Set (0x0001) */ - -struct cfi_pri_intelext { - uint8_t pri[3]; - uint8_t MajorVersion; - uint8_t MinorVersion; - uint32_t FeatureSupport; /* if bit 31 is set then an additional uint32_t feature - block follows - FIXME - not currently supported */ - uint8_t SuspendCmdSupport; - uint16_t BlkStatusRegMask; - uint8_t VccOptimal; - uint8_t VppOptimal; - uint8_t NumProtectionFields; - uint16_t ProtRegAddr; - uint8_t FactProtRegSize; - uint8_t UserProtRegSize; - uint8_t extra[0]; -} __attribute__((packed)); - -struct cfi_intelext_otpinfo { - uint32_t ProtRegAddr; - uint16_t FactGroups; - uint8_t FactProtRegSize; - uint16_t UserGroups; - uint8_t UserProtRegSize; -} __attribute__((packed)); - -struct cfi_intelext_blockinfo { - uint16_t NumIdentBlocks; - uint16_t BlockSize; - uint16_t MinBlockEraseCycles; - uint8_t BitsPerCell; - uint8_t BlockCap; -} __attribute__((packed)); - -struct cfi_intelext_regioninfo { - uint16_t NumIdentPartitions; - uint8_t NumOpAllowed; - uint8_t NumOpAllowedSimProgMode; - uint8_t NumOpAllowedSimEraMode; - uint8_t NumBlockTypes; - struct cfi_intelext_blockinfo BlockTypes[1]; -} __attribute__((packed)); - -struct cfi_intelext_programming_regioninfo { - uint8_t ProgRegShift; - uint8_t Reserved1; - uint8_t ControlValid; - uint8_t Reserved2; - uint8_t ControlInvalid; - uint8_t Reserved3; -} __attribute__((packed)); - -/* Vendor-Specific PRI for AMD/Fujitsu Extended Command Set (0x0002) */ - -struct cfi_pri_amdstd { - uint8_t pri[3]; - uint8_t MajorVersion; - uint8_t MinorVersion; - uint8_t SiliconRevision; /* bits 1-0: Address Sensitive Unlock */ - uint8_t EraseSuspend; - uint8_t BlkProt; - uint8_t TmpBlkUnprotect; - uint8_t BlkProtUnprot; - uint8_t SimultaneousOps; - uint8_t BurstMode; - uint8_t PageMode; - uint8_t VppMin; - uint8_t VppMax; - uint8_t TopBottom; -} __attribute__((packed)); - -/* Vendor-Specific PRI for Atmel chips (command set 0x0002) */ - -struct cfi_pri_atmel { - uint8_t pri[3]; - uint8_t MajorVersion; - uint8_t MinorVersion; - uint8_t Features; - uint8_t BottomBoot; - uint8_t BurstMode; - uint8_t PageMode; -} __attribute__((packed)); - -struct cfi_pri_query { - uint8_t NumFields; - uint32_t ProtField[1]; /* Not host ordered */ -} __attribute__((packed)); - -struct cfi_bri_query { - uint8_t PageModeReadCap; - uint8_t NumFields; - uint32_t ConfField[1]; /* Not host ordered */ -} __attribute__((packed)); - -#define P_ID_NONE 0x0000 -#define P_ID_INTEL_EXT 0x0001 -#define P_ID_AMD_STD 0x0002 -#define P_ID_INTEL_STD 0x0003 -#define P_ID_AMD_EXT 0x0004 -#define P_ID_WINBOND 0x0006 -#define P_ID_ST_ADV 0x0020 -#define P_ID_MITSUBISHI_STD 0x0100 -#define P_ID_MITSUBISHI_EXT 0x0101 -#define P_ID_SST_PAGE 0x0102 -#define P_ID_SST_OLD 0x0701 -#define P_ID_INTEL_PERFORMANCE 0x0200 -#define P_ID_INTEL_DATA 0x0210 -#define P_ID_RESERVED 0xffff - - -#define CFI_MODE_CFI 1 -#define CFI_MODE_JEDEC 0 - -struct cfi_private { - uint16_t cmdset; - void *cmdset_priv; - int interleave; - int device_type; - int cfi_mode; /* Are we a JEDEC device pretending to be CFI? */ - int addr_unlock1; - int addr_unlock2; - struct mtd_info *(*cmdset_setup)(struct map_info *); - struct cfi_ident *cfiq; /* For now only one. We insist that all devs - must be of the same type. */ - int mfr, id; - int numchips; - map_word sector_erase_cmd; - unsigned long chipshift; /* Because they're of the same type */ - const char *im_name; /* inter_module name for cmdset_setup */ - struct flchip chips[0]; /* per-chip data structure for each chip */ -}; - -/* - * Returns the command address according to the given geometry. - */ -static inline uint32_t cfi_build_cmd_addr(uint32_t cmd_ofs, - struct map_info *map, struct cfi_private *cfi) -{ - unsigned bankwidth = map_bankwidth(map); - unsigned interleave = cfi_interleave(cfi); - unsigned type = cfi->device_type; - uint32_t addr; - - addr = (cmd_ofs * type) * interleave; - - /* Modify the unlock address if we are in compatibility mode. - * For 16bit devices on 8 bit busses - * and 32bit devices on 16 bit busses - * set the low bit of the alternating bit sequence of the address. - */ - if (((type * interleave) > bankwidth) && ((cmd_ofs & 0xff) == 0xaa)) - addr |= (type >> 1)*interleave; - - return addr; -} - -/* - * Transforms the CFI command for the given geometry (bus width & interleave). - * It looks too long to be inline, but in the common case it should almost all - * get optimised away. - */ -static inline map_word cfi_build_cmd(u_long cmd, struct map_info *map, struct cfi_private *cfi) -{ - map_word val = { {0} }; - int wordwidth, words_per_bus, chip_mode, chips_per_word; - unsigned long onecmd; - int i; - - /* We do it this way to give the compiler a fighting chance - of optimising away all the crap for 'bankwidth' larger than - an unsigned long, in the common case where that support is - disabled */ - if (map_bankwidth_is_large(map)) { - wordwidth = sizeof(unsigned long); - words_per_bus = (map_bankwidth(map)) / wordwidth; // i.e. normally 1 - } else { - wordwidth = map_bankwidth(map); - words_per_bus = 1; - } - - chip_mode = map_bankwidth(map) / cfi_interleave(cfi); - chips_per_word = wordwidth * cfi_interleave(cfi) / map_bankwidth(map); - - /* First, determine what the bit-pattern should be for a single - device, according to chip mode and endianness... */ - switch (chip_mode) { - default: BUG(); - case 1: - onecmd = cmd; - break; - case 2: - onecmd = cpu_to_cfi16(map, cmd); - break; - case 4: - onecmd = cpu_to_cfi32(map, cmd); - break; - } - - /* Now replicate it across the size of an unsigned long, or - just to the bus width as appropriate */ - switch (chips_per_word) { - default: BUG(); -#if BITS_PER_LONG >= 64 - case 8: - onecmd |= (onecmd << (chip_mode * 32)); -#endif - case 4: - onecmd |= (onecmd << (chip_mode * 16)); - case 2: - onecmd |= (onecmd << (chip_mode * 8)); - case 1: - ; - } - - /* And finally, for the multi-word case, replicate it - in all words in the structure */ - for (i=0; i < words_per_bus; i++) { - val.x[i] = onecmd; - } - - return val; -} -#define CMD(x) cfi_build_cmd((x), map, cfi) - - -static inline unsigned long cfi_merge_status(map_word val, struct map_info *map, - struct cfi_private *cfi) -{ - int wordwidth, words_per_bus, chip_mode, chips_per_word; - unsigned long onestat, res = 0; - int i; - - /* We do it this way to give the compiler a fighting chance - of optimising away all the crap for 'bankwidth' larger than - an unsigned long, in the common case where that support is - disabled */ - if (map_bankwidth_is_large(map)) { - wordwidth = sizeof(unsigned long); - words_per_bus = (map_bankwidth(map)) / wordwidth; // i.e. normally 1 - } else { - wordwidth = map_bankwidth(map); - words_per_bus = 1; - } - - chip_mode = map_bankwidth(map) / cfi_interleave(cfi); - chips_per_word = wordwidth * cfi_interleave(cfi) / map_bankwidth(map); - - onestat = val.x[0]; - /* Or all status words together */ - for (i=1; i < words_per_bus; i++) { - onestat |= val.x[i]; - } - - res = onestat; - switch(chips_per_word) { - default: BUG(); -#if BITS_PER_LONG >= 64 - case 8: - res |= (onestat >> (chip_mode * 32)); -#endif - case 4: - res |= (onestat >> (chip_mode * 16)); - case 2: - res |= (onestat >> (chip_mode * 8)); - case 1: - ; - } - - /* Last, determine what the bit-pattern should be for a single - device, according to chip mode and endianness... */ - switch (chip_mode) { - case 1: - break; - case 2: - res = cfi16_to_cpu(map, res); - break; - case 4: - res = cfi32_to_cpu(map, res); - break; - default: BUG(); - } - return res; -} - -#define MERGESTATUS(x) cfi_merge_status((x), map, cfi) - - -/* - * Sends a CFI command to a bank of flash for the given geometry. - * - * Returns the offset in flash where the command was written. - * If prev_val is non-null, it will be set to the value at the command address, - * before the command was written. - */ -static inline uint32_t cfi_send_gen_cmd(u_char cmd, uint32_t cmd_addr, uint32_t base, - struct map_info *map, struct cfi_private *cfi, - int type, map_word *prev_val) -{ - map_word val; - uint32_t addr = base + cfi_build_cmd_addr(cmd_addr, map, cfi); - val = cfi_build_cmd(cmd, map, cfi); - - if (prev_val) - *prev_val = map_read(map, addr); - - map_write(map, val, addr); - - return addr - base; -} - -static inline uint8_t cfi_read_query(struct map_info *map, uint32_t addr) -{ - map_word val = map_read(map, addr); - - if (map_bankwidth_is_1(map)) { - return val.x[0]; - } else if (map_bankwidth_is_2(map)) { - return cfi16_to_cpu(map, val.x[0]); - } else { - /* No point in a 64-bit byteswap since that would just be - swapping the responses from different chips, and we are - only interested in one chip (a representative sample) */ - return cfi32_to_cpu(map, val.x[0]); - } -} - -static inline uint16_t cfi_read_query16(struct map_info *map, uint32_t addr) -{ - map_word val = map_read(map, addr); - - if (map_bankwidth_is_1(map)) { - return val.x[0] & 0xff; - } else if (map_bankwidth_is_2(map)) { - return cfi16_to_cpu(map, val.x[0]); - } else { - /* No point in a 64-bit byteswap since that would just be - swapping the responses from different chips, and we are - only interested in one chip (a representative sample) */ - return cfi32_to_cpu(map, val.x[0]); - } -} - -static inline void cfi_udelay(int us) -{ - if (us >= 1000) { - msleep((us+999)/1000); - } else { - udelay(us); - cond_resched(); - } -} - -int __xipram cfi_qry_present(struct map_info *map, __u32 base, - struct cfi_private *cfi); -int __xipram cfi_qry_mode_on(uint32_t base, struct map_info *map, - struct cfi_private *cfi); -void __xipram cfi_qry_mode_off(uint32_t base, struct map_info *map, - struct cfi_private *cfi); - -struct cfi_extquery *cfi_read_pri(struct map_info *map, uint16_t adr, uint16_t size, - const char* name); -struct cfi_fixup { - uint16_t mfr; - uint16_t id; - void (*fixup)(struct mtd_info *mtd); -}; - -#define CFI_MFR_ANY 0xFFFF -#define CFI_ID_ANY 0xFFFF -#define CFI_MFR_CONTINUATION 0x007F - -#define CFI_MFR_AMD 0x0001 -#define CFI_MFR_AMIC 0x0037 -#define CFI_MFR_ATMEL 0x001F -#define CFI_MFR_EON 0x001C -#define CFI_MFR_FUJITSU 0x0004 -#define CFI_MFR_HYUNDAI 0x00AD -#define CFI_MFR_INTEL 0x0089 -#define CFI_MFR_MACRONIX 0x00C2 -#define CFI_MFR_NEC 0x0010 -#define CFI_MFR_PMC 0x009D -#define CFI_MFR_SAMSUNG 0x00EC -#define CFI_MFR_SHARP 0x00B0 -#define CFI_MFR_SST 0x00BF -#define CFI_MFR_ST 0x0020 /* STMicroelectronics */ -#define CFI_MFR_TOSHIBA 0x0098 -#define CFI_MFR_WINBOND 0x00DA - -void cfi_fixup(struct mtd_info *mtd, struct cfi_fixup* fixups); - -typedef int (*varsize_frob_t)(struct map_info *map, struct flchip *chip, - unsigned long adr, int len, void *thunk); - -int cfi_varsize_frob(struct mtd_info *mtd, varsize_frob_t frob, - loff_t ofs, size_t len, void *thunk); - - -#endif /* __MTD_CFI_H__ */ diff --git a/ANDROID_3.4.5/include/linux/mtd/cfi_endian.h b/ANDROID_3.4.5/include/linux/mtd/cfi_endian.h deleted file mode 100644 index b97a6250..00000000 --- a/ANDROID_3.4.5/include/linux/mtd/cfi_endian.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright © 2001-2010 David Woodhouse <dwmw2@infradead.org> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#include <asm/byteorder.h> - -#define CFI_HOST_ENDIAN 1 -#define CFI_LITTLE_ENDIAN 2 -#define CFI_BIG_ENDIAN 3 - -#if !defined(CONFIG_MTD_CFI_ADV_OPTIONS) || defined(CONFIG_MTD_CFI_NOSWAP) -#define CFI_DEFAULT_ENDIAN CFI_HOST_ENDIAN -#elif defined(CONFIG_MTD_CFI_LE_BYTE_SWAP) -#define CFI_DEFAULT_ENDIAN CFI_LITTLE_ENDIAN -#elif defined(CONFIG_MTD_CFI_BE_BYTE_SWAP) -#define CFI_DEFAULT_ENDIAN CFI_BIG_ENDIAN -#else -#error No CFI endianness defined -#endif - -#define cfi_default(s) ((s)?:CFI_DEFAULT_ENDIAN) -#define cfi_be(s) (cfi_default(s) == CFI_BIG_ENDIAN) -#define cfi_le(s) (cfi_default(s) == CFI_LITTLE_ENDIAN) -#define cfi_host(s) (cfi_default(s) == CFI_HOST_ENDIAN) - -#define cpu_to_cfi8(map, x) (x) -#define cfi8_to_cpu(map, x) (x) -#define cpu_to_cfi16(map, x) _cpu_to_cfi(16, (map)->swap, (x)) -#define cpu_to_cfi32(map, x) _cpu_to_cfi(32, (map)->swap, (x)) -#define cpu_to_cfi64(map, x) _cpu_to_cfi(64, (map)->swap, (x)) -#define cfi16_to_cpu(map, x) _cfi_to_cpu(16, (map)->swap, (x)) -#define cfi32_to_cpu(map, x) _cfi_to_cpu(32, (map)->swap, (x)) -#define cfi64_to_cpu(map, x) _cfi_to_cpu(64, (map)->swap, (x)) - -#define _cpu_to_cfi(w, s, x) (cfi_host(s)?(x):_swap_to_cfi(w, s, x)) -#define _cfi_to_cpu(w, s, x) (cfi_host(s)?(x):_swap_to_cpu(w, s, x)) -#define _swap_to_cfi(w, s, x) (cfi_be(s)?cpu_to_be##w(x):cpu_to_le##w(x)) -#define _swap_to_cpu(w, s, x) (cfi_be(s)?be##w##_to_cpu(x):le##w##_to_cpu(x)) diff --git a/ANDROID_3.4.5/include/linux/mtd/concat.h b/ANDROID_3.4.5/include/linux/mtd/concat.h deleted file mode 100644 index ccdbe93a..00000000 --- a/ANDROID_3.4.5/include/linux/mtd/concat.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * MTD device concatenation layer definitions - * - * Copyright © 2002 Robert Kaiser <rkaiser@sysgo.de> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifndef MTD_CONCAT_H -#define MTD_CONCAT_H - - -struct mtd_info *mtd_concat_create( - struct mtd_info *subdev[], /* subdevices to concatenate */ - int num_devs, /* number of subdevices */ - const char *name); /* name for the new device */ - -void mtd_concat_destroy(struct mtd_info *mtd); - -#endif - diff --git a/ANDROID_3.4.5/include/linux/mtd/doc2000.h b/ANDROID_3.4.5/include/linux/mtd/doc2000.h deleted file mode 100644 index 0f6fea73..00000000 --- a/ANDROID_3.4.5/include/linux/mtd/doc2000.h +++ /dev/null @@ -1,206 +0,0 @@ -/* - * Linux driver for Disk-On-Chip devices - * - * Copyright © 1999 Machine Vision Holdings, Inc. - * Copyright © 1999-2010 David Woodhouse <dwmw2@infradead.org> - * Copyright © 2002-2003 Greg Ungerer <gerg@snapgear.com> - * Copyright © 2002-2003 SnapGear Inc - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifndef __MTD_DOC2000_H__ -#define __MTD_DOC2000_H__ - -#include <linux/mtd/mtd.h> -#include <linux/mutex.h> - -#define DoC_Sig1 0 -#define DoC_Sig2 1 - -#define DoC_ChipID 0x1000 -#define DoC_DOCStatus 0x1001 -#define DoC_DOCControl 0x1002 -#define DoC_FloorSelect 0x1003 -#define DoC_CDSNControl 0x1004 -#define DoC_CDSNDeviceSelect 0x1005 -#define DoC_ECCConf 0x1006 -#define DoC_2k_ECCStatus 0x1007 - -#define DoC_CDSNSlowIO 0x100d -#define DoC_ECCSyndrome0 0x1010 -#define DoC_ECCSyndrome1 0x1011 -#define DoC_ECCSyndrome2 0x1012 -#define DoC_ECCSyndrome3 0x1013 -#define DoC_ECCSyndrome4 0x1014 -#define DoC_ECCSyndrome5 0x1015 -#define DoC_AliasResolution 0x101b -#define DoC_ConfigInput 0x101c -#define DoC_ReadPipeInit 0x101d -#define DoC_WritePipeTerm 0x101e -#define DoC_LastDataRead 0x101f -#define DoC_NOP 0x1020 - -#define DoC_Mil_CDSN_IO 0x0800 -#define DoC_2k_CDSN_IO 0x1800 - -#define DoC_Mplus_NOP 0x1002 -#define DoC_Mplus_AliasResolution 0x1004 -#define DoC_Mplus_DOCControl 0x1006 -#define DoC_Mplus_AccessStatus 0x1008 -#define DoC_Mplus_DeviceSelect 0x1008 -#define DoC_Mplus_Configuration 0x100a -#define DoC_Mplus_OutputControl 0x100c -#define DoC_Mplus_FlashControl 0x1020 -#define DoC_Mplus_FlashSelect 0x1022 -#define DoC_Mplus_FlashCmd 0x1024 -#define DoC_Mplus_FlashAddress 0x1026 -#define DoC_Mplus_FlashData0 0x1028 -#define DoC_Mplus_FlashData1 0x1029 -#define DoC_Mplus_ReadPipeInit 0x102a -#define DoC_Mplus_LastDataRead 0x102c -#define DoC_Mplus_LastDataRead1 0x102d -#define DoC_Mplus_WritePipeTerm 0x102e -#define DoC_Mplus_ECCSyndrome0 0x1040 -#define DoC_Mplus_ECCSyndrome1 0x1041 -#define DoC_Mplus_ECCSyndrome2 0x1042 -#define DoC_Mplus_ECCSyndrome3 0x1043 -#define DoC_Mplus_ECCSyndrome4 0x1044 -#define DoC_Mplus_ECCSyndrome5 0x1045 -#define DoC_Mplus_ECCConf 0x1046 -#define DoC_Mplus_Toggle 0x1046 -#define DoC_Mplus_DownloadStatus 0x1074 -#define DoC_Mplus_CtrlConfirm 0x1076 -#define DoC_Mplus_Power 0x1fff - -/* How to access the device? - * On ARM, it'll be mmap'd directly with 32-bit wide accesses. - * On PPC, it's mmap'd and 16-bit wide. - * Others use readb/writeb - */ -#if defined(__arm__) -#define ReadDOC_(adr, reg) ((unsigned char)(*(volatile __u32 *)(((unsigned long)adr)+((reg)<<2)))) -#define WriteDOC_(d, adr, reg) do{ *(volatile __u32 *)(((unsigned long)adr)+((reg)<<2)) = (__u32)d; wmb();} while(0) -#define DOC_IOREMAP_LEN 0x8000 -#elif defined(__ppc__) -#define ReadDOC_(adr, reg) ((unsigned char)(*(volatile __u16 *)(((unsigned long)adr)+((reg)<<1)))) -#define WriteDOC_(d, adr, reg) do{ *(volatile __u16 *)(((unsigned long)adr)+((reg)<<1)) = (__u16)d; wmb();} while(0) -#define DOC_IOREMAP_LEN 0x4000 -#else -#define ReadDOC_(adr, reg) readb((void __iomem *)(adr) + (reg)) -#define WriteDOC_(d, adr, reg) writeb(d, (void __iomem *)(adr) + (reg)) -#define DOC_IOREMAP_LEN 0x2000 - -#endif - -#if defined(__i386__) || defined(__x86_64__) -#define USE_MEMCPY -#endif - -/* These are provided to directly use the DoC_xxx defines */ -#define ReadDOC(adr, reg) ReadDOC_(adr,DoC_##reg) -#define WriteDOC(d, adr, reg) WriteDOC_(d,adr,DoC_##reg) - -#define DOC_MODE_RESET 0 -#define DOC_MODE_NORMAL 1 -#define DOC_MODE_RESERVED1 2 -#define DOC_MODE_RESERVED2 3 - -#define DOC_MODE_CLR_ERR 0x80 -#define DOC_MODE_RST_LAT 0x10 -#define DOC_MODE_BDECT 0x08 -#define DOC_MODE_MDWREN 0x04 - -#define DOC_ChipID_Doc2k 0x20 -#define DOC_ChipID_Doc2kTSOP 0x21 /* internal number for MTD */ -#define DOC_ChipID_DocMil 0x30 -#define DOC_ChipID_DocMilPlus32 0x40 -#define DOC_ChipID_DocMilPlus16 0x41 - -#define CDSN_CTRL_FR_B 0x80 -#define CDSN_CTRL_FR_B0 0x40 -#define CDSN_CTRL_FR_B1 0x80 - -#define CDSN_CTRL_ECC_IO 0x20 -#define CDSN_CTRL_FLASH_IO 0x10 -#define CDSN_CTRL_WP 0x08 -#define CDSN_CTRL_ALE 0x04 -#define CDSN_CTRL_CLE 0x02 -#define CDSN_CTRL_CE 0x01 - -#define DOC_ECC_RESET 0 -#define DOC_ECC_ERROR 0x80 -#define DOC_ECC_RW 0x20 -#define DOC_ECC__EN 0x08 -#define DOC_TOGGLE_BIT 0x04 -#define DOC_ECC_RESV 0x02 -#define DOC_ECC_IGNORE 0x01 - -#define DOC_FLASH_CE 0x80 -#define DOC_FLASH_WP 0x40 -#define DOC_FLASH_BANK 0x02 - -/* We have to also set the reserved bit 1 for enable */ -#define DOC_ECC_EN (DOC_ECC__EN | DOC_ECC_RESV) -#define DOC_ECC_DIS (DOC_ECC_RESV) - -struct Nand { - char floor, chip; - unsigned long curadr; - unsigned char curmode; - /* Also some erase/write/pipeline info when we get that far */ -}; - -#define MAX_FLOORS 4 -#define MAX_CHIPS 4 - -#define MAX_FLOORS_MIL 1 -#define MAX_CHIPS_MIL 1 - -#define MAX_FLOORS_MPLUS 2 -#define MAX_CHIPS_MPLUS 1 - -#define ADDR_COLUMN 1 -#define ADDR_PAGE 2 -#define ADDR_COLUMN_PAGE 3 - -struct DiskOnChip { - unsigned long physadr; - void __iomem *virtadr; - unsigned long totlen; - unsigned char ChipID; /* Type of DiskOnChip */ - int ioreg; - - unsigned long mfr; /* Flash IDs - only one type of flash per device */ - unsigned long id; - int chipshift; - char page256; - char pageadrlen; - char interleave; /* Internal interleaving - Millennium Plus style */ - unsigned long erasesize; - - int curfloor; - int curchip; - - int numchips; - struct Nand *chips; - struct mtd_info *nextdoc; - struct mutex lock; -}; - -int doc_decode_ecc(unsigned char sector[512], unsigned char ecc1[6]); - -#endif /* __MTD_DOC2000_H__ */ diff --git a/ANDROID_3.4.5/include/linux/mtd/flashchip.h b/ANDROID_3.4.5/include/linux/mtd/flashchip.h deleted file mode 100644 index b63fa457..00000000 --- a/ANDROID_3.4.5/include/linux/mtd/flashchip.h +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright © 2000 Red Hat UK Limited - * Copyright © 2000-2010 David Woodhouse <dwmw2@infradead.org> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifndef __MTD_FLASHCHIP_H__ -#define __MTD_FLASHCHIP_H__ - -/* For spinlocks. sched.h includes spinlock.h from whichever directory it - * happens to be in - so we don't have to care whether we're on 2.2, which - * has asm/spinlock.h, or 2.4, which has linux/spinlock.h - */ -#include <linux/sched.h> -#include <linux/mutex.h> - -typedef enum { - FL_READY, - FL_STATUS, - FL_CFI_QUERY, - FL_JEDEC_QUERY, - FL_ERASING, - FL_ERASE_SUSPENDING, - FL_ERASE_SUSPENDED, - FL_WRITING, - FL_WRITING_TO_BUFFER, - FL_OTP_WRITE, - FL_WRITE_SUSPENDING, - FL_WRITE_SUSPENDED, - FL_PM_SUSPENDED, - FL_SYNCING, - FL_UNLOADING, - FL_LOCKING, - FL_UNLOCKING, - FL_POINT, - FL_XIP_WHILE_ERASING, - FL_XIP_WHILE_WRITING, - FL_SHUTDOWN, - /* These 2 come from nand_state_t, which has been unified here */ - FL_READING, - FL_CACHEDPRG, - /* These 4 come from onenand_state_t, which has been unified here */ - FL_RESETING, - FL_OTPING, - FL_PREPARING_ERASE, - FL_VERIFYING_ERASE, - - FL_UNKNOWN -} flstate_t; - - - -/* NOTE: confusingly, this can be used to refer to more than one chip at a time, - if they're interleaved. This can even refer to individual partitions on - the same physical chip when present. */ - -struct flchip { - unsigned long start; /* Offset within the map */ - // unsigned long len; - /* We omit len for now, because when we group them together - we insist that they're all of the same size, and the chip size - is held in the next level up. If we get more versatile later, - it'll make it a damn sight harder to find which chip we want from - a given offset, and we'll want to add the per-chip length field - back in. - */ - int ref_point_counter; - flstate_t state; - flstate_t oldstate; - - unsigned int write_suspended:1; - unsigned int erase_suspended:1; - unsigned long in_progress_block_addr; - - struct mutex mutex; - wait_queue_head_t wq; /* Wait on here when we're waiting for the chip - to be ready */ - int word_write_time; - int buffer_write_time; - int erase_time; - - int word_write_time_max; - int buffer_write_time_max; - int erase_time_max; - - void *priv; -}; - -/* This is used to handle contention on write/erase operations - between partitions of the same physical chip. */ -struct flchip_shared { - struct mutex lock; - struct flchip *writing; - struct flchip *erasing; -}; - - -#endif /* __MTD_FLASHCHIP_H__ */ diff --git a/ANDROID_3.4.5/include/linux/mtd/fsmc.h b/ANDROID_3.4.5/include/linux/mtd/fsmc.h deleted file mode 100644 index b2002922..00000000 --- a/ANDROID_3.4.5/include/linux/mtd/fsmc.h +++ /dev/null @@ -1,176 +0,0 @@ -/* - * incude/mtd/fsmc.h - * - * ST Microelectronics - * Flexible Static Memory Controller (FSMC) - * platform data interface and header file - * - * Copyright © 2010 ST Microelectronics - * Vipin Kumar <vipin.kumar@st.com> - * - * This file is licensed under the terms of the GNU General Public - * License version 2. This program is licensed "as is" without any - * warranty of any kind, whether express or implied. - */ - -#ifndef __MTD_FSMC_H -#define __MTD_FSMC_H - -#include <linux/io.h> -#include <linux/platform_device.h> -#include <linux/mtd/physmap.h> -#include <linux/types.h> -#include <linux/mtd/partitions.h> -#include <asm/param.h> - -#define FSMC_NAND_BW8 1 -#define FSMC_NAND_BW16 2 - -#define FSMC_MAX_NOR_BANKS 4 -#define FSMC_MAX_NAND_BANKS 4 - -#define FSMC_FLASH_WIDTH8 1 -#define FSMC_FLASH_WIDTH16 2 - -/* fsmc controller registers for NOR flash */ -#define CTRL 0x0 - /* ctrl register definitions */ - #define BANK_ENABLE (1 << 0) - #define MUXED (1 << 1) - #define NOR_DEV (2 << 2) - #define WIDTH_8 (0 << 4) - #define WIDTH_16 (1 << 4) - #define RSTPWRDWN (1 << 6) - #define WPROT (1 << 7) - #define WRT_ENABLE (1 << 12) - #define WAIT_ENB (1 << 13) - -#define CTRL_TIM 0x4 - /* ctrl_tim register definitions */ - -#define FSMC_NOR_BANK_SZ 0x8 -#define FSMC_NOR_REG_SIZE 0x40 - -#define FSMC_NOR_REG(base, bank, reg) (base + \ - FSMC_NOR_BANK_SZ * (bank) + \ - reg) - -/* fsmc controller registers for NAND flash */ -#define PC 0x00 - /* pc register definitions */ - #define FSMC_RESET (1 << 0) - #define FSMC_WAITON (1 << 1) - #define FSMC_ENABLE (1 << 2) - #define FSMC_DEVTYPE_NAND (1 << 3) - #define FSMC_DEVWID_8 (0 << 4) - #define FSMC_DEVWID_16 (1 << 4) - #define FSMC_ECCEN (1 << 6) - #define FSMC_ECCPLEN_512 (0 << 7) - #define FSMC_ECCPLEN_256 (1 << 7) - #define FSMC_TCLR_1 (1) - #define FSMC_TCLR_SHIFT (9) - #define FSMC_TCLR_MASK (0xF) - #define FSMC_TAR_1 (1) - #define FSMC_TAR_SHIFT (13) - #define FSMC_TAR_MASK (0xF) -#define STS 0x04 - /* sts register definitions */ - #define FSMC_CODE_RDY (1 << 15) -#define COMM 0x08 - /* comm register definitions */ - #define FSMC_TSET_0 0 - #define FSMC_TSET_SHIFT 0 - #define FSMC_TSET_MASK 0xFF - #define FSMC_TWAIT_6 6 - #define FSMC_TWAIT_SHIFT 8 - #define FSMC_TWAIT_MASK 0xFF - #define FSMC_THOLD_4 4 - #define FSMC_THOLD_SHIFT 16 - #define FSMC_THOLD_MASK 0xFF - #define FSMC_THIZ_1 1 - #define FSMC_THIZ_SHIFT 24 - #define FSMC_THIZ_MASK 0xFF -#define ATTRIB 0x0C -#define IOATA 0x10 -#define ECC1 0x14 -#define ECC2 0x18 -#define ECC3 0x1C -#define FSMC_NAND_BANK_SZ 0x20 - -#define FSMC_NAND_REG(base, bank, reg) (base + FSMC_NOR_REG_SIZE + \ - (FSMC_NAND_BANK_SZ * (bank)) + \ - reg) - -#define FSMC_BUSY_WAIT_TIMEOUT (1 * HZ) - -/* - * There are 13 bytes of ecc for every 512 byte block in FSMC version 8 - * and it has to be read consecutively and immediately after the 512 - * byte data block for hardware to generate the error bit offsets - * Managing the ecc bytes in the following way is easier. This way is - * similar to oobfree structure maintained already in u-boot nand driver - */ -#define MAX_ECCPLACE_ENTRIES 32 - -struct fsmc_nand_eccplace { - uint8_t offset; - uint8_t length; -}; - -struct fsmc_eccplace { - struct fsmc_nand_eccplace eccplace[MAX_ECCPLACE_ENTRIES]; -}; - -struct fsmc_nand_timings { - uint8_t tclr; - uint8_t tar; - uint8_t thiz; - uint8_t thold; - uint8_t twait; - uint8_t tset; -}; - -enum access_mode { - USE_DMA_ACCESS = 1, - USE_WORD_ACCESS, -}; - -/** - * fsmc_nand_platform_data - platform specific NAND controller config - * @partitions: partition table for the platform, use a default fallback - * if this is NULL - * @nr_partitions: the number of partitions in the previous entry - * @options: different options for the driver - * @width: bus width - * @bank: default bank - * @select_bank: callback to select a certain bank, this is - * platform-specific. If the controller only supports one bank - * this may be set to NULL - */ -struct fsmc_nand_platform_data { - struct fsmc_nand_timings *nand_timings; - struct mtd_partition *partitions; - unsigned int nr_partitions; - unsigned int options; - unsigned int width; - unsigned int bank; - - /* CLE, ALE offsets */ - unsigned int cle_off; - unsigned int ale_off; - enum access_mode mode; - - void (*select_bank)(uint32_t bank, uint32_t busw); - - /* priv structures for dma accesses */ - void *read_dma_priv; - void *write_dma_priv; -}; - -extern int __init fsmc_nor_init(struct platform_device *pdev, - unsigned long base, uint32_t bank, uint32_t width); -extern void __init fsmc_init_board_info(struct platform_device *pdev, - struct mtd_partition *partitions, unsigned int nr_partitions, - unsigned int width); - -#endif /* __MTD_FSMC_H */ diff --git a/ANDROID_3.4.5/include/linux/mtd/ftl.h b/ANDROID_3.4.5/include/linux/mtd/ftl.h deleted file mode 100644 index 0555f7a0..00000000 --- a/ANDROID_3.4.5/include/linux/mtd/ftl.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Derived from (and probably identical to): - * ftl.h 1.7 1999/10/25 20:23:17 - * - * The contents of this file are subject to the Mozilla Public License - * Version 1.1 (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License - * at http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" - * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - * the License for the specific language governing rights and - * limitations under the License. - * - * The initial developer of the original code is David A. Hinds - * <dahinds@users.sourceforge.net>. Portions created by David A. Hinds - * are Copyright (C) 1999 David A. Hinds. All Rights Reserved. - * - * Alternatively, the contents of this file may be used under the - * terms of the GNU General Public License version 2 (the "GPL"), in - * which case the provisions of the GPL are applicable instead of the - * above. If you wish to allow the use of your version of this file - * only under the terms of the GPL and not to allow others to use - * your version of this file under the MPL, indicate your decision by - * deleting the provisions above and replace them with the notice and - * other provisions required by the GPL. If you do not delete the - * provisions above, a recipient may use your version of this file - * under either the MPL or the GPL. - */ - -#ifndef _LINUX_FTL_H -#define _LINUX_FTL_H - -typedef struct erase_unit_header_t { - uint8_t LinkTargetTuple[5]; - uint8_t DataOrgTuple[10]; - uint8_t NumTransferUnits; - uint32_t EraseCount; - uint16_t LogicalEUN; - uint8_t BlockSize; - uint8_t EraseUnitSize; - uint16_t FirstPhysicalEUN; - uint16_t NumEraseUnits; - uint32_t FormattedSize; - uint32_t FirstVMAddress; - uint16_t NumVMPages; - uint8_t Flags; - uint8_t Code; - uint32_t SerialNumber; - uint32_t AltEUHOffset; - uint32_t BAMOffset; - uint8_t Reserved[12]; - uint8_t EndTuple[2]; -} erase_unit_header_t; - -/* Flags in erase_unit_header_t */ -#define HIDDEN_AREA 0x01 -#define REVERSE_POLARITY 0x02 -#define DOUBLE_BAI 0x04 - -/* Definitions for block allocation information */ - -#define BLOCK_FREE(b) ((b) == 0xffffffff) -#define BLOCK_DELETED(b) (((b) == 0) || ((b) == 0xfffffffe)) - -#define BLOCK_TYPE(b) ((b) & 0x7f) -#define BLOCK_ADDRESS(b) ((b) & ~0x7f) -#define BLOCK_NUMBER(b) ((b) >> 9) -#define BLOCK_CONTROL 0x30 -#define BLOCK_DATA 0x40 -#define BLOCK_REPLACEMENT 0x60 -#define BLOCK_BAD 0x70 - -#endif /* _LINUX_FTL_H */ diff --git a/ANDROID_3.4.5/include/linux/mtd/gen_probe.h b/ANDROID_3.4.5/include/linux/mtd/gen_probe.h deleted file mode 100644 index 2c456054..00000000 --- a/ANDROID_3.4.5/include/linux/mtd/gen_probe.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright © 2001 Red Hat UK Limited - * Copyright © 2001-2010 David Woodhouse <dwmw2@infradead.org> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifndef __LINUX_MTD_GEN_PROBE_H__ -#define __LINUX_MTD_GEN_PROBE_H__ - -#include <linux/mtd/flashchip.h> -#include <linux/mtd/map.h> -#include <linux/mtd/cfi.h> -#include <linux/bitops.h> - -struct chip_probe { - char *name; - int (*probe_chip)(struct map_info *map, __u32 base, - unsigned long *chip_map, struct cfi_private *cfi); -}; - -struct mtd_info *mtd_do_chip_probe(struct map_info *map, struct chip_probe *cp); - -#endif /* __LINUX_MTD_GEN_PROBE_H__ */ diff --git a/ANDROID_3.4.5/include/linux/mtd/gpmi-nand.h b/ANDROID_3.4.5/include/linux/mtd/gpmi-nand.h deleted file mode 100644 index 69b6dbf4..00000000 --- a/ANDROID_3.4.5/include/linux/mtd/gpmi-nand.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (C) 2011 Freescale Semiconductor, Inc. All Rights Reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#ifndef __MACH_MXS_GPMI_NAND_H__ -#define __MACH_MXS_GPMI_NAND_H__ - -/* The size of the resources is fixed. */ -#define GPMI_NAND_RES_SIZE 6 - -/* Resource names for the GPMI NAND driver. */ -#define GPMI_NAND_GPMI_REGS_ADDR_RES_NAME "GPMI NAND GPMI Registers" -#define GPMI_NAND_GPMI_INTERRUPT_RES_NAME "GPMI NAND GPMI Interrupt" -#define GPMI_NAND_BCH_REGS_ADDR_RES_NAME "GPMI NAND BCH Registers" -#define GPMI_NAND_BCH_INTERRUPT_RES_NAME "GPMI NAND BCH Interrupt" -#define GPMI_NAND_DMA_CHANNELS_RES_NAME "GPMI NAND DMA Channels" -#define GPMI_NAND_DMA_INTERRUPT_RES_NAME "GPMI NAND DMA Interrupt" - -/** - * struct gpmi_nand_platform_data - GPMI NAND driver platform data. - * - * This structure communicates platform-specific information to the GPMI NAND - * driver that can't be expressed as resources. - * - * @platform_init: A pointer to a function the driver will call to - * initialize the platform (e.g., set up the pin mux). - * @min_prop_delay_in_ns: Minimum propagation delay of GPMI signals to and - * from the NAND Flash device, in nanoseconds. - * @max_prop_delay_in_ns: Maximum propagation delay of GPMI signals to and - * from the NAND Flash device, in nanoseconds. - * @max_chip_count: The maximum number of chips for which the driver - * should configure the hardware. This value most - * likely reflects the number of pins that are - * connected to a NAND Flash device. If this is - * greater than the SoC hardware can support, the - * driver will print a message and fail to initialize. - * @partitions: An optional pointer to an array of partition - * descriptions. - * @partition_count: The number of elements in the partitions array. - */ -struct gpmi_nand_platform_data { - /* SoC hardware information. */ - int (*platform_init)(void); - - /* NAND Flash information. */ - unsigned int min_prop_delay_in_ns; - unsigned int max_prop_delay_in_ns; - unsigned int max_chip_count; - - /* Medium information. */ - struct mtd_partition *partitions; - unsigned partition_count; -}; -#endif diff --git a/ANDROID_3.4.5/include/linux/mtd/inftl.h b/ANDROID_3.4.5/include/linux/mtd/inftl.h deleted file mode 100644 index 02cd5f9b..00000000 --- a/ANDROID_3.4.5/include/linux/mtd/inftl.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * inftl.h -- defines to support the Inverse NAND Flash Translation Layer - * - * (C) Copyright 2002, Greg Ungerer (gerg@snapgear.com) - */ - -#ifndef __MTD_INFTL_H__ -#define __MTD_INFTL_H__ - -#ifndef __KERNEL__ -#error This is a kernel header. Perhaps include nftl-user.h instead? -#endif - -#include <linux/mtd/blktrans.h> -#include <linux/mtd/mtd.h> -#include <linux/mtd/nftl.h> - -#include <mtd/inftl-user.h> - -#ifndef INFTL_MAJOR -#define INFTL_MAJOR 96 -#endif -#define INFTL_PARTN_BITS 4 - -#ifdef __KERNEL__ - -struct INFTLrecord { - struct mtd_blktrans_dev mbd; - __u16 MediaUnit; - __u32 EraseSize; - struct INFTLMediaHeader MediaHdr; - int usecount; - unsigned char heads; - unsigned char sectors; - unsigned short cylinders; - __u16 numvunits; - __u16 firstEUN; - __u16 lastEUN; - __u16 numfreeEUNs; - __u16 LastFreeEUN; /* To speed up finding a free EUN */ - int head,sect,cyl; - __u16 *PUtable; /* Physical Unit Table */ - __u16 *VUtable; /* Virtual Unit Table */ - unsigned int nb_blocks; /* number of physical blocks */ - unsigned int nb_boot_blocks; /* number of blocks used by the bios */ - struct erase_info instr; - struct nand_ecclayout oobinfo; -}; - -int INFTL_mount(struct INFTLrecord *s); -int INFTL_formatblock(struct INFTLrecord *s, int block); - -void INFTL_dumptables(struct INFTLrecord *s); -void INFTL_dumpVUchains(struct INFTLrecord *s); - -int inftl_read_oob(struct mtd_info *mtd, loff_t offs, size_t len, - size_t *retlen, uint8_t *buf); -int inftl_write_oob(struct mtd_info *mtd, loff_t offs, size_t len, - size_t *retlen, uint8_t *buf); - -#endif /* __KERNEL__ */ - -#endif /* __MTD_INFTL_H__ */ diff --git a/ANDROID_3.4.5/include/linux/mtd/latch-addr-flash.h b/ANDROID_3.4.5/include/linux/mtd/latch-addr-flash.h deleted file mode 100644 index e94b8e12..00000000 --- a/ANDROID_3.4.5/include/linux/mtd/latch-addr-flash.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Interface for NOR flash driver whose high address lines are latched - * - * Copyright © 2008 MontaVista Software, Inc. <source@mvista.com> - * - * This file is licensed under the terms of the GNU General Public License - * version 2. This program is licensed "as is" without any warranty of any - * kind, whether express or implied. - */ -#ifndef __LATCH_ADDR_FLASH__ -#define __LATCH_ADDR_FLASH__ - -struct map_info; -struct mtd_partition; - -struct latch_addr_flash_data { - unsigned int width; - unsigned int size; - - int (*init)(void *data, int cs); - void (*done)(void *data); - void (*set_window)(unsigned long offset, void *data); - void *data; - - unsigned int nr_parts; - struct mtd_partition *parts; -}; - -#endif diff --git a/ANDROID_3.4.5/include/linux/mtd/map.h b/ANDROID_3.4.5/include/linux/mtd/map.h deleted file mode 100644 index 3595a023..00000000 --- a/ANDROID_3.4.5/include/linux/mtd/map.h +++ /dev/null @@ -1,465 +0,0 @@ -/* - * Copyright © 2000-2010 David Woodhouse <dwmw2@infradead.org> et al. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -/* Overhauled routines for dealing with different mmap regions of flash */ - -#ifndef __LINUX_MTD_MAP_H__ -#define __LINUX_MTD_MAP_H__ - -#include <linux/types.h> -#include <linux/list.h> -#include <linux/string.h> -#include <linux/bug.h> -#include <linux/kernel.h> - -#include <asm/unaligned.h> -#include <asm/io.h> -#include <asm/barrier.h> - -#ifdef CONFIG_MTD_MAP_BANK_WIDTH_1 -#define map_bankwidth(map) 1 -#define map_bankwidth_is_1(map) (map_bankwidth(map) == 1) -#define map_bankwidth_is_large(map) (0) -#define map_words(map) (1) -#define MAX_MAP_BANKWIDTH 1 -#else -#define map_bankwidth_is_1(map) (0) -#endif - -#ifdef CONFIG_MTD_MAP_BANK_WIDTH_2 -# ifdef map_bankwidth -# undef map_bankwidth -# define map_bankwidth(map) ((map)->bankwidth) -# else -# define map_bankwidth(map) 2 -# define map_bankwidth_is_large(map) (0) -# define map_words(map) (1) -# endif -#define map_bankwidth_is_2(map) (map_bankwidth(map) == 2) -#undef MAX_MAP_BANKWIDTH -#define MAX_MAP_BANKWIDTH 2 -#else -#define map_bankwidth_is_2(map) (0) -#endif - -#ifdef CONFIG_MTD_MAP_BANK_WIDTH_4 -# ifdef map_bankwidth -# undef map_bankwidth -# define map_bankwidth(map) ((map)->bankwidth) -# else -# define map_bankwidth(map) 4 -# define map_bankwidth_is_large(map) (0) -# define map_words(map) (1) -# endif -#define map_bankwidth_is_4(map) (map_bankwidth(map) == 4) -#undef MAX_MAP_BANKWIDTH -#define MAX_MAP_BANKWIDTH 4 -#else -#define map_bankwidth_is_4(map) (0) -#endif - -/* ensure we never evaluate anything shorted than an unsigned long - * to zero, and ensure we'll never miss the end of an comparison (bjd) */ - -#define map_calc_words(map) ((map_bankwidth(map) + (sizeof(unsigned long)-1))/ sizeof(unsigned long)) - -#ifdef CONFIG_MTD_MAP_BANK_WIDTH_8 -# ifdef map_bankwidth -# undef map_bankwidth -# define map_bankwidth(map) ((map)->bankwidth) -# if BITS_PER_LONG < 64 -# undef map_bankwidth_is_large -# define map_bankwidth_is_large(map) (map_bankwidth(map) > BITS_PER_LONG/8) -# undef map_words -# define map_words(map) map_calc_words(map) -# endif -# else -# define map_bankwidth(map) 8 -# define map_bankwidth_is_large(map) (BITS_PER_LONG < 64) -# define map_words(map) map_calc_words(map) -# endif -#define map_bankwidth_is_8(map) (map_bankwidth(map) == 8) -#undef MAX_MAP_BANKWIDTH -#define MAX_MAP_BANKWIDTH 8 -#else -#define map_bankwidth_is_8(map) (0) -#endif - -#ifdef CONFIG_MTD_MAP_BANK_WIDTH_16 -# ifdef map_bankwidth -# undef map_bankwidth -# define map_bankwidth(map) ((map)->bankwidth) -# undef map_bankwidth_is_large -# define map_bankwidth_is_large(map) (map_bankwidth(map) > BITS_PER_LONG/8) -# undef map_words -# define map_words(map) map_calc_words(map) -# else -# define map_bankwidth(map) 16 -# define map_bankwidth_is_large(map) (1) -# define map_words(map) map_calc_words(map) -# endif -#define map_bankwidth_is_16(map) (map_bankwidth(map) == 16) -#undef MAX_MAP_BANKWIDTH -#define MAX_MAP_BANKWIDTH 16 -#else -#define map_bankwidth_is_16(map) (0) -#endif - -#ifdef CONFIG_MTD_MAP_BANK_WIDTH_32 -# ifdef map_bankwidth -# undef map_bankwidth -# define map_bankwidth(map) ((map)->bankwidth) -# undef map_bankwidth_is_large -# define map_bankwidth_is_large(map) (map_bankwidth(map) > BITS_PER_LONG/8) -# undef map_words -# define map_words(map) map_calc_words(map) -# else -# define map_bankwidth(map) 32 -# define map_bankwidth_is_large(map) (1) -# define map_words(map) map_calc_words(map) -# endif -#define map_bankwidth_is_32(map) (map_bankwidth(map) == 32) -#undef MAX_MAP_BANKWIDTH -#define MAX_MAP_BANKWIDTH 32 -#else -#define map_bankwidth_is_32(map) (0) -#endif - -#ifndef map_bankwidth -#warning "No CONFIG_MTD_MAP_BANK_WIDTH_xx selected. No NOR chip support can work" -static inline int map_bankwidth(void *map) -{ - BUG(); - return 0; -} -#define map_bankwidth_is_large(map) (0) -#define map_words(map) (0) -#define MAX_MAP_BANKWIDTH 1 -#endif - -static inline int map_bankwidth_supported(int w) -{ - switch (w) { -#ifdef CONFIG_MTD_MAP_BANK_WIDTH_1 - case 1: -#endif -#ifdef CONFIG_MTD_MAP_BANK_WIDTH_2 - case 2: -#endif -#ifdef CONFIG_MTD_MAP_BANK_WIDTH_4 - case 4: -#endif -#ifdef CONFIG_MTD_MAP_BANK_WIDTH_8 - case 8: -#endif -#ifdef CONFIG_MTD_MAP_BANK_WIDTH_16 - case 16: -#endif -#ifdef CONFIG_MTD_MAP_BANK_WIDTH_32 - case 32: -#endif - return 1; - - default: - return 0; - } -} - -#define MAX_MAP_LONGS ( ((MAX_MAP_BANKWIDTH*8) + BITS_PER_LONG - 1) / BITS_PER_LONG ) - -typedef union { - unsigned long x[MAX_MAP_LONGS]; -} map_word; - -/* The map stuff is very simple. You fill in your struct map_info with - a handful of routines for accessing the device, making sure they handle - paging etc. correctly if your device needs it. Then you pass it off - to a chip probe routine -- either JEDEC or CFI probe or both -- via - do_map_probe(). If a chip is recognised, the probe code will invoke the - appropriate chip driver (if present) and return a struct mtd_info. - At which point, you fill in the mtd->module with your own module - address, and register it with the MTD core code. Or you could partition - it and register the partitions instead, or keep it for your own private - use; whatever. - - The mtd->priv field will point to the struct map_info, and any further - private data required by the chip driver is linked from the - mtd->priv->fldrv_priv field. This allows the map driver to get at - the destructor function map->fldrv_destroy() when it's tired - of living. -*/ - -struct map_info { - const char *name; - unsigned long size; - resource_size_t phys; -#define NO_XIP (-1UL) - - void __iomem *virt; - void *cached; - - int swap; /* this mapping's byte-swapping requirement */ - int bankwidth; /* in octets. This isn't necessarily the width - of actual bus cycles -- it's the repeat interval - in bytes, before you are talking to the first chip again. - */ - -#ifdef CONFIG_MTD_COMPLEX_MAPPINGS - map_word (*read)(struct map_info *, unsigned long); - void (*copy_from)(struct map_info *, void *, unsigned long, ssize_t); - - void (*write)(struct map_info *, const map_word, unsigned long); - void (*copy_to)(struct map_info *, unsigned long, const void *, ssize_t); - - /* We can perhaps put in 'point' and 'unpoint' methods, if we really - want to enable XIP for non-linear mappings. Not yet though. */ -#endif - /* It's possible for the map driver to use cached memory in its - copy_from implementation (and _only_ with copy_from). However, - when the chip driver knows some flash area has changed contents, - it will signal it to the map driver through this routine to let - the map driver invalidate the corresponding cache as needed. - If there is no cache to care about this can be set to NULL. */ - void (*inval_cache)(struct map_info *, unsigned long, ssize_t); - - /* set_vpp() must handle being reentered -- enable, enable, disable - must leave it enabled. */ - void (*set_vpp)(struct map_info *, int); - - unsigned long pfow_base; - unsigned long map_priv_1; - unsigned long map_priv_2; - void *fldrv_priv; - struct mtd_chip_driver *fldrv; -}; - -struct mtd_chip_driver { - struct mtd_info *(*probe)(struct map_info *map); - void (*destroy)(struct mtd_info *); - struct module *module; - char *name; - struct list_head list; -}; - -void register_mtd_chip_driver(struct mtd_chip_driver *); -void unregister_mtd_chip_driver(struct mtd_chip_driver *); - -struct mtd_info *do_map_probe(const char *name, struct map_info *map); -void map_destroy(struct mtd_info *mtd); - -#define ENABLE_VPP(map) do { if(map->set_vpp) map->set_vpp(map, 1); } while(0) -#define DISABLE_VPP(map) do { if(map->set_vpp) map->set_vpp(map, 0); } while(0) - -#define INVALIDATE_CACHED_RANGE(map, from, size) \ - do { if(map->inval_cache) map->inval_cache(map, from, size); } while(0) - - -static inline int map_word_equal(struct map_info *map, map_word val1, map_word val2) -{ - int i; - for (i=0; i<map_words(map); i++) { - if (val1.x[i] != val2.x[i]) - return 0; - } - return 1; -} - -static inline map_word map_word_and(struct map_info *map, map_word val1, map_word val2) -{ - map_word r; - int i; - - for (i=0; i<map_words(map); i++) { - r.x[i] = val1.x[i] & val2.x[i]; - } - return r; -} - -static inline map_word map_word_clr(struct map_info *map, map_word val1, map_word val2) -{ - map_word r; - int i; - - for (i=0; i<map_words(map); i++) { - r.x[i] = val1.x[i] & ~val2.x[i]; - } - return r; -} - -static inline map_word map_word_or(struct map_info *map, map_word val1, map_word val2) -{ - map_word r; - int i; - - for (i=0; i<map_words(map); i++) { - r.x[i] = val1.x[i] | val2.x[i]; - } - return r; -} - -#define map_word_andequal(m, a, b, z) map_word_equal(m, z, map_word_and(m, a, b)) - -static inline int map_word_bitsset(struct map_info *map, map_word val1, map_word val2) -{ - int i; - - for (i=0; i<map_words(map); i++) { - if (val1.x[i] & val2.x[i]) - return 1; - } - return 0; -} - -static inline map_word map_word_load(struct map_info *map, const void *ptr) -{ - map_word r; - - if (map_bankwidth_is_1(map)) - r.x[0] = *(unsigned char *)ptr; - else if (map_bankwidth_is_2(map)) - r.x[0] = get_unaligned((uint16_t *)ptr); - else if (map_bankwidth_is_4(map)) - r.x[0] = get_unaligned((uint32_t *)ptr); -#if BITS_PER_LONG >= 64 - else if (map_bankwidth_is_8(map)) - r.x[0] = get_unaligned((uint64_t *)ptr); -#endif - else if (map_bankwidth_is_large(map)) - memcpy(r.x, ptr, map->bankwidth); - - return r; -} - -static inline map_word map_word_load_partial(struct map_info *map, map_word orig, const unsigned char *buf, int start, int len) -{ - int i; - - if (map_bankwidth_is_large(map)) { - char *dest = (char *)&orig; - memcpy(dest+start, buf, len); - } else { - for (i=start; i < start+len; i++) { - int bitpos; -#ifdef __LITTLE_ENDIAN - bitpos = i*8; -#else /* __BIG_ENDIAN */ - bitpos = (map_bankwidth(map)-1-i)*8; -#endif - orig.x[0] &= ~(0xff << bitpos); - orig.x[0] |= buf[i-start] << bitpos; - } - } - return orig; -} - -#if BITS_PER_LONG < 64 -#define MAP_FF_LIMIT 4 -#else -#define MAP_FF_LIMIT 8 -#endif - -static inline map_word map_word_ff(struct map_info *map) -{ - map_word r; - int i; - - if (map_bankwidth(map) < MAP_FF_LIMIT) { - int bw = 8 * map_bankwidth(map); - r.x[0] = (1 << bw) - 1; - } else { - for (i=0; i<map_words(map); i++) - r.x[i] = ~0UL; - } - return r; -} - -static inline map_word inline_map_read(struct map_info *map, unsigned long ofs) -{ - map_word r; - - if (map_bankwidth_is_1(map)) - r.x[0] = __raw_readb(map->virt + ofs); - else if (map_bankwidth_is_2(map)) - r.x[0] = __raw_readw(map->virt + ofs); - else if (map_bankwidth_is_4(map)) - r.x[0] = __raw_readl(map->virt + ofs); -#if BITS_PER_LONG >= 64 - else if (map_bankwidth_is_8(map)) - r.x[0] = __raw_readq(map->virt + ofs); -#endif - else if (map_bankwidth_is_large(map)) - memcpy_fromio(r.x, map->virt+ofs, map->bankwidth); - else - BUG(); - - return r; -} - -static inline void inline_map_write(struct map_info *map, const map_word datum, unsigned long ofs) -{ - if (map_bankwidth_is_1(map)) - __raw_writeb(datum.x[0], map->virt + ofs); - else if (map_bankwidth_is_2(map)) - __raw_writew(datum.x[0], map->virt + ofs); - else if (map_bankwidth_is_4(map)) - __raw_writel(datum.x[0], map->virt + ofs); -#if BITS_PER_LONG >= 64 - else if (map_bankwidth_is_8(map)) - __raw_writeq(datum.x[0], map->virt + ofs); -#endif - else if (map_bankwidth_is_large(map)) - memcpy_toio(map->virt+ofs, datum.x, map->bankwidth); - mb(); -} - -static inline void inline_map_copy_from(struct map_info *map, void *to, unsigned long from, ssize_t len) -{ - if (map->cached) - memcpy(to, (char *)map->cached + from, len); - else - memcpy_fromio(to, map->virt + from, len); -} - -static inline void inline_map_copy_to(struct map_info *map, unsigned long to, const void *from, ssize_t len) -{ - memcpy_toio(map->virt + to, from, len); -} - -#ifdef CONFIG_MTD_COMPLEX_MAPPINGS -#define map_read(map, ofs) (map)->read(map, ofs) -#define map_copy_from(map, to, from, len) (map)->copy_from(map, to, from, len) -#define map_write(map, datum, ofs) (map)->write(map, datum, ofs) -#define map_copy_to(map, to, from, len) (map)->copy_to(map, to, from, len) - -extern void simple_map_init(struct map_info *); -#define map_is_linear(map) (map->phys != NO_XIP) - -#else -#define map_read(map, ofs) inline_map_read(map, ofs) -#define map_copy_from(map, to, from, len) inline_map_copy_from(map, to, from, len) -#define map_write(map, datum, ofs) inline_map_write(map, datum, ofs) -#define map_copy_to(map, to, from, len) inline_map_copy_to(map, to, from, len) - - -#define simple_map_init(map) BUG_ON(!map_bankwidth_supported((map)->bankwidth)) -#define map_is_linear(map) ({ (void)(map); 1; }) - -#endif /* !CONFIG_MTD_COMPLEX_MAPPINGS */ - -#endif /* __LINUX_MTD_MAP_H__ */ diff --git a/ANDROID_3.4.5/include/linux/mtd/mtd.h b/ANDROID_3.4.5/include/linux/mtd/mtd.h deleted file mode 100644 index 80affde5..00000000 --- a/ANDROID_3.4.5/include/linux/mtd/mtd.h +++ /dev/null @@ -1,429 +0,0 @@ -/* - * Copyright © 1999-2010 David Woodhouse <dwmw2@infradead.org> et al. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifndef __MTD_MTD_H__ -#define __MTD_MTD_H__ - -#include <linux/types.h> -#include <linux/uio.h> -#include <linux/notifier.h> -#include <linux/device.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_PENDING 0x01 -#define MTD_ERASING 0x02 -#define MTD_ERASE_SUSPEND 0x04 -#define MTD_ERASE_DONE 0x08 -#define MTD_ERASE_FAILED 0x10 - -#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; - uint64_t addr; - uint64_t len; - uint64_t fail_addr; - u_long time; - u_long retries; - unsigned dev; - unsigned cell; - void (*callback) (struct erase_info *self); - u_long priv; - u_char state; - struct erase_info *next; -}; - -struct mtd_erase_region_info { - 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 */ -}; - -/** - * struct mtd_oob_ops - oob operation operands - * @mode: operation mode - * - * @len: number of data bytes to write/read - * - * @retlen: number of data bytes written/read - * - * @ooblen: number of oob bytes to write/read - * @oobretlen: number of oob bytes written/read - * @ooboffs: offset of oob data in the oob area (only relevant when - * mode = MTD_OPS_PLACE_OOB or MTD_OPS_RAW) - * @datbuf: data buffer - if NULL only oob data are read/written - * @oobbuf: oob data buffer - * - * 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. - */ -struct mtd_oob_ops { - unsigned int mode; - size_t len; - size_t retlen; - size_t ooblen; - size_t oobretlen; - uint32_t ooboffs; - uint8_t *datbuf; - uint8_t *oobbuf; -}; - -#define MTD_MAX_OOBFREE_ENTRIES_LARGE 32 -#define MTD_MAX_ECCPOS_ENTRIES_LARGE 448 -/* - * Internal ECC layout control structure. For historical reasons, there is a - * similar, smaller struct nand_ecclayout_user (in mtd-abi.h) that is retained - * for export to user-space via the ECCGETLAYOUT ioctl. - * nand_ecclayout should be expandable in the future simply by the above macros. - */ -struct nand_ecclayout { - __u32 eccbytes; - __u32 eccpos[MTD_MAX_ECCPOS_ENTRIES_LARGE]; - __u32 oobavail; - struct nand_oobfree oobfree[MTD_MAX_OOBFREE_ENTRIES_LARGE]; -}; - -struct module; /* only needed for owner field in mtd_info */ - -struct mtd_info { - u_char type; - 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 - */ - 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 - * it is of ECC block size, etc. It is illegal to have writesize = 0. - * Any driver registering a struct mtd_info must ensure a writesize of - * 1 or larger. - */ - uint32_t writesize; - - /* - * Size of the write buffer used by the MTD. MTD devices having a write - * buffer can write multiple writesize chunks at a time. E.g. while - * writing 4 * writesize bytes to a device with 2 * writesize bytes - * buffer the MTD driver can (but doesn't have to) do 2 writesize - * operations, but not 4. Currently, all NANDs have writebufsize - * equivalent to writesize (NAND page size). Some NOR flashes do have - * writebufsize greater than writesize. - */ - uint32_t writebufsize; - - uint32_t oobsize; // Amount of OOB data per block (e.g. 16) - uint32_t oobavail; // Available OOB bytes per block - - uint32_t realerasesize; //dan_multi add for multi plane access - uint32_t realwritesize; - uint32_t realoobsize; - int planenum; - - /* - * 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; - int index; - - /* ECC layout structure pointer - read only! */ - struct nand_ecclayout *ecclayout; - - /* max number of correctible bit errors per writesize */ - unsigned int ecc_strength; - - /* Data for variable erase regions. If numeraseregions is zero, - * it means that the whole device has erasesize as given above. - */ - int numeraseregions; - struct mtd_erase_region_info *eraseregions; - - /* - * Do not call via these pointers, use corresponding mtd_*() - * wrappers instead. - */ - int (*_erase) (struct mtd_info *mtd, struct erase_info *instr); - int (*_point) (struct mtd_info *mtd, loff_t from, size_t len, - size_t *retlen, void **virt, resource_size_t *phys); - int (*_unpoint) (struct mtd_info *mtd, loff_t from, size_t len); - unsigned long (*_get_unmapped_area) (struct mtd_info *mtd, - unsigned long len, - unsigned long offset, - unsigned long flags); - int (*_read) (struct mtd_info *mtd, loff_t from, size_t len, - size_t *retlen, u_char *buf); - int (*_write) (struct mtd_info *mtd, loff_t to, size_t len, - size_t *retlen, const u_char *buf); - int (*_panic_write) (struct mtd_info *mtd, loff_t to, size_t len, - size_t *retlen, const u_char *buf); - int (*_read_oob) (struct mtd_info *mtd, loff_t from, - struct mtd_oob_ops *ops); - int (*read_bbinfo_facmk) (struct mtd_info *mtd, loff_t from, - struct mtd_oob_ops *ops); //Vincent 20090526 - int (*_write_oob) (struct mtd_info *mtd, loff_t to, - struct mtd_oob_ops *ops); - int (*_get_fact_prot_info) (struct mtd_info *mtd, struct otp_info *buf, - size_t len); - int (*get_para) (struct mtd_info *mtd, int chip); - int (*_read_fact_prot_reg) (struct mtd_info *mtd, loff_t from, - size_t len, size_t *retlen, u_char *buf); - int (*_get_user_prot_info) (struct mtd_info *mtd, struct otp_info *buf, - size_t len); - int (*_read_user_prot_reg) (struct mtd_info *mtd, loff_t from, - size_t len, size_t *retlen, u_char *buf); - int (*_write_user_prot_reg) (struct mtd_info *mtd, loff_t to, - size_t len, size_t *retlen, u_char *buf); - int (*_lock_user_prot_reg) (struct mtd_info *mtd, loff_t from, - size_t len); - int (*_writev) (struct mtd_info *mtd, const struct kvec *vecs, - unsigned long count, loff_t to, size_t *retlen); - void (*_sync) (struct mtd_info *mtd); - int (*_lock) (struct mtd_info *mtd, loff_t ofs, uint64_t len); - int (*_unlock) (struct mtd_info *mtd, loff_t ofs, uint64_t len); - int (*_is_locked) (struct mtd_info *mtd, loff_t ofs, uint64_t len); - int (*_block_isbad) (struct mtd_info *mtd, loff_t ofs); - int (*_block_markbad) (struct mtd_info *mtd, loff_t ofs); - int (*_suspend) (struct mtd_info *mtd); - void (*_resume) (struct mtd_info *mtd); - /* - * If the driver is something smart, like UBI, it may need to maintain - * its own reference counting. The below functions are only for driver. - */ - int (*_get_device) (struct mtd_info *mtd); - void (*_put_device) (struct mtd_info *mtd); - - /* Backing device capabilities for this device - * - provides mmap capabilities - */ - struct backing_dev_info *backing_dev_info; - - struct notifier_block reboot_notifier; /* default mode before reboot */ - - /* ECC status information */ - struct mtd_ecc_stats ecc_stats; - /* Subpage shift (NAND) */ - int subpage_sft; - - void *priv; - - struct module *owner; - struct device dev; - int usecount; - int blkcnt; - int pagecnt; - int dwECCBitNum; - int dwRetry; - int dwRdmz; - int dwDDR; - int id; - int id2; - unsigned int spec_clk; - int spec_tadl; - int bbt_sw_rdmz; - uint32_t pageSizek; - int ecc_err_cnt; - int ecc_err_level; -}; - -int mtd_erase(struct mtd_info *mtd, struct erase_info *instr); -int mtd_point(struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, - void **virt, resource_size_t *phys); -int mtd_unpoint(struct mtd_info *mtd, loff_t from, size_t len); -unsigned long mtd_get_unmapped_area(struct mtd_info *mtd, unsigned long len, - unsigned long offset, unsigned long flags); -int mtd_read(struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, - u_char *buf); -int mtd_write(struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, - const u_char *buf); -int mtd_panic_write(struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, - const u_char *buf); - -static inline int mtd_read_oob(struct mtd_info *mtd, loff_t from, - struct mtd_oob_ops *ops) -{ - ops->retlen = ops->oobretlen = 0; - if (!mtd->_read_oob) - return -EOPNOTSUPP; - return mtd->_read_oob(mtd, from, ops); -} - -static inline int mtd_write_oob(struct mtd_info *mtd, loff_t to, - struct mtd_oob_ops *ops) -{ - ops->retlen = ops->oobretlen = 0; - if (!mtd->_write_oob) - return -EOPNOTSUPP; - if (!(mtd->flags & MTD_WRITEABLE)) - return -EROFS; - return mtd->_write_oob(mtd, to, ops); -} - -int mtd_get_fact_prot_info(struct mtd_info *mtd, struct otp_info *buf, - size_t len); -int mtd_read_fact_prot_reg(struct mtd_info *mtd, loff_t from, size_t len, - size_t *retlen, u_char *buf); -int mtd_get_user_prot_info(struct mtd_info *mtd, struct otp_info *buf, - size_t len); -int mtd_read_user_prot_reg(struct mtd_info *mtd, loff_t from, size_t len, - size_t *retlen, u_char *buf); -int mtd_write_user_prot_reg(struct mtd_info *mtd, loff_t to, size_t len, - size_t *retlen, u_char *buf); -int mtd_lock_user_prot_reg(struct mtd_info *mtd, loff_t from, size_t len); - -int mtd_writev(struct mtd_info *mtd, const struct kvec *vecs, - unsigned long count, loff_t to, size_t *retlen); - -static inline void mtd_sync(struct mtd_info *mtd) -{ - if (mtd->_sync) - mtd->_sync(mtd); -} - -int mtd_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len); -int mtd_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len); -int mtd_is_locked(struct mtd_info *mtd, loff_t ofs, uint64_t len); -int mtd_block_isbad(struct mtd_info *mtd, loff_t ofs); -int mtd_block_markbad(struct mtd_info *mtd, loff_t ofs); - -static inline int mtd_suspend(struct mtd_info *mtd) -{ - return mtd->_suspend ? mtd->_suspend(mtd) : 0; -} - -static inline void mtd_resume(struct mtd_info *mtd) -{ - if (mtd->_resume) - mtd->_resume(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); -} - -static inline int mtd_has_oob(const struct mtd_info *mtd) -{ - return mtd->_read_oob && mtd->_write_oob; -} - -static inline int mtd_can_have_bb(const struct mtd_info *mtd) -{ - return !!mtd->_block_isbad; -} - - /* Kernel-side ioctl definitions */ - -struct mtd_partition; -struct mtd_part_parser_data; -extern int add_mtd_device(struct mtd_info *mtd); -extern int del_mtd_device (struct mtd_info *mtd); - -extern int mtd_device_parse_register(struct mtd_info *mtd, - const char **part_probe_types, - struct mtd_part_parser_data *parser_data, - const struct mtd_partition *defparts, - int defnr_parts); -#define mtd_device_register(master, parts, nr_parts) \ - mtd_device_parse_register(master, NULL, NULL, parts, nr_parts) -extern int mtd_device_unregister(struct mtd_info *master); -extern struct mtd_info *get_mtd_device(struct mtd_info *mtd, int num); -extern int __get_mtd_device(struct mtd_info *mtd); -extern void __put_mtd_device(struct mtd_info *mtd); -extern struct mtd_info *get_mtd_device_nm(const char *name); -extern void put_mtd_device(struct mtd_info *mtd); -typedef int (*SF_FPTR)(int l); -extern SF_FPTR wmt_sf_prot; - - -struct mtd_notifier { - void (*add)(struct mtd_info *mtd); - void (*remove)(struct mtd_info *mtd); - struct list_head list; -}; - - -extern void register_mtd_user (struct mtd_notifier *new); -extern int unregister_mtd_user (struct mtd_notifier *old); -void *mtd_kmalloc_up_to(const struct mtd_info *mtd, size_t *size); - -void mtd_erase_callback(struct erase_info *instr); - -static inline int mtd_is_bitflip(int err) { - return err == -EUCLEAN; -} - -static inline int mtd_is_eccerr(int err) { - return err == -EBADMSG; -} - -static inline int mtd_is_bitflip_or_eccerr(int err) { - return mtd_is_bitflip(err) || mtd_is_eccerr(err); -} - -#endif /* __MTD_MTD_H__ */ diff --git a/ANDROID_3.4.5/include/linux/mtd/mtdram.h b/ANDROID_3.4.5/include/linux/mtd/mtdram.h deleted file mode 100644 index 68891313..00000000 --- a/ANDROID_3.4.5/include/linux/mtd/mtdram.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef __MTD_MTDRAM_H__ -#define __MTD_MTDRAM_H__ - -#include <linux/mtd/mtd.h> -int mtdram_init_device(struct mtd_info *mtd, void *mapped_address, - unsigned long size, char *name); - -#endif /* __MTD_MTDRAM_H__ */ diff --git a/ANDROID_3.4.5/include/linux/mtd/nand-gpio.h b/ANDROID_3.4.5/include/linux/mtd/nand-gpio.h deleted file mode 100644 index 51534e50..00000000 --- a/ANDROID_3.4.5/include/linux/mtd/nand-gpio.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef __LINUX_MTD_NAND_GPIO_H -#define __LINUX_MTD_NAND_GPIO_H - -#include <linux/mtd/nand.h> - -struct gpio_nand_platdata { - int gpio_nce; - int gpio_nwp; - int gpio_cle; - int gpio_ale; - int gpio_rdy; - void (*adjust_parts)(struct gpio_nand_platdata *, size_t); - struct mtd_partition *parts; - unsigned int num_parts; - unsigned int options; - int chip_delay; -}; - -#endif diff --git a/ANDROID_3.4.5/include/linux/mtd/nand.h b/ANDROID_3.4.5/include/linux/mtd/nand.h deleted file mode 100644 index 19eb23c1..00000000 --- a/ANDROID_3.4.5/include/linux/mtd/nand.h +++ /dev/null @@ -1,828 +0,0 @@ -/* - * linux/include/linux/mtd/nand.h - * - * Copyright © 2000-2010 David Woodhouse <dwmw2@infradead.org> - * Steven J. Hill <sjhill@realitydiluted.com> - * Thomas Gleixner <tglx@linutronix.de> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * Info: - * Contains standard defines and IDs for NAND flash devices - * - * Changelog: - * See git changelog. - */ -#ifndef __LINUX_MTD_NAND_H -#define __LINUX_MTD_NAND_H - -#include <linux/wait.h> -#include <linux/spinlock.h> -#include <linux/mtd/mtd.h> -#include <linux/mtd/flashchip.h> -#include <linux/mtd/bbm.h> - -struct mtd_info; -struct nand_flash_dev; -/* Scan and identify a NAND device */ -extern int nand_scan(struct mtd_info *mtd, int max_chips); -/* - * Separate phases of nand_scan(), allowing board driver to intervene - * and override command or ECC setup according to flash type. - */ -extern int nand_scan_ident(struct mtd_info *mtd, int max_chips, - struct nand_flash_dev *table); -extern int nand_scan_tail(struct mtd_info *mtd); - -/* Free resources held by the NAND device */ -extern void nand_release(struct mtd_info *mtd); - -/* Internal helper for board drivers which need to override command function */ -extern void nand_wait_ready(struct mtd_info *mtd); - -/* locks all blocks present in the device */ -extern int nand_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len); - -/* unlocks specified locked blocks */ -extern int nand_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len); - -/* The maximum number of NAND chips in an array */ -#define NAND_MAX_CHIPS 8 - -/* - * This constant declares the max. oobsize / page, which - * is supported now. If you add a chip with bigger oobsize/page - * adjust this accordingly. - */ -#define NAND_MAX_OOBSIZE 2560 -#define NAND_MAX_PAGESIZE 32768 - -/* - * Constants for hardware specific CLE/ALE/NCE function - * - * These are bits which can be or'ed to set/clear multiple - * bits in one go. - */ -/* Select the chip by setting nCE to low */ -#define NAND_NCE 0x01 -/* Select the command latch by setting CLE to high */ -#define NAND_CLE 0x02 -/* Select the address latch by setting ALE to high */ -#define NAND_ALE 0x04 - -#define NAND_CTRL_CLE (NAND_NCE | NAND_CLE) -#define NAND_CTRL_ALE (NAND_NCE | NAND_ALE) -#define NAND_CTRL_CHANGE 0x80 - -/* - * Standard NAND flash commands - */ -#define NAND_CMD_READ0 0 -#define NAND_CMD_READ1 1 -#define NAND_CMD_RNDOUT 5 -#define NAND_CMD_PAGEPROG 0x10 -#define NAND_CMD_READOOB 0x50 -#define NAND_CMD_ERASE1 0x60 -#define NAND_CMD_STATUS 0x70 -#define NAND_CMD_STATUS_MULTI 0x71 -#define NAND_CMD_SEQIN 0x80 -#define NAND_CMD_RNDIN 0x85 -#define NAND_CMD_READID 0x90 -#define NAND_CMD_ERASE2 0xd0 -#define NAND_CMD_ERASE3 0xd1 -#define NAND_CMD_PARAM 0xec -#define NAND_CMD_RESET 0xff -#define NAND_CMD_RESET_NO_STATUS_READ 0xFF1 -#define NAND_CMD_HYNIX_RETRY_END 0x38 - -#define NAND_CMD_LOCK 0x2a -#define NAND_CMD_UNLOCK1 0x23 -#define NAND_CMD_UNLOCK2 0x24 - -/* Extended commands for large page devices */ -#define NAND_CMD_READSTART 0x30 -#define NAND_CMD_RNDOUTSTART 0xE0 -#define NAND_CMD_CACHEDPROG 0x15 - -/* Extended commands for AG-AND device */ -/* - * Note: the command for NAND_CMD_DEPLETE1 is really 0x00 but - * there is no way to distinguish that from NAND_CMD_READ0 - * until the remaining sequence of commands has been completed - * so add a high order bit and mask it off in the command. - */ -#define NAND_CMD_DEPLETE1 0x100 -#define NAND_CMD_DEPLETE2 0x38 -#define NAND_CMD_STATUS_MULTI 0x71 -#define NAND_CMD_STATUS_ERROR 0x72 -/* multi-bank error status (banks 0-3) */ -#define NAND_CMD_STATUS_ERROR0 0x73 -#define NAND_CMD_STATUS_ERROR1 0x74 -#define NAND_CMD_STATUS_ERROR2 0x75 -#define NAND_CMD_STATUS_ERROR3 0x76 -#define NAND_CMD_STATUS_RESET 0x7f -#define NAND_CMD_STATUS_CLEAR 0xff - -#define MULTI_READ_1CYCLE 0x200 -#define MULTI_READ_2CYCLE 0x201 -#define MULTI_COPY_1CYCLE 0x202 -#define MULTI_COPY_2CYCLE 0x203 -#define MULTI_COPY_3CYCLE 0x204 -#define COPY_BACK_1CYCLE 0x205 -#define COPY_BACK_2CYCLE 0x206 - - -/* - * Support Nand special commands - */ -#define CACHE_READ (1<<0) -#define CACHE_PROG (1<<1) -#define COPY_BACK (1<<2) -#define INTEL_COPY_BACK (1<<3) -#define RANDOM_INPUT (1<<4) -#define RANDOM_OUTPUT (1<<5) -#define PLANE2_READ (1<<6) -#define PLANE2_PROG (1<<7) -#define PLANE2_CACHE_READ (1<<8) -#define PLANE2_CACHE_PROG (1<<9) -#define PLANE2_COPY_BACK (1<<10) -#define PLANE2_INTEL_COPY_BACK (1<<11) -#define PLANE2_RANDOM_OUTPUT (1<<12) -#define PLANE2_ERASE (1<<13) - -#define PLANE4_READ (1<<16) -#define PLANE4_PROG (1<<17) -#define PLANE4_CACHE_READ (1<<18) -#define PLANE4_CACHE_PROG (1<<19) -#define PLANE4_COPY_BACK (1<<20) -#define PLANE4_INTEL_COPY_BACK (1<<21) -#define PLANE4_RANDOM_OUTPUT (1<<22) -#define PLANE4_ERASE (1<<23) - - -#define NAND_CMD_NONE -1 - -/* Status bits */ -#define NAND_STATUS_FAIL 0x01 -#define NAND_STATUS_FAIL_N1 0x02 -#define NAND_STATUS_TRUE_READY 0x20 -#define NAND_STATUS_READY 0x40 -#define NAND_STATUS_WP 0x80 - -/* - * Constants for ECC_MODES - */ -typedef enum { - NAND_ECC_NONE, - NAND_ECC_SOFT, - NAND_ECC_HW, - NAND_ECC_HW_SYNDROME, - NAND_ECC_HW_OOB_FIRST, - NAND_ECC_SOFT_BCH, -} nand_ecc_modes_t; - -/* - * Constants for Hardware ECC - */ -/* Reset Hardware ECC for read */ -#define NAND_ECC_READ 0 -/* Reset Hardware ECC for write */ -#define NAND_ECC_WRITE 1 -/* Enable Hardware ECC before syndrome is read back from flash */ -#define NAND_ECC_READSYN 2 - -/* Bit mask for flags passed to do_nand_read_ecc */ -#define NAND_GET_DEVICE 0x80 - - -/* - * Option constants for bizarre disfunctionality and real - * features. - */ -/* Chip can not auto increment pages */ -#define NAND_NO_AUTOINCR 0x00000001 -/* Buswidth is 16 bit */ -#define NAND_BUSWIDTH_16 0x00000002 -/* Device supports partial programming without padding */ -#define NAND_NO_PADDING 0x00000004 -/* Chip has cache program function */ -#define NAND_CACHEPRG 0x00000008 -/* Chip has copy back function */ -#define NAND_COPYBACK 0x00000010 -/* - * AND Chip which has 4 banks and a confusing page / block - * assignment. See Renesas datasheet for further information. - */ -#define NAND_IS_AND 0x00000020 -/* - * Chip has a array of 4 pages which can be read without - * additional ready /busy waits. - */ -#define NAND_4PAGE_ARRAY 0x00000040 -/* - * Chip requires that BBT is periodically rewritten to prevent - * bits from adjacent blocks from 'leaking' in altering data. - * This happens with the Renesas AG-AND chips, possibly others. - */ -#define BBT_AUTO_REFRESH 0x00000080 -/* - * Chip does not require ready check on read. True - * for all large page devices, as they do not support - * autoincrement. - */ -#define NAND_NO_READRDY 0x00000100 -/* Chip does not allow subpage writes */ -#define NAND_NO_SUBPAGE_WRITE 0x00000200 - -/* Device is one of 'new' xD cards that expose fake nand command set */ -#define NAND_BROKEN_XD 0x00000400 - -/* Device behaves just like nand, but is readonly */ -#define NAND_ROM 0x00000800 - -/* Options valid for Samsung large page devices */ -#define NAND_SAMSUNG_LP_OPTIONS \ - (NAND_NO_PADDING | NAND_CACHEPRG | NAND_COPYBACK) - -/* Macros to identify the above */ -#define NAND_CANAUTOINCR(chip) (!(chip->options & NAND_NO_AUTOINCR)) -#define NAND_MUST_PAD(chip) (!(chip->options & NAND_NO_PADDING)) -#define NAND_HAS_CACHEPROG(chip) ((chip->options & NAND_CACHEPRG)) -#define NAND_HAS_COPYBACK(chip) ((chip->options & NAND_COPYBACK)) -/* Large page NAND with SOFT_ECC should support subpage reads */ -#define NAND_SUBPAGE_READ(chip) ((chip->ecc.mode == NAND_ECC_SOFT) \ - && (chip->page_shift > 9)) - -/* Mask to zero out the chip options, which come from the id table */ -#define NAND_CHIPOPTIONS_MSK (0x0000ffff & ~NAND_NO_AUTOINCR) - -/* Non chip related options */ -/* This option skips the bbt scan during initialization. */ -#define NAND_SKIP_BBTSCAN 0x00010000 -/* - * This option is defined if the board driver allocates its own buffers - * (e.g. because it needs them DMA-coherent). - */ -#define NAND_OWN_BUFFERS 0x00020000 -/* Chip may not exist, so silence any errors in scan */ -#define NAND_SCAN_SILENT_NODEV 0x00040000 - -/* Options set by nand scan */ -/* Nand scan has allocated controller struct */ -#define NAND_CONTROLLER_ALLOC 0x80000000 - -/* Cell info constants */ -#define NAND_CI_CHIPNR_MSK 0x03 -#define NAND_CI_CELLTYPE_MSK 0x0C - -/* Keep gcc happy */ -struct nand_chip; - -struct nand_onfi_params { - /* rev info and features block */ - /* 'O' 'N' 'F' 'I' */ - u8 sig[4]; - __le16 revision; - __le16 features; - __le16 opt_cmd; - u8 reserved[22]; - - /* manufacturer information block */ - char manufacturer[12]; - char model[20]; - u8 jedec_id; - __le16 date_code; - u8 reserved2[13]; - - /* memory organization block */ - __le32 byte_per_page; - __le16 spare_bytes_per_page; - __le32 data_bytes_per_ppage; - __le16 spare_bytes_per_ppage; - __le32 pages_per_block; - __le32 blocks_per_lun; - u8 lun_count; - u8 addr_cycles; - u8 bits_per_cell; - __le16 bb_per_lun; - __le16 block_endurance; - u8 guaranteed_good_blocks; - __le16 guaranteed_block_endurance; - u8 programs_per_page; - u8 ppage_attr; - u8 ecc_bits; - u8 interleaved_bits; - u8 interleaved_ops; - u8 reserved3[13]; - - /* electrical parameter block */ - u8 io_pin_capacitance_max; - __le16 async_timing_mode; - __le16 program_cache_timing_mode; - __le16 t_prog; - __le16 t_bers; - __le16 t_r; - __le16 t_ccs; - __le16 src_sync_timing_mode; - __le16 src_ssync_features; - __le16 clk_pin_capacitance_typ; - __le16 io_pin_capacitance_typ; - __le16 input_pin_capacitance_typ; - u8 input_pin_capacitance_max; - u8 driver_strenght_support; - __le16 t_int_r; - __le16 t_ald; - u8 reserved4[7]; - - /* vendor */ - u8 reserved5[90]; - - __le16 crc; -} __attribute__((packed)); - -#define ONFI_CRC_BASE 0x4F4E - -/** - * struct nand_hw_control - Control structure for hardware controller (e.g ECC generator) shared among independent devices - * @lock: protection lock - * @active: the mtd device which holds the controller currently - * @wq: wait queue to sleep on if a NAND operation is in - * progress used instead of the per chip wait queue - * when a hw controller is available. - */ -struct nand_hw_control { - spinlock_t lock; - struct nand_chip *active; - wait_queue_head_t wq; -}; - -/** - * struct nand_ecc_ctrl - Control structure for ECC - * @mode: ECC mode - * @steps: number of ECC steps per page - * @size: data bytes per ECC step - * @bytes: ECC bytes per step - * @strength: max number of correctible bits per ECC step - * @total: total number of ECC bytes per page - * @prepad: padding information for syndrome based ECC generators - * @postpad: padding information for syndrome based ECC generators - * @layout: ECC layout control struct pointer - * @priv: pointer to private ECC control data - * @hwctl: function to control hardware ECC generator. Must only - * be provided if an hardware ECC is available - * @calculate: function for ECC calculation or readback from ECC hardware - * @correct: function for ECC correction, matching to ECC generator (sw/hw) - * @read_page_raw: function to read a raw page without ECC - * @write_page_raw: function to write a raw page without ECC - * @read_page: function to read a page according to the ECC generator - * requirements. - * @read_subpage: function to read parts of the page covered by ECC. - * @write_page: function to write a page according to the ECC generator - * requirements. - * @write_oob_raw: function to write chip OOB data without ECC - * @read_oob_raw: function to read chip OOB data without ECC - * @read_oob: function to read chip OOB data - * @write_oob: function to write chip OOB data - */ -struct nand_ecc_ctrl { - nand_ecc_modes_t mode; - int steps; - int size; - int bytes; - int total; - int strength; - int prepad; - int postpad; - struct nand_ecclayout *layout; - void *priv; - void (*hwctl)(struct mtd_info *mtd, int mode); - int (*calculate)(struct mtd_info *mtd, const uint8_t *dat, - uint8_t *ecc_code); - int (*correct)(struct mtd_info *mtd, uint8_t *dat, uint8_t *read_ecc, - uint8_t *calc_ecc); - int (*read_page_raw)(struct mtd_info *mtd, struct nand_chip *chip, - uint8_t *buf, int page); - void (*write_page_raw)(struct mtd_info *mtd, struct nand_chip *chip, - const uint8_t *buf); - int (*read_page)(struct mtd_info *mtd, struct nand_chip *chip, - uint8_t *buf, int page); - int (*read_subpage)(struct mtd_info *mtd, struct nand_chip *chip, - uint32_t offs, uint32_t len, uint8_t *buf); - void (*write_page)(struct mtd_info *mtd, struct nand_chip *chip, - const uint8_t *buf); - int (*write_oob_raw)(struct mtd_info *mtd, struct nand_chip *chip, - int page); - int (*read_oob_raw)(struct mtd_info *mtd, struct nand_chip *chip, - int page, int sndcmd); - int (*read_oob)(struct mtd_info *mtd, struct nand_chip *chip, int page, - int sndcmd); - int (*write_oob)(struct mtd_info *mtd, struct nand_chip *chip, - int page); - int (*read_bb_oob)(struct mtd_info *mtd, - struct nand_chip *chip, - int page, - int sndcmd); -}; - -/** - * struct nand_buffers - buffer structure for read/write - * @ecccalc: buffer for calculated ECC - * @ecccode: buffer for ECC read from flash - * @databuf: buffer for data - dynamically sized - * - * Do not change the order of buffers. databuf and oobrbuf must be in - * consecutive order. - */ -struct nand_buffers { - uint8_t ecccalc[NAND_MAX_OOBSIZE]; - uint8_t ecccode[NAND_MAX_OOBSIZE]; - uint8_t databuf[NAND_MAX_PAGESIZE + NAND_MAX_OOBSIZE]; -}; - -/** - * struct nand_chip - NAND Private Flash Chip Data - * @IO_ADDR_R: [BOARDSPECIFIC] address to read the 8 I/O lines of the - * flash device - * @IO_ADDR_W: [BOARDSPECIFIC] address to write the 8 I/O lines of the - * flash device. - * @read_byte: [REPLACEABLE] read one byte from the chip - * @read_word: [REPLACEABLE] read one word from the chip - * @write_buf: [REPLACEABLE] write data from the buffer to the chip - * @read_buf: [REPLACEABLE] read data from the chip into the buffer - * @verify_buf: [REPLACEABLE] verify buffer contents against the chip - * data. - * @select_chip: [REPLACEABLE] select chip nr - * @block_bad: [REPLACEABLE] check, if the block is bad - * @block_markbad: [REPLACEABLE] mark the block bad - * @cmd_ctrl: [BOARDSPECIFIC] hardwarespecific function for controlling - * ALE/CLE/nCE. Also used to write command and address - * @init_size: [BOARDSPECIFIC] hardwarespecific function for setting - * mtd->oobsize, mtd->writesize and so on. - * @id_data contains the 8 bytes values of NAND_CMD_READID. - * Return with the bus width. - * @dev_ready: [BOARDSPECIFIC] hardwarespecific function for accessing - * device ready/busy line. If set to NULL no access to - * ready/busy is available and the ready/busy information - * is read from the chip status register. - * @cmdfunc: [REPLACEABLE] hardwarespecific function for writing - * commands to the chip. - * @waitfunc: [REPLACEABLE] hardwarespecific function for wait on - * ready. - * @ecc: [BOARDSPECIFIC] ECC control structure - * @buffers: buffer structure for read/write - * @hwcontrol: platform-specific hardware control structure - * @erase_cmd: [INTERN] erase command write function, selectable due - * to AND support. - * @scan_bbt: [REPLACEABLE] function to scan bad block table - * @chip_delay: [BOARDSPECIFIC] chip dependent delay for transferring - * data from array to read regs (tR). - * @state: [INTERN] the current state of the NAND device - * @oob_poi: "poison value buffer," used for laying out OOB data - * before writing - * @page_shift: [INTERN] number of address bits in a page (column - * address bits). - * @phys_erase_shift: [INTERN] number of address bits in a physical eraseblock - * @bbt_erase_shift: [INTERN] number of address bits in a bbt entry - * @chip_shift: [INTERN] number of address bits in one chip - * @options: [BOARDSPECIFIC] various chip options. They can partly - * be set to inform nand_scan about special functionality. - * See the defines for further explanation. - * @bbt_options: [INTERN] bad block specific options. All options used - * here must come from bbm.h. By default, these options - * will be copied to the appropriate nand_bbt_descr's. - * @badblockpos: [INTERN] position of the bad block marker in the oob - * area. - * @badblockbits: [INTERN] minimum number of set bits in a good block's - * bad block marker position; i.e., BBM == 11110111b is - * not bad when badblockbits == 7 - * @cellinfo: [INTERN] MLC/multichip data from chip ident - * @numchips: [INTERN] number of physical chips - * @chipsize: [INTERN] the size of one chip for multichip arrays - * @pagemask: [INTERN] page number mask = number of (pages / chip) - 1 - * @pagebuf: [INTERN] holds the pagenumber which is currently in - * data_buf. - * @subpagesize: [INTERN] holds the subpagesize - * @onfi_version: [INTERN] holds the chip ONFI version (BCD encoded), - * non 0 if ONFI supported. - * @onfi_params: [INTERN] holds the ONFI page parameter when ONFI is - * supported, 0 otherwise. - * @ecclayout: [REPLACEABLE] the default ECC placement scheme - * @bbt: [INTERN] bad block table pointer - * @bbt_td: [REPLACEABLE] bad block table descriptor for flash - * lookup. - * @bbt_md: [REPLACEABLE] bad block table mirror descriptor - * @badblock_pattern: [REPLACEABLE] bad block scan pattern used for initial - * bad block scan. - * @controller: [REPLACEABLE] a pointer to a hardware controller - * structure which is shared among multiple independent - * devices. - * @priv: [OPTIONAL] pointer to private chip data - * @errstat: [OPTIONAL] hardware specific function to perform - * additional error status checks (determine if errors are - * correctable). - * @write_page: [REPLACEABLE] High-level page write function - */ - -struct nand_chip { - void __iomem *IO_ADDR_R; - void __iomem *IO_ADDR_W; - - uint8_t (*read_byte)(struct mtd_info *mtd); - u16 (*read_word)(struct mtd_info *mtd); - void (*write_buf)(struct mtd_info *mtd, const uint8_t *buf, int len); - void (*read_buf)(struct mtd_info *mtd, uint8_t *buf, int len); - int (*verify_buf)(struct mtd_info *mtd, const uint8_t *buf, int len); - void (*select_chip)(struct mtd_info *mtd, int chip); - int (*block_bad)(struct mtd_info *mtd, loff_t ofs, int getchip); - int (*block_markbad)(struct mtd_info *mtd, loff_t ofs, int type); - void (*cmd_ctrl)(struct mtd_info *mtd, int dat, unsigned int ctrl); - int (*init_size)(struct mtd_info *mtd, struct nand_chip *this, - u8 *id_data); - int (*dev_ready)(struct mtd_info *mtd); - void (*cmdfunc)(struct mtd_info *mtd, unsigned command, int column, - int page_addr); - int(*waitfunc)(struct mtd_info *mtd, struct nand_chip *this); - void (*erase_cmd)(struct mtd_info *mtd, int page); - int (*scan_bbt)(struct mtd_info *mtd); - int (*errstat)(struct mtd_info *mtd, struct nand_chip *this, int state, - int status, int page); - int (*write_page)(struct mtd_info *mtd, struct nand_chip *chip, - const uint8_t *buf, int page, int cached, int raw); - int (*get_para)(struct mtd_info *mtd, struct nand_chip *chip); - - int chip_delay; - unsigned int options; - unsigned int bbt_options; - - int page_shift; - int pagecnt_shift; - int phys_erase_shift; - int bbt_erase_shift; - int chip_shift; - int numchips; - uint64_t chipsize; - int pagemask; - int pagebuf; - int subpagesize; - uint8_t cellinfo; - int badblockpos; - int badblockbits; - - int onfi_version; - struct nand_onfi_params onfi_params; - - flstate_t state; - - uint8_t *oob_poi; - struct nand_hw_control *controller; - struct nand_ecclayout *ecclayout; - - struct nand_ecc_ctrl ecc; - struct nand_buffers *buffers; - struct nand_hw_control hwcontrol; - - uint8_t *bbt; - struct nand_bbt_descr *bbt_td; - struct nand_bbt_descr *bbt_md; - - struct nand_bbt_descr *badblock_pattern; - struct nand_bbt_descr *retry_pattern; - int page_offset[2]; - struct nand_read_retry_param *cur_chip; - int realplanenum; - int bbt_plane[2]; - int status_plane[2]; - - void *priv; -}; - -/* - * NAND Flash Manufacturer ID Codes - */ -#define NAND_MFR_TOSHIBA 0x98 -#define NAND_MFR_SAMSUNG 0xec -#define NAND_MFR_FUJITSU 0x04 -#define NAND_MFR_NATIONAL 0x8f -#define NAND_MFR_RENESAS 0x07 -#define NAND_MFR_STMICRO 0x20 -#define NAND_MFR_HYNIX 0xad -#define NAND_MFR_MICRON 0x2c -#define NAND_MFR_SANDISK 0x45 -#define NAND_MFR_AMD 0x01 -#define NAND_MFR_INTEL 0x89 -#define NAND_MFR_MXIC 0xc2 -#define NAND_MFR_MIRA 0x92 -#define NAND_MFR_MACRONIX 0xc2 - -/** - * struct nand_flash_dev - NAND Flash Device ID Structure - * @name: Identify the device type - * @id: device ID code - * @pagesize: Pagesize in bytes. Either 256 or 512 or 0 - * If the pagesize is 0, then the real pagesize - * and the eraseize are determined from the - * extended id bytes in the chip - * @erasesize: Size of an erase block in the flash device. - * @chipsize: Total chipsize in Mega Bytes - * @options: Bitfield to store chip relevant options - */ -struct nand_flash_dev { - char *name; - int id; - unsigned long pagesize; - unsigned long chipsize; - unsigned long erasesize; - unsigned long options; -}; - -#define BOOT_MAGIC_SIZE 0x8 -struct nand_rdtry_param_hdr { - unsigned char magic[BOOT_MAGIC_SIZE]; - unsigned int nand_id; //nand id - unsigned int nand_id_5th; //nand 5th id - unsigned int eslc_reg_cnt; // Enhanced SLC register count. - unsigned int total_retry_cnt; // total retry count - unsigned int retry_reg_cnt; // retry register count - //unsigned char eslc[eslc_reg]; //eslc default data. - //unsigned char retry_data[total_retry_cnt * retry_reg_cnt]; /* param data */ -}; -//All -struct nand_read_retry_param { - char magic[32]; - unsigned int nand_id; - unsigned int nand_id_5th; - unsigned int eslc_reg_num; - unsigned char eslc_offset[32]; - unsigned char eslc_def_value[32]; - unsigned char eslc_set_value[32]; - unsigned int retry_reg_num; - unsigned char retry_offset[32]; - unsigned char retry_def_value[32]; - unsigned char retry_value[256]; - unsigned int otp_len; - unsigned char otp_offset[32]; - unsigned char otp_data[32]; - unsigned int total_try_times; - int cur_try_times; - int (*set_parameter)(struct mtd_info *mtd, int mode, int def_mode); - int (*get_parameter)(struct mtd_info *mtd, int mode); - int (*get_otp_table)(struct mtd_info *mtd, struct nand_chip *chip); - int retry; //1: in retry mode -}; -/* #define RETRY_DEBUG */ - - -/* DannierChen-2009-10-07 add for new nand flash support list */ -#ifndef DWORD -#define DWORD unsigned int -#endif -#define MAX_PRODUCT_NAME_LENGTH 0x20 -struct WMT_nand_flash_dev { - DWORD dwFlashID; //composed by 4 bytes of ID. For example:0xADF1801D - DWORD dwBlockCount; //block count of one chip. For example: 1024 - DWORD dwPageSize; //page size. For example:2048(other value can be 512 or 4096) - DWORD dwSpareSize; //spare area size. For example:16(almost all kinds of nand is 16) - DWORD dwBlockSize; //block size = dwPageSize * PageCntPerBlock. For example:131072 - DWORD dwAddressCycle; //address cycle 4 or 5 - DWORD dwBI0Position; //BI0 page postion in block - DWORD dwBI1Position; //BI1 page postion in block - DWORD dwBIOffset; //BI offset in page - DWORD dwDataWidth; //data with X8 or X16 - DWORD dwPageProgramLimit; //chip can program PAGE_PROGRAM_LIMIT times within the same page - DWORD dwSeqRowReadSupport; //whether support sequential row read, 1 = support 0 = not support - DWORD dwSeqPageProgram; //chip need sequential page program in a block. 1 = need - DWORD dwNandType; //MLC or SLC - DWORD dwECCBitNum; //ECC bit number needed - DWORD dwRWTimming; //NFC Read Pulse width and Read hold time, write so does. default =0x12101210 - DWORD dwTadl; //NFC write TADL timeing config - DWORD dwDDR; //NFC support toshia ddr(toggle) mode = 1 not support = 0 - DWORD dwRetry; //NFC Read Retry support = 1 not support = 0 - DWORD dwRdmz; //NFC Randomizer support = 1 not support = 0 - DWORD dwFlashID2; //composed by additional 2 bytes of ID from original 4 bytes. - DWORD dwSpeedUpCmd; /* supprot speed up nand command ex: 2-plane cache read and so on.. */ - char ProductName[MAX_PRODUCT_NAME_LENGTH]; //product name. for example "HYNIX_NF_HY27UF081G2A" - unsigned long options; -}; -/** - * struct nand_manufacturers - NAND Flash Manufacturer ID Structure - * @name: Manufacturer name - * @id: manufacturer ID code of device. -*/ -struct nand_manufacturers { - int id; - char *name; -}; - -extern struct WMT_nand_flash_dev WMT_nand_flash_ids[]; -extern struct nand_flash_dev nand_flash_ids[]; -extern struct nand_manufacturers nand_manuf_ids[]; - -extern int nand_scan_bbt(struct mtd_info *mtd, struct nand_bbt_descr *bd); -extern int nand_update_bbt(struct mtd_info *mtd, loff_t offs); -extern int nand_default_bbt(struct mtd_info *mtd); -extern int nand_isbad_bbt(struct mtd_info *mtd, loff_t offs, int allowbbt, int allow_readfail); -extern int nand_isbad_bbt_multi(struct mtd_info *mtd, loff_t offs, int allowbbt, int allow_readfail); -extern int nand_erase_nand(struct mtd_info *mtd, struct erase_info *instr, - int allowbbt); -extern int nand_do_read(struct mtd_info *mtd, loff_t from, size_t len, - size_t *retlen, uint8_t *buf); -extern struct nand_read_retry_param chip_table[]; -extern int hynix_get_parameter(struct mtd_info *mtd, int mode); -extern int hynix_set_parameter(struct mtd_info *mtd, int mode, int def_mode); -extern int hynix_get_otp(struct mtd_info *mtd, struct nand_chip *chip); -extern int toshiba_get_parameter(struct mtd_info *mtd, int mode); -extern int toshiba_set_parameter(struct mtd_info *mtd, int mode, int def_mode); -extern int samsung_get_parameter(struct mtd_info *mtd, int mode); -extern int samsung_set_parameter(struct mtd_info *mtd, int mode, int def_mode); -extern int sandisk_get_parameter(struct mtd_info *mtd, int mode); -extern int sandisk_set_parameter(struct mtd_info *mtd, int mode, int def_mode); -extern int micron_get_parameter(struct mtd_info *mtd, int mode); -extern int micron_set_parameter(struct mtd_info *mtd, int mode, int def_mode); - - - -#ifndef ARRAY_SIZE -#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) -#endif -#define READ_RETRY_CHIP_NUM ARRAY_SIZE(chip_table) -#define ESLC_MODE 0 -#define READ_RETRY_MODE 1 -#define TEST_MODE 2 -#define DEFAULT_VALUE 0 -#define ECC_ERROR_VALUE 1 -/** - * struct platform_nand_chip - chip level device structure - * @nr_chips: max. number of chips to scan for - * @chip_offset: chip number offset - * @nr_partitions: number of partitions pointed to by partitions (or zero) - * @partitions: mtd partition list - * @chip_delay: R/B delay value in us - * @options: Option flags, e.g. 16bit buswidth - * @bbt_options: BBT option flags, e.g. NAND_BBT_USE_FLASH - * @ecclayout: ECC layout info structure - * @part_probe_types: NULL-terminated array of probe types - */ -struct platform_nand_chip { - int nr_chips; - int chip_offset; - int nr_partitions; - struct mtd_partition *partitions; - struct nand_ecclayout *ecclayout; - int chip_delay; - unsigned int options; - unsigned int bbt_options; - const char **part_probe_types; -}; - -/* Keep gcc happy */ -struct platform_device; - -/** - * struct platform_nand_ctrl - controller level device structure - * @probe: platform specific function to probe/setup hardware - * @remove: platform specific function to remove/teardown hardware - * @hwcontrol: platform specific hardware control structure - * @dev_ready: platform specific function to read ready/busy pin - * @select_chip: platform specific chip select function - * @cmd_ctrl: platform specific function for controlling - * ALE/CLE/nCE. Also used to write command and address - * @write_buf: platform specific function for write buffer - * @read_buf: platform specific function for read buffer - * @priv: private data to transport driver specific settings - * - * All fields are optional and depend on the hardware driver requirements - */ -struct platform_nand_ctrl { - int (*probe)(struct platform_device *pdev); - void (*remove)(struct platform_device *pdev); - void (*hwcontrol)(struct mtd_info *mtd, int cmd); - int (*dev_ready)(struct mtd_info *mtd); - void (*select_chip)(struct mtd_info *mtd, int chip); - void (*cmd_ctrl)(struct mtd_info *mtd, int dat, unsigned int ctrl); - void (*write_buf)(struct mtd_info *mtd, const uint8_t *buf, int len); - void (*read_buf)(struct mtd_info *mtd, uint8_t *buf, int len); - void *priv; -}; - -/** - * struct platform_nand_data - container structure for platform-specific data - * @chip: chip level chip structure - * @ctrl: controller level device structure - */ -struct platform_nand_data { - struct platform_nand_chip chip; - struct platform_nand_ctrl ctrl; -}; - -/* Some helpers to access the data structures */ -static inline -struct platform_nand_chip *get_platform_nandchip(struct mtd_info *mtd) -{ - struct nand_chip *chip = mtd->priv; - - return chip->priv; -} - -#endif /* __LINUX_MTD_NAND_H */ diff --git a/ANDROID_3.4.5/include/linux/mtd/nand_bch.h b/ANDROID_3.4.5/include/linux/mtd/nand_bch.h deleted file mode 100644 index 74acf536..00000000 --- a/ANDROID_3.4.5/include/linux/mtd/nand_bch.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright © 2011 Ivan Djelic <ivan.djelic@parrot.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * This file is the header for the NAND BCH ECC implementation. - */ - -#ifndef __MTD_NAND_BCH_H__ -#define __MTD_NAND_BCH_H__ - -struct mtd_info; -struct nand_bch_control; - -#if defined(CONFIG_MTD_NAND_ECC_BCH) - -static inline int mtd_nand_has_bch(void) { return 1; } - -/* - * Calculate BCH ecc code - */ -int nand_bch_calculate_ecc(struct mtd_info *mtd, const u_char *dat, - u_char *ecc_code); - -/* - * Detect and correct bit errors - */ -int nand_bch_correct_data(struct mtd_info *mtd, u_char *dat, u_char *read_ecc, - u_char *calc_ecc); -/* - * Initialize BCH encoder/decoder - */ -struct nand_bch_control * -nand_bch_init(struct mtd_info *mtd, unsigned int eccsize, - unsigned int eccbytes, struct nand_ecclayout **ecclayout); -/* - * Release BCH encoder/decoder resources - */ -void nand_bch_free(struct nand_bch_control *nbc); - -#else /* !CONFIG_MTD_NAND_ECC_BCH */ - -static inline int mtd_nand_has_bch(void) { return 0; } - -static inline int -nand_bch_calculate_ecc(struct mtd_info *mtd, const u_char *dat, - u_char *ecc_code) -{ - return -1; -} - -static inline int -nand_bch_correct_data(struct mtd_info *mtd, unsigned char *buf, - unsigned char *read_ecc, unsigned char *calc_ecc) -{ - return -1; -} - -static inline struct nand_bch_control * -nand_bch_init(struct mtd_info *mtd, unsigned int eccsize, - unsigned int eccbytes, struct nand_ecclayout **ecclayout) -{ - return NULL; -} - -static inline void nand_bch_free(struct nand_bch_control *nbc) {} - -#endif /* CONFIG_MTD_NAND_ECC_BCH */ - -#endif /* __MTD_NAND_BCH_H__ */ diff --git a/ANDROID_3.4.5/include/linux/mtd/nand_ecc.h b/ANDROID_3.4.5/include/linux/mtd/nand_ecc.h deleted file mode 100644 index 4d8406c8..00000000 --- a/ANDROID_3.4.5/include/linux/mtd/nand_ecc.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * drivers/mtd/nand_ecc.h - * - * Copyright (C) 2000-2010 Steven J. Hill <sjhill@realitydiluted.com> - * David Woodhouse <dwmw2@infradead.org> - * Thomas Gleixner <tglx@linutronix.de> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * This file is the header for the ECC algorithm. - */ - -#ifndef __MTD_NAND_ECC_H__ -#define __MTD_NAND_ECC_H__ - -struct mtd_info; - -/* - * Calculate 3 byte ECC code for eccsize byte block - */ -void __nand_calculate_ecc(const u_char *dat, unsigned int eccsize, - u_char *ecc_code); - -/* - * Calculate 3 byte ECC code for 256/512 byte block - */ -int nand_calculate_ecc(struct mtd_info *mtd, const u_char *dat, u_char *ecc_code); - -/* - * Detect and correct a 1 bit error for eccsize byte block - */ -int __nand_correct_data(u_char *dat, u_char *read_ecc, u_char *calc_ecc, - unsigned int eccsize); - -/* - * Detect and correct a 1 bit error for 256/512 byte block - */ -int nand_correct_data(struct mtd_info *mtd, u_char *dat, u_char *read_ecc, u_char *calc_ecc); - -#endif /* __MTD_NAND_ECC_H__ */ diff --git a/ANDROID_3.4.5/include/linux/mtd/ndfc.h b/ANDROID_3.4.5/include/linux/mtd/ndfc.h deleted file mode 100644 index d0558a98..00000000 --- a/ANDROID_3.4.5/include/linux/mtd/ndfc.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - * linux/include/linux/mtd/ndfc.h - * - * Copyright (c) 2006 Thomas Gleixner <tglx@linutronix.de> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * Info: - * Contains defines, datastructures for ndfc nand controller - * - */ -#ifndef __LINUX_MTD_NDFC_H -#define __LINUX_MTD_NDFC_H - -/* NDFC Register definitions */ -#define NDFC_CMD 0x00 -#define NDFC_ALE 0x04 -#define NDFC_DATA 0x08 -#define NDFC_ECC 0x10 -#define NDFC_BCFG0 0x30 -#define NDFC_BCFG1 0x34 -#define NDFC_BCFG2 0x38 -#define NDFC_BCFG3 0x3c -#define NDFC_CCR 0x40 -#define NDFC_STAT 0x44 -#define NDFC_HWCTL 0x48 -#define NDFC_REVID 0x50 - -#define NDFC_STAT_IS_READY 0x01000000 - -#define NDFC_CCR_RESET_CE 0x80000000 /* CE Reset */ -#define NDFC_CCR_RESET_ECC 0x40000000 /* ECC Reset */ -#define NDFC_CCR_RIE 0x20000000 /* Interrupt Enable on Device Rdy */ -#define NDFC_CCR_REN 0x10000000 /* Enable wait for Rdy in LinearR */ -#define NDFC_CCR_ROMEN 0x08000000 /* Enable ROM In LinearR */ -#define NDFC_CCR_ARE 0x04000000 /* Auto-Read Enable */ -#define NDFC_CCR_BS(x) (((x) & 0x3) << 24) /* Select Bank on CE[x] */ -#define NDFC_CCR_BS_MASK 0x03000000 /* Select Bank */ -#define NDFC_CCR_ARAC0 0x00000000 /* 3 Addr, 1 Col 2 Row 512b page */ -#define NDFC_CCR_ARAC1 0x00001000 /* 4 Addr, 1 Col 3 Row 512b page */ -#define NDFC_CCR_ARAC2 0x00002000 /* 4 Addr, 2 Col 2 Row 2K page */ -#define NDFC_CCR_ARAC3 0x00003000 /* 5 Addr, 2 Col 3 Row 2K page */ -#define NDFC_CCR_ARAC_MASK 0x00003000 /* Auto-Read mode Addr Cycles */ -#define NDFC_CCR_RPG 0x0000C000 /* Auto-Read Page */ -#define NDFC_CCR_EBCC 0x00000004 /* EBC Configuration Completed */ -#define NDFC_CCR_DHC 0x00000002 /* Direct Hardware Control Enable */ - -#define NDFC_BxCFG_EN 0x80000000 /* Bank Enable */ -#define NDFC_BxCFG_CED 0x40000000 /* nCE Style */ -#define NDFC_BxCFG_SZ_MASK 0x08000000 /* Bank Size */ -#define NDFC_BxCFG_SZ_8BIT 0x00000000 /* 8bit */ -#define NDFC_BxCFG_SZ_16BIT 0x08000000 /* 16bit */ - -#define NDFC_MAX_BANKS 4 - -struct ndfc_controller_settings { - uint32_t ccr_settings; - uint64_t ndfc_erpn; -}; - -struct ndfc_chip_settings { - uint32_t bank_settings; -}; - -#endif diff --git a/ANDROID_3.4.5/include/linux/mtd/nftl.h b/ANDROID_3.4.5/include/linux/mtd/nftl.h deleted file mode 100644 index b059629e..00000000 --- a/ANDROID_3.4.5/include/linux/mtd/nftl.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright © 1999-2010 David Woodhouse <dwmw2@infradead.org> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifndef __MTD_NFTL_H__ -#define __MTD_NFTL_H__ - -#include <linux/mtd/mtd.h> -#include <linux/mtd/blktrans.h> - -#include <mtd/nftl-user.h> - -/* these info are used in ReplUnitTable */ -#define BLOCK_NIL 0xffff /* last block of a chain */ -#define BLOCK_FREE 0xfffe /* free block */ -#define BLOCK_NOTEXPLORED 0xfffd /* non explored block, only used during mounting */ -#define BLOCK_RESERVED 0xfffc /* bios block or bad block */ - -struct NFTLrecord { - struct mtd_blktrans_dev mbd; - __u16 MediaUnit, SpareMediaUnit; - __u32 EraseSize; - struct NFTLMediaHeader MediaHdr; - int usecount; - unsigned char heads; - unsigned char sectors; - unsigned short cylinders; - __u16 numvunits; - __u16 lastEUN; /* should be suppressed */ - __u16 numfreeEUNs; - __u16 LastFreeEUN; /* To speed up finding a free EUN */ - int head,sect,cyl; - __u16 *EUNtable; /* [numvunits]: First EUN for each virtual unit */ - __u16 *ReplUnitTable; /* [numEUNs]: ReplUnitNumber for each */ - unsigned int nb_blocks; /* number of physical blocks */ - unsigned int nb_boot_blocks; /* number of blocks used by the bios */ - struct erase_info instr; - struct nand_ecclayout oobinfo; -}; - -int NFTL_mount(struct NFTLrecord *s); -int NFTL_formatblock(struct NFTLrecord *s, int block); - -int nftl_read_oob(struct mtd_info *mtd, loff_t offs, size_t len, - size_t *retlen, uint8_t *buf); -int nftl_write_oob(struct mtd_info *mtd, loff_t offs, size_t len, - size_t *retlen, uint8_t *buf); - -#ifndef NFTL_MAJOR -#define NFTL_MAJOR 93 -#endif - -#define MAX_NFTLS 16 -#define MAX_SECTORS_PER_UNIT 64 -#define NFTL_PARTN_BITS 4 - -#endif /* __MTD_NFTL_H__ */ diff --git a/ANDROID_3.4.5/include/linux/mtd/onenand.h b/ANDROID_3.4.5/include/linux/mtd/onenand.h deleted file mode 100644 index 4596503c..00000000 --- a/ANDROID_3.4.5/include/linux/mtd/onenand.h +++ /dev/null @@ -1,242 +0,0 @@ -/* - * linux/include/linux/mtd/onenand.h - * - * Copyright © 2005-2009 Samsung Electronics - * Kyungmin Park <kyungmin.park@samsung.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#ifndef __LINUX_MTD_ONENAND_H -#define __LINUX_MTD_ONENAND_H - -#include <linux/spinlock.h> -#include <linux/completion.h> -#include <linux/mtd/flashchip.h> -#include <linux/mtd/onenand_regs.h> -#include <linux/mtd/bbm.h> - -#define MAX_DIES 2 -#define MAX_BUFFERRAM 2 - -/* Scan and identify a OneNAND device */ -extern int onenand_scan(struct mtd_info *mtd, int max_chips); -/* Free resources held by the OneNAND device */ -extern void onenand_release(struct mtd_info *mtd); - -/** - * struct onenand_bufferram - OneNAND BufferRAM Data - * @blockpage: block & page address in BufferRAM - */ -struct onenand_bufferram { - int blockpage; -}; - -/** - * struct onenand_chip - OneNAND Private Flash Chip Data - * @base: [BOARDSPECIFIC] address to access OneNAND - * @dies: [INTERN][FLEX-ONENAND] number of dies on chip - * @boundary: [INTERN][FLEX-ONENAND] Boundary of the dies - * @diesize: [INTERN][FLEX-ONENAND] Size of the dies - * @chipsize: [INTERN] the size of one chip for multichip arrays - * FIXME For Flex-OneNAND, chipsize holds maximum possible - * device size ie when all blocks are considered MLC - * @device_id: [INTERN] device ID - * @density_mask: chip density, used for DDP devices - * @verstion_id: [INTERN] version ID - * @options: [BOARDSPECIFIC] various chip options. They can - * partly be set to inform onenand_scan about - * @erase_shift: [INTERN] number of address bits in a block - * @page_shift: [INTERN] number of address bits in a page - * @page_mask: [INTERN] a page per block mask - * @writesize: [INTERN] a real page size - * @bufferram_index: [INTERN] BufferRAM index - * @bufferram: [INTERN] BufferRAM info - * @readw: [REPLACEABLE] hardware specific function for read short - * @writew: [REPLACEABLE] hardware specific function for write short - * @command: [REPLACEABLE] hardware specific function for writing - * commands to the chip - * @wait: [REPLACEABLE] hardware specific function for wait on ready - * @bbt_wait: [REPLACEABLE] hardware specific function for bbt wait on ready - * @unlock_all: [REPLACEABLE] hardware specific function for unlock all - * @read_bufferram: [REPLACEABLE] hardware specific function for BufferRAM Area - * @write_bufferram: [REPLACEABLE] hardware specific function for BufferRAM Area - * @read_word: [REPLACEABLE] hardware specific function for read - * register of OneNAND - * @write_word: [REPLACEABLE] hardware specific function for write - * register of OneNAND - * @mmcontrol: sync burst read function - * @chip_probe: [REPLACEABLE] hardware specific function for chip probe - * @block_markbad: function to mark a block as bad - * @scan_bbt: [REPLACEALBE] hardware specific function for scanning - * Bad block Table - * @chip_lock: [INTERN] spinlock used to protect access to this - * structure and the chip - * @wq: [INTERN] wait queue to sleep on if a OneNAND - * operation is in progress - * @state: [INTERN] the current state of the OneNAND device - * @page_buf: [INTERN] page main data buffer - * @oob_buf: [INTERN] page oob data buffer - * @subpagesize: [INTERN] holds the subpagesize - * @ecclayout: [REPLACEABLE] the default ecc placement scheme - * @bbm: [REPLACEABLE] pointer to Bad Block Management - * @priv: [OPTIONAL] pointer to private chip date - */ -struct onenand_chip { - void __iomem *base; - unsigned dies; - unsigned boundary[MAX_DIES]; - loff_t diesize[MAX_DIES]; - unsigned int chipsize; - unsigned int device_id; - unsigned int version_id; - unsigned int technology; - unsigned int density_mask; - unsigned int options; - - unsigned int erase_shift; - unsigned int page_shift; - unsigned int page_mask; - unsigned int writesize; - - unsigned int bufferram_index; - struct onenand_bufferram bufferram[MAX_BUFFERRAM]; - - int (*command)(struct mtd_info *mtd, int cmd, loff_t address, size_t len); - int (*wait)(struct mtd_info *mtd, int state); - int (*bbt_wait)(struct mtd_info *mtd, int state); - void (*unlock_all)(struct mtd_info *mtd); - int (*read_bufferram)(struct mtd_info *mtd, int area, - unsigned char *buffer, int offset, size_t count); - int (*write_bufferram)(struct mtd_info *mtd, int area, - const unsigned char *buffer, int offset, size_t count); - unsigned short (*read_word)(void __iomem *addr); - void (*write_word)(unsigned short value, void __iomem *addr); - void (*mmcontrol)(struct mtd_info *mtd, int sync_read); - int (*chip_probe)(struct mtd_info *mtd); - int (*block_markbad)(struct mtd_info *mtd, loff_t ofs); - int (*scan_bbt)(struct mtd_info *mtd); - int (*enable)(struct mtd_info *mtd); - int (*disable)(struct mtd_info *mtd); - - struct completion complete; - int irq; - - spinlock_t chip_lock; - wait_queue_head_t wq; - flstate_t state; - unsigned char *page_buf; - unsigned char *oob_buf; -#ifdef CONFIG_MTD_ONENAND_VERIFY_WRITE - unsigned char *verify_buf; -#endif - - int subpagesize; - struct nand_ecclayout *ecclayout; - - void *bbm; - - void *priv; - - /* - * Shows that the current operation is composed - * of sequence of commands. For example, cache program. - * Such command status OnGo bit is checked at the end of - * sequence. - */ - unsigned int ongoing; -}; - -/* - * Helper macros - */ -#define ONENAND_PAGES_PER_BLOCK (1<<6) - -#define ONENAND_CURRENT_BUFFERRAM(this) (this->bufferram_index) -#define ONENAND_NEXT_BUFFERRAM(this) (this->bufferram_index ^ 1) -#define ONENAND_SET_NEXT_BUFFERRAM(this) (this->bufferram_index ^= 1) -#define ONENAND_SET_PREV_BUFFERRAM(this) (this->bufferram_index ^= 1) -#define ONENAND_SET_BUFFERRAM0(this) (this->bufferram_index = 0) -#define ONENAND_SET_BUFFERRAM1(this) (this->bufferram_index = 1) - -#define FLEXONENAND(this) \ - (this->device_id & DEVICE_IS_FLEXONENAND) -#define ONENAND_GET_SYS_CFG1(this) \ - (this->read_word(this->base + ONENAND_REG_SYS_CFG1)) -#define ONENAND_SET_SYS_CFG1(v, this) \ - (this->write_word(v, this->base + ONENAND_REG_SYS_CFG1)) - -#define ONENAND_IS_DDP(this) \ - (this->device_id & ONENAND_DEVICE_IS_DDP) - -#define ONENAND_IS_MLC(this) \ - (this->technology & ONENAND_TECHNOLOGY_IS_MLC) - -#ifdef CONFIG_MTD_ONENAND_2X_PROGRAM -#define ONENAND_IS_2PLANE(this) \ - (this->options & ONENAND_HAS_2PLANE) -#else -#define ONENAND_IS_2PLANE(this) (0) -#endif - -#define ONENAND_IS_CACHE_PROGRAM(this) \ - (this->options & ONENAND_HAS_CACHE_PROGRAM) - -#define ONENAND_IS_NOP_1(this) \ - (this->options & ONENAND_HAS_NOP_1) - -/* Check byte access in OneNAND */ -#define ONENAND_CHECK_BYTE_ACCESS(addr) (addr & 0x1) - -/* - * Options bits - */ -#define ONENAND_HAS_CONT_LOCK (0x0001) -#define ONENAND_HAS_UNLOCK_ALL (0x0002) -#define ONENAND_HAS_2PLANE (0x0004) -#define ONENAND_HAS_4KB_PAGE (0x0008) -#define ONENAND_HAS_CACHE_PROGRAM (0x0010) -#define ONENAND_HAS_NOP_1 (0x0020) -#define ONENAND_SKIP_UNLOCK_CHECK (0x0100) -#define ONENAND_PAGEBUF_ALLOC (0x1000) -#define ONENAND_OOBBUF_ALLOC (0x2000) -#define ONENAND_SKIP_INITIAL_UNLOCKING (0x4000) - -#define ONENAND_IS_4KB_PAGE(this) \ - (this->options & ONENAND_HAS_4KB_PAGE) - -/* - * OneNAND Flash Manufacturer ID Codes - */ -#define ONENAND_MFR_SAMSUNG 0xec -#define ONENAND_MFR_NUMONYX 0x20 - -/** - * struct onenand_manufacturers - NAND Flash Manufacturer ID Structure - * @name: Manufacturer name - * @id: manufacturer ID code of device. -*/ -struct onenand_manufacturers { - int id; - char *name; -}; - -int onenand_bbt_read_oob(struct mtd_info *mtd, loff_t from, - struct mtd_oob_ops *ops); -unsigned onenand_block(struct onenand_chip *this, loff_t addr); -loff_t onenand_addr(struct onenand_chip *this, int block); -int flexonenand_region(struct mtd_info *mtd, loff_t addr); - -struct mtd_partition; - -struct onenand_platform_data { - void (*mmcontrol)(struct mtd_info *mtd, int sync_read); - int (*read_bufferram)(struct mtd_info *mtd, int area, - unsigned char *buffer, int offset, size_t count); - struct mtd_partition *parts; - unsigned int nr_parts; -}; - -#endif /* __LINUX_MTD_ONENAND_H */ diff --git a/ANDROID_3.4.5/include/linux/mtd/onenand_regs.h b/ANDROID_3.4.5/include/linux/mtd/onenand_regs.h deleted file mode 100644 index d60130f8..00000000 --- a/ANDROID_3.4.5/include/linux/mtd/onenand_regs.h +++ /dev/null @@ -1,223 +0,0 @@ -/* - * linux/include/linux/mtd/onenand_regs.h - * - * OneNAND Register header file - * - * Copyright (C) 2005-2007 Samsung Electronics - * Kyungmin Park <kyungmin.park@samsung.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#ifndef __ONENAND_REG_H -#define __ONENAND_REG_H - -/* Memory Address Map Translation (Word order) */ -#define ONENAND_MEMORY_MAP(x) ((x) << 1) - -/* - * External BufferRAM area - */ -#define ONENAND_BOOTRAM ONENAND_MEMORY_MAP(0x0000) -#define ONENAND_DATARAM ONENAND_MEMORY_MAP(0x0200) -#define ONENAND_SPARERAM ONENAND_MEMORY_MAP(0x8010) - -/* - * OneNAND Registers - */ -#define ONENAND_REG_MANUFACTURER_ID ONENAND_MEMORY_MAP(0xF000) -#define ONENAND_REG_DEVICE_ID ONENAND_MEMORY_MAP(0xF001) -#define ONENAND_REG_VERSION_ID ONENAND_MEMORY_MAP(0xF002) -#define ONENAND_REG_DATA_BUFFER_SIZE ONENAND_MEMORY_MAP(0xF003) -#define ONENAND_REG_BOOT_BUFFER_SIZE ONENAND_MEMORY_MAP(0xF004) -#define ONENAND_REG_NUM_BUFFERS ONENAND_MEMORY_MAP(0xF005) -#define ONENAND_REG_TECHNOLOGY ONENAND_MEMORY_MAP(0xF006) - -#define ONENAND_REG_START_ADDRESS1 ONENAND_MEMORY_MAP(0xF100) -#define ONENAND_REG_START_ADDRESS2 ONENAND_MEMORY_MAP(0xF101) -#define ONENAND_REG_START_ADDRESS3 ONENAND_MEMORY_MAP(0xF102) -#define ONENAND_REG_START_ADDRESS4 ONENAND_MEMORY_MAP(0xF103) -#define ONENAND_REG_START_ADDRESS5 ONENAND_MEMORY_MAP(0xF104) -#define ONENAND_REG_START_ADDRESS6 ONENAND_MEMORY_MAP(0xF105) -#define ONENAND_REG_START_ADDRESS7 ONENAND_MEMORY_MAP(0xF106) -#define ONENAND_REG_START_ADDRESS8 ONENAND_MEMORY_MAP(0xF107) - -#define ONENAND_REG_START_BUFFER ONENAND_MEMORY_MAP(0xF200) -#define ONENAND_REG_COMMAND ONENAND_MEMORY_MAP(0xF220) -#define ONENAND_REG_SYS_CFG1 ONENAND_MEMORY_MAP(0xF221) -#define ONENAND_REG_SYS_CFG2 ONENAND_MEMORY_MAP(0xF222) -#define ONENAND_REG_CTRL_STATUS ONENAND_MEMORY_MAP(0xF240) -#define ONENAND_REG_INTERRUPT ONENAND_MEMORY_MAP(0xF241) -#define ONENAND_REG_START_BLOCK_ADDRESS ONENAND_MEMORY_MAP(0xF24C) -#define ONENAND_REG_END_BLOCK_ADDRESS ONENAND_MEMORY_MAP(0xF24D) -#define ONENAND_REG_WP_STATUS ONENAND_MEMORY_MAP(0xF24E) - -#define ONENAND_REG_ECC_STATUS ONENAND_MEMORY_MAP(0xFF00) -#define ONENAND_REG_ECC_M0 ONENAND_MEMORY_MAP(0xFF01) -#define ONENAND_REG_ECC_S0 ONENAND_MEMORY_MAP(0xFF02) -#define ONENAND_REG_ECC_M1 ONENAND_MEMORY_MAP(0xFF03) -#define ONENAND_REG_ECC_S1 ONENAND_MEMORY_MAP(0xFF04) -#define ONENAND_REG_ECC_M2 ONENAND_MEMORY_MAP(0xFF05) -#define ONENAND_REG_ECC_S2 ONENAND_MEMORY_MAP(0xFF06) -#define ONENAND_REG_ECC_M3 ONENAND_MEMORY_MAP(0xFF07) -#define ONENAND_REG_ECC_S3 ONENAND_MEMORY_MAP(0xFF08) - -/* - * Device ID Register F001h (R) - */ -#define DEVICE_IS_FLEXONENAND (1 << 9) -#define FLEXONENAND_PI_MASK (0x3ff) -#define FLEXONENAND_PI_UNLOCK_SHIFT (14) -#define ONENAND_DEVICE_DENSITY_MASK (0xf) -#define ONENAND_DEVICE_DENSITY_SHIFT (4) -#define ONENAND_DEVICE_IS_DDP (1 << 3) -#define ONENAND_DEVICE_IS_DEMUX (1 << 2) -#define ONENAND_DEVICE_VCC_MASK (0x3) - -#define ONENAND_DEVICE_DENSITY_512Mb (0x002) -#define ONENAND_DEVICE_DENSITY_1Gb (0x003) -#define ONENAND_DEVICE_DENSITY_2Gb (0x004) -#define ONENAND_DEVICE_DENSITY_4Gb (0x005) - -/* - * Version ID Register F002h (R) - */ -#define ONENAND_VERSION_PROCESS_SHIFT (8) - -/* - * Technology Register F006h (R) - */ -#define ONENAND_TECHNOLOGY_IS_MLC (1 << 0) - -/* - * Start Address 1 F100h (R/W) & Start Address 2 F101h (R/W) - */ -#define ONENAND_DDP_SHIFT (15) -#define ONENAND_DDP_CHIP0 (0) -#define ONENAND_DDP_CHIP1 (1 << ONENAND_DDP_SHIFT) - -/* - * Start Address 8 F107h (R/W) - */ -/* Note: It's actually 0x3f in case of SLC */ -#define ONENAND_FPA_MASK (0x7f) -#define ONENAND_FPA_SHIFT (2) -#define ONENAND_FSA_MASK (0x03) - -/* - * Start Buffer Register F200h (R/W) - */ -#define ONENAND_BSA_MASK (0x03) -#define ONENAND_BSA_SHIFT (8) -#define ONENAND_BSA_BOOTRAM (0 << 2) -#define ONENAND_BSA_DATARAM0 (2 << 2) -#define ONENAND_BSA_DATARAM1 (3 << 2) -/* Note: It's actually 0x03 in case of SLC */ -#define ONENAND_BSC_MASK (0x07) - -/* - * Command Register F220h (R/W) - */ -#define ONENAND_CMD_READ (0x00) -#define ONENAND_CMD_READOOB (0x13) -#define ONENAND_CMD_PROG (0x80) -#define ONENAND_CMD_PROGOOB (0x1A) -#define ONENAND_CMD_2X_PROG (0x7D) -#define ONENAND_CMD_2X_CACHE_PROG (0x7F) -#define ONENAND_CMD_UNLOCK (0x23) -#define ONENAND_CMD_LOCK (0x2A) -#define ONENAND_CMD_LOCK_TIGHT (0x2C) -#define ONENAND_CMD_UNLOCK_ALL (0x27) -#define ONENAND_CMD_ERASE (0x94) -#define ONENAND_CMD_MULTIBLOCK_ERASE (0x95) -#define ONENAND_CMD_ERASE_VERIFY (0x71) -#define ONENAND_CMD_RESET (0xF0) -#define ONENAND_CMD_OTP_ACCESS (0x65) -#define ONENAND_CMD_READID (0x90) -#define FLEXONENAND_CMD_PI_UPDATE (0x05) -#define FLEXONENAND_CMD_PI_ACCESS (0x66) -#define FLEXONENAND_CMD_RECOVER_LSB (0x05) - -/* NOTE: Those are not *REAL* commands */ -#define ONENAND_CMD_BUFFERRAM (0x1978) -#define FLEXONENAND_CMD_READ_PI (0x1985) - -/* - * System Configuration 1 Register F221h (R, R/W) - */ -#define ONENAND_SYS_CFG1_SYNC_READ (1 << 15) -#define ONENAND_SYS_CFG1_BRL_7 (7 << 12) -#define ONENAND_SYS_CFG1_BRL_6 (6 << 12) -#define ONENAND_SYS_CFG1_BRL_5 (5 << 12) -#define ONENAND_SYS_CFG1_BRL_4 (4 << 12) -#define ONENAND_SYS_CFG1_BRL_3 (3 << 12) -#define ONENAND_SYS_CFG1_BRL_10 (2 << 12) -#define ONENAND_SYS_CFG1_BRL_9 (1 << 12) -#define ONENAND_SYS_CFG1_BRL_8 (0 << 12) -#define ONENAND_SYS_CFG1_BRL_SHIFT (12) -#define ONENAND_SYS_CFG1_BL_32 (4 << 9) -#define ONENAND_SYS_CFG1_BL_16 (3 << 9) -#define ONENAND_SYS_CFG1_BL_8 (2 << 9) -#define ONENAND_SYS_CFG1_BL_4 (1 << 9) -#define ONENAND_SYS_CFG1_BL_CONT (0 << 9) -#define ONENAND_SYS_CFG1_BL_SHIFT (9) -#define ONENAND_SYS_CFG1_NO_ECC (1 << 8) -#define ONENAND_SYS_CFG1_RDY (1 << 7) -#define ONENAND_SYS_CFG1_INT (1 << 6) -#define ONENAND_SYS_CFG1_IOBE (1 << 5) -#define ONENAND_SYS_CFG1_RDY_CONF (1 << 4) -#define ONENAND_SYS_CFG1_VHF (1 << 3) -#define ONENAND_SYS_CFG1_HF (1 << 2) -#define ONENAND_SYS_CFG1_SYNC_WRITE (1 << 1) - -/* - * Controller Status Register F240h (R) - */ -#define ONENAND_CTRL_ONGO (1 << 15) -#define ONENAND_CTRL_LOCK (1 << 14) -#define ONENAND_CTRL_LOAD (1 << 13) -#define ONENAND_CTRL_PROGRAM (1 << 12) -#define ONENAND_CTRL_ERASE (1 << 11) -#define ONENAND_CTRL_ERROR (1 << 10) -#define ONENAND_CTRL_RSTB (1 << 7) -#define ONENAND_CTRL_OTP_L (1 << 6) -#define ONENAND_CTRL_OTP_BL (1 << 5) - -/* - * Interrupt Status Register F241h (R) - */ -#define ONENAND_INT_MASTER (1 << 15) -#define ONENAND_INT_READ (1 << 7) -#define ONENAND_INT_WRITE (1 << 6) -#define ONENAND_INT_ERASE (1 << 5) -#define ONENAND_INT_RESET (1 << 4) -#define ONENAND_INT_CLEAR (0 << 0) - -/* - * NAND Flash Write Protection Status Register F24Eh (R) - */ -#define ONENAND_WP_US (1 << 2) -#define ONENAND_WP_LS (1 << 1) -#define ONENAND_WP_LTS (1 << 0) - -/* - * ECC Status Reigser FF00h (R) - */ -#define ONENAND_ECC_1BIT (1 << 0) -#define ONENAND_ECC_1BIT_ALL (0x5555) -#define ONENAND_ECC_2BIT (1 << 1) -#define ONENAND_ECC_2BIT_ALL (0xAAAA) -#define FLEXONENAND_UNCORRECTABLE_ERROR (0x1010) -#define ONENAND_ECC_3BIT (1 << 2) -#define ONENAND_ECC_4BIT (1 << 3) -#define ONENAND_ECC_4BIT_UNCORRECTABLE (0x1010) - -/* - * One-Time Programmable (OTP) - */ -#define FLEXONENAND_OTP_LOCK_OFFSET (2048) -#define ONENAND_OTP_LOCK_OFFSET (14) - -#endif /* __ONENAND_REG_H */ diff --git a/ANDROID_3.4.5/include/linux/mtd/partitions.h b/ANDROID_3.4.5/include/linux/mtd/partitions.h deleted file mode 100644 index e4f732ae..00000000 --- a/ANDROID_3.4.5/include/linux/mtd/partitions.h +++ /dev/null @@ -1,87 +0,0 @@ -/* - * MTD partitioning layer definitions - * - * (C) 2000 Nicolas Pitre <nico@fluxnic.net> - * - * This code is GPL - */ - -#ifndef MTD_PARTITIONS_H -#define MTD_PARTITIONS_H - -#include <linux/types.h> - - -/* - * Partition definition structure: - * - * An array of struct partition is passed along with a MTD object to - * mtd_device_register() to create them. - * - * For each partition, these fields are available: - * name: string that will be used to label the partition's MTD device. - * size: the partition size; if defined as MTDPART_SIZ_FULL, the partition - * will extend to the end of the master MTD device. - * offset: absolute starting position within the master MTD device; if - * defined as MTDPART_OFS_APPEND, the partition will start where the - * previous one ended; if MTDPART_OFS_NXTBLK, at the next erase block; - * if MTDPART_OFS_RETAIN, consume as much as possible, leaving size - * after the end of partition. - * mask_flags: contains flags that have to be masked (removed) from the - * master MTD flag set for the corresponding MTD partition. - * For example, to force a read-only partition, simply adding - * MTD_WRITEABLE to the mask_flags will do the trick. - * - * Note: writeable partitions require their size and offset be - * erasesize aligned (e.g. use MTDPART_OFS_NEXTBLK). - */ - -struct mtd_partition { - char *name; /* identifier string */ - uint64_t size; /* partition size */ - uint64_t offset; /* offset within the master MTD space */ - uint32_t mask_flags; /* master MTD flags to mask out for this partition */ - struct nand_ecclayout *ecclayout; /* out of band layout for this partition (NAND only) */ -}; - -#define MTDPART_OFS_RETAIN (-3) -#define MTDPART_OFS_NXTBLK (-2) -#define MTDPART_OFS_APPEND (-1) -#define MTDPART_SIZ_FULL (0) - - -struct mtd_info; -struct device_node; - -/** - * struct mtd_part_parser_data - used to pass data to MTD partition parsers. - * @origin: for RedBoot, start address of MTD device - * @of_node: for OF parsers, device node containing partitioning information - */ -struct mtd_part_parser_data { - unsigned long origin; - struct device_node *of_node; -}; - - -/* - * Functions dealing with the various ways of partitioning the space - */ - -struct mtd_part_parser { - struct list_head list; - struct module *owner; - const char *name; - int (*parse_fn)(struct mtd_info *, struct mtd_partition **, - struct mtd_part_parser_data *); -}; - -extern int register_mtd_parser(struct mtd_part_parser *parser); -extern int deregister_mtd_parser(struct mtd_part_parser *parser); - -int mtd_is_partition(struct mtd_info *mtd); -int mtd_add_partition(struct mtd_info *master, char *name, - long long offset, long long length); -int mtd_del_partition(struct mtd_info *master, int partno); -uint64_t mtd_get_device_size(struct mtd_info *mtd); -#endif diff --git a/ANDROID_3.4.5/include/linux/mtd/pfow.h b/ANDROID_3.4.5/include/linux/mtd/pfow.h deleted file mode 100644 index b730d4f8..00000000 --- a/ANDROID_3.4.5/include/linux/mtd/pfow.h +++ /dev/null @@ -1,159 +0,0 @@ -/* Primary function overlay window definitions - * and service functions used by LPDDR chips - */ -#ifndef __LINUX_MTD_PFOW_H -#define __LINUX_MTD_PFOW_H - -#include <linux/mtd/qinfo.h> - -/* PFOW registers addressing */ -/* Address of symbol "P" */ -#define PFOW_QUERY_STRING_P 0x0000 -/* Address of symbol "F" */ -#define PFOW_QUERY_STRING_F 0x0002 -/* Address of symbol "O" */ -#define PFOW_QUERY_STRING_O 0x0004 -/* Address of symbol "W" */ -#define PFOW_QUERY_STRING_W 0x0006 -/* Identification info for LPDDR chip */ -#define PFOW_MANUFACTURER_ID 0x0020 -#define PFOW_DEVICE_ID 0x0022 -/* Address in PFOW where prog buffer can can be found */ -#define PFOW_PROGRAM_BUFFER_OFFSET 0x0040 -/* Size of program buffer in words */ -#define PFOW_PROGRAM_BUFFER_SIZE 0x0042 -/* Address command code register */ -#define PFOW_COMMAND_CODE 0x0080 -/* command data register */ -#define PFOW_COMMAND_DATA 0x0084 -/* command address register lower address bits */ -#define PFOW_COMMAND_ADDRESS_L 0x0088 -/* command address register upper address bits */ -#define PFOW_COMMAND_ADDRESS_H 0x008a -/* number of bytes to be proggrammed lower address bits */ -#define PFOW_DATA_COUNT_L 0x0090 -/* number of bytes to be proggrammed higher address bits */ -#define PFOW_DATA_COUNT_H 0x0092 -/* command execution register, the only possible value is 0x01 */ -#define PFOW_COMMAND_EXECUTE 0x00c0 -/* 0x01 should be written at this address to clear buffer */ -#define PFOW_CLEAR_PROGRAM_BUFFER 0x00c4 -/* device program/erase suspend register */ -#define PFOW_PROGRAM_ERASE_SUSPEND 0x00c8 -/* device status register */ -#define PFOW_DSR 0x00cc - -/* LPDDR memory device command codes */ -/* They are possible values of PFOW command code register */ -#define LPDDR_WORD_PROGRAM 0x0041 -#define LPDDR_BUFF_PROGRAM 0x00E9 -#define LPDDR_BLOCK_ERASE 0x0020 -#define LPDDR_LOCK_BLOCK 0x0061 -#define LPDDR_UNLOCK_BLOCK 0x0062 -#define LPDDR_READ_BLOCK_LOCK_STATUS 0x0065 -#define LPDDR_INFO_QUERY 0x0098 -#define LPDDR_READ_OTP 0x0097 -#define LPDDR_PROG_OTP 0x00C0 -#define LPDDR_RESUME 0x00D0 - -/* Defines possible value of PFOW command execution register */ -#define LPDDR_START_EXECUTION 0x0001 - -/* Defines possible value of PFOW program/erase suspend register */ -#define LPDDR_SUSPEND 0x0001 - -/* Possible values of PFOW device status register */ -/* access R - read; RC read & clearable */ -#define DSR_DPS (1<<1) /* RC; device protect status - * 0 - not protected 1 - locked */ -#define DSR_PSS (1<<2) /* R; program suspend status; - * 0-prog in progress/completed, - * 1- prog suspended */ -#define DSR_VPPS (1<<3) /* RC; 0-Vpp OK, * 1-Vpp low */ -#define DSR_PROGRAM_STATUS (1<<4) /* RC; 0-successful, 1-error */ -#define DSR_ERASE_STATUS (1<<5) /* RC; erase or blank check status; - * 0-success erase/blank check, - * 1 blank check error */ -#define DSR_ESS (1<<6) /* R; erase suspend status; - * 0-erase in progress/complete, - * 1 erase suspended */ -#define DSR_READY_STATUS (1<<7) /* R; Device status - * 0-busy, - * 1-ready */ -#define DSR_RPS (0x3<<8) /* RC; region program status - * 00 - Success, - * 01-re-program attempt in region with - * object mode data, - * 10-object mode program w attempt in - * region with control mode data - * 11-attempt to program invalid half - * with 0x41 command */ -#define DSR_AOS (1<<12) /* RC; 1- AO related failure */ -#define DSR_AVAILABLE (1<<15) /* R; Device availbility - * 1 - Device available - * 0 - not available */ - -/* The superset of all possible error bits in DSR */ -#define DSR_ERR 0x133A - -static inline void send_pfow_command(struct map_info *map, - unsigned long cmd_code, unsigned long adr, - unsigned long len, map_word *datum) -{ - int bits_per_chip = map_bankwidth(map) * 8; - int chipnum; - struct lpddr_private *lpddr = map->fldrv_priv; - chipnum = adr >> lpddr->chipshift; - - map_write(map, CMD(cmd_code), map->pfow_base + PFOW_COMMAND_CODE); - map_write(map, CMD(adr & ((1<<bits_per_chip) - 1)), - map->pfow_base + PFOW_COMMAND_ADDRESS_L); - map_write(map, CMD(adr>>bits_per_chip), - map->pfow_base + PFOW_COMMAND_ADDRESS_H); - if (len) { - map_write(map, CMD(len & ((1<<bits_per_chip) - 1)), - map->pfow_base + PFOW_DATA_COUNT_L); - map_write(map, CMD(len>>bits_per_chip), - map->pfow_base + PFOW_DATA_COUNT_H); - } - if (datum) - map_write(map, *datum, map->pfow_base + PFOW_COMMAND_DATA); - - /* Command execution start */ - map_write(map, CMD(LPDDR_START_EXECUTION), - map->pfow_base + PFOW_COMMAND_EXECUTE); -} - -static inline void print_drs_error(unsigned dsr) -{ - int prog_status = (dsr & DSR_RPS) >> 8; - - if (!(dsr & DSR_AVAILABLE)) - printk(KERN_NOTICE"DSR.15: (0) Device not Available\n"); - if (prog_status & 0x03) - printk(KERN_NOTICE"DSR.9,8: (11) Attempt to program invalid " - "half with 41h command\n"); - else if (prog_status & 0x02) - printk(KERN_NOTICE"DSR.9,8: (10) Object Mode Program attempt " - "in region with Control Mode data\n"); - else if (prog_status & 0x01) - printk(KERN_NOTICE"DSR.9,8: (01) Program attempt in region " - "with Object Mode data\n"); - if (!(dsr & DSR_READY_STATUS)) - printk(KERN_NOTICE"DSR.7: (0) Device is Busy\n"); - if (dsr & DSR_ESS) - printk(KERN_NOTICE"DSR.6: (1) Erase Suspended\n"); - if (dsr & DSR_ERASE_STATUS) - printk(KERN_NOTICE"DSR.5: (1) Erase/Blank check error\n"); - if (dsr & DSR_PROGRAM_STATUS) - printk(KERN_NOTICE"DSR.4: (1) Program Error\n"); - if (dsr & DSR_VPPS) - printk(KERN_NOTICE"DSR.3: (1) Vpp low detect, operation " - "aborted\n"); - if (dsr & DSR_PSS) - printk(KERN_NOTICE"DSR.2: (1) Program suspended\n"); - if (dsr & DSR_DPS) - printk(KERN_NOTICE"DSR.1: (1) Aborted Erase/Program attempt " - "on locked block\n"); -} -#endif /* __LINUX_MTD_PFOW_H */ diff --git a/ANDROID_3.4.5/include/linux/mtd/physmap.h b/ANDROID_3.4.5/include/linux/mtd/physmap.h deleted file mode 100644 index d2887e76..00000000 --- a/ANDROID_3.4.5/include/linux/mtd/physmap.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * For boards with physically mapped flash and using - * drivers/mtd/maps/physmap.c mapping driver. - * - * Copyright (C) 2003 MontaVista Software Inc. - * Author: Jun Sun, jsun@mvista.com or jsun@junsun.net - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. - * - */ - -#ifndef __LINUX_MTD_PHYSMAP__ -#define __LINUX_MTD_PHYSMAP__ - -#include <linux/mtd/mtd.h> -#include <linux/mtd/partitions.h> - -struct map_info; -struct platform_device; - -struct physmap_flash_data { - unsigned int width; - int (*init)(struct platform_device *); - void (*exit)(struct platform_device *); - void (*set_vpp)(struct platform_device *, int); - unsigned int nr_parts; - unsigned int pfow_base; - char *probe_type; - struct mtd_partition *parts; - const char **part_probe_types; -}; - -#endif /* __LINUX_MTD_PHYSMAP__ */ diff --git a/ANDROID_3.4.5/include/linux/mtd/pismo.h b/ANDROID_3.4.5/include/linux/mtd/pismo.h deleted file mode 100644 index 8dfb7e14..00000000 --- a/ANDROID_3.4.5/include/linux/mtd/pismo.h +++ /dev/null @@ -1,17 +0,0 @@ -/* - * PISMO memory driver - http://www.pismoworld.org/ - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License. - */ -#ifndef __LINUX_MTD_PISMO_H -#define __LINUX_MTD_PISMO_H - -struct pismo_pdata { - void (*set_vpp)(void *, int); - void *vpp_data; - phys_addr_t cs_addrs[5]; -}; - -#endif diff --git a/ANDROID_3.4.5/include/linux/mtd/plat-ram.h b/ANDROID_3.4.5/include/linux/mtd/plat-ram.h deleted file mode 100644 index e07890af..00000000 --- a/ANDROID_3.4.5/include/linux/mtd/plat-ram.h +++ /dev/null @@ -1,34 +0,0 @@ -/* linux/include/linux/mtd/plat-ram.h - * - * (c) 2004 Simtec Electronics - * http://www.simtec.co.uk/products/SWLINUX/ - * Ben Dooks <ben@simtec.co.uk> - * - * Generic platform device based RAM map - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - */ - -#ifndef __LINUX_MTD_PLATRAM_H -#define __LINUX_MTD_PLATRAM_H __FILE__ - -#define PLATRAM_RO (0) -#define PLATRAM_RW (1) - -struct platdata_mtd_ram { - const char *mapname; - const char **map_probes; - const char **probes; - struct mtd_partition *partitions; - int nr_partitions; - int bankwidth; - - /* control callbacks */ - - void (*set_rw)(struct device *dev, int to); -}; - -#endif /* __LINUX_MTD_PLATRAM_H */ diff --git a/ANDROID_3.4.5/include/linux/mtd/qinfo.h b/ANDROID_3.4.5/include/linux/mtd/qinfo.h deleted file mode 100644 index 7b3d487d..00000000 --- a/ANDROID_3.4.5/include/linux/mtd/qinfo.h +++ /dev/null @@ -1,91 +0,0 @@ -#ifndef __LINUX_MTD_QINFO_H -#define __LINUX_MTD_QINFO_H - -#include <linux/mtd/map.h> -#include <linux/wait.h> -#include <linux/spinlock.h> -#include <linux/delay.h> -#include <linux/mtd/mtd.h> -#include <linux/mtd/flashchip.h> -#include <linux/mtd/partitions.h> - -/* lpddr_private describes lpddr flash chip in memory map - * @ManufactId - Chip Manufacture ID - * @DevId - Chip Device ID - * @qinfo - pointer to qinfo records describing the chip - * @numchips - number of chips including virual RWW partitions - * @chipshift - Chip/partiton size 2^chipshift - * @chips - per-chip data structure - */ -struct lpddr_private { - uint16_t ManufactId; - uint16_t DevId; - struct qinfo_chip *qinfo; - int numchips; - unsigned long chipshift; - struct flchip chips[0]; -}; - -/* qinfo_query_info structure contains request information for - * each qinfo record - * @major - major number of qinfo record - * @major - minor number of qinfo record - * @id_str - descriptive string to access the record - * @desc - detailed description for the qinfo record - */ -struct qinfo_query_info { - uint8_t major; - uint8_t minor; - char *id_str; - char *desc; -}; - -/* - * qinfo_chip structure contains necessary qinfo records data - * @DevSizeShift - Device size 2^n bytes - * @BufSizeShift - Program buffer size 2^n bytes - * @TotalBlocksNum - Total number of blocks - * @UniformBlockSizeShift - Uniform block size 2^UniformBlockSizeShift bytes - * @HWPartsNum - Number of hardware partitions - * @SuspEraseSupp - Suspend erase supported - * @SingleWordProgTime - Single word program 2^SingleWordProgTime u-sec - * @ProgBufferTime - Program buffer write 2^ProgBufferTime u-sec - * @BlockEraseTime - Block erase 2^BlockEraseTime m-sec - */ -struct qinfo_chip { - /* General device info */ - uint16_t DevSizeShift; - uint16_t BufSizeShift; - /* Erase block information */ - uint16_t TotalBlocksNum; - uint16_t UniformBlockSizeShift; - /* Partition information */ - uint16_t HWPartsNum; - /* Optional features */ - uint16_t SuspEraseSupp; - /* Operation typical time */ - uint16_t SingleWordProgTime; - uint16_t ProgBufferTime; - uint16_t BlockEraseTime; -}; - -/* defines for fixup usage */ -#define LPDDR_MFR_ANY 0xffff -#define LPDDR_ID_ANY 0xffff -#define NUMONYX_MFGR_ID 0x0089 -#define R18_DEVICE_ID_1G 0x893c - -static inline map_word lpddr_build_cmd(u_long cmd, struct map_info *map) -{ - map_word val = { {0} }; - val.x[0] = cmd; - return val; -} - -#define CMD(x) lpddr_build_cmd(x, map) -#define CMDVAL(cmd) cmd.x[0] - -struct mtd_info *lpddr_cmdset(struct map_info *); - -#endif - diff --git a/ANDROID_3.4.5/include/linux/mtd/sh_flctl.h b/ANDROID_3.4.5/include/linux/mtd/sh_flctl.h deleted file mode 100644 index a38e1fa8..00000000 --- a/ANDROID_3.4.5/include/linux/mtd/sh_flctl.h +++ /dev/null @@ -1,171 +0,0 @@ -/* - * SuperH FLCTL nand controller - * - * Copyright © 2008 Renesas Solutions Corp. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef __SH_FLCTL_H__ -#define __SH_FLCTL_H__ - -#include <linux/mtd/mtd.h> -#include <linux/mtd/nand.h> -#include <linux/mtd/partitions.h> -#include <linux/pm_qos.h> - -/* FLCTL registers */ -#define FLCMNCR(f) (f->reg + 0x0) -#define FLCMDCR(f) (f->reg + 0x4) -#define FLCMCDR(f) (f->reg + 0x8) -#define FLADR(f) (f->reg + 0xC) -#define FLADR2(f) (f->reg + 0x3C) -#define FLDATAR(f) (f->reg + 0x10) -#define FLDTCNTR(f) (f->reg + 0x14) -#define FLINTDMACR(f) (f->reg + 0x18) -#define FLBSYTMR(f) (f->reg + 0x1C) -#define FLBSYCNT(f) (f->reg + 0x20) -#define FLDTFIFO(f) (f->reg + 0x24) -#define FLECFIFO(f) (f->reg + 0x28) -#define FLTRCR(f) (f->reg + 0x2C) -#define FLHOLDCR(f) (f->reg + 0x38) -#define FL4ECCRESULT0(f) (f->reg + 0x80) -#define FL4ECCRESULT1(f) (f->reg + 0x84) -#define FL4ECCRESULT2(f) (f->reg + 0x88) -#define FL4ECCRESULT3(f) (f->reg + 0x8C) -#define FL4ECCCR(f) (f->reg + 0x90) -#define FL4ECCCNT(f) (f->reg + 0x94) -#define FLERRADR(f) (f->reg + 0x98) - -/* FLCMNCR control bits */ -#define ECCPOS2 (0x1 << 25) -#define _4ECCCNTEN (0x1 << 24) -#define _4ECCEN (0x1 << 23) -#define _4ECCCORRECT (0x1 << 22) -#define SHBUSSEL (0x1 << 20) -#define SEL_16BIT (0x1 << 19) -#define SNAND_E (0x1 << 18) /* SNAND (0=512 1=2048)*/ -#define QTSEL_E (0x1 << 17) -#define ENDIAN (0x1 << 16) /* 1 = little endian */ -#define FCKSEL_E (0x1 << 15) -#define ECCPOS_00 (0x00 << 12) -#define ECCPOS_01 (0x01 << 12) -#define ECCPOS_02 (0x02 << 12) -#define ACM_SACCES_MODE (0x01 << 10) -#define NANWF_E (0x1 << 9) -#define SE_D (0x1 << 8) /* Spare area disable */ -#define CE1_ENABLE (0x1 << 4) /* Chip Enable 1 */ -#define CE0_ENABLE (0x1 << 3) /* Chip Enable 0 */ -#define TYPESEL_SET (0x1 << 0) - -/* - * Clock settings using the PULSEx registers from FLCMNCR - * - * Some hardware uses bits called PULSEx instead of FCKSEL_E and QTSEL_E - * to control the clock divider used between the High-Speed Peripheral Clock - * and the FLCTL internal clock. If so, use CLK_8_BIT_xxx for connecting 8 bit - * and CLK_16_BIT_xxx for connecting 16 bit bus bandwith NAND chips. For the 16 - * bit version the divider is seperate for the pulse width of high and low - * signals. - */ -#define PULSE3 (0x1 << 27) -#define PULSE2 (0x1 << 17) -#define PULSE1 (0x1 << 15) -#define PULSE0 (0x1 << 9) -#define CLK_8B_0_5 PULSE1 -#define CLK_8B_1 0x0 -#define CLK_8B_1_5 (PULSE1 | PULSE2) -#define CLK_8B_2 PULSE0 -#define CLK_8B_3 (PULSE0 | PULSE1 | PULSE2) -#define CLK_8B_4 (PULSE0 | PULSE2) -#define CLK_16B_6L_2H PULSE0 -#define CLK_16B_9L_3H (PULSE0 | PULSE1 | PULSE2) -#define CLK_16B_12L_4H (PULSE0 | PULSE2) - -/* FLCMDCR control bits */ -#define ADRCNT2_E (0x1 << 31) /* 5byte address enable */ -#define ADRMD_E (0x1 << 26) /* Sector address access */ -#define CDSRC_E (0x1 << 25) /* Data buffer selection */ -#define DOSR_E (0x1 << 24) /* Status read check */ -#define SELRW (0x1 << 21) /* 0:read 1:write */ -#define DOADR_E (0x1 << 20) /* Address stage execute */ -#define ADRCNT_1 (0x00 << 18) /* Address data bytes: 1byte */ -#define ADRCNT_2 (0x01 << 18) /* Address data bytes: 2byte */ -#define ADRCNT_3 (0x02 << 18) /* Address data bytes: 3byte */ -#define ADRCNT_4 (0x03 << 18) /* Address data bytes: 4byte */ -#define DOCMD2_E (0x1 << 17) /* 2nd cmd stage execute */ -#define DOCMD1_E (0x1 << 16) /* 1st cmd stage execute */ - -/* FLTRCR control bits */ -#define TRSTRT (0x1 << 0) /* translation start */ -#define TREND (0x1 << 1) /* translation end */ - -/* - * FLHOLDCR control bits - * - * HOLDEN: Bus Occupancy Enable (inverted) - * Enable this bit when the external bus might be used in between transfers. - * If not set and the bus gets used by other modules, a deadlock occurs. - */ -#define HOLDEN (0x1 << 0) - -/* FL4ECCCR control bits */ -#define _4ECCFA (0x1 << 2) /* 4 symbols correct fault */ -#define _4ECCEND (0x1 << 1) /* 4 symbols end */ -#define _4ECCEXST (0x1 << 0) /* 4 symbols exist */ - -#define INIT_FL4ECCRESULT_VAL 0x03FF03FF -#define LOOP_TIMEOUT_MAX 0x00010000 - -struct sh_flctl { - struct mtd_info mtd; - struct nand_chip chip; - struct platform_device *pdev; - struct dev_pm_qos_request pm_qos; - void __iomem *reg; - - uint8_t done_buff[2048 + 64]; /* max size 2048 + 64 */ - int read_bytes; - int index; - int seqin_column; /* column in SEQIN cmd */ - int seqin_page_addr; /* page_addr in SEQIN cmd */ - uint32_t seqin_read_cmd; /* read cmd in SEQIN cmd */ - int erase1_page_addr; /* page_addr in ERASE1 cmd */ - uint32_t erase_ADRCNT; /* bits of FLCMDCR in ERASE1 cmd */ - uint32_t rw_ADRCNT; /* bits of FLCMDCR in READ WRITE cmd */ - uint32_t flcmncr_base; /* base value of FLCMNCR */ - - int hwecc_cant_correct[4]; - - unsigned page_size:1; /* NAND page size (0 = 512, 1 = 2048) */ - unsigned hwecc:1; /* Hardware ECC (0 = disabled, 1 = enabled) */ - unsigned holden:1; /* Hardware has FLHOLDCR and HOLDEN is set */ - unsigned qos_request:1; /* QoS request to prevent deep power shutdown */ -}; - -struct sh_flctl_platform_data { - struct mtd_partition *parts; - int nr_parts; - unsigned long flcmncr_val; - - unsigned has_hwecc:1; - unsigned use_holden:1; -}; - -static inline struct sh_flctl *mtd_to_flctl(struct mtd_info *mtdinfo) -{ - return container_of(mtdinfo, struct sh_flctl, mtd); -} - -#endif /* __SH_FLCTL_H__ */ diff --git a/ANDROID_3.4.5/include/linux/mtd/sharpsl.h b/ANDROID_3.4.5/include/linux/mtd/sharpsl.h deleted file mode 100644 index 25f4d2a8..00000000 --- a/ANDROID_3.4.5/include/linux/mtd/sharpsl.h +++ /dev/null @@ -1,20 +0,0 @@ -/* - * SharpSL NAND support - * - * Copyright (C) 2008 Dmitry Baryshkov - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include <linux/mtd/nand.h> -#include <linux/mtd/nand_ecc.h> -#include <linux/mtd/partitions.h> - -struct sharpsl_nand_platform_data { - struct nand_bbt_descr *badblock_pattern; - struct nand_ecclayout *ecc_layout; - struct mtd_partition *partitions; - unsigned int nr_partitions; -}; diff --git a/ANDROID_3.4.5/include/linux/mtd/spear_smi.h b/ANDROID_3.4.5/include/linux/mtd/spear_smi.h deleted file mode 100644 index 8ae17260..00000000 --- a/ANDROID_3.4.5/include/linux/mtd/spear_smi.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright © 2010 ST Microelectronics - * Shiraz Hashim <shiraz.hashim@st.com> - * - * This file is licensed under the terms of the GNU General Public - * License version 2. This program is licensed "as is" without any - * warranty of any kind, whether express or implied. - */ - -#ifndef __MTD_SPEAR_SMI_H -#define __MTD_SPEAR_SMI_H - -#include <linux/types.h> -#include <linux/mtd/mtd.h> -#include <linux/mtd/partitions.h> -#include <linux/platform_device.h> -#include <linux/of.h> - -/* max possible slots for serial-nor flash chip in the SMI controller */ -#define MAX_NUM_FLASH_CHIP 4 - -/* macro to define partitions for flash devices */ -#define DEFINE_PARTS(n, of, s) \ -{ \ - .name = n, \ - .offset = of, \ - .size = s, \ -} - -/** - * struct spear_smi_flash_info - platform structure for passing flash - * information - * - * name: name of the serial nor flash for identification - * mem_base: the memory base on which the flash is mapped - * size: size of the flash in bytes - * partitions: parition details - * nr_partitions: number of partitions - * fast_mode: whether flash supports fast mode - */ - -struct spear_smi_flash_info { - char *name; - unsigned long mem_base; - unsigned long size; - struct mtd_partition *partitions; - int nr_partitions; - u8 fast_mode; -}; - -/** - * struct spear_smi_plat_data - platform structure for configuring smi - * - * clk_rate: clk rate at which SMI must operate - * num_flashes: number of flashes present on board - * board_flash_info: specific details of each flash present on board - */ -struct spear_smi_plat_data { - unsigned long clk_rate; - int num_flashes; - struct spear_smi_flash_info *board_flash_info; - struct device_node *np[MAX_NUM_FLASH_CHIP]; -}; - -#endif /* __MTD_SPEAR_SMI_H */ diff --git a/ANDROID_3.4.5/include/linux/mtd/super.h b/ANDROID_3.4.5/include/linux/mtd/super.h deleted file mode 100644 index f456230f..00000000 --- a/ANDROID_3.4.5/include/linux/mtd/super.h +++ /dev/null @@ -1,29 +0,0 @@ -/* MTD-based superblock handling - * - * Copyright © 2006 Red Hat, Inc. All Rights Reserved. - * Written by David Howells (dhowells@redhat.com) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version - * 2 of the License, or (at your option) any later version. - */ - -#ifndef __MTD_SUPER_H__ -#define __MTD_SUPER_H__ - -#ifdef __KERNEL__ - -#include <linux/mtd/mtd.h> -#include <linux/fs.h> -#include <linux/mount.h> - -extern struct dentry *mount_mtd(struct file_system_type *fs_type, int flags, - const char *dev_name, void *data, - int (*fill_super)(struct super_block *, void *, int)); -extern void kill_mtd_super(struct super_block *sb); - - -#endif /* __KERNEL__ */ - -#endif /* __MTD_SUPER_H__ */ diff --git a/ANDROID_3.4.5/include/linux/mtd/ubi.h b/ANDROID_3.4.5/include/linux/mtd/ubi.h deleted file mode 100644 index c2e92b36..00000000 --- a/ANDROID_3.4.5/include/linux/mtd/ubi.h +++ /dev/null @@ -1,265 +0,0 @@ -/* - * Copyright (c) International Business Machines Corp., 2006 - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See - * the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Author: Artem Bityutskiy (Битюцкий Артём) - */ - -#ifndef __LINUX_UBI_H__ -#define __LINUX_UBI_H__ - -#include <linux/ioctl.h> -#include <linux/types.h> -#include <mtd/ubi-user.h> - - -#define UBI_ALL -1 -/* - * enum ubi_open_mode - UBI volume open mode constants. - * - * UBI_READONLY: read-only mode - * UBI_READWRITE: read-write mode - * UBI_EXCLUSIVE: exclusive mode - */ -enum { - UBI_READONLY = 1, - UBI_READWRITE, - UBI_EXCLUSIVE -}; - -/** - * struct ubi_volume_info - UBI volume description data structure. - * @vol_id: volume ID - * @ubi_num: UBI device number this volume belongs to - * @size: how many physical eraseblocks are reserved for this volume - * @used_bytes: how many bytes of data this volume contains - * @used_ebs: how many physical eraseblocks of this volume actually contain any - * data - * @vol_type: volume type (%UBI_DYNAMIC_VOLUME or %UBI_STATIC_VOLUME) - * @corrupted: non-zero if the volume is corrupted (static volumes only) - * @upd_marker: non-zero if the volume has update marker set - * @alignment: volume alignment - * @usable_leb_size: how many bytes are available in logical eraseblocks of - * this volume - * @name_len: volume name length - * @name: volume name - * @cdev: UBI volume character device major and minor numbers - * - * The @corrupted flag is only relevant to static volumes and is always zero - * for dynamic ones. This is because UBI does not care about dynamic volume - * data protection and only cares about protecting static volume data. - * - * The @upd_marker flag is set if the volume update operation was interrupted. - * Before touching the volume data during the update operation, UBI first sets - * the update marker flag for this volume. If the volume update operation was - * further interrupted, the update marker indicates this. If the update marker - * is set, the contents of the volume is certainly damaged and a new volume - * update operation has to be started. - * - * To put it differently, @corrupted and @upd_marker fields have different - * semantics: - * o the @corrupted flag means that this static volume is corrupted for some - * reasons, but not because an interrupted volume update - * o the @upd_marker field means that the volume is damaged because of an - * interrupted update operation. - * - * I.e., the @corrupted flag is never set if the @upd_marker flag is set. - * - * The @used_bytes and @used_ebs fields are only really needed for static - * volumes and contain the number of bytes stored in this static volume and how - * many eraseblock this data occupies. In case of dynamic volumes, the - * @used_bytes field is equivalent to @size*@usable_leb_size, and the @used_ebs - * field is equivalent to @size. - * - * In general, logical eraseblock size is a property of the UBI device, not - * of the UBI volume. Indeed, the logical eraseblock size depends on the - * physical eraseblock size and on how much bytes UBI headers consume. But - * because of the volume alignment (@alignment), the usable size of logical - * eraseblocks if a volume may be less. The following equation is true: - * @usable_leb_size = LEB size - (LEB size mod @alignment), - * where LEB size is the logical eraseblock size defined by the UBI device. - * - * The alignment is multiple to the minimal flash input/output unit size or %1 - * if all the available space is used. - * - * To put this differently, alignment may be considered is a way to change - * volume logical eraseblock sizes. - */ -struct ubi_volume_info { - int ubi_num; - int vol_id; - int size; - long long used_bytes; - int used_ebs; - int vol_type; - int corrupted; - int upd_marker; - int alignment; - int usable_leb_size; - int name_len; - const char *name; - dev_t cdev; -}; - -/** - * struct ubi_device_info - UBI device description data structure. - * @ubi_num: ubi device number - * @leb_size: logical eraseblock size on this UBI device - * @leb_start: starting offset of logical eraseblocks within physical - * eraseblocks - * @min_io_size: minimal I/O unit size - * @max_write_size: maximum amount of bytes the underlying flash can write at a - * time (MTD write buffer size) - * @ro_mode: if this device is in read-only mode - * @cdev: UBI character device major and minor numbers - * - * Note, @leb_size is the logical eraseblock size offered by the UBI device. - * Volumes of this UBI device may have smaller logical eraseblock size if their - * alignment is not equivalent to %1. - * - * The @max_write_size field describes flash write maximum write unit. For - * example, NOR flash allows for changing individual bytes, so @min_io_size is - * %1. However, it does not mean than NOR flash has to write data byte-by-byte. - * Instead, CFI NOR flashes have a write-buffer of, e.g., 64 bytes, and when - * writing large chunks of data, they write 64-bytes at a time. Obviously, this - * improves write throughput. - * - * Also, the MTD device may have N interleaved (striped) flash chips - * underneath, in which case @min_io_size can be physical min. I/O size of - * single flash chip, while @max_write_size can be N * @min_io_size. - * - * The @max_write_size field is always greater or equivalent to @min_io_size. - * E.g., some NOR flashes may have (@min_io_size = 1, @max_write_size = 64). In - * contrast, NAND flashes usually have @min_io_size = @max_write_size = NAND - * page size. - */ -struct ubi_device_info { - int ubi_num; - int leb_size; - int leb_start; - int min_io_size; - int max_write_size; - int ro_mode; - dev_t cdev; -}; - -/* - * Volume notification types. - * @UBI_VOLUME_ADDED: a volume has been added (an UBI device was attached or a - * volume was created) - * @UBI_VOLUME_REMOVED: a volume has been removed (an UBI device was detached - * or a volume was removed) - * @UBI_VOLUME_RESIZED: a volume has been re-sized - * @UBI_VOLUME_RENAMED: a volume has been re-named - * @UBI_VOLUME_UPDATED: data has been written to a volume - * - * These constants define which type of event has happened when a volume - * notification function is invoked. - */ -enum { - UBI_VOLUME_ADDED, - UBI_VOLUME_REMOVED, - UBI_VOLUME_RESIZED, - UBI_VOLUME_RENAMED, - UBI_VOLUME_UPDATED, -}; - -/* - * struct ubi_notification - UBI notification description structure. - * @di: UBI device description object - * @vi: UBI volume description object - * - * UBI notifiers are called with a pointer to an object of this type. The - * object describes the notification. Namely, it provides a description of the - * UBI device and UBI volume the notification informs about. - */ -struct ubi_notification { - struct ubi_device_info di; - struct ubi_volume_info vi; -}; - -/* UBI descriptor given to users when they open UBI volumes */ -struct ubi_volume_desc; - -int ubi_get_device_info(int ubi_num, struct ubi_device_info *di); -void ubi_get_volume_info(struct ubi_volume_desc *desc, - struct ubi_volume_info *vi); -struct ubi_volume_desc *ubi_open_volume(int ubi_num, int vol_id, int mode); -struct ubi_volume_desc *ubi_open_volume_nm(int ubi_num, const char *name, - int mode); - -void ubi_update_volume(struct ubi_volume_desc *desc); - -struct ubi_volume_desc *ubi_open_volume_path(const char *pathname, int mode); - -int ubi_register_volume_notifier(struct notifier_block *nb, - int ignore_existing); -int ubi_unregister_volume_notifier(struct notifier_block *nb); - -void ubi_close_volume(struct ubi_volume_desc *desc); -void ubi_set_volume(struct ubi_volume_desc *desc); - -int ubi_leb_read(struct ubi_volume_desc *desc, int lnum, char *buf, int offset, - int len, int check); -int ubi_leb_write(struct ubi_volume_desc *desc, int lnum, const void *buf, - int offset, int len); - -int ubi_leb_read_oob(struct ubi_volume_desc *desc, int lnum, void *buf, int offset, - int len, void *spare); - -int ubi_leb_write_oob(struct ubi_volume_desc *desc, int lnum, const void *buf, int offset, - int len, void *spare, int dtype); - -int ubi_leb_change(struct ubi_volume_desc *desc, int lnum, const void *buf, - int len); -int ubi_leb_erase(struct ubi_volume_desc *desc, int lnum); -int ubi_leb_unmap(struct ubi_volume_desc *desc, int lnum); -int ubi_leb_map(struct ubi_volume_desc *desc, int lnum); -int ubi_is_mapped(struct ubi_volume_desc *desc, int lnum); -int ubi_sync(int ubi_num); -int ubi_flush(int ubi_num, int vol_id, int lnum); - -/* - * This function is the same as the 'ubi_leb_read()' function, but it does not - * provide the checking capability. - */ -static inline int ubi_read(struct ubi_volume_desc *desc, int lnum, char *buf, - int offset, int len) -{ - return ubi_leb_read(desc, lnum, buf, offset, len, 0); -} - -/* - * This function is the same as the 'ubi_leb_write()' functions, but it does - * not have the data type argument. - */ -static inline int ubi_write(struct ubi_volume_desc *desc, int lnum, - const void *buf, int offset, int len) -{ - return ubi_leb_write(desc, lnum, buf, offset, len); -} - -/* - * This function is the same as the 'ubi_leb_change()' functions, but it does - * not have the data type argument. - */ -static inline int ubi_change(struct ubi_volume_desc *desc, int lnum, - const void *buf, int len) -{ - return ubi_leb_change(desc, lnum, buf, len); -} - -#endif /* !__LINUX_UBI_H__ */ diff --git a/ANDROID_3.4.5/include/linux/mtd/xip.h b/ANDROID_3.4.5/include/linux/mtd/xip.h deleted file mode 100644 index abed4dec..00000000 --- a/ANDROID_3.4.5/include/linux/mtd/xip.h +++ /dev/null @@ -1,99 +0,0 @@ -/* - * MTD primitives for XIP support - * - * Author: Nicolas Pitre - * Created: Nov 2, 2004 - * Copyright: (C) 2004 MontaVista Software, Inc. - * - * This XIP support for MTD has been loosely inspired - * by an earlier patch authored by David Woodhouse. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#ifndef __LINUX_MTD_XIP_H__ -#define __LINUX_MTD_XIP_H__ - - -#ifdef CONFIG_MTD_XIP - -/* - * We really don't want gcc to guess anything. - * We absolutely _need_ proper inlining. - */ -#include <linux/compiler.h> - -/* - * Function that are modifying the flash state away from array mode must - * obviously not be running from flash. The __xipram is therefore marking - * those functions so they get relocated to ram. - */ -#define __xipram noinline __attribute__ ((__section__ (".data"))) - -/* - * Each architecture has to provide the following macros. They must access - * the hardware directly and not rely on any other (XIP) functions since they - * won't be available when used (flash not in array mode). - * - * xip_irqpending() - * - * return non zero when any hardware interrupt is pending. - * - * xip_currtime() - * - * return a platform specific time reference to be used with - * xip_elapsed_since(). - * - * xip_elapsed_since(x) - * - * return in usecs the elapsed timebetween now and the reference x as - * returned by xip_currtime(). - * - * note 1: conversion to usec can be approximated, as long as the - * returned value is <= the real elapsed time. - * note 2: this should be able to cope with a few seconds without - * overflowing. - * - * xip_iprefetch() - * - * Macro to fill instruction prefetch - * e.g. a series of nops: asm volatile (".rep 8; nop; .endr"); - */ - -#include <asm/mtd-xip.h> - -#ifndef xip_irqpending - -#warning "missing IRQ and timer primitives for XIP MTD support" -#warning "some of the XIP MTD support code will be disabled" -#warning "your system will therefore be unresponsive when writing or erasing flash" - -#define xip_irqpending() (0) -#define xip_currtime() (0) -#define xip_elapsed_since(x) (0) - -#endif - -#ifndef xip_iprefetch -#define xip_iprefetch() do { } while (0) -#endif - -/* - * xip_cpu_idle() is used when waiting for a delay equal or larger than - * the system timer tick period. This should put the CPU into idle mode - * to save power and to be woken up only when some interrupts are pending. - * This should not rely upon standard kernel code. - */ -#ifndef xip_cpu_idle -#define xip_cpu_idle() do { } while (0) -#endif - -#else - -#define __xipram - -#endif /* CONFIG_MTD_XIP */ - -#endif /* __LINUX_MTD_XIP_H__ */ |