diff --git a/src/jtag/core.c b/src/jtag/core.c
index 1c14c8ea9a107c6d0aa57fd5b560a539dd0dfc8d..4208167b4509804c06f3635267fd4f203b93811d 100644
--- a/src/jtag/core.c
+++ b/src/jtag/core.c
@@ -202,6 +202,18 @@ jtag_tap_t *jtag_tap_by_position(unsigned n)
 	return t;
 }
 
+jtag_tap_t* jtag_tap_next_enabled(jtag_tap_t* p)
+{
+	p = p ? p->next_tap : jtag_all_taps();
+	while (p)
+	{
+		if (p->enabled)
+			return p;
+		p = p->next_tap;
+	}
+	return NULL;
+}
+
 const char *jtag_tap_name(const jtag_tap_t *tap)
 {
 	return (tap == NULL) ? "(unknown)" : tap->dotted_name;
diff --git a/src/jtag/jtag.h b/src/jtag/jtag.h
index 9ce73471d8eb14c5da45046df7436d1f0d3488e5..476409bb6dfc4bccfd4a5f85dcfdcb8921d73898 100644
--- a/src/jtag/jtag.h
+++ b/src/jtag/jtag.h
@@ -180,36 +180,10 @@ extern const char *jtag_tap_name(const jtag_tap_t *tap);
 extern jtag_tap_t* jtag_tap_by_string(const char* dotted_name);
 extern jtag_tap_t* jtag_tap_by_jim_obj(Jim_Interp* interp, Jim_Obj* obj);
 extern jtag_tap_t* jtag_tap_by_position(unsigned abs_position);
+extern jtag_tap_t* jtag_tap_next_enabled(jtag_tap_t* p);
 extern unsigned jtag_tap_count_enabled(void);
 extern unsigned jtag_tap_count(void);
 
-static __inline__ jtag_tap_t* jtag_tap_next_enabled(jtag_tap_t* p)
-{
-	if (p == NULL)
-	{
-		/* start at the head of list */
-		p = jtag_all_taps();
-	}
-	else
-	{
-		/* start *after* this one */
-		p = p->next_tap;
-	}
-	while (p)
-	{
-		if (p->enabled)
-		{
-			break;
-		}
-		else
-		{
-			p = p->next_tap;
-		}
-	}
-
-	return p;
-}
-
 
 enum reset_line_mode {
 	LINE_OPEN_DRAIN = 0x0,