begin moving JTAG jim handlers/helpers
[openocd.git] / src / jtag / ft2232.c
index e6498e935ee89144860e2c68a16ba9e8ab8842c0..29b6389ced29d94a6fe7962f0feafb374a2b608a 100644 (file)
  *
  * @returns ERROR_OK on success, or ERROR_JTAG_QUEUE_FAILED on failure.
  */
-static int ft2232_stableclocks(int num_cycles, jtag_command_t* cmd);
+static int ft2232_stableclocks(int num_cycles, struct jtag_command* cmd);
 
 static char *       ft2232_device_desc_A = NULL;
 static char*        ft2232_device_desc = NULL;
@@ -196,7 +196,7 @@ static struct ftdi_context ftdic;
 static enum ftdi_chip_type ftdi_device;
 #endif
 
-static jtag_command_t* first_unsent;        /* next command that has to be sent */
+static struct jtag_command* first_unsent;        /* next command that has to be sent */
 static int             require_send;
 
 /*     http://urjtag.wiki.sourceforge.net/Cable + FT2232 says:
@@ -617,9 +617,9 @@ static void ft2232_debug_dump_buffer(void)
                LOG_DEBUG("%s", line);
 }
 
-static int ft2232_send_and_recv(jtag_command_t* first, jtag_command_t* last)
+static int ft2232_send_and_recv(struct jtag_command* first, struct jtag_command* last)
 {
-       jtag_command_t* cmd;
+       struct jtag_command* cmd;
        uint8_t* buffer;
        int scan_size;
        enum scan_type  type;
@@ -721,7 +721,7 @@ static int ft2232_send_and_recv(jtag_command_t* first, jtag_command_t* last)
                        if (type != SCAN_OUT)
                        {
                                scan_size = jtag_scan_size(cmd->cmd.scan);
-                               buffer    = calloc(CEIL(scan_size, 8), 1);
+                               buffer    = calloc(DIV_ROUND_UP(scan_size, 8), 1);
                                ft2232_read_scan(type, buffer, scan_size);
                                if (jtag_read_buffer(buffer, cmd->cmd.scan) != ERROR_OK)
                                        retval = ERROR_JTAG_QUEUE_FAILED;
@@ -956,13 +956,13 @@ static void ft2232_add_scan(bool ir_scan, enum scan_type type, uint8_t* buffer,
        }
 }
 
-static int ft2232_large_scan(scan_command_t* cmd, enum scan_type type, uint8_t* buffer, int scan_size)
+static int ft2232_large_scan(struct scan_command* cmd, enum scan_type type, uint8_t* buffer, int scan_size)
 {
        int num_bytes = (scan_size + 7) / 8;
        int bits_left = scan_size;
        int cur_byte  = 0;
        int last_bit;
-       uint8_t* receive_buffer  = malloc(CEIL(scan_size, 8));
+       uint8_t* receive_buffer  = malloc(DIV_ROUND_UP(scan_size, 8));
        uint8_t* receive_pointer = receive_buffer;
        uint32_t bytes_written;
        uint32_t bytes_read;
@@ -1182,7 +1182,7 @@ static int ft2232_predict_scan_out(int scan_size, enum scan_type type)
        if (type == SCAN_IN)    /* only from device to host */
        {
                /* complete bytes */
-               predicted_size += CEIL(num_bytes, 65536) * 3;
+               predicted_size += DIV_ROUND_UP(num_bytes, 65536) * 3;
 
                /* remaining bits - 1 (up to 7) */
                predicted_size += ((scan_size - 1) % 8) ? 2 : 0;
@@ -1190,7 +1190,7 @@ static int ft2232_predict_scan_out(int scan_size, enum scan_type type)
        else    /* host to device, or bidirectional */
        {
                /* complete bytes */
-               predicted_size += num_bytes + CEIL(num_bytes, 65536) * 3;
+               predicted_size += num_bytes + DIV_ROUND_UP(num_bytes, 65536) * 3;
 
                /* remaining bits -1 (up to 7) */
                predicted_size += ((scan_size - 1) % 8) ? 3 : 0;
@@ -1206,7 +1206,7 @@ static int ft2232_predict_scan_in(int scan_size, enum scan_type type)
        if (type != SCAN_OUT)
        {
                /* complete bytes */
-               predicted_size += (CEIL(scan_size, 8) > 1) ? (CEIL(scan_size, 8) - 1) : 0;
+               predicted_size += (DIV_ROUND_UP(scan_size, 8) > 1) ? (DIV_ROUND_UP(scan_size, 8) - 1) : 0;
 
                /* remaining bits - 1 */
                predicted_size += ((scan_size - 1) % 8) ? 1 : 0;
@@ -1491,7 +1491,7 @@ static void sheevaplug_reset(int trst, int srst)
        LOG_DEBUG("trst: %i, srst: %i, high_output: 0x%2.2x, high_direction: 0x%2.2x", trst, srst, high_output, high_direction);
 }
 
-static int ft2232_execute_runtest(jtag_command_t *cmd)
+static int ft2232_execute_runtest(struct jtag_command *cmd)
 {
        int retval;
        int i;
@@ -1506,7 +1506,7 @@ static int ft2232_execute_runtest(jtag_command_t *cmd)
        predicted_size = 0;
        if (tap_get_state() != TAP_IDLE)
                predicted_size += 3;
-       predicted_size += 3 * CEIL(cmd->cmd.runtest->num_cycles, 7);
+       predicted_size += 3 * DIV_ROUND_UP(cmd->cmd.runtest->num_cycles, 7);
        if (cmd->cmd.runtest->end_state != TAP_IDLE)
                predicted_size += 3;
        if (tap_get_end_state() != TAP_IDLE)
@@ -1555,7 +1555,7 @@ static int ft2232_execute_runtest(jtag_command_t *cmd)
        return retval;
 }
 
-static int ft2232_execute_statemove(jtag_command_t *cmd)
+static int ft2232_execute_statemove(struct jtag_command *cmd)
 {
        int     predicted_size = 0;
        int     retval = ERROR_OK;
@@ -1592,7 +1592,7 @@ static int ft2232_execute_statemove(jtag_command_t *cmd)
        return retval;
 }
 
-static int ft2232_execute_pathmove(jtag_command_t *cmd)
+static int ft2232_execute_pathmove(struct jtag_command *cmd)
 {
        int     predicted_size = 0;
        int     retval = ERROR_OK;
@@ -1605,7 +1605,7 @@ static int ft2232_execute_pathmove(jtag_command_t *cmd)
                        tap_state_name(path[num_states-1]));
 
        /* only send the maximum buffer size that FT2232C can handle */
-       predicted_size = 3 * CEIL(num_states, 7);
+       predicted_size = 3 * DIV_ROUND_UP(num_states, 7);
        if (ft2232_buffer_size + predicted_size + 1 > FT2232_BUFFER_SIZE)
        {
                if (ft2232_send_and_recv(first_unsent, cmd) != ERROR_OK)
@@ -1621,7 +1621,7 @@ static int ft2232_execute_pathmove(jtag_command_t *cmd)
        return retval;
 }
 
-static int ft2232_execute_scan(jtag_command_t *cmd)
+static int ft2232_execute_scan(struct jtag_command *cmd)
 {
        uint8_t* buffer;
        int scan_size;                          /* size of IR or DR scan */
@@ -1676,7 +1676,7 @@ static int ft2232_execute_scan(jtag_command_t *cmd)
 
 }
 
-static int ft2232_execute_reset(jtag_command_t *cmd)
+static int ft2232_execute_reset(struct jtag_command *cmd)
 {
        int retval;
        int predicted_size = 0;
@@ -1708,24 +1708,24 @@ static int ft2232_execute_reset(jtag_command_t *cmd)
        return retval;
 }
 
-static int ft2232_execute_sleep(jtag_command_t *cmd)
+static int ft2232_execute_sleep(struct jtag_command *cmd)
 {
        int retval;
        retval = ERROR_OK;
 
-       DEBUG_JTAG_IO("sleep %i", cmd->cmd.sleep->us);
+       DEBUG_JTAG_IO("sleep %" PRIi32, cmd->cmd.sleep->us);
 
        if (ft2232_send_and_recv(first_unsent, cmd) != ERROR_OK)
                                retval = ERROR_JTAG_QUEUE_FAILED;
        first_unsent = cmd->next;
        jtag_sleep(cmd->cmd.sleep->us);
-       DEBUG_JTAG_IO("sleep %i usec while in %s",
+       DEBUG_JTAG_IO("sleep %" PRIi32 " usec while in %s",
                        cmd->cmd.sleep->us,
                        tap_state_name(tap_get_state()));
        return retval;
 }
 
-static int ft2232_execute_stableclocks(jtag_command_t *cmd)
+static int ft2232_execute_stableclocks(struct jtag_command *cmd)
 {
        int retval;
        retval = ERROR_OK;
@@ -1741,7 +1741,7 @@ static int ft2232_execute_stableclocks(jtag_command_t *cmd)
        return retval;
 }
 
-static int ft2232_execute_command(jtag_command_t *cmd)
+static int ft2232_execute_command(struct jtag_command *cmd)
 {
        int retval;
        retval = ERROR_OK;
@@ -1764,7 +1764,7 @@ static int ft2232_execute_command(jtag_command_t *cmd)
 
 static int ft2232_execute_queue(void)
 {
-       jtag_command_t* cmd = jtag_command_queue;       /* currently processed command */
+       struct jtag_command* cmd = jtag_command_queue;  /* currently processed command */
        int retval;
 
        first_unsent = cmd;             /* next command that has to be sent */
@@ -1949,7 +1949,7 @@ static int ft2232_init_ftd2xx(uint16_t vid, uint16_t pid, int more, int* try_mor
        {
                static const char* type_str[] =
                        {"BM", "AM", "100AX", "UNKNOWN", "2232C", "232R", "2232H", "4232H"};
-               unsigned no_of_known_types = sizeof(type_str) / sizeof(type_str[0]) - 1;
+               unsigned no_of_known_types = ARRAY_SIZE(type_str) - 1;
                unsigned type_index = ((unsigned)ftdi_device <= no_of_known_types)
                        ? ftdi_device : FT_DEVICE_UNKNOWN;
                LOG_INFO("device: %lu \"%s\"", ftdi_device, type_str[type_index]);
@@ -2034,7 +2034,7 @@ static int ft2232_init_libftdi(uint16_t vid, uint16_t pid, int more, int* try_mo
        ftdi_device = ftdic.type;
        static const char* type_str[] =
                {"AM", "BM", "2232C", "R", "2232H", "4232H", "Unknown"};
-       unsigned no_of_known_types = sizeof(type_str) / sizeof(type_str[0]) - 1;
+       unsigned no_of_known_types = ARRAY_SIZE(type_str) - 1;
        unsigned type_index = ((unsigned)ftdi_device < no_of_known_types)
                ? ftdi_device : no_of_known_types;
        LOG_DEBUG("FTDI chip type: %i \"%s\"", (int)ftdi_device, type_str[type_index]);
@@ -2801,9 +2801,9 @@ COMMAND_HANDLER(ft2232_handle_device_desc_command)
 {
        char *cp;
        char buf[200];
-       if (argc == 1)
+       if (CMD_ARGC == 1)
        {
-               ft2232_device_desc = strdup(args[0]);
+               ft2232_device_desc = strdup(CMD_ARGV[0]);
                cp = strchr(ft2232_device_desc, 0);
                /* under Win32, the FTD2XX driver appends an "A" to the end
                 * of the description, this examines the given desc
@@ -2833,9 +2833,9 @@ COMMAND_HANDLER(ft2232_handle_device_desc_command)
 
 COMMAND_HANDLER(ft2232_handle_serial_command)
 {
-       if (argc == 1)
+       if (CMD_ARGC == 1)
        {
-               ft2232_serial = strdup(args[0]);
+               ft2232_serial = strdup(CMD_ARGV[0]);
        }
        else
        {
@@ -2847,37 +2847,37 @@ COMMAND_HANDLER(ft2232_handle_serial_command)
 
 COMMAND_HANDLER(ft2232_handle_layout_command)
 {
-       if (argc == 0)
+       if (CMD_ARGC == 0)
                return ERROR_OK;
 
-       ft2232_layout = malloc(strlen(args[0]) + 1);
-       strcpy(ft2232_layout, args[0]);
+       ft2232_layout = malloc(strlen(CMD_ARGV[0]) + 1);
+       strcpy(ft2232_layout, CMD_ARGV[0]);
 
        return ERROR_OK;
 }
 
 COMMAND_HANDLER(ft2232_handle_vid_pid_command)
 {
-       if (argc > MAX_USB_IDS * 2)
+       if (CMD_ARGC > MAX_USB_IDS * 2)
        {
                LOG_WARNING("ignoring extra IDs in ft2232_vid_pid "
                                        "(maximum is %d pairs)", MAX_USB_IDS);
-               argc = MAX_USB_IDS * 2;
+               CMD_ARGC = MAX_USB_IDS * 2;
        }
-       if (argc < 2 || (argc & 1))
+       if (CMD_ARGC < 2 || (CMD_ARGC & 1))
        {
                LOG_WARNING("incomplete ft2232_vid_pid configuration directive");
-               if (argc < 2)
+               if (CMD_ARGC < 2)
                        return ERROR_COMMAND_SYNTAX_ERROR;
                /* remove the incomplete trailing id */
-               argc -= 1;
+               CMD_ARGC -= 1;
        }
 
        unsigned i;
-       for (i = 0; i < argc; i += 2)
+       for (i = 0; i < CMD_ARGC; i += 2)
        {
-               COMMAND_PARSE_NUMBER(u16, args[i], ft2232_vid[i >> 1]);
-               COMMAND_PARSE_NUMBER(u16, args[i + 1], ft2232_pid[i >> 1]);
+               COMMAND_PARSE_NUMBER(u16, CMD_ARGV[i], ft2232_vid[i >> 1]);
+               COMMAND_PARSE_NUMBER(u16, CMD_ARGV[i + 1], ft2232_pid[i >> 1]);
        }
 
        /*
@@ -2891,9 +2891,9 @@ COMMAND_HANDLER(ft2232_handle_vid_pid_command)
 
 COMMAND_HANDLER(ft2232_handle_latency_command)
 {
-       if (argc == 1)
+       if (CMD_ARGC == 1)
        {
-               ft2232_latency = atoi(args[0]);
+               ft2232_latency = atoi(CMD_ARGV[0]);
        }
        else
        {
@@ -2903,7 +2903,7 @@ COMMAND_HANDLER(ft2232_handle_latency_command)
        return ERROR_OK;
 }
 
-static int ft2232_stableclocks(int num_cycles, jtag_command_t* cmd)
+static int ft2232_stableclocks(int num_cycles, struct jtag_command* cmd)
 {
        int retval = 0;
 
@@ -3969,32 +3969,49 @@ static void ktlink_blink(void)
        buffer_write(high_direction);
 }
 
-static int ft2232_register_commands(struct command_context_s* cmd_ctx)
-{
-       register_command(cmd_ctx, NULL, "ft2232_device_desc",
-                       ft2232_handle_device_desc_command, COMMAND_CONFIG,
-                       "the USB device description of the FTDI FT2232 device");
-       register_command(cmd_ctx, NULL, "ft2232_serial",
-                       ft2232_handle_serial_command, COMMAND_CONFIG,
-                       "the serial number of the FTDI FT2232 device");
-       register_command(cmd_ctx, NULL, "ft2232_layout",
-                       ft2232_handle_layout_command, COMMAND_CONFIG,
-                       "the layout of the FT2232 GPIO signals used "
-                       "to control output-enables and reset signals");
-       register_command(cmd_ctx, NULL, "ft2232_vid_pid",
-                       ft2232_handle_vid_pid_command, COMMAND_CONFIG,
-                       "the vendor ID and product ID of the FTDI FT2232 device");
-       register_command(cmd_ctx, NULL, "ft2232_latency",
-                       ft2232_handle_latency_command, COMMAND_CONFIG,
-                       "set the FT2232 latency timer to a new value");
-
-       return ERROR_OK;
-}
-
+static const struct command_registration ft2232_command_handlers[] = {
+       {
+               .name = "ft2232_device_desc",
+               .handler = &ft2232_handle_device_desc_command,
+               .mode = COMMAND_CONFIG,
+               .help = "set the USB device description of the FTDI FT2232 device",
+               .usage = "<description>",
+       },
+       {
+               .name = "ft2232_serial",
+               .handler = &ft2232_handle_serial_command,
+               .mode = COMMAND_CONFIG,
+               .help = "set the serial number of the FTDI FT2232 device",
+               .usage = "<serial#>",
+       },
+       {
+               .name = "ft2232_layout",
+               .handler = &ft2232_handle_layout_command,
+               .mode = COMMAND_CONFIG,
+               .help = "set the layout of the FT2232 GPIO signals used "
+                       "to control output-enables and reset signals",
+               .usage = "<layout>",
+       },
+       {
+               .name = "ft2232_vid_pid",
+               .handler = &ft2232_handle_vid_pid_command,
+               .mode = COMMAND_CONFIG,
+               .help = "the vendor ID and product ID of the FTDI FT2232 device",
+               .usage = "<vid> <pid> [...]",
+       },
+       {
+               .name = "ft2232_latency",
+               .handler = &ft2232_handle_latency_command,
+               .mode = COMMAND_CONFIG,
+               .help = "set the FT2232 latency timer to a new value",
+               .usage = "<vid> <pid> [...]",
+       },
+       COMMAND_REGISTRATION_DONE
+};
 
 struct jtag_interface ft2232_interface = {
                .name = "ft2232",
-               .register_commands = &ft2232_register_commands,
+               .commands = ft2232_command_handlers,
                .init = &ft2232_init,
                .quit = &ft2232_quit,
                .speed = &ft2232_speed,

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)