add const keyword to some APIs
[fw/openocd] / src / flash / nand.c
index 81a04f7a6a90850128e03994689fa3c05e9e794b..c1be276d1e6b2894a966a33cf9b600213dbc2914 100644 (file)
 #include "time_support.h"
 #include "fileio.h"
 
-static int handle_nand_list_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
-static int handle_nand_probe_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
-static int handle_nand_check_bad_blocks_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
-static int handle_nand_info_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
-static int handle_nand_write_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
-static int handle_nand_dump_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
-static int handle_nand_erase_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
-
-static int handle_nand_raw_access_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
-
 static int nand_read_page(struct nand_device_s *device, uint32_t page, uint8_t *data, uint32_t data_size, uint8_t *oob, uint32_t oob_size);
 //static int nand_read_plain(struct nand_device_s *device, uint32_t address, uint8_t *data, uint32_t data_size);
 
@@ -297,33 +287,6 @@ int nand_register_commands(struct command_context_s *cmd_ctx)
        return ERROR_OK;
 }
 
-int nand_init(struct command_context_s *cmd_ctx)
-{
-       if (nand_devices)
-       {
-               register_command(cmd_ctx, nand_cmd, "list", handle_nand_list_command, COMMAND_EXEC,
-                                                "list configured NAND flash devices");
-               register_command(cmd_ctx, nand_cmd, "info", handle_nand_info_command, COMMAND_EXEC,
-                                                "print info about NAND flash device <num>");
-               register_command(cmd_ctx, nand_cmd, "probe", handle_nand_probe_command, COMMAND_EXEC,
-                                                "identify NAND flash device <num>");
-               register_command(cmd_ctx, nand_cmd, "check_bad_blocks", handle_nand_check_bad_blocks_command, COMMAND_EXEC,
-                                                "check NAND flash device <num> for bad blocks [<offset> <length>]");
-               register_command(cmd_ctx, nand_cmd, "erase",
-                               handle_nand_erase_command, COMMAND_EXEC,
-                               "erase blocks on NAND flash device <num> [<offset> <length>]");
-               register_command(cmd_ctx, nand_cmd, "dump", handle_nand_dump_command, COMMAND_EXEC,
-                                                "dump from NAND flash device <num> <filename> "
-                                                "<offset> <length> [oob_raw | oob_only]");
-               register_command(cmd_ctx, nand_cmd, "write", handle_nand_write_command, COMMAND_EXEC,
-                                                "write to NAND flash device <num> <filename> <offset> [oob_raw | oob_only | oob_softecc | oob_softecc_kw]");
-               register_command(cmd_ctx, nand_cmd, "raw_access", handle_nand_raw_access_command, COMMAND_EXEC,
-                                                "raw access to NAND flash device <num> ['enable'|'disable']");
-       }
-
-       return ERROR_OK;
-}
-
 nand_device_t *get_nand_device_by_num(int num)
 {
        nand_device_t *p;
@@ -341,7 +304,7 @@ nand_device_t *get_nand_device_by_num(int num)
 }
 
 int nand_command_get_device_by_num(struct command_context_s *cmd_ctx,
-               char *str, nand_device_t **device)
+               const char *str, nand_device_t **device)
 {
        unsigned num;
        COMMAND_PARSE_NUMBER(uint, str, num);
@@ -1330,8 +1293,6 @@ static int handle_nand_write_command(struct command_context_s *cmd_ctx, char *cm
 
        fileio_t fileio;
 
-       duration_t duration;
-       char *duration_text;
 
        if (argc < 3)
        {
@@ -1372,7 +1333,8 @@ static int handle_nand_write_command(struct command_context_s *cmd_ctx, char *cm
                }
        }
 
-       duration_start_measure(&duration);
+       struct duration bench;
+       duration_start(&bench);
 
        if (fileio_open(&fileio, args[1], FILEIO_READ, FILEIO_BINARY) != ERROR_OK)
        {
@@ -1478,11 +1440,13 @@ static int handle_nand_write_command(struct command_context_s *cmd_ctx, char *cm
        free(page);
        oob = NULL;
        page = NULL;
-       duration_stop_measure(&duration, &duration_text);
-       command_print(cmd_ctx, "wrote file %s to NAND flash %s up to offset 0x%8.8" PRIx32 " in %s",
-               args[1], args[0], offset, duration_text);
-       free(duration_text);
-       duration_text = NULL;
+       if (duration_measure(&bench) == ERROR_OK)
+       {
+               command_print(cmd_ctx, "wrote file %s to NAND flash %s "
+                       "up to offset 0x%8.8" PRIx32 " in %fs (%0.3f kb/s)",
+                       args[1], args[0], offset, duration_elapsed(&bench),
+                       duration_kbps(&bench, fileio.size));
+       }
 
        return ERROR_OK;
 }
@@ -1506,8 +1470,6 @@ static int handle_nand_dump_command(struct command_context_s *cmd_ctx, char *cmd
        }
 
        fileio_t fileio;
-       duration_t duration;
-       char *duration_text;
 
        uint8_t *page = NULL;
        uint32_t page_size = 0;
@@ -1560,7 +1522,8 @@ static int handle_nand_dump_command(struct command_context_s *cmd_ctx, char *cmd
                return ERROR_OK;
        }
 
-       duration_start_measure(&duration);
+       struct duration bench;
+       duration_start(&bench);
 
        while (size > 0)
        {
@@ -1596,10 +1559,12 @@ static int handle_nand_dump_command(struct command_context_s *cmd_ctx, char *cmd
        oob = NULL;
        fileio_close(&fileio);
 
-       duration_stop_measure(&duration, &duration_text);
-       command_print(cmd_ctx, "dumped %lld byte in %s", fileio.size, duration_text);
-       free(duration_text);
-       duration_text = NULL;
+       if (duration_measure(&bench) == ERROR_OK)
+       {
+               command_print(cmd_ctx, "dumped %lld byte in %fs (%0.3f kb/s)",
+                       fileio.size, duration_elapsed(&bench),
+                       duration_kbps(&bench, fileio.size));
+       }
 
        return ERROR_OK;
 }
@@ -1637,3 +1602,40 @@ static int handle_nand_raw_access_command(struct command_context_s *cmd_ctx, cha
 
        return ERROR_OK;
 }
+
+int nand_init(struct command_context_s *cmd_ctx)
+{
+       if (!nand_devices)
+               return ERROR_OK;
+
+       register_command(cmd_ctx, nand_cmd, "list",
+                       handle_nand_list_command, COMMAND_EXEC,
+                       "list configured NAND flash devices");
+       register_command(cmd_ctx, nand_cmd, "info",
+                       handle_nand_info_command, COMMAND_EXEC,
+                       "print info about NAND flash device <num>");
+       register_command(cmd_ctx, nand_cmd, "probe",
+                       handle_nand_probe_command, COMMAND_EXEC,
+                       "identify NAND flash device <num>");
+
+       register_command(cmd_ctx, nand_cmd, "check_bad_blocks",
+                       handle_nand_check_bad_blocks_command, COMMAND_EXEC,
+                       "check NAND flash device <num> for bad blocks [<offset> <length>]");
+       register_command(cmd_ctx, nand_cmd, "erase",
+                       handle_nand_erase_command, COMMAND_EXEC,
+                       "erase blocks on NAND flash device <num> [<offset> <length>]");
+       register_command(cmd_ctx, nand_cmd, "dump",
+                       handle_nand_dump_command, COMMAND_EXEC,
+                       "dump from NAND flash device <num> <filename> "
+                        "<offset> <length> [oob_raw | oob_only]");
+       register_command(cmd_ctx, nand_cmd, "write",
+                       handle_nand_write_command, COMMAND_EXEC,
+                       "write to NAND flash device <num> <filename> <offset> "
+                       "[oob_raw | oob_only | oob_softecc | oob_softecc_kw]");
+
+       register_command(cmd_ctx, nand_cmd, "raw_access",
+                       handle_nand_raw_access_command, COMMAND_EXEC,
+                       "raw access to NAND flash device <num> ['enable'|'disable']");
+
+       return ERROR_OK;
+}