+/*
+ * These paths are from the SVF specification for the STATE command, to be
+ * used when the STATE command only includes the final state. The first
+ * element of the path is the "from" (current) state, and the last one is
+ * the "to" (target) state.
+ *
+ * All specified paths are the shortest ones in the JTAG spec, and are thus
+ * not (!!) exact matches for the paths used elsewhere in OpenOCD. Note
+ * that PAUSE-to-PAUSE transitions all go through UPDATE and then CAPTURE,
+ * which has specific effects on the various registers; they are not NOPs.
+ *
+ * Paths to RESET are disabled here. As elsewhere in OpenOCD, and in XSVF
+ * and many SVF implementations, we don't want to risk missing that state.
+ * To get to RESET, always we ignore the current state.
+ */
+static const struct svf_statemove svf_statemoves[] = {
+ /* from to num_of_moves, paths[8] */
+/* {TAP_RESET, TAP_RESET, 1, {TAP_RESET}}, */
+ {TAP_RESET, TAP_IDLE, 2, {TAP_RESET, TAP_IDLE} },
+ {TAP_RESET, TAP_DRPAUSE, 6, {TAP_RESET, TAP_IDLE, TAP_DRSELECT,
+ TAP_DRCAPTURE, TAP_DREXIT1, TAP_DRPAUSE} },
+ {TAP_RESET, TAP_IRPAUSE, 7, {TAP_RESET, TAP_IDLE, TAP_DRSELECT,
+ TAP_IRSELECT, TAP_IRCAPTURE,
+ TAP_IREXIT1, TAP_IRPAUSE} },
+
+/* {TAP_IDLE, TAP_RESET, 4, {TAP_IDLE,
+ * TAP_DRSELECT, TAP_IRSELECT, TAP_RESET}}, */
+ {TAP_IDLE, TAP_IDLE, 1, {TAP_IDLE} },
+ {TAP_IDLE, TAP_DRPAUSE, 5, {TAP_IDLE, TAP_DRSELECT, TAP_DRCAPTURE,
+ TAP_DREXIT1, TAP_DRPAUSE} },
+ {TAP_IDLE, TAP_IRPAUSE, 6, {TAP_IDLE, TAP_DRSELECT, TAP_IRSELECT,
+ TAP_IRCAPTURE, TAP_IREXIT1, TAP_IRPAUSE} },
+
+/* {TAP_DRPAUSE, TAP_RESET, 6, {TAP_DRPAUSE,
+ * TAP_DREXIT2, TAP_DRUPDATE, TAP_DRSELECT, TAP_IRSELECT, TAP_RESET}}, */
+ {TAP_DRPAUSE, TAP_IDLE, 4, {TAP_DRPAUSE, TAP_DREXIT2, TAP_DRUPDATE,
+ TAP_IDLE} },
+ {TAP_DRPAUSE, TAP_DRPAUSE, 7, {TAP_DRPAUSE, TAP_DREXIT2, TAP_DRUPDATE,
+ TAP_DRSELECT, TAP_DRCAPTURE,
+ TAP_DREXIT1, TAP_DRPAUSE} },
+ {TAP_DRPAUSE, TAP_IRPAUSE, 8, {TAP_DRPAUSE, TAP_DREXIT2, TAP_DRUPDATE,
+ TAP_DRSELECT, TAP_IRSELECT,
+ TAP_IRCAPTURE, TAP_IREXIT1, TAP_IRPAUSE} },
+
+/* {TAP_IRPAUSE, TAP_RESET, 6, {TAP_IRPAUSE,
+ * TAP_IREXIT2, TAP_IRUPDATE, TAP_DRSELECT, TAP_IRSELECT, TAP_RESET}}, */
+ {TAP_IRPAUSE, TAP_IDLE, 4, {TAP_IRPAUSE, TAP_IREXIT2, TAP_IRUPDATE,
+ TAP_IDLE} },
+ {TAP_IRPAUSE, TAP_DRPAUSE, 7, {TAP_IRPAUSE, TAP_IREXIT2, TAP_IRUPDATE,
+ TAP_DRSELECT, TAP_DRCAPTURE,
+ TAP_DREXIT1, TAP_DRPAUSE} },
+ {TAP_IRPAUSE, TAP_IRPAUSE, 8, {TAP_IRPAUSE, TAP_IREXIT2, TAP_IRUPDATE,
+ TAP_DRSELECT, TAP_IRSELECT,
+ TAP_IRCAPTURE, TAP_IREXIT1, TAP_IRPAUSE} }
+};