pld: use static registration instead of callback
authorZachary T Welch <zw@superlucidity.net>
Mon, 23 Nov 2009 17:30:02 +0000 (09:30 -0800)
committerZachary T Welch <zw@superlucidity.net>
Wed, 25 Nov 2009 05:37:33 +0000 (21:37 -0800)
Remove register_callbacks from pld_device structure, using an array
of command_registration records instead.

src/pld/pld.c
src/pld/pld.h
src/pld/virtex2.c

index 421fc61..24afd07 100644 (file)
@@ -74,17 +74,22 @@ COMMAND_HANDLER(handle_pld_device_command)
                        struct pld_device *p, *c;
 
                        /* register pld specific commands */
-                       if (pld_drivers[i]->register_commands(CMD_CTX) != ERROR_OK)
-                       {
-                               LOG_ERROR("couldn't register '%s' commands", CMD_ARGV[0]);
-                               exit(-1);
+                       int retval;
+                       if (pld_drivers[i]->commands) {
+                               retval = register_commands(CMD_CTX, NULL, 
+                                               pld_drivers[i]->commands);
+                               if (ERROR_OK != retval)
+                               {
+                                       LOG_ERROR("couldn't register '%s' commands", CMD_ARGV[0]);
+                                       return ERROR_FAIL;
+                               }
                        }
 
                        c = malloc(sizeof(struct pld_device));
                        c->driver = pld_drivers[i];
                        c->next = NULL;
 
-                       int retval = CALL_COMMAND_HANDLER(pld_drivers[i]->pld_device_command, c);
+                       retval = CALL_COMMAND_HANDLER(pld_drivers[i]->pld_device_command, c);
                        if (ERROR_OK != retval)
                        {
                                LOG_ERROR("'%s' driver rejected pld device", CMD_ARGV[0]);
index b183e3e..1ae775c 100644 (file)
@@ -31,7 +31,7 @@ struct pld_driver
 {
        char *name;
        __PLD_DEVICE_COMMAND((*pld_device_command));
-       int (*register_commands)(struct command_context *cmd_ctx);
+       const struct command_registration *commands;
        int (*load)(struct pld_device *pld_device, const char *filename);
 };
 
index 1025e61..77eb866 100644 (file)
@@ -253,14 +253,9 @@ static const struct command_registration virtex2_command_handler[] = {
        COMMAND_REGISTRATION_DONE
 };
 
-static int virtex2_register_commands(struct command_context *cmd_ctx)
-{
-       return register_commands(cmd_ctx, NULL, virtex2_command_handler);
-}
-
 struct pld_driver virtex2_pld = {
                .name = "virtex2",
-               .register_commands = &virtex2_register_commands,
+               .commands = virtex2_command_handler,
                .pld_device_command = &virtex2_pld_device_command,
                .load = &virtex2_load,
        };