projects
/
fw
/
openocd
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
jtag/hla, jtag/stlink: switch to command 'adapter serial'
[fw/openocd]
/
src
/
jtag
/
drivers
/
osbdm.c
diff --git
a/src/jtag/drivers/osbdm.c
b/src/jtag/drivers/osbdm.c
index 385730126d490d18b69879002241f79d079826ee..5c43d32445115914f1a63edce78f5d40790529ec 100644
(file)
--- a/
src/jtag/drivers/osbdm.c
+++ b/
src/jtag/drivers/osbdm.c
@@
-13,9
+13,7
@@
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* 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. *
+ * along with this program. If not, see <http://www.gnu.org/licenses/>. *
***************************************************************************/
#ifdef HAVE_CONFIG_H
# include "config.h"
***************************************************************************/
#ifdef HAVE_CONFIG_H
# include "config.h"
@@
-25,7
+23,7
@@
#include <helper/binarybuffer.h>
#include <helper/command.h>
#include <jtag/interface.h>
#include <helper/binarybuffer.h>
#include <helper/command.h>
#include <jtag/interface.h>
-#include "libusb_
common
.h"
+#include "libusb_
helper
.h"
struct sequence {
int len;
struct sequence {
int len;
@@
-107,7
+105,7
@@
static struct queue *queue_alloc(void)
return queue;
}
return queue;
}
-/* Size of usb commun
n
ication buffer */
+/* Size of usb communication buffer */
#define OSBDM_USB_BUFSIZE 64
/* Timeout for USB transfer, ms */
#define OSBDM_USB_TIMEOUT 1000
#define OSBDM_USB_BUFSIZE 64
/* Timeout for USB transfer, ms */
#define OSBDM_USB_TIMEOUT 1000
@@
-134,7
+132,7
@@
static const uint16_t osbdm_vid[] = { 0x15a2, 0x15a2, 0x15a2, 0 };
static const uint16_t osbdm_pid[] = { 0x0042, 0x0058, 0x005e, 0 };
struct osbdm {
static const uint16_t osbdm_pid[] = { 0x0042, 0x0058, 0x005e, 0 };
struct osbdm {
- struct
jtag_
libusb_device_handle *devh; /* USB handle */
+ struct libusb_device_handle *devh; /* USB handle */
uint8_t buffer[OSBDM_USB_BUFSIZE]; /* Data to send and receive */
int count; /* Count data to send and to read */
};
uint8_t buffer[OSBDM_USB_BUFSIZE]; /* Data to send and receive */
int count; /* Count data to send and to read */
};
@@
-146,11
+144,13
@@
static struct osbdm osbdm_context;
static int osbdm_send_and_recv(struct osbdm *osbdm)
{
/* Send request */
static int osbdm_send_and_recv(struct osbdm *osbdm)
{
/* Send request */
- int count = jtag_libusb_bulk_write(osbdm->devh, OSBDM_USB_EP_WRITE,
- (char *)osbdm->buffer, osbdm->count, OSBDM_USB_TIMEOUT);
+ int count, ret;
- if (count != osbdm->count) {
- LOG_ERROR("OSBDM communnication error: can't write");
+ ret = jtag_libusb_bulk_write(osbdm->devh, OSBDM_USB_EP_WRITE,
+ (char *)osbdm->buffer, osbdm->count,
+ OSBDM_USB_TIMEOUT, &count);
+ if (ret || count != osbdm->count) {
+ LOG_ERROR("OSBDM communication error: can't write");
return ERROR_FAIL;
}
return ERROR_FAIL;
}
@@
-158,29
+158,28
@@
static int osbdm_send_and_recv(struct osbdm *osbdm)
uint8_t cmd_saved = osbdm->buffer[0];
/* Reading answer */
uint8_t cmd_saved = osbdm->buffer[0];
/* Reading answer */
-
osbdm->coun
t = jtag_libusb_bulk_read(osbdm->devh, OSBDM_USB_EP_READ,
- (char *)osbdm->buffer, OSBDM_USB_BUFSIZE, OSBDM_USB_TIMEOUT);
-
+
re
t = jtag_libusb_bulk_read(osbdm->devh, OSBDM_USB_EP_READ,
+ (char *)osbdm->buffer, OSBDM_USB_BUFSIZE,
+ OSBDM_USB_TIMEOUT, &osbdm->count);
/* Now perform basic checks for data sent by BDM device
*/
/* Now perform basic checks for data sent by BDM device
*/
-
- if (osbdm->count < 0) {
- LOG_ERROR("OSBDM communnication error: can't read");
+ if (ret) {
+ LOG_ERROR("OSBDM communication error: can't read");
return ERROR_FAIL;
}
if (osbdm->count < 2) {
return ERROR_FAIL;
}
if (osbdm->count < 2) {
- LOG_ERROR("OSBDM commun
nication error: answer
too small");
+ LOG_ERROR("OSBDM commun
ication error: reply
too small");
return ERROR_FAIL;
}
if (osbdm->count != osbdm->buffer[1]) {
return ERROR_FAIL;
}
if (osbdm->count != osbdm->buffer[1]) {
- LOG_ERROR("OSBDM commun
nication error: answer
size mismatch");
+ LOG_ERROR("OSBDM commun
ication error: reply
size mismatch");
return ERROR_FAIL;
}
if (cmd_saved != osbdm->buffer[0]) {
return ERROR_FAIL;
}
if (cmd_saved != osbdm->buffer[0]) {
- LOG_ERROR("OSBDM commun
nication error: answer
command mismatch");
+ LOG_ERROR("OSBDM commun
ication error: reply
command mismatch");
return ERROR_FAIL;
}
return ERROR_FAIL;
}
@@
-219,7
+218,7
@@
static int osbdm_swap(struct osbdm *osbdm, void *tms, void *tdi,
}
if (length <= 0) {
}
if (length <= 0) {
- LOG_ERROR("BUG: bit sequence equal or less t
o
0");
+ LOG_ERROR("BUG: bit sequence equal or less t
han
0");
return ERROR_FAIL;
}
return ERROR_FAIL;
}
@@
-271,11
+270,11
@@
static int osbdm_swap(struct osbdm *osbdm, void *tms, void *tdi,
/* Extra check
*/
if (((osbdm->buffer[2] << 8) | osbdm->buffer[3]) != 2 * swap_count) {
/* Extra check
*/
if (((osbdm->buffer[2] << 8) | osbdm->buffer[3]) != 2 * swap_count) {
- LOG_ERROR("OSBDM commun
nication error: not proper answer to swap command
");
+ LOG_ERROR("OSBDM commun
ication error: invalid swap command reply
");
return ERROR_FAIL;
}
return ERROR_FAIL;
}
- /* Copy TDO respon
c
e
+ /* Copy TDO respon
s
e
*/
uint8_t *buffer = osbdm->buffer + 4;
for (int bit_idx = 0; bit_idx < length; ) {
*/
uint8_t *buffer = osbdm->buffer + 4;
for (int bit_idx = 0; bit_idx < length; ) {
@@
-298,7
+297,7
@@
static int osbdm_swap(struct osbdm *osbdm, void *tms, void *tdi,
return ERROR_OK;
}
return ERROR_OK;
}
-static int osbdm_flush(struct osbdm *osbdm, struct queue
*
queue)
+static int osbdm_flush(struct osbdm *osbdm, struct queue
*
queue)
{
uint8_t tms[DIV_ROUND_UP(OSBDM_SWAP_MAX, 8)];
uint8_t tdi[DIV_ROUND_UP(OSBDM_SWAP_MAX, 8)];
{
uint8_t tms[DIV_ROUND_UP(OSBDM_SWAP_MAX, 8)];
uint8_t tdi[DIV_ROUND_UP(OSBDM_SWAP_MAX, 8)];
@@
-375,10
+374,10
@@
static int osbdm_flush(struct osbdm *osbdm, struct queue* queue)
static int osbdm_open(struct osbdm *osbdm)
{
(void)memset(osbdm, 0, sizeof(*osbdm));
static int osbdm_open(struct osbdm *osbdm)
{
(void)memset(osbdm, 0, sizeof(*osbdm));
- if (jtag_libusb_open(osbdm_vid, osbdm_pid,
&osbdm->devh
) != ERROR_OK)
+ if (jtag_libusb_open(osbdm_vid, osbdm_pid,
NULL, &osbdm->devh, NULL
) != ERROR_OK)
return ERROR_FAIL;
return ERROR_FAIL;
- if (
jtag_
libusb_claim_interface(osbdm->devh, 0) != ERROR_OK)
+ if (libusb_claim_interface(osbdm->devh, 0) != ERROR_OK)
return ERROR_FAIL;
return ERROR_OK;
return ERROR_FAIL;
return ERROR_OK;
@@
-678,7
+677,7
@@
static int osbdm_init(void)
return ERROR_FAIL;
} else {
/* Device successfully opened */
return ERROR_FAIL;
} else {
/* Device successfully opened */
- LOG_
INFO("OSBDM has opened
");
+ LOG_
DEBUG("OSBDM init
");
}
/* Perform initialize command */
}
/* Perform initialize command */
@@
-690,12
+689,16
@@
static int osbdm_init(void)
return ERROR_OK;
}
return ERROR_OK;
}
-struct jtag_interface osbdm_interface = {
- .name = "osbdm",
+static struct jtag_interface osbdm_interface = {
+ .execute_queue = osbdm_execute_queue,
+};
+struct adapter_driver osbdm_adapter_driver = {
+ .name = "osbdm",
.transports = jtag_only,
.transports = jtag_only,
- .execute_queue = osbdm_execute_queue,
.init = osbdm_init,
.init = osbdm_init,
- .quit = osbdm_quit
+ .quit = osbdm_quit,
+
+ .jtag_ops = &osbdm_interface,
};
};