summaryrefslogtreecommitdiff
path: root/sysroot/usr/include/linux/mtd/cfi.h
blob: d7f1ba128fa5096a89a2bdc9fde8d8f50ccf59b9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
/****************************************************************************
 ****************************************************************************
 ***
 ***   This header was automatically generated from a Linux kernel header
 ***   of the same name, to make information necessary for userspace to
 ***   call into the kernel available to libc.  It contains only constants,
 ***   structures, and macros generated from the original header, and thus,
 ***   contains no copyrightable information.
 ***
 ****************************************************************************
 ****************************************************************************/
#ifndef __MTD_CFI_H__
#define __MTD_CFI_H__

#include <linux/delay.h>
#include <linux/types.h>
#include <linux/interrupt.h>
#include <linux/mtd/flashchip.h>
#include <linux/mtd/map.h>
#include <linux/mtd/cfi_endian.h>

#define cfi_interleave_is_1(cfi) (0)

#define cfi_interleave_is_2(cfi) (0)

#define cfi_interleave_is_4(cfi) (0)

#define cfi_interleave_is_8(cfi) (0)

#define CFI_DEVICETYPE_X8 (8 / 8)
#define CFI_DEVICETYPE_X16 (16 / 8)
#define CFI_DEVICETYPE_X32 (32 / 8)
#define CFI_DEVICETYPE_X64 (64 / 8)

struct cfi_extquery {
 uint8_t pri[3];
 uint8_t MajorVersion;
 uint8_t MinorVersion;
} __attribute__((packed));

struct cfi_pri_intelext {
 uint8_t pri[3];
 uint8_t MajorVersion;
 uint8_t MinorVersion;
 uint32_t FeatureSupport;
 uint8_t SuspendCmdSupport;
 uint16_t BlkStatusRegMask;
 uint8_t VccOptimal;
 uint8_t VppOptimal;
 uint8_t NumProtectionFields;
 uint16_t ProtRegAddr;
 uint8_t FactProtRegSize;
 uint8_t UserProtRegSize;
 uint8_t extra[0];
} __attribute__((packed));

struct cfi_intelext_otpinfo {
 uint32_t ProtRegAddr;
 uint16_t FactGroups;
 uint8_t FactProtRegSize;
 uint16_t UserGroups;
 uint8_t UserProtRegSize;
} __attribute__((packed));

struct cfi_intelext_blockinfo {
 uint16_t NumIdentBlocks;
 uint16_t BlockSize;
 uint16_t MinBlockEraseCycles;
 uint8_t BitsPerCell;
 uint8_t BlockCap;
} __attribute__((packed));

struct cfi_intelext_regioninfo {
 uint16_t NumIdentPartitions;
 uint8_t NumOpAllowed;
 uint8_t NumOpAllowedSimProgMode;
 uint8_t NumOpAllowedSimEraMode;
 uint8_t NumBlockTypes;
 struct cfi_intelext_blockinfo BlockTypes[1];
} __attribute__((packed));

struct cfi_intelext_programming_regioninfo {
 uint8_t ProgRegShift;
 uint8_t Reserved1;
 uint8_t ControlValid;
 uint8_t Reserved2;
 uint8_t ControlInvalid;
 uint8_t Reserved3;
} __attribute__((packed));

struct cfi_pri_amdstd {
 uint8_t pri[3];
 uint8_t MajorVersion;
 uint8_t MinorVersion;
 uint8_t SiliconRevision;
 uint8_t EraseSuspend;
 uint8_t BlkProt;
 uint8_t TmpBlkUnprotect;
 uint8_t BlkProtUnprot;
 uint8_t SimultaneousOps;
 uint8_t BurstMode;
 uint8_t PageMode;
 uint8_t VppMin;
 uint8_t VppMax;
 uint8_t TopBottom;
} __attribute__((packed));

struct cfi_pri_atmel {
 uint8_t pri[3];
 uint8_t MajorVersion;
 uint8_t MinorVersion;
 uint8_t Features;
 uint8_t BottomBoot;
 uint8_t BurstMode;
 uint8_t PageMode;
} __attribute__((packed));

struct cfi_pri_query {
 uint8_t NumFields;
 uint32_t ProtField[1];
} __attribute__((packed));

struct cfi_bri_query {
 uint8_t PageModeReadCap;
 uint8_t NumFields;
 uint32_t ConfField[1];
} __attribute__((packed));

#define P_ID_NONE 0x0000
#define P_ID_INTEL_EXT 0x0001
#define P_ID_AMD_STD 0x0002
#define P_ID_INTEL_STD 0x0003
#define P_ID_AMD_EXT 0x0004
#define P_ID_WINBOND 0x0006
#define P_ID_ST_ADV 0x0020
#define P_ID_MITSUBISHI_STD 0x0100
#define P_ID_MITSUBISHI_EXT 0x0101
#define P_ID_SST_PAGE 0x0102
#define P_ID_INTEL_PERFORMANCE 0x0200
#define P_ID_INTEL_DATA 0x0210
#define P_ID_RESERVED 0xffff

#define CFI_MODE_CFI 1
#define CFI_MODE_JEDEC 0

struct cfi_private {
 uint16_t cmdset;
 void *cmdset_priv;
 int interleave;
 int device_type;
 int cfi_mode;
 int addr_unlock1;
 int addr_unlock2;
 struct mtd_info *(*cmdset_setup)(struct map_info *);
 struct cfi_ident *cfiq;
 int mfr, id;
 int numchips;
 unsigned long chipshift;
 const char *im_name;
 struct flchip chips[0];
};

#if BITS_PER_LONG >= 64
#endif
#define CMD(x) cfi_build_cmd((x), map, cfi)
#if BITS_PER_LONG >= 64
#endif
#define MERGESTATUS(x) cfi_merge_status((x), map, cfi)

struct cfi_fixup {
 uint16_t mfr;
 uint16_t id;
 void (*fixup)(struct mtd_info *mtd, void* param);
 void* param;
};

#define CFI_MFR_ANY 0xffff
#define CFI_ID_ANY 0xffff

#define CFI_MFR_AMD 0x0001
#define CFI_MFR_ATMEL 0x001F
#define CFI_MFR_ST 0x0020  

typedef int (*varsize_frob_t)(struct map_info *map, struct flchip *chip,
 unsigned long adr, int len, void *thunk);

#endif