0001
0002
0003
0004
0005
0006
0007 #ifndef __MTD_FLASHCHIP_H__
0008 #define __MTD_FLASHCHIP_H__
0009
0010
0011
0012
0013
0014 #include <linux/sched.h>
0015 #include <linux/mutex.h>
0016
0017 typedef enum {
0018 FL_READY,
0019 FL_STATUS,
0020 FL_CFI_QUERY,
0021 FL_JEDEC_QUERY,
0022 FL_ERASING,
0023 FL_ERASE_SUSPENDING,
0024 FL_ERASE_SUSPENDED,
0025 FL_WRITING,
0026 FL_WRITING_TO_BUFFER,
0027 FL_OTP_WRITE,
0028 FL_WRITE_SUSPENDING,
0029 FL_WRITE_SUSPENDED,
0030 FL_PM_SUSPENDED,
0031 FL_SYNCING,
0032 FL_UNLOADING,
0033 FL_LOCKING,
0034 FL_UNLOCKING,
0035 FL_POINT,
0036 FL_XIP_WHILE_ERASING,
0037 FL_XIP_WHILE_WRITING,
0038 FL_SHUTDOWN,
0039
0040 FL_READING,
0041 FL_CACHEDPRG,
0042
0043 FL_RESETTING,
0044 FL_OTPING,
0045 FL_PREPARING_ERASE,
0046 FL_VERIFYING_ERASE,
0047
0048 FL_UNKNOWN
0049 } flstate_t;
0050
0051
0052
0053
0054
0055
0056
0057 struct flchip {
0058 unsigned long start;
0059
0060
0061
0062
0063
0064
0065
0066
0067 int ref_point_counter;
0068 flstate_t state;
0069 flstate_t oldstate;
0070
0071 unsigned int write_suspended:1;
0072 unsigned int erase_suspended:1;
0073 unsigned long in_progress_block_addr;
0074 unsigned long in_progress_block_mask;
0075
0076 struct mutex mutex;
0077 wait_queue_head_t wq;
0078
0079 int word_write_time;
0080 int buffer_write_time;
0081 int erase_time;
0082
0083 int word_write_time_max;
0084 int buffer_write_time_max;
0085 int erase_time_max;
0086
0087 void *priv;
0088 };
0089
0090
0091
0092 struct flchip_shared {
0093 struct mutex lock;
0094 struct flchip *writing;
0095 struct flchip *erasing;
0096 };
0097
0098
0099 #endif