Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | |
2 | /* JEDEC Flash Interface. | |
3 | * This is an older type of interface for self programming flash. It is | |
4 | * commonly use in older AMD chips and is obsolete compared with CFI. | |
5 | * It is called JEDEC because the JEDEC association distributes the ID codes | |
6 | * for the chips. | |
7 | * | |
8 | * See the AMD flash databook for information on how to operate the interface. | |
9 | * | |
10 | * $Id: jedec.h,v 1.3 2003/05/21 11:51:01 dwmw2 Exp $ | |
11 | */ | |
12 | ||
13 | #ifndef __LINUX_MTD_JEDEC_H__ | |
14 | #define __LINUX_MTD_JEDEC_H__ | |
15 | ||
16 | #include <linux/types.h> | |
17 | ||
18 | #define MAX_JEDEC_CHIPS 16 | |
19 | ||
20 | // Listing of all supported chips and their information | |
21 | struct JEDECTable | |
22 | { | |
23 | __u16 jedec; | |
24 | char *name; | |
25 | unsigned long size; | |
26 | unsigned long sectorsize; | |
27 | __u32 capabilities; | |
28 | }; | |
29 | ||
30 | // JEDEC being 0 is the end of the chip array | |
31 | struct jedec_flash_chip | |
32 | { | |
33 | __u16 jedec; | |
34 | unsigned long size; | |
35 | unsigned long sectorsize; | |
36 | ||
37 | // *(__u8*)(base + (adder << addrshift)) = data << datashift | |
38 | // Address size = size << addrshift | |
39 | unsigned long base; // Byte 0 of the flash, will be unaligned | |
40 | unsigned int datashift; // Useful for 32bit/16bit accesses | |
41 | unsigned int addrshift; | |
42 | unsigned long offset; // linerized start. base==offset for unbanked, uninterleaved flash | |
43 | ||
44 | __u32 capabilities; | |
45 | ||
46 | // These markers are filled in by the flash_chip_scan function | |
47 | unsigned long start; | |
48 | unsigned long length; | |
49 | }; | |
50 | ||
51 | struct jedec_private | |
52 | { | |
53 | unsigned long size; // Total size of all the devices | |
54 | ||
55 | /* Bank handling. If sum(bank_fill) == size then this is linear flash. | |
56 | Otherwise the mapping has holes in it. bank_fill may be used to | |
57 | find the holes, but in the common symetric case | |
58 | bank_fill[0] == bank_fill[*], thus addresses may be computed | |
59 | mathmatically. bank_fill must be powers of two */ | |
60 | unsigned is_banked; | |
61 | unsigned long bank_fill[MAX_JEDEC_CHIPS]; | |
62 | ||
63 | struct jedec_flash_chip chips[MAX_JEDEC_CHIPS]; | |
64 | }; | |
65 | ||
66 | #endif |