target/xtensa: avoid IHI for writes to non-executable memory
[openocd.git] / src / jtag / drivers / gw16012.c
index f6689969afccf0994f96df22527eb88a8626d708..a4c6fd0f00914f0f653f6326fb48371b97101663 100644 (file)
@@ -1,19 +1,8 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
 /***************************************************************************
  *   Copyright (C) 2006 by Dominic Rath                                    *
  *   Dominic.Rath@gmx.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/>. *
  ***************************************************************************/
 
 #ifdef HAVE_CONFIG_H
@@ -63,7 +52,7 @@
 #endif
 
 /* configuration */
-uint16_t gw16012_port;
+static uint16_t gw16012_port;
 
 /* interface variables
  */
@@ -281,9 +270,9 @@ static void gw16012_scan(bool ir_scan, enum scan_type type, uint8_t *buffer, int
        }
 }
 
-static int gw16012_execute_queue(void)
+static int gw16012_execute_queue(struct jtag_command *cmd_queue)
 {
-       struct jtag_command *cmd = jtag_command_queue; /* currently processed command */
+       struct jtag_command *cmd = cmd_queue; /* currently processed command */
        int scan_size;
        enum scan_type type;
        uint8_t *buffer;
@@ -297,53 +286,40 @@ static int gw16012_execute_queue(void)
        while (cmd) {
                switch (cmd->type) {
                        case JTAG_RESET:
-#ifdef _DEBUG_JTAG_IO_
-                               LOG_DEBUG("reset trst: %i srst %i", cmd->cmd.reset->trst, cmd->cmd.reset->srst);
-#endif
+                               LOG_DEBUG_IO("reset trst: %i srst %i", cmd->cmd.reset->trst, cmd->cmd.reset->srst);
                                if (cmd->cmd.reset->trst == 1)
                                        tap_set_state(TAP_RESET);
                                gw16012_reset(cmd->cmd.reset->trst, cmd->cmd.reset->srst);
                                break;
                        case JTAG_RUNTEST:
-#ifdef _DEBUG_JTAG_IO_
-                               LOG_DEBUG("runtest %i cycles, end in %i", cmd->cmd.runtest->num_cycles,
+                               LOG_DEBUG_IO("runtest %i cycles, end in %i", cmd->cmd.runtest->num_cycles,
                                                cmd->cmd.runtest->end_state);
-#endif
                                gw16012_end_state(cmd->cmd.runtest->end_state);
                                gw16012_runtest(cmd->cmd.runtest->num_cycles);
                                break;
                        case JTAG_TLR_RESET:
-#ifdef _DEBUG_JTAG_IO_
-                               LOG_DEBUG("statemove end in %i", cmd->cmd.statemove->end_state);
-#endif
+                               LOG_DEBUG_IO("statemove end in %i", cmd->cmd.statemove->end_state);
                                gw16012_end_state(cmd->cmd.statemove->end_state);
                                gw16012_state_move();
                                break;
                        case JTAG_PATHMOVE:
-#ifdef _DEBUG_JTAG_IO_
-                               LOG_DEBUG("pathmove: %i states, end in %i", cmd->cmd.pathmove->num_states,
+                               LOG_DEBUG_IO("pathmove: %i states, end in %i", cmd->cmd.pathmove->num_states,
                                                cmd->cmd.pathmove->path[cmd->cmd.pathmove->num_states - 1]);
-#endif
                                gw16012_path_move(cmd->cmd.pathmove);
                                break;
                        case JTAG_SCAN:
                                gw16012_end_state(cmd->cmd.scan->end_state);
                                scan_size = jtag_build_buffer(cmd->cmd.scan, &buffer);
                                type = jtag_scan_type(cmd->cmd.scan);
-#ifdef _DEBUG_JTAG_IO_
-                               LOG_DEBUG("%s scan (%i) %i bit end in %i", (cmd->cmd.scan->ir_scan) ? "ir" : "dr",
+                               LOG_DEBUG_IO("%s scan (%i) %i bit end in %i", (cmd->cmd.scan->ir_scan) ? "ir" : "dr",
                                        type, scan_size, cmd->cmd.scan->end_state);
-#endif
                                gw16012_scan(cmd->cmd.scan->ir_scan, type, buffer, scan_size);
                                if (jtag_read_buffer(buffer, cmd->cmd.scan) != ERROR_OK)
                                        retval = ERROR_JTAG_QUEUE_FAILED;
-                               if (buffer)
-                                       free(buffer);
+                               free(buffer);
                                break;
                        case JTAG_SLEEP:
-#ifdef _DEBUG_JTAG_IO_
-                               LOG_DEBUG("sleep %i", cmd->cmd.sleep->us);
-#endif
+                               LOG_DEBUG_IO("sleep %" PRIu32, cmd->cmd.sleep->us);
                                jtag_sleep(cmd->cmd.sleep->us);
                                break;
                        default:
@@ -362,7 +338,7 @@ static int gw16012_get_giveio_access(void)
        HANDLE h;
        OSVERSIONINFO version;
 
-       version.dwOSVersionInfoSize = sizeof version;
+       version.dwOSVersionInfoSize = sizeof(version);
        if (!GetVersionEx(&version)) {
                errno = EINVAL;
                return -1;
@@ -460,7 +436,7 @@ static int gw16012_init_device(void)
                LOG_WARNING("No gw16012 port specified, using default '0x378' (LPT1)");
        }
 
-       LOG_DEBUG("requesting privileges for parallel port 0x%lx...", (long unsigned)(gw16012_port));
+       LOG_DEBUG("requesting privileges for parallel port 0x%" PRIx16 "...", gw16012_port);
 #if PARPORT_USE_GIVEIO == 1
        if (gw16012_get_giveio_access() != 0) {
 #else /* PARPORT_USE_GIVEIO */
@@ -515,7 +491,7 @@ COMMAND_HANDLER(gw16012_handle_parport_port_command)
                }
        }
 
-       command_print(CMD_CTX, "parport port = %u", gw16012_port);
+       command_print(CMD, "parport port = %u", gw16012_port);
 
        return ERROR_OK;
 }
@@ -533,11 +509,17 @@ static const struct command_registration gw16012_command_handlers[] = {
        COMMAND_REGISTRATION_DONE
 };
 
-struct jtag_interface gw16012_interface = {
+static struct jtag_interface gw16012_interface = {
+       .execute_queue = gw16012_execute_queue,
+};
+
+struct adapter_driver gw16012_adapter_driver = {
        .name = "gw16012",
+       .transports = jtag_only,
        .commands = gw16012_command_handlers,
 
        .init = gw16012_init,
        .quit = gw16012_quit,
-       .execute_queue = gw16012_execute_queue,
+
+       .jtag_ops = &gw16012_interface,
 };

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)