summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZachary T Welch <zw@superlucidity.net>2009-10-23 01:13:19 -0700
committerZachary T Welch <zw@superlucidity.net>2009-11-05 18:03:20 -0800
commit11e545f56091e4fa808bd57a215d6b8066b39295 (patch)
treec60d0c44f7260cafb13422bf6147c73b4a718998
parent4189fdad28c283602b80ff7bc5a43bd5963019e7 (diff)
downloadopenocd_libswd-11e545f56091e4fa808bd57a215d6b8066b39295.tar.gz
openocd_libswd-11e545f56091e4fa808bd57a215d6b8066b39295.tar.bz2
openocd_libswd-11e545f56091e4fa808bd57a215d6b8066b39295.tar.xz
openocd_libswd-11e545f56091e4fa808bd57a215d6b8066b39295.zip
Add Flash/NAND bank command argument helpers.
This eliminates redundant code for parsing and retreiving the bank specified from a script command argument. This patch was written to replace existing functionality; however, the parsing logic can be updated later to allow flash commands to accept bank names as well as their numbers.
-rw-r--r--src/flash/flash.c17
-rw-r--r--src/flash/flash.h10
-rw-r--r--src/flash/nand.c13
-rw-r--r--src/flash/nand.h5
4 files changed, 45 insertions, 0 deletions
diff --git a/src/flash/flash.c b/src/flash/flash.c
index db04e6e5..aa246598 100644
--- a/src/flash/flash.c
+++ b/src/flash/flash.c
@@ -255,6 +255,23 @@ flash_bank_t *get_flash_bank_by_num(int num)
return p;
}
+int flash_command_get_bank_by_num(
+ struct command_context_s *cmd_ctx, char *str, flash_bank_t **bank)
+{
+ unsigned bank_num;
+ COMMAND_PARSE_NUMBER(uint, str, bank_num);
+
+ *bank = get_flash_bank_by_num(bank_num);
+ if (!*bank)
+ {
+ command_print(cmd_ctx,
+ "flash bank '#%u' not found", bank_num);
+ return ERROR_INVALID_ARGUMENTS;
+ }
+ return ERROR_OK;
+}
+
+
static int handle_flash_bank_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
{
int retval;
diff --git a/src/flash/flash.h b/src/flash/flash.h
index a7f08f63..05c4b2c4 100644
--- a/src/flash/flash.h
+++ b/src/flash/flash.h
@@ -314,6 +314,16 @@ extern int default_flash_mem_blank_check(struct flash_bank_s *bank);
*/
extern flash_bank_t *get_flash_bank_by_num(int num);
/**
+ * Retreives @a bank from a command argument, reporting errors parsing
+ * the bank identifier or retreiving the specified bank.
+ * @param cmd_ctx The command context for reporting errors.
+ * @param str The string containing the bank identifier.
+ * @param bank On output, contians a pointer to the bank or NULL.
+ * @returns ERROR_OK on success, or an error indicating the problem.
+ */
+int flash_command_get_bank_by_num(
+ struct command_context_s *cmd_ctx, char *str, flash_bank_t **bank);
+/**
* Returns the flash bank like get_flash_bank_by_num(), without probing.
* @param num The flash bank number.
* @returns A flash_bank_t for flash bank @a num, or NULL.
diff --git a/src/flash/nand.c b/src/flash/nand.c
index 6e450758..d97c817d 100644
--- a/src/flash/nand.c
+++ b/src/flash/nand.c
@@ -340,6 +340,19 @@ nand_device_t *get_nand_device_by_num(int num)
return NULL;
}
+int nand_command_get_device_by_num(struct command_context_s *cmd_ctx,
+ char *str, nand_device_t **device)
+{
+ unsigned num;
+ COMMAND_PARSE_NUMBER(uint, str, num);
+ *device = get_nand_device_by_num(num);
+ if (!*device) {
+ command_print(cmd_ctx, "NAND flash device '#%s' is out of bounds", str);
+ return ERROR_INVALID_ARGUMENTS;
+ }
+ return ERROR_OK;
+}
+
static int nand_build_bbt(struct nand_device_s *device, int first, int last)
{
uint32_t page = 0x0;
diff --git a/src/flash/nand.h b/src/flash/nand.h
index b73e3304..d8674943 100644
--- a/src/flash/nand.h
+++ b/src/flash/nand.h
@@ -217,6 +217,11 @@ extern int nand_calculate_ecc_kw(struct nand_device_s *device, const uint8_t *da
extern int nand_register_commands(struct command_context_s *cmd_ctx);
extern int nand_init(struct command_context_s *cmd_ctx);
+/// helper for parsing a nand device command argument string
+int nand_command_get_device_by_num(struct command_context_s *cmd_ctx,
+ char *str, nand_device_t **device);
+
+
#define ERROR_NAND_DEVICE_INVALID (-1100)
#define ERROR_NAND_OPERATION_FAILED (-1101)
#define ERROR_NAND_OPERATION_TIMEOUT (-1102)