Mercurial > flash_v2
changeset 1722:c4240af0fa28
* removed the functions cyg_flash_get_limits and
cyg_flash_get_block_info. Reimplemented the legacy functions
that depended on them and flashiodev.c
| author | asl |
|---|---|
| date | Sat, 21 Aug 2004 13:47:55 +0000 |
| parents | 16115b7a4b8c |
| children | 0cc13d07a67e |
| files | packages/io/flash/current/ChangeLog packages/io/flash/current/doc/flash.sgml packages/io/flash/current/include/flash.h packages/io/flash/current/src/flash.c packages/io/flash/current/src/flashiodev.c packages/io/flash/current/src/legacy_api.c |
| diffstat | 6 files changed, 49 insertions(+), 70 deletions(-) [+] |
line wrap: on
line diff
--- a/packages/io/flash/current/ChangeLog +++ b/packages/io/flash/current/ChangeLog @@ -1,3 +1,9 @@ +2004-08-21 Andrew Lunn <andrew.lunn@ascom.ch> + + * removed the functions cyg_flash_get_limits and + cyg_flash_get_block_info. Reimplemented the legacy functions + that depended on them and flashiodev.c + 2004-08-19 Andrew Lunn <andrew.lunn@ascom.ch> * src/flashiodev.c Ordering problem again. If an invalid name is
--- a/packages/io/flash/current/doc/flash.sgml +++ b/packages/io/flash/current/doc/flash.sgml @@ -146,8 +146,6 @@ The following five functions return info __externC int cyg_flash_get_info_addr(cyg_flashaddr_t flash_base, cyg_flash_info_t * info); __externC int cyg_flash_verify_addr(const flashaddr_t address); __externC int cyg_flash_code_overlaps(const flashaddr_t start, const flashaddr_t end); -__externC int cyg_flash_get_block_info(size_t *block_size, cyg_uint32 *blocks); -__externC int cyg_flash_get_limits(flashaddr_t *start, flashaddr_t *end); __extern size_t cyg_flash_block_size(const cyg_flashaddr_t flash_base); typedef struct cyg_block_info @@ -184,16 +182,6 @@ inside the address refion given. Erase a this range are very likely to cause the target to crash and burn horribly. Note the FLASH library does allow you to shoot yourself in the foot in this way.</PARA> - -<PARA>To aid with backwards compatibility the following functions have -been retained from the V1 API. However the only operate on the first -FLASH driver. The function <FUNCTION>cyg_flash_get_block_info() -</FUNCTION> returns the size and number of blocks for the first -driver. When the device has a mixture of block sizes, the size of the -"normal" block will be returned. Please read the source code to -determine exactly what this means. <FUNCTION> cyg_flash_get_limits() -</FUNCTION> returns the lower and upper memory address the first FLASH -occupies. </SECT2> <SECT2>
--- a/packages/io/flash/current/include/flash.h +++ b/packages/io/flash/current/include/flash.h @@ -88,10 +88,6 @@ typedef int cyg_flash_printf(const char __externC int cyg_flash_verify_addr(const cyg_flashaddr_t address); __externC bool cyg_flash_code_overlaps(const cyg_flashaddr_t start, const cyg_flashaddr_t end); -__externC int cyg_flash_get_block_info(size_t *block_size, - cyg_uint32 *blocks); -__externC int cyg_flash_get_limits(cyg_flashaddr_t *start, - cyg_flashaddr_t *end); __externC size_t cyg_flash_block_size(const cyg_flashaddr_t flash_base); __externC int cyg_flash_read(cyg_flashaddr_t flash_base, const void *ram_base,
--- a/packages/io/flash/current/src/flash.c +++ b/packages/io/flash/current/src/flash.c @@ -211,54 +211,6 @@ cyg_flash_verify_addr(const cyg_flashadd ((unsigned long)&_etext < (unsigned long)end))); } -// Get the start and end address of the first driver -__externC int -cyg_flash_get_limits(cyg_flashaddr_t *start, cyg_flashaddr_t *end) -{ - if (!init) { - return CYG_FLASH_ERR_NOT_INIT; - } - if (flash_head) { - *start = flash_head->start; - *end = flash_head->end; - return CYG_FLASH_ERR_OK; - } - return CYG_FLASH_ERR_INVALID; -} - -// Get the block size and number of blocks for the first driver. For -// devices with boot blocks, consolidate the boot blocks into the -// figure. -__externC int -cyg_flash_get_block_info(size_t *block_size, cyg_uint32 *blocks) -{ - size_t biggest_size=0; - cyg_uint32 i; - - - if (!init) { - return CYG_FLASH_ERR_NOT_INIT; - } - if (!flash_head) return CYG_FLASH_ERR_INVALID; - - // Find the biggest size of blocks - for (i=0; i < flash_head->num_block_infos; i++) { - if (flash_head->block_info[i].block_size > biggest_size) { - biggest_size = flash_head->block_info[i].block_size; - } - } - - // Calculate the number of biggest size blocks - *block_size = biggest_size; - *blocks = 0; - for (i=0; i < flash_head->num_block_infos; i++) { - *blocks += (flash_head->block_info[i].block_size * - flash_head->block_info[i].blocks) / - biggest_size; - } - return CYG_FLASH_ERR_OK; -} - // Return information about the Nth driver __externC int cyg_flash_get_info(cyg_uint32 Nth, cyg_flash_info_t * info)
--- a/packages/io/flash/current/src/flashiodev.c +++ b/packages/io/flash/current/src/flashiodev.c @@ -122,9 +122,10 @@ flashiodev_lookup(struct cyg_devtab_entr if (dev->use_offset) { // dev->start the contain the offset to the beginning of the block // dev->end is the length of the block - cyg_flashaddr_t start, end; - cyg_flash_get_limits(&start, &end); - dev->start = dev->start + start; + cyg_flash_info_t info; + + cyg_flash_get_info(0, &info); + dev->start = dev->start + info.start; dev->end = dev->start + dev->end; } if (dev->use_absolute) {
--- a/packages/io/flash/current/src/legacy_api.c +++ b/packages/io/flash/current/src/legacy_api.c @@ -71,14 +71,50 @@ flash_verify_addr(void *target) int flash_get_limits(void *target, void **start, void **end) { - return cyg_flash_get_limits((cyg_flashaddr_t *)start, - (cyg_flashaddr_t *)end); + int err; + cyg_flash_info_t info; + + err = cyg_flash_get_info(0, &info); + if (err != CYG_FLASH_ERR_OK) { + return err; + } + + *start = (void *)info.start; + *end = (void *)info.end; + + return CYG_FLASH_ERR_OK; } + int flash_get_block_info(int *block_size, int *blocks) { - return cyg_flash_get_block_info((size_t *)block_size, blocks); + size_t biggest_size=0; + cyg_uint32 i; + cyg_flash_info_t info; + int err; + + err = cyg_flash_get_info(0, &info); + if (err != CYG_FLASH_ERR_OK) { + return err; + } + + // Find the biggest size of blocks + for (i=0; i < info.num_block_infos; i++) { + if (info.block_info[i].block_size > biggest_size) { + biggest_size = info.block_info[i].block_size; + } + } + + // Calculate the number of biggest size blocks + *block_size = biggest_size; + *blocks = 0; + for (i=0; i < info.num_block_infos; i++) { + *blocks += (info.block_info[i].block_size * + info.block_info[i].blocks) / + biggest_size; + } + return CYG_FLASH_ERR_OK; } int
