FreeCalypso > hg > freecalypso-sw
annotate gsm-fw/services/ffs/drv.h @ 484:c617a6adcb69
top level README: status update
| author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> | 
|---|---|
| date | Sun, 29 Jun 2014 19:05:52 +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 | 
