You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by ad...@apache.org on 2016/06/17 23:38:47 UTC
[02/63] [abbrv] [partial] incubator-mynewt-site git commit: remove
untarred files for openocd
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-site/blob/69f466b5/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/src/jtag/drivers/arm-jtag-ew.c
----------------------------------------------------------------------
diff --git a/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/src/jtag/drivers/arm-jtag-ew.c b/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/src/jtag/drivers/arm-jtag-ew.c
deleted file mode 100755
index 4c4cc6d..0000000
--- a/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/src/jtag/drivers/arm-jtag-ew.c
+++ /dev/null
@@ -1,795 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2009 by Dimitar Dimitrov <di...@gmail.com> *
- * based on Dominic Rath's and Benedikt Sauter's usbprog.c *
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. *
- ***************************************************************************/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <jtag/interface.h>
-#include <jtag/commands.h>
-#include <usb.h>
-#include "usb_common.h"
-
-#define USB_VID 0x15ba
-#define USB_PID 0x001e
-
-#define ARMJTAGEW_EPT_BULK_OUT 0x01u
-#define ARMJTAGEW_EPT_BULK_IN 0x82u
-
-#define ARMJTAGEW_USB_TIMEOUT 2000
-
-#define ARMJTAGEW_IN_BUFFER_SIZE (4*1024)
-#define ARMJTAGEW_OUT_BUFFER_SIZE (4*1024)
-
-/* USB command request codes. */
-#define CMD_GET_VERSION 0x00
-#define CMD_SELECT_DPIMPL 0x10
-#define CMD_SET_TCK_FREQUENCY 0x11
-#define CMD_GET_TCK_FREQUENCY 0x12
-#define CMD_MEASURE_MAX_TCK_FREQ 0x15
-#define CMD_MEASURE_RTCK_RESPONSE 0x16
-#define CMD_TAP_SHIFT 0x17
-#define CMD_SET_TAPHW_STATE 0x20
-#define CMD_GET_TAPHW_STATE 0x21
-#define CMD_TGPWR_SETUP 0x22
-
-/* Global USB buffers */
-static uint8_t usb_in_buffer[ARMJTAGEW_IN_BUFFER_SIZE];
-static uint8_t usb_out_buffer[ARMJTAGEW_OUT_BUFFER_SIZE];
-
-/* Queue command functions */
-static void armjtagew_end_state(tap_state_t state);
-static void armjtagew_state_move(void);
-static void armjtagew_path_move(int num_states, tap_state_t *path);
-static void armjtagew_runtest(int num_cycles);
-static void armjtagew_scan(bool ir_scan,
- enum scan_type type,
- uint8_t *buffer,
- int scan_size,
- struct scan_command *command);
-static void armjtagew_reset(int trst, int srst);
-/* static void armjtagew_simple_command(uint8_t command); */
-static int armjtagew_get_status(void);
-
-/* tap buffer functions */
-static void armjtagew_tap_init(void);
-static int armjtagew_tap_execute(void);
-static void armjtagew_tap_ensure_space(int scans, int bits);
-static void armjtagew_tap_append_step(int tms, int tdi);
-static void armjtagew_tap_append_scan(int length, uint8_t *buffer, struct scan_command *command);
-
-/* ARM-JTAG-EW lowlevel functions */
-struct armjtagew {
- struct usb_dev_handle *usb_handle;
-};
-
-static struct armjtagew *armjtagew_usb_open(void);
-static void armjtagew_usb_close(struct armjtagew *armjtagew);
-static int armjtagew_usb_message(struct armjtagew *armjtagew, int out_length, int in_length);
-static int armjtagew_usb_write(struct armjtagew *armjtagew, int out_length);
-static int armjtagew_usb_read(struct armjtagew *armjtagew, int exp_in_length);
-
-/* helper functions */
-static int armjtagew_get_version_info(void);
-
-#ifdef _DEBUG_USB_COMMS_
-static void armjtagew_debug_buffer(uint8_t *buffer, int length);
-#endif
-
-static struct armjtagew *armjtagew_handle;
-
-/**************************************************************************
- * External interface implementation */
-
-static int armjtagew_execute_queue(void)
-{
- struct jtag_command *cmd = jtag_command_queue;
- int scan_size;
- enum scan_type type;
- uint8_t *buffer;
-
- while (cmd != NULL) {
- switch (cmd->type) {
- case JTAG_RUNTEST:
- DEBUG_JTAG_IO("runtest %i cycles, end in %i",
- cmd->cmd.runtest->num_cycles, \
- cmd->cmd.runtest->end_state);
-
- armjtagew_end_state(cmd->cmd.runtest->end_state);
- armjtagew_runtest(cmd->cmd.runtest->num_cycles);
- break;
-
- case JTAG_TLR_RESET:
- DEBUG_JTAG_IO("statemove end in %i", cmd->cmd.statemove->end_state);
-
- armjtagew_end_state(cmd->cmd.statemove->end_state);
- armjtagew_state_move();
- break;
-
- case JTAG_PATHMOVE:
- DEBUG_JTAG_IO("pathmove: %i states, end in %i", \
- cmd->cmd.pathmove->num_states, \
- cmd->cmd.pathmove->path[cmd->cmd.pathmove->num_states - 1]);
-
- armjtagew_path_move(cmd->cmd.pathmove->num_states,
- cmd->cmd.pathmove->path);
- break;
-
- case JTAG_SCAN:
- DEBUG_JTAG_IO("scan end in %i", cmd->cmd.scan->end_state);
-
- armjtagew_end_state(cmd->cmd.scan->end_state);
-
- scan_size = jtag_build_buffer(cmd->cmd.scan, &buffer);
- DEBUG_JTAG_IO("scan input, length = %d", scan_size);
-
-#ifdef _DEBUG_USB_COMMS_
- armjtagew_debug_buffer(buffer, (scan_size + 7) / 8);
-#endif
- type = jtag_scan_type(cmd->cmd.scan);
- armjtagew_scan(cmd->cmd.scan->ir_scan,
- type, buffer,
- scan_size, cmd->cmd.scan);
- break;
-
- case JTAG_RESET:
- DEBUG_JTAG_IO("reset trst: %i srst %i",
- cmd->cmd.reset->trst,
- cmd->cmd.reset->srst);
-
- armjtagew_tap_execute();
-
- if (cmd->cmd.reset->trst == 1)
- tap_set_state(TAP_RESET);
- armjtagew_reset(cmd->cmd.reset->trst, cmd->cmd.reset->srst);
- break;
-
- case JTAG_SLEEP:
- DEBUG_JTAG_IO("sleep %i", cmd->cmd.sleep->us);
- armjtagew_tap_execute();
- jtag_sleep(cmd->cmd.sleep->us);
- break;
-
- default:
- LOG_ERROR("BUG: unknown JTAG command type encountered");
- exit(-1);
- }
- cmd = cmd->next;
- }
-
- return armjtagew_tap_execute();
-}
-
-/* Sets speed in kHz. */
-static int armjtagew_speed(int speed)
-{
- int result;
- int speed_real;
-
-
- usb_out_buffer[0] = CMD_SET_TCK_FREQUENCY;
- buf_set_u32(usb_out_buffer + 1, 0, 32, speed*1000);
-
- result = armjtagew_usb_message(armjtagew_handle, 5, 4);
-
- if (result < 0) {
- LOG_ERROR("ARM-JTAG-EW setting speed failed (%d)", result);
- return ERROR_JTAG_DEVICE_ERROR;
- }
-
- usb_out_buffer[0] = CMD_GET_TCK_FREQUENCY;
- result = armjtagew_usb_message(armjtagew_handle, 1, 4);
- speed_real = (int)buf_get_u32(usb_in_buffer, 0, 32) / 1000;
- if (result < 0) {
- LOG_ERROR("ARM-JTAG-EW getting speed failed (%d)", result);
- return ERROR_JTAG_DEVICE_ERROR;
- } else
- LOG_INFO("Requested speed %dkHz, emulator reported %dkHz.", speed, speed_real);
-
- return ERROR_OK;
-}
-
-static int armjtagew_khz(int khz, int *jtag_speed)
-{
- *jtag_speed = khz;
-
- return ERROR_OK;
-}
-
-static int armjtagew_speed_div(int speed, int *khz)
-{
- *khz = speed;
-
- return ERROR_OK;
-}
-
-static int armjtagew_init(void)
-{
- int check_cnt;
-
- armjtagew_handle = armjtagew_usb_open();
-
- if (armjtagew_handle == 0) {
- LOG_ERROR(
- "Cannot find ARM-JTAG-EW Interface! Please check connection and permissions.");
- return ERROR_JTAG_INIT_FAILED;
- }
-
- check_cnt = 0;
- while (check_cnt < 3) {
- if (armjtagew_get_version_info() == ERROR_OK) {
- /* attempt to get status */
- armjtagew_get_status();
- break;
- }
-
- check_cnt++;
- }
-
- if (check_cnt == 3)
- LOG_INFO("ARM-JTAG-EW initial read failed, don't worry");
-
- /* Initial JTAG speed (for reset and initialization): 32 kHz */
- armjtagew_speed(32);
-
- LOG_INFO("ARM-JTAG-EW JTAG Interface ready");
-
- armjtagew_reset(0, 0);
- armjtagew_tap_init();
-
- return ERROR_OK;
-}
-
-static int armjtagew_quit(void)
-{
- armjtagew_usb_close(armjtagew_handle);
- return ERROR_OK;
-}
-
-/**************************************************************************
- * Queue command implementations */
-
-static void armjtagew_end_state(tap_state_t state)
-{
- if (tap_is_state_stable(state))
- tap_set_end_state(state);
- else {
- LOG_ERROR("BUG: %i is not a valid end state", state);
- exit(-1);
- }
-}
-
-/* Goes to the end state. */
-static void armjtagew_state_move(void)
-{
- int i;
- int tms = 0;
- uint8_t tms_scan = tap_get_tms_path(tap_get_state(), tap_get_end_state());
- int tms_count = tap_get_tms_path_len(tap_get_state(), tap_get_end_state());
-
- for (i = 0; i < tms_count; i++) {
- tms = (tms_scan >> i) & 1;
- armjtagew_tap_append_step(tms, 0);
- }
-
- tap_set_state(tap_get_end_state());
-}
-
-static void armjtagew_path_move(int num_states, tap_state_t *path)
-{
- int i;
-
- for (i = 0; i < num_states; i++) {
- /*
- * TODO: The ARM-JTAG-EW hardware delays TDI with 3 TCK cycles when in RTCK mode.
- * Either handle that here, or update the documentation with examples
- * how to fix that in the configuration files.
- */
- if (path[i] == tap_state_transition(tap_get_state(), false))
- armjtagew_tap_append_step(0, 0);
- else if (path[i] == tap_state_transition(tap_get_state(), true))
- armjtagew_tap_append_step(1, 0);
- else {
- LOG_ERROR("BUG: %s -> %s isn't a valid TAP transition",
- tap_state_name(tap_get_state()), tap_state_name(path[i]));
- exit(-1);
- }
-
- tap_set_state(path[i]);
- }
-
- tap_set_end_state(tap_get_state());
-}
-
-static void armjtagew_runtest(int num_cycles)
-{
- int i;
-
- tap_state_t saved_end_state = tap_get_end_state();
-
- /* only do a state_move when we're not already in IDLE */
- if (tap_get_state() != TAP_IDLE) {
- armjtagew_end_state(TAP_IDLE);
- armjtagew_state_move();
- }
-
- /* execute num_cycles */
- for (i = 0; i < num_cycles; i++)
- armjtagew_tap_append_step(0, 0);
-
- /* finish in end_state */
- armjtagew_end_state(saved_end_state);
- if (tap_get_state() != tap_get_end_state())
- armjtagew_state_move();
-}
-
-static void armjtagew_scan(bool ir_scan,
- enum scan_type type,
- uint8_t *buffer,
- int scan_size,
- struct scan_command *command)
-{
- tap_state_t saved_end_state;
-
- armjtagew_tap_ensure_space(1, scan_size + 8);
-
- saved_end_state = tap_get_end_state();
-
- /* Move to appropriate scan state */
- armjtagew_end_state(ir_scan ? TAP_IRSHIFT : TAP_DRSHIFT);
-
- /* Only move if we're not already there */
- if (tap_get_state() != tap_get_end_state())
- armjtagew_state_move();
-
- armjtagew_end_state(saved_end_state);
-
- /* Scan */
- armjtagew_tap_append_scan(scan_size, buffer, command);
-
- /* We are in Exit1, go to Pause */
- armjtagew_tap_append_step(0, 0);
-
- tap_set_state(ir_scan ? TAP_IRPAUSE : TAP_DRPAUSE);
-
- if (tap_get_state() != tap_get_end_state())
- armjtagew_state_move();
-}
-
-static void armjtagew_reset(int trst, int srst)
-{
- const uint8_t trst_mask = (1u << 5);
- const uint8_t srst_mask = (1u << 6);
- uint8_t val = 0;
- uint8_t outp_en = 0;
- uint8_t change_mask = 0;
- int result;
-
- LOG_DEBUG("trst: %i, srst: %i", trst, srst);
-
- if (srst == 0) {
- val |= srst_mask;
- outp_en &= ~srst_mask; /* tristate */
- change_mask |= srst_mask;
- } else if (srst == 1) {
- val &= ~srst_mask;
- outp_en |= srst_mask;
- change_mask |= srst_mask;
- }
-
- if (trst == 0) {
- val |= trst_mask;
- outp_en &= ~trst_mask; /* tristate */
- change_mask |= trst_mask;
- } else if (trst == 1) {
- val &= ~trst_mask;
- outp_en |= trst_mask;
- change_mask |= trst_mask;
- }
-
- usb_out_buffer[0] = CMD_SET_TAPHW_STATE;
- usb_out_buffer[1] = val;
- usb_out_buffer[2] = outp_en;
- usb_out_buffer[3] = change_mask;
- result = armjtagew_usb_write(armjtagew_handle, 4);
- if (result != 4)
- LOG_ERROR("ARM-JTAG-EW TRST/SRST pin set failed failed (%d)", result);
-}
-
-static int armjtagew_get_status(void)
-{
- int result;
-
- usb_out_buffer[0] = CMD_GET_TAPHW_STATE;
- result = armjtagew_usb_message(armjtagew_handle, 1, 12);
-
- if (result == 0) {
- unsigned int u_tg = buf_get_u32(usb_in_buffer, 0, 16);
- LOG_INFO(
- "U_tg = %d mV, U_aux = %d mV, U_tgpwr = %d mV, I_tgpwr = %d mA, D1 = %d, Target power %s %s",
- (int)(buf_get_u32(usb_in_buffer + 0, 0, 16)),
- (int)(buf_get_u32(usb_in_buffer + 2, 0, 16)),
- (int)(buf_get_u32(usb_in_buffer + 4, 0, 16)),
- (int)(buf_get_u32(usb_in_buffer + 6, 0, 16)),
- usb_in_buffer[9],
- usb_in_buffer[11] ? "OVERCURRENT" : "OK",
- usb_in_buffer[10] ? "enabled" : "disabled");
-
- if (u_tg < 1500)
- LOG_ERROR("Vref too low. Check Target Power");
- } else
- LOG_ERROR("ARM-JTAG-EW command CMD_GET_TAPHW_STATE failed (%d)", result);
-
- return ERROR_OK;
-}
-
-static int armjtagew_get_version_info(void)
-{
- int result;
- char sn[16];
- char auxinfo[257];
-
- /* query hardware version */
- usb_out_buffer[0] = CMD_GET_VERSION;
- result = armjtagew_usb_message(armjtagew_handle, 1, 4 + 15 + 256);
-
- if (result != 0) {
- LOG_ERROR("ARM-JTAG-EW command CMD_GET_VERSION failed (%d)", result);
- return ERROR_JTAG_DEVICE_ERROR;
- }
-
- memcpy(sn, usb_in_buffer + 4, 15);
- sn[15] = '\0';
- memcpy(auxinfo, usb_in_buffer + 4+15, 256);
- auxinfo[256] = '\0';
-
- LOG_INFO(
- "ARM-JTAG-EW firmware version %d.%d, hardware revision %c, SN=%s, Additional info: %s", \
- usb_in_buffer[1],
- usb_in_buffer[0], \
- isgraph(usb_in_buffer[2]) ? usb_in_buffer[2] : 'X', \
- sn,
- auxinfo);
-
- if (1 != usb_in_buffer[1] || 6 != usb_in_buffer[0])
- LOG_WARNING(
- "ARM-JTAG-EW firmware version %d.%d is untested with this version of OpenOCD. You might experience unexpected behavior.",
- usb_in_buffer[1],
- usb_in_buffer[0]);
- return ERROR_OK;
-}
-
-COMMAND_HANDLER(armjtagew_handle_armjtagew_info_command)
-{
- if (armjtagew_get_version_info() == ERROR_OK) {
- /* attempt to get status */
- armjtagew_get_status();
- }
-
- return ERROR_OK;
-}
-
-static const struct command_registration armjtagew_command_handlers[] = {
- {
- .name = "armjtagew_info",
- .handler = &armjtagew_handle_armjtagew_info_command,
- .mode = COMMAND_EXEC,
- .help = "query armjtagew info",
- },
- COMMAND_REGISTRATION_DONE
-};
-
-struct jtag_interface armjtagew_interface = {
- .name = "arm-jtag-ew",
- .commands = armjtagew_command_handlers,
- .transports = jtag_only,
- .execute_queue = armjtagew_execute_queue,
- .speed = armjtagew_speed,
- .speed_div = armjtagew_speed_div,
- .khz = armjtagew_khz,
- .init = armjtagew_init,
- .quit = armjtagew_quit,
-};
-
-/**************************************************************************
- * ARM-JTAG-EW tap functions */
-
-/* 2048 is the max value we can use here */
-#define ARMJTAGEW_TAP_BUFFER_SIZE 2048
-
-static int tap_length;
-static uint8_t tms_buffer[ARMJTAGEW_TAP_BUFFER_SIZE];
-static uint8_t tdi_buffer[ARMJTAGEW_TAP_BUFFER_SIZE];
-static uint8_t tdo_buffer[ARMJTAGEW_TAP_BUFFER_SIZE];
-
-struct pending_scan_result {
- int first; /* First bit position in tdo_buffer to read */
- int length; /* Number of bits to read */
- struct scan_command *command; /* Corresponding scan command */
- uint8_t *buffer;
-};
-
-#define MAX_PENDING_SCAN_RESULTS 256
-
-static int pending_scan_results_length;
-static struct pending_scan_result pending_scan_results_buffer[MAX_PENDING_SCAN_RESULTS];
-
-static int last_tms;
-
-static void armjtagew_tap_init(void)
-{
- tap_length = 0;
- pending_scan_results_length = 0;
-}
-
-static void armjtagew_tap_ensure_space(int scans, int bits)
-{
- int available_scans = MAX_PENDING_SCAN_RESULTS - pending_scan_results_length;
- int available_bits = ARMJTAGEW_TAP_BUFFER_SIZE * 8 - tap_length;
-
- if (scans > available_scans || bits > available_bits)
- armjtagew_tap_execute();
-}
-
-static void armjtagew_tap_append_step(int tms, int tdi)
-{
- last_tms = tms;
- int index_local = tap_length / 8;
-
- if (index_local < ARMJTAGEW_TAP_BUFFER_SIZE) {
- int bit_index = tap_length % 8;
- uint8_t bit = 1 << bit_index;
-
- if (tms)
- tms_buffer[index_local] |= bit;
- else
- tms_buffer[index_local] &= ~bit;
-
- if (tdi)
- tdi_buffer[index_local] |= bit;
- else
- tdi_buffer[index_local] &= ~bit;
-
- tap_length++;
- } else
- LOG_ERROR("armjtagew_tap_append_step, overflow");
-}
-
-void armjtagew_tap_append_scan(int length, uint8_t *buffer, struct scan_command *command)
-{
- struct pending_scan_result *pending_scan_result =
- &pending_scan_results_buffer[pending_scan_results_length];
- int i;
-
- pending_scan_result->first = tap_length;
- pending_scan_result->length = length;
- pending_scan_result->command = command;
- pending_scan_result->buffer = buffer;
-
- for (i = 0; i < length; i++)
- armjtagew_tap_append_step((i < length-1 ? 0 : 1), (buffer[i/8] >> (i%8)) & 1);
- pending_scan_results_length++;
-}
-
-/* Pad and send a tap sequence to the device, and receive the answer.
- * For the purpose of padding we assume that we are in idle or pause state. */
-static int armjtagew_tap_execute(void)
-{
- int byte_length;
- int tms_offset;
- int tdi_offset;
- int i;
- int result;
-
- if (tap_length > 0) {
- /* Pad last byte so that tap_length is divisible by 8 */
- while (tap_length % 8 != 0) {
- /* More of the last TMS value keeps us in the same state,
- * analogous to free-running JTAG interfaces. */
- armjtagew_tap_append_step(last_tms, 0);
- }
-
- byte_length = tap_length / 8;
-
- usb_out_buffer[0] = CMD_TAP_SHIFT;
- buf_set_u32(usb_out_buffer + 1, 0, 16, byte_length);
-
- tms_offset = 3;
- for (i = 0; i < byte_length; i++)
- usb_out_buffer[tms_offset + i] = flip_u32(tms_buffer[i], 8);
-
- tdi_offset = tms_offset + byte_length;
- for (i = 0; i < byte_length; i++)
- usb_out_buffer[tdi_offset + i] = flip_u32(tdi_buffer[i], 8);
-
- result = armjtagew_usb_message(armjtagew_handle,
- 3 + 2 * byte_length,
- byte_length + 4);
-
- if (result == 0) {
- int stat_local;
-
- stat_local = (int)buf_get_u32(usb_in_buffer + byte_length, 0, 32);
- if (stat_local) {
- LOG_ERROR(
- "armjtagew_tap_execute, emulator returned error code %d for a CMD_TAP_SHIFT command",
- stat_local);
- return ERROR_JTAG_QUEUE_FAILED;
- }
-
- for (i = 0; i < byte_length; i++)
- tdo_buffer[i] = flip_u32(usb_in_buffer[i], 8);
-
- for (i = 0; i < pending_scan_results_length; i++) {
- struct pending_scan_result *pending_scan_result =
- &pending_scan_results_buffer[i];
- uint8_t *buffer = pending_scan_result->buffer;
- int length = pending_scan_result->length;
- int first = pending_scan_result->first;
- struct scan_command *command = pending_scan_result->command;
-
- /* Copy to buffer */
- buf_set_buf(tdo_buffer, first, buffer, 0, length);
-
- DEBUG_JTAG_IO("pending scan result, length = %d", length);
-
-#ifdef _DEBUG_USB_COMMS_
- armjtagew_debug_buffer(buffer, byte_length);
-#endif
-
- if (jtag_read_buffer(buffer, command) != ERROR_OK) {
- armjtagew_tap_init();
- return ERROR_JTAG_QUEUE_FAILED;
- }
-
- if (pending_scan_result->buffer != NULL)
- free(pending_scan_result->buffer);
- }
- } else {
- LOG_ERROR("armjtagew_tap_execute, wrong result %d, expected %d",
- result,
- byte_length);
- return ERROR_JTAG_QUEUE_FAILED;
- }
-
- armjtagew_tap_init();
- }
-
- return ERROR_OK;
-}
-
-/****************************************************************************
- * JLink USB low-level functions */
-
-static struct armjtagew *armjtagew_usb_open()
-{
- usb_init();
-
- const uint16_t vids[] = { USB_VID, 0 };
- const uint16_t pids[] = { USB_PID, 0 };
- struct usb_dev_handle *dev;
- if (jtag_usb_open(vids, pids, &dev) != ERROR_OK)
- return NULL;
-
- struct armjtagew *result = malloc(sizeof(struct armjtagew));
- result->usb_handle = dev;
-
-#if 0
- /* usb_set_configuration required under win32 */
- usb_set_configuration(dev, dev->config[0].bConfigurationValue);
-#endif
- usb_claim_interface(dev, 0);
-#if 0
- /*
- * This makes problems under Mac OS X. And is not needed
- * under Windows. Hopefully this will not break a linux build
- */
- usb_set_altinterface(dev, 0);
-#endif
- return result;
-}
-
-static void armjtagew_usb_close(struct armjtagew *armjtagew)
-{
- usb_close(armjtagew->usb_handle);
- free(armjtagew);
-}
-
-/* Send a message and receive the reply. */
-static int armjtagew_usb_message(struct armjtagew *armjtagew, int out_length, int in_length)
-{
- int result;
-
- result = armjtagew_usb_write(armjtagew, out_length);
- if (result == out_length) {
- result = armjtagew_usb_read(armjtagew, in_length);
- if (result != in_length) {
- LOG_ERROR("usb_bulk_read failed (requested=%d, result=%d)",
- in_length,
- result);
- return -1;
- }
- } else {
- LOG_ERROR("usb_bulk_write failed (requested=%d, result=%d)", out_length, result);
- return -1;
- }
- return 0;
-}
-
-/* Write data from out_buffer to USB. */
-static int armjtagew_usb_write(struct armjtagew *armjtagew, int out_length)
-{
- int result;
-
- if (out_length > ARMJTAGEW_OUT_BUFFER_SIZE) {
- LOG_ERROR("armjtagew_write illegal out_length=%d (max=%d)",
- out_length,
- ARMJTAGEW_OUT_BUFFER_SIZE);
- return -1;
- }
-
- result = usb_bulk_write(armjtagew->usb_handle, ARMJTAGEW_EPT_BULK_OUT, \
- (char *)usb_out_buffer, out_length, ARMJTAGEW_USB_TIMEOUT);
-
- DEBUG_JTAG_IO("armjtagew_usb_write, out_length = %d, result = %d", out_length, result);
-
-#ifdef _DEBUG_USB_COMMS_
- armjtagew_debug_buffer(usb_out_buffer, out_length);
-#endif
- return result;
-}
-
-/* Read data from USB into in_buffer. */
-static int armjtagew_usb_read(struct armjtagew *armjtagew, int exp_in_length)
-{
- int result = usb_bulk_read(armjtagew->usb_handle, ARMJTAGEW_EPT_BULK_IN, \
- (char *)usb_in_buffer, exp_in_length, ARMJTAGEW_USB_TIMEOUT);
-
- DEBUG_JTAG_IO("armjtagew_usb_read, result = %d", result);
-
-#ifdef _DEBUG_USB_COMMS_
- armjtagew_debug_buffer(usb_in_buffer, result);
-#endif
- return result;
-}
-
-#ifdef _DEBUG_USB_COMMS_
-#define BYTES_PER_LINE 16
-
-static void armjtagew_debug_buffer(uint8_t *buffer, int length)
-{
- char line[81];
- char s[4];
- int i;
- int j;
-
- for (i = 0; i < length; i += BYTES_PER_LINE) {
- snprintf(line, 5, "%04x", i);
- for (j = i; j < i + BYTES_PER_LINE && j < length; j++) {
- snprintf(s, 4, " %02x", buffer[j]);
- strcat(line, s);
- }
- LOG_DEBUG("%s", line);
-
- /* Prevent GDB timeout (writing to log might take some time) */
- keep_alive();
- }
-}
-#endif
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-site/blob/69f466b5/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/src/jtag/drivers/at91rm9200.c
----------------------------------------------------------------------
diff --git a/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/src/jtag/drivers/at91rm9200.c b/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/src/jtag/drivers/at91rm9200.c
deleted file mode 100755
index d7e11df..0000000
--- a/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/src/jtag/drivers/at91rm9200.c
+++ /dev/null
@@ -1,268 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2006 by Anders Larsen *
- * al@alarsen.net *
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. *
- ***************************************************************************/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <jtag/interface.h>
-#include "bitbang.h"
-
-#include <sys/mman.h>
-
-/* AT91RM9200 */
-#define AT91C_BASE_SYS (0xfffff000)
-
-/* GPIO assignment */
-#define PIOA (0 << 7)
-#define PIOB (1 << 7)
-#define PIOC (2 << 7)
-#define PIOD (3 << 7)
-
-#define PIO_PER (0) /* PIO enable */
-#define PIO_OER (4) /* output enable */
-#define PIO_ODR (5) /* output disable */
-#define PIO_SODR (12) /* set output data */
-#define PIO_CODR (13) /* clear output data */
-#define PIO_PDSR (15) /* pin data status */
-#define PIO_PPUER (25) /* pull-up enable */
-
-#define NC (0) /* not connected */
-#define P0 (1 << 0)
-#define P1 (1 << 1)
-#define P2 (1 << 2)
-#define P3 (1 << 3)
-#define P4 (1 << 4)
-#define P5 (1 << 5)
-#define P6 (1 << 6)
-#define P7 (1 << 7)
-#define P8 (1 << 8)
-#define P9 (1 << 9)
-#define P10 (1 << 10)
-#define P11 (1 << 11)
-#define P12 (1 << 12)
-#define P13 (1 << 13)
-#define P14 (1 << 14)
-#define P15 (1 << 15)
-#define P16 (1 << 16)
-#define P17 (1 << 17)
-#define P18 (1 << 18)
-#define P19 (1 << 19)
-#define P20 (1 << 20)
-#define P21 (1 << 21)
-#define P22 (1 << 22)
-#define P23 (1 << 23)
-#define P24 (1 << 24)
-#define P25 (1 << 25)
-#define P26 (1 << 26)
-#define P27 (1 << 27)
-#define P28 (1 << 28)
-#define P29 (1 << 29)
-#define P30 (1 << 30)
-#define P31 (1 << 31)
-
-struct device_t {
- const char *name;
- int TDO_PIO; /* PIO holding TDO */
- uint32_t TDO_MASK; /* TDO bitmask */
- int TRST_PIO; /* PIO holding TRST */
- uint32_t TRST_MASK; /* TRST bitmask */
- int TMS_PIO; /* PIO holding TMS */
- uint32_t TMS_MASK; /* TMS bitmask */
- int TCK_PIO; /* PIO holding TCK */
- uint32_t TCK_MASK; /* TCK bitmask */
- int TDI_PIO; /* PIO holding TDI */
- uint32_t TDI_MASK; /* TDI bitmask */
- int SRST_PIO; /* PIO holding SRST */
- uint32_t SRST_MASK; /* SRST bitmask */
-};
-
-static const struct device_t devices[] = {
- { "rea_ecr", PIOD, P27, PIOA, NC, PIOD, P23, PIOD, P24, PIOD, P26, PIOC, P5 },
- { .name = NULL },
-};
-
-/* configuration */
-static char *at91rm9200_device;
-
-/* interface variables
- */
-static const struct device_t *device;
-static int dev_mem_fd;
-static void *sys_controller;
-static uint32_t *pio_base;
-
-/* low level command set
- */
-static int at91rm9200_read(void);
-static void at91rm9200_write(int tck, int tms, int tdi);
-static void at91rm9200_reset(int trst, int srst);
-
-static int at91rm9200_init(void);
-static int at91rm9200_quit(void);
-
-static struct bitbang_interface at91rm9200_bitbang = {
- .read = at91rm9200_read,
- .write = at91rm9200_write,
- .reset = at91rm9200_reset,
- .blink = 0
-};
-
-static int at91rm9200_read(void)
-{
- return (pio_base[device->TDO_PIO + PIO_PDSR] & device->TDO_MASK) != 0;
-}
-
-static void at91rm9200_write(int tck, int tms, int tdi)
-{
- if (tck)
- pio_base[device->TCK_PIO + PIO_SODR] = device->TCK_MASK;
- else
- pio_base[device->TCK_PIO + PIO_CODR] = device->TCK_MASK;
-
- if (tms)
- pio_base[device->TMS_PIO + PIO_SODR] = device->TMS_MASK;
- else
- pio_base[device->TMS_PIO + PIO_CODR] = device->TMS_MASK;
-
- if (tdi)
- pio_base[device->TDI_PIO + PIO_SODR] = device->TDI_MASK;
- else
- pio_base[device->TDI_PIO + PIO_CODR] = device->TDI_MASK;
-}
-
-/* (1) assert or (0) deassert reset lines */
-static void at91rm9200_reset(int trst, int srst)
-{
- if (trst == 0)
- pio_base[device->TRST_PIO + PIO_SODR] = device->TRST_MASK;
- else if (trst == 1)
- pio_base[device->TRST_PIO + PIO_CODR] = device->TRST_MASK;
-
- if (srst == 0)
- pio_base[device->SRST_PIO + PIO_SODR] = device->SRST_MASK;
- else if (srst == 1)
- pio_base[device->SRST_PIO + PIO_CODR] = device->SRST_MASK;
-}
-
-COMMAND_HANDLER(at91rm9200_handle_device_command)
-{
- if (CMD_ARGC == 0)
- return ERROR_COMMAND_SYNTAX_ERROR;
-
- /* only if the device name wasn't overwritten by cmdline */
- if (at91rm9200_device == 0) {
- at91rm9200_device = malloc(strlen(CMD_ARGV[0]) + sizeof(char));
- strcpy(at91rm9200_device, CMD_ARGV[0]);
- }
-
- return ERROR_OK;
-}
-
-static const struct command_registration at91rm9200_command_handlers[] = {
- {
- .name = "at91rm9200_device",
- .handler = &at91rm9200_handle_device_command,
- .mode = COMMAND_CONFIG,
- .help = "query armjtagew info",
- },
- COMMAND_REGISTRATION_DONE
-};
-
-struct jtag_interface at91rm9200_interface = {
- .name = "at91rm9200",
- .execute_queue = bitbang_execute_queue,
- .commands = at91rm9200_command_handlers,
- .init = at91rm9200_init,
- .quit = at91rm9200_quit,
-};
-
-static int at91rm9200_init(void)
-{
- const struct device_t *cur_device;
-
- cur_device = devices;
-
- if (at91rm9200_device == NULL || at91rm9200_device[0] == 0) {
- at91rm9200_device = "rea_ecr";
- LOG_WARNING("No at91rm9200 device specified, using default 'rea_ecr'");
- }
-
- while (cur_device->name) {
- if (strcmp(cur_device->name, at91rm9200_device) == 0) {
- device = cur_device;
- break;
- }
- cur_device++;
- }
-
- if (!device) {
- LOG_ERROR("No matching device found for %s", at91rm9200_device);
- return ERROR_JTAG_INIT_FAILED;
- }
-
- bitbang_interface = &at91rm9200_bitbang;
-
- dev_mem_fd = open("/dev/mem", O_RDWR | O_SYNC);
- if (dev_mem_fd < 0) {
- perror("open");
- return ERROR_JTAG_INIT_FAILED;
- }
-
- sys_controller = mmap(NULL, 4096, PROT_READ | PROT_WRITE,
- MAP_SHARED, dev_mem_fd, AT91C_BASE_SYS);
- if (sys_controller == MAP_FAILED) {
- perror("mmap");
- close(dev_mem_fd);
- return ERROR_JTAG_INIT_FAILED;
- }
- pio_base = (uint32_t *)sys_controller + 0x100;
-
- /*
- * Configure TDO as an input, and TDI, TCK, TMS, TRST, SRST
- * as outputs. Drive TDI and TCK low, and TMS/TRST/SRST high.
- */
- pio_base[device->TDI_PIO + PIO_CODR] = device->TDI_MASK;
- pio_base[device->TDI_PIO + PIO_OER] = device->TDI_MASK;
- pio_base[device->TDI_PIO + PIO_PER] = device->TDI_MASK;
- pio_base[device->TCK_PIO + PIO_CODR] = device->TCK_MASK;
- pio_base[device->TCK_PIO + PIO_OER] = device->TCK_MASK;
- pio_base[device->TCK_PIO + PIO_PER] = device->TCK_MASK;
- pio_base[device->TMS_PIO + PIO_SODR] = device->TMS_MASK;
- pio_base[device->TMS_PIO + PIO_OER] = device->TMS_MASK;
- pio_base[device->TMS_PIO + PIO_PER] = device->TMS_MASK;
- pio_base[device->TRST_PIO + PIO_SODR] = device->TRST_MASK;
- pio_base[device->TRST_PIO + PIO_OER] = device->TRST_MASK;
- pio_base[device->TRST_PIO + PIO_PER] = device->TRST_MASK;
- pio_base[device->SRST_PIO + PIO_SODR] = device->SRST_MASK;
- pio_base[device->SRST_PIO + PIO_OER] = device->SRST_MASK;
- pio_base[device->SRST_PIO + PIO_PER] = device->SRST_MASK;
- pio_base[device->TDO_PIO + PIO_ODR] = device->TDO_MASK;
- pio_base[device->TDO_PIO + PIO_PPUER] = device->TDO_MASK;
- pio_base[device->TDO_PIO + PIO_PER] = device->TDO_MASK;
-
- return ERROR_OK;
-}
-
-static int at91rm9200_quit(void)
-{
-
- return ERROR_OK;
-}
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-site/blob/69f466b5/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/src/jtag/drivers/bcm2835gpio.c
----------------------------------------------------------------------
diff --git a/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/src/jtag/drivers/bcm2835gpio.c b/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/src/jtag/drivers/bcm2835gpio.c
deleted file mode 100755
index e1cc56c..0000000
--- a/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/src/jtag/drivers/bcm2835gpio.c
+++ /dev/null
@@ -1,533 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2013 by Paul Fertser, fercerpav@gmail.com *
- * *
- * Copyright (C) 2012 by Creative Product Design, marc @ cpdesign.com.au *
- * Based on at91rm9200.c (c) Anders Larsen *
- * and RPi GPIO examples by Gert van Loo & Dom *
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. *
- ***************************************************************************/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <jtag/interface.h>
-#include "bitbang.h"
-
-#include <sys/mman.h>
-
-uint32_t bcm2835_peri_base = 0x20000000;
-#define BCM2835_GPIO_BASE (bcm2835_peri_base + 0x200000) /* GPIO controller */
-
-#define BCM2835_PADS_GPIO_0_27 (bcm2835_peri_base + 0x100000)
-#define BCM2835_PADS_GPIO_0_27_OFFSET (0x2c / 4)
-
-/* GPIO setup macros */
-#define MODE_GPIO(g) (*(pio_base+((g)/10))>>(((g)%10)*3) & 7)
-#define INP_GPIO(g) do { *(pio_base+((g)/10)) &= ~(7<<(((g)%10)*3)); } while (0)
-#define SET_MODE_GPIO(g, m) do { /* clear the mode bits first, then set as necessary */ \
- INP_GPIO(g); \
- *(pio_base+((g)/10)) |= ((m)<<(((g)%10)*3)); } while (0)
-#define OUT_GPIO(g) SET_MODE_GPIO(g, 1)
-
-#define GPIO_SET (*(pio_base+7)) /* sets bits which are 1, ignores bits which are 0 */
-#define GPIO_CLR (*(pio_base+10)) /* clears bits which are 1, ignores bits which are 0 */
-#define GPIO_LEV (*(pio_base+13)) /* current level of the pin */
-
-static int dev_mem_fd;
-static volatile uint32_t *pio_base;
-
-static int bcm2835gpio_read(void);
-static void bcm2835gpio_write(int tck, int tms, int tdi);
-static void bcm2835gpio_reset(int trst, int srst);
-
-static int bcm2835_swdio_read(void);
-static void bcm2835_swdio_drive(bool is_output);
-
-static int bcm2835gpio_init(void);
-static int bcm2835gpio_quit(void);
-
-static struct bitbang_interface bcm2835gpio_bitbang = {
- .read = bcm2835gpio_read,
- .write = bcm2835gpio_write,
- .reset = bcm2835gpio_reset,
- .swdio_read = bcm2835_swdio_read,
- .swdio_drive = bcm2835_swdio_drive,
- .blink = NULL
-};
-
-/* GPIO numbers for each signal. Negative values are invalid */
-static int tck_gpio = -1;
-static int tck_gpio_mode;
-static int tms_gpio = -1;
-static int tms_gpio_mode;
-static int tdi_gpio = -1;
-static int tdi_gpio_mode;
-static int tdo_gpio = -1;
-static int tdo_gpio_mode;
-static int trst_gpio = -1;
-static int trst_gpio_mode;
-static int srst_gpio = -1;
-static int srst_gpio_mode;
-static int swclk_gpio = -1;
-static int swclk_gpio_mode;
-static int swdio_gpio = -1;
-static int swdio_gpio_mode;
-
-/* Transition delay coefficients */
-static int speed_coeff = 113714;
-static int speed_offset = 28;
-static unsigned int jtag_delay;
-
-static int bcm2835gpio_read(void)
-{
- return !!(GPIO_LEV & 1<<tdo_gpio);
-}
-
-static void bcm2835gpio_write(int tck, int tms, int tdi)
-{
- uint32_t set = tck<<tck_gpio | tms<<tms_gpio | tdi<<tdi_gpio;
- uint32_t clear = !tck<<tck_gpio | !tms<<tms_gpio | !tdi<<tdi_gpio;
-
- GPIO_SET = set;
- GPIO_CLR = clear;
-
- for (unsigned int i = 0; i < jtag_delay; i++)
- asm volatile ("");
-}
-
-static void bcm2835gpio_swd_write(int tck, int tms, int tdi)
-{
- uint32_t set = tck<<swclk_gpio | tdi<<swdio_gpio;
- uint32_t clear = !tck<<swclk_gpio | !tdi<<swdio_gpio;
-
- GPIO_SET = set;
- GPIO_CLR = clear;
-
- for (unsigned int i = 0; i < jtag_delay; i++)
- asm volatile ("");
-}
-
-/* (1) assert or (0) deassert reset lines */
-static void bcm2835gpio_reset(int trst, int srst)
-{
- uint32_t set = 0;
- uint32_t clear = 0;
-
- if (trst_gpio > 0) {
- set |= !trst<<trst_gpio;
- clear |= trst<<trst_gpio;
- }
-
- if (srst_gpio > 0) {
- set |= !srst<<srst_gpio;
- clear |= srst<<srst_gpio;
- }
-
- GPIO_SET = set;
- GPIO_CLR = clear;
-}
-
-static void bcm2835_swdio_drive(bool is_output)
-{
- if (is_output)
- OUT_GPIO(swdio_gpio);
- else
- INP_GPIO(swdio_gpio);
-}
-
-static int bcm2835_swdio_read(void)
-{
- return !!(GPIO_LEV & 1 << swdio_gpio);
-}
-
-static int bcm2835gpio_khz(int khz, int *jtag_speed)
-{
- if (!khz) {
- LOG_DEBUG("RCLK not supported");
- return ERROR_FAIL;
- }
- *jtag_speed = speed_coeff/khz - speed_offset;
- if (*jtag_speed < 0)
- *jtag_speed = 0;
- return ERROR_OK;
-}
-
-static int bcm2835gpio_speed_div(int speed, int *khz)
-{
- *khz = speed_coeff/(speed + speed_offset);
- return ERROR_OK;
-}
-
-static int bcm2835gpio_speed(int speed)
-{
- jtag_delay = speed;
- return ERROR_OK;
-}
-
-static int is_gpio_valid(int gpio)
-{
- return gpio >= 0 && gpio <= 53;
-}
-
-COMMAND_HANDLER(bcm2835gpio_handle_jtag_gpionums)
-{
- if (CMD_ARGC == 4) {
- COMMAND_PARSE_NUMBER(int, CMD_ARGV[0], tck_gpio);
- COMMAND_PARSE_NUMBER(int, CMD_ARGV[1], tms_gpio);
- COMMAND_PARSE_NUMBER(int, CMD_ARGV[2], tdi_gpio);
- COMMAND_PARSE_NUMBER(int, CMD_ARGV[3], tdo_gpio);
- } else if (CMD_ARGC != 0) {
- return ERROR_COMMAND_SYNTAX_ERROR;
- }
-
- command_print(CMD_CTX,
- "BCM2835 GPIO config: tck = %d, tms = %d, tdi = %d, tdo = %d",
- tck_gpio, tms_gpio, tdi_gpio, tdo_gpio);
-
- return ERROR_OK;
-}
-
-COMMAND_HANDLER(bcm2835gpio_handle_jtag_gpionum_tck)
-{
- if (CMD_ARGC == 1)
- COMMAND_PARSE_NUMBER(int, CMD_ARGV[0], tck_gpio);
-
- command_print(CMD_CTX, "BCM2835 GPIO config: tck = %d", tck_gpio);
- return ERROR_OK;
-}
-
-COMMAND_HANDLER(bcm2835gpio_handle_jtag_gpionum_tms)
-{
- if (CMD_ARGC == 1)
- COMMAND_PARSE_NUMBER(int, CMD_ARGV[0], tms_gpio);
-
- command_print(CMD_CTX, "BCM2835 GPIO config: tms = %d", tms_gpio);
- return ERROR_OK;
-}
-
-COMMAND_HANDLER(bcm2835gpio_handle_jtag_gpionum_tdo)
-{
- if (CMD_ARGC == 1)
- COMMAND_PARSE_NUMBER(int, CMD_ARGV[0], tdo_gpio);
-
- command_print(CMD_CTX, "BCM2835 GPIO config: tdo = %d", tdo_gpio);
- return ERROR_OK;
-}
-
-COMMAND_HANDLER(bcm2835gpio_handle_jtag_gpionum_tdi)
-{
- if (CMD_ARGC == 1)
- COMMAND_PARSE_NUMBER(int, CMD_ARGV[0], tdi_gpio);
-
- command_print(CMD_CTX, "BCM2835 GPIO config: tdi = %d", tdi_gpio);
- return ERROR_OK;
-}
-
-COMMAND_HANDLER(bcm2835gpio_handle_jtag_gpionum_srst)
-{
- if (CMD_ARGC == 1)
- COMMAND_PARSE_NUMBER(int, CMD_ARGV[0], srst_gpio);
-
- command_print(CMD_CTX, "BCM2835 GPIO config: srst = %d", srst_gpio);
- return ERROR_OK;
-}
-
-COMMAND_HANDLER(bcm2835gpio_handle_jtag_gpionum_trst)
-{
- if (CMD_ARGC == 1)
- COMMAND_PARSE_NUMBER(int, CMD_ARGV[0], trst_gpio);
-
- command_print(CMD_CTX, "BCM2835 GPIO config: trst = %d", trst_gpio);
- return ERROR_OK;
-}
-
-COMMAND_HANDLER(bcm2835gpio_handle_swd_gpionums)
-{
- if (CMD_ARGC == 2) {
- COMMAND_PARSE_NUMBER(int, CMD_ARGV[0], swclk_gpio);
- COMMAND_PARSE_NUMBER(int, CMD_ARGV[1], swdio_gpio);
- } else if (CMD_ARGC != 0) {
- return ERROR_COMMAND_SYNTAX_ERROR;
- }
-
- command_print(CMD_CTX,
- "BCM2835 GPIO nums: swclk = %d, swdio = %d",
- swclk_gpio, swdio_gpio);
-
- return ERROR_OK;
-}
-
-COMMAND_HANDLER(bcm2835gpio_handle_swd_gpionum_swclk)
-{
- if (CMD_ARGC == 1)
- COMMAND_PARSE_NUMBER(int, CMD_ARGV[0], swclk_gpio);
-
- command_print(CMD_CTX, "BCM2835 num: swclk = %d", swclk_gpio);
- return ERROR_OK;
-}
-
-COMMAND_HANDLER(bcm2835gpio_handle_swd_gpionum_swdio)
-{
- if (CMD_ARGC == 1)
- COMMAND_PARSE_NUMBER(int, CMD_ARGV[0], swdio_gpio);
-
- command_print(CMD_CTX, "BCM2835 num: swdio = %d", swdio_gpio);
- return ERROR_OK;
-}
-
-COMMAND_HANDLER(bcm2835gpio_handle_speed_coeffs)
-{
- if (CMD_ARGC == 2) {
- COMMAND_PARSE_NUMBER(int, CMD_ARGV[0], speed_coeff);
- COMMAND_PARSE_NUMBER(int, CMD_ARGV[1], speed_offset);
- }
- return ERROR_OK;
-}
-
-COMMAND_HANDLER(bcm2835gpio_handle_peripheral_base)
-{
- if (CMD_ARGC == 1)
- COMMAND_PARSE_NUMBER(u32, CMD_ARGV[0], bcm2835_peri_base);
- return ERROR_OK;
-}
-
-static const struct command_registration bcm2835gpio_command_handlers[] = {
- {
- .name = "bcm2835gpio_jtag_nums",
- .handler = &bcm2835gpio_handle_jtag_gpionums,
- .mode = COMMAND_CONFIG,
- .help = "gpio numbers for tck, tms, tdi, tdo. (in that order)",
- .usage = "(tck tms tdi tdo)* ",
- },
- {
- .name = "bcm2835gpio_tck_num",
- .handler = &bcm2835gpio_handle_jtag_gpionum_tck,
- .mode = COMMAND_CONFIG,
- .help = "gpio number for tck.",
- },
- {
- .name = "bcm2835gpio_tms_num",
- .handler = &bcm2835gpio_handle_jtag_gpionum_tms,
- .mode = COMMAND_CONFIG,
- .help = "gpio number for tms.",
- },
- {
- .name = "bcm2835gpio_tdo_num",
- .handler = &bcm2835gpio_handle_jtag_gpionum_tdo,
- .mode = COMMAND_CONFIG,
- .help = "gpio number for tdo.",
- },
- {
- .name = "bcm2835gpio_tdi_num",
- .handler = &bcm2835gpio_handle_jtag_gpionum_tdi,
- .mode = COMMAND_CONFIG,
- .help = "gpio number for tdi.",
- },
- {
- .name = "bcm2835gpio_swd_nums",
- .handler = &bcm2835gpio_handle_swd_gpionums,
- .mode = COMMAND_CONFIG,
- .help = "gpio numbers for swclk, swdio. (in that order)",
- .usage = "(swclk swdio)* ",
- },
- {
- .name = "bcm2835gpio_swclk_num",
- .handler = &bcm2835gpio_handle_swd_gpionum_swclk,
- .mode = COMMAND_CONFIG,
- .help = "gpio number for swclk.",
- },
- {
- .name = "bcm2835gpio_swdio_num",
- .handler = &bcm2835gpio_handle_swd_gpionum_swdio,
- .mode = COMMAND_CONFIG,
- .help = "gpio number for swdio.",
- },
- {
- .name = "bcm2835gpio_srst_num",
- .handler = &bcm2835gpio_handle_jtag_gpionum_srst,
- .mode = COMMAND_CONFIG,
- .help = "gpio number for srst.",
- },
- {
- .name = "bcm2835gpio_trst_num",
- .handler = &bcm2835gpio_handle_jtag_gpionum_trst,
- .mode = COMMAND_CONFIG,
- .help = "gpio number for trst.",
- },
- {
- .name = "bcm2835gpio_speed_coeffs",
- .handler = &bcm2835gpio_handle_speed_coeffs,
- .mode = COMMAND_CONFIG,
- .help = "SPEED_COEFF and SPEED_OFFSET for delay calculations.",
- },
- {
- .name = "bcm2835gpio_peripheral_base",
- .handler = &bcm2835gpio_handle_peripheral_base,
- .mode = COMMAND_CONFIG,
- .help = "peripheral base to access GPIOs (RPi1 0x20000000, RPi2 0x3F000000).",
- },
-
- COMMAND_REGISTRATION_DONE
-};
-
-static const char * const bcm2835_transports[] = { "jtag", "swd", NULL };
-
-struct jtag_interface bcm2835gpio_interface = {
- .name = "bcm2835gpio",
- .supported = DEBUG_CAP_TMS_SEQ,
- .execute_queue = bitbang_execute_queue,
- .transports = bcm2835_transports,
- .swd = &bitbang_swd,
- .speed = bcm2835gpio_speed,
- .khz = bcm2835gpio_khz,
- .speed_div = bcm2835gpio_speed_div,
- .commands = bcm2835gpio_command_handlers,
- .init = bcm2835gpio_init,
- .quit = bcm2835gpio_quit,
-};
-
-static bool bcm2835gpio_jtag_mode_possible(void)
-{
- if (!is_gpio_valid(tck_gpio))
- return 0;
- if (!is_gpio_valid(tms_gpio))
- return 0;
- if (!is_gpio_valid(tdi_gpio))
- return 0;
- if (!is_gpio_valid(tdo_gpio))
- return 0;
- return 1;
-}
-
-static bool bcm2835gpio_swd_mode_possible(void)
-{
- if (!is_gpio_valid(swclk_gpio))
- return 0;
- if (!is_gpio_valid(swdio_gpio))
- return 0;
- return 1;
-}
-
-static int bcm2835gpio_init(void)
-{
- bitbang_interface = &bcm2835gpio_bitbang;
-
- LOG_INFO("BCM2835 GPIO JTAG/SWD bitbang driver");
-
- if (bcm2835gpio_jtag_mode_possible()) {
- if (bcm2835gpio_swd_mode_possible())
- LOG_INFO("JTAG and SWD modes enabled");
- else
- LOG_INFO("JTAG only mode enabled (specify swclk and swdio gpio to add SWD mode)");
- if (!is_gpio_valid(trst_gpio) && !is_gpio_valid(srst_gpio)) {
- LOG_ERROR("Require at least one of trst or srst gpios to be specified");
- return ERROR_JTAG_INIT_FAILED;
- }
- } else if (bcm2835gpio_swd_mode_possible()) {
- LOG_INFO("SWD only mode enabled (specify tck, tms, tdi and tdo gpios to add JTAG mode)");
- } else {
- LOG_ERROR("Require tck, tms, tdi and tdo gpios for JTAG mode and/or swclk and swdio gpio for SWD mode");
- return ERROR_JTAG_INIT_FAILED;
- }
-
- dev_mem_fd = open("/dev/mem", O_RDWR | O_SYNC);
- if (dev_mem_fd < 0) {
- perror("open");
- return ERROR_JTAG_INIT_FAILED;
- }
-
- pio_base = mmap(NULL, sysconf(_SC_PAGE_SIZE), PROT_READ | PROT_WRITE,
- MAP_SHARED, dev_mem_fd, BCM2835_GPIO_BASE);
-
- if (pio_base == MAP_FAILED) {
- perror("mmap");
- close(dev_mem_fd);
- return ERROR_JTAG_INIT_FAILED;
- }
-
- static volatile uint32_t *pads_base;
- pads_base = mmap(NULL, sysconf(_SC_PAGE_SIZE), PROT_READ | PROT_WRITE,
- MAP_SHARED, dev_mem_fd, BCM2835_PADS_GPIO_0_27);
-
- if (pads_base == MAP_FAILED) {
- perror("mmap");
- close(dev_mem_fd);
- return ERROR_JTAG_INIT_FAILED;
- }
-
- /* set 16mA drive strength */
- pads_base[BCM2835_PADS_GPIO_0_27_OFFSET] = 0x5a000018 + 7;
-
- tdo_gpio_mode = MODE_GPIO(tdo_gpio);
- tdi_gpio_mode = MODE_GPIO(tdi_gpio);
- tck_gpio_mode = MODE_GPIO(tck_gpio);
- tms_gpio_mode = MODE_GPIO(tms_gpio);
- swclk_gpio_mode = MODE_GPIO(swclk_gpio);
- swdio_gpio_mode = MODE_GPIO(swdio_gpio);
- /*
- * Configure TDO as an input, and TDI, TCK, TMS, TRST, SRST
- * as outputs. Drive TDI and TCK low, and TMS/TRST/SRST high.
- */
- INP_GPIO(tdo_gpio);
-
- GPIO_CLR = 1<<tdi_gpio | 1<<tck_gpio | 1<<swdio_gpio | 1<<swclk_gpio;
- GPIO_SET = 1<<tms_gpio;
-
- OUT_GPIO(tdi_gpio);
- OUT_GPIO(tck_gpio);
- OUT_GPIO(tms_gpio);
- OUT_GPIO(swclk_gpio);
- OUT_GPIO(swdio_gpio);
- if (trst_gpio != -1) {
- trst_gpio_mode = MODE_GPIO(trst_gpio);
- GPIO_SET = 1 << trst_gpio;
- OUT_GPIO(trst_gpio);
- }
- if (srst_gpio != -1) {
- srst_gpio_mode = MODE_GPIO(srst_gpio);
- GPIO_SET = 1 << srst_gpio;
- OUT_GPIO(srst_gpio);
- }
-
- LOG_DEBUG("saved pinmux settings: tck %d tms %d tdi %d "
- "tdo %d trst %d srst %d", tck_gpio_mode, tms_gpio_mode,
- tdi_gpio_mode, tdo_gpio_mode, trst_gpio_mode, srst_gpio_mode);
-
- if (swd_mode) {
- bcm2835gpio_bitbang.write = bcm2835gpio_swd_write;
- bitbang_switch_to_swd();
- }
-
- return ERROR_OK;
-}
-
-static int bcm2835gpio_quit(void)
-{
- SET_MODE_GPIO(tdo_gpio, tdo_gpio_mode);
- SET_MODE_GPIO(tdi_gpio, tdi_gpio_mode);
- SET_MODE_GPIO(tck_gpio, tck_gpio_mode);
- SET_MODE_GPIO(tms_gpio, tms_gpio_mode);
- SET_MODE_GPIO(swclk_gpio, swclk_gpio_mode);
- SET_MODE_GPIO(swdio_gpio, swdio_gpio_mode);
- if (trst_gpio != -1)
- SET_MODE_GPIO(trst_gpio, trst_gpio_mode);
- if (srst_gpio != -1)
- SET_MODE_GPIO(srst_gpio, srst_gpio_mode);
-
- return ERROR_OK;
-}
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-site/blob/69f466b5/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/src/jtag/drivers/bitbang.c
----------------------------------------------------------------------
diff --git a/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/src/jtag/drivers/bitbang.c b/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/src/jtag/drivers/bitbang.c
deleted file mode 100755
index 1a0fa1c..0000000
--- a/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/src/jtag/drivers/bitbang.c
+++ /dev/null
@@ -1,550 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2005 by Dominic Rath *
- * Dominic.Rath@gmx.de *
- * *
- * Copyright (C) 2007,2008 �yvind Harboe *
- * oyvind.harboe@zylin.com *
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. *
- ***************************************************************************/
-
-/* 2014-12: Addition of the SWD protocol support is based on the initial work
- * by Paul Fertser and modifications by Jean-Christian de Rivaz. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "bitbang.h"
-#include <jtag/interface.h>
-#include <jtag/commands.h>
-
-/* YUK! - but this is currently a global.... */
-extern struct jtag_interface *jtag_interface;
-
-/**
- * Function bitbang_stableclocks
- * issues a number of clock cycles while staying in a stable state.
- * Because the TMS value required to stay in the RESET state is a 1, whereas
- * the TMS value required to stay in any of the other stable states is a 0,
- * this function checks the current stable state to decide on the value of TMS
- * to use.
- */
-static void bitbang_stableclocks(int num_cycles);
-
-static void bitbang_swd_write_reg(uint8_t cmd, uint32_t value, uint32_t ap_delay_clk);
-
-struct bitbang_interface *bitbang_interface;
-
-/* DANGER!!!! clock absolutely *MUST* be 0 in idle or reset won't work!
- *
- * Set this to 1 and str912 reset halt will fail.
- *
- * If someone can submit a patch with an explanation it will be greatly
- * appreciated, but as far as I can tell (�H) DCLK is generated upon
- * clk = 0 in TAP_IDLE. Good luck deducing that from the ARM documentation!
- * The ARM documentation uses the term "DCLK is asserted while in the TAP_IDLE
- * state". With hardware there is no such thing as *while* in a state. There
- * are only edges. So clk => 0 is in fact a very subtle state transition that
- * happens *while* in the TAP_IDLE state. "#&�"#�&"#&"#&
- *
- * For "reset halt" the last thing that happens before srst is asserted
- * is that the breakpoint is set up. If DCLK is not wiggled one last
- * time before the reset, then the breakpoint is not set up and
- * "reset halt" will fail to halt.
- *
- */
-#define CLOCK_IDLE() 0
-
-/* The bitbang driver leaves the TCK 0 when in idle */
-static void bitbang_end_state(tap_state_t state)
-{
- if (tap_is_state_stable(state))
- tap_set_end_state(state);
- else {
- LOG_ERROR("BUG: %i is not a valid end state", state);
- exit(-1);
- }
-}
-
-static void bitbang_state_move(int skip)
-{
- int i = 0, tms = 0;
- uint8_t tms_scan = tap_get_tms_path(tap_get_state(), tap_get_end_state());
- int tms_count = tap_get_tms_path_len(tap_get_state(), tap_get_end_state());
-
- for (i = skip; i < tms_count; i++) {
- tms = (tms_scan >> i) & 1;
- bitbang_interface->write(0, tms, 0);
- bitbang_interface->write(1, tms, 0);
- }
- bitbang_interface->write(CLOCK_IDLE(), tms, 0);
-
- tap_set_state(tap_get_end_state());
-}
-
-/**
- * Clock a bunch of TMS (or SWDIO) transitions, to change the JTAG
- * (or SWD) state machine.
- */
-static int bitbang_execute_tms(struct jtag_command *cmd)
-{
- unsigned num_bits = cmd->cmd.tms->num_bits;
- const uint8_t *bits = cmd->cmd.tms->bits;
-
- DEBUG_JTAG_IO("TMS: %d bits", num_bits);
-
- int tms = 0;
- for (unsigned i = 0; i < num_bits; i++) {
- tms = ((bits[i/8] >> (i % 8)) & 1);
- bitbang_interface->write(0, tms, 0);
- bitbang_interface->write(1, tms, 0);
- }
- bitbang_interface->write(CLOCK_IDLE(), tms, 0);
-
- return ERROR_OK;
-}
-
-static void bitbang_path_move(struct pathmove_command *cmd)
-{
- int num_states = cmd->num_states;
- int state_count;
- int tms = 0;
-
- state_count = 0;
- while (num_states) {
- if (tap_state_transition(tap_get_state(), false) == cmd->path[state_count])
- tms = 0;
- else if (tap_state_transition(tap_get_state(), true) == cmd->path[state_count])
- tms = 1;
- else {
- LOG_ERROR("BUG: %s -> %s isn't a valid TAP transition",
- tap_state_name(tap_get_state()),
- tap_state_name(cmd->path[state_count]));
- exit(-1);
- }
-
- bitbang_interface->write(0, tms, 0);
- bitbang_interface->write(1, tms, 0);
-
- tap_set_state(cmd->path[state_count]);
- state_count++;
- num_states--;
- }
-
- bitbang_interface->write(CLOCK_IDLE(), tms, 0);
-
- tap_set_end_state(tap_get_state());
-}
-
-static void bitbang_runtest(int num_cycles)
-{
- int i;
-
- tap_state_t saved_end_state = tap_get_end_state();
-
- /* only do a state_move when we're not already in IDLE */
- if (tap_get_state() != TAP_IDLE) {
- bitbang_end_state(TAP_IDLE);
- bitbang_state_move(0);
- }
-
- /* execute num_cycles */
- for (i = 0; i < num_cycles; i++) {
- bitbang_interface->write(0, 0, 0);
- bitbang_interface->write(1, 0, 0);
- }
- bitbang_interface->write(CLOCK_IDLE(), 0, 0);
-
- /* finish in end_state */
- bitbang_end_state(saved_end_state);
- if (tap_get_state() != tap_get_end_state())
- bitbang_state_move(0);
-}
-
-static void bitbang_stableclocks(int num_cycles)
-{
- int tms = (tap_get_state() == TAP_RESET ? 1 : 0);
- int i;
-
- /* send num_cycles clocks onto the cable */
- for (i = 0; i < num_cycles; i++) {
- bitbang_interface->write(1, tms, 0);
- bitbang_interface->write(0, tms, 0);
- }
-}
-
-static void bitbang_scan(bool ir_scan, enum scan_type type, uint8_t *buffer, int scan_size)
-{
- tap_state_t saved_end_state = tap_get_end_state();
- int bit_cnt;
-
- if (!((!ir_scan &&
- (tap_get_state() == TAP_DRSHIFT)) ||
- (ir_scan && (tap_get_state() == TAP_IRSHIFT)))) {
- if (ir_scan)
- bitbang_end_state(TAP_IRSHIFT);
- else
- bitbang_end_state(TAP_DRSHIFT);
-
- bitbang_state_move(0);
- bitbang_end_state(saved_end_state);
- }
-
- for (bit_cnt = 0; bit_cnt < scan_size; bit_cnt++) {
- int val = 0;
- int tms = (bit_cnt == scan_size-1) ? 1 : 0;
- int tdi;
- int bytec = bit_cnt/8;
- int bcval = 1 << (bit_cnt % 8);
-
- /* if we're just reading the scan, but don't care about the output
- * default to outputting 'low', this also makes valgrind traces more readable,
- * as it removes the dependency on an uninitialised value
- */
- tdi = 0;
- if ((type != SCAN_IN) && (buffer[bytec] & bcval))
- tdi = 1;
-
- bitbang_interface->write(0, tms, tdi);
-
- if (type != SCAN_OUT)
- val = bitbang_interface->read();
-
- bitbang_interface->write(1, tms, tdi);
-
- if (type != SCAN_OUT) {
- if (val)
- buffer[bytec] |= bcval;
- else
- buffer[bytec] &= ~bcval;
- }
- }
-
- if (tap_get_state() != tap_get_end_state()) {
- /* we *KNOW* the above loop transitioned out of
- * the shift state, so we skip the first state
- * and move directly to the end state.
- */
- bitbang_state_move(1);
- }
-}
-
-int bitbang_execute_queue(void)
-{
- struct jtag_command *cmd = jtag_command_queue; /* currently processed command */
- int scan_size;
- enum scan_type type;
- uint8_t *buffer;
- int retval;
-
- if (!bitbang_interface) {
- LOG_ERROR("BUG: Bitbang interface called, but not yet initialized");
- exit(-1);
- }
-
- /* return ERROR_OK, unless a jtag_read_buffer returns a failed check
- * that wasn't handled by a caller-provided error handler
- */
- retval = ERROR_OK;
-
- if (bitbang_interface->blink)
- bitbang_interface->blink(1);
-
- while (cmd) {
- switch (cmd->type) {
- case JTAG_RESET:
-#ifdef _DEBUG_JTAG_IO_
- LOG_DEBUG("reset trst: %i srst %i",
- cmd->cmd.reset->trst,
- cmd->cmd.reset->srst);
-#endif
- if ((cmd->cmd.reset->trst == 1) ||
- (cmd->cmd.reset->srst && (jtag_get_reset_config() & RESET_SRST_PULLS_TRST)))
- tap_set_state(TAP_RESET);
- bitbang_interface->reset(cmd->cmd.reset->trst, cmd->cmd.reset->srst);
- break;
- case JTAG_RUNTEST:
-#ifdef _DEBUG_JTAG_IO_
- LOG_DEBUG("runtest %i cycles, end in %s",
- cmd->cmd.runtest->num_cycles,
- tap_state_name(cmd->cmd.runtest->end_state));
-#endif
- bitbang_end_state(cmd->cmd.runtest->end_state);
- bitbang_runtest(cmd->cmd.runtest->num_cycles);
- break;
-
- case JTAG_STABLECLOCKS:
- /* this is only allowed while in a stable state. A check for a stable
- * state was done in jtag_add_clocks()
- */
- bitbang_stableclocks(cmd->cmd.stableclocks->num_cycles);
- break;
-
- case JTAG_TLR_RESET:
-#ifdef _DEBUG_JTAG_IO_
- LOG_DEBUG("statemove end in %s",
- tap_state_name(cmd->cmd.statemove->end_state));
-#endif
- bitbang_end_state(cmd->cmd.statemove->end_state);
- bitbang_state_move(0);
- break;
- case JTAG_PATHMOVE:
-#ifdef _DEBUG_JTAG_IO_
- LOG_DEBUG("pathmove: %i states, end in %s",
- cmd->cmd.pathmove->num_states,
- tap_state_name(cmd->cmd.pathmove->path[cmd->cmd.pathmove->num_states - 1]));
-#endif
- bitbang_path_move(cmd->cmd.pathmove);
- break;
- case JTAG_SCAN:
-#ifdef _DEBUG_JTAG_IO_
- LOG_DEBUG("%s scan end in %s",
- (cmd->cmd.scan->ir_scan) ? "IR" : "DR",
- tap_state_name(cmd->cmd.scan->end_state));
-#endif
- bitbang_end_state(cmd->cmd.scan->end_state);
- scan_size = jtag_build_buffer(cmd->cmd.scan, &buffer);
- type = jtag_scan_type(cmd->cmd.scan);
- bitbang_scan(cmd->cmd.scan->ir_scan, type, buffer, scan_size);
- if (jtag_read_buffer(buffer, cmd->cmd.scan) != ERROR_OK)
- retval = ERROR_JTAG_QUEUE_FAILED;
- if (buffer)
- free(buffer);
- break;
- case JTAG_SLEEP:
-#ifdef _DEBUG_JTAG_IO_
- LOG_DEBUG("sleep %" PRIi32, cmd->cmd.sleep->us);
-#endif
- jtag_sleep(cmd->cmd.sleep->us);
- break;
- case JTAG_TMS:
- retval = bitbang_execute_tms(cmd);
- break;
- default:
- LOG_ERROR("BUG: unknown JTAG command type encountered");
- exit(-1);
- }
- cmd = cmd->next;
- }
- if (bitbang_interface->blink)
- bitbang_interface->blink(0);
-
- return retval;
-}
-
-
-bool swd_mode;
-static int queued_retval;
-
-static int bitbang_swd_init(void)
-{
- LOG_DEBUG("bitbang_swd_init");
- swd_mode = true;
- return ERROR_OK;
-}
-
-static void bitbang_exchange(bool rnw, uint8_t buf[], unsigned int offset, unsigned int bit_cnt)
-{
- LOG_DEBUG("bitbang_exchange");
- int tdi;
-
- for (unsigned int i = offset; i < bit_cnt + offset; i++) {
- int bytec = i/8;
- int bcval = 1 << (i % 8);
- tdi = !rnw && (buf[bytec] & bcval);
-
- bitbang_interface->write(0, 0, tdi);
-
- if (rnw && buf) {
- if (bitbang_interface->swdio_read())
- buf[bytec] |= bcval;
- else
- buf[bytec] &= ~bcval;
- }
-
- bitbang_interface->write(1, 0, tdi);
- }
-}
-
-int bitbang_swd_switch_seq(enum swd_special_seq seq)
-{
- LOG_DEBUG("bitbang_swd_switch_seq");
-
- switch (seq) {
- case LINE_RESET:
- LOG_DEBUG("SWD line reset");
- bitbang_exchange(false, (uint8_t *)swd_seq_line_reset, 0, swd_seq_line_reset_len);
- break;
- case JTAG_TO_SWD:
- LOG_DEBUG("JTAG-to-SWD");
- bitbang_exchange(false, (uint8_t *)swd_seq_jtag_to_swd, 0, swd_seq_jtag_to_swd_len);
- break;
- case SWD_TO_JTAG:
- LOG_DEBUG("SWD-to-JTAG");
- bitbang_exchange(false, (uint8_t *)swd_seq_swd_to_jtag, 0, swd_seq_swd_to_jtag_len);
- break;
- default:
- LOG_ERROR("Sequence %d not supported", seq);
- return ERROR_FAIL;
- }
-
- return ERROR_OK;
-}
-
-void bitbang_switch_to_swd(void)
-{
- LOG_DEBUG("bitbang_switch_to_swd");
- bitbang_exchange(false, (uint8_t *)swd_seq_jtag_to_swd, 0, swd_seq_jtag_to_swd_len);
-}
-
-static void swd_clear_sticky_errors(void)
-{
- bitbang_swd_write_reg(swd_cmd(false, false, DP_ABORT),
- STKCMPCLR | STKERRCLR | WDERRCLR | ORUNERRCLR, 0);
-}
-
-static void bitbang_swd_read_reg(uint8_t cmd, uint32_t *value, uint32_t ap_delay_clk)
-{
- LOG_DEBUG("bitbang_swd_read_reg");
- assert(cmd & SWD_CMD_RnW);
-
- if (queued_retval != ERROR_OK) {
- LOG_DEBUG("Skip bitbang_swd_read_reg because queued_retval=%d", queued_retval);
- return;
- }
-
- for (;;) {
- uint8_t trn_ack_data_parity_trn[DIV_ROUND_UP(4 + 3 + 32 + 1 + 4, 8)];
-
- cmd |= SWD_CMD_START | (1 << 7);
- bitbang_exchange(false, &cmd, 0, 8);
-
- bitbang_interface->swdio_drive(false);
- bitbang_exchange(true, trn_ack_data_parity_trn, 0, 1 + 3 + 32 + 1 + 1);
- bitbang_interface->swdio_drive(true);
-
- int ack = buf_get_u32(trn_ack_data_parity_trn, 1, 3);
- uint32_t data = buf_get_u32(trn_ack_data_parity_trn, 1 + 3, 32);
- int parity = buf_get_u32(trn_ack_data_parity_trn, 1 + 3 + 32, 1);
-
- LOG_DEBUG("%s %s %s reg %X = %08"PRIx32,
- ack == SWD_ACK_OK ? "OK" : ack == SWD_ACK_WAIT ? "WAIT" : ack == SWD_ACK_FAULT ? "FAULT" : "JUNK",
- cmd & SWD_CMD_APnDP ? "AP" : "DP",
- cmd & SWD_CMD_RnW ? "read" : "write",
- (cmd & SWD_CMD_A32) >> 1,
- data);
-
- switch (ack) {
- case SWD_ACK_OK:
- if (parity != parity_u32(data)) {
- LOG_DEBUG("Wrong parity detected");
- queued_retval = ERROR_FAIL;
- return;
- }
- if (value)
- *value = data;
- if (cmd & SWD_CMD_APnDP)
- bitbang_exchange(true, NULL, 0, ap_delay_clk);
- return;
- case SWD_ACK_WAIT:
- LOG_DEBUG("SWD_ACK_WAIT");
- swd_clear_sticky_errors();
- break;
- case SWD_ACK_FAULT:
- LOG_DEBUG("SWD_ACK_FAULT");
- queued_retval = ack;
- return;
- default:
- LOG_DEBUG("No valid acknowledge: ack=%d", ack);
- queued_retval = ack;
- return;
- }
- }
-}
-
-static void bitbang_swd_write_reg(uint8_t cmd, uint32_t value, uint32_t ap_delay_clk)
-{
- LOG_DEBUG("bitbang_swd_write_reg");
- assert(!(cmd & SWD_CMD_RnW));
-
- if (queued_retval != ERROR_OK) {
- LOG_DEBUG("Skip bitbang_swd_write_reg because queued_retval=%d", queued_retval);
- return;
- }
-
- for (;;) {
- uint8_t trn_ack_data_parity_trn[DIV_ROUND_UP(4 + 3 + 32 + 1 + 4, 8)];
- buf_set_u32(trn_ack_data_parity_trn, 1 + 3 + 1, 32, value);
- buf_set_u32(trn_ack_data_parity_trn, 1 + 3 + 1 + 32, 1, parity_u32(value));
-
- cmd |= SWD_CMD_START | (1 << 7);
- bitbang_exchange(false, &cmd, 0, 8);
-
- bitbang_interface->swdio_drive(false);
- bitbang_exchange(true, trn_ack_data_parity_trn, 0, 1 + 3 + 1);
- bitbang_interface->swdio_drive(true);
- bitbang_exchange(false, trn_ack_data_parity_trn, 1 + 3 + 1, 32 + 1);
-
- int ack = buf_get_u32(trn_ack_data_parity_trn, 1, 3);
- LOG_DEBUG("%s %s %s reg %X = %08"PRIx32,
- ack == SWD_ACK_OK ? "OK" : ack == SWD_ACK_WAIT ? "WAIT" : ack == SWD_ACK_FAULT ? "FAULT" : "JUNK",
- cmd & SWD_CMD_APnDP ? "AP" : "DP",
- cmd & SWD_CMD_RnW ? "read" : "write",
- (cmd & SWD_CMD_A32) >> 1,
- buf_get_u32(trn_ack_data_parity_trn, 1 + 3 + 1, 32));
-
- switch (ack) {
- case SWD_ACK_OK:
- if (cmd & SWD_CMD_APnDP)
- bitbang_exchange(true, NULL, 0, ap_delay_clk);
- return;
- case SWD_ACK_WAIT:
- LOG_DEBUG("SWD_ACK_WAIT");
- swd_clear_sticky_errors();
- break;
- case SWD_ACK_FAULT:
- LOG_DEBUG("SWD_ACK_FAULT");
- queued_retval = ack;
- return;
- default:
- LOG_DEBUG("No valid acknowledge: ack=%d", ack);
- queued_retval = ack;
- return;
- }
- }
-}
-
-static int bitbang_swd_run_queue(void)
-{
- LOG_DEBUG("bitbang_swd_run_queue");
- /* A transaction must be followed by another transaction or at least 8 idle cycles to
- * ensure that data is clocked through the AP. */
- bitbang_exchange(true, NULL, 0, 8);
-
- int retval = queued_retval;
- queued_retval = ERROR_OK;
- LOG_DEBUG("SWD queue return value: %02x", retval);
- return retval;
-}
-
-const struct swd_driver bitbang_swd = {
- .init = bitbang_swd_init,
- .switch_seq = bitbang_swd_switch_seq,
- .read_reg = bitbang_swd_read_reg,
- .write_reg = bitbang_swd_write_reg,
- .run = bitbang_swd_run_queue,
-};
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-site/blob/69f466b5/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/src/jtag/drivers/bitbang.h
----------------------------------------------------------------------
diff --git a/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/src/jtag/drivers/bitbang.h b/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/src/jtag/drivers/bitbang.h
deleted file mode 100755
index 1bdb8f5..0000000
--- a/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/src/jtag/drivers/bitbang.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2005 by Dominic Rath *
- * Dominic.Rath@gmx.de *
- * *
- * Copyright (C) 2007,2008 �yvind Harboe *
- * oyvind.harboe@zylin.com *
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. *
- ***************************************************************************/
-
-#ifndef BITBANG_H
-#define BITBANG_H
-
-#include <jtag/swd.h>
-
-struct bitbang_interface {
- /* low level callbacks (for bitbang)
- */
- int (*read)(void);
- void (*write)(int tck, int tms, int tdi);
- void (*reset)(int trst, int srst);
- void (*blink)(int on);
- int (*swdio_read)(void);
- void (*swdio_drive)(bool on);
-};
-
-const struct swd_driver bitbang_swd;
-
-extern bool swd_mode;
-
-int bitbang_execute_queue(void);
-
-extern struct bitbang_interface *bitbang_interface;
-void bitbang_switch_to_swd(void);
-int bitbang_swd_switch_seq(enum swd_special_seq seq);
-
-#endif /* BITBANG_H */
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-site/blob/69f466b5/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/src/jtag/drivers/bitq.c
----------------------------------------------------------------------
diff --git a/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/src/jtag/drivers/bitq.c b/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/src/jtag/drivers/bitq.c
deleted file mode 100755
index 1d0ff09..0000000
--- a/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/src/jtag/drivers/bitq.c
+++ /dev/null
@@ -1,317 +0,0 @@
-/***************************************************************************
-* Copyright (C) 2007 by Pavel Chromy *
-* chromy@asix.cz *
-* *
-* This program is free software; you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation; either version 2 of the License, or *
-* (at your option) any later version. *
-* *
-* This program is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with this program; if not, write to the *
-* Free Software Foundation, Inc., *
-* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. *
-***************************************************************************/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <jtag/jtag.h>
-#include "bitq.h"
-#include <jtag/interface.h>
-
-struct bitq_interface *bitq_interface; /* low level bit queue interface */
-
-/* state of input queue */
-struct bitq_state {
- struct jtag_command *cmd; /* command currently processed */
- int field_idx; /* index of field currently being processed */
- int bit_pos; /* position of bit currently being processed */
- int status; /* processing status */
-};
-static struct bitq_state bitq_in_state;
-
-/*
- * input queue processing does not use jtag_read_buffer() to avoid unnecessary overhead
- * no parameters, makes use of stored state information
- */
-static void bitq_in_proc(void)
-{
- /* loop through the queue */
- while (bitq_in_state.cmd) {
- /* only JTAG_SCAN command may return data */
- if (bitq_in_state.cmd->type == JTAG_SCAN) {
- /* loop through the fields */
- while (bitq_in_state.field_idx < bitq_in_state.cmd->cmd.scan->num_fields) {
- struct scan_field *field;
- field = &bitq_in_state.cmd->cmd.scan->fields[bitq_in_state.field_idx];
- if (field->in_value) {
- /* field scanning */
- while (bitq_in_state.bit_pos < field->num_bits) {
- /* index of byte being scanned */
- int in_idx = bitq_in_state.bit_pos / 8;
- /* mask of next bit to be scanned */
- uint8_t in_mask = 1 << (bitq_in_state.bit_pos % 8);
-
- int tdo = bitq_interface->in();
- if (tdo < 0) {
-#ifdef _DEBUG_JTAG_IO_
- LOG_DEBUG("bitq in EOF");
-#endif
- return;
- }
- if (in_mask == 0x01)
- field->in_value[in_idx] = 0;
- if (tdo)
- field->in_value[in_idx] |= in_mask;
- bitq_in_state.bit_pos++;
- }
- }
-
- bitq_in_state.field_idx++; /* advance to next field */
- bitq_in_state.bit_pos = 0; /* start next field from the first bit */
- }
- }
- bitq_in_state.cmd = bitq_in_state.cmd->next; /* advance to next command */
- bitq_in_state.field_idx = 0; /* preselect first field */
- }
-}
-
-static void bitq_io(int tms, int tdi, int tdo_req)
-{
- bitq_interface->out(tms, tdi, tdo_req);
- /* check and process the input queue */
- if (bitq_interface->in_rdy())
- bitq_in_proc();
-}
-
-static void bitq_end_state(tap_state_t state)
-{
- if (!tap_is_state_stable(state)) {
- LOG_ERROR("BUG: %i is not a valid end state", state);
- exit(-1);
- }
- tap_set_end_state(state);
-}
-
-static void bitq_state_move(tap_state_t new_state)
-{
- int i = 0;
- uint8_t tms_scan;
-
- if (!tap_is_state_stable(tap_get_state()) || !tap_is_state_stable(new_state)) {
- LOG_ERROR("TAP move from or to unstable state");
- exit(-1);
- }
-
- tms_scan = tap_get_tms_path(tap_get_state(), new_state);
- int tms_count = tap_get_tms_path_len(tap_get_state(), new_state);
-
- for (i = 0; i < tms_count; i++) {
- bitq_io(tms_scan & 1, 0, 0);
- tms_scan >>= 1;
- }
-
- tap_set_state(new_state);
-}
-
-static void bitq_path_move(struct pathmove_command *cmd)
-{
- int i;
-
- for (i = 0; i <= cmd->num_states; i++) {
- if (tap_state_transition(tap_get_state(), false) == cmd->path[i])
- bitq_io(0, 0, 0);
- else if (tap_state_transition(tap_get_state(), true) == cmd->path[i])
- bitq_io(1, 0, 0);
- else {
- LOG_ERROR("BUG: %s -> %s isn't a valid TAP transition", tap_state_name(
- tap_get_state()), tap_state_name(cmd->path[i]));
- exit(-1);
- }
-
- tap_set_state(cmd->path[i]);
- }
-
- tap_set_end_state(tap_get_state());
-}
-
-static void bitq_runtest(int num_cycles)
-{
- int i;
-
- /* only do a state_move when we're not already in IDLE */
- if (tap_get_state() != TAP_IDLE)
- bitq_state_move(TAP_IDLE);
-
- /* execute num_cycles */
- for (i = 0; i < num_cycles; i++)
- bitq_io(0, 0, 0);
-
- /* finish in end_state */
- if (tap_get_state() != tap_get_end_state())
- bitq_state_move(tap_get_end_state());
-}
-
-static void bitq_scan_field(struct scan_field *field, int do_pause)
-{
- int bit_cnt;
- int tdo_req;
-
- const uint8_t *out_ptr;
- uint8_t out_mask;
-
- if (field->in_value)
- tdo_req = 1;
- else
- tdo_req = 0;
-
- if (field->out_value == NULL) {
- /* just send zeros and request data from TDO */
- for (bit_cnt = field->num_bits; bit_cnt > 1; bit_cnt--)
- bitq_io(0, 0, tdo_req);
-
- bitq_io(do_pause, 0, tdo_req);
- } else {
- /* send data, and optionally request TDO */
- out_mask = 0x01;
- out_ptr = field->out_value;
- for (bit_cnt = field->num_bits; bit_cnt > 1; bit_cnt--) {
- bitq_io(0, ((*out_ptr) & out_mask) != 0, tdo_req);
- if (out_mask == 0x80) {
- out_mask = 0x01;
- out_ptr++;
- } else
- out_mask <<= 1;
- }
-
- bitq_io(do_pause, ((*out_ptr) & out_mask) != 0, tdo_req);
- }
-
- if (do_pause) {
- bitq_io(0, 0, 0);
- if (tap_get_state() == TAP_IRSHIFT)
- tap_set_state(TAP_IRPAUSE);
- else if (tap_get_state() == TAP_DRSHIFT)
- tap_set_state(TAP_DRPAUSE);
- }
-}
-
-static void bitq_scan(struct scan_command *cmd)
-{
- int i;
-
- if (cmd->ir_scan)
- bitq_state_move(TAP_IRSHIFT);
- else
- bitq_state_move(TAP_DRSHIFT);
-
- for (i = 0; i < cmd->num_fields - 1; i++)
- bitq_scan_field(&cmd->fields[i], 0);
-
- bitq_scan_field(&cmd->fields[i], 1);
-}
-
-int bitq_execute_queue(void)
-{
- struct jtag_command *cmd = jtag_command_queue; /* currently processed command */
-
- bitq_in_state.cmd = jtag_command_queue;
- bitq_in_state.field_idx = 0;
- bitq_in_state.bit_pos = 0;
- bitq_in_state.status = ERROR_OK;
-
- while (cmd) {
- switch (cmd->type) {
- case JTAG_RESET:
-#ifdef _DEBUG_JTAG_IO_
- LOG_DEBUG("reset trst: %i srst %i", cmd->cmd.reset->trst, cmd->cmd.reset->srst);
-#endif
- if ((cmd->cmd.reset->trst == 1) ||
- (cmd->cmd.reset->srst &&
- (jtag_get_reset_config() & RESET_SRST_PULLS_TRST)))
- tap_set_state(TAP_RESET);
- bitq_interface->reset(cmd->cmd.reset->trst, cmd->cmd.reset->srst);
- if (bitq_interface->in_rdy())
- bitq_in_proc();
- break;
-
- case JTAG_RUNTEST:
-#ifdef _DEBUG_JTAG_IO_
- LOG_DEBUG("runtest %i cycles, end in %i", cmd->cmd.runtest->num_cycles, cmd->cmd.runtest->end_state);
-#endif
- bitq_end_state(cmd->cmd.runtest->end_state);
- bitq_runtest(cmd->cmd.runtest->num_cycles);
- break;
-
- case JTAG_TLR_RESET:
-#ifdef _DEBUG_JTAG_IO_
- LOG_DEBUG("statemove end in %i", cmd->cmd.statemove->end_state);
-#endif
- bitq_end_state(cmd->cmd.statemove->end_state);
- bitq_state_move(tap_get_end_state()); /* uncoditional TAP move */
- break;
-
- case JTAG_PATHMOVE:
-#ifdef _DEBUG_JTAG_IO_
- LOG_DEBUG("pathmove: %i states, end in %i", cmd->cmd.pathmove->num_states,
- cmd->cmd.pathmove->path[cmd->cmd.pathmove->num_states - 1]);
-#endif
- bitq_path_move(cmd->cmd.pathmove);
- break;
-
- case JTAG_SCAN:
-#ifdef _DEBUG_JTAG_IO_
- LOG_DEBUG("scan end in %i", cmd->cmd.scan->end_state);
- if (cmd->cmd.scan->ir_scan)
- LOG_DEBUG("scan ir");
- else
- LOG_DEBUG("scan dr");
-#endif
- bitq_end_state(cmd->cmd.scan->end_state);
- bitq_scan(cmd->cmd.scan);
- if (tap_get_state() != tap_get_end_state())
- bitq_state_move(tap_get_end_state());
- break;
-
- case JTAG_SLEEP:
-#ifdef _DEBUG_JTAG_IO_
- LOG_DEBUG("sleep %i", cmd->cmd.sleep->us);
-#endif
- bitq_interface->sleep(cmd->cmd.sleep->us);
- if (bitq_interface->in_rdy())
- bitq_in_proc();
- break;
-
- default:
- LOG_ERROR("BUG: unknown JTAG command type encountered");
- exit(-1);
- }
-
- cmd = cmd->next;
- }
-
- bitq_interface->flush();
- bitq_in_proc();
-
- if (bitq_in_state.cmd) {
- LOG_ERROR("missing data from bitq interface");
- return ERROR_JTAG_QUEUE_FAILED;
- }
- if (bitq_interface->in() >= 0) {
- LOG_ERROR("extra data from bitq interface");
- return ERROR_JTAG_QUEUE_FAILED;
- }
-
- return bitq_in_state.status;
-}
-
-void bitq_cleanup(void)
-{
-}
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-site/blob/69f466b5/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/src/jtag/drivers/bitq.h
----------------------------------------------------------------------
diff --git a/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/src/jtag/drivers/bitq.h b/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/src/jtag/drivers/bitq.h
deleted file mode 100755
index f54de95..0000000
--- a/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/src/jtag/drivers/bitq.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2007 by Pavel Chromy *
- * chromy@asix.cz *
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. *
- ***************************************************************************/
-
-#ifndef BITQ_H
-#define BITQ_H
-
-#include <jtag/commands.h>
-
-struct bitq_interface {
- /* function to enqueueing low level IO requests */
- int (*out)(int tms, int tdi, int tdo_req);
- int (*flush)(void);
-
- int (*sleep)(unsigned long us);
- int (*reset)(int trst, int srst);
-
- /* delayed read of requested TDO data,
- * the input shall be checked after call to any enqueuing function
- */
- int (*in_rdy)(void);
- int (*in)(void);
-};
-
-extern struct bitq_interface *bitq_interface;
-
-int bitq_execute_queue(void);
-
-void bitq_cleanup(void);
-
-#endif /* BITQ_H */