From c318068839e39ac0c2186c6af9e469eda4eff9fc Mon Sep 17 00:00:00 2001 From: zwelch Date: Sun, 7 Jun 2009 05:23:13 +0000 Subject: Factoring of jtag_examine_chain for maintainability: - Factor initial chain examination check into new static helper. git-svn-id: svn://svn.berlios.de/openocd/trunk@2084 b42882b7-edfa-0310-969c-e2dbd0fdcd60 --- src/jtag/jtag.c | 37 +++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/src/jtag/jtag.c b/src/jtag/jtag.c index a3d86ade..03462d6b 100644 --- a/src/jtag/jtag.c +++ b/src/jtag/jtag.c @@ -963,32 +963,41 @@ static int jtag_examine_chain_execute(u8 *idcode_buffer, unsigned num_idcode) return jtag_execute_queue(); } +static bool jtag_examine_chain_check(u8 *idcodes, unsigned count) +{ + u8 zero_check = 0x0; + u8 one_check = 0xff; + + for (unsigned i = 0; i < count * 4; i++) + { + zero_check |= idcodes[i]; + one_check &= idcodes[i]; + } + + /* if there wasn't a single non-zero bit or if all bits were one, + * the scan is not valid */ + if (zero_check == 0x00 || one_check == 0xff) + { + LOG_ERROR("JTAG communication failure: check connection, " + "JTAG interface, target power etc."); + return false; + } + return true; +} + /* Try to examine chain layout according to IEEE 1149.1 ยง12 */ static int jtag_examine_chain(void) { jtag_tap_t *tap; u8 idcode_buffer[JTAG_MAX_CHAIN_SIZE * 4]; - int i; int bit_count; int device_count = 0; - u8 zero_check = 0x0; - u8 one_check = 0xff; jtag_examine_chain_execute(idcode_buffer, JTAG_MAX_CHAIN_SIZE); - for (i = 0; i < JTAG_MAX_CHAIN_SIZE * 4; i++) - { - zero_check |= idcode_buffer[i]; - one_check &= idcode_buffer[i]; - } - - /* if there wasn't a single non-zero bit or if all bits were one, the scan isn't valid */ - if ((zero_check == 0x00) || (one_check == 0xff)) - { - LOG_ERROR("JTAG communication failure, check connection, JTAG interface, target power etc."); + if (!jtag_examine_chain_check(idcode_buffer, JTAG_MAX_CHAIN_SIZE)) return ERROR_JTAG_INIT_FAILED; - } /* point at the 1st tap */ tap = jtag_tap_next_enabled(NULL); -- cgit v1.2.3