]> git.sur5r.net Git - openocd/commitdiff
minidriver build test driver "minidriver"
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Sun, 7 Jun 2009 13:55:29 +0000 (13:55 +0000)
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Sun, 7 Jun 2009 13:55:29 +0000 (13:55 +0000)
git-svn-id: svn://svn.berlios.de/openocd/trunk@2092 b42882b7-edfa-0310-969c-e2dbd0fdcd60

configure.in
src/jtag/Makefile.am
src/jtag/jtag.c
src/jtag/minidummy.c [new file with mode: 0644]
src/jtag/minidummy/jtag_minidriver.h [new file with mode: 0644]

index 18c0717c0ea8b4cb5fe082bd593f073e191cbec0..9cb4ef49a5a0608b57df7d40e7d115c9e47299ff 100644 (file)
@@ -323,6 +323,10 @@ AC_ARG_ENABLE(ecosboard,
   AS_HELP_STRING([--enable-ecosboard], [Enable building support for eCosBoard based JTAG debugger]), 
   [build_ecosboard=$enableval], [build_ecosboard=no])
 
+AC_ARG_ENABLE(minidummy,
+  AS_HELP_STRING([--enable-minidummy], [Enable building support for minidummy driver]), 
+  [build_minidummy=$enableval], [build_minidummy=no])
+
 AC_ARG_ENABLE(ioutil,
   AS_HELP_STRING([--enable-ioutil], [Enable ioutil functions - useful for standalone OpenOCD implementations]), 
   [build_ioutil=$enableval], [build_ioutil=no])
@@ -459,6 +463,12 @@ else
   AC_DEFINE(BUILD_ECOSBOARD, 0, [0 if you don't want eCosBoard.])
 fi
 
+if test $build_minidummy = yes; then
+  AC_DEFINE(BUILD_MINIDUMMY, 1, [1 if you want minidummy.])
+else
+  AC_DEFINE(BUILD_MINIDUMMY, 0, [0 if you don't want minidummy.])
+fi
+
 if test $build_ioutil = yes; then
   AC_DEFINE(BUILD_IOUTIL, 1, [1 if you want ioutils.])
 else
@@ -835,6 +845,7 @@ AM_CONDITIONAL(DUMMY, test $build_dummy = yes)
 AM_CONDITIONAL(GIVEIO, test $parport_use_giveio = yes)
 AM_CONDITIONAL(EP93XX, test $build_ep93xx = yes)
 AM_CONDITIONAL(ECOSBOARD, test $build_ecosboard = yes)
+AM_CONDITIONAL(MINIDUMMY, test $build_minidummy = yes)
 AM_CONDITIONAL(IOUTIL, test $build_ioutil = yes)
 AM_CONDITIONAL(HTTPD, test $build_httpd = yes)
 AM_CONDITIONAL(AT91RM9200, test $build_at91rm9200 = yes)
index 09d0685c3aceb2f34def8ff6d9d65dd289188ab8..fa5861a550d684fd601d69be59ccdd3faa287cae 100644 (file)
@@ -51,6 +51,12 @@ else
 ECOSBOARDFILES =
 endif
 
+if MINIDUMMY
+MINIDUMMYFILES = minidummy.c
+else
+MINIDUMMYFILES =
+endif
+
 if MINIDRIVER
 DRIVERFILES =
 else
@@ -131,6 +137,7 @@ libjtag_la_SOURCES = \
        $(PRESTOFILES) \
        $(USBPROGFILES) \
        $(ECOSBOARDFILES) \
+       $(MINIDUMMYFILES) \
        $(JLINKFILES) \
        $(RLINKFILES) \
        $(VSLLINKFILES) \
index 2a81b086d128957770e823c23dbf2cbbbebfddaa..e5b79cde5b88ad8030a4dcb0ce53cb865960efba 100644 (file)
@@ -99,6 +99,9 @@ static bool hasKHz = false;
        extern jtag_interface_t zy1000_interface;
 #endif
 
+#if BUILD_MINIDUMMY == 1
+       extern jtag_interface_t minidummy_interface;
+#endif
 #if BUILD_PARPORT == 1
        extern jtag_interface_t parport_interface;
 #endif
@@ -159,6 +162,9 @@ jtag_interface_t *jtag_interfaces[] = {
 #if BUILD_ECOSBOARD == 1
        &zy1000_interface,
 #endif
+#if BUILD_MINIDUMMY == 1
+       &minidummy_interface,
+#endif
 #if BUILD_PARPORT == 1
        &parport_interface,
 #endif
@@ -240,7 +246,7 @@ jtag_tap_t *jtag_all_taps(void)
 int jtag_tap_count(void)
 {
        return jtag_num_taps;
-}
+       }
 
 unsigned jtag_tap_count_enabled(void)
 {
@@ -1058,12 +1064,12 @@ static bool jtag_examine_chain_match_tap(const struct jtag_tap_s *tap)
                                tap->dotted_name, tap->expected_ids[ii]);
        }
        return false;
-}
+       }
 
 /* Try to examine chain layout according to IEEE 1149.1 §12
  */
 static int jtag_examine_chain(void)
-{
+       {
        u8 idcode_buffer[JTAG_MAX_CHAIN_SIZE * 4];
        unsigned device_count = 0;
 
@@ -1087,7 +1093,7 @@ static int jtag_examine_chain(void)
                {
                        /* LSB must not be 0, this indicates a device in bypass */
                        LOG_WARNING("Tap/Device does not have IDCODE");
-                       idcode = 0;
+                       idcode=0;
 
                        bit_count += 1;
                }
@@ -1097,9 +1103,9 @@ static int jtag_examine_chain(void)
                         * End of chain (invalid manufacturer ID) some devices, such
                         * as AVR will output all 1's instead of TDI input value at
                         * end of chain.
-                        */
+                                */
                        if (jtag_idcode_is_final(idcode))
-                       {
+                               {
                                jtag_examine_chain_end(idcode_buffer,
                                                bit_count + 32, JTAG_MAX_CHAIN_SIZE * 32);
                                break;
@@ -1115,7 +1121,7 @@ static int jtag_examine_chain(void)
                if (!tap)
                        continue;
 
-               tap->idcode = idcode;
+                       tap->idcode = idcode;
 
                // ensure the TAP ID does matches what was expected
                if (!jtag_examine_chain_match_tap(tap))
@@ -1478,12 +1484,12 @@ static int jim_newtap_cmd( Jim_GetOptInfo *goi )
                return ERROR_OK;
        }
 
-       Jim_SetResult_sprintf(goi->interp,
-                       "newtap: %s missing required parameters",
-                       pTap->dotted_name);
+               Jim_SetResult_sprintf( goi->interp,
+                                                          "newtap: %s missing required parameters",
+                                                          pTap->dotted_name);
        jtag_tap_free(pTap);
-       return JIM_ERR;
-}
+               return JIM_ERR;
+       }
 
 static int jim_jtag_command( Jim_Interp *interp, int argc, Jim_Obj *const *argv )
 {
@@ -2133,7 +2139,6 @@ static int handle_jtag_ntrst_delay_command(struct command_context_s *cmd_ctx, ch
        return ERROR_OK;
 }
 
-
 static int handle_jtag_speed_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
 {
        int retval=ERROR_OK;
@@ -2218,11 +2223,11 @@ static int handle_endstate_command(struct command_context_s *cmd_ctx, char *cmd,
        tap_state_t state = tap_state_by_name(args[0]);
        if (state < 0)
        {
-               command_print( cmd_ctx, "Invalid state name: %s\n", args[0] );
-               return ERROR_COMMAND_SYNTAX_ERROR;
-       }
-       jtag_set_end_state(state);
-       jtag_execute_queue();
+                       command_print( cmd_ctx, "Invalid state name: %s\n", args[0] );
+                       return ERROR_COMMAND_SYNTAX_ERROR;
+               }
+               jtag_set_end_state(state);
+               jtag_execute_queue();
 
        command_print(cmd_ctx, "current endstate: %s",
                        tap_state_name(cmd_queue_end_state));
@@ -2571,7 +2576,7 @@ static int handle_verify_jtag_command(struct command_context_s *cmd_ctx, char *c
                        jtag_set_verify(false);
                else
                        return ERROR_COMMAND_SYNTAX_ERROR;
-       }
+               }
 
        const char *status = jtag_will_verify() ? "enabled": "disabled";
        command_print(cmd_ctx, "verify jtag capture is %s", status);
diff --git a/src/jtag/minidummy.c b/src/jtag/minidummy.c
new file mode 100644 (file)
index 0000000..76a957f
--- /dev/null
@@ -0,0 +1,190 @@
+/***************************************************************************\r
+ *   Copyright (C) 2007-2008 by Øyvind Harboe                              *\r
+ *                                                                         *\r
+ *   This program is free software; you can redistribute it and/or modify  *\r
+ *   it under the terms of the GNU General Public License as published by  *\r
+ *   the Free Software Foundation; either version 2 of the License, or     *\r
+ *   (at your option) any later version.                                   *\r
+ *                                                                         *\r
+ *   This program is distributed in the hope that it will be useful,       *\r
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *\r
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *\r
+ *   GNU General Public License for more details.                          *\r
+ *                                                                         *\r
+ *   You should have received a copy of the GNU General Public License     *\r
+ *   along with this program; if not, write to the                         *\r
+ *   Free Software Foundation, Inc.,                                       *\r
+ *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *\r
+ ***************************************************************************/\r
+#ifdef HAVE_CONFIG_H\r
+#include "config.h"\r
+#endif\r
+\r
+#include "embeddedice.h"\r
+#include "minidriver.h"\r
+#include "interface.h"\r
+\r
+\r
+\r
+\r
+jtag_interface_t minidummy_interface =\r
+{\r
+       .name = "minidummy",\r
+       .execute_queue = NULL,\r
+       .speed = NULL,\r
+       .register_commands = NULL,\r
+       .init = NULL,\r
+       .quit = NULL,\r
+       .khz = NULL,\r
+       .speed_div = NULL,\r
+       .power_dropout = NULL,\r
+       .srst_asserted = NULL,\r
+};\r
+\r
+\r
+\r
+\r
+\r
+\r
+int interface_jtag_execute_queue(void)\r
+{\r
+       /* synchronously do the operation here */\r
+\r
+       return ERROR_OK;\r
+}\r
+\r
+\r
+\r
+\r
+\r
+extern int jtag_check_value(u8 *captured, void *priv);\r
+\r
+int interface_jtag_set_end_state(tap_state_t state)\r
+{\r
+       return ERROR_OK;\r
+}\r
+\r
+\r
+int interface_jtag_add_ir_scan(int num_fields, const scan_field_t *fields, tap_state_t state)\r
+{\r
+       /* synchronously do the operation here */\r
+\r
+       return ERROR_OK;\r
+\r
+}\r
+\r
+\r
+\r
+\r
+\r
+int interface_jtag_add_plain_ir_scan(int num_fields, const scan_field_t *fields, tap_state_t state)\r
+{\r
+       /* synchronously do the operation here */\r
+\r
+       return ERROR_OK;\r
+}\r
+\r
+/*extern jtag_command_t **jtag_get_last_command_p(void);*/\r
+\r
+int interface_jtag_add_dr_scan(int num_fields, const scan_field_t *fields, tap_state_t state)\r
+{\r
+       /* synchronously do the operation here */\r
+\r
+       return ERROR_OK;\r
+}\r
+\r
+int interface_jtag_add_plain_dr_scan(int num_fields, const scan_field_t *fields, tap_state_t state)\r
+{\r
+       /* synchronously do the operation here */\r
+\r
+       return ERROR_OK;\r
+}\r
+\r
+\r
+int interface_jtag_add_tlr()\r
+{\r
+       /* synchronously do the operation here */\r
+\r
+       return ERROR_OK;\r
+}\r
+\r
+\r
+\r
+int interface_jtag_add_reset(int req_trst, int req_srst)\r
+{\r
+       /* synchronously do the operation here */\r
+\r
+       return ERROR_OK;\r
+}\r
+\r
+\r
+int interface_jtag_add_runtest(int num_cycles, tap_state_t state)\r
+{\r
+       /* synchronously do the operation here */\r
+\r
+       return ERROR_OK;\r
+}\r
+\r
+int interface_jtag_add_clocks(int num_cycles)\r
+{\r
+       /* synchronously do the operation here */\r
+\r
+       return ERROR_OK;\r
+}\r
+\r
+int interface_jtag_add_sleep(u32 us)\r
+{\r
+       jtag_sleep(us);\r
+       return ERROR_OK;\r
+}\r
+\r
+int interface_jtag_add_pathmove(int num_states, const tap_state_t *path)\r
+{\r
+       int state_count;\r
+       int tms = 0;\r
+\r
+       state_count = 0;\r
+\r
+       tap_state_t cur_state=cmd_queue_cur_state;\r
+\r
+       while (num_states)\r
+       {\r
+               if (tap_state_transition(cur_state, false) == path[state_count])\r
+               {\r
+                       tms = 0;\r
+               }\r
+               else if (tap_state_transition(cur_state, true) == path[state_count])\r
+               {\r
+                       tms = 1;\r
+               }\r
+               else\r
+               {\r
+                       LOG_ERROR("BUG: %s -> %s isn't a valid TAP transition", tap_state_name(cur_state), tap_state_name(path[state_count]));\r
+                       exit(-1);\r
+               }\r
+\r
+               /* synchronously do the operation here */\r
+\r
+               cur_state = path[state_count];\r
+               state_count++;\r
+               num_states--;\r
+       }\r
+\r
+\r
+       /* synchronously do the operation here */\r
+\r
+       return ERROR_OK;\r
+}\r
+\r
+\r
+\r
+void embeddedice_write_dcc(jtag_tap_t *tap, int reg_addr, u8 *buffer, int little, int count)\r
+{\r
+       int i;\r
+       for (i = 0; i < count; i++)\r
+       {\r
+               embeddedice_write_reg_inner(tap, reg_addr, fast_target_buffer_get_u32(buffer, little));\r
+               buffer += 4;\r
+       }\r
+}\r
+\r
diff --git a/src/jtag/minidummy/jtag_minidriver.h b/src/jtag/minidummy/jtag_minidriver.h
new file mode 100644 (file)
index 0000000..ac928e4
--- /dev/null
@@ -0,0 +1,43 @@
+/***************************************************************************\r
+ *   Copyright (C) 2007-2008 by Øyvind Harboe                              *\r
+ *                                                                         *\r
+ *   This program is free software; you can redistribute it and/or modify  *\r
+ *   it under the terms of the GNU General Public License as published by  *\r
+ *   the Free Software Foundation; either version 2 of the License, or     *\r
+ *   (at your option) any later version.                                   *\r
+ *                                                                         *\r
+ *   This program is distributed in the hope that it will be useful,       *\r
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *\r
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *\r
+ *   GNU General Public License for more details.                          *\r
+ *                                                                         *\r
+ *   You should have received a copy of the GNU General Public License     *\r
+ *   along with this program; if not, write to the                         *\r
+ *   Free Software Foundation, Inc.,                                       *\r
+ *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *\r
+ ***************************************************************************/\r
+\r
+\r
+\r
+\r
+static __inline__ void interface_jtag_add_dr_out_core(jtag_tap_t *target_tap,\r
+               int num_fields,\r
+               const int *num_bits,\r
+               const u32 *value,\r
+               enum tap_state end_state)\r
+{\r
+       /* synchronously do the operation here */\r
+}\r
+\r
+static __inline__ void interface_jtag_add_dr_out(jtag_tap_t *target_tap,\r
+               int num_fields,\r
+               const int *num_bits,\r
+               const u32 *value,\r
+               enum tap_state end_state)\r
+{\r
+       /* synchronously do the operation here */\r
+}\r
+\r
+#define interface_jtag_add_callback(callback, in) callback(in)\r
+\r
+#define interface_jtag_add_callback4(callback, in, data1, data2, data3) jtag_set_error(callback(in, data1, data2, data3))\r