Mercurial > flash_v2
annotate packages/io/flash/current/include/flash.h @ 1746:172edf8a96d8
Eliminate cyg_flash_code_overlaps()
| author | bartv |
|---|---|
| date | Sun, 21 Nov 2004 18:39:15 +0000 |
| parents | 49e24a462730 |
| children | 80232dbac7fb |
| rev | line source |
|---|---|
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
diff
changeset
|
1 //========================================================================== |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
diff
changeset
|
2 // |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
diff
changeset
|
3 // flash.h |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
diff
changeset
|
4 // |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
diff
changeset
|
5 // Flash programming - external interfaces |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
diff
changeset
|
6 // |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
diff
changeset
|
7 //========================================================================== |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
8 //####ECOSGPLCOPYRIGHTBEGIN#### |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
9 // ------------------------------------------- |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
10 // This file is part of eCos, the Embedded Configurable Operating System. |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
11 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. |
|
1223
dbcfe4e0dbd2
New platform - TAMS MOAB - and generic changes to support it
gthomas
parents:
210
diff
changeset
|
12 // Copyright (C) 2003 Gary Thomas |
| 1706 | 13 // copyright (C) 2004 Andrew Lunn |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
14 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
15 // eCos is free software; you can redistribute it and/or modify it under |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
16 // the terms of the GNU General Public License as published by the Free |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
17 // Software Foundation; either version 2 or (at your option) any later version. |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
18 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
19 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
20 // WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
21 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
22 // for more details. |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
23 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
24 // You should have received a copy of the GNU General Public License along |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
25 // with eCos; if not, write to the Free Software Foundation, Inc., |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
26 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
27 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
28 // As a special exception, if other files instantiate templates or use macros |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
29 // or inline functions from this file, or you compile this file and link it |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
30 // with other works to produce a work based on this file, this file does not |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
31 // by itself cause the resulting work to be covered by the GNU General Public |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
32 // License. However the source code for this file must still be made available |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
33 // in accordance with section (3) of the GNU General Public License. |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
34 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
35 // This exception does not invalidate any other reasons why a work based on |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
36 // this file might be covered by the GNU General Public License. |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
37 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
38 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. |
|
210
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
39 // at http://sources.redhat.com/ecos/ecos-license/ |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
40 // ------------------------------------------- |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
41 //####ECOSGPLCOPYRIGHTEND#### |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
diff
changeset
|
42 //========================================================================== |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
diff
changeset
|
43 //#####DESCRIPTIONBEGIN#### |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
diff
changeset
|
44 // |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
diff
changeset
|
45 // Author(s): gthomas |
| 1706 | 46 // Contributors: gthomas, Andrew Lunn |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
diff
changeset
|
47 // Date: 2000-07-14 |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
diff
changeset
|
48 // Purpose: |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
diff
changeset
|
49 // Description: |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
diff
changeset
|
50 // |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
diff
changeset
|
51 //####DESCRIPTIONEND#### |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
diff
changeset
|
52 // |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
diff
changeset
|
53 //========================================================================== |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
diff
changeset
|
54 |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
diff
changeset
|
55 #ifndef _IO_FLASH_H_ |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
diff
changeset
|
56 #define _IO_FLASH_H_ |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
diff
changeset
|
57 |
| 1706 | 58 #include <pkgconf/system.h> |
|
119
77cec8369160
Merge from eCos master repository on 2000-09-01-07:47:03-BST
jlarmour
parents:
115
diff
changeset
|
59 #include <pkgconf/io_flash.h> |
|
141
450e4e1f1e80
Merge from eCos master repository on 2000-11-27-23:09:27-GMT
jlarmour
parents:
136
diff
changeset
|
60 #include <cyg/hal/hal_cache.h> |
| 1706 | 61 #include <cyg/hal/hal_tables.h> |
| 62 #ifdef CYGPKG_KERNEL | |
| 63 #include <cyg/kernel/kapi.h> | |
| 64 #endif | |
|
119
77cec8369160
Merge from eCos master repository on 2000-09-01-07:47:03-BST
jlarmour
parents:
115
diff
changeset
|
65 |
| 1706 | 66 typedef CYG_ADDRESS cyg_flashaddr_t; |
| 67 | |
| 68 typedef struct cyg_block_info | |
| 69 { | |
| 70 size_t block_size; | |
| 71 cyg_uint32 blocks; | |
| 72 } cyg_block_info_t; | |
| 73 | |
| 74 // Information about what one device driver drives | |
| 75 typedef struct { | |
| 76 cyg_flashaddr_t start; // First address | |
| 77 cyg_flashaddr_t end; // Last address | |
| 78 cyg_uint32 num_block_infos; // Number of entries | |
| 79 cyg_block_info_t *block_info; // Info about block sizes | |
| 80 } cyg_flash_info_t; | |
| 81 | |
| 82 typedef int cyg_flash_printf(const char *fmt, ...); | |
| 83 __externC int cyg_flash_init( cyg_flash_printf *pf ); | |
| 84 __externC int cyg_flash_get_info(cyg_uint32 devno, | |
| 85 cyg_flash_info_t * info); | |
| 86 __externC int cyg_flash_get_info_addr(cyg_flashaddr_t flash_base, | |
| 87 cyg_flash_info_t * info); | |
| 88 __externC int cyg_flash_verify_addr(const cyg_flashaddr_t address); | |
| 89 __externC size_t cyg_flash_block_size(const cyg_flashaddr_t flash_base); | |
| 90 __externC int cyg_flash_read(cyg_flashaddr_t flash_base, | |
| 91 const void *ram_base, | |
| 92 const size_t len, | |
| 93 cyg_flashaddr_t *err_address); | |
| 94 __externC int cyg_flash_erase(const cyg_flashaddr_t flash_base, | |
| 95 const size_t len, | |
| 96 cyg_flashaddr_t *err_address); | |
| 97 __externC int cyg_flash_program(const cyg_flashaddr_t flash_base, | |
| 98 void *ram_base, | |
| 99 const size_t len, | |
| 100 cyg_flashaddr_t *err_address); | |
| 101 __externC int cyg_flash_lock(const cyg_flashaddr_t flash_base, | |
| 102 const size_t len, | |
| 103 cyg_flashaddr_t *err_address); | |
| 104 __externC int cyg_flash_unlock(const cyg_flashaddr_t flash_base, | |
| 105 const size_t len, | |
| 106 cyg_flashaddr_t *err_address); | |
| 107 __externC const char *cyg_flash_errmsg(const int err); | |
| 108 #ifdef CYGPKG_KERNEL | |
| 109 __externC int cyg_flash_mutex_lock(const cyg_flashaddr_t from, | |
| 110 const size_t len); | |
| 111 __externC int cyg_flash_mutex_unlock(const cyg_flashaddr_t from, | |
| 112 const size_t len); | |
| 113 #endif | |
| 114 | |
| 115 #define CYG_FLASH_ERR_OK 0x00 // No error - operation complete | |
| 116 #define CYG_FLASH_ERR_INVALID 0x01 // Invalid FLASH address | |
| 117 #define CYG_FLASH_ERR_ERASE 0x02 // Error trying to erase | |
| 118 #define CYG_FLASH_ERR_LOCK 0x03 // Error trying to lock/unlock | |
| 119 #define CYG_FLASH_ERR_PROGRAM 0x04 // Error trying to program | |
| 120 #define CYG_FLASH_ERR_PROTOCOL 0x05 // Generic error | |
| 121 #define CYG_FLASH_ERR_PROTECT 0x06 // Device/region is write-protected | |
| 122 #define CYG_FLASH_ERR_NOT_INIT 0x07 // FLASH info not yet initialized | |
| 123 #define CYG_FLASH_ERR_HWR 0x08 // Hardware (configuration?) problem | |
| 124 #define CYG_FLASH_ERR_ERASE_SUSPEND 0x09 // Device is in erase suspend mode | |
| 125 #define CYG_FLASH_ERR_PROGRAM_SUSPEND 0x0a // Device is in program suspend mode | |
| 126 #define CYG_FLASH_ERR_DRV_VERIFY 0x0b // Driver failed to verify data | |
| 127 #define CYG_FLASH_ERR_DRV_TIMEOUT 0x0c // Driver timed out | |
| 128 #define CYG_FLASH_ERR_DRV_WRONG_PART 0x0d // Driver does not support device | |
| 129 #define CYG_FLASH_ERR_LOW_VOLTAGE 0x0e // Not enough juice to complete job | |
| 130 | |
| 131 #ifdef CYGSEM_IO_FLASH_LEGACY_API | |
|
184
022f1e506033
Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
177
diff
changeset
|
132 typedef int _printf(const char *fmt, ...); |
|
162
2395031e7a66
Merge from eCos master repository on 2001-06-15-06:43:03-BST
jlarmour
parents:
156
diff
changeset
|
133 |
| 1389 | 134 externC int flash_init(_printf *pf); |
|
141
450e4e1f1e80
Merge from eCos master repository on 2000-11-27-23:09:27-GMT
jlarmour
parents:
136
diff
changeset
|
135 externC int flash_erase(void *base, int len, void **err_address); |
| 1706 | 136 externC int flash_program(void *flash_base, void *ram_base, int len, |
| 137 void **err_address); | |
| 138 externC int flash_read(void *flash_base, void *ram_base, int len, | |
| 139 void **err_address); | |
|
143
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
141
diff
changeset
|
140 externC void flash_dev_query(void *data); |
|
177
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
174
diff
changeset
|
141 #ifdef CYGHWR_IO_FLASH_BLOCK_LOCKING |
|
141
450e4e1f1e80
Merge from eCos master repository on 2000-11-27-23:09:27-GMT
jlarmour
parents:
136
diff
changeset
|
142 externC int flash_lock(void *base, int len, void **err_address); |
|
450e4e1f1e80
Merge from eCos master repository on 2000-11-27-23:09:27-GMT
jlarmour
parents:
136
diff
changeset
|
143 externC int flash_unlock(void *base, int len, void **err_address); |
|
119
77cec8369160
Merge from eCos master repository on 2000-09-01-07:47:03-BST
jlarmour
parents:
115
diff
changeset
|
144 #endif |
|
141
450e4e1f1e80
Merge from eCos master repository on 2000-11-27-23:09:27-GMT
jlarmour
parents:
136
diff
changeset
|
145 externC int flash_verify_addr(void *base); |
|
450e4e1f1e80
Merge from eCos master repository on 2000-11-27-23:09:27-GMT
jlarmour
parents:
136
diff
changeset
|
146 externC int flash_get_limits(void *base, void **start, void **end); |
|
450e4e1f1e80
Merge from eCos master repository on 2000-11-27-23:09:27-GMT
jlarmour
parents:
136
diff
changeset
|
147 externC int flash_get_block_info(int *block_size, int *blocks); |
|
450e4e1f1e80
Merge from eCos master repository on 2000-11-27-23:09:27-GMT
jlarmour
parents:
136
diff
changeset
|
148 externC bool flash_code_overlaps(void *start, void *end); |
|
450e4e1f1e80
Merge from eCos master repository on 2000-11-27-23:09:27-GMT
jlarmour
parents:
136
diff
changeset
|
149 externC char *flash_errmsg(int err); |
| 1706 | 150 #endif // CYGSEM_IO_FLASH_LEGACY_API |
|
141
450e4e1f1e80
Merge from eCos master repository on 2000-11-27-23:09:27-GMT
jlarmour
parents:
136
diff
changeset
|
151 |
| 1745 | 152 #if defined(CYGSEM_IO_FLASH_LEGACY_API) || defined(CYGHWR_IO_FLASH_DEVICE_LEGACY) |
| 1706 | 153 #define FLASH_ERR_OK CYG_FLASH_ERR_OK |
| 154 #define FLASH_ERR_INVALID CYG_FLASH_ERR_INVALID | |
| 155 #define FLASH_ERR_ERASE CYG_FLASH_ERR_ERASE | |
| 156 #define FLASH_ERR_LOCK CYG_FLASH_ERR_LOCK | |
| 157 #define FLASH_ERR_PROGRAM CYG_FLASH_ERR_PROGRAM | |
| 158 #define FLASH_ERR_PROTOCOL CYG_FLASH_ERR_PROTOCOL | |
| 159 #define FLASH_ERR_PROTECT CYG_FLASH_ERR_PROTECT | |
| 160 #define FLASH_ERR_NOT_INIT CYG_FLASH_ERR_NOT_INIT | |
| 161 #define FLASH_ERR_HWR CYG_FLASH_ERR_HWR | |
| 162 #define FLASH_ERR_ERASE_SUSPEND CYG_FLASH_ERR_ERASE_SUSPEND | |
| 163 #define FLASH_ERR_PROGRAM_SUSPEND CYG_FLASH_ERR_PROGRAM_SUSPEND | |
| 164 #define FLASH_ERR_DRV_VERIFY CYG_FLASH_ERR_DRV_VERIFY | |
| 165 #define FLASH_ERR_DRV_TIMEOUT CYG_FLASH_ERR_DRV_TIMEOUT | |
| 166 #define FLASH_ERR_DRV_WRONG_PART CYG_FLASH_ERR_DRV_WRONG_PART | |
| 167 #define FLASH_ERR_LOW_VOLTAGE CYG_FLASH_ERR_LOW_VOLTAGE | |
| 168 #endif | |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
diff
changeset
|
169 |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
170 #ifdef CYGPKG_IO_FLASH_BLOCK_DEVICE |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
171 typedef struct { |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
172 CYG_ADDRESS offset; |
| 1706 | 173 size_t len; |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
174 int flasherr; |
| 1706 | 175 cyg_flashaddr_t *err_address; |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
176 } cyg_io_flash_getconfig_erase_t; |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
177 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
178 typedef struct { |
| 1706 | 179 size_t dev_size; |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
180 } cyg_io_flash_getconfig_devsize_t; |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
181 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
182 typedef struct { |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
183 CYG_ADDRESS offset; |
| 1706 | 184 size_t block_size; |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
185 } cyg_io_flash_getconfig_blocksize_t; |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
186 #endif |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
187 |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
diff
changeset
|
188 #ifdef _FLASH_PRIVATE_ |
| 1706 | 189 #include <cyg/io/flash_priv.h> |
|
174
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
172
diff
changeset
|
190 #endif |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
172
diff
changeset
|
191 |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
diff
changeset
|
192 #endif // _IO_FLASH_H_ |
