diff options
author | Linus Torvalds <torvalds@g5.osdl.org> | 2005-11-07 13:24:08 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-11-07 13:24:08 -0500 |
commit | b3ce1debe2685383a9ad6ace9c49869c3968c013 (patch) | |
tree | dcb606fac467d6ce78a9c608a1e0d2323af44f2b /include | |
parent | 5b2f7ffcb734d3046144dfbd5ac6d76254a9e522 (diff) | |
parent | c2965f1129ee54afcc4ef293ff0f25fa3a7e7392 (diff) |
Merge master.kernel.org:/pub/scm/linux/kernel/git/tglx/mtd-2.6
Some manual fixups for clashing kfree() cleanups etc.
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/jffs2.h | 41 | ||||
-rw-r--r-- | include/linux/jffs2_fs_i.h | 7 | ||||
-rw-r--r-- | include/linux/jffs2_fs_sb.h | 19 | ||||
-rw-r--r-- | include/linux/mtd/bbm.h | 122 | ||||
-rw-r--r-- | include/linux/mtd/blktrans.h | 4 | ||||
-rw-r--r-- | include/linux/mtd/cfi.h | 33 | ||||
-rw-r--r-- | include/linux/mtd/doc2000.h | 18 | ||||
-rw-r--r-- | include/linux/mtd/flashchip.h | 14 | ||||
-rw-r--r-- | include/linux/mtd/ftl.h | 6 | ||||
-rw-r--r-- | include/linux/mtd/gen_probe.h | 4 | ||||
-rw-r--r-- | include/linux/mtd/jedec.h | 20 | ||||
-rw-r--r-- | include/linux/mtd/map.h | 14 | ||||
-rw-r--r-- | include/linux/mtd/mtd.h | 36 | ||||
-rw-r--r-- | include/linux/mtd/nand.h | 57 | ||||
-rw-r--r-- | include/linux/mtd/onenand.h | 155 | ||||
-rw-r--r-- | include/linux/mtd/onenand_regs.h | 180 | ||||
-rw-r--r-- | include/linux/mtd/partitions.h | 20 | ||||
-rw-r--r-- | include/linux/mtd/physmap.h | 12 | ||||
-rw-r--r-- | include/linux/mtd/pmc551.h | 12 | ||||
-rw-r--r-- | include/linux/mtd/xip.h | 20 | ||||
-rw-r--r-- | include/linux/rslib.h | 28 | ||||
-rw-r--r-- | include/mtd/inftl-user.h | 4 | ||||
-rw-r--r-- | include/mtd/mtd-abi.h | 7 | ||||
-rw-r--r-- | include/mtd/nftl-user.h | 4 |
24 files changed, 670 insertions, 167 deletions
diff --git a/include/linux/jffs2.h b/include/linux/jffs2.h index 419fc953ac16..cf792bb3c726 100644 --- a/include/linux/jffs2.h +++ b/include/linux/jffs2.h | |||
@@ -5,10 +5,10 @@ | |||
5 | * | 5 | * |
6 | * Created by David Woodhouse <dwmw2@infradead.org> | 6 | * Created by David Woodhouse <dwmw2@infradead.org> |
7 | * | 7 | * |
8 | * For licensing information, see the file 'LICENCE' in the | 8 | * For licensing information, see the file 'LICENCE' in the |
9 | * jffs2 directory. | 9 | * jffs2 directory. |
10 | * | 10 | * |
11 | * $Id: jffs2.h,v 1.34 2004/11/16 20:36:14 dwmw2 Exp $ | 11 | * $Id: jffs2.h,v 1.38 2005/09/26 11:37:23 havasi Exp $ |
12 | * | 12 | * |
13 | */ | 13 | */ |
14 | 14 | ||
@@ -28,6 +28,9 @@ | |||
28 | #define JFFS2_EMPTY_BITMASK 0xffff | 28 | #define JFFS2_EMPTY_BITMASK 0xffff |
29 | #define JFFS2_DIRTY_BITMASK 0x0000 | 29 | #define JFFS2_DIRTY_BITMASK 0x0000 |
30 | 30 | ||
31 | /* Summary node MAGIC marker */ | ||
32 | #define JFFS2_SUM_MAGIC 0x02851885 | ||
33 | |||
31 | /* We only allow a single char for length, and 0xFF is empty flash so | 34 | /* We only allow a single char for length, and 0xFF is empty flash so |
32 | we don't want it confused with a real length. Hence max 254. | 35 | we don't want it confused with a real length. Hence max 254. |
33 | */ | 36 | */ |
@@ -43,8 +46,6 @@ | |||
43 | #define JFFS2_COMPR_COPY 0x04 | 46 | #define JFFS2_COMPR_COPY 0x04 |
44 | #define JFFS2_COMPR_DYNRUBIN 0x05 | 47 | #define JFFS2_COMPR_DYNRUBIN 0x05 |
45 | #define JFFS2_COMPR_ZLIB 0x06 | 48 | #define JFFS2_COMPR_ZLIB 0x06 |
46 | #define JFFS2_COMPR_LZO 0x07 | ||
47 | #define JFFS2_COMPR_LZARI 0x08 | ||
48 | /* Compatibility flags. */ | 49 | /* Compatibility flags. */ |
49 | #define JFFS2_COMPAT_MASK 0xc000 /* What do to if an unknown nodetype is found */ | 50 | #define JFFS2_COMPAT_MASK 0xc000 /* What do to if an unknown nodetype is found */ |
50 | #define JFFS2_NODE_ACCURATE 0x2000 | 51 | #define JFFS2_NODE_ACCURATE 0x2000 |
@@ -62,15 +63,17 @@ | |||
62 | #define JFFS2_NODETYPE_CLEANMARKER (JFFS2_FEATURE_RWCOMPAT_DELETE | JFFS2_NODE_ACCURATE | 3) | 63 | #define JFFS2_NODETYPE_CLEANMARKER (JFFS2_FEATURE_RWCOMPAT_DELETE | JFFS2_NODE_ACCURATE | 3) |
63 | #define JFFS2_NODETYPE_PADDING (JFFS2_FEATURE_RWCOMPAT_DELETE | JFFS2_NODE_ACCURATE | 4) | 64 | #define JFFS2_NODETYPE_PADDING (JFFS2_FEATURE_RWCOMPAT_DELETE | JFFS2_NODE_ACCURATE | 4) |
64 | 65 | ||
66 | #define JFFS2_NODETYPE_SUMMARY (JFFS2_FEATURE_RWCOMPAT_DELETE | JFFS2_NODE_ACCURATE | 6) | ||
67 | |||
65 | // Maybe later... | 68 | // Maybe later... |
66 | //#define JFFS2_NODETYPE_CHECKPOINT (JFFS2_FEATURE_RWCOMPAT_DELETE | JFFS2_NODE_ACCURATE | 3) | 69 | //#define JFFS2_NODETYPE_CHECKPOINT (JFFS2_FEATURE_RWCOMPAT_DELETE | JFFS2_NODE_ACCURATE | 3) |
67 | //#define JFFS2_NODETYPE_OPTIONS (JFFS2_FEATURE_RWCOMPAT_COPY | JFFS2_NODE_ACCURATE | 4) | 70 | //#define JFFS2_NODETYPE_OPTIONS (JFFS2_FEATURE_RWCOMPAT_COPY | JFFS2_NODE_ACCURATE | 4) |
68 | 71 | ||
69 | 72 | ||
70 | #define JFFS2_INO_FLAG_PREREAD 1 /* Do read_inode() for this one at | 73 | #define JFFS2_INO_FLAG_PREREAD 1 /* Do read_inode() for this one at |
71 | mount time, don't wait for it to | 74 | mount time, don't wait for it to |
72 | happen later */ | 75 | happen later */ |
73 | #define JFFS2_INO_FLAG_USERCOMPR 2 /* User has requested a specific | 76 | #define JFFS2_INO_FLAG_USERCOMPR 2 /* User has requested a specific |
74 | compression type */ | 77 | compression type */ |
75 | 78 | ||
76 | 79 | ||
@@ -101,7 +104,7 @@ struct jffs2_unknown_node | |||
101 | struct jffs2_raw_dirent | 104 | struct jffs2_raw_dirent |
102 | { | 105 | { |
103 | jint16_t magic; | 106 | jint16_t magic; |
104 | jint16_t nodetype; /* == JFFS_NODETYPE_DIRENT */ | 107 | jint16_t nodetype; /* == JFFS2_NODETYPE_DIRENT */ |
105 | jint32_t totlen; | 108 | jint32_t totlen; |
106 | jint32_t hdr_crc; | 109 | jint32_t hdr_crc; |
107 | jint32_t pino; | 110 | jint32_t pino; |
@@ -117,7 +120,7 @@ struct jffs2_raw_dirent | |||
117 | } __attribute__((packed)); | 120 | } __attribute__((packed)); |
118 | 121 | ||
119 | /* The JFFS2 raw inode structure: Used for storage on physical media. */ | 122 | /* The JFFS2 raw inode structure: Used for storage on physical media. */ |
120 | /* The uid, gid, atime, mtime and ctime members could be longer, but | 123 | /* The uid, gid, atime, mtime and ctime members could be longer, but |
121 | are left like this for space efficiency. If and when people decide | 124 | are left like this for space efficiency. If and when people decide |
122 | they really need them extended, it's simple enough to add support for | 125 | they really need them extended, it's simple enough to add support for |
123 | a new type of raw node. | 126 | a new type of raw node. |
@@ -125,7 +128,7 @@ struct jffs2_raw_dirent | |||
125 | struct jffs2_raw_inode | 128 | struct jffs2_raw_inode |
126 | { | 129 | { |
127 | jint16_t magic; /* A constant magic number. */ | 130 | jint16_t magic; /* A constant magic number. */ |
128 | jint16_t nodetype; /* == JFFS_NODETYPE_INODE */ | 131 | jint16_t nodetype; /* == JFFS2_NODETYPE_INODE */ |
129 | jint32_t totlen; /* Total length of this node (inc data, etc.) */ | 132 | jint32_t totlen; /* Total length of this node (inc data, etc.) */ |
130 | jint32_t hdr_crc; | 133 | jint32_t hdr_crc; |
131 | jint32_t ino; /* Inode number. */ | 134 | jint32_t ino; /* Inode number. */ |
@@ -148,9 +151,25 @@ struct jffs2_raw_inode | |||
148 | uint8_t data[0]; | 151 | uint8_t data[0]; |
149 | } __attribute__((packed)); | 152 | } __attribute__((packed)); |
150 | 153 | ||
151 | union jffs2_node_union { | 154 | struct jffs2_raw_summary |
155 | { | ||
156 | jint16_t magic; | ||
157 | jint16_t nodetype; /* = JFFS2_NODETYPE_SUMMARY */ | ||
158 | jint32_t totlen; | ||
159 | jint32_t hdr_crc; | ||
160 | jint32_t sum_num; /* number of sum entries*/ | ||
161 | jint32_t cln_mkr; /* clean marker size, 0 = no cleanmarker */ | ||
162 | jint32_t padded; /* sum of the size of padding nodes */ | ||
163 | jint32_t sum_crc; /* summary information crc */ | ||
164 | jint32_t node_crc; /* node crc */ | ||
165 | jint32_t sum[0]; /* inode summary info */ | ||
166 | } __attribute__((packed)); | ||
167 | |||
168 | union jffs2_node_union | ||
169 | { | ||
152 | struct jffs2_raw_inode i; | 170 | struct jffs2_raw_inode i; |
153 | struct jffs2_raw_dirent d; | 171 | struct jffs2_raw_dirent d; |
172 | struct jffs2_raw_summary s; | ||
154 | struct jffs2_unknown_node u; | 173 | struct jffs2_unknown_node u; |
155 | }; | 174 | }; |
156 | 175 | ||
diff --git a/include/linux/jffs2_fs_i.h b/include/linux/jffs2_fs_i.h index 6dbb1cce6646..ef85ab56302b 100644 --- a/include/linux/jffs2_fs_i.h +++ b/include/linux/jffs2_fs_i.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $Id: jffs2_fs_i.h,v 1.17 2004/11/11 23:51:27 dwmw2 Exp $ */ | 1 | /* $Id: jffs2_fs_i.h,v 1.19 2005/11/07 11:14:52 gleixner Exp $ */ |
2 | 2 | ||
3 | #ifndef _JFFS2_FS_I | 3 | #ifndef _JFFS2_FS_I |
4 | #define _JFFS2_FS_I | 4 | #define _JFFS2_FS_I |
@@ -25,13 +25,16 @@ struct jffs2_inode_info { | |||
25 | /* There may be one datanode which isn't referenced by any of the | 25 | /* There may be one datanode which isn't referenced by any of the |
26 | above fragments, if it contains a metadata update but no actual | 26 | above fragments, if it contains a metadata update but no actual |
27 | data - or if this is a directory inode */ | 27 | data - or if this is a directory inode */ |
28 | /* This also holds the _only_ dnode for symlinks/device nodes, | 28 | /* This also holds the _only_ dnode for symlinks/device nodes, |
29 | etc. */ | 29 | etc. */ |
30 | struct jffs2_full_dnode *metadata; | 30 | struct jffs2_full_dnode *metadata; |
31 | 31 | ||
32 | /* Directory entries */ | 32 | /* Directory entries */ |
33 | struct jffs2_full_dirent *dents; | 33 | struct jffs2_full_dirent *dents; |
34 | 34 | ||
35 | /* The target path if this is the inode of a symlink */ | ||
36 | unsigned char *target; | ||
37 | |||
35 | /* Some stuff we just have to keep in-core at all times, for each inode. */ | 38 | /* Some stuff we just have to keep in-core at all times, for each inode. */ |
36 | struct jffs2_inode_cache *inocache; | 39 | struct jffs2_inode_cache *inocache; |
37 | 40 | ||
diff --git a/include/linux/jffs2_fs_sb.h b/include/linux/jffs2_fs_sb.h index 1e21546622de..4bcfb5570221 100644 --- a/include/linux/jffs2_fs_sb.h +++ b/include/linux/jffs2_fs_sb.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $Id: jffs2_fs_sb.h,v 1.52 2005/05/19 16:12:17 gleixner Exp $ */ | 1 | /* $Id: jffs2_fs_sb.h,v 1.54 2005/09/21 13:37:34 dedekind Exp $ */ |
2 | 2 | ||
3 | #ifndef _JFFS2_FS_SB | 3 | #ifndef _JFFS2_FS_SB |
4 | #define _JFFS2_FS_SB | 4 | #define _JFFS2_FS_SB |
@@ -20,7 +20,7 @@ | |||
20 | struct jffs2_inodirty; | 20 | struct jffs2_inodirty; |
21 | 21 | ||
22 | /* A struct for the overall file system control. Pointers to | 22 | /* A struct for the overall file system control. Pointers to |
23 | jffs2_sb_info structs are named `c' in the source code. | 23 | jffs2_sb_info structs are named `c' in the source code. |
24 | Nee jffs_control | 24 | Nee jffs_control |
25 | */ | 25 | */ |
26 | struct jffs2_sb_info { | 26 | struct jffs2_sb_info { |
@@ -35,7 +35,7 @@ struct jffs2_sb_info { | |||
35 | struct completion gc_thread_start; /* GC thread start completion */ | 35 | struct completion gc_thread_start; /* GC thread start completion */ |
36 | struct completion gc_thread_exit; /* GC thread exit completion port */ | 36 | struct completion gc_thread_exit; /* GC thread exit completion port */ |
37 | 37 | ||
38 | struct semaphore alloc_sem; /* Used to protect all the following | 38 | struct semaphore alloc_sem; /* Used to protect all the following |
39 | fields, and also to protect against | 39 | fields, and also to protect against |
40 | out-of-order writing of nodes. And GC. */ | 40 | out-of-order writing of nodes. And GC. */ |
41 | uint32_t cleanmarker_size; /* Size of an _inline_ CLEANMARKER | 41 | uint32_t cleanmarker_size; /* Size of an _inline_ CLEANMARKER |
@@ -64,7 +64,7 @@ struct jffs2_sb_info { | |||
64 | uint32_t nospc_dirty_size; | 64 | uint32_t nospc_dirty_size; |
65 | 65 | ||
66 | uint32_t nr_blocks; | 66 | uint32_t nr_blocks; |
67 | struct jffs2_eraseblock *blocks; /* The whole array of blocks. Used for getting blocks | 67 | struct jffs2_eraseblock *blocks; /* The whole array of blocks. Used for getting blocks |
68 | * from the offset (blocks[ofs / sector_size]) */ | 68 | * from the offset (blocks[ofs / sector_size]) */ |
69 | struct jffs2_eraseblock *nextblock; /* The block we're currently filling */ | 69 | struct jffs2_eraseblock *nextblock; /* The block we're currently filling */ |
70 | 70 | ||
@@ -82,25 +82,26 @@ struct jffs2_sb_info { | |||
82 | struct list_head bad_list; /* Bad blocks. */ | 82 | struct list_head bad_list; /* Bad blocks. */ |
83 | struct list_head bad_used_list; /* Bad blocks with valid data in. */ | 83 | struct list_head bad_used_list; /* Bad blocks with valid data in. */ |
84 | 84 | ||
85 | spinlock_t erase_completion_lock; /* Protect free_list and erasing_list | 85 | spinlock_t erase_completion_lock; /* Protect free_list and erasing_list |
86 | against erase completion handler */ | 86 | against erase completion handler */ |
87 | wait_queue_head_t erase_wait; /* For waiting for erases to complete */ | 87 | wait_queue_head_t erase_wait; /* For waiting for erases to complete */ |
88 | 88 | ||
89 | wait_queue_head_t inocache_wq; | 89 | wait_queue_head_t inocache_wq; |
90 | struct jffs2_inode_cache **inocache_list; | 90 | struct jffs2_inode_cache **inocache_list; |
91 | spinlock_t inocache_lock; | 91 | spinlock_t inocache_lock; |
92 | 92 | ||
93 | /* Sem to allow jffs2_garbage_collect_deletion_dirent to | 93 | /* Sem to allow jffs2_garbage_collect_deletion_dirent to |
94 | drop the erase_completion_lock while it's holding a pointer | 94 | drop the erase_completion_lock while it's holding a pointer |
95 | to an obsoleted node. I don't like this. Alternatives welcomed. */ | 95 | to an obsoleted node. I don't like this. Alternatives welcomed. */ |
96 | struct semaphore erase_free_sem; | 96 | struct semaphore erase_free_sem; |
97 | 97 | ||
98 | uint32_t wbuf_pagesize; /* 0 for NOR and other flashes with no wbuf */ | ||
99 | |||
98 | #ifdef CONFIG_JFFS2_FS_WRITEBUFFER | 100 | #ifdef CONFIG_JFFS2_FS_WRITEBUFFER |
99 | /* Write-behind buffer for NAND flash */ | 101 | /* Write-behind buffer for NAND flash */ |
100 | unsigned char *wbuf; | 102 | unsigned char *wbuf; |
101 | uint32_t wbuf_ofs; | 103 | uint32_t wbuf_ofs; |
102 | uint32_t wbuf_len; | 104 | uint32_t wbuf_len; |
103 | uint32_t wbuf_pagesize; | ||
104 | struct jffs2_inodirty *wbuf_inodes; | 105 | struct jffs2_inodirty *wbuf_inodes; |
105 | 106 | ||
106 | struct rw_semaphore wbuf_sem; /* Protects the write buffer */ | 107 | struct rw_semaphore wbuf_sem; /* Protects the write buffer */ |
@@ -112,6 +113,8 @@ struct jffs2_sb_info { | |||
112 | uint32_t fsdata_len; | 113 | uint32_t fsdata_len; |
113 | #endif | 114 | #endif |
114 | 115 | ||
116 | struct jffs2_summary *summary; /* Summary information */ | ||
117 | |||
115 | /* OS-private pointer for getting back to master superblock info */ | 118 | /* OS-private pointer for getting back to master superblock info */ |
116 | void *os_priv; | 119 | void *os_priv; |
117 | }; | 120 | }; |
diff --git a/include/linux/mtd/bbm.h b/include/linux/mtd/bbm.h new file mode 100644 index 000000000000..7a7fbe87fef0 --- /dev/null +++ b/include/linux/mtd/bbm.h | |||
@@ -0,0 +1,122 @@ | |||
1 | /* | ||
2 | * linux/include/linux/mtd/bbm.h | ||
3 | * | ||
4 | * NAND family Bad Block Management (BBM) header file | ||
5 | * - Bad Block Table (BBT) implementation | ||
6 | * | ||
7 | * Copyright (c) 2005 Samsung Electronics | ||
8 | * Kyungmin Park <kyungmin.park@samsung.com> | ||
9 | * | ||
10 | * Copyright (c) 2000-2005 | ||
11 | * Thomas Gleixner <tglx@linuxtronix.de> | ||
12 | * | ||
13 | */ | ||
14 | #ifndef __LINUX_MTD_BBM_H | ||
15 | #define __LINUX_MTD_BBM_H | ||
16 | |||
17 | /* The maximum number of NAND chips in an array */ | ||
18 | #define NAND_MAX_CHIPS 8 | ||
19 | |||
20 | /** | ||
21 | * struct nand_bbt_descr - bad block table descriptor | ||
22 | * @param options options for this descriptor | ||
23 | * @param pages the page(s) where we find the bbt, used with | ||
24 | * option BBT_ABSPAGE when bbt is searched, | ||
25 | * then we store the found bbts pages here. | ||
26 | * Its an array and supports up to 8 chips now | ||
27 | * @param offs offset of the pattern in the oob area of the page | ||
28 | * @param veroffs offset of the bbt version counter in the oob are of the page | ||
29 | * @param version version read from the bbt page during scan | ||
30 | * @param len length of the pattern, if 0 no pattern check is performed | ||
31 | * @param maxblocks maximum number of blocks to search for a bbt. This number of | ||
32 | * blocks is reserved at the end of the device | ||
33 | * where the tables are written. | ||
34 | * @param reserved_block_code if non-0, this pattern denotes a reserved | ||
35 | * (rather than bad) block in the stored bbt | ||
36 | * @param pattern pattern to identify bad block table or factory marked | ||
37 | * good / bad blocks, can be NULL, if len = 0 | ||
38 | * | ||
39 | * Descriptor for the bad block table marker and the descriptor for the | ||
40 | * pattern which identifies good and bad blocks. The assumption is made | ||
41 | * that the pattern and the version count are always located in the oob area | ||
42 | * of the first block. | ||
43 | */ | ||
44 | struct nand_bbt_descr { | ||
45 | int options; | ||
46 | int pages[NAND_MAX_CHIPS]; | ||
47 | int offs; | ||
48 | int veroffs; | ||
49 | uint8_t version[NAND_MAX_CHIPS]; | ||
50 | int len; | ||
51 | int maxblocks; | ||
52 | int reserved_block_code; | ||
53 | uint8_t *pattern; | ||
54 | }; | ||
55 | |||
56 | /* Options for the bad block table descriptors */ | ||
57 | |||
58 | /* The number of bits used per block in the bbt on the device */ | ||
59 | #define NAND_BBT_NRBITS_MSK 0x0000000F | ||
60 | #define NAND_BBT_1BIT 0x00000001 | ||
61 | #define NAND_BBT_2BIT 0x00000002 | ||
62 | #define NAND_BBT_4BIT 0x00000004 | ||
63 | #define NAND_BBT_8BIT 0x00000008 | ||
64 | /* The bad block table is in the last good block of the device */ | ||
65 | #define NAND_BBT_LASTBLOCK 0x00000010 | ||
66 | /* The bbt is at the given page, else we must scan for the bbt */ | ||
67 | #define NAND_BBT_ABSPAGE 0x00000020 | ||
68 | /* The bbt is at the given page, else we must scan for the bbt */ | ||
69 | #define NAND_BBT_SEARCH 0x00000040 | ||
70 | /* bbt is stored per chip on multichip devices */ | ||
71 | #define NAND_BBT_PERCHIP 0x00000080 | ||
72 | /* bbt has a version counter at offset veroffs */ | ||
73 | #define NAND_BBT_VERSION 0x00000100 | ||
74 | /* Create a bbt if none axists */ | ||
75 | #define NAND_BBT_CREATE 0x00000200 | ||
76 | /* Search good / bad pattern through all pages of a block */ | ||
77 | #define NAND_BBT_SCANALLPAGES 0x00000400 | ||
78 | /* Scan block empty during good / bad block scan */ | ||
79 | #define NAND_BBT_SCANEMPTY 0x00000800 | ||
80 | /* Write bbt if neccecary */ | ||
81 | #define NAND_BBT_WRITE 0x00001000 | ||
82 | /* Read and write back block contents when writing bbt */ | ||
83 | #define NAND_BBT_SAVECONTENT 0x00002000 | ||
84 | /* Search good / bad pattern on the first and the second page */ | ||
85 | #define NAND_BBT_SCAN2NDPAGE 0x00004000 | ||
86 | |||
87 | /* The maximum number of blocks to scan for a bbt */ | ||
88 | #define NAND_BBT_SCAN_MAXBLOCKS 4 | ||
89 | |||
90 | /* | ||
91 | * Constants for oob configuration | ||
92 | */ | ||
93 | #define ONENAND_BADBLOCK_POS 0 | ||
94 | |||
95 | /** | ||
96 | * struct bbt_info - [GENERIC] Bad Block Table data structure | ||
97 | * @param bbt_erase_shift [INTERN] number of address bits in a bbt entry | ||
98 | * @param badblockpos [INTERN] position of the bad block marker in the oob area | ||
99 | * @param bbt [INTERN] bad block table pointer | ||
100 | * @param badblock_pattern [REPLACEABLE] bad block scan pattern used for initial bad block scan | ||
101 | * @param priv [OPTIONAL] pointer to private bbm date | ||
102 | */ | ||
103 | struct bbm_info { | ||
104 | int bbt_erase_shift; | ||
105 | int badblockpos; | ||
106 | int options; | ||
107 | |||
108 | uint8_t *bbt; | ||
109 | |||
110 | int (*isbad_bbt)(struct mtd_info *mtd, loff_t ofs, int allowbbt); | ||
111 | |||
112 | /* TODO Add more NAND specific fileds */ | ||
113 | struct nand_bbt_descr *badblock_pattern; | ||
114 | |||
115 | void *priv; | ||
116 | }; | ||
117 | |||
118 | /* OneNAND BBT interface */ | ||
119 | extern int onenand_scan_bbt(struct mtd_info *mtd, struct nand_bbt_descr *bd); | ||
120 | extern int onenand_default_bbt(struct mtd_info *mtd); | ||
121 | |||
122 | #endif /* __LINUX_MTD_BBM_H */ | ||
diff --git a/include/linux/mtd/blktrans.h b/include/linux/mtd/blktrans.h index 4ebc2e5a16e2..f46afec6fbf8 100644 --- a/include/linux/mtd/blktrans.h +++ b/include/linux/mtd/blktrans.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * $Id: blktrans.h,v 1.5 2003/06/23 12:00:08 dwmw2 Exp $ | 2 | * $Id: blktrans.h,v 1.6 2005/11/07 11:14:54 gleixner Exp $ |
3 | * | 3 | * |
4 | * (C) 2003 David Woodhouse <dwmw2@infradead.org> | 4 | * (C) 2003 David Woodhouse <dwmw2@infradead.org> |
5 | * | 5 | * |
@@ -67,6 +67,6 @@ extern int register_mtd_blktrans(struct mtd_blktrans_ops *tr); | |||
67 | extern int deregister_mtd_blktrans(struct mtd_blktrans_ops *tr); | 67 | extern int deregister_mtd_blktrans(struct mtd_blktrans_ops *tr); |
68 | extern int add_mtd_blktrans_dev(struct mtd_blktrans_dev *dev); | 68 | extern int add_mtd_blktrans_dev(struct mtd_blktrans_dev *dev); |
69 | extern int del_mtd_blktrans_dev(struct mtd_blktrans_dev *dev); | 69 | extern int del_mtd_blktrans_dev(struct mtd_blktrans_dev *dev); |
70 | 70 | ||
71 | 71 | ||
72 | #endif /* __MTD_TRANS_H__ */ | 72 | #endif /* __MTD_TRANS_H__ */ |
diff --git a/include/linux/mtd/cfi.h b/include/linux/mtd/cfi.h index e6b6a1c66bd5..39f1430bd6d5 100644 --- a/include/linux/mtd/cfi.h +++ b/include/linux/mtd/cfi.h | |||
@@ -1,7 +1,7 @@ | |||
1 | 1 | ||
2 | /* Common Flash Interface structures | 2 | /* Common Flash Interface structures |
3 | * See http://support.intel.com/design/flash/technote/index.htm | 3 | * See http://support.intel.com/design/flash/technote/index.htm |
4 | * $Id: cfi.h,v 1.54 2005/06/06 23:04:36 tpoynor Exp $ | 4 | * $Id: cfi.h,v 1.56 2005/11/07 11:14:54 gleixner Exp $ |
5 | */ | 5 | */ |
6 | 6 | ||
7 | #ifndef __MTD_CFI_H__ | 7 | #ifndef __MTD_CFI_H__ |
@@ -82,8 +82,8 @@ static inline int cfi_interleave_supported(int i) | |||
82 | } | 82 | } |
83 | 83 | ||
84 | 84 | ||
85 | /* NB: these values must represents the number of bytes needed to meet the | 85 | /* NB: these values must represents the number of bytes needed to meet the |
86 | * device type (x8, x16, x32). Eg. a 32 bit device is 4 x 8 bytes. | 86 | * device type (x8, x16, x32). Eg. a 32 bit device is 4 x 8 bytes. |
87 | * These numbers are used in calculations. | 87 | * These numbers are used in calculations. |
88 | */ | 88 | */ |
89 | #define CFI_DEVICETYPE_X8 (8 / 8) | 89 | #define CFI_DEVICETYPE_X8 (8 / 8) |
@@ -173,6 +173,15 @@ struct cfi_intelext_regioninfo { | |||
173 | struct cfi_intelext_blockinfo BlockTypes[1]; | 173 | struct cfi_intelext_blockinfo BlockTypes[1]; |
174 | } __attribute__((packed)); | 174 | } __attribute__((packed)); |
175 | 175 | ||
176 | struct cfi_intelext_programming_regioninfo { | ||
177 | uint8_t ProgRegShift; | ||
178 | uint8_t Reserved1; | ||
179 | uint8_t ControlValid; | ||
180 | uint8_t Reserved2; | ||
181 | uint8_t ControlInvalid; | ||
182 | uint8_t Reserved3; | ||
183 | } __attribute__((packed)); | ||
184 | |||
176 | /* Vendor-Specific PRI for AMD/Fujitsu Extended Command Set (0x0002) */ | 185 | /* Vendor-Specific PRI for AMD/Fujitsu Extended Command Set (0x0002) */ |
177 | 186 | ||
178 | struct cfi_pri_amdstd { | 187 | struct cfi_pri_amdstd { |
@@ -250,7 +259,7 @@ static inline uint32_t cfi_build_cmd_addr(uint32_t cmd_ofs, int interleave, int | |||
250 | /* | 259 | /* |
251 | * Transforms the CFI command for the given geometry (bus width & interleave). | 260 | * Transforms the CFI command for the given geometry (bus width & interleave). |
252 | * It looks too long to be inline, but in the common case it should almost all | 261 | * It looks too long to be inline, but in the common case it should almost all |
253 | * get optimised away. | 262 | * get optimised away. |
254 | */ | 263 | */ |
255 | static inline map_word cfi_build_cmd(u_long cmd, struct map_info *map, struct cfi_private *cfi) | 264 | static inline map_word cfi_build_cmd(u_long cmd, struct map_info *map, struct cfi_private *cfi) |
256 | { | 265 | { |
@@ -259,7 +268,7 @@ static inline map_word cfi_build_cmd(u_long cmd, struct map_info *map, struct cf | |||
259 | unsigned long onecmd; | 268 | unsigned long onecmd; |
260 | int i; | 269 | int i; |
261 | 270 | ||
262 | /* We do it this way to give the compiler a fighting chance | 271 | /* We do it this way to give the compiler a fighting chance |
263 | of optimising away all the crap for 'bankwidth' larger than | 272 | of optimising away all the crap for 'bankwidth' larger than |
264 | an unsigned long, in the common case where that support is | 273 | an unsigned long, in the common case where that support is |
265 | disabled */ | 274 | disabled */ |
@@ -270,7 +279,7 @@ static inline map_word cfi_build_cmd(u_long cmd, struct map_info *map, struct cf | |||
270 | wordwidth = map_bankwidth(map); | 279 | wordwidth = map_bankwidth(map); |
271 | words_per_bus = 1; | 280 | words_per_bus = 1; |
272 | } | 281 | } |
273 | 282 | ||
274 | chip_mode = map_bankwidth(map) / cfi_interleave(cfi); | 283 | chip_mode = map_bankwidth(map) / cfi_interleave(cfi); |
275 | chips_per_word = wordwidth * cfi_interleave(cfi) / map_bankwidth(map); | 284 | chips_per_word = wordwidth * cfi_interleave(cfi) / map_bankwidth(map); |
276 | 285 | ||
@@ -289,7 +298,7 @@ static inline map_word cfi_build_cmd(u_long cmd, struct map_info *map, struct cf | |||
289 | break; | 298 | break; |
290 | } | 299 | } |
291 | 300 | ||
292 | /* Now replicate it across the size of an unsigned long, or | 301 | /* Now replicate it across the size of an unsigned long, or |
293 | just to the bus width as appropriate */ | 302 | just to the bus width as appropriate */ |
294 | switch (chips_per_word) { | 303 | switch (chips_per_word) { |
295 | default: BUG(); | 304 | default: BUG(); |
@@ -305,7 +314,7 @@ static inline map_word cfi_build_cmd(u_long cmd, struct map_info *map, struct cf | |||
305 | ; | 314 | ; |
306 | } | 315 | } |
307 | 316 | ||
308 | /* And finally, for the multi-word case, replicate it | 317 | /* And finally, for the multi-word case, replicate it |
309 | in all words in the structure */ | 318 | in all words in the structure */ |
310 | for (i=0; i < words_per_bus; i++) { | 319 | for (i=0; i < words_per_bus; i++) { |
311 | val.x[i] = onecmd; | 320 | val.x[i] = onecmd; |
@@ -316,14 +325,14 @@ static inline map_word cfi_build_cmd(u_long cmd, struct map_info *map, struct cf | |||
316 | #define CMD(x) cfi_build_cmd((x), map, cfi) | 325 | #define CMD(x) cfi_build_cmd((x), map, cfi) |
317 | 326 | ||
318 | 327 | ||
319 | static inline unsigned char cfi_merge_status(map_word val, struct map_info *map, | 328 | static inline unsigned long cfi_merge_status(map_word val, struct map_info *map, |
320 | struct cfi_private *cfi) | 329 | struct cfi_private *cfi) |
321 | { | 330 | { |
322 | int wordwidth, words_per_bus, chip_mode, chips_per_word; | 331 | int wordwidth, words_per_bus, chip_mode, chips_per_word; |
323 | unsigned long onestat, res = 0; | 332 | unsigned long onestat, res = 0; |
324 | int i; | 333 | int i; |
325 | 334 | ||
326 | /* We do it this way to give the compiler a fighting chance | 335 | /* We do it this way to give the compiler a fighting chance |
327 | of optimising away all the crap for 'bankwidth' larger than | 336 | of optimising away all the crap for 'bankwidth' larger than |
328 | an unsigned long, in the common case where that support is | 337 | an unsigned long, in the common case where that support is |
329 | disabled */ | 338 | disabled */ |
@@ -334,7 +343,7 @@ static inline unsigned char cfi_merge_status(map_word val, struct map_info *map, | |||
334 | wordwidth = map_bankwidth(map); | 343 | wordwidth = map_bankwidth(map); |
335 | words_per_bus = 1; | 344 | words_per_bus = 1; |
336 | } | 345 | } |
337 | 346 | ||
338 | chip_mode = map_bankwidth(map) / cfi_interleave(cfi); | 347 | chip_mode = map_bankwidth(map) / cfi_interleave(cfi); |
339 | chips_per_word = wordwidth * cfi_interleave(cfi) / map_bankwidth(map); | 348 | chips_per_word = wordwidth * cfi_interleave(cfi) / map_bankwidth(map); |
340 | 349 | ||
diff --git a/include/linux/mtd/doc2000.h b/include/linux/mtd/doc2000.h index 953e64fb8ac5..386a52cf8b1b 100644 --- a/include/linux/mtd/doc2000.h +++ b/include/linux/mtd/doc2000.h | |||
@@ -1,12 +1,12 @@ | |||
1 | /* | 1 | /* |
2 | * Linux driver for Disk-On-Chip devices | 2 | * Linux driver for Disk-On-Chip devices |
3 | * | 3 | * |
4 | * Copyright (C) 1999 Machine Vision Holdings, Inc. | 4 | * Copyright (C) 1999 Machine Vision Holdings, Inc. |
5 | * Copyright (C) 2001-2003 David Woodhouse <dwmw2@infradead.org> | 5 | * Copyright (C) 2001-2003 David Woodhouse <dwmw2@infradead.org> |
6 | * Copyright (C) 2002-2003 Greg Ungerer <gerg@snapgear.com> | 6 | * Copyright (C) 2002-2003 Greg Ungerer <gerg@snapgear.com> |
7 | * Copyright (C) 2002-2003 SnapGear Inc | 7 | * Copyright (C) 2002-2003 SnapGear Inc |
8 | * | 8 | * |
9 | * $Id: doc2000.h,v 1.24 2005/01/05 12:40:38 dwmw2 Exp $ | 9 | * $Id: doc2000.h,v 1.25 2005/11/07 11:14:54 gleixner Exp $ |
10 | * | 10 | * |
11 | * Released under GPL | 11 | * Released under GPL |
12 | */ | 12 | */ |
@@ -75,10 +75,10 @@ | |||
75 | #define DoC_Mplus_CtrlConfirm 0x1076 | 75 | #define DoC_Mplus_CtrlConfirm 0x1076 |
76 | #define DoC_Mplus_Power 0x1fff | 76 | #define DoC_Mplus_Power 0x1fff |
77 | 77 | ||
78 | /* How to access the device? | 78 | /* How to access the device? |
79 | * On ARM, it'll be mmap'd directly with 32-bit wide accesses. | 79 | * On ARM, it'll be mmap'd directly with 32-bit wide accesses. |
80 | * On PPC, it's mmap'd and 16-bit wide. | 80 | * On PPC, it's mmap'd and 16-bit wide. |
81 | * Others use readb/writeb | 81 | * Others use readb/writeb |
82 | */ | 82 | */ |
83 | #if defined(__arm__) | 83 | #if defined(__arm__) |
84 | #define ReadDOC_(adr, reg) ((unsigned char)(*(volatile __u32 *)(((unsigned long)adr)+((reg)<<2)))) | 84 | #define ReadDOC_(adr, reg) ((unsigned char)(*(volatile __u32 *)(((unsigned long)adr)+((reg)<<2)))) |
@@ -172,7 +172,7 @@ struct DiskOnChip { | |||
172 | unsigned long totlen; | 172 | unsigned long totlen; |
173 | unsigned char ChipID; /* Type of DiskOnChip */ | 173 | unsigned char ChipID; /* Type of DiskOnChip */ |
174 | int ioreg; | 174 | int ioreg; |
175 | 175 | ||
176 | unsigned long mfr; /* Flash IDs - only one type of flash per device */ | 176 | unsigned long mfr; /* Flash IDs - only one type of flash per device */ |
177 | unsigned long id; | 177 | unsigned long id; |
178 | int chipshift; | 178 | int chipshift; |
@@ -180,10 +180,10 @@ struct DiskOnChip { | |||
180 | char pageadrlen; | 180 | char pageadrlen; |
181 | char interleave; /* Internal interleaving - Millennium Plus style */ | 181 | char interleave; /* Internal interleaving - Millennium Plus style */ |
182 | unsigned long erasesize; | 182 | unsigned long erasesize; |
183 | 183 | ||
184 | int curfloor; | 184 | int curfloor; |
185 | int curchip; | 185 | int curchip; |
186 | 186 | ||
187 | int numchips; | 187 | int numchips; |
188 | struct Nand *chips; | 188 | struct Nand *chips; |
189 | struct mtd_info *nextdoc; | 189 | struct mtd_info *nextdoc; |
diff --git a/include/linux/mtd/flashchip.h b/include/linux/mtd/flashchip.h index 675776fa3e27..a293a3b78e05 100644 --- a/include/linux/mtd/flashchip.h +++ b/include/linux/mtd/flashchip.h | |||
@@ -1,12 +1,12 @@ | |||
1 | 1 | ||
2 | /* | 2 | /* |
3 | * struct flchip definition | 3 | * struct flchip definition |
4 | * | 4 | * |
5 | * Contains information about the location and state of a given flash device | 5 | * Contains information about the location and state of a given flash device |
6 | * | 6 | * |
7 | * (C) 2000 Red Hat. GPLd. | 7 | * (C) 2000 Red Hat. GPLd. |
8 | * | 8 | * |
9 | * $Id: flashchip.h,v 1.17 2005/03/14 18:27:15 bjd Exp $ | 9 | * $Id: flashchip.h,v 1.18 2005/11/07 11:14:54 gleixner Exp $ |
10 | * | 10 | * |
11 | */ | 11 | */ |
12 | 12 | ||
@@ -15,11 +15,11 @@ | |||
15 | 15 | ||
16 | /* For spinlocks. sched.h includes spinlock.h from whichever directory it | 16 | /* For spinlocks. sched.h includes spinlock.h from whichever directory it |
17 | * happens to be in - so we don't have to care whether we're on 2.2, which | 17 | * happens to be in - so we don't have to care whether we're on 2.2, which |
18 | * has asm/spinlock.h, or 2.4, which has linux/spinlock.h | 18 | * has asm/spinlock.h, or 2.4, which has linux/spinlock.h |
19 | */ | 19 | */ |
20 | #include <linux/sched.h> | 20 | #include <linux/sched.h> |
21 | 21 | ||
22 | typedef enum { | 22 | typedef enum { |
23 | FL_READY, | 23 | FL_READY, |
24 | FL_STATUS, | 24 | FL_STATUS, |
25 | FL_CFI_QUERY, | 25 | FL_CFI_QUERY, |
@@ -45,7 +45,7 @@ typedef enum { | |||
45 | 45 | ||
46 | 46 | ||
47 | 47 | ||
48 | /* NOTE: confusingly, this can be used to refer to more than one chip at a time, | 48 | /* NOTE: confusingly, this can be used to refer to more than one chip at a time, |
49 | if they're interleaved. This can even refer to individual partitions on | 49 | if they're interleaved. This can even refer to individual partitions on |
50 | the same physical chip when present. */ | 50 | the same physical chip when present. */ |
51 | 51 | ||
diff --git a/include/linux/mtd/ftl.h b/include/linux/mtd/ftl.h index 3678459b4535..d99609113307 100644 --- a/include/linux/mtd/ftl.h +++ b/include/linux/mtd/ftl.h | |||
@@ -1,6 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * $Id: ftl.h,v 1.6 2003/01/24 13:20:04 dwmw2 Exp $ | 2 | * $Id: ftl.h,v 1.7 2005/11/07 11:14:54 gleixner Exp $ |
3 | * | 3 | * |
4 | * Derived from (and probably identical to): | 4 | * Derived from (and probably identical to): |
5 | * ftl.h 1.7 1999/10/25 20:23:17 | 5 | * ftl.h 1.7 1999/10/25 20:23:17 |
6 | * | 6 | * |
@@ -12,7 +12,7 @@ | |||
12 | * Software distributed under the License is distributed on an "AS IS" | 12 | * Software distributed under the License is distributed on an "AS IS" |
13 | * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See | 13 | * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See |
14 | * the License for the specific language governing rights and | 14 | * the License for the specific language governing rights and |
15 | * limitations under the License. | 15 | * limitations under the License. |
16 | * | 16 | * |
17 | * The initial developer of the original code is David A. Hinds | 17 | * The initial developer of the original code is David A. Hinds |
18 | * <dahinds@users.sourceforge.net>. Portions created by David A. Hinds | 18 | * <dahinds@users.sourceforge.net>. Portions created by David A. Hinds |
diff --git a/include/linux/mtd/gen_probe.h b/include/linux/mtd/gen_probe.h index 3d7bdec14f97..256e7342ed1e 100644 --- a/include/linux/mtd/gen_probe.h +++ b/include/linux/mtd/gen_probe.h | |||
@@ -1,14 +1,14 @@ | |||
1 | /* | 1 | /* |
2 | * (C) 2001, 2001 Red Hat, Inc. | 2 | * (C) 2001, 2001 Red Hat, Inc. |
3 | * GPL'd | 3 | * GPL'd |
4 | * $Id: gen_probe.h,v 1.3 2004/10/20 22:10:33 dwmw2 Exp $ | 4 | * $Id: gen_probe.h,v 1.4 2005/11/07 11:14:54 gleixner Exp $ |
5 | */ | 5 | */ |
6 | 6 | ||
7 | #ifndef __LINUX_MTD_GEN_PROBE_H__ | 7 | #ifndef __LINUX_MTD_GEN_PROBE_H__ |
8 | #define __LINUX_MTD_GEN_PROBE_H__ | 8 | #define __LINUX_MTD_GEN_PROBE_H__ |
9 | 9 | ||
10 | #include <linux/mtd/flashchip.h> | 10 | #include <linux/mtd/flashchip.h> |
11 | #include <linux/mtd/map.h> | 11 | #include <linux/mtd/map.h> |
12 | #include <linux/mtd/cfi.h> | 12 | #include <linux/mtd/cfi.h> |
13 | #include <linux/bitops.h> | 13 | #include <linux/bitops.h> |
14 | 14 | ||
diff --git a/include/linux/mtd/jedec.h b/include/linux/mtd/jedec.h index 2ba0f700ddbc..9006feb218b9 100644 --- a/include/linux/mtd/jedec.h +++ b/include/linux/mtd/jedec.h | |||
@@ -1,13 +1,13 @@ | |||
1 | 1 | ||
2 | /* JEDEC Flash Interface. | 2 | /* JEDEC Flash Interface. |
3 | * This is an older type of interface for self programming flash. It is | 3 | * This is an older type of interface for self programming flash. It is |
4 | * commonly use in older AMD chips and is obsolete compared with CFI. | 4 | * commonly use in older AMD chips and is obsolete compared with CFI. |
5 | * It is called JEDEC because the JEDEC association distributes the ID codes | 5 | * It is called JEDEC because the JEDEC association distributes the ID codes |
6 | * for the chips. | 6 | * for the chips. |
7 | * | 7 | * |
8 | * See the AMD flash databook for information on how to operate the interface. | 8 | * See the AMD flash databook for information on how to operate the interface. |
9 | * | 9 | * |
10 | * $Id: jedec.h,v 1.3 2003/05/21 11:51:01 dwmw2 Exp $ | 10 | * $Id: jedec.h,v 1.4 2005/11/07 11:14:54 gleixner Exp $ |
11 | */ | 11 | */ |
12 | 12 | ||
13 | #ifndef __LINUX_MTD_JEDEC_H__ | 13 | #ifndef __LINUX_MTD_JEDEC_H__ |
@@ -33,16 +33,16 @@ struct jedec_flash_chip | |||
33 | __u16 jedec; | 33 | __u16 jedec; |
34 | unsigned long size; | 34 | unsigned long size; |
35 | unsigned long sectorsize; | 35 | unsigned long sectorsize; |
36 | 36 | ||
37 | // *(__u8*)(base + (adder << addrshift)) = data << datashift | 37 | // *(__u8*)(base + (adder << addrshift)) = data << datashift |
38 | // Address size = size << addrshift | 38 | // Address size = size << addrshift |
39 | unsigned long base; // Byte 0 of the flash, will be unaligned | 39 | unsigned long base; // Byte 0 of the flash, will be unaligned |
40 | unsigned int datashift; // Useful for 32bit/16bit accesses | 40 | unsigned int datashift; // Useful for 32bit/16bit accesses |
41 | unsigned int addrshift; | 41 | unsigned int addrshift; |
42 | unsigned long offset; // linerized start. base==offset for unbanked, uninterleaved flash | 42 | unsigned long offset; // linerized start. base==offset for unbanked, uninterleaved flash |
43 | 43 | ||
44 | __u32 capabilities; | 44 | __u32 capabilities; |
45 | 45 | ||
46 | // These markers are filled in by the flash_chip_scan function | 46 | // These markers are filled in by the flash_chip_scan function |
47 | unsigned long start; | 47 | unsigned long start; |
48 | unsigned long length; | 48 | unsigned long length; |
@@ -51,16 +51,16 @@ struct jedec_flash_chip | |||
51 | struct jedec_private | 51 | struct jedec_private |
52 | { | 52 | { |
53 | unsigned long size; // Total size of all the devices | 53 | unsigned long size; // Total size of all the devices |
54 | 54 | ||
55 | /* Bank handling. If sum(bank_fill) == size then this is linear flash. | 55 | /* Bank handling. If sum(bank_fill) == size then this is linear flash. |
56 | Otherwise the mapping has holes in it. bank_fill may be used to | 56 | Otherwise the mapping has holes in it. bank_fill may be used to |
57 | find the holes, but in the common symetric case | 57 | find the holes, but in the common symetric case |
58 | bank_fill[0] == bank_fill[*], thus addresses may be computed | 58 | bank_fill[0] == bank_fill[*], thus addresses may be computed |
59 | mathmatically. bank_fill must be powers of two */ | 59 | mathmatically. bank_fill must be powers of two */ |
60 | unsigned is_banked; | 60 | unsigned is_banked; |
61 | unsigned long bank_fill[MAX_JEDEC_CHIPS]; | 61 | unsigned long bank_fill[MAX_JEDEC_CHIPS]; |
62 | 62 | ||
63 | struct jedec_flash_chip chips[MAX_JEDEC_CHIPS]; | 63 | struct jedec_flash_chip chips[MAX_JEDEC_CHIPS]; |
64 | }; | 64 | }; |
65 | 65 | ||
66 | #endif | 66 | #endif |
diff --git a/include/linux/mtd/map.h b/include/linux/mtd/map.h index fc28841f3409..fedfbc8a287f 100644 --- a/include/linux/mtd/map.h +++ b/include/linux/mtd/map.h | |||
@@ -1,6 +1,6 @@ | |||
1 | 1 | ||
2 | /* Overhauled routines for dealing with different mmap regions of flash */ | 2 | /* Overhauled routines for dealing with different mmap regions of flash */ |
3 | /* $Id: map.h,v 1.52 2005/05/25 10:29:41 gleixner Exp $ */ | 3 | /* $Id: map.h,v 1.54 2005/11/07 11:14:54 gleixner Exp $ */ |
4 | 4 | ||
5 | #ifndef __LINUX_MTD_MAP_H__ | 5 | #ifndef __LINUX_MTD_MAP_H__ |
6 | #define __LINUX_MTD_MAP_H__ | 6 | #define __LINUX_MTD_MAP_H__ |
@@ -170,14 +170,14 @@ typedef union { | |||
170 | to a chip probe routine -- either JEDEC or CFI probe or both -- via | 170 | to a chip probe routine -- either JEDEC or CFI probe or both -- via |
171 | do_map_probe(). If a chip is recognised, the probe code will invoke the | 171 | do_map_probe(). If a chip is recognised, the probe code will invoke the |
172 | appropriate chip driver (if present) and return a struct mtd_info. | 172 | appropriate chip driver (if present) and return a struct mtd_info. |
173 | At which point, you fill in the mtd->module with your own module | 173 | At which point, you fill in the mtd->module with your own module |
174 | address, and register it with the MTD core code. Or you could partition | 174 | address, and register it with the MTD core code. Or you could partition |
175 | it and register the partitions instead, or keep it for your own private | 175 | it and register the partitions instead, or keep it for your own private |
176 | use; whatever. | 176 | use; whatever. |
177 | 177 | ||
178 | The mtd->priv field will point to the struct map_info, and any further | 178 | The mtd->priv field will point to the struct map_info, and any further |
179 | private data required by the chip driver is linked from the | 179 | private data required by the chip driver is linked from the |
180 | mtd->priv->fldrv_priv field. This allows the map driver to get at | 180 | mtd->priv->fldrv_priv field. This allows the map driver to get at |
181 | the destructor function map->fldrv_destroy() when it's tired | 181 | the destructor function map->fldrv_destroy() when it's tired |
182 | of living. | 182 | of living. |
183 | */ | 183 | */ |
@@ -214,7 +214,7 @@ struct map_info { | |||
214 | If there is no cache to care about this can be set to NULL. */ | 214 | If there is no cache to care about this can be set to NULL. */ |
215 | void (*inval_cache)(struct map_info *, unsigned long, ssize_t); | 215 | void (*inval_cache)(struct map_info *, unsigned long, ssize_t); |
216 | 216 | ||
217 | /* set_vpp() must handle being reentered -- enable, enable, disable | 217 | /* set_vpp() must handle being reentered -- enable, enable, disable |
218 | must leave it enabled. */ | 218 | must leave it enabled. */ |
219 | void (*set_vpp)(struct map_info *, int); | 219 | void (*set_vpp)(struct map_info *, int); |
220 | 220 | ||
@@ -353,7 +353,7 @@ static inline map_word map_word_ff(struct map_info *map) | |||
353 | { | 353 | { |
354 | map_word r; | 354 | map_word r; |
355 | int i; | 355 | int i; |
356 | 356 | ||
357 | if (map_bankwidth(map) < MAP_FF_LIMIT) { | 357 | if (map_bankwidth(map) < MAP_FF_LIMIT) { |
358 | int bw = 8 * map_bankwidth(map); | 358 | int bw = 8 * map_bankwidth(map); |
359 | r.x[0] = (1 << bw) - 1; | 359 | r.x[0] = (1 << bw) - 1; |
diff --git a/include/linux/mtd/mtd.h b/include/linux/mtd/mtd.h index c50c3f3927d9..e95d0463a3e5 100644 --- a/include/linux/mtd/mtd.h +++ b/include/linux/mtd/mtd.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * $Id: mtd.h,v 1.59 2005/04/11 10:19:02 gleixner Exp $ | 2 | * $Id: mtd.h,v 1.61 2005/11/07 11:14:54 gleixner Exp $ |
3 | * | 3 | * |
4 | * Copyright (C) 1999-2003 David Woodhouse <dwmw2@infradead.org> et al. | 4 | * Copyright (C) 1999-2003 David Woodhouse <dwmw2@infradead.org> et al. |
5 | * | 5 | * |
@@ -72,7 +72,17 @@ struct mtd_info { | |||
72 | u_int32_t oobsize; // Amount of OOB data per block (e.g. 16) | 72 | u_int32_t oobsize; // Amount of OOB data per block (e.g. 16) |
73 | u_int32_t ecctype; | 73 | u_int32_t ecctype; |
74 | u_int32_t eccsize; | 74 | u_int32_t eccsize; |
75 | 75 | ||
76 | /* | ||
77 | * Reuse some of the above unused fields in the case of NOR flash | ||
78 | * with configurable programming regions to avoid modifying the | ||
79 | * user visible structure layout/size. Only valid when the | ||
80 | * MTD_PROGRAM_REGIONS flag is set. | ||
81 | * (Maybe we should have an union for those?) | ||
82 | */ | ||
83 | #define MTD_PROGREGION_SIZE(mtd) (mtd)->oobblock | ||
84 | #define MTD_PROGREGION_CTRLMODE_VALID(mtd) (mtd)->oobsize | ||
85 | #define MTD_PROGREGION_CTRLMODE_INVALID(mtd) (mtd)->ecctype | ||
76 | 86 | ||
77 | // Kernel-only stuff starts here. | 87 | // Kernel-only stuff starts here. |
78 | char *name; | 88 | char *name; |
@@ -80,13 +90,13 @@ struct mtd_info { | |||
80 | 90 | ||
81 | // oobinfo is a nand_oobinfo structure, which can be set by iotcl (MEMSETOOBINFO) | 91 | // oobinfo is a nand_oobinfo structure, which can be set by iotcl (MEMSETOOBINFO) |
82 | struct nand_oobinfo oobinfo; | 92 | struct nand_oobinfo oobinfo; |
83 | u_int32_t oobavail; // Number of bytes in OOB area available for fs | 93 | u_int32_t oobavail; // Number of bytes in OOB area available for fs |
84 | 94 | ||
85 | /* Data for variable erase regions. If numeraseregions is zero, | 95 | /* Data for variable erase regions. If numeraseregions is zero, |
86 | * it means that the whole device has erasesize as given above. | 96 | * it means that the whole device has erasesize as given above. |
87 | */ | 97 | */ |
88 | int numeraseregions; | 98 | int numeraseregions; |
89 | struct mtd_erase_region_info *eraseregions; | 99 | struct mtd_erase_region_info *eraseregions; |
90 | 100 | ||
91 | /* This really shouldn't be here. It can go away in 2.5 */ | 101 | /* This really shouldn't be here. It can go away in 2.5 */ |
92 | u_int32_t bank_size; | 102 | u_int32_t bank_size; |
@@ -109,10 +119,10 @@ struct mtd_info { | |||
109 | int (*read_oob) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf); | 119 | int (*read_oob) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf); |
110 | int (*write_oob) (struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf); | 120 | int (*write_oob) (struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf); |
111 | 121 | ||
112 | /* | 122 | /* |
113 | * Methods to access the protection register area, present in some | 123 | * Methods to access the protection register area, present in some |
114 | * flash devices. The user data is one time programmable but the | 124 | * flash devices. The user data is one time programmable but the |
115 | * factory data is read only. | 125 | * factory data is read only. |
116 | */ | 126 | */ |
117 | int (*get_fact_prot_info) (struct mtd_info *mtd, struct otp_info *buf, size_t len); | 127 | int (*get_fact_prot_info) (struct mtd_info *mtd, struct otp_info *buf, size_t len); |
118 | int (*read_fact_prot_reg) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf); | 128 | int (*read_fact_prot_reg) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf); |
@@ -123,14 +133,14 @@ struct mtd_info { | |||
123 | 133 | ||
124 | /* kvec-based read/write methods. We need these especially for NAND flash, | 134 | /* kvec-based read/write methods. We need these especially for NAND flash, |
125 | with its limited number of write cycles per erase. | 135 | with its limited number of write cycles per erase. |
126 | NB: The 'count' parameter is the number of _vectors_, each of | 136 | NB: The 'count' parameter is the number of _vectors_, each of |
127 | which contains an (ofs, len) tuple. | 137 | which contains an (ofs, len) tuple. |
128 | */ | 138 | */ |
129 | int (*readv) (struct mtd_info *mtd, struct kvec *vecs, unsigned long count, loff_t from, size_t *retlen); | 139 | int (*readv) (struct mtd_info *mtd, struct kvec *vecs, unsigned long count, loff_t from, size_t *retlen); |
130 | int (*readv_ecc) (struct mtd_info *mtd, struct kvec *vecs, unsigned long count, loff_t from, | 140 | int (*readv_ecc) (struct mtd_info *mtd, struct kvec *vecs, unsigned long count, loff_t from, |
131 | size_t *retlen, u_char *eccbuf, struct nand_oobinfo *oobsel); | 141 | size_t *retlen, u_char *eccbuf, struct nand_oobinfo *oobsel); |
132 | int (*writev) (struct mtd_info *mtd, const struct kvec *vecs, unsigned long count, loff_t to, size_t *retlen); | 142 | int (*writev) (struct mtd_info *mtd, const struct kvec *vecs, unsigned long count, loff_t to, size_t *retlen); |
133 | int (*writev_ecc) (struct mtd_info *mtd, const struct kvec *vecs, unsigned long count, loff_t to, | 143 | int (*writev_ecc) (struct mtd_info *mtd, const struct kvec *vecs, unsigned long count, loff_t to, |
134 | size_t *retlen, u_char *eccbuf, struct nand_oobinfo *oobsel); | 144 | size_t *retlen, u_char *eccbuf, struct nand_oobinfo *oobsel); |
135 | 145 | ||
136 | /* Sync */ | 146 | /* Sync */ |
@@ -194,7 +204,7 @@ int default_mtd_readv(struct mtd_info *mtd, struct kvec *vecs, | |||
194 | #define MTD_WRITEECC(mtd, args...) (*(mtd->write_ecc))(mtd, args) | 204 | #define MTD_WRITEECC(mtd, args...) (*(mtd->write_ecc))(mtd, args) |
195 | #define MTD_READOOB(mtd, args...) (*(mtd->read_oob))(mtd, args) | 205 | #define MTD_READOOB(mtd, args...) (*(mtd->read_oob))(mtd, args) |
196 | #define MTD_WRITEOOB(mtd, args...) (*(mtd->write_oob))(mtd, args) | 206 | #define MTD_WRITEOOB(mtd, args...) (*(mtd->write_oob))(mtd, args) |
197 | #define MTD_SYNC(mtd) do { if (mtd->sync) (*(mtd->sync))(mtd); } while (0) | 207 | #define MTD_SYNC(mtd) do { if (mtd->sync) (*(mtd->sync))(mtd); } while (0) |
198 | 208 | ||
199 | 209 | ||
200 | #ifdef CONFIG_MTD_PARTITIONS | 210 | #ifdef CONFIG_MTD_PARTITIONS |
diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h index 9b5b76217584..da5e67b3fc70 100644 --- a/include/linux/mtd/nand.h +++ b/include/linux/mtd/nand.h | |||
@@ -5,7 +5,7 @@ | |||
5 | * Steven J. Hill <sjhill@realitydiluted.com> | 5 | * Steven J. Hill <sjhill@realitydiluted.com> |
6 | * Thomas Gleixner <tglx@linutronix.de> | 6 | * Thomas Gleixner <tglx@linutronix.de> |
7 | * | 7 | * |
8 | * $Id: nand.h,v 1.73 2005/05/31 19:39:17 gleixner Exp $ | 8 | * $Id: nand.h,v 1.74 2005/09/15 13:58:50 vwool Exp $ |
9 | * | 9 | * |
10 | * This program is free software; you can redistribute it and/or modify | 10 | * This program is free software; you can redistribute it and/or modify |
11 | * it under the terms of the GNU General Public License version 2 as | 11 | * it under the terms of the GNU General Public License version 2 as |
@@ -24,7 +24,7 @@ | |||
24 | * bat later if I did something naughty. | 24 | * bat later if I did something naughty. |
25 | * 10-11-2000 SJH Added private NAND flash structure for driver | 25 | * 10-11-2000 SJH Added private NAND flash structure for driver |
26 | * 10-24-2000 SJH Added prototype for 'nand_scan' function | 26 | * 10-24-2000 SJH Added prototype for 'nand_scan' function |
27 | * 10-29-2001 TG changed nand_chip structure to support | 27 | * 10-29-2001 TG changed nand_chip structure to support |
28 | * hardwarespecific function for accessing control lines | 28 | * hardwarespecific function for accessing control lines |
29 | * 02-21-2002 TG added support for different read/write adress and | 29 | * 02-21-2002 TG added support for different read/write adress and |
30 | * ready/busy line access function | 30 | * ready/busy line access function |
@@ -36,21 +36,21 @@ | |||
36 | * CONFIG_MTD_NAND_ECC_JFFS2 is not set | 36 | * CONFIG_MTD_NAND_ECC_JFFS2 is not set |
37 | * 08-10-2002 TG extensions to nand_chip structure to support HW-ECC | 37 | * 08-10-2002 TG extensions to nand_chip structure to support HW-ECC |
38 | * | 38 | * |
39 | * 08-29-2002 tglx nand_chip structure: data_poi for selecting | 39 | * 08-29-2002 tglx nand_chip structure: data_poi for selecting |
40 | * internal / fs-driver buffer | 40 | * internal / fs-driver buffer |
41 | * support for 6byte/512byte hardware ECC | 41 | * support for 6byte/512byte hardware ECC |
42 | * read_ecc, write_ecc extended for different oob-layout | 42 | * read_ecc, write_ecc extended for different oob-layout |
43 | * oob layout selections: NAND_NONE_OOB, NAND_JFFS2_OOB, | 43 | * oob layout selections: NAND_NONE_OOB, NAND_JFFS2_OOB, |
44 | * NAND_YAFFS_OOB | 44 | * NAND_YAFFS_OOB |
45 | * 11-25-2002 tglx Added Manufacturer code FUJITSU, NATIONAL | 45 | * 11-25-2002 tglx Added Manufacturer code FUJITSU, NATIONAL |
46 | * Split manufacturer and device ID structures | 46 | * Split manufacturer and device ID structures |
47 | * | 47 | * |
48 | * 02-08-2004 tglx added option field to nand structure for chip anomalities | 48 | * 02-08-2004 tglx added option field to nand structure for chip anomalities |
49 | * 05-25-2004 tglx added bad block table support, ST-MICRO manufacturer id | 49 | * 05-25-2004 tglx added bad block table support, ST-MICRO manufacturer id |
50 | * update of nand_chip structure description | 50 | * update of nand_chip structure description |
51 | * 01-17-2005 dmarlin added extended commands for AG-AND device and added option | 51 | * 01-17-2005 dmarlin added extended commands for AG-AND device and added option |
52 | * for BBT_AUTO_REFRESH. | 52 | * for BBT_AUTO_REFRESH. |
53 | * 01-20-2005 dmarlin added optional pointer to hardware specific callback for | 53 | * 01-20-2005 dmarlin added optional pointer to hardware specific callback for |
54 | * extra error status checks. | 54 | * extra error status checks. |
55 | */ | 55 | */ |
56 | #ifndef __LINUX_MTD_NAND_H | 56 | #ifndef __LINUX_MTD_NAND_H |
@@ -120,8 +120,8 @@ extern int nand_read_raw (struct mtd_info *mtd, uint8_t *buf, loff_t from, size_ | |||
120 | #define NAND_CMD_CACHEDPROG 0x15 | 120 | #define NAND_CMD_CACHEDPROG 0x15 |
121 | 121 | ||
122 | /* Extended commands for AG-AND device */ | 122 | /* Extended commands for AG-AND device */ |
123 | /* | 123 | /* |
124 | * Note: the command for NAND_CMD_DEPLETE1 is really 0x00 but | 124 | * Note: the command for NAND_CMD_DEPLETE1 is really 0x00 but |
125 | * there is no way to distinguish that from NAND_CMD_READ0 | 125 | * there is no way to distinguish that from NAND_CMD_READ0 |
126 | * until the remaining sequence of commands has been completed | 126 | * until the remaining sequence of commands has been completed |
127 | * so add a high order bit and mask it off in the command. | 127 | * so add a high order bit and mask it off in the command. |
@@ -145,7 +145,7 @@ extern int nand_read_raw (struct mtd_info *mtd, uint8_t *buf, loff_t from, size_ | |||
145 | #define NAND_STATUS_READY 0x40 | 145 | #define NAND_STATUS_READY 0x40 |
146 | #define NAND_STATUS_WP 0x80 | 146 | #define NAND_STATUS_WP 0x80 |
147 | 147 | ||
148 | /* | 148 | /* |
149 | * Constants for ECC_MODES | 149 | * Constants for ECC_MODES |
150 | */ | 150 | */ |
151 | 151 | ||
@@ -191,12 +191,12 @@ extern int nand_read_raw (struct mtd_info *mtd, uint8_t *buf, loff_t from, size_ | |||
191 | #define NAND_CACHEPRG 0x00000008 | 191 | #define NAND_CACHEPRG 0x00000008 |
192 | /* Chip has copy back function */ | 192 | /* Chip has copy back function */ |
193 | #define NAND_COPYBACK 0x00000010 | 193 | #define NAND_COPYBACK 0x00000010 |
194 | /* AND Chip which has 4 banks and a confusing page / block | 194 | /* AND Chip which has 4 banks and a confusing page / block |
195 | * assignment. See Renesas datasheet for further information */ | 195 | * assignment. See Renesas datasheet for further information */ |
196 | #define NAND_IS_AND 0x00000020 | 196 | #define NAND_IS_AND 0x00000020 |
197 | /* Chip has a array of 4 pages which can be read without | 197 | /* Chip has a array of 4 pages which can be read without |
198 | * additional ready /busy waits */ | 198 | * additional ready /busy waits */ |
199 | #define NAND_4PAGE_ARRAY 0x00000040 | 199 | #define NAND_4PAGE_ARRAY 0x00000040 |
200 | /* Chip requires that BBT is periodically rewritten to prevent | 200 | /* Chip requires that BBT is periodically rewritten to prevent |
201 | * bits from adjacent blocks from 'leaking' in altering data. | 201 | * bits from adjacent blocks from 'leaking' in altering data. |
202 | * This happens with the Renesas AG-AND chips, possibly others. */ | 202 | * This happens with the Renesas AG-AND chips, possibly others. */ |
@@ -219,8 +219,8 @@ extern int nand_read_raw (struct mtd_info *mtd, uint8_t *buf, loff_t from, size_ | |||
219 | /* Use a flash based bad block table. This option is passed to the | 219 | /* Use a flash based bad block table. This option is passed to the |
220 | * default bad block table function. */ | 220 | * default bad block table function. */ |
221 | #define NAND_USE_FLASH_BBT 0x00010000 | 221 | #define NAND_USE_FLASH_BBT 0x00010000 |
222 | /* The hw ecc generator provides a syndrome instead a ecc value on read | 222 | /* The hw ecc generator provides a syndrome instead a ecc value on read |
223 | * This can only work if we have the ecc bytes directly behind the | 223 | * This can only work if we have the ecc bytes directly behind the |
224 | * data bytes. Applies for DOC and AG-AND Renesas HW Reed Solomon generators */ | 224 | * data bytes. Applies for DOC and AG-AND Renesas HW Reed Solomon generators */ |
225 | #define NAND_HWECC_SYNDROME 0x00020000 | 225 | #define NAND_HWECC_SYNDROME 0x00020000 |
226 | /* This option skips the bbt scan during initialization. */ | 226 | /* This option skips the bbt scan during initialization. */ |
@@ -244,6 +244,7 @@ typedef enum { | |||
244 | FL_ERASING, | 244 | FL_ERASING, |
245 | FL_SYNCING, | 245 | FL_SYNCING, |
246 | FL_CACHEDPRG, | 246 | FL_CACHEDPRG, |
247 | FL_PM_SUSPENDED, | ||
247 | } nand_state_t; | 248 | } nand_state_t; |
248 | 249 | ||
249 | /* Keep gcc happy */ | 250 | /* Keep gcc happy */ |
@@ -251,7 +252,7 @@ struct nand_chip; | |||
251 | 252 | ||
252 | /** | 253 | /** |
253 | * struct nand_hw_control - Control structure for hardware controller (e.g ECC generator) shared among independend devices | 254 | * struct nand_hw_control - Control structure for hardware controller (e.g ECC generator) shared among independend devices |
254 | * @lock: protection lock | 255 | * @lock: protection lock |
255 | * @active: the mtd device which holds the controller currently | 256 | * @active: the mtd device which holds the controller currently |
256 | * @wq: wait queue to sleep on if a NAND operation is in progress | 257 | * @wq: wait queue to sleep on if a NAND operation is in progress |
257 | * used instead of the per chip wait queue when a hw controller is available | 258 | * used instead of the per chip wait queue when a hw controller is available |
@@ -264,8 +265,8 @@ struct nand_hw_control { | |||
264 | 265 | ||
265 | /** | 266 | /** |
266 | * struct nand_chip - NAND Private Flash Chip Data | 267 | * struct nand_chip - NAND Private Flash Chip Data |
267 | * @IO_ADDR_R: [BOARDSPECIFIC] address to read the 8 I/O lines of the flash device | 268 | * @IO_ADDR_R: [BOARDSPECIFIC] address to read the 8 I/O lines of the flash device |
268 | * @IO_ADDR_W: [BOARDSPECIFIC] address to write the 8 I/O lines of the flash device | 269 | * @IO_ADDR_W: [BOARDSPECIFIC] address to write the 8 I/O lines of the flash device |
269 | * @read_byte: [REPLACEABLE] read one byte from the chip | 270 | * @read_byte: [REPLACEABLE] read one byte from the chip |
270 | * @write_byte: [REPLACEABLE] write one byte to the chip | 271 | * @write_byte: [REPLACEABLE] write one byte to the chip |
271 | * @read_word: [REPLACEABLE] read one word from the chip | 272 | * @read_word: [REPLACEABLE] read one word from the chip |
@@ -288,7 +289,7 @@ struct nand_hw_control { | |||
288 | * be provided if a hardware ECC is available | 289 | * be provided if a hardware ECC is available |
289 | * @erase_cmd: [INTERN] erase command write function, selectable due to AND support | 290 | * @erase_cmd: [INTERN] erase command write function, selectable due to AND support |
290 | * @scan_bbt: [REPLACEABLE] function to scan bad block table | 291 | * @scan_bbt: [REPLACEABLE] function to scan bad block table |
291 | * @eccmode: [BOARDSPECIFIC] mode of ecc, see defines | 292 | * @eccmode: [BOARDSPECIFIC] mode of ecc, see defines |
292 | * @eccsize: [INTERN] databytes used per ecc-calculation | 293 | * @eccsize: [INTERN] databytes used per ecc-calculation |
293 | * @eccbytes: [INTERN] number of ecc bytes per ecc-calculation step | 294 | * @eccbytes: [INTERN] number of ecc bytes per ecc-calculation step |
294 | * @eccsteps: [INTERN] number of ecc calculation steps per page | 295 | * @eccsteps: [INTERN] number of ecc calculation steps per page |
@@ -300,7 +301,7 @@ struct nand_hw_control { | |||
300 | * @phys_erase_shift: [INTERN] number of address bits in a physical eraseblock | 301 | * @phys_erase_shift: [INTERN] number of address bits in a physical eraseblock |
301 | * @bbt_erase_shift: [INTERN] number of address bits in a bbt entry | 302 | * @bbt_erase_shift: [INTERN] number of address bits in a bbt entry |
302 | * @chip_shift: [INTERN] number of address bits in one chip | 303 | * @chip_shift: [INTERN] number of address bits in one chip |
303 | * @data_buf: [INTERN] internal buffer for one page + oob | 304 | * @data_buf: [INTERN] internal buffer for one page + oob |
304 | * @oob_buf: [INTERN] oob buffer for one eraseblock | 305 | * @oob_buf: [INTERN] oob buffer for one eraseblock |
305 | * @oobdirty: [INTERN] indicates that oob_buf must be reinitialized | 306 | * @oobdirty: [INTERN] indicates that oob_buf must be reinitialized |
306 | * @data_poi: [INTERN] pointer to a data buffer | 307 | * @data_poi: [INTERN] pointer to a data buffer |
@@ -315,22 +316,22 @@ struct nand_hw_control { | |||
315 | * @bbt: [INTERN] bad block table pointer | 316 | * @bbt: [INTERN] bad block table pointer |
316 | * @bbt_td: [REPLACEABLE] bad block table descriptor for flash lookup | 317 | * @bbt_td: [REPLACEABLE] bad block table descriptor for flash lookup |
317 | * @bbt_md: [REPLACEABLE] bad block table mirror descriptor | 318 | * @bbt_md: [REPLACEABLE] bad block table mirror descriptor |
318 | * @badblock_pattern: [REPLACEABLE] bad block scan pattern used for initial bad block scan | 319 | * @badblock_pattern: [REPLACEABLE] bad block scan pattern used for initial bad block scan |
319 | * @controller: [OPTIONAL] a pointer to a hardware controller structure which is shared among multiple independend devices | 320 | * @controller: [OPTIONAL] a pointer to a hardware controller structure which is shared among multiple independend devices |
320 | * @priv: [OPTIONAL] pointer to private chip date | 321 | * @priv: [OPTIONAL] pointer to private chip date |
321 | * @errstat: [OPTIONAL] hardware specific function to perform additional error status checks | 322 | * @errstat: [OPTIONAL] hardware specific function to perform additional error status checks |
322 | * (determine if errors are correctable) | 323 | * (determine if errors are correctable) |
323 | */ | 324 | */ |
324 | 325 | ||
325 | struct nand_chip { | 326 | struct nand_chip { |
326 | void __iomem *IO_ADDR_R; | 327 | void __iomem *IO_ADDR_R; |
327 | void __iomem *IO_ADDR_W; | 328 | void __iomem *IO_ADDR_W; |
328 | 329 | ||
329 | u_char (*read_byte)(struct mtd_info *mtd); | 330 | u_char (*read_byte)(struct mtd_info *mtd); |
330 | void (*write_byte)(struct mtd_info *mtd, u_char byte); | 331 | void (*write_byte)(struct mtd_info *mtd, u_char byte); |
331 | u16 (*read_word)(struct mtd_info *mtd); | 332 | u16 (*read_word)(struct mtd_info *mtd); |
332 | void (*write_word)(struct mtd_info *mtd, u16 word); | 333 | void (*write_word)(struct mtd_info *mtd, u16 word); |
333 | 334 | ||
334 | void (*write_buf)(struct mtd_info *mtd, const u_char *buf, int len); | 335 | void (*write_buf)(struct mtd_info *mtd, const u_char *buf, int len); |
335 | void (*read_buf)(struct mtd_info *mtd, u_char *buf, int len); | 336 | void (*read_buf)(struct mtd_info *mtd, u_char *buf, int len); |
336 | int (*verify_buf)(struct mtd_info *mtd, const u_char *buf, int len); | 337 | int (*verify_buf)(struct mtd_info *mtd, const u_char *buf, int len); |
@@ -395,7 +396,7 @@ struct nand_chip { | |||
395 | * @name: Identify the device type | 396 | * @name: Identify the device type |
396 | * @id: device ID code | 397 | * @id: device ID code |
397 | * @pagesize: Pagesize in bytes. Either 256 or 512 or 0 | 398 | * @pagesize: Pagesize in bytes. Either 256 or 512 or 0 |
398 | * If the pagesize is 0, then the real pagesize | 399 | * If the pagesize is 0, then the real pagesize |
399 | * and the eraseize are determined from the | 400 | * and the eraseize are determined from the |
400 | * extended id bytes in the chip | 401 | * extended id bytes in the chip |
401 | * @erasesize: Size of an erase block in the flash device. | 402 | * @erasesize: Size of an erase block in the flash device. |
@@ -424,7 +425,7 @@ struct nand_manufacturers { | |||
424 | extern struct nand_flash_dev nand_flash_ids[]; | 425 | extern struct nand_flash_dev nand_flash_ids[]; |
425 | extern struct nand_manufacturers nand_manuf_ids[]; | 426 | extern struct nand_manufacturers nand_manuf_ids[]; |
426 | 427 | ||
427 | /** | 428 | /** |
428 | * struct nand_bbt_descr - bad block table descriptor | 429 | * struct nand_bbt_descr - bad block table descriptor |
429 | * @options: options for this descriptor | 430 | * @options: options for this descriptor |
430 | * @pages: the page(s) where we find the bbt, used with option BBT_ABSPAGE | 431 | * @pages: the page(s) where we find the bbt, used with option BBT_ABSPAGE |
@@ -435,14 +436,14 @@ extern struct nand_manufacturers nand_manuf_ids[]; | |||
435 | * @version: version read from the bbt page during scan | 436 | * @version: version read from the bbt page during scan |
436 | * @len: length of the pattern, if 0 no pattern check is performed | 437 | * @len: length of the pattern, if 0 no pattern check is performed |
437 | * @maxblocks: maximum number of blocks to search for a bbt. This number of | 438 | * @maxblocks: maximum number of blocks to search for a bbt. This number of |
438 | * blocks is reserved at the end of the device where the tables are | 439 | * blocks is reserved at the end of the device where the tables are |
439 | * written. | 440 | * written. |
440 | * @reserved_block_code: if non-0, this pattern denotes a reserved (rather than | 441 | * @reserved_block_code: if non-0, this pattern denotes a reserved (rather than |
441 | * bad) block in the stored bbt | 442 | * bad) block in the stored bbt |
442 | * @pattern: pattern to identify bad block table or factory marked good / | 443 | * @pattern: pattern to identify bad block table or factory marked good / |
443 | * bad blocks, can be NULL, if len = 0 | 444 | * bad blocks, can be NULL, if len = 0 |
444 | * | 445 | * |
445 | * Descriptor for the bad block table marker and the descriptor for the | 446 | * Descriptor for the bad block table marker and the descriptor for the |
446 | * pattern which identifies good and bad blocks. The assumption is made | 447 | * pattern which identifies good and bad blocks. The assumption is made |
447 | * that the pattern and the version count are always located in the oob area | 448 | * that the pattern and the version count are always located in the oob area |
448 | * of the first block. | 449 | * of the first block. |
diff --git a/include/linux/mtd/onenand.h b/include/linux/mtd/onenand.h new file mode 100644 index 000000000000..f1fd4215686a --- /dev/null +++ b/include/linux/mtd/onenand.h | |||
@@ -0,0 +1,155 @@ | |||
1 | /* | ||
2 | * linux/include/linux/mtd/onenand.h | ||
3 | * | ||
4 | * Copyright (C) 2005 Samsung Electronics | ||
5 | * Kyungmin Park <kyungmin.park@samsung.com> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License version 2 as | ||
9 | * published by the Free Software Foundation. | ||
10 | */ | ||
11 | |||
12 | #ifndef __LINUX_MTD_ONENAND_H | ||
13 | #define __LINUX_MTD_ONENAND_H | ||
14 | |||
15 | #include <linux/spinlock.h> | ||
16 | #include <linux/mtd/onenand_regs.h> | ||
17 | #include <linux/mtd/bbm.h> | ||
18 | |||
19 | #define MAX_BUFFERRAM 2 | ||
20 | #define MAX_ONENAND_PAGESIZE (2048 + 64) | ||
21 | |||
22 | /* Scan and identify a OneNAND device */ | ||
23 | extern int onenand_scan(struct mtd_info *mtd, int max_chips); | ||
24 | /* Free resources held by the OneNAND device */ | ||
25 | extern void onenand_release(struct mtd_info *mtd); | ||
26 | |||
27 | /** | ||
28 | * onenand_state_t - chip states | ||
29 | * Enumeration for OneNAND flash chip state | ||
30 | */ | ||
31 | typedef enum { | ||
32 | FL_READY, | ||
33 | FL_READING, | ||
34 | FL_WRITING, | ||
35 | FL_ERASING, | ||
36 | FL_SYNCING, | ||
37 | FL_UNLOCKING, | ||
38 | FL_LOCKING, | ||
39 | FL_PM_SUSPENDED, | ||
40 | } onenand_state_t; | ||
41 | |||
42 | /** | ||
43 | * struct onenand_bufferram - OneNAND BufferRAM Data | ||
44 | * @param block block address in BufferRAM | ||
45 | * @param page page address in BufferRAM | ||
46 | * @param valid valid flag | ||
47 | */ | ||
48 | struct onenand_bufferram { | ||
49 | int block; | ||
50 | int page; | ||
51 | int valid; | ||
52 | }; | ||
53 | |||
54 | /** | ||
55 | * struct onenand_chip - OneNAND Private Flash Chip Data | ||
56 | * @param base [BOARDSPECIFIC] address to access OneNAND | ||
57 | * @param chipsize [INTERN] the size of one chip for multichip arrays | ||
58 | * @param device_id [INTERN] device ID | ||
59 | * @param verstion_id [INTERN] version ID | ||
60 | * @param options [BOARDSPECIFIC] various chip options. They can partly be set to inform onenand_scan about | ||
61 | * @param erase_shift [INTERN] number of address bits in a block | ||
62 | * @param page_shift [INTERN] number of address bits in a page | ||
63 | * @param ppb_shift [INTERN] number of address bits in a pages per block | ||
64 | * @param page_mask [INTERN] a page per block mask | ||
65 | * @param bufferam_index [INTERN] BufferRAM index | ||
66 | * @param bufferam [INTERN] BufferRAM info | ||
67 | * @param readw [REPLACEABLE] hardware specific function for read short | ||
68 | * @param writew [REPLACEABLE] hardware specific function for write short | ||
69 | * @param command [REPLACEABLE] hardware specific function for writing commands to the chip | ||
70 | * @param wait [REPLACEABLE] hardware specific function for wait on ready | ||
71 | * @param read_bufferram [REPLACEABLE] hardware specific function for BufferRAM Area | ||
72 | * @param write_bufferram [REPLACEABLE] hardware specific function for BufferRAM Area | ||
73 | * @param read_word [REPLACEABLE] hardware specific function for read register of OneNAND | ||
74 | * @param write_word [REPLACEABLE] hardware specific function for write register of OneNAND | ||
75 | * @param scan_bbt [REPLACEALBE] hardware specific function for scaning Bad block Table | ||
76 | * @param chip_lock [INTERN] spinlock used to protect access to this structure and the chip | ||
77 | * @param wq [INTERN] wait queue to sleep on if a OneNAND operation is in progress | ||
78 | * @param state [INTERN] the current state of the OneNAND device | ||
79 | * @param autooob [REPLACEABLE] the default (auto)placement scheme | ||
80 | * @param bbm [REPLACEABLE] pointer to Bad Block Management | ||
81 | * @param priv [OPTIONAL] pointer to private chip date | ||
82 | */ | ||
83 | struct onenand_chip { | ||
84 | void __iomem *base; | ||
85 | unsigned int chipsize; | ||
86 | unsigned int device_id; | ||
87 | unsigned int density_mask; | ||
88 | unsigned int options; | ||
89 | |||
90 | unsigned int erase_shift; | ||
91 | unsigned int page_shift; | ||
92 | unsigned int ppb_shift; /* Pages per block shift */ | ||
93 | unsigned int page_mask; | ||
94 | |||
95 | unsigned int bufferram_index; | ||
96 | struct onenand_bufferram bufferram[MAX_BUFFERRAM]; | ||
97 | |||
98 | int (*command)(struct mtd_info *mtd, int cmd, loff_t address, size_t len); | ||
99 | int (*wait)(struct mtd_info *mtd, int state); | ||
100 | int (*read_bufferram)(struct mtd_info *mtd, int area, | ||
101 | unsigned char *buffer, int offset, size_t count); | ||
102 | int (*write_bufferram)(struct mtd_info *mtd, int area, | ||
103 | const unsigned char *buffer, int offset, size_t count); | ||
104 | unsigned short (*read_word)(void __iomem *addr); | ||
105 | void (*write_word)(unsigned short value, void __iomem *addr); | ||
106 | void (*mmcontrol)(struct mtd_info *mtd, int sync_read); | ||
107 | int (*block_markbad)(struct mtd_info *mtd, loff_t ofs); | ||
108 | int (*scan_bbt)(struct mtd_info *mtd); | ||
109 | |||
110 | spinlock_t chip_lock; | ||
111 | wait_queue_head_t wq; | ||
112 | onenand_state_t state; | ||
113 | |||
114 | struct nand_oobinfo *autooob; | ||
115 | |||
116 | void *bbm; | ||
117 | |||
118 | void *priv; | ||
119 | }; | ||
120 | |||
121 | /* | ||
122 | * Helper macros | ||
123 | */ | ||
124 | #define ONENAND_CURRENT_BUFFERRAM(this) (this->bufferram_index) | ||
125 | #define ONENAND_NEXT_BUFFERRAM(this) (this->bufferram_index ^ 1) | ||
126 | #define ONENAND_SET_NEXT_BUFFERRAM(this) (this->bufferram_index ^= 1) | ||
127 | |||
128 | #define ONENAND_GET_SYS_CFG1(this) \ | ||
129 | (this->read_word(this->base + ONENAND_REG_SYS_CFG1)) | ||
130 | #define ONENAND_SET_SYS_CFG1(v, this) \ | ||
131 | (this->write_word(v, this->base + ONENAND_REG_SYS_CFG1)) | ||
132 | |||
133 | /* | ||
134 | * Options bits | ||
135 | */ | ||
136 | #define ONENAND_CONT_LOCK (0x0001) | ||
137 | |||
138 | |||
139 | /* | ||
140 | * OneNAND Flash Manufacturer ID Codes | ||
141 | */ | ||
142 | #define ONENAND_MFR_SAMSUNG 0xec | ||
143 | #define ONENAND_MFR_UNKNOWN 0x00 | ||
144 | |||
145 | /** | ||
146 | * struct nand_manufacturers - NAND Flash Manufacturer ID Structure | ||
147 | * @param name: Manufacturer name | ||
148 | * @param id: manufacturer ID code of device. | ||
149 | */ | ||
150 | struct onenand_manufacturers { | ||
151 | int id; | ||
152 | char *name; | ||
153 | }; | ||
154 | |||
155 | #endif /* __LINUX_MTD_ONENAND_H */ | ||
diff --git a/include/linux/mtd/onenand_regs.h b/include/linux/mtd/onenand_regs.h new file mode 100644 index 000000000000..d7832ef8ed63 --- /dev/null +++ b/include/linux/mtd/onenand_regs.h | |||
@@ -0,0 +1,180 @@ | |||
1 | /* | ||
2 | * linux/include/linux/mtd/onenand_regs.h | ||
3 | * | ||
4 | * OneNAND Register header file | ||
5 | * | ||
6 | * Copyright (C) 2005 Samsung Electronics | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | |||
13 | #ifndef __ONENAND_REG_H | ||
14 | #define __ONENAND_REG_H | ||
15 | |||
16 | /* Memory Address Map Translation (Word order) */ | ||
17 | #define ONENAND_MEMORY_MAP(x) ((x) << 1) | ||
18 | |||
19 | /* | ||
20 | * External BufferRAM area | ||
21 | */ | ||
22 | #define ONENAND_BOOTRAM ONENAND_MEMORY_MAP(0x0000) | ||
23 | #define ONENAND_DATARAM ONENAND_MEMORY_MAP(0x0200) | ||
24 | #define ONENAND_SPARERAM ONENAND_MEMORY_MAP(0x8010) | ||
25 | |||
26 | /* | ||
27 | * OneNAND Registers | ||
28 | */ | ||
29 | #define ONENAND_REG_MANUFACTURER_ID ONENAND_MEMORY_MAP(0xF000) | ||
30 | #define ONENAND_REG_DEVICE_ID ONENAND_MEMORY_MAP(0xF001) | ||
31 | #define ONENAND_REG_VERSION_ID ONENAND_MEMORY_MAP(0xF002) | ||
32 | #define ONENAND_REG_DATA_BUFFER_SIZE ONENAND_MEMORY_MAP(0xF003) | ||
33 | #define ONENAND_REG_BOOT_BUFFER_SIZE ONENAND_MEMORY_MAP(0xF004) | ||
34 | #define ONENAND_REG_NUM_BUFFERS ONENAND_MEMORY_MAP(0xF005) | ||
35 | #define ONENAND_REG_TECHNOLOGY ONENAND_MEMORY_MAP(0xF006) | ||
36 | |||
37 | #define ONENAND_REG_START_ADDRESS1 ONENAND_MEMORY_MAP(0xF100) | ||
38 | #define ONENAND_REG_START_ADDRESS2 ONENAND_MEMORY_MAP(0xF101) | ||
39 | #define ONENAND_REG_START_ADDRESS3 ONENAND_MEMORY_MAP(0xF102) | ||
40 | #define ONENAND_REG_START_ADDRESS4 ONENAND_MEMORY_MAP(0xF103) | ||
41 | #define ONENAND_REG_START_ADDRESS5 ONENAND_MEMORY_MAP(0xF104) | ||
42 | #define ONENAND_REG_START_ADDRESS6 ONENAND_MEMORY_MAP(0xF105) | ||
43 | #define ONENAND_REG_START_ADDRESS7 ONENAND_MEMORY_MAP(0xF106) | ||
44 | #define ONENAND_REG_START_ADDRESS8 ONENAND_MEMORY_MAP(0xF107) | ||
45 | |||
46 | #define ONENAND_REG_START_BUFFER ONENAND_MEMORY_MAP(0xF200) | ||
47 | #define ONENAND_REG_COMMAND ONENAND_MEMORY_MAP(0xF220) | ||
48 | #define ONENAND_REG_SYS_CFG1 ONENAND_MEMORY_MAP(0xF221) | ||
49 | #define ONENAND_REG_SYS_CFG2 ONENAND_MEMORY_MAP(0xF222) | ||
50 | #define ONENAND_REG_CTRL_STATUS ONENAND_MEMORY_MAP(0xF240) | ||
51 | #define ONENAND_REG_INTERRUPT ONENAND_MEMORY_MAP(0xF241) | ||
52 | #define ONENAND_REG_START_BLOCK_ADDRESS ONENAND_MEMORY_MAP(0xF24C) | ||
53 | #define ONENAND_REG_END_BLOCK_ADDRESS ONENAND_MEMORY_MAP(0xF24D) | ||
54 | #define ONENAND_REG_WP_STATUS ONENAND_MEMORY_MAP(0xF24E) | ||
55 | |||
56 | #define ONENAND_REG_ECC_STATUS ONENAND_MEMORY_MAP(0xFF00) | ||
57 | #define ONENAND_REG_ECC_M0 ONENAND_MEMORY_MAP(0xFF01) | ||
58 | #define ONENAND_REG_ECC_S0 ONENAND_MEMORY_MAP(0xFF02) | ||
59 | #define ONENAND_REG_ECC_M1 ONENAND_MEMORY_MAP(0xFF03) | ||
60 | #define ONENAND_REG_ECC_S1 ONENAND_MEMORY_MAP(0xFF04) | ||
61 | #define ONENAND_REG_ECC_M2 ONENAND_MEMORY_MAP(0xFF05) | ||
62 | #define ONENAND_REG_ECC_S2 ONENAND_MEMORY_MAP(0xFF06) | ||
63 | #define ONENAND_REG_ECC_M3 ONENAND_MEMORY_MAP(0xFF07) | ||
64 | #define ONENAND_REG_ECC_S3 ONENAND_MEMORY_MAP(0xFF08) | ||
65 | |||
66 | /* | ||
67 | * Device ID Register F001h (R) | ||
68 | */ | ||
69 | #define ONENAND_DEVICE_DENSITY_SHIFT (4) | ||
70 | #define ONENAND_DEVICE_IS_DDP (1 << 3) | ||
71 | #define ONENAND_DEVICE_IS_DEMUX (1 << 2) | ||
72 | #define ONENAND_DEVICE_VCC_MASK (0x3) | ||
73 | |||
74 | #define ONENAND_DEVICE_DENSITY_512Mb (0x002) | ||
75 | |||
76 | /* | ||
77 | * Version ID Register F002h (R) | ||
78 | */ | ||
79 | #define ONENAND_VERSION_PROCESS_SHIFT (8) | ||
80 | |||
81 | /* | ||
82 | * Start Address 1 F100h (R/W) | ||
83 | */ | ||
84 | #define ONENAND_DDP_SHIFT (15) | ||
85 | |||
86 | /* | ||
87 | * Start Address 8 F107h (R/W) | ||
88 | */ | ||
89 | #define ONENAND_FPA_MASK (0x3f) | ||
90 | #define ONENAND_FPA_SHIFT (2) | ||
91 | #define ONENAND_FSA_MASK (0x03) | ||
92 | |||
93 | /* | ||
94 | * Start Buffer Register F200h (R/W) | ||
95 | */ | ||
96 | #define ONENAND_BSA_MASK (0x03) | ||
97 | #define ONENAND_BSA_SHIFT (8) | ||
98 | #define ONENAND_BSA_BOOTRAM (0 << 2) | ||
99 | #define ONENAND_BSA_DATARAM0 (2 << 2) | ||
100 | #define ONENAND_BSA_DATARAM1 (3 << 2) | ||
101 | #define ONENAND_BSC_MASK (0x03) | ||
102 | |||
103 | /* | ||
104 | * Command Register F220h (R/W) | ||
105 | */ | ||
106 | #define ONENAND_CMD_READ (0x00) | ||
107 | #define ONENAND_CMD_READOOB (0x13) | ||
108 | #define ONENAND_CMD_PROG (0x80) | ||
109 | #define ONENAND_CMD_PROGOOB (0x1A) | ||
110 | #define ONENAND_CMD_UNLOCK (0x23) | ||
111 | #define ONENAND_CMD_LOCK (0x2A) | ||
112 | #define ONENAND_CMD_LOCK_TIGHT (0x2C) | ||
113 | #define ONENAND_CMD_ERASE (0x94) | ||
114 | #define ONENAND_CMD_RESET (0xF0) | ||
115 | #define ONENAND_CMD_READID (0x90) | ||
116 | |||
117 | /* NOTE: Those are not *REAL* commands */ | ||
118 | #define ONENAND_CMD_BUFFERRAM (0x1978) | ||
119 | |||
120 | /* | ||
121 | * System Configuration 1 Register F221h (R, R/W) | ||
122 | */ | ||
123 | #define ONENAND_SYS_CFG1_SYNC_READ (1 << 15) | ||
124 | #define ONENAND_SYS_CFG1_BRL_7 (7 << 12) | ||
125 | #define ONENAND_SYS_CFG1_BRL_6 (6 << 12) | ||
126 | #define ONENAND_SYS_CFG1_BRL_5 (5 << 12) | ||
127 | #define ONENAND_SYS_CFG1_BRL_4 (4 << 12) | ||
128 | #define ONENAND_SYS_CFG1_BRL_3 (3 << 12) | ||
129 | #define ONENAND_SYS_CFG1_BRL_10 (2 << 12) | ||
130 | #define ONENAND_SYS_CFG1_BRL_9 (1 << 12) | ||
131 | #define ONENAND_SYS_CFG1_BRL_8 (0 << 12) | ||
132 | #define ONENAND_SYS_CFG1_BRL_SHIFT (12) | ||
133 | #define ONENAND_SYS_CFG1_BL_32 (4 << 9) | ||
134 | #define ONENAND_SYS_CFG1_BL_16 (3 << 9) | ||
135 | #define ONENAND_SYS_CFG1_BL_8 (2 << 9) | ||
136 | #define ONENAND_SYS_CFG1_BL_4 (1 << 9) | ||
137 | #define ONENAND_SYS_CFG1_BL_CONT (0 << 9) | ||
138 | #define ONENAND_SYS_CFG1_BL_SHIFT (9) | ||
139 | #define ONENAND_SYS_CFG1_NO_ECC (1 << 8) | ||
140 | #define ONENAND_SYS_CFG1_RDY (1 << 7) | ||
141 | #define ONENAND_SYS_CFG1_INT (1 << 6) | ||
142 | #define ONENAND_SYS_CFG1_IOBE (1 << 5) | ||
143 | #define ONENAND_SYS_CFG1_RDY_CONF (1 << 4) | ||
144 | |||
145 | /* | ||
146 | * Controller Status Register F240h (R) | ||
147 | */ | ||
148 | #define ONENAND_CTRL_ONGO (1 << 15) | ||
149 | #define ONENAND_CTRL_LOCK (1 << 14) | ||
150 | #define ONENAND_CTRL_LOAD (1 << 13) | ||
151 | #define ONENAND_CTRL_PROGRAM (1 << 12) | ||
152 | #define ONENAND_CTRL_ERASE (1 << 11) | ||
153 | #define ONENAND_CTRL_ERROR (1 << 10) | ||
154 | #define ONENAND_CTRL_RSTB (1 << 7) | ||
155 | |||
156 | /* | ||
157 | * Interrupt Status Register F241h (R) | ||
158 | */ | ||
159 | #define ONENAND_INT_MASTER (1 << 15) | ||
160 | #define ONENAND_INT_READ (1 << 7) | ||
161 | #define ONENAND_INT_WRITE (1 << 6) | ||
162 | #define ONENAND_INT_ERASE (1 << 5) | ||
163 | #define ONENAND_INT_RESET (1 << 4) | ||
164 | #define ONENAND_INT_CLEAR (0 << 0) | ||
165 | |||
166 | /* | ||
167 | * NAND Flash Write Protection Status Register F24Eh (R) | ||
168 | */ | ||
169 | #define ONENAND_WP_US (1 << 2) | ||
170 | #define ONENAND_WP_LS (1 << 1) | ||
171 | #define ONENAND_WP_LTS (1 << 0) | ||
172 | |||
173 | /* | ||
174 | * ECC Status Reigser FF00h (R) | ||
175 | */ | ||
176 | #define ONENAND_ECC_1BIT (1 << 0) | ||
177 | #define ONENAND_ECC_2BIT (1 << 1) | ||
178 | #define ONENAND_ECC_2BIT_ALL (0xAAAA) | ||
179 | |||
180 | #endif /* __ONENAND_REG_H */ | ||
diff --git a/include/linux/mtd/partitions.h b/include/linux/mtd/partitions.h index 50b2edfc8f11..b03f512d51b9 100644 --- a/include/linux/mtd/partitions.h +++ b/include/linux/mtd/partitions.h | |||
@@ -5,7 +5,7 @@ | |||
5 | * | 5 | * |
6 | * This code is GPL | 6 | * This code is GPL |
7 | * | 7 | * |
8 | * $Id: partitions.h,v 1.16 2004/11/16 18:34:40 dwmw2 Exp $ | 8 | * $Id: partitions.h,v 1.17 2005/11/07 11:14:55 gleixner Exp $ |
9 | */ | 9 | */ |
10 | 10 | ||
11 | #ifndef MTD_PARTITIONS_H | 11 | #ifndef MTD_PARTITIONS_H |
@@ -16,25 +16,25 @@ | |||
16 | 16 | ||
17 | /* | 17 | /* |
18 | * Partition definition structure: | 18 | * Partition definition structure: |
19 | * | 19 | * |
20 | * An array of struct partition is passed along with a MTD object to | 20 | * An array of struct partition is passed along with a MTD object to |
21 | * add_mtd_partitions() to create them. | 21 | * add_mtd_partitions() to create them. |
22 | * | 22 | * |
23 | * For each partition, these fields are available: | 23 | * For each partition, these fields are available: |
24 | * name: string that will be used to label the partition's MTD device. | 24 | * name: string that will be used to label the partition's MTD device. |
25 | * size: the partition size; if defined as MTDPART_SIZ_FULL, the partition | 25 | * size: the partition size; if defined as MTDPART_SIZ_FULL, the partition |
26 | * will extend to the end of the master MTD device. | 26 | * will extend to the end of the master MTD device. |
27 | * offset: absolute starting position within the master MTD device; if | 27 | * offset: absolute starting position within the master MTD device; if |
28 | * defined as MTDPART_OFS_APPEND, the partition will start where the | 28 | * defined as MTDPART_OFS_APPEND, the partition will start where the |
29 | * previous one ended; if MTDPART_OFS_NXTBLK, at the next erase block. | 29 | * previous one ended; if MTDPART_OFS_NXTBLK, at the next erase block. |
30 | * mask_flags: contains flags that have to be masked (removed) from the | 30 | * mask_flags: contains flags that have to be masked (removed) from the |
31 | * master MTD flag set for the corresponding MTD partition. | 31 | * master MTD flag set for the corresponding MTD partition. |
32 | * For example, to force a read-only partition, simply adding | 32 | * For example, to force a read-only partition, simply adding |
33 | * MTD_WRITEABLE to the mask_flags will do the trick. | 33 | * MTD_WRITEABLE to the mask_flags will do the trick. |
34 | * | 34 | * |
35 | * Note: writeable partitions require their size and offset be | 35 | * Note: writeable partitions require their size and offset be |
36 | * erasesize aligned (e.g. use MTDPART_OFS_NEXTBLK). | 36 | * erasesize aligned (e.g. use MTDPART_OFS_NEXTBLK). |
37 | */ | 37 | */ |
38 | 38 | ||
39 | struct mtd_partition { | 39 | struct mtd_partition { |
40 | char *name; /* identifier string */ | 40 | char *name; /* identifier string */ |
@@ -66,7 +66,7 @@ struct mtd_part_parser { | |||
66 | 66 | ||
67 | extern int register_mtd_parser(struct mtd_part_parser *parser); | 67 | extern int register_mtd_parser(struct mtd_part_parser *parser); |
68 | extern int deregister_mtd_parser(struct mtd_part_parser *parser); | 68 | extern int deregister_mtd_parser(struct mtd_part_parser *parser); |
69 | extern int parse_mtd_partitions(struct mtd_info *master, const char **types, | 69 | extern int parse_mtd_partitions(struct mtd_info *master, const char **types, |
70 | struct mtd_partition **pparts, unsigned long origin); | 70 | struct mtd_partition **pparts, unsigned long origin); |
71 | 71 | ||
72 | #define put_partition_parser(p) do { module_put((p)->owner); } while(0) | 72 | #define put_partition_parser(p) do { module_put((p)->owner); } while(0) |
diff --git a/include/linux/mtd/physmap.h b/include/linux/mtd/physmap.h index 05aa4970677f..c7b8bcdef013 100644 --- a/include/linux/mtd/physmap.h +++ b/include/linux/mtd/physmap.h | |||
@@ -1,8 +1,8 @@ | |||
1 | /* | 1 | /* |
2 | * For boards with physically mapped flash and using | 2 | * For boards with physically mapped flash and using |
3 | * drivers/mtd/maps/physmap.c mapping driver. | 3 | * drivers/mtd/maps/physmap.c mapping driver. |
4 | * | 4 | * |
5 | * $Id: physmap.h,v 1.3 2004/07/21 00:16:15 jwboyer Exp $ | 5 | * $Id: physmap.h,v 1.4 2005/11/07 11:14:55 gleixner Exp $ |
6 | * | 6 | * |
7 | * Copyright (C) 2003 MontaVista Software Inc. | 7 | * Copyright (C) 2003 MontaVista Software Inc. |
8 | * Author: Jun Sun, jsun@mvista.com or jsun@junsun.net | 8 | * Author: Jun Sun, jsun@mvista.com or jsun@junsun.net |
@@ -18,7 +18,7 @@ | |||
18 | 18 | ||
19 | #include <linux/config.h> | 19 | #include <linux/config.h> |
20 | 20 | ||
21 | #if defined(CONFIG_MTD_PHYSMAP) | 21 | #if defined(CONFIG_MTD_PHYSMAP) |
22 | 22 | ||
23 | #include <linux/mtd/mtd.h> | 23 | #include <linux/mtd/mtd.h> |
24 | #include <linux/mtd/map.h> | 24 | #include <linux/mtd/map.h> |
@@ -44,12 +44,12 @@ static inline void physmap_configure(unsigned long addr, unsigned long size, int | |||
44 | #if defined(CONFIG_MTD_PARTITIONS) | 44 | #if defined(CONFIG_MTD_PARTITIONS) |
45 | 45 | ||
46 | /* | 46 | /* |
47 | * Machines that wish to do flash partition may want to call this function in | 47 | * Machines that wish to do flash partition may want to call this function in |
48 | * their setup routine. | 48 | * their setup routine. |
49 | * | 49 | * |
50 | * physmap_set_partitions(mypartitions, num_parts); | 50 | * physmap_set_partitions(mypartitions, num_parts); |
51 | * | 51 | * |
52 | * Note that one can always override this hard-coded partition with | 52 | * Note that one can always override this hard-coded partition with |
53 | * command line partition (you need to enable CONFIG_MTD_CMDLINE_PARTS). | 53 | * command line partition (you need to enable CONFIG_MTD_CMDLINE_PARTS). |
54 | */ | 54 | */ |
55 | void physmap_set_partitions(struct mtd_partition *parts, int num_parts); | 55 | void physmap_set_partitions(struct mtd_partition *parts, int num_parts); |
diff --git a/include/linux/mtd/pmc551.h b/include/linux/mtd/pmc551.h index 113e3087f68a..a7f6d20ad407 100644 --- a/include/linux/mtd/pmc551.h +++ b/include/linux/mtd/pmc551.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * $Id: pmc551.h,v 1.5 2003/01/24 16:49:53 dwmw2 Exp $ | 2 | * $Id: pmc551.h,v 1.6 2005/11/07 11:14:55 gleixner Exp $ |
3 | * | 3 | * |
4 | * PMC551 PCI Mezzanine Ram Device | 4 | * PMC551 PCI Mezzanine Ram Device |
5 | * | 5 | * |
@@ -7,7 +7,7 @@ | |||
7 | * Mark Ferrell | 7 | * Mark Ferrell |
8 | * Copyright 1999,2000 Nortel Networks | 8 | * Copyright 1999,2000 Nortel Networks |
9 | * | 9 | * |
10 | * License: | 10 | * License: |
11 | * As part of this driver was derrived from the slram.c driver it falls | 11 | * As part of this driver was derrived from the slram.c driver it falls |
12 | * under the same license, which is GNU General Public License v2 | 12 | * under the same license, which is GNU General Public License v2 |
13 | */ | 13 | */ |
@@ -17,7 +17,7 @@ | |||
17 | 17 | ||
18 | #include <linux/mtd/mtd.h> | 18 | #include <linux/mtd/mtd.h> |
19 | 19 | ||
20 | #define PMC551_VERSION "$Id: pmc551.h,v 1.5 2003/01/24 16:49:53 dwmw2 Exp $\n"\ | 20 | #define PMC551_VERSION "$Id: pmc551.h,v 1.6 2005/11/07 11:14:55 gleixner Exp $\n"\ |
21 | "Ramix PMC551 PCI Mezzanine Ram Driver. (C) 1999,2000 Nortel Networks.\n" | 21 | "Ramix PMC551 PCI Mezzanine Ram Driver. (C) 1999,2000 Nortel Networks.\n" |
22 | 22 | ||
23 | /* | 23 | /* |
@@ -30,7 +30,7 @@ struct mypriv { | |||
30 | u32 curr_map0; | 30 | u32 curr_map0; |
31 | u32 asize; | 31 | u32 asize; |
32 | struct mtd_info *nextpmc551; | 32 | struct mtd_info *nextpmc551; |
33 | }; | 33 | }; |
34 | 34 | ||
35 | /* | 35 | /* |
36 | * Function Prototypes | 36 | * Function Prototypes |
@@ -39,7 +39,7 @@ static int pmc551_erase(struct mtd_info *, struct erase_info *); | |||
39 | static void pmc551_unpoint(struct mtd_info *, u_char *, loff_t, size_t); | 39 | static void pmc551_unpoint(struct mtd_info *, u_char *, loff_t, size_t); |
40 | static int pmc551_point (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char **mtdbuf); | 40 | static int pmc551_point (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char **mtdbuf); |
41 | static int pmc551_read(struct mtd_info *, loff_t, size_t, size_t *, u_char *); | 41 | static int pmc551_read(struct mtd_info *, loff_t, size_t, size_t *, u_char *); |
42 | static int pmc551_write(struct mtd_info *, loff_t, size_t, size_t *, const u_char *); | 42 | static int pmc551_write(struct mtd_info *, loff_t, size_t, size_t *, const u_char *); |
43 | 43 | ||
44 | 44 | ||
45 | /* | 45 | /* |
@@ -50,7 +50,7 @@ static int pmc551_write(struct mtd_info *, loff_t, size_t, size_t *, const u_cha | |||
50 | #endif | 50 | #endif |
51 | 51 | ||
52 | #ifndef PCI_DEVICE_ID_V3_SEMI_V370PDC | 52 | #ifndef PCI_DEVICE_ID_V3_SEMI_V370PDC |
53 | #define PCI_DEVICE_ID_V3_SEMI_V370PDC 0x0200 | 53 | #define PCI_DEVICE_ID_V3_SEMI_V370PDC 0x0200 |
54 | #endif | 54 | #endif |
55 | 55 | ||
56 | 56 | ||
diff --git a/include/linux/mtd/xip.h b/include/linux/mtd/xip.h index 7b7deef6b180..220d50bb71cd 100644 --- a/include/linux/mtd/xip.h +++ b/include/linux/mtd/xip.h | |||
@@ -12,7 +12,7 @@ | |||
12 | * it under the terms of the GNU General Public License version 2 as | 12 | * it under the terms of the GNU General Public License version 2 as |
13 | * published by the Free Software Foundation. | 13 | * published by the Free Software Foundation. |
14 | * | 14 | * |
15 | * $Id: xip.h,v 1.2 2004/12/01 15:49:10 nico Exp $ | 15 | * $Id: xip.h,v 1.5 2005/11/07 11:14:55 gleixner Exp $ |
16 | */ | 16 | */ |
17 | 17 | ||
18 | #ifndef __LINUX_MTD_XIP_H__ | 18 | #ifndef __LINUX_MTD_XIP_H__ |
@@ -23,19 +23,19 @@ | |||
23 | #ifdef CONFIG_MTD_XIP | 23 | #ifdef CONFIG_MTD_XIP |
24 | 24 | ||
25 | /* | 25 | /* |
26 | * Function that are modifying the flash state away from array mode must | ||
27 | * obviously not be running from flash. The __xipram is therefore marking | ||
28 | * those functions so they get relocated to ram. | ||
29 | */ | ||
30 | #define __xipram __attribute__ ((__section__ (".data"))) | ||
31 | |||
32 | /* | ||
33 | * We really don't want gcc to guess anything. | 26 | * We really don't want gcc to guess anything. |
34 | * We absolutely _need_ proper inlining. | 27 | * We absolutely _need_ proper inlining. |
35 | */ | 28 | */ |
36 | #include <linux/compiler.h> | 29 | #include <linux/compiler.h> |
37 | 30 | ||
38 | /* | 31 | /* |
32 | * Function that are modifying the flash state away from array mode must | ||
33 | * obviously not be running from flash. The __xipram is therefore marking | ||
34 | * those functions so they get relocated to ram. | ||
35 | */ | ||
36 | #define __xipram noinline __attribute__ ((__section__ (".data"))) | ||
37 | |||
38 | /* | ||
39 | * Each architecture has to provide the following macros. They must access | 39 | * Each architecture has to provide the following macros. They must access |
40 | * the hardware directly and not rely on any other (XIP) functions since they | 40 | * the hardware directly and not rely on any other (XIP) functions since they |
41 | * won't be available when used (flash not in array mode). | 41 | * won't be available when used (flash not in array mode). |
@@ -60,9 +60,9 @@ | |||
60 | * overflowing. | 60 | * overflowing. |
61 | * | 61 | * |
62 | * xip_iprefetch() | 62 | * xip_iprefetch() |
63 | * | 63 | * |
64 | * Macro to fill instruction prefetch | 64 | * Macro to fill instruction prefetch |
65 | * e.g. a series of nops: asm volatile (".rep 8; nop; .endr"); | 65 | * e.g. a series of nops: asm volatile (".rep 8; nop; .endr"); |
66 | */ | 66 | */ |
67 | 67 | ||
68 | #include <asm/mtd-xip.h> | 68 | #include <asm/mtd-xip.h> |
diff --git a/include/linux/rslib.h b/include/linux/rslib.h index 980c8f74d8dc..ace25acfdc97 100644 --- a/include/linux/rslib.h +++ b/include/linux/rslib.h | |||
@@ -1,15 +1,15 @@ | |||
1 | /* | 1 | /* |
2 | * include/linux/rslib.h | 2 | * include/linux/rslib.h |
3 | * | 3 | * |
4 | * Overview: | 4 | * Overview: |
5 | * Generic Reed Solomon encoder / decoder library | 5 | * Generic Reed Solomon encoder / decoder library |
6 | * | 6 | * |
7 | * Copyright (C) 2004 Thomas Gleixner (tglx@linutronix.de) | 7 | * Copyright (C) 2004 Thomas Gleixner (tglx@linutronix.de) |
8 | * | 8 | * |
9 | * RS code lifted from reed solomon library written by Phil Karn | 9 | * RS code lifted from reed solomon library written by Phil Karn |
10 | * Copyright 2002 Phil Karn, KA9Q | 10 | * Copyright 2002 Phil Karn, KA9Q |
11 | * | 11 | * |
12 | * $Id: rslib.h,v 1.3 2004/10/05 22:08:22 gleixner Exp $ | 12 | * $Id: rslib.h,v 1.4 2005/11/07 11:14:52 gleixner Exp $ |
13 | * | 13 | * |
14 | * This program is free software; you can redistribute it and/or modify | 14 | * This program is free software; you can redistribute it and/or modify |
15 | * it under the terms of the GNU General Public License version 2 as | 15 | * it under the terms of the GNU General Public License version 2 as |
@@ -21,20 +21,20 @@ | |||
21 | 21 | ||
22 | #include <linux/list.h> | 22 | #include <linux/list.h> |
23 | 23 | ||
24 | /** | 24 | /** |
25 | * struct rs_control - rs control structure | 25 | * struct rs_control - rs control structure |
26 | * | 26 | * |
27 | * @mm: Bits per symbol | 27 | * @mm: Bits per symbol |
28 | * @nn: Symbols per block (= (1<<mm)-1) | 28 | * @nn: Symbols per block (= (1<<mm)-1) |
29 | * @alpha_to: log lookup table | 29 | * @alpha_to: log lookup table |
30 | * @index_of: Antilog lookup table | 30 | * @index_of: Antilog lookup table |
31 | * @genpoly: Generator polynomial | 31 | * @genpoly: Generator polynomial |
32 | * @nroots: Number of generator roots = number of parity symbols | 32 | * @nroots: Number of generator roots = number of parity symbols |
33 | * @fcr: First consecutive root, index form | 33 | * @fcr: First consecutive root, index form |
34 | * @prim: Primitive element, index form | 34 | * @prim: Primitive element, index form |
35 | * @iprim: prim-th root of 1, index form | 35 | * @iprim: prim-th root of 1, index form |
36 | * @gfpoly: The primitive generator polynominal | 36 | * @gfpoly: The primitive generator polynominal |
37 | * @users: Users of this structure | 37 | * @users: Users of this structure |
38 | * @list: List entry for the rs control list | 38 | * @list: List entry for the rs control list |
39 | */ | 39 | */ |
40 | struct rs_control { | 40 | struct rs_control { |
@@ -58,7 +58,7 @@ int encode_rs8(struct rs_control *rs, uint8_t *data, int len, uint16_t *par, | |||
58 | uint16_t invmsk); | 58 | uint16_t invmsk); |
59 | #endif | 59 | #endif |
60 | #ifdef CONFIG_REED_SOLOMON_DEC8 | 60 | #ifdef CONFIG_REED_SOLOMON_DEC8 |
61 | int decode_rs8(struct rs_control *rs, uint8_t *data, uint16_t *par, int len, | 61 | int decode_rs8(struct rs_control *rs, uint8_t *data, uint16_t *par, int len, |
62 | uint16_t *s, int no_eras, int *eras_pos, uint16_t invmsk, | 62 | uint16_t *s, int no_eras, int *eras_pos, uint16_t invmsk, |
63 | uint16_t *corr); | 63 | uint16_t *corr); |
64 | #endif | 64 | #endif |
@@ -75,7 +75,7 @@ int decode_rs16(struct rs_control *rs, uint16_t *data, uint16_t *par, int len, | |||
75 | #endif | 75 | #endif |
76 | 76 | ||
77 | /* Create or get a matching rs control structure */ | 77 | /* Create or get a matching rs control structure */ |
78 | struct rs_control *init_rs(int symsize, int gfpoly, int fcr, int prim, | 78 | struct rs_control *init_rs(int symsize, int gfpoly, int fcr, int prim, |
79 | int nroots); | 79 | int nroots); |
80 | 80 | ||
81 | /* Release a rs control structure */ | 81 | /* Release a rs control structure */ |
@@ -87,9 +87,9 @@ void free_rs(struct rs_control *rs); | |||
87 | * @x: the value to reduce | 87 | * @x: the value to reduce |
88 | * | 88 | * |
89 | * where | 89 | * where |
90 | * rs->mm = number of bits per symbol | 90 | * rs->mm = number of bits per symbol |
91 | * rs->nn = (2^rs->mm) - 1 | 91 | * rs->nn = (2^rs->mm) - 1 |
92 | * | 92 | * |
93 | * Simple arithmetic modulo would return a wrong result for values | 93 | * Simple arithmetic modulo would return a wrong result for values |
94 | * >= 3 * rs->nn | 94 | * >= 3 * rs->nn |
95 | */ | 95 | */ |
diff --git a/include/mtd/inftl-user.h b/include/mtd/inftl-user.h index bda4f2c8f728..9b1e2526b45e 100644 --- a/include/mtd/inftl-user.h +++ b/include/mtd/inftl-user.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * $Id: inftl-user.h,v 1.1 2004/05/05 15:17:00 dwmw2 Exp $ | 2 | * $Id: inftl-user.h,v 1.2 2005/11/07 11:14:56 gleixner Exp $ |
3 | * | 3 | * |
4 | * Parts of INFTL headers shared with userspace | 4 | * Parts of INFTL headers shared with userspace |
5 | * | 5 | * |
6 | */ | 6 | */ |
7 | 7 | ||
diff --git a/include/mtd/mtd-abi.h b/include/mtd/mtd-abi.h index 428d9122940b..b5994ea56a5a 100644 --- a/include/mtd/mtd-abi.h +++ b/include/mtd/mtd-abi.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * $Id: mtd-abi.h,v 1.11 2005/05/19 16:08:58 gleixner Exp $ | 2 | * $Id: mtd-abi.h,v 1.13 2005/11/07 11:14:56 gleixner Exp $ |
3 | * | 3 | * |
4 | * Portions of MTD ABI definition which are shared by kernel and user space | 4 | * Portions of MTD ABI definition which are shared by kernel and user space |
5 | */ | 5 | */ |
6 | 6 | ||
7 | #ifndef __MTD_ABI_H__ | 7 | #ifndef __MTD_ABI_H__ |
@@ -42,6 +42,7 @@ struct mtd_oob_buf { | |||
42 | #define MTD_OOB 64 // Out-of-band data (NAND flash) | 42 | #define MTD_OOB 64 // Out-of-band data (NAND flash) |
43 | #define MTD_ECC 128 // Device capable of automatic ECC | 43 | #define MTD_ECC 128 // Device capable of automatic ECC |
44 | #define MTD_NO_VIRTBLOCKS 256 // Virtual blocks not allowed | 44 | #define MTD_NO_VIRTBLOCKS 256 // Virtual blocks not allowed |
45 | #define MTD_PROGRAM_REGIONS 512 // Configurable Programming Regions | ||
45 | 46 | ||
46 | // Some common devices / combinations of capabilities | 47 | // Some common devices / combinations of capabilities |
47 | #define MTD_CAP_ROM 0 | 48 | #define MTD_CAP_ROM 0 |
@@ -80,7 +81,7 @@ struct mtd_info_user { | |||
80 | }; | 81 | }; |
81 | 82 | ||
82 | struct region_info_user { | 83 | struct region_info_user { |
83 | uint32_t offset; /* At which this region starts, | 84 | uint32_t offset; /* At which this region starts, |
84 | * from the beginning of the MTD */ | 85 | * from the beginning of the MTD */ |
85 | uint32_t erasesize; /* For this region */ | 86 | uint32_t erasesize; /* For this region */ |
86 | uint32_t numblocks; /* Number of blocks in this region */ | 87 | uint32_t numblocks; /* Number of blocks in this region */ |
diff --git a/include/mtd/nftl-user.h b/include/mtd/nftl-user.h index 924ec0459e9c..b2bca18e7311 100644 --- a/include/mtd/nftl-user.h +++ b/include/mtd/nftl-user.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * $Id: nftl-user.h,v 1.1 2004/05/05 14:44:57 dwmw2 Exp $ | 2 | * $Id: nftl-user.h,v 1.2 2005/11/07 11:14:56 gleixner Exp $ |
3 | * | 3 | * |
4 | * Parts of NFTL headers shared with userspace | 4 | * Parts of NFTL headers shared with userspace |
5 | * | 5 | * |
6 | */ | 6 | */ |
7 | 7 | ||