NAND/TCL: prepare for common "target" reference

Every NAND driver keeps private copy of "target"
structure.
Prepare infostructure to move private "target"
copy in common/shared struct nand_device.

Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com>
This commit is contained in:
Antonio Borneo 2010-12-31 19:46:01 +08:00 committed by Øyvind Harboe
parent 21a1c6ec33
commit 5f3603b8ef
2 changed files with 26 additions and 3 deletions

View File

@ -60,6 +60,7 @@ struct nand_ecclayout {
struct nand_device struct nand_device
{ {
const char *name; const char *name;
struct target *target;
struct nand_flash_controller *controller; struct nand_flash_controller *controller;
void *controller_priv; void *controller_priv;
struct nand_manufacturer *manufacturer; struct nand_manufacturer *manufacturer;

View File

@ -27,6 +27,7 @@
#include "core.h" #include "core.h"
#include "imp.h" #include "imp.h"
#include "fileio.h" #include "fileio.h"
#include <target/target.h>
// to be removed // to be removed
extern struct nand_device *nand_devices; extern struct nand_device *nand_devices;
@ -537,16 +538,37 @@ COMMAND_HANDLER(handle_nand_list_drivers)
static COMMAND_HELPER(create_nand_device, const char *bank_name, static COMMAND_HELPER(create_nand_device, const char *bank_name,
struct nand_flash_controller *controller) struct nand_flash_controller *controller)
{ {
struct nand_device *c;
struct target *target;
int retval;
if (CMD_ARGC < 2)
{
LOG_ERROR("missing target");
return ERROR_COMMAND_ARGUMENT_INVALID;
}
target = get_target(CMD_ARGV[1]);
if (!target) {
LOG_ERROR("invalid target %s", CMD_ARGV[1]);
return ERROR_COMMAND_ARGUMENT_INVALID;
}
if (NULL != controller->commands) if (NULL != controller->commands)
{ {
int retval = register_commands(CMD_CTX, NULL, retval = register_commands(CMD_CTX, NULL,
controller->commands); controller->commands);
if (ERROR_OK != retval) if (ERROR_OK != retval)
return retval; return retval;
} }
struct nand_device *c = malloc(sizeof(struct nand_device)); c = malloc(sizeof(struct nand_device));
if (c == NULL)
{
LOG_ERROR("End of memory");
return ERROR_FAIL;
}
c->name = strdup(bank_name); c->name = strdup(bank_name);
c->target = target;
c->controller = controller; c->controller = controller;
c->controller_priv = NULL; c->controller_priv = NULL;
c->manufacturer = NULL; c->manufacturer = NULL;
@ -557,7 +579,7 @@ static COMMAND_HELPER(create_nand_device, const char *bank_name,
c->use_raw = 0; c->use_raw = 0;
c->next = NULL; c->next = NULL;
int retval = CALL_COMMAND_HANDLER(controller->nand_device_command, c); retval = CALL_COMMAND_HANDLER(controller->nand_device_command, c);
if (ERROR_OK != retval) if (ERROR_OK != retval)
{ {
LOG_ERROR("'%s' driver rejected nand flash", controller->name); LOG_ERROR("'%s' driver rejected nand flash", controller->name);