uint8_t instr, uint8_t reg_addr, uint8_t RnW,
                uint8_t *outvalue, uint8_t *invalue, uint8_t *ack)
 {
-       struct arm_jtag *jtag_info = dap->jtag_info;
+       struct jtag_tap *tap = dap->tap;
        struct scan_field fields[2];
        uint8_t out_addr_buf;
        int retval;
 
-       retval = arm_jtag_set_instr(jtag_info, instr, NULL, TAP_IDLE);
+       retval = arm_jtag_set_instr(tap, instr, NULL, TAP_IDLE);
        if (retval != ERROR_OK)
                return retval;
 
        fields[1].out_value = outvalue;
        fields[1].in_value = invalue;
 
-       jtag_add_dr_scan(jtag_info->tap, 2, fields, TAP_IDLE);
+       jtag_add_dr_scan(tap, 2, fields, TAP_IDLE);
 
        /* Add specified number of tck clocks after starting memory bus
         * access, giving the hardware time to complete the access.
 
        retval = arm_jtag_scann(jtag_info, 0xf, TAP_DRPAUSE);
        if (retval != ERROR_OK)
                return retval;
-       retval = arm_jtag_set_instr(jtag_info, jtag_info->intest_instr, NULL, TAP_DRPAUSE);
+       retval = arm_jtag_set_instr(jtag_info->tap, jtag_info->intest_instr, NULL, TAP_DRPAUSE);
        if (retval != ERROR_OK)
                return retval;
 
 
        /* set RESTART instruction */
        if (arm7_9->need_bypass_before_restart) {
                arm7_9->need_bypass_before_restart = 0;
-               retval = arm_jtag_set_instr(jtag_info, 0xf, NULL, TAP_IDLE);
+               retval = arm_jtag_set_instr(jtag_info->tap, 0xf, NULL, TAP_IDLE);
                if (retval != ERROR_OK)
                        return retval;
        }
-       retval = arm_jtag_set_instr(jtag_info, 0x4, NULL, TAP_IDLE);
+       retval = arm_jtag_set_instr(jtag_info->tap, 0x4, NULL, TAP_IDLE);
        if (retval != ERROR_OK)
                return retval;
 
        /* set RESTART instruction */
        if (arm7_9->need_bypass_before_restart) {
                arm7_9->need_bypass_before_restart = 0;
-               retval = arm_jtag_set_instr(jtag_info, 0xf, NULL, TAP_IDLE);
+               retval = arm_jtag_set_instr(jtag_info->tap, 0xf, NULL, TAP_IDLE);
                if (retval != ERROR_OK)
                        return retval;
        }
-       retval = arm_jtag_set_instr(jtag_info, 0x4, NULL, TAP_IDLE);
+       retval = arm_jtag_set_instr(jtag_info->tap, 0x4, NULL, TAP_IDLE);
        if (retval != ERROR_OK)
                return retval;
 
        if (arm7_9->need_bypass_before_restart) {
                arm7_9->need_bypass_before_restart = 0;
 
-               retval = arm_jtag_set_instr(jtag_info, 0xf, NULL, TAP_IDLE);
+               retval = arm_jtag_set_instr(jtag_info->tap, 0xf, NULL, TAP_IDLE);
                if (retval != ERROR_OK)
                        return retval;
        }
-       retval = arm_jtag_set_instr(jtag_info, 0x4, NULL, TAP_IDLE);
+       retval = arm_jtag_set_instr(jtag_info->tap, 0x4, NULL, TAP_IDLE);
        if (retval != ERROR_OK)
                return retval;
 
 
                retval = arm_jtag_scann(&arm7_9->jtag_info, 0x1, TAP_DRPAUSE);
                if (retval != ERROR_OK)
                        return retval;
-               retval = arm_jtag_set_instr(&arm7_9->jtag_info, arm7_9->jtag_info.intest_instr, NULL, TAP_DRPAUSE);
+               retval = arm_jtag_set_instr(arm7_9->jtag_info.tap, arm7_9->jtag_info.intest_instr, NULL, TAP_DRPAUSE);
                if (retval != ERROR_OK)
                        return retval;
 
        retval = arm_jtag_scann(jtag_info, 0x1, TAP_DRPAUSE);
        if (retval != ERROR_OK)
                return retval;
-       retval = arm_jtag_set_instr(jtag_info, jtag_info->intest_instr, NULL, TAP_DRPAUSE);
+       retval = arm_jtag_set_instr(jtag_info->tap, jtag_info->intest_instr, NULL, TAP_DRPAUSE);
        if (retval != ERROR_OK)
                return retval;
 
        retval = arm_jtag_scann(jtag_info, 0x1, TAP_DRPAUSE);
        if (retval != ERROR_OK)
                return retval;
-       retval = arm_jtag_set_instr(jtag_info, jtag_info->intest_instr, NULL, TAP_DRPAUSE);
+       retval = arm_jtag_set_instr(jtag_info->tap, jtag_info->intest_instr, NULL, TAP_DRPAUSE);
        if (retval != ERROR_OK)
                return retval;
 
        retval = arm_jtag_scann(jtag_info, 0x1, TAP_DRPAUSE);
        if (retval != ERROR_OK)
                return retval;
-       retval = arm_jtag_set_instr(jtag_info, jtag_info->intest_instr, NULL, TAP_DRPAUSE);
+       retval = arm_jtag_set_instr(jtag_info->tap, jtag_info->intest_instr, NULL, TAP_DRPAUSE);
        if (retval != ERROR_OK)
                return retval;
 
 
        retval = arm_jtag_scann(jtag_info, 0xf, TAP_IDLE);
        if (retval != ERROR_OK)
                return retval;
-       retval = arm_jtag_set_instr(jtag_info, jtag_info->intest_instr, NULL, TAP_IDLE);
+       retval = arm_jtag_set_instr(jtag_info->tap, jtag_info->intest_instr, NULL, TAP_IDLE);
        if (retval != ERROR_OK)
                return retval;
 
        retval = arm_jtag_scann(jtag_info, 0xf, TAP_IDLE);
        if (retval != ERROR_OK)
                return retval;
-       retval = arm_jtag_set_instr(jtag_info, jtag_info->intest_instr, NULL, TAP_IDLE);
+       retval = arm_jtag_set_instr(jtag_info->tap, jtag_info->intest_instr, NULL, TAP_IDLE);
        if (retval != ERROR_OK)
                return retval;
 
        retval = arm_jtag_scann(jtag_info, 0xf, TAP_IDLE);
        if (retval != ERROR_OK)
                return retval;
-       retval = arm_jtag_set_instr(jtag_info, jtag_info->intest_instr, NULL, TAP_IDLE);
+       retval = arm_jtag_set_instr(jtag_info->tap, jtag_info->intest_instr, NULL, TAP_IDLE);
        if (retval != ERROR_OK)
                return retval;
 
 
        retval = arm_jtag_scann(jtag_info, 0xf, TAP_IDLE);
        if (retval != ERROR_OK)
                return retval;
-       retval = arm_jtag_set_instr(jtag_info, jtag_info->intest_instr, NULL, TAP_IDLE);
+       retval = arm_jtag_set_instr(jtag_info->tap, jtag_info->intest_instr, NULL, TAP_IDLE);
        if (retval != ERROR_OK)
                return retval;
 
        LOG_DEBUG("addr: 0x%x value: %8.8x", address, *value);
 #endif
 
-       retval = arm_jtag_set_instr(jtag_info, 0xc, NULL, TAP_IDLE);
+       retval = arm_jtag_set_instr(jtag_info->tap, 0xc, NULL, TAP_IDLE);
        if (retval != ERROR_OK)
                return retval;
 
        retval = arm_jtag_scann(jtag_info, 0xf, TAP_IDLE);
        if (retval != ERROR_OK)
                return retval;
-       retval = arm_jtag_set_instr(jtag_info, jtag_info->intest_instr, NULL, TAP_IDLE);
+       retval = arm_jtag_set_instr(jtag_info->tap, jtag_info->intest_instr, NULL, TAP_IDLE);
        if (retval != ERROR_OK)
                return retval;
 
        LOG_DEBUG("addr: 0x%x value: %8.8x", address, value);
 #endif
 
-       retval = arm_jtag_set_instr(jtag_info, 0xf, NULL, TAP_IDLE);
+       retval = arm_jtag_set_instr(jtag_info->tap, 0xf, NULL, TAP_IDLE);
        if (retval != ERROR_OK)
                return retval;
 
 
        retval = arm_jtag_scann(jtag_info, 0xf, TAP_IDLE);
        if (retval != ERROR_OK)
                return retval;
-       retval = arm_jtag_set_instr(jtag_info, jtag_info->intest_instr, NULL, TAP_IDLE);
+       retval = arm_jtag_set_instr(jtag_info->tap, jtag_info->intest_instr, NULL, TAP_IDLE);
        if (retval != ERROR_OK)
                return retval;
 
        retval = arm_jtag_scann(jtag_info, 0xf, TAP_IDLE);
        if (retval != ERROR_OK)
                return retval;
-       retval = arm_jtag_set_instr(jtag_info, jtag_info->intest_instr, NULL, TAP_IDLE);
+       retval = arm_jtag_set_instr(jtag_info->tap, jtag_info->intest_instr, NULL, TAP_IDLE);
        if (retval != ERROR_OK)
                return retval;
 
 
        retval = arm_jtag_scann(jtag_info, 0xf, TAP_IDLE);
        if (retval != ERROR_OK)
                return retval;
-       retval = arm_jtag_set_instr(jtag_info, jtag_info->intest_instr, NULL, TAP_IDLE);
+       retval = arm_jtag_set_instr(jtag_info->tap, jtag_info->intest_instr, NULL, TAP_IDLE);
        if (retval != ERROR_OK)
                return retval;
 
        retval = arm_jtag_scann(jtag_info, 0xf, TAP_IDLE);
        if (retval != ERROR_OK)
                return retval;
-       retval = arm_jtag_set_instr(jtag_info, jtag_info->intest_instr, NULL, TAP_IDLE);
+       retval = arm_jtag_set_instr(jtag_info->tap, jtag_info->intest_instr, NULL, TAP_IDLE);
        if (retval != ERROR_OK)
                return retval;
 
 
                retval = arm_jtag_scann(&arm7_9->jtag_info, 0x1, TAP_DRPAUSE);
                if (retval != ERROR_OK)
                        return retval;
-               retval = arm_jtag_set_instr(&arm7_9->jtag_info, arm7_9->jtag_info.intest_instr, NULL, TAP_DRPAUSE);
+               retval = arm_jtag_set_instr(arm7_9->jtag_info.tap, arm7_9->jtag_info.intest_instr, NULL, TAP_DRPAUSE);
                if (retval != ERROR_OK)
                        return retval;
 
        if (retval != ERROR_OK)
                return retval;
 
-       retval = arm_jtag_set_instr(jtag_info, jtag_info->intest_instr, NULL, TAP_DRPAUSE);
+       retval = arm_jtag_set_instr(jtag_info->tap, jtag_info->intest_instr, NULL, TAP_DRPAUSE);
        if (retval != ERROR_OK)
                return retval;
 
        if (retval != ERROR_OK)
                return retval;
 
-       retval = arm_jtag_set_instr(jtag_info, jtag_info->intest_instr, NULL, TAP_DRPAUSE);
+       retval = arm_jtag_set_instr(jtag_info->tap, jtag_info->intest_instr, NULL, TAP_DRPAUSE);
        if (retval != ERROR_OK)
                return retval;
 
        if (retval != ERROR_OK)
                return retval;
 
-       retval = arm_jtag_set_instr(jtag_info, jtag_info->intest_instr, NULL, TAP_DRPAUSE);
+       retval = arm_jtag_set_instr(jtag_info->tap, jtag_info->intest_instr, NULL, TAP_DRPAUSE);
        if (retval != ERROR_OK)
                return retval;
 
 
 struct adiv5_dap {
        const struct dap_ops *ops;
 
-       struct arm_jtag *jtag_info;
+       struct jtag_tap *tap;
        /* Control config */
        uint32_t dp_ctrl_stat;
 
 
 #define _ARM_JTAG_SCAN_N_CHECK_
 #endif
 
-int arm_jtag_set_instr_inner(struct arm_jtag *jtag_info,
+int arm_jtag_set_instr_inner(struct jtag_tap *tap,
                uint32_t new_instr, void *no_verify_capture, tap_state_t end_state)
 {
-       struct jtag_tap *tap;
-       tap = jtag_info->tap;
        struct scan_field field;
        uint8_t t[4];
 
        buf_set_u32(out_value, 0, jtag_info->scann_size, new_scan_chain);
        struct scan_field field = { .num_bits = jtag_info->scann_size, .out_value = out_value, };
 
-       retval = arm_jtag_set_instr(jtag_info, jtag_info->scann_instr, NULL, end_state);
+       retval = arm_jtag_set_instr(jtag_info->tap, jtag_info->scann_instr, NULL, end_state);
        if (retval != ERROR_OK)
                return retval;
 
 
        uint32_t intest_instr;
 };
 
-int arm_jtag_set_instr_inner(struct arm_jtag *jtag_info, uint32_t new_instr,
+int arm_jtag_set_instr_inner(struct jtag_tap *tap, uint32_t new_instr,
                void *no_verify_capture,
                tap_state_t end_state);
 
-static inline int arm_jtag_set_instr(struct arm_jtag *jtag_info,
+static inline int arm_jtag_set_instr(struct jtag_tap *tap,
                uint32_t new_instr, void *no_verify_capture, tap_state_t end_state)
 {
        /* inline most common code path */
-       struct jtag_tap *tap;
-       tap = jtag_info->tap;
-       assert(tap != NULL);
-
        if (buf_get_u32(tap->cur_instr, 0, tap->ir_length) != new_instr)
-               return arm_jtag_set_instr_inner(jtag_info, new_instr, no_verify_capture, end_state);
+               return arm_jtag_set_instr_inner(tap, new_instr, no_verify_capture, end_state);
 
        return ERROR_OK;
 
 
        if (!tap->dap) {
                tap->dap = dap_init();
 
-               /* prepare JTAG information for the new target */
-               cortex_a->jtag_info.tap = tap;
-               cortex_a->jtag_info.scann_size = 4;
-
                /* Leave (only) generic DAP stuff for debugport_init() */
-               tap->dap->jtag_info = &cortex_a->jtag_info;
+               tap->dap->tap = tap;
        }
 
        tap->dap->ap[dap_ap_get_select(tap->dap)].memaccess_tck = 80;
 
 
 struct cortex_a_common {
        int common_magic;
-       struct arm_jtag jtag_info;
 
        /* Context information */
        uint32_t cpudbg_dscr;
 
 static int cortex_m_init_arch_info(struct target *target,
        struct cortex_m_common *cortex_m, struct jtag_tap *tap)
 {
-       int retval;
        struct armv7m_common *armv7m = &cortex_m->armv7m;
 
        armv7m_init_arch_info(target, armv7m);
        if (!tap->dap) {
                tap->dap = dap_init();
 
-               /* prepare JTAG information for the new target */
-               cortex_m->jtag_info.tap = tap;
-               cortex_m->jtag_info.scann_size = 4;
-
                /* Leave (only) generic DAP stuff for debugport_init() */
-               tap->dap->jtag_info = &cortex_m->jtag_info;
+               tap->dap->tap = tap;
        }
 
        /* default reset mode is to use srst if fitted
 
        target_register_timer_callback(cortex_m_handle_target_request, 1, 1, target);
 
-       retval = arm_jtag_setup_connection(&cortex_m->jtag_info);
-       if (retval != ERROR_OK)
-               return retval;
-
        return ERROR_OK;
 }
 
 
 
 struct cortex_m_common {
        int common_magic;
-       struct arm_jtag jtag_info;
 
        /* Context information */
        uint32_t dcb_dhcsr;
 
        if (retval != ERROR_OK)
                return retval;
 
-       retval = arm_jtag_set_instr(ice_reg->jtag_info,
+       retval = arm_jtag_set_instr(ice_reg->jtag_info->tap,
                        ice_reg->jtag_info->intest_instr, NULL, TAP_IDLE);
        if (retval != ERROR_OK)
                return retval;
        retval = arm_jtag_scann(jtag_info, 0x2, TAP_IDLE);
        if (retval != ERROR_OK)
                return retval;
-       retval = arm_jtag_set_instr(jtag_info, jtag_info->intest_instr, NULL, TAP_IDLE);
+       retval = arm_jtag_set_instr(jtag_info->tap, jtag_info->intest_instr, NULL, TAP_IDLE);
        if (retval != ERROR_OK)
                return retval;
 
 
        arm_jtag_scann(ice_reg->jtag_info, 0x2, TAP_IDLE);
 
-       arm_jtag_set_instr(ice_reg->jtag_info, ice_reg->jtag_info->intest_instr, NULL, TAP_IDLE);
+       arm_jtag_set_instr(ice_reg->jtag_info->tap, ice_reg->jtag_info->intest_instr, NULL, TAP_IDLE);
 
        uint8_t reg_addr = ice_reg->addr & 0x1f;
        embeddedice_write_reg_inner(ice_reg->jtag_info->tap, reg_addr, value);
        retval = arm_jtag_scann(jtag_info, 0x2, TAP_IDLE);
        if (retval != ERROR_OK)
                return retval;
-       retval = arm_jtag_set_instr(jtag_info, jtag_info->intest_instr, NULL, TAP_IDLE);
+       retval = arm_jtag_set_instr(jtag_info->tap, jtag_info->intest_instr, NULL, TAP_IDLE);
        if (retval != ERROR_OK)
                return retval;
 
        retval = arm_jtag_scann(jtag_info, 0x2, TAP_IDLE);
        if (retval != ERROR_OK)
                return retval;
-       retval = arm_jtag_set_instr(jtag_info, jtag_info->intest_instr, NULL, TAP_IDLE);
+       retval = arm_jtag_set_instr(jtag_info->tap, jtag_info->intest_instr, NULL, TAP_IDLE);
        if (retval != ERROR_OK)
                return retval;
 
 
        retval = arm_jtag_scann(etm_reg->jtag_info, 0x6, TAP_IDLE);
        if (retval != ERROR_OK)
                return retval;
-       retval = arm_jtag_set_instr(etm_reg->jtag_info,
+       retval = arm_jtag_set_instr(etm_reg->jtag_info->tap,
                        etm_reg->jtag_info->intest_instr,
                        NULL,
                        TAP_IDLE);
        retval = arm_jtag_scann(etm_reg->jtag_info, 0x6, TAP_IDLE);
        if (retval != ERROR_OK)
                return retval;
-       retval = arm_jtag_set_instr(etm_reg->jtag_info,
+       retval = arm_jtag_set_instr(etm_reg->jtag_info->tap,
                        etm_reg->jtag_info->intest_instr,
                        NULL,
                        TAP_IDLE);
 
        if (retval != ERROR_OK)
                return retval;
 
-       retval = arm_jtag_set_instr(jtag_info, jtag_info->intest_instr, NULL, TAP_DRPAUSE);
+       retval = arm_jtag_set_instr(jtag_info->tap, jtag_info->intest_instr, NULL, TAP_DRPAUSE);
        if (retval != ERROR_OK)
                return retval;