Mercurial > flash_v2
annotate packages/io/flash/current/include/flash.h @ 1764:96ec7e534d98
V2 flash header files clean-up. Eliminate flash_priv.h, moving the
functionality into flash_dev.h instead.
| author | bartv |
|---|---|
| date | Tue, 22 Feb 2005 21:03:43 +0000 |
| parents | 80232dbac7fb |
| children |
| 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. |
| 1749 | 11 // copyright (C) 2004 Andrew Lunn |
| 12 // Copyright (C) eCosCentric Ltd. | |
|
1223
dbcfe4e0dbd2
New platform - TAMS MOAB - and generic changes to support it
gthomas
parents:
210
diff
changeset
|
13 // Copyright (C) 2003 Gary Thomas |
| 1749 | 14 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
15 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
16 // 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
|
17 // 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
|
18 // 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
|
19 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
20 // 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
|
21 // 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
|
22 // 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
|
23 // for more details. |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
24 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
25 // 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
|
26 // 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
|
27 // 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
|
28 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
29 // 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
|
30 // 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
|
31 // 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
|
32 // 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
|
33 // 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
|
34 // 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
|
35 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
36 // 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
|
37 // 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
|
38 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
39 // 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
|
40 // 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
|
41 // ------------------------------------------- |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
42 //####ECOSGPLCOPYRIGHTEND#### |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
diff
changeset
|
43 //========================================================================== |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
diff
changeset
|
44 //#####DESCRIPTIONBEGIN#### |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
diff
changeset
|
45 // |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
diff
changeset
|
46 // Author(s): gthomas |
| 1749 | 47 // Contributors: gthomas, Andrew Lunn, bartv |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
diff
changeset
|
48 // Date: 2000-07-14 |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
diff
changeset
|
49 // Purpose: |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
diff
changeset
|
50 // Description: |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
diff
changeset
|
51 // |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
diff
changeset
|
52 //####DESCRIPTIONEND#### |
|
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 |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
diff
changeset
|
56 #ifndef _IO_FLASH_H_ |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
diff
changeset
|
57 #define _IO_FLASH_H_ |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
diff
changeset
|
58 |
| 1706 | 59 #include <pkgconf/system.h> |
|
119
77cec8369160
Merge from eCos master repository on 2000-09-01-07:47:03-BST
jlarmour
parents:
115
diff
changeset
|
60 #include <pkgconf/io_flash.h> |
| 1749 | 61 #include <stddef.h> |
| 62 #include <cyg/infra/cyg_type.h> | |
| 1706 | 63 #ifdef CYGPKG_KERNEL |
| 64 #include <cyg/kernel/kapi.h> | |
| 65 #endif | |
|
119
77cec8369160
Merge from eCos master repository on 2000-09-01-07:47:03-BST
jlarmour
parents:
115
diff
changeset
|
66 |
| 1749 | 67 // Currently a 32-bit quantity. In future this may be 64-bits on some |
| 68 // platforms, e.g. to support very large nand flashes which can only | |
| 69 // be accessed indirectly. | |
| 1706 | 70 typedef CYG_ADDRESS cyg_flashaddr_t; |
| 71 | |
| 1749 | 72 typedef struct cyg_flash_block_info |
| 1706 | 73 { |
| 74 size_t block_size; | |
| 75 cyg_uint32 blocks; | |
| 1749 | 76 } cyg_flash_block_info_t; |
| 1706 | 77 |
| 78 // Information about what one device driver drives | |
| 79 typedef struct { | |
| 1749 | 80 cyg_flashaddr_t start; // First address |
| 81 cyg_flashaddr_t end; // Last address | |
| 82 cyg_uint32 num_block_infos; // Number of entries | |
| 83 const cyg_flash_block_info_t* block_info; // Info about block sizes | |
| 1706 | 84 } cyg_flash_info_t; |
| 85 | |
| 86 typedef int cyg_flash_printf(const char *fmt, ...); | |
| 87 __externC int cyg_flash_init( cyg_flash_printf *pf ); | |
| 88 __externC int cyg_flash_get_info(cyg_uint32 devno, | |
| 89 cyg_flash_info_t * info); | |
| 1749 | 90 __externC int cyg_flash_get_info_addr(const cyg_flashaddr_t flash_base, |
| 1706 | 91 cyg_flash_info_t * info); |
| 92 __externC int cyg_flash_verify_addr(const cyg_flashaddr_t address); | |
| 93 __externC size_t cyg_flash_block_size(const cyg_flashaddr_t flash_base); | |
| 1749 | 94 __externC int cyg_flash_read(const cyg_flashaddr_t flash_base, |
| 95 void *ram_base, | |
| 96 size_t len, | |
| 1706 | 97 cyg_flashaddr_t *err_address); |
| 1749 | 98 __externC int cyg_flash_erase(cyg_flashaddr_t flash_base, |
| 99 size_t len, | |
| 1706 | 100 cyg_flashaddr_t *err_address); |
| 1749 | 101 __externC int cyg_flash_program(cyg_flashaddr_t flash_base, |
| 102 const void *ram_base, | |
| 103 size_t len, | |
| 1706 | 104 cyg_flashaddr_t *err_address); |
| 105 __externC int cyg_flash_lock(const cyg_flashaddr_t flash_base, | |
| 1749 | 106 size_t len, |
| 1706 | 107 cyg_flashaddr_t *err_address); |
| 108 __externC int cyg_flash_unlock(const cyg_flashaddr_t flash_base, | |
| 1749 | 109 size_t len, |
| 1706 | 110 cyg_flashaddr_t *err_address); |
| 111 __externC const char *cyg_flash_errmsg(const int err); | |
| 112 #ifdef CYGPKG_KERNEL | |
| 113 __externC int cyg_flash_mutex_lock(const cyg_flashaddr_t from, | |
| 1749 | 114 size_t len); |
| 1706 | 115 __externC int cyg_flash_mutex_unlock(const cyg_flashaddr_t from, |
| 1749 | 116 size_t len); |
| 1706 | 117 #endif |
| 118 | |
| 119 #define CYG_FLASH_ERR_OK 0x00 // No error - operation complete | |
| 120 #define CYG_FLASH_ERR_INVALID 0x01 // Invalid FLASH address | |
| 121 #define CYG_FLASH_ERR_ERASE 0x02 // Error trying to erase | |
| 122 #define CYG_FLASH_ERR_LOCK 0x03 // Error trying to lock/unlock | |
| 123 #define CYG_FLASH_ERR_PROGRAM 0x04 // Error trying to program | |
| 124 #define CYG_FLASH_ERR_PROTOCOL 0x05 // Generic error | |
| 125 #define CYG_FLASH_ERR_PROTECT 0x06 // Device/region is write-protected | |
| 126 #define CYG_FLASH_ERR_NOT_INIT 0x07 // FLASH info not yet initialized | |
| 127 #define CYG_FLASH_ERR_HWR 0x08 // Hardware (configuration?) problem | |
| 128 #define CYG_FLASH_ERR_ERASE_SUSPEND 0x09 // Device is in erase suspend mode | |
| 129 #define CYG_FLASH_ERR_PROGRAM_SUSPEND 0x0a // Device is in program suspend mode | |
| 130 #define CYG_FLASH_ERR_DRV_VERIFY 0x0b // Driver failed to verify data | |
| 131 #define CYG_FLASH_ERR_DRV_TIMEOUT 0x0c // Driver timed out | |
| 132 #define CYG_FLASH_ERR_DRV_WRONG_PART 0x0d // Driver does not support device | |
| 133 #define CYG_FLASH_ERR_LOW_VOLTAGE 0x0e // Not enough juice to complete job | |
| 134 | |
| 135 #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
|
136 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
|
137 |
| 1389 | 138 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
|
139 externC int flash_erase(void *base, int len, void **err_address); |
| 1706 | 140 externC int flash_program(void *flash_base, void *ram_base, int len, |
| 141 void **err_address); | |
| 142 externC int flash_read(void *flash_base, void *ram_base, int len, | |
| 143 void **err_address); | |
|
143
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
141
diff
changeset
|
144 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
|
145 #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
|
146 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
|
147 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
|
148 #endif |
|
141
450e4e1f1e80
Merge from eCos master repository on 2000-11-27-23:09:27-GMT
jlarmour
parents:
136
diff
changeset
|
149 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
|
150 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
|
151 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
|
152 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
|
153 externC char *flash_errmsg(int err); |
| 1706 | 154 #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
|
155 |
| 1745 | 156 #if defined(CYGSEM_IO_FLASH_LEGACY_API) || defined(CYGHWR_IO_FLASH_DEVICE_LEGACY) |
| 1706 | 157 #define FLASH_ERR_OK CYG_FLASH_ERR_OK |
| 158 #define FLASH_ERR_INVALID CYG_FLASH_ERR_INVALID | |
| 159 #define FLASH_ERR_ERASE CYG_FLASH_ERR_ERASE | |
| 160 #define FLASH_ERR_LOCK CYG_FLASH_ERR_LOCK | |
| 161 #define FLASH_ERR_PROGRAM CYG_FLASH_ERR_PROGRAM | |
| 162 #define FLASH_ERR_PROTOCOL CYG_FLASH_ERR_PROTOCOL | |
| 163 #define FLASH_ERR_PROTECT CYG_FLASH_ERR_PROTECT | |
| 164 #define FLASH_ERR_NOT_INIT CYG_FLASH_ERR_NOT_INIT | |
| 165 #define FLASH_ERR_HWR CYG_FLASH_ERR_HWR | |
| 166 #define FLASH_ERR_ERASE_SUSPEND CYG_FLASH_ERR_ERASE_SUSPEND | |
| 167 #define FLASH_ERR_PROGRAM_SUSPEND CYG_FLASH_ERR_PROGRAM_SUSPEND | |
| 168 #define FLASH_ERR_DRV_VERIFY CYG_FLASH_ERR_DRV_VERIFY | |
| 169 #define FLASH_ERR_DRV_TIMEOUT CYG_FLASH_ERR_DRV_TIMEOUT | |
| 170 #define FLASH_ERR_DRV_WRONG_PART CYG_FLASH_ERR_DRV_WRONG_PART | |
| 171 #define FLASH_ERR_LOW_VOLTAGE CYG_FLASH_ERR_LOW_VOLTAGE | |
| 172 #endif | |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
diff
changeset
|
173 |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
174 #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
|
175 typedef struct { |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
176 CYG_ADDRESS offset; |
| 1706 | 177 size_t len; |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
178 int flasherr; |
| 1706 | 179 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
|
180 } 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
|
181 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
182 typedef struct { |
| 1706 | 183 size_t dev_size; |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
184 } 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
|
185 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
186 typedef struct { |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
187 CYG_ADDRESS offset; |
| 1706 | 188 size_t block_size; |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
diff
changeset
|
189 } 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
|
190 #endif |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
184
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_ |
