diff --git a/src/pld/pld.h b/src/pld/pld.h index 3db4bad0a..22f2c1377 100644 --- a/src/pld/pld.h +++ b/src/pld/pld.h @@ -24,14 +24,19 @@ struct pld_device_s; +#define __PLD_DEVICE_COMMAND(name) \ + COMMAND_HELPER(name, struct pld_device_s *pld) + typedef struct pld_driver_s { char *name; + __PLD_DEVICE_COMMAND((*pld_device_command)); int (*register_commands)(struct command_context_s *cmd_ctx); - int (*pld_device_command)(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc, struct pld_device_s *pld_device); int (*load)(struct pld_device_s *pld_device, const char *filename); } pld_driver_t; +#define PLD_DEVICE_COMMAND_HANDLER(name) static __PLD_DEVICE_COMMAND(name) + typedef struct pld_device_s { pld_driver_t *driver; diff --git a/src/pld/virtex2.c b/src/pld/virtex2.c index 3c6d61fe0..7e422fb96 100644 --- a/src/pld/virtex2.c +++ b/src/pld/virtex2.c @@ -207,8 +207,7 @@ COMMAND_HANDLER(virtex2_handle_read_stat_command) return ERROR_OK; } -static int virtex2_pld_device_command(struct command_context_s *cmd_ctx, - char *cmd, char **args, int argc, struct pld_device_s *pld_device) +PLD_DEVICE_COMMAND_HANDLER(virtex2_pld_device_command) { jtag_tap_t *tap; @@ -227,9 +226,10 @@ static int virtex2_pld_device_command(struct command_context_s *cmd_ctx, } virtex2_info = malloc(sizeof(virtex2_pld_device_t)); - pld_device->driver_priv = virtex2_info; virtex2_info->tap = tap; + pld->driver_priv = virtex2_info; + return ERROR_OK; }