Fix memory leakage pathe with no V2 device found
[fw/stlink] / src / stlink-usb.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <stdint.h>
5 #include <time.h>
6 #include <sys/types.h>
7 #include <libusb-1.0/libusb.h>
8
9 #include "stlink-common.h"
10 #include "stlink-usb.h"
11 #include "uglylogging.h"
12
13 #define LOG_TAG __FILE__
14 #define DLOG(format, args...)         ugly_log(UDEBUG, LOG_TAG, format, ## args)
15 #define ILOG(format, args...)         ugly_log(UINFO, LOG_TAG, format, ## args)
16 #define WLOG(format, args...)         ugly_log(UWARN, LOG_TAG, format, ## args)
17 #define fatal(format, args...)        ugly_log(UFATAL, LOG_TAG, format, ## args)
18
19
20 enum SCSI_Generic_Direction {SG_DXFER_TO_DEV=0, SG_DXFER_FROM_DEV=0x80};
21
22 void _stlink_usb_close(stlink_t* sl) {
23     struct stlink_libusb * const handle = sl->backend_data;
24     // maybe we couldn't even get the usb device?
25     if (handle != NULL) {
26         if (handle->req_trans != NULL)
27             libusb_free_transfer(handle->req_trans);
28
29         if (handle->rep_trans != NULL)
30             libusb_free_transfer(handle->rep_trans);
31
32         if (handle->usb_handle != NULL) {
33             libusb_close(handle->usb_handle);
34         }
35
36         libusb_exit(handle->libusb_ctx);
37         free(handle);
38     }
39 }
40
41
42 struct trans_ctx {
43 #define TRANS_FLAGS_IS_DONE (1 << 0)
44 #define TRANS_FLAGS_HAS_ERROR (1 << 1)
45     volatile unsigned long flags;
46 };
47
48 static void on_trans_done(struct libusb_transfer * trans) {
49     struct trans_ctx * const ctx = trans->user_data;
50
51     if (trans->status != LIBUSB_TRANSFER_COMPLETED)
52         ctx->flags |= TRANS_FLAGS_HAS_ERROR;
53
54     ctx->flags |= TRANS_FLAGS_IS_DONE;
55 }
56
57 int submit_wait(struct stlink_libusb *slu, struct libusb_transfer * trans) {
58     struct timeval start;
59     struct timeval now;
60     struct timeval diff;
61     struct trans_ctx trans_ctx;
62     enum libusb_error error;
63
64     trans_ctx.flags = 0;
65
66     /* brief intrusion inside the libusb interface */
67     trans->callback = on_trans_done;
68     trans->user_data = &trans_ctx;
69
70     if ((error = libusb_submit_transfer(trans))) {
71         printf("libusb_submit_transfer(%d)\n", error);
72         return -1;
73     }
74
75     gettimeofday(&start, NULL);
76
77     while (trans_ctx.flags == 0) {
78         struct timeval timeout;
79         timeout.tv_sec = 3;
80         timeout.tv_usec = 0;
81         if (libusb_handle_events_timeout(slu->libusb_ctx, &timeout)) {
82             printf("libusb_handle_events()\n");
83             return -1;
84         }
85
86         gettimeofday(&now, NULL);
87         timersub(&now, &start, &diff);
88         if (diff.tv_sec >= 3) {
89             printf("libusb_handle_events() timeout\n");
90             return -1;
91         }
92     }
93
94     if (trans_ctx.flags & TRANS_FLAGS_HAS_ERROR) {
95         printf("libusb_handle_events() | has_error\n");
96         return -1;
97     }
98
99     return 0;
100 }
101
102 ssize_t send_recv(struct stlink_libusb* handle, int terminate,
103         unsigned char* txbuf, size_t txsize,
104         unsigned char* rxbuf, size_t rxsize) {
105     /* note: txbuf and rxbuf can point to the same area */
106     int res = 0;
107
108     libusb_fill_bulk_transfer(handle->req_trans, handle->usb_handle,
109             handle->ep_req,
110             txbuf, txsize,
111             NULL, NULL,
112             0
113             );
114
115     if (submit_wait(handle, handle->req_trans)) return -1;
116
117     /* send_only */
118     if (rxsize != 0) {
119
120         /* read the response */
121         
122         libusb_fill_bulk_transfer(handle->rep_trans, handle->usb_handle,
123                                   handle->ep_rep, rxbuf, rxsize, NULL, NULL, 0);
124         
125         if (submit_wait(handle, handle->rep_trans)) return -1;
126         res = handle->rep_trans->actual_length;
127     }
128     
129     if ((handle->protocoll == 1) && terminate) {
130         fprintf(stderr, "This is never used....\n");
131         exit(EXIT_FAILURE);
132         /* Read the SG reply */
133         unsigned char sg_buf[13];
134         libusb_fill_bulk_transfer
135             (handle->rep_trans, handle->usb_handle,
136              handle->ep_rep, sg_buf, 13, NULL, NULL, 0);
137         res = submit_wait(handle, handle->rep_trans);
138         /* The STLink doesn't seem to evaluate the sequence number */
139         handle->sg_transfer_idx++;
140         if (res ) return -1;
141     }
142
143     return handle->rep_trans->actual_length;
144 }
145
146 static inline int send_only
147 (struct stlink_libusb* handle, int terminate,
148  unsigned char* txbuf, size_t txsize) {
149     return send_recv(handle, terminate, txbuf, txsize, NULL, 0);
150 }
151
152
153 static int fill_command
154 (stlink_t * sl, enum SCSI_Generic_Direction dir, uint32_t len) {
155     struct stlink_libusb * const slu = sl->backend_data;
156     unsigned char* const cmd = sl->c_buf;
157     int i = 0;
158     memset(cmd, 0, sizeof (sl->c_buf));
159     if(slu->protocoll == 1) {
160         fprintf(stderr, "This is never used....\n");
161         cmd[i++] = 'U';
162         cmd[i++] = 'S';
163         cmd[i++] = 'B';
164         cmd[i++] = 'C';
165         write_uint32(&cmd[i], slu->sg_transfer_idx);
166         write_uint32(&cmd[i + 4], len);
167         i += 8;
168         cmd[i++] = (dir == SG_DXFER_FROM_DEV)?0x80:0;
169         cmd[i++] = 0; /* Logical unit */
170         cmd[i++] = 0xa; /* Command length */
171     }
172     return i;
173 }
174
175 void _stlink_usb_version(stlink_t *sl) {
176     struct stlink_libusb * const slu = sl->backend_data;
177     unsigned char* const data = sl->q_buf;
178     unsigned char* const cmd  = sl->c_buf;
179     ssize_t size;
180     uint32_t rep_len = 6;
181     int i = fill_command(sl, SG_DXFER_FROM_DEV, rep_len);
182
183     cmd[i++] = STLINK_GET_VERSION;
184
185     size = send_recv(slu, 1, cmd, slu->cmd_len, data, rep_len);
186     if (size == -1) {
187         printf("[!] send_recv\n");
188         return;
189     }
190 }
191
192 void _stlink_usb_write_mem32(stlink_t *sl, uint32_t addr, uint16_t len) {
193     struct stlink_libusb * const slu = sl->backend_data;
194     unsigned char* const data = sl->q_buf;
195     unsigned char* const cmd  = sl->c_buf;
196
197     int i = fill_command(sl, SG_DXFER_TO_DEV, len);
198     cmd[i++] = STLINK_DEBUG_COMMAND;
199     cmd[i++] = STLINK_DEBUG_WRITEMEM_32BIT;
200     write_uint32(&cmd[i], addr);
201     write_uint16(&cmd[i + 4], len);
202     send_only(slu, 0, cmd, slu->cmd_len);
203
204     send_only(slu, 1, data, len);
205 }
206
207 void _stlink_usb_write_mem8(stlink_t *sl, uint32_t addr, uint16_t len) {
208     struct stlink_libusb * const slu = sl->backend_data;
209     unsigned char* const data = sl->q_buf;
210     unsigned char* const cmd  = sl->c_buf;
211
212     int i = fill_command(sl, SG_DXFER_TO_DEV, 0);
213     cmd[i++] = STLINK_DEBUG_COMMAND;
214     cmd[i++] = STLINK_DEBUG_WRITEMEM_8BIT;
215     write_uint32(&cmd[i], addr);
216     write_uint16(&cmd[i + 4], len);
217     send_only(slu, 0, cmd, slu->cmd_len);
218     send_only(slu, 1, data, len);
219 }
220
221
222 int _stlink_usb_current_mode(stlink_t * sl) {
223     struct stlink_libusb * const slu = sl->backend_data;
224     unsigned char* const cmd  = sl->c_buf;
225     unsigned char* const data = sl->q_buf;
226     ssize_t size;
227     int rep_len = 2;
228     int i = fill_command(sl, SG_DXFER_FROM_DEV, rep_len);
229     
230     cmd[i++] = STLINK_GET_CURRENT_MODE;
231     size = send_recv(slu, 1, cmd,  slu->cmd_len, data, rep_len);
232     if (size == -1) {
233         printf("[!] send_recv\n");
234         return -1;
235     }
236     return sl->q_buf[0];
237 }
238
239 void _stlink_usb_core_id(stlink_t * sl) {
240     struct stlink_libusb * const slu = sl->backend_data;
241     unsigned char* const cmd  = sl->c_buf;
242     unsigned char* const data = sl->q_buf;
243     ssize_t size;
244     int rep_len = 4;
245     int i = fill_command(sl, SG_DXFER_FROM_DEV, rep_len);
246
247     cmd[i++] = STLINK_DEBUG_COMMAND;
248     cmd[i++] = STLINK_DEBUG_READCOREID;
249
250     size = send_recv(slu, 1, cmd, slu->cmd_len, data, rep_len);
251     if (size == -1) {
252         printf("[!] send_recv\n");
253         return;
254     }
255
256     sl->core_id = read_uint32(data, 0);
257 }
258
259 void _stlink_usb_status(stlink_t * sl) {
260     struct stlink_libusb * const slu = sl->backend_data;
261     unsigned char* const data = sl->q_buf;
262     unsigned char* const cmd  = sl->c_buf;
263     ssize_t size;
264     int rep_len = 2;
265     int i = fill_command(sl, SG_DXFER_FROM_DEV, rep_len);
266
267     cmd[i++] = STLINK_DEBUG_COMMAND;
268     cmd[i++] = STLINK_DEBUG_GETSTATUS;
269
270     size = send_recv(slu, 1, cmd, slu->cmd_len, data, rep_len);
271     if (size == -1) {
272         printf("[!] send_recv\n");
273         return;
274     }
275 }
276
277 void _stlink_usb_force_debug(stlink_t *sl) {
278     struct stlink_libusb *slu = sl->backend_data;
279     unsigned char* const data = sl->q_buf;
280     unsigned char* const cmd  = sl->c_buf;
281     ssize_t size;
282     int rep_len = 2;
283     int i = fill_command(sl, SG_DXFER_FROM_DEV, rep_len);
284
285     cmd[i++] = STLINK_DEBUG_COMMAND;
286     cmd[i++] = STLINK_DEBUG_FORCEDEBUG;
287     size = send_recv(slu, 1, cmd, slu->cmd_len, data, rep_len);
288     if (size == -1) {
289         printf("[!] send_recv\n");
290         return;
291     }
292 }
293
294 void _stlink_usb_enter_swd_mode(stlink_t * sl) {
295     struct stlink_libusb * const slu = sl->backend_data;
296     unsigned char* const cmd  = sl->c_buf;
297     ssize_t size;
298     const int rep_len = 0;
299     int i = fill_command(sl, SG_DXFER_FROM_DEV, rep_len);
300
301     cmd[i++] = STLINK_DEBUG_COMMAND;
302     cmd[i++] = STLINK_DEBUG_ENTER;
303     cmd[i++] = STLINK_DEBUG_ENTER_SWD;
304
305     size = send_only(slu, 1, cmd, slu->cmd_len);
306     if (size == -1) {
307         printf("[!] send_recv\n");
308         return;
309     }
310 }
311
312 void _stlink_usb_exit_dfu_mode(stlink_t* sl) {
313     struct stlink_libusb * const slu = sl->backend_data;
314     unsigned char* const cmd = sl->c_buf;
315     ssize_t size;
316     int i = fill_command(sl, SG_DXFER_FROM_DEV, 0);
317
318     cmd[i++] = STLINK_DFU_COMMAND;
319     cmd[i++] = STLINK_DFU_EXIT;
320
321     size = send_only(slu, 1, cmd, slu->cmd_len);
322     if (size == -1) {
323         printf("[!] send_recv\n");
324         return;
325     }
326 }
327
328 /**
329  * TODO - not convinced this does anything...
330  * @param sl
331  */
332 void _stlink_usb_reset(stlink_t * sl) {
333     struct stlink_libusb * const slu = sl->backend_data;
334     unsigned char* const data = sl->q_buf;
335     unsigned char* const cmd = sl->c_buf;
336     ssize_t size;
337     int rep_len = 2;
338     int i = fill_command(sl, SG_DXFER_FROM_DEV, rep_len);
339
340     cmd[i++] = STLINK_DEBUG_COMMAND;
341     cmd[i++] = STLINK_DEBUG_RESETSYS;
342
343     size = send_recv(slu, 1, cmd, slu->cmd_len, data, rep_len);
344     if (size == -1) {
345         printf("[!] send_recv\n");
346         return;
347     }
348 }
349
350
351 void _stlink_usb_step(stlink_t* sl) {
352     struct stlink_libusb * const slu = sl->backend_data;
353     unsigned char* const data = sl->q_buf;
354     unsigned char* const cmd = sl->c_buf;
355     ssize_t size;
356     int rep_len = 2;
357     int i = fill_command(sl, SG_DXFER_FROM_DEV, rep_len);
358
359     cmd[i++] = STLINK_DEBUG_COMMAND;
360     cmd[i++] = STLINK_DEBUG_STEPCORE;
361
362     size = send_recv(slu, 1, cmd, slu->cmd_len, data, rep_len);
363     if (size == -1) {
364         printf("[!] send_recv\n");
365         return;
366     }
367 }
368
369 /**
370  * This seems to do a good job of restarting things from the beginning?
371  * @param sl
372  */
373 void _stlink_usb_run(stlink_t* sl) {
374     struct stlink_libusb * const slu = sl->backend_data;
375     unsigned char* const data = sl->q_buf;
376     unsigned char* const cmd = sl->c_buf;
377     ssize_t size;
378     int rep_len = 2;
379     int i = fill_command(sl, SG_DXFER_FROM_DEV, rep_len);
380
381     cmd[i++] = STLINK_DEBUG_COMMAND;
382     cmd[i++] = STLINK_DEBUG_RUNCORE;
383
384     size = send_recv(slu, 1, cmd, slu->cmd_len, data, rep_len);
385     if (size == -1) {
386         printf("[!] send_recv\n");
387         return;
388     }
389 }
390
391 void _stlink_usb_exit_debug_mode(stlink_t *sl) {
392     struct stlink_libusb * const slu = sl->backend_data;
393     unsigned char* const cmd = sl->c_buf;
394     ssize_t size;
395     int i = fill_command(sl, SG_DXFER_FROM_DEV, 0);
396
397     cmd[i++] = STLINK_DEBUG_COMMAND;
398     cmd[i++] = STLINK_DEBUG_EXIT;
399
400     size = send_only(slu, 1, cmd, slu->cmd_len);
401     if (size == -1) {
402         printf("[!] send_only\n");
403         return;
404     }
405 }
406
407 void _stlink_usb_read_mem32(stlink_t *sl, uint32_t addr, uint16_t len) {
408     struct stlink_libusb * const slu = sl->backend_data;
409     unsigned char* const data = sl->q_buf;
410     unsigned char* const cmd = sl->c_buf;
411     ssize_t size;
412     int i = fill_command(sl, SG_DXFER_FROM_DEV, len);
413
414     cmd[i++] = STLINK_DEBUG_COMMAND;
415     cmd[i++] = STLINK_DEBUG_READMEM_32BIT;
416     write_uint32(&cmd[i], addr);
417     write_uint16(&cmd[i + 4], len);
418
419     size = send_recv(slu, 1, cmd, slu->cmd_len, data, len);
420     if (size == -1) {
421         printf("[!] send_recv\n");
422         return;
423     }
424
425     sl->q_len = (size_t) size;
426
427     stlink_print_data(sl);
428 }
429
430 void _stlink_usb_read_all_regs(stlink_t *sl, reg *regp) {
431     struct stlink_libusb * const slu = sl->backend_data;
432     unsigned char* const cmd = sl->c_buf;
433     unsigned char* const data = sl->q_buf;
434     ssize_t size;
435     uint32_t rep_len = 84;
436     int i = fill_command(sl, SG_DXFER_FROM_DEV, rep_len);
437
438     cmd[i++] = STLINK_DEBUG_COMMAND;
439     cmd[i++] = STLINK_DEBUG_READALLREGS;
440     size = send_recv(slu, 1, cmd, slu->cmd_len, data, rep_len);
441     if (size == -1) {
442         printf("[!] send_recv\n");
443         return;
444     }
445     sl->q_len = (size_t) size;
446     stlink_print_data(sl);
447     for(i=0; i<16; i++)
448         regp->r[i]= read_uint32(sl->q_buf, i*4);
449     regp->xpsr       = read_uint32(sl->q_buf, 64);
450     regp->main_sp    = read_uint32(sl->q_buf, 68);
451     regp->process_sp = read_uint32(sl->q_buf, 72);
452     regp->rw         = read_uint32(sl->q_buf, 76);
453     regp->rw2        = read_uint32(sl->q_buf, 80);
454     if (sl->verbose < 2)
455         return;
456
457     DLOG("xpsr       = 0x%08x\n", read_uint32(sl->q_buf, 64));
458     DLOG("main_sp    = 0x%08x\n", read_uint32(sl->q_buf, 68));
459     DLOG("process_sp = 0x%08x\n", read_uint32(sl->q_buf, 72));
460     DLOG("rw         = 0x%08x\n", read_uint32(sl->q_buf, 76));
461     DLOG("rw2        = 0x%08x\n", read_uint32(sl->q_buf, 80));
462 }
463
464 void _stlink_usb_read_reg(stlink_t *sl, int r_idx, reg *regp) {
465     struct stlink_libusb * const slu = sl->backend_data;
466     unsigned char* const data = sl->q_buf;
467     unsigned char* const cmd  = sl->c_buf;
468     ssize_t size;
469     uint32_t r;
470     uint32_t rep_len = 4;
471     int i = fill_command(sl, SG_DXFER_FROM_DEV, rep_len);
472
473     cmd[i++] = STLINK_DEBUG_COMMAND;
474     cmd[i++] = STLINK_DEBUG_READREG;
475     cmd[i++] = (uint8_t) r_idx;
476     size = send_recv(slu, 1, cmd, slu->cmd_len, data, rep_len);
477     if (size == -1) {
478         printf("[!] send_recv\n");
479         return;
480     }
481     sl->q_len = (size_t) size;
482     stlink_print_data(sl);
483     r = read_uint32(sl->q_buf, 0);
484     DLOG("r_idx (%2d) = 0x%08x\n", r_idx, r);
485     
486     switch (r_idx) {
487     case 16:
488         regp->xpsr = r;
489         break;
490     case 17:
491         regp->main_sp = r;
492         break;
493     case 18:
494         regp->process_sp = r;
495         break;
496     case 19:
497         regp->rw = r; /* XXX ?(primask, basemask etc.) */
498         break;
499     case 20:
500         regp->rw2 = r; /* XXX ?(primask, basemask etc.) */
501         break;
502     default:
503         regp->r[r_idx] = r;
504     }
505 }
506
507 void _stlink_usb_write_reg(stlink_t *sl, uint32_t reg, int idx) {
508     struct stlink_libusb * const slu = sl->backend_data;
509     unsigned char* const data = sl->q_buf;
510     unsigned char* const cmd  = sl->c_buf;
511     ssize_t size;
512     uint32_t rep_len = 2;
513     int i = fill_command(sl, SG_DXFER_FROM_DEV, rep_len);
514
515     cmd[i++] = STLINK_DEBUG_COMMAND;
516     cmd[i++] = STLINK_DEBUG_WRITEREG;
517     cmd[i++] = idx;
518     write_uint32(&cmd[i], reg);
519     size = send_recv(slu, 1, cmd, slu->cmd_len, data, rep_len);
520     if (size == -1) {
521         printf("[!] send_recv\n");
522         return;
523     }
524     sl->q_len = (size_t) size;
525     stlink_print_data(sl);
526 }
527
528 stlink_backend_t _stlink_usb_backend = {
529     _stlink_usb_close,
530     _stlink_usb_exit_debug_mode,
531     _stlink_usb_enter_swd_mode,
532     NULL,  // no enter_jtag_mode here...
533     _stlink_usb_exit_dfu_mode,
534     _stlink_usb_core_id,
535     _stlink_usb_reset,
536     _stlink_usb_run,
537     _stlink_usb_status,
538     _stlink_usb_version,
539     _stlink_usb_read_mem32,
540     _stlink_usb_write_mem32,
541     _stlink_usb_write_mem8,
542     _stlink_usb_read_all_regs,
543     _stlink_usb_read_reg,
544     _stlink_usb_write_reg,
545     _stlink_usb_step,
546     _stlink_usb_current_mode,
547     _stlink_usb_force_debug
548 };
549
550
551 stlink_t* stlink_open_usb(const int verbose) {
552     stlink_t* sl = NULL;
553     struct stlink_libusb* slu = NULL;
554     int error = -1;
555     libusb_device** devs = NULL;
556     int config;
557
558     sl = malloc(sizeof (stlink_t));
559     slu = malloc(sizeof (struct stlink_libusb));
560     if (sl == NULL) goto on_error;
561     if (slu == NULL) goto on_error;
562     memset(sl, 0, sizeof (stlink_t));
563     memset(slu, 0, sizeof (struct stlink_libusb));
564
565     ugly_init(verbose);
566     sl->backend = &_stlink_usb_backend;
567     sl->backend_data = slu;
568     
569     sl->core_stat = STLINK_CORE_STAT_UNKNOWN;
570
571     if (libusb_init(&(slu->libusb_ctx))) {
572         WLOG("failed to init libusb context, wrong version of libraries?\n");
573         goto on_error;
574     }
575     
576     slu->usb_handle = libusb_open_device_with_vid_pid(slu->libusb_ctx, USB_ST_VID, USB_STLINK_32L_PID);
577     if (slu->usb_handle == NULL) {
578                 // TODO - free usb context too...
579                 WLOG("Couldn't find any ST-Link/V2 devices");
580         goto on_error;
581     }
582     
583     if (libusb_kernel_driver_active(slu->usb_handle, 0) == 1) {
584         int r;
585         
586         r = libusb_detach_kernel_driver(slu->usb_handle, 0);
587         if (r<0) {
588             WLOG("libusb_detach_kernel_driver(() error %s\n", strerror(-r));
589             goto on_libusb_error;
590         }
591     }
592
593     if (libusb_get_configuration(slu->usb_handle, &config)) {
594         /* this may fail for a previous configured device */
595         WLOG("libusb_get_configuration()\n");
596         goto on_libusb_error;
597     }
598
599     if (config != 1) {
600         printf("setting new configuration (%d -> 1)\n", config);
601         if (libusb_set_configuration(slu->usb_handle, 1)) {
602             /* this may fail for a previous configured device */
603             WLOG("libusb_set_configuration() failed\n");
604             goto on_libusb_error;
605         }
606     }
607
608     if (libusb_claim_interface(slu->usb_handle, 0)) {
609         WLOG("libusb_claim_interface() failed\n");
610         goto on_libusb_error;
611     }
612
613     slu->req_trans = libusb_alloc_transfer(0);
614     if (slu->req_trans == NULL) {
615         WLOG("libusb_alloc_transfer failed\n");
616         goto on_libusb_error;
617     }
618
619     slu->rep_trans = libusb_alloc_transfer(0);
620     if (slu->rep_trans == NULL) {
621         WLOG("libusb_alloc_transfer failed\n");
622         goto on_libusb_error;
623     }
624     // TODO - could use the scanning techniq from stm8 code here...
625     slu->ep_rep = 1 /* ep rep */ | LIBUSB_ENDPOINT_IN;
626     slu->ep_req = 2 /* ep req */ | LIBUSB_ENDPOINT_OUT;
627
628     slu->sg_transfer_idx = 0;
629     // TODO - never used at the moment, always CMD_SIZE
630     slu->cmd_len = (slu->protocoll == 1)? STLINK_SG_SIZE: STLINK_CMD_SIZE;
631
632     /* success */
633
634     if (stlink_current_mode(sl) == STLINK_DEV_DFU_MODE) {
635       ILOG("-- exit_dfu_mode\n");
636       stlink_exit_dfu_mode(sl);
637     }
638
639     if (stlink_current_mode(sl) != STLINK_DEV_DEBUG_MODE) {
640       stlink_enter_swd_mode(sl);
641     }
642
643     stlink_version(sl);
644     stlink_load_device_params(sl);
645
646     error = 0;
647
648 on_libusb_error:
649     if (devs != NULL) {
650         libusb_free_device_list(devs, 1);
651     }
652
653     if (error == -1) {
654         stlink_close(sl);
655         return NULL;
656     }
657
658     /* success */
659     return sl;
660
661 on_error:
662     if( slu->libusb_ctx)
663         libusb_exit(slu->libusb_ctx);
664     if (sl != NULL) free(sl);
665     if (slu != NULL) free(slu);
666     return 0;
667 }
668