Add Flash/NAND bank command argument helpers.
authorZachary T Welch <zw@superlucidity.net>
Fri, 23 Oct 2009 08:13:19 +0000 (01:13 -0700)
committerZachary T Welch <zw@superlucidity.net>
Fri, 6 Nov 2009 02:03:20 +0000 (18:03 -0800)
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.

src/flash/flash.c
src/flash/flash.h
src/flash/nand.c
src/flash/nand.h

index db04e6e52f9d982176f60d9fd309ce5787173339..aa246598e263b6a05b23ea20e12476242cc69453 100644 (file)
@@ -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;
index a7f08f63d7d98499d15cfe274f4e98ab0e7b87ae..05c4b2c48f70b81c2b4d862e0b3982c348131dd8 100644 (file)
@@ -313,6 +313,16 @@ extern int default_flash_mem_blank_check(struct flash_bank_s *bank);
  * @returns A flash_bank_t for flash bank @a num, or NULL
  */
 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.
index 6e450758053743d8658c665c0515b0db4f70d99b..d97c817d05b4c1b7108017989840ff99b815fccf 100644 (file)
@@ -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;
index b73e3304f6da2df0208ce0627b5f5d4e246348fe..d867494388c44ad0d130d7ce8080d66d91eb1afe 100644 (file)
@@ -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)