]> git.sur5r.net Git - openocd/commitdiff
Factoring of jtag_examine_chain for maintainability:
authorzwelch <zwelch@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Sun, 7 Jun 2009 05:24:12 +0000 (05:24 +0000)
committerzwelch <zwelch@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Sun, 7 Jun 2009 05:24:12 +0000 (05:24 +0000)
- Factor TAP ID matching into new helper function.
- Simplifies the main jtag_examine_chain loop logic considerably.

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

src/jtag/jtag.c

index 98caea5a068de056b2f6a36c0d72c0b142585580..d94bebe13e9670af1cd146b1a634546377d79670 100644 (file)
@@ -1021,6 +1021,45 @@ static void jtag_examine_chain_end(u8 *idcodes, unsigned count, unsigned max)
        }
 }
 
+static bool jtag_examine_chain_match_tap(const struct jtag_tap_s *tap)
+{
+       if (0 == tap->expected_ids_cnt)
+       {
+               /// @todo Enable LOG_INFO to ask for reports about unknown TAP IDs.
+#if 0
+               LOG_INFO("Uknown JTAG TAP ID: 0x%08x", tap->idcode)
+               LOG_INFO("Please report the chip name and reported ID code to the openocd project");
+#endif
+               return true;
+       }
+
+       /* Loop over the expected identification codes and test for a match */
+       u8 ii;
+       for (ii = 0; ii < tap->expected_ids_cnt; ii++)
+       {
+               if (tap->idcode == tap->expected_ids[ii])
+                       break;
+       }
+
+       /* If none of the expected ids matched, log an error */
+       if (ii != tap->expected_ids_cnt)
+       {
+               LOG_INFO("JTAG Tap/device matched");
+               return true;
+       }
+       jtag_examine_chain_display(LOG_LVL_ERROR, "got",
+                       tap->dotted_name, tap->idcode);
+       for (ii = 0; ii < tap->expected_ids_cnt; ii++)
+       {
+               char msg[32];
+               snprintf(msg, sizeof(msg), "expected %hhu of %hhu",
+                               ii + 1, tap->expected_ids_cnt);
+               jtag_examine_chain_display(LOG_LVL_ERROR, msg,
+                               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)
@@ -1080,42 +1119,11 @@ static int jtag_examine_chain(void)
 
                tap->idcode = idcode;
 
-               if (0 == tap->expected_ids_cnt)
-               {
-                       /// @todo Enable LOG_INFO to ask for reports about unknown TAP IDs.
-#if 0
-                       LOG_INFO("Uknown JTAG TAP ID: 0x%08x", tap->idcode)
-                       LOG_INFO("Please report the chip name and reported ID code to the openocd project");
-#endif
-                       tap = jtag_tap_next_enabled(tap);
-                       continue;
-               }
-               /* Loop over the expected identification codes and test for a match */
-               u8 ii;
-               for (ii = 0; ii < tap->expected_ids_cnt; ii++)
-               {
-                       if (tap->idcode == tap->expected_ids[ii])
-                               break;
-               }
+               // ensure the TAP ID does matches what was expected
+               if (!jtag_examine_chain_match_tap(tap))
+                       return ERROR_JTAG_INIT_FAILED;
 
-               /* If none of the expected ids matched, log an error */
-               if (ii != tap->expected_ids_cnt)
-               {
-                       LOG_INFO("JTAG Tap/device matched");
-                       tap = jtag_tap_next_enabled(tap);
-                       continue;
-               }
-               jtag_examine_chain_display(LOG_LVL_ERROR, "got",
-                               tap->dotted_name, tap->idcode);
-               for (ii = 0; ii < tap->expected_ids_cnt; ii++)
-               {
-                       char msg[20];
-                       snprintf(msg, 20, "expected %hhu of %hhu",
-                                       ii + 1, tap->expected_ids_cnt);
-                       jtag_examine_chain_display(LOG_LVL_ERROR, msg,
-                                       tap->dotted_name, tap->expected_ids[ii]);
-               }
-               return ERROR_JTAG_INIT_FAILED;
+               tap = jtag_tap_next_enabled(tap);
        }
 
        /* see if number of discovered devices matches configuration */