openocd: fix SPDX tag format for files .c
[fw/openocd] / src / jtag / drivers / usb_blaster / usb_blaster.c
index 5559bcedbee0cf439ab150f5d1bf99df0ec8c841..8c37048144990669edfea901f43e6d64e5d3d41a 100644 (file)
@@ -1,3 +1,5 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
 /*
  *   Driver for USB-JTAG, Altera USB-Blaster and compatibles
  *
  *   Copyright (C) 2009 Catalin Patulea cat@vv.carleton.ca
  *   Copyright (C) 2006 Kolja Waschk usbjtag@ixo.de
  *
- *   This program is free software; you can redistribute it and/or modify
- *   it under the terms of the GNU General Public License as published by
- *   the Free Software Foundation; either version 2 of the License, or
- *   (at your option) any later version.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
  */
 
 /*
@@ -77,6 +66,7 @@
 #include <jtag/interface.h>
 #include <jtag/commands.h>
 #include <helper/time_support.h>
+#include <helper/replacements.h>
 #include "ublast_access.h"
 
 /* system includes */
@@ -118,7 +108,6 @@ struct ublast_info {
 
        char *lowlevel_name;
        struct ublast_lowlevel *drv;
-       char *ublast_device_desc;
        uint16_t ublast_vid, ublast_pid;
        uint16_t ublast_vid_uninit, ublast_pid_uninit;
        int flags;
@@ -139,7 +128,7 @@ static struct ublast_info info = {
 };
 
 /*
- * Available lowlevel drivers (FTDI, FTD2xx, ...)
+ * Available lowlevel drivers (FTDI, libusb, ...)
  */
 struct drvs_map {
        char *name;
@@ -364,8 +353,8 @@ static void ublast_idle_clock(void)
  * @param type scan type (ie. does a readback of TDO is required)
  *
  * Output a TDI bit and assert clock to push it into the JTAG device :
- *  - writing out TCK=0, TMS=<old_state>=0, TDI=<tdi>
- * - writing out TCK=1, TMS=<new_state>, TDI=<tdi> which triggers the JTAG
+ *  - writing out TCK=0, TMS=\<old_state>=0, TDI=\<tdi>
+ *  - writing out TCK=1, TMS=\<new_state>, TDI=\<tdi> which triggers the JTAG
  *    device acquiring the data.
  *
  * If a TDO is to be read back, the required read is requested (bitbang mode),
@@ -448,8 +437,8 @@ static void ublast_queue_bytes(uint8_t *bytes, int nb_bytes)
  * @param skip number of TMS bits to skip at the beginning of the series
  *
  * Write a series of TMS transitions, where each transition consists in :
- *  - writing out TCK=0, TMS=<new_state>, TDI=<???>
- *  - writing out TCK=1, TMS=<new_state>, TDI=<???> which triggers the transition
+ *  - writing out TCK=0, TMS=\<new_state>, TDI=\<???>
+ *  - writing out TCK=1, TMS=\<new_state>, TDI=\<???> which triggers the transition
  * The function ensures that at the end of the sequence, the clock (TCK) is put
  * low.
  */
@@ -478,8 +467,8 @@ static void ublast_tms(struct tms_command *cmd)
  * @param cmd path transition
  *
  * Write a series of TMS transitions, where each transition consists in :
- *  - writing out TCK=0, TMS=<new_state>, TDI=<???>
- *  - writing out TCK=1, TMS=<new_state>, TDI=<???> which triggers the transition
+ *  - writing out TCK=0, TMS=\<new_state>, TDI=\<???>
+ *  - writing out TCK=1, TMS=\<new_state>, TDI=\<???> which triggers the transition
  * The function ensures that at the end of the sequence, the clock (TCK) is put
  * low.
  */
@@ -525,7 +514,7 @@ static void ublast_state_move(tap_state_t state, int skip)
 /**
  * ublast_read_byteshifted_tdos - read TDO of byteshift writes
  * @param buf the buffer to store the bits
- * @param nb_bits the number of bits
+ * @param nb_bytes the number of bytes
  *
  * Reads back from USB Blaster TDO bits, triggered by a 'byteshift write', ie. eight
  * bits per received byte from USB interface, and store them in buffer.
@@ -560,8 +549,8 @@ static int ublast_read_byteshifted_tdos(uint8_t *buf, int nb_bytes)
  *  - first bit is stored in byte0, bit0 (LSB)
  *  - second bit is stored in byte0, bit 1
  *  ...
- *  - eight bit is sotred in byte0, bit 7
- *  - ninth bit is sotred in byte1, bit 0
+ *  - eight bit is stored in byte0, bit 7
+ *  - ninth bit is stored in byte1, bit 0
  *  - etc ...
  *
  * Returns ERROR_OK if OK, ERROR_xxx if a read error occurred
@@ -787,7 +776,7 @@ static int ublast_execute_queue(void)
                ublast_initial_wipeout();
        }
 
-       for (cmd = jtag_command_queue; ret == ERROR_OK && cmd != NULL;
+       for (cmd = jtag_command_queue; ret == ERROR_OK && cmd;
             cmd = cmd->next) {
                switch (cmd->type) {
                case JTAG_RESET:
@@ -873,7 +862,6 @@ static int ublast_init(void)
        info.drv->ublast_pid = info.ublast_pid;
        info.drv->ublast_vid_uninit = info.ublast_vid_uninit;
        info.drv->ublast_pid_uninit = info.ublast_pid_uninit;
-       info.drv->ublast_device_desc = info.ublast_device_desc;
        info.drv->firmware_path = info.firmware_path;
 
        info.flags |= info.drv->flags;
@@ -907,16 +895,6 @@ static int ublast_quit(void)
        return info.drv->close(info.drv);
 }
 
-COMMAND_HANDLER(ublast_handle_device_desc_command)
-{
-       if (CMD_ARGC != 1)
-               return ERROR_COMMAND_SYNTAX_ERROR;
-
-       info.ublast_device_desc = strdup(CMD_ARGV[0]);
-
-       return ERROR_OK;
-}
-
 COMMAND_HANDLER(ublast_handle_vid_pid_command)
 {
        if (CMD_ARGC > 4) {
@@ -1029,16 +1007,9 @@ COMMAND_HANDLER(ublast_firmware_command)
 }
 
 
-static const struct command_registration ublast_command_handlers[] = {
-       {
-               .name = "usb_blaster_device_desc",
-               .handler = ublast_handle_device_desc_command,
-               .mode = COMMAND_CONFIG,
-               .help = "set the USB device description of the USB-Blaster",
-               .usage = "description-string",
-       },
+static const struct command_registration ublast_subcommand_handlers[] = {
        {
-               .name = "usb_blaster_vid_pid",
+               .name = "vid_pid",
                .handler = ublast_handle_vid_pid_command,
                .mode = COMMAND_CONFIG,
                .help = "the vendor ID and product ID of the USB-Blaster and "
@@ -1047,21 +1018,21 @@ static const struct command_registration ublast_command_handlers[] = {
                .usage = "vid pid vid_uninit pid_uninit",
        },
        {
-               .name = "usb_blaster_lowlevel_driver",
+               .name = "lowlevel_driver",
                .handler = ublast_handle_lowlevel_drv_command,
                .mode = COMMAND_CONFIG,
                .help = "set the lowlevel access for the USB Blaster (ftdi, ublast2)",
                .usage = "(ftdi|ublast2)",
        },
        {
-               .name = "usb_blaster_pin",
+               .name = "pin",
                .handler = ublast_handle_pin_command,
                .mode = COMMAND_ANY,
                .help = "show or set pin state for the unused GPIO pins",
                .usage = "(pin6|pin8) (0|1|s|t)",
        },
                {
-               .name = "usb_blaster_firmware",
+               .name = "firmware",
                .handler = &ublast_firmware_command,
                .mode = COMMAND_CONFIG,
                .help = "configure the USB-Blaster II firmware location",
@@ -1070,6 +1041,17 @@ static const struct command_registration ublast_command_handlers[] = {
        COMMAND_REGISTRATION_DONE
 };
 
+static const struct command_registration ublast_command_handlers[] = {
+       {
+               .name = "usb_blaster",
+               .mode = COMMAND_ANY,
+               .help = "perform usb_blaster management",
+               .chain = ublast_subcommand_handlers,
+               .usage = "",
+       },
+       COMMAND_REGISTRATION_DONE
+};
+
 static struct jtag_interface usb_blaster_interface = {
        .supported = DEBUG_CAP_TMS_SEQ,
        .execute_queue = ublast_execute_queue,