FreeCalypso > hg > freecalypso-sw
annotate gsm-fw/services/ffs/drv.h @ 992:a7b0b426f9ca
target-utils: boot ROM UART autodetection revamped
The new implementation should work with both the familiar Calypso C035
boot ROM version found in our regular targets as well as the older
Calypso F741979B version found on the vintage D-Sample board.
author | Mychaela Falconia <falcon@ivan.Harhan.ORG> |
---|---|
date | Wed, 30 Dec 2015 21:28:41 +0000 |
parents | 6f4a12b4582f |
children |
rev | line source |
---|---|
209
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
1 /****************************************************************************** |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
2 * Flash File System (ffs) |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
3 * Idea, design and coding by Mads Meisner-Jensen, mmj@ti.com |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
4 * |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
5 * ffs low level flash driver |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
6 * |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
7 * $Id: drv.h 1.15.1.25.1.1.1.20 Mon, 17 Nov 2003 08:51:37 +0100 tsj $ |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
8 * |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
9 ******************************************************************************/ |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
10 |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
11 #ifndef TARGET |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
12 #define TARGET 1 |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
13 #define _RVF 1 |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
14 #endif |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
15 |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
16 /****************************************************************************** |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
17 * Compile constants |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
18 ******************************************************************************/ |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
19 |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
20 // FFS driver version (in four-digit BCD format). Format is MMID, where MM |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
21 // is major revision number, incremented e.g. for major revision or support |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
22 // for new flash family/driver. I is minor revision that is incremented for |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
23 // minor changes or when a bug is corrected. D is incremented when support |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
24 // of another device is added. |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
25 #define FFS_DRV_VERSION ((uint16) 0x1011) |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
26 |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
27 // Default Allocation granularity of ffs data sectors (as power of two) |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
28 #define FFS_ATOM_LOG2 4 |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
29 |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
30 |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
31 /****************************************************************************** |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
32 * Macros |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
33 ******************************************************************************/ |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
34 |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
35 // Convert between address and block index. Only works if all blocks are the |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
36 // same size! |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
37 #define block2addr(block) (dev.base + dev.binfo[block].offset) |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
38 |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
39 // Note that it is *VERY* important that pointers to hardware and flash are |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
40 // declared volatile, otherwise the compiler optimizes some reads and writes |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
41 // out and this results in non-working code! |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
42 #define FLASH_WRITE_HALFWORD(addr, data) *(volatile uint16 *) (addr) = (data) |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
43 #define FLASH_READ_HALFWORD(addr) *((volatile uint16 *) (addr)) |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
44 |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
45 #if (TARGET == 1) |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
46 |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
47 #include "../../include/config.h" |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
48 #include "../../bsp/mem.h" |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
49 #if (CHIPSET == 12) |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
50 #include "sys_inth.h" |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
51 #else |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
52 #include "../../bsp/inth.h" |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
53 #endif |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
54 |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
55 #if (CHIPSET == 3) |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
56 #define INT_REQUESTED (*(volatile uint16 *) INTH_IT_REG) & \ |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
57 ~(*(volatile uint16 *) INTH_MASK_REG) |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
58 #elif (CHIPSET == 4 || CHIPSET == 5 || CHIPSET == 6 || CHIPSET == 7 || CHIPSET == 8 || CHIPSET == 9 || CHIPSET == 10 || CHIPSET == 11) |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
59 #define INT_REQUESTED ((*(volatile uint16 *) INTH_IT_REG1) & \ |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
60 ~(*(volatile uint16 *) INTH_MASK_REG1)) || \ |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
61 ((*(volatile uint16 *) INTH_IT_REG2) & \ |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
62 ~(*(volatile uint16 *) INTH_MASK_REG2)) |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
63 #elif (CHIPSET == 12) |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
64 #define INT_REQUESTED ((*(volatile uint16 *) C_INTH_IT_REG1) & \ |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
65 ~(*(volatile uint16 *) C_INTH_MASK_REG1)) || \ |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
66 ((*(volatile uint16 *) C_INTH_IT_REG2) & \ |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
67 ~(*(volatile uint16 *) C_INTH_MASK_REG2)) |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
68 #endif |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
69 #endif // (TARGET == 1) |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
70 |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
71 |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
72 /****************************************************************************** |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
73 * Types |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
74 ******************************************************************************/ |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
75 |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
76 // Flash driver identifiers. |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
77 enum FFS_DRIVER { |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
78 FFS_DRIVER_NULL = 0, // Null driver |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
79 |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
80 FFS_DRIVER_AMD = 2, // AMD dual/multi-bank driver |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
81 FFS_DRIVER_AMD_SB = 3, // AMD single-bank driver |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
82 |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
83 FFS_DRIVER_SST = 8, // SST dual/multi-bank driver |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
84 FFS_DRIVER_SST_SB = 9, // SST single-bank driver |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
85 |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
86 FFS_DRIVER_INTEL = 16, // Intel dual/multi-bank driver |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
87 FFS_DRIVER_INTEL_SB = 17, // Intel single-bank driver |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
88 |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
89 FFS_DRIVER_AMD_PSEUDO_SB = 32, // Test driver |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
90 FFS_DRIVER_TEST = 34, // Test driver |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
91 |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
92 FFS_DRIVER_RAM = 64 // Ram driver |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
93 }; |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
94 |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
95 |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
96 // Manufacturer identifiers. These should never have to be changed. They are |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
97 // ordered in alphabetically ascending order. |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
98 enum FFS_MANUFACTURER { |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
99 MANUFACT_AMD = 0x01, |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
100 MANUFACT_ATMEL = 0x1F, |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
101 MANUFACT_FUJITSU = 0x04, |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
102 MANUFACT_INTEL = 0x89, |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
103 MANUFACT_MXIC = 0xC2, |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
104 MANUFACT_SAMSUNG = 0xEC, |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
105 MANUFACT_SHARP = 0xB0, |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
106 MANUFACT_SST = 0xBF, |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
107 MANUFACT_TOSHIBA = 0x98, |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
108 MANUFACT_RAM = 0xFE, // Ram |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
109 MANUFACT_TEST = 0x54 // 'T'est manufacturer |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
110 }; |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
111 |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
112 |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
113 // Flash block information for one ffs block (flash sector). Note that the |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
114 // ffs block definition might be of a smaller size then the physical flash |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
115 // sector. The ffs blocks must be defined in ascending order of addresses. |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
116 struct block_info_s { |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
117 uint32 offset; |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
118 uint8 size_ld; // log2 of block size |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
119 uint8 unused1; |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
120 uint8 unused2; |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
121 uint8 unused3; |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
122 }; |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
123 |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
124 |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
125 // General flash information for one flash device |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
126 struct flash_info_s { |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
127 const struct block_info_s *binfo; // block info array for this device |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
128 char *base; // base flash address of ffs blocks |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
129 uint16 manufact; // read with flash A0 = 0 |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
130 uint16 device; // read with flash A0 = 1 |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
131 uint8 driver; // flash driver type |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
132 uint8 numblocks; // number of blocks defined for use by ffs |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
133 }; |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
134 extern const struct flash_info_s flash_info[]; |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
135 |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
136 enum DEVICE_STATE { |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
137 DEV_READ, |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
138 DEV_ERASE, |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
139 DEV_ERASE_SUSPEND, |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
140 DEV_WRITE |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
141 }; |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
142 |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
143 |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
144 // Note that it is *VERY* important that pointers to hardware and flash are |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
145 // declared volatile, otherwise the compiler optimizes some reads and writes |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
146 // out and this results in non-working code! |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
147 struct dev_s { |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
148 char *base; // base flash address of ffs blocks |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
149 struct block_info_s *binfo; |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
150 uint16 manufact; |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
151 uint16 device; |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
152 volatile uint16 *addr; // address being written or erased |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
153 uint16 data; // data currently being written (dev.state = WRITE) |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
154 uint32 blocksize; |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
155 uint8 blocksize_ld; |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
156 uint8 atomlog2; |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
157 uint8 driver; |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
158 uint8 state; // state of device (DEVICE_STATE) |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
159 uint8 numblocks; |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
160 uint8 atomsize; |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
161 uint8 atomnotmask; |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
162 }; |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
163 extern struct dev_s dev; |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
164 |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
165 |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
166 // Flash low level driver function pointers |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
167 struct ffsdrv_s { |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
168 int (* init)(void); |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
169 void (* erase)(uint8 block); |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
170 void (* write_halfword)(volatile uint16 *dst, uint16 value); |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
171 void (* write)(void *dst, const void *src, uint16 size); |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
172 void (* write_end)(void); |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
173 void (* erase_suspend)(void); |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
174 void (* erase_resume)(void); |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
175 }; |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
176 extern const struct ffsdrv_s ffsdrv; /* const added for FreeCalypso */ |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
177 |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
178 |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
179 /****************************************************************************** |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
180 * Function Prototypes |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
181 ******************************************************************************/ |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
182 |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
183 void ffsdrv_write_byte(void *dst, uint8 value); |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
184 effs_t ffsdrv_init(void); |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
185 |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
186 //extern int ffs_ram_image_address; |
6f4a12b4582f
gsm-fw FFS: starting to integrate C code
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
187 // We do it in a different way in FreeCalypso |