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