Add header file for JTAG minidriver:
authorzwelch <zwelch@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Tue, 2 Jun 2009 23:15:12 +0000 (23:15 +0000)
committerzwelch <zwelch@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Tue, 2 Jun 2009 23:15:12 +0000 (23:15 +0000)
- Wraps all minidriver API functions using API front-ends:
  - Outlines jtag_add_dr_out() and jtag_alloc_in_value32().
  - Adds interface_ prefix to existing jtag_alloc_invalue_32 routines.
  - Re-inline these interface definitions in new header file.
- Re-inline parts of the (mini)driver implementations in minidriver.h.
- Replace INCLUDE_JTAG_MINIDRIVER_H with #include directives.

The next patch will finish removing '#ifdef HAVE_JTAG_MINIDRIVER_H'
from jtag.h.

git-svn-id: svn://svn.berlios.de/openocd/trunk@2006 b42882b7-edfa-0310-969c-e2dbd0fdcd60

src/jtag/Makefile.am
src/jtag/jtag.c
src/jtag/jtag.h
src/jtag/jtag_driver.c
src/jtag/minidriver.h [new file with mode: 0644]
src/jtag/zy1000.c

index c2d98033309200a4046a555227a230562de12abf..1f04f0172e42c19b0316deeeaa4e4000d11a13fa 100644 (file)
@@ -136,6 +136,7 @@ libjtag_la_SOURCES = \
        $(ARMJTAGEWFILES)
 
 noinst_HEADERS = \
+       minidriver.h \
        bitbang.h \
        jtag.h \
        bitq.h \
index 593200ee8b0b805ce359142622f8a31da69575c5..2baa9c51eb757131df06872c706a5b3b8585de1d 100644 (file)
@@ -28,9 +28,9 @@
 #include "config.h"
 #endif
 
-#define INCLUDE_JTAG_MINIDRIVER_H
 #define INCLUDE_JTAG_INTERFACE_H
 #include "jtag.h"
+#include "minidriver.h"
 
 #ifdef HAVE_STRINGS_H
 #include <strings.h>
@@ -526,6 +526,11 @@ static void jtag_prelude(tap_state_t state)
        cmd_queue_cur_state = cmd_queue_end_state;
 }
 
+void jtag_alloc_in_value32(scan_field_t *field)
+{
+       interface_jtag_alloc_in_value32(field);
+}
+
 void jtag_add_ir_scan_noverify(int in_num_fields, const scan_field_t *in_fields, tap_state_t state)
 {
        int retval;
@@ -682,7 +687,19 @@ void jtag_add_plain_dr_scan(int in_num_fields, const scan_field_t *in_fields, ta
                jtag_error=retval;
 }
 
+void jtag_add_dr_out(jtag_tap_t* tap,
+               int num_fields, const int* num_bits, const u32* value,
+               tap_state_t end_state)
+{
+       if (end_state != TAP_INVALID)
+               cmd_queue_end_state = end_state;
 
+       cmd_queue_cur_state = cmd_queue_end_state;
+
+       interface_jtag_add_dr_out(tap,
+                       num_fields, num_bits, value,
+                       cmd_queue_end_state);
+}
 
 void jtag_add_tlr(void)
 {
index f0aaeaab931873c489290c8ae9a765a6a3c2a6ed..94928117f5b0bf99ec1a124c3335196cd613b222 100644 (file)
@@ -585,17 +585,7 @@ extern void jtag_add_dr_scan(int num_fields, const scan_field_t* fields, tap_sta
  * allocation method is used, for the synchronous case the temporary 32 bits come
  * from the input field itself.
  */
-
-#ifndef HAVE_JTAG_MINIDRIVER_H
 extern void jtag_alloc_in_value32(scan_field_t *field);
-#else
-static __inline__ void jtag_alloc_in_value32(scan_field_t *field)
-{
-       field->in_value=field->intmp;
-}
-#endif
-
-
 
 /* This version of jtag_add_dr_scan() uses the check_value/mask fields */
 extern void jtag_add_dr_scan_check(int num_fields, scan_field_t* fields, tap_state_t endstate);
@@ -841,61 +831,6 @@ void jtag_tap_handle_event(jtag_tap_t* tap, enum jtag_tap_event e);
 #define ERROR_JTAG_NOT_STABLE_STATE  (-105)
 #define ERROR_JTAG_DEVICE_ERROR      (-107)
 
-#ifdef INCLUDE_JTAG_MINIDRIVER_H
-
-extern void interface_jtag_add_scan_check_alloc(scan_field_t *field);
-
-extern int interface_jtag_add_ir_scan(
-               int num_fields, const scan_field_t* fields,
-               tap_state_t endstate);
-extern int interface_jtag_add_plain_ir_scan(
-               int num_fields, const scan_field_t* fields,
-               tap_state_t endstate);
-
-extern int interface_jtag_add_dr_scan(
-               int num_fields, const scan_field_t* fields,
-               tap_state_t endstate);
-extern int interface_jtag_add_plain_dr_scan(
-               int num_fields, const scan_field_t* fields,
-               tap_state_t endstate);
-
-extern int interface_jtag_add_tlr(void);
-extern int interface_jtag_add_pathmove(int num_states, const tap_state_t* path);
-extern int interface_jtag_add_runtest(int num_cycles, tap_state_t endstate);
-
-/**
- * This drives the actual srst and trst pins. srst will always be 0
- * if jtag_reset_config & RESET_SRST_PULLS_TRST != 0 and ditto for
- * trst.
- *
- * the higher level jtag_add_reset will invoke jtag_add_tlr() if
- * approperiate
- */
-extern int interface_jtag_add_reset(int trst, int srst);
-extern int interface_jtag_add_end_state(tap_state_t endstate);
-extern int interface_jtag_add_sleep(u32 us);
-extern int interface_jtag_add_clocks(int num_cycles);
-extern int interface_jtag_execute_queue(void);
-
-/**
- * Calls the interface callback to execute the queue.  This routine
- * is used by the JTAG driver layer and should not be called directly.
- */
-extern int default_interface_jtag_execute_queue(void);
-
-
-#endif // INCLUDE_JTAG_MINIDRIVER_H
-
-/* this allows JTAG devices to implement the entire jtag_xxx() layer in hw/sw */
-#ifdef HAVE_JTAG_MINIDRIVER_H
-/* Here a #define MINIDRIVER() and an inline version of hw fifo interface_jtag_add_dr_out can be defined */
-#include "jtag_minidriver.h"
-#else
-extern void interface_jtag_add_dr_out(jtag_tap_t* tap, int num_fields, const int* num_bits, const u32* value,
-               tap_state_t end_state);
-
-#endif
-
 /* jtag_add_dr_out() is a version of jtag_add_dr_scan() which
  * only scans data out. It operates on 32 bit integers instead
  * of 8 bit, which makes it a better impedance match with
@@ -921,16 +856,9 @@ extern void interface_jtag_add_dr_out(jtag_tap_t* tap, int num_fields, const int
  * There is no jtag_add_dr_outin() version of this fn that also allows
  * clocking data back in. Patches gladly accepted!
  */
-static __inline__ void jtag_add_dr_out(jtag_tap_t* tap, int num_fields, const int* num_bits, const u32* value,
-               tap_state_t end_state)
-{
-       if (end_state != TAP_INVALID)
-               cmd_queue_end_state = end_state;
-       cmd_queue_cur_state = cmd_queue_end_state;
-       interface_jtag_add_dr_out(tap, num_fields, num_bits, value, cmd_queue_end_state);
-}
-
-
+extern void jtag_add_dr_out(jtag_tap_t* tap,
+               int num_fields, const int* num_bits, const u32* value,
+               tap_state_t end_state);
 
 
 /**
index f6fb63a24e5ceed7e671c803f4482c04eb4e981f..c58d5d7e408568036a37f57aae56a7349c7b8407 100644 (file)
@@ -31,9 +31,9 @@
 #include "config.h"
 #endif
 
-#define INCLUDE_JTAG_MINIDRIVER_H
 #define INCLUDE_JTAG_INTERFACE_H
 #include "jtag.h"
+#include "minidriver.h"
 #include "command.h"
 
 struct jtag_callback_entry
@@ -488,12 +488,6 @@ void jtag_add_callback4(jtag_callback_t callback, u8 *in, jtag_callback_data_t d
        }
 }
 
-void interface_jtag_add_scan_check_alloc(scan_field_t *field)
-{
-       unsigned num_bytes = TAP_SCAN_BYTES(field->num_bits);
-       field->in_value = (u8 *)cmd_queue_alloc(num_bytes);
-}
-
 int interface_jtag_execute_queue(void)
 {
        int retval = default_interface_jtag_execute_queue();
@@ -514,11 +508,6 @@ int interface_jtag_execute_queue(void)
        return retval;
 }
 
-void jtag_alloc_in_value32(scan_field_t *field)
-{
-       field->in_value=(u8 *)cmd_queue_alloc(4);
-}
-
 static int jtag_convert_to_callback4(u8 *in, jtag_callback_data_t data1, jtag_callback_data_t data2, jtag_callback_data_t data3)
 {
        ((jtag_callback1_t)data1)(in);
diff --git a/src/jtag/minidriver.h b/src/jtag/minidriver.h
new file mode 100644 (file)
index 0000000..6a759bf
--- /dev/null
@@ -0,0 +1,127 @@
+/***************************************************************************
+ *   Copyright (C) 2005 by Dominic Rath                                    *
+ *   Dominic.Rath@gmx.de                                                   *
+ *                                                                         *
+ *   Copyright (C) 2007,2008 Ã˜yvind Harboe                                 *
+ *   oyvind.harboe@zylin.com                                               *
+ *                                                                         *
+ *   Copyright (C) 2009 Zachary T Welch                                    *
+ *   zw@superlucidity.net                                                  *
+ *                                                                         *
+ *   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.,                                       *
+ *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
+ ***************************************************************************/
+#ifndef MINIDRIVER_H
+#define MINIDRIVER_H
+
+/* @page jtagminidriver JTAG Mini-Driver
+ *
+ * The JTAG minidriver interface allows the definition of alternate
+ * interface functions, instead of the built-in asynchronous driver
+ * module that is used by the standard JTAG interface drivers.
+ *
+ * In addtion to the functions defined in the c minidriver.h file, the
+ * @c jtag_minidriver.h file must declare the following functions (or
+ * define static inline versions of them):
+ * - jtag_add_callback
+ * - jtag_add_callback4
+ * - interface_jtag_add_dr_out
+ *  
+ * The following core functions are declared in this file for use by
+ * the minidriver and do @b not need to be defined by an implementation:
+ * - default_interface_jtag_execute_queue()
+ */
+
+#ifdef HAVE_JTAG_MINIDRIVER_H
+
+#include "jtag_minidriver.h"
+
+static inline void interface_jtag_alloc_in_value32(scan_field_t *field)
+{
+       field->in_value = field->intmp;
+}
+
+static inline void interface_jtag_add_scan_check_alloc(scan_field_t *field)
+{
+       /* We're executing this synchronously, so try to use local storage. */
+       if (field->num_bits > 32)
+       {
+               unsigned num_bytes = TAP_SCAN_BYTES(field->num_bits);
+               field->in_value = (u8 *)malloc(num_bytes);
+               field->allocated = 1;
+       }
+       else
+               field->in_value = field->intmp;
+}
+
+#else
+
+static inline void interface_jtag_alloc_in_value32(scan_field_t *field)
+{
+       field->in_value = (u8 *)cmd_queue_alloc(4);
+}
+
+static inline void interface_jtag_add_scan_check_alloc(scan_field_t *field)
+{
+       unsigned num_bytes = TAP_SCAN_BYTES(field->num_bits);
+       field->in_value = (u8 *)cmd_queue_alloc(num_bytes);
+}
+
+extern void interface_jtag_add_dr_out(jtag_tap_t* tap,
+               int num_fields, const int* num_bits, const u32* value,
+               tap_state_t end_state);
+
+#endif
+
+extern int interface_jtag_add_ir_scan(
+               int num_fields, const scan_field_t* fields,
+               tap_state_t endstate);
+extern int interface_jtag_add_plain_ir_scan(
+               int num_fields, const scan_field_t* fields,
+               tap_state_t endstate);
+
+extern int interface_jtag_add_dr_scan(
+               int num_fields, const scan_field_t* fields,
+               tap_state_t endstate);
+extern int interface_jtag_add_plain_dr_scan(
+               int num_fields, const scan_field_t* fields,
+               tap_state_t endstate);
+
+extern int interface_jtag_add_tlr(void);
+extern int interface_jtag_add_pathmove(int num_states, const tap_state_t* path);
+extern int interface_jtag_add_runtest(int num_cycles, tap_state_t endstate);
+
+/**
+ * This drives the actual srst and trst pins. srst will always be 0
+ * if jtag_reset_config & RESET_SRST_PULLS_TRST != 0 and ditto for
+ * trst.
+ *
+ * the higher level jtag_add_reset will invoke jtag_add_tlr() if
+ * approperiate
+ */
+extern int interface_jtag_add_reset(int trst, int srst);
+extern int interface_jtag_add_end_state(tap_state_t endstate);
+extern int interface_jtag_add_sleep(u32 us);
+extern int interface_jtag_add_clocks(int num_cycles);
+extern int interface_jtag_execute_queue(void);
+
+/**
+ * Calls the interface callback to execute the queue.  This routine
+ * is used by the JTAG driver layer and should not be called directly.
+ */
+extern int default_interface_jtag_execute_queue(void);
+
+
+#endif // MINIDRIVER_H
index 2c196679ad740bd5b73a8177a8fa072a07afda94..73a40f2ed8c5910b1ec3efd0f11cb1d6e7230100 100644 (file)
@@ -20,9 +20,9 @@
 #include "config.h"
 #endif
 
-#define INCLUDE_JTAG_MINIDRIVER_H
 #define INCLUDE_JTAG_INTERFACE_H
 #include "embeddedice.h"
+#include "minidriver.h"
 #include "bitbang.h"
 
 #include <cyg/hal/hal_io.h>             // low level i/o
@@ -380,19 +380,6 @@ int zy1000_quit(void)
 }
 
 
-void interface_jtag_add_scan_check_alloc(scan_field_t *field)
-{
-       /* We're executing this synchronously, so try to use local storage. */
-       if (field->num_bits > 32)
-       {
-               unsigned num_bytes = TAP_SCAN_BYTES(field->num_bits);
-               field->in_value = (u8 *)malloc(num_bytes);
-               field->allocated = 1;
-       }
-       else
-               field->in_value = field->intmp;
-}
-
 
 int interface_jtag_execute_queue(void)
 {

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)