usbprog: remove unused variable
[fw/openocd] / src / jtag / drivers / parport.c
index 59c542c9ff238d9b482dff2d9fe786d56b06ad0d..f1687f231b2660d809ed989c6dec2bcbfe33e774 100644 (file)
@@ -1,30 +1,18 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
 /***************************************************************************
  *   Copyright (C) 2005 by Dominic Rath                                    *
  *   Dominic.Rath@gmx.de                                                   *
  *                                                                         *
  *   Copyright (C) 2008 by Spencer Oliver                                  *
  *   spen@spen-soft.co.uk                                                  *
- *                                                                         *
- *   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, write to the                         *
- *   Free Software Foundation, Inc.,                                       *
- *   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.           *
  ***************************************************************************/
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
 
+#include <jtag/adapter.h>
 #include <jtag/interface.h>
 #include "bitbang.h"
 
@@ -60,7 +48,7 @@
 /* parallel port cable description
  */
 struct cable {
-       char *name;
+       const char *name;
        uint8_t TDO_MASK;       /* status port bit containing current TDO value */
        uint8_t TRST_MASK;      /* data port bit for TRST */
        uint8_t TMS_MASK;       /* data port bit for TMS */
@@ -74,7 +62,7 @@ struct cable {
        uint8_t LED_MASK;       /* data port bit for LED */
 };
 
-static struct cable cables[] = {
+static const struct cable cables[] = {
        /* name                         tdo   trst  tms   tck   tdi   srst  o_inv i_inv init  exit  led */
        { "wiggler",                    0x80, 0x10, 0x02, 0x04, 0x08, 0x01, 0x01, 0x80, 0x80, 0x80, 0x00 },
        { "wiggler2",                   0x80, 0x10, 0x02, 0x04, 0x08, 0x01, 0x01, 0x80, 0x80, 0x00, 0x20 },
@@ -108,7 +96,7 @@ static int wait_states;
 
 /* interface variables
  */
-static struct cable *cable;
+static const struct cable *cable;
 static uint8_t dataport_value;
 
 #if PARPORT_USE_PPDEV == 1
@@ -118,7 +106,7 @@ static unsigned long dataport;
 static unsigned long statusport;
 #endif
 
-static int parport_read(void)
+static bb_value_t parport_read(void)
 {
        int data = 0;
 
@@ -129,9 +117,9 @@ static int parport_read(void)
 #endif
 
        if ((data ^ cable->INPUT_INVERT) & cable->TDO_MASK)
-               return 1;
+               return BB_HIGH;
        else
-               return 0;
+               return BB_LOW;
 }
 
 static inline void parport_write_data(void)
@@ -150,7 +138,7 @@ static inline void parport_write_data(void)
 #endif
 }
 
-static void parport_write(int tck, int tms, int tdi)
+static int parport_write(int tck, int tms, int tdi)
 {
        int i = wait_states + 1;
 
@@ -171,10 +159,12 @@ static void parport_write(int tck, int tms, int tdi)
 
        while (i-- > 0)
                parport_write_data();
+
+       return ERROR_OK;
 }
 
 /* (1) assert or (0) deassert reset lines */
-static void parport_reset(int trst, int srst)
+static int parport_reset(int trst, int srst)
 {
        LOG_DEBUG("trst: %i, srst: %i", trst, srst);
 
@@ -189,10 +179,12 @@ static void parport_reset(int trst, int srst)
                dataport_value &= ~cable->SRST_MASK;
 
        parport_write_data();
+
+       return ERROR_OK;
 }
 
 /* turn LED on parport adapter on (1) or off (0) */
-static void parport_led(int on)
+static int parport_led(int on)
 {
        if (on)
                dataport_value |= cable->LED_MASK;
@@ -200,6 +192,8 @@ static void parport_led(int on)
                dataport_value &= ~cable->LED_MASK;
 
        parport_write_data();
+
+       return ERROR_OK;
 }
 
 static int parport_speed(int speed)
@@ -233,7 +227,7 @@ static int parport_get_giveio_access(void)
        HANDLE h;
        OSVERSIONINFO version;
 
-       version.dwOSVersionInfoSize = sizeof version;
+       version.dwOSVersionInfoSize = sizeof(version);
        if (!GetVersionEx(&version)) {
                errno = EINVAL;
                return -1;
@@ -256,20 +250,19 @@ static int parport_get_giveio_access(void)
 static struct bitbang_interface parport_bitbang = {
                .read = &parport_read,
                .write = &parport_write,
-               .reset = &parport_reset,
                .blink = &parport_led,
        };
 
 static int parport_init(void)
 {
-       struct cable *cur_cable;
+       const struct cable *cur_cable;
 #if PARPORT_USE_PPDEV == 1
        char buffer[256];
 #endif
 
        cur_cable = cables;
 
-       if (parport_cable == NULL) {
+       if (!parport_cable) {
                parport_cable = strdup("wiggler");
                LOG_WARNING("No parport cable specified, using default 'wiggler'");
        }
@@ -367,9 +360,12 @@ static int parport_init(void)
 
 #endif /* PARPORT_USE_PPDEV */
 
-       parport_reset(0, 0);
-       parport_write(0, 0, 0);
-       parport_led(1);
+       if (parport_reset(0, 0) != ERROR_OK)
+               return ERROR_FAIL;
+       if (parport_write(0, 0, 0) != ERROR_OK)
+               return ERROR_FAIL;
+       if (parport_led(1) != ERROR_OK)
+               return ERROR_FAIL;
 
        bitbang_interface = &parport_bitbang;
 
@@ -378,17 +374,16 @@ static int parport_init(void)
 
 static int parport_quit(void)
 {
-       parport_led(0);
+       if (parport_led(0) != ERROR_OK)
+               return ERROR_FAIL;
 
        if (parport_exit) {
                dataport_value = cable->PORT_EXIT;
                parport_write_data();
        }
 
-       if (parport_cable) {
-               free(parport_cable);
-               parport_cable = NULL;
-       }
+       free(parport_cable);
+       parport_cable = NULL;
 
        return ERROR_OK;
 }
@@ -405,7 +400,7 @@ COMMAND_HANDLER(parport_handle_parport_port_command)
                }
        }
 
-       command_print(CMD_CTX, "parport port = 0x%" PRIx16 "", parport_port);
+       command_print(CMD, "parport port = 0x%" PRIx16 "", parport_port);
 
        return ERROR_OK;
 }
@@ -443,7 +438,7 @@ COMMAND_HANDLER(parport_handle_parport_toggling_time_command)
                uint32_t ns;
                int retval = parse_u32(CMD_ARGV[0], &ns);
 
-               if (ERROR_OK != retval)
+               if (retval != ERROR_OK)
                        return retval;
 
                if (ns == 0) {
@@ -452,9 +447,9 @@ COMMAND_HANDLER(parport_handle_parport_toggling_time_command)
                }
 
                parport_toggling_time_ns = ns;
-               retval = jtag_get_speed(&wait_states);
+               retval = adapter_get_speed(&wait_states);
                if (retval != ERROR_OK) {
-                       /* if jtag_get_speed fails then the clock_mode
+                       /* if adapter_get_speed fails then the clock_mode
                         * has not been configured, this happens if parport_toggling_time is
                         * called before the adapter speed is set */
                        LOG_INFO("no parport speed set - defaulting to zero wait states");
@@ -462,15 +457,15 @@ COMMAND_HANDLER(parport_handle_parport_toggling_time_command)
                }
        }
 
-       command_print(CMD_CTX, "parport toggling time = %" PRIu32 " ns",
+       command_print(CMD, "parport toggling time = %" PRIu32 " ns",
                        parport_toggling_time_ns);
 
        return ERROR_OK;
 }
 
-static const struct command_registration parport_command_handlers[] = {
+static const struct command_registration parport_subcommand_handlers[] = {
        {
-               .name = "parport_port",
+               .name = "port",
                .handler = parport_handle_parport_port_command,
                .mode = COMMAND_CONFIG,
                .help = "Display the address of the I/O port (e.g. 0x378) "
@@ -479,7 +474,7 @@ static const struct command_registration parport_command_handlers[] = {
                .usage = "[port_number]",
        },
        {
-               .name = "parport_cable",
+               .name = "cable",
                .handler = parport_handle_parport_cable_command,
                .mode = COMMAND_CONFIG,
                .help = "Set the layout of the parallel port cable "
@@ -488,7 +483,7 @@ static const struct command_registration parport_command_handlers[] = {
                .usage = "[layout]",
        },
        {
-               .name = "parport_write_on_exit",
+               .name = "write_on_exit",
                .handler = parport_handle_write_on_exit_command,
                .mode = COMMAND_CONFIG,
                .help = "Configure the parallel driver to write "
@@ -496,7 +491,7 @@ static const struct command_registration parport_command_handlers[] = {
                .usage = "('on'|'off')",
        },
        {
-               .name = "parport_toggling_time",
+               .name = "toggling_time",
                .handler = parport_handle_parport_toggling_time_command,
                .mode = COMMAND_CONFIG,
                .help = "Displays or assigns how many nanoseconds it "
@@ -506,15 +501,33 @@ static const struct command_registration parport_command_handlers[] = {
        COMMAND_REGISTRATION_DONE
 };
 
-struct jtag_interface parport_interface = {
-       .name = "parport",
+static const struct command_registration parport_command_handlers[] = {
+       {
+               .name = "parport",
+               .mode = COMMAND_ANY,
+               .help = "perform parport management",
+               .chain = parport_subcommand_handlers,
+               .usage = "",
+       },
+       COMMAND_REGISTRATION_DONE
+};
+
+static struct jtag_interface parport_interface = {
        .supported = DEBUG_CAP_TMS_SEQ,
+       .execute_queue = bitbang_execute_queue,
+};
+
+struct adapter_driver parport_adapter_driver = {
+       .name = "parport",
+       .transports = jtag_only,
        .commands = parport_command_handlers,
 
        .init = parport_init,
        .quit = parport_quit,
+       .reset = parport_reset,
+       .speed = parport_speed,
        .khz = parport_khz,
        .speed_div = parport_speed_div,
-       .speed = parport_speed,
-       .execute_queue = bitbang_execute_queue,
+
+       .jtag_ops = &parport_interface,
 };