diff packages/io/flash/current/src/legacy_api.c @ 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 3845779eca10
children 96ec7e534d98
line wrap: on
line diff
--- 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