Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
423 | giacomo | 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.1 2004-01-28 15:30:50 giacomo 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 |