1f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner/****************************************************************************
2f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner ****************************************************************************
3f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner ***
4f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner ***   This header was automatically generated from a Linux kernel header
5f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner ***   of the same name, to make information necessary for userspace to
6f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner ***   call into the kernel available to libc.  It contains only constants,
7f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner ***   structures, and macros generated from the original header, and thus,
8f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner ***   contains no copyrightable information.
9f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner ***
10f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner ****************************************************************************
11f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner ****************************************************************************/
12f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#ifndef __MTD_CFI_H__
13f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define __MTD_CFI_H__
14f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
15f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#include <linux/delay.h>
16f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#include <linux/types.h>
17f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#include <linux/interrupt.h>
18f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#include <linux/mtd/flashchip.h>
19f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#include <linux/mtd/map.h>
20f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#include <linux/mtd/cfi_endian.h>
21f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
22f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define cfi_interleave_is_1(cfi) (0)
23f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
24f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define cfi_interleave_is_2(cfi) (0)
25f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
26f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define cfi_interleave_is_4(cfi) (0)
27f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
28f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define cfi_interleave_is_8(cfi) (0)
29f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
30f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define CFI_DEVICETYPE_X8 (8 / 8)
31f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define CFI_DEVICETYPE_X16 (16 / 8)
32f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define CFI_DEVICETYPE_X32 (32 / 8)
33f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define CFI_DEVICETYPE_X64 (64 / 8)
34f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
35f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turnerstruct cfi_extquery {
36f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t pri[3];
37f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t MajorVersion;
38f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t MinorVersion;
39f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner} __attribute__((packed));
40f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
41f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turnerstruct cfi_pri_intelext {
42f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t pri[3];
43f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t MajorVersion;
44f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t MinorVersion;
45f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint32_t FeatureSupport;
46f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t SuspendCmdSupport;
47f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint16_t BlkStatusRegMask;
48f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t VccOptimal;
49f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t VppOptimal;
50f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t NumProtectionFields;
51f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint16_t ProtRegAddr;
52f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t FactProtRegSize;
53f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t UserProtRegSize;
54f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t extra[0];
55f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner} __attribute__((packed));
56f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
57f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turnerstruct cfi_intelext_otpinfo {
58f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint32_t ProtRegAddr;
59f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint16_t FactGroups;
60f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t FactProtRegSize;
61f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint16_t UserGroups;
62f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t UserProtRegSize;
63f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner} __attribute__((packed));
64f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
65f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turnerstruct cfi_intelext_blockinfo {
66f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint16_t NumIdentBlocks;
67f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint16_t BlockSize;
68f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint16_t MinBlockEraseCycles;
69f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t BitsPerCell;
70f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t BlockCap;
71f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner} __attribute__((packed));
72f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
73f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turnerstruct cfi_intelext_regioninfo {
74f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint16_t NumIdentPartitions;
75f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t NumOpAllowed;
76f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t NumOpAllowedSimProgMode;
77f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t NumOpAllowedSimEraMode;
78f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t NumBlockTypes;
79f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner struct cfi_intelext_blockinfo BlockTypes[1];
80f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner} __attribute__((packed));
81f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
82f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turnerstruct cfi_intelext_programming_regioninfo {
83f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t ProgRegShift;
84f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t Reserved1;
85f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t ControlValid;
86f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t Reserved2;
87f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t ControlInvalid;
88f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t Reserved3;
89f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner} __attribute__((packed));
90f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
91f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turnerstruct cfi_pri_amdstd {
92f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t pri[3];
93f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t MajorVersion;
94f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t MinorVersion;
95f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t SiliconRevision;
96f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t EraseSuspend;
97f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t BlkProt;
98f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t TmpBlkUnprotect;
99f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t BlkProtUnprot;
100f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t SimultaneousOps;
101f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t BurstMode;
102f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t PageMode;
103f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t VppMin;
104f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t VppMax;
105f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t TopBottom;
106f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner} __attribute__((packed));
107f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
108f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turnerstruct cfi_pri_atmel {
109f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t pri[3];
110f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t MajorVersion;
111f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t MinorVersion;
112f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t Features;
113f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t BottomBoot;
114f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t BurstMode;
115f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t PageMode;
116f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner} __attribute__((packed));
117f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
118f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turnerstruct cfi_pri_query {
119f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t NumFields;
120f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint32_t ProtField[1];
121f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner} __attribute__((packed));
122f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
123f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turnerstruct cfi_bri_query {
124f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t PageModeReadCap;
125f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint8_t NumFields;
126f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint32_t ConfField[1];
127f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner} __attribute__((packed));
128f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
129f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define P_ID_NONE 0x0000
130f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define P_ID_INTEL_EXT 0x0001
131f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define P_ID_AMD_STD 0x0002
132f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define P_ID_INTEL_STD 0x0003
133f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define P_ID_AMD_EXT 0x0004
134f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define P_ID_WINBOND 0x0006
135f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define P_ID_ST_ADV 0x0020
136f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define P_ID_MITSUBISHI_STD 0x0100
137f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define P_ID_MITSUBISHI_EXT 0x0101
138f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define P_ID_SST_PAGE 0x0102
139f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define P_ID_INTEL_PERFORMANCE 0x0200
140f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define P_ID_INTEL_DATA 0x0210
141f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define P_ID_RESERVED 0xffff
142f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
143f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define CFI_MODE_CFI 1
144f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define CFI_MODE_JEDEC 0
145f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
146f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turnerstruct cfi_private {
147f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint16_t cmdset;
148f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner void *cmdset_priv;
149f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner int interleave;
150f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner int device_type;
151f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner int cfi_mode;
152f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner int addr_unlock1;
153f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner int addr_unlock2;
154f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner struct mtd_info *(*cmdset_setup)(struct map_info *);
155f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner struct cfi_ident *cfiq;
156f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner int mfr, id;
157f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner int numchips;
158f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner unsigned long chipshift;
159f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner const char *im_name;
160f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner struct flchip chips[0];
161f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner};
162f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
163f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#if BITS_PER_LONG >= 64
164f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#endif
165f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define CMD(x) cfi_build_cmd((x), map, cfi)
166f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#if BITS_PER_LONG >= 64
167f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#endif
168f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define MERGESTATUS(x) cfi_merge_status((x), map, cfi)
169f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
170f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turnerstruct cfi_fixup {
171f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint16_t mfr;
172f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner uint16_t id;
173f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner void (*fixup)(struct mtd_info *mtd, void* param);
174f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner void* param;
175f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner};
176f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
177f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define CFI_MFR_ANY 0xffff
178f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define CFI_ID_ANY 0xffff
179f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
180f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define CFI_MFR_AMD 0x0001
181f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define CFI_MFR_ATMEL 0x001F
182f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define CFI_MFR_ST 0x0020
183f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
184f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turnertypedef int (*varsize_frob_t)(struct map_info *map, struct flchip *chip,
185f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner unsigned long adr, int len, void *thunk);
186f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
187f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#endif
188