]>
Commit | Line | Data |
---|---|---|
61ecfa87 | 1 | /* |
a1452a37 DW |
2 | * Copyright © 2000 Red Hat UK Limited |
3 | * Copyright © 2000-2010 David Woodhouse <dwmw2@infradead.org> | |
4 | * | |
5 | * This program is free software; you can redistribute it and/or modify | |
6 | * it under the terms of the GNU General Public License as published by | |
7 | * the Free Software Foundation; either version 2 of the License, or | |
8 | * (at your option) any later version. | |
9 | * | |
10 | * This program is distributed in the hope that it will be useful, | |
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 | * GNU General Public License for more details. | |
61ecfa87 | 14 | * |
a1452a37 DW |
15 | * You should have received a copy of the GNU General Public License |
16 | * along with this program; if not, write to the Free Software | |
17 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | |
1da177e4 | 18 | * |
1da177e4 LT |
19 | */ |
20 | ||
21 | #ifndef __MTD_FLASHCHIP_H__ | |
22 | #define __MTD_FLASHCHIP_H__ | |
23 | ||
24 | /* For spinlocks. sched.h includes spinlock.h from whichever directory it | |
25 | * happens to be in - so we don't have to care whether we're on 2.2, which | |
61ecfa87 | 26 | * has asm/spinlock.h, or 2.4, which has linux/spinlock.h |
1da177e4 LT |
27 | */ |
28 | #include <linux/sched.h> | |
c4e77376 | 29 | #include <linux/mutex.h> |
1da177e4 | 30 | |
61ecfa87 | 31 | typedef enum { |
1da177e4 LT |
32 | FL_READY, |
33 | FL_STATUS, | |
34 | FL_CFI_QUERY, | |
35 | FL_JEDEC_QUERY, | |
36 | FL_ERASING, | |
37 | FL_ERASE_SUSPENDING, | |
38 | FL_ERASE_SUSPENDED, | |
39 | FL_WRITING, | |
40 | FL_WRITING_TO_BUFFER, | |
f77814dd | 41 | FL_OTP_WRITE, |
1da177e4 LT |
42 | FL_WRITE_SUSPENDING, |
43 | FL_WRITE_SUSPENDED, | |
44 | FL_PM_SUSPENDED, | |
45 | FL_SYNCING, | |
46 | FL_UNLOADING, | |
47 | FL_LOCKING, | |
48 | FL_UNLOCKING, | |
49 | FL_POINT, | |
50 | FL_XIP_WHILE_ERASING, | |
51 | FL_XIP_WHILE_WRITING, | |
c4a9f88d | 52 | FL_SHUTDOWN, |
30631cb8 AR |
53 | /* These 2 come from nand_state_t, which has been unified here */ |
54 | FL_READING, | |
55 | FL_CACHEDPRG, | |
72073027 | 56 | /* These 4 come from onenand_state_t, which has been unified here */ |
30631cb8 AR |
57 | FL_RESETING, |
58 | FL_OTPING, | |
72073027 MK |
59 | FL_PREPARING_ERASE, |
60 | FL_VERIFYING_ERASE, | |
30631cb8 | 61 | |
1da177e4 LT |
62 | FL_UNKNOWN |
63 | } flstate_t; | |
64 | ||
65 | ||
66 | ||
61ecfa87 | 67 | /* NOTE: confusingly, this can be used to refer to more than one chip at a time, |
1da177e4 LT |
68 | if they're interleaved. This can even refer to individual partitions on |
69 | the same physical chip when present. */ | |
70 | ||
71 | struct flchip { | |
72 | unsigned long start; /* Offset within the map */ | |
73 | // unsigned long len; | |
74 | /* We omit len for now, because when we group them together | |
75 | we insist that they're all of the same size, and the chip size | |
76 | is held in the next level up. If we get more versatile later, | |
77 | it'll make it a damn sight harder to find which chip we want from | |
78 | a given offset, and we'll want to add the per-chip length field | |
79 | back in. | |
80 | */ | |
81 | int ref_point_counter; | |
82 | flstate_t state; | |
83 | flstate_t oldstate; | |
84 | ||
0514cd93 BD |
85 | unsigned int write_suspended:1; |
86 | unsigned int erase_suspended:1; | |
1da177e4 LT |
87 | unsigned long in_progress_block_addr; |
88 | ||
c4e77376 | 89 | struct mutex mutex; |
1da177e4 LT |
90 | wait_queue_head_t wq; /* Wait on here when we're waiting for the chip |
91 | to be ready */ | |
92 | int word_write_time; | |
93 | int buffer_write_time; | |
94 | int erase_time; | |
95 | ||
e93cafe4 AG |
96 | int word_write_time_max; |
97 | int buffer_write_time_max; | |
98 | int erase_time_max; | |
99 | ||
1da177e4 LT |
100 | void *priv; |
101 | }; | |
102 | ||
103 | /* This is used to handle contention on write/erase operations | |
104 | between partitions of the same physical chip. */ | |
105 | struct flchip_shared { | |
8ae66418 | 106 | struct mutex lock; |
1da177e4 LT |
107 | struct flchip *writing; |
108 | struct flchip *erasing; | |
109 | }; | |
110 | ||
111 | ||
112 | #endif /* __MTD_FLASHCHIP_H__ */ |