rename CEIL as DIV_ROUND_UP
[fw/openocd] / src / jtag / ft2232.c
index b3389cc88253415463131f493138d15ece25ffe3..7acdf1a04802c97f6c2ffcb535d2eae67103d796 100644 (file)
  #endif
 #endif
 
-static int ft2232_execute_queue(void);
-static int ft2232_speed(int speed);
-static int ft2232_speed_div(int speed, int* khz);
-static int ft2232_khz(int khz, int* jtag_speed);
-static int ft2232_register_commands(struct command_context_s* cmd_ctx);
-static int ft2232_init(void);
-static int ft2232_quit(void);
-
-static int ft2232_handle_device_desc_command(struct command_context_s* cmd_ctx, char* cmd, char** args, int argc);
-static int ft2232_handle_serial_command(struct command_context_s* cmd_ctx, char* cmd, char** args, int argc);
-static int ft2232_handle_layout_command(struct command_context_s* cmd_ctx, char* cmd, char** args, int argc);
-static int ft2232_handle_vid_pid_command(struct command_context_s* cmd_ctx, char* cmd, char** args, int argc);
-static int ft2232_handle_latency_command(struct command_context_s* cmd_ctx, char* cmd, char** args, int argc);
-
 /**
  * Send out \a num_cycles on the TCK line while the TAP(s) are in a
  * stable state.  Calling code must ensure that current state is stable,
@@ -114,7 +100,7 @@ static int ft2232_handle_latency_command(struct command_context_s* cmd_ctx, char
  *
  * @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;
@@ -128,13 +114,12 @@ static unsigned           ft2232_max_tck = FTDI_2232C_MAX_TCK;
 static uint16_t ft2232_vid[MAX_USB_IDS + 1] = { 0x0403, 0 };
 static uint16_t ft2232_pid[MAX_USB_IDS + 1] = { 0x6010, 0 };
 
-typedef struct ft2232_layout_s
-{
+struct ft2232_layout {
        char* name;
        int (*init)(void);
        void (*reset)(int trst, int srst);
        void (*blink)(void);
-} ft2232_layout_t;
+};
 
 /* init procedures for supported layouts */
 static int usbjtag_init(void);
@@ -172,7 +157,7 @@ static void turtle_jtag_blink(void);
 static void signalyzer_h_blink(void);
 static void ktlink_blink(void);
 
-static const ft2232_layout_t  ft2232_layouts[] =
+static const struct ft2232_layout  ft2232_layouts[] =
 {
        { "usbjtag",              usbjtag_init,              usbjtag_reset,      NULL                    },
        { "jtagkey",              jtagkey_init,              jtagkey_reset,      NULL                    },
@@ -197,7 +182,7 @@ static const ft2232_layout_t  ft2232_layouts[] =
 
 static uint8_t                  nTRST, nTRSTnOE, nSRST, nSRSTnOE;
 
-static const ft2232_layout_t *layout;
+static const struct ft2232_layout *layout;
 static uint8_t                  low_output     = 0x0;
 static uint8_t                  low_direction  = 0x0;
 static uint8_t                  high_output    = 0x0;
@@ -211,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:
@@ -349,18 +334,6 @@ static void move_to_state(tap_state_t goal_state)
        clock_tms(0x4b,  tms_bits, tms_count, 0);
 }
 
-jtag_interface_t ft2232_interface =
-{
-       .name                   = "ft2232",
-       .execute_queue          = ft2232_execute_queue,
-       .speed                  = ft2232_speed,
-       .speed_div              = ft2232_speed_div,
-       .khz                    = ft2232_khz,
-       .register_commands      = ft2232_register_commands,
-       .init                   = ft2232_init,
-       .quit                   = ft2232_quit,
-};
-
 static int ft2232_write(uint8_t* buf, int size, uint32_t* bytes_written)
 {
 #if BUILD_FT2232_FTD2XX == 1
@@ -590,21 +563,6 @@ static int ft2232_khz(int khz, int* jtag_speed)
        return ERROR_OK;
 }
 
-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 void ft2232_end_state(tap_state_t state)
 {
        if (tap_is_state_stable(state))
@@ -659,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;
@@ -763,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;
@@ -998,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;
@@ -1224,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;
@@ -1232,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;
@@ -1248,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;
@@ -1533,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;
@@ -1548,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)
@@ -1597,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;
@@ -1634,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;
@@ -1647,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)
@@ -1663,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 */
@@ -1718,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;
@@ -1750,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;
@@ -1783,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;
@@ -1804,9 +1762,9 @@ static int ft2232_execute_command(jtag_command_t *cmd)
        return retval;
 }
 
-static int ft2232_execute_queue()
+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 */
@@ -2101,7 +2059,7 @@ static int ft2232_init(void)
        uint8_t  buf[1];
        int retval;
        uint32_t bytes_written;
-       const ft2232_layout_t* cur_layout = ft2232_layouts;
+       const struct ft2232_layout* cur_layout = ft2232_layouts;
        int i;
 
        if (tap_get_tms_path_len(TAP_IRPAUSE,TAP_IRPAUSE) == 7)
@@ -2839,7 +2797,7 @@ static int ft2232_quit(void)
        return ERROR_OK;
 }
 
-static int ft2232_handle_device_desc_command(struct command_context_s* cmd_ctx, char* cmd, char** args, int argc)
+COMMAND_HANDLER(ft2232_handle_device_desc_command)
 {
        char *cp;
        char buf[200];
@@ -2873,7 +2831,7 @@ static int ft2232_handle_device_desc_command(struct command_context_s* cmd_ctx,
        return ERROR_OK;
 }
 
-static int ft2232_handle_serial_command(struct command_context_s* cmd_ctx, char* cmd, char** args, int argc)
+COMMAND_HANDLER(ft2232_handle_serial_command)
 {
        if (argc == 1)
        {
@@ -2887,7 +2845,7 @@ static int ft2232_handle_serial_command(struct command_context_s* cmd_ctx, char*
        return ERROR_OK;
 }
 
-static int ft2232_handle_layout_command(struct command_context_s* cmd_ctx, char* cmd, char** args, int argc)
+COMMAND_HANDLER(ft2232_handle_layout_command)
 {
        if (argc == 0)
                return ERROR_OK;
@@ -2898,7 +2856,7 @@ static int ft2232_handle_layout_command(struct command_context_s* cmd_ctx, char*
        return ERROR_OK;
 }
 
-static int ft2232_handle_vid_pid_command(struct command_context_s* cmd_ctx, char* cmd, char** args, int argc)
+COMMAND_HANDLER(ft2232_handle_vid_pid_command)
 {
        if (argc > MAX_USB_IDS * 2)
        {
@@ -2915,8 +2873,7 @@ static int ft2232_handle_vid_pid_command(struct command_context_s* cmd_ctx, char
                argc -= 1;
        }
 
-       int i;
-       int retval = ERROR_OK;
+       unsigned i;
        for (i = 0; i < argc; i += 2)
        {
                COMMAND_PARSE_NUMBER(u16, args[i], ft2232_vid[i >> 1]);
@@ -2929,10 +2886,10 @@ static int ft2232_handle_vid_pid_command(struct command_context_s* cmd_ctx, char
         */
        ft2232_vid[i >> 1] = ft2232_pid[i >> 1] = 0;
 
-       return retval;
+       return ERROR_OK;
 }
 
-static int ft2232_handle_latency_command(struct command_context_s* cmd_ctx, char* cmd, char** args, int argc)
+COMMAND_HANDLER(ft2232_handle_latency_command)
 {
        if (argc == 1)
        {
@@ -2946,7 +2903,7 @@ static int ft2232_handle_latency_command(struct command_context_s* cmd_ctx, char
        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;
 
@@ -4011,3 +3968,37 @@ static void ktlink_blink(void)
        buffer_write(high_output);
        buffer_write(high_direction);
 }
+
+static int ft2232_register_commands(struct command_context* 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;
+}
+
+
+struct jtag_interface ft2232_interface = {
+               .name = "ft2232",
+               .register_commands = &ft2232_register_commands,
+               .init = &ft2232_init,
+               .quit = &ft2232_quit,
+               .speed = &ft2232_speed,
+               .speed_div = &ft2232_speed_div,
+               .khz = &ft2232_khz,
+               .execute_queue = &ft2232_execute_queue,
+       };