]> git.sur5r.net Git - openocd/commitdiff
NAND/TCL: prepare for common "target" reference
authorAntonio Borneo <borneo.antonio@gmail.com>
Fri, 31 Dec 2010 11:46:01 +0000 (19:46 +0800)
committerØyvind Harboe <oyvind.harboe@zylin.com>
Sun, 2 Jan 2011 18:56:59 +0000 (19:56 +0100)
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>
src/flash/nand/core.h
src/flash/nand/tcl.c

index 709c37b389142b9c5c48356b3a0e50a79762ddd7..73fd0edd118703179c3a687811086249ef726db3 100644 (file)
@@ -60,6 +60,7 @@ struct nand_ecclayout {
 struct nand_device
 {
        const char *name;
+       struct target *target;
        struct nand_flash_controller *controller;
        void *controller_priv;
        struct nand_manufacturer *manufacturer;
index 70584fff52c35b439da849b42fe78c709e79bff2..e4bfb4d1c9f21c8c89d96a50010041a3c2ce4ae0 100644 (file)
@@ -27,6 +27,7 @@
 #include "core.h"
 #include "imp.h"
 #include "fileio.h"
+#include <target/target.h>
 
 // to be removed
 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,
                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)
        {
-               int retval = register_commands(CMD_CTX, NULL,
+               retval = register_commands(CMD_CTX, NULL,
                                controller->commands);
                if (ERROR_OK != 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->target = target;
        c->controller = controller;
        c->controller_priv = NULL;
        c->manufacturer = NULL;
@@ -557,7 +579,7 @@ static COMMAND_HELPER(create_nand_device, const char *bank_name,
        c->use_raw = 0;
        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)
        {
                LOG_ERROR("'%s' driver rejected nand flash", controller->name);