allow flash/nand banks commands to accept names
Add get_flash_bank_by_name (and get_nand_device_by_name) helpers to retrieves struct flash_bank * (struct nand_device *) given a driver name and an (optional) driver-specific bank index. These are used to extend flash_command_get_bank_by_num (and nand_command_get_device_by_num) to allow all flash (nand) commands to reference defined banks by name, not just by number. To avoid some code duplication, add the flash/common.[ch] files to hold functionality common to both types driver. The first two methods are helpers for the above routines to find a bank specified by a "name" or "name.index" string. get_flash_name_index() finds the '.index' portion, while flash_driver_name_matches() performs the string portion matching.
This commit is contained in:
@@ -28,6 +28,7 @@
|
||||
#endif
|
||||
|
||||
#include "flash.h"
|
||||
#include "common.h"
|
||||
#include "image.h"
|
||||
#include "time_support.h"
|
||||
|
||||
@@ -180,6 +181,23 @@ int flash_get_bank_count(void)
|
||||
return i;
|
||||
}
|
||||
|
||||
struct flash_bank *get_flash_bank_by_name(const char *name)
|
||||
{
|
||||
unsigned requested = get_flash_name_index(name);
|
||||
unsigned found = 0;
|
||||
|
||||
struct flash_bank *bank;
|
||||
for (bank = flash_banks; NULL != bank; bank = bank->next)
|
||||
{
|
||||
if (!flash_driver_name_matches(bank->driver->name, name))
|
||||
continue;
|
||||
if (++found < requested)
|
||||
continue;
|
||||
return bank;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct flash_bank *get_flash_bank_by_num(int num)
|
||||
{
|
||||
struct flash_bank *p = get_flash_bank_by_num_noprobe(num);
|
||||
@@ -198,10 +216,14 @@ struct flash_bank *get_flash_bank_by_num(int num)
|
||||
return p;
|
||||
}
|
||||
|
||||
COMMAND_HELPER(flash_command_get_bank_by_num,
|
||||
unsigned name_index, struct flash_bank **bank)
|
||||
COMMAND_HELPER(flash_command_get_bank_by_num, unsigned name_index,
|
||||
struct flash_bank **bank)
|
||||
{
|
||||
const char *name = CMD_ARGV[name_index];
|
||||
*bank = get_flash_bank_by_name(name);
|
||||
if (*bank)
|
||||
return ERROR_OK;
|
||||
|
||||
unsigned bank_num;
|
||||
COMMAND_PARSE_NUMBER(uint, name, bank_num);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user