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