drivers: new jtag bitbang driver using sysfs gpio
[fw/openocd] / src / jtag / interfaces.c
1 /***************************************************************************
2  *   Copyright (C) 2005 by Dominic Rath                                    *
3  *   Dominic.Rath@gmx.de                                                   *
4  *                                                                         *
5  *   Copyright (C) 2007,2008 Ã˜yvind Harboe                                 *
6  *   oyvind.harboe@zylin.com                                               *
7  *                                                                         *
8  *   Copyright (C) 2009 SoftPLC Corporation                                *
9  *       http://softplc.com                                                *
10  *   dick@softplc.com                                                      *
11  *                                                                         *
12  *   Copyright (C) 2009 Zachary T Welch                                    *
13  *   zw@superlucidity.net                                                  *
14  *                                                                         *
15  *   This program is free software; you can redistribute it and/or modify  *
16  *   it under the terms of the GNU General Public License as published by  *
17  *   the Free Software Foundation; either version 2 of the License, or     *
18  *   (at your option) any later version.                                   *
19  *                                                                         *
20  *   This program is distributed in the hope that it will be useful,       *
21  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
22  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
23  *   GNU General Public License for more details.                          *
24  *                                                                         *
25  *   You should have received a copy of the GNU General Public License     *
26  *   along with this program; if not, write to the                         *
27  *   Free Software Foundation, Inc.,                                       *
28  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
29  ***************************************************************************/
30
31 #ifdef HAVE_CONFIG_H
32 #include "config.h"
33 #endif
34
35 #include "interfaces.h"
36
37 /** @file
38  * This file includes declarations for all built-in jtag interfaces,
39  * which are then listed in the jtag_interfaces array.
40  *
41  * Dynamic loading can be implemented be searching for shared libraries
42  * that contain a jtag_interface structure that can added to this list.
43  */
44
45 #if BUILD_ZY1000 == 1
46 extern struct jtag_interface zy1000_interface;
47 #elif defined(BUILD_MINIDRIVER_DUMMY)
48 extern struct jtag_interface minidummy_interface;
49 #else /* standard drivers */
50 #if BUILD_PARPORT == 1
51 extern struct jtag_interface parport_interface;
52 #endif
53 #if BUILD_DUMMY == 1
54 extern struct jtag_interface dummy_interface;
55 #endif
56 #if BUILD_FT2232_FTD2XX == 1
57 extern struct jtag_interface ft2232_interface;
58 #endif
59 #if BUILD_FT2232_LIBFTDI == 1
60 extern struct jtag_interface ft2232_interface;
61 #endif
62 #if BUILD_FTDI == 1
63 extern struct jtag_interface ftdi_interface;
64 #endif
65 #if BUILD_USB_BLASTER_LIBFTDI == 1 || BUILD_USB_BLASTER_FTD2XX == 1
66 extern struct jtag_interface usb_blaster_interface;
67 #endif
68 #if BUILD_AMTJTAGACCEL == 1
69 extern struct jtag_interface amt_jtagaccel_interface;
70 #endif
71 #if BUILD_EP93XX == 1
72 extern struct jtag_interface ep93xx_interface;
73 #endif
74 #if BUILD_AT91RM9200 == 1
75 extern struct jtag_interface at91rm9200_interface;
76 #endif
77 #if BUILD_GW16012 == 1
78 extern struct jtag_interface gw16012_interface;
79 #endif
80 #if BUILD_PRESTO_LIBFTDI == 1 || BUILD_PRESTO_FTD2XX == 1
81 extern struct jtag_interface presto_interface;
82 #endif
83 #if BUILD_USBPROG == 1
84 extern struct jtag_interface usbprog_interface;
85 #endif
86 #if BUILD_JLINK == 1
87 extern struct jtag_interface jlink_interface;
88 #endif
89 #if BUILD_VSLLINK == 1
90 extern struct jtag_interface vsllink_interface;
91 #endif
92 #if BUILD_RLINK == 1
93 extern struct jtag_interface rlink_interface;
94 #endif
95 #if BUILD_ULINK == 1
96 extern struct jtag_interface ulink_interface;
97 #endif
98 #if BUILD_ARMJTAGEW == 1
99 extern struct jtag_interface armjtagew_interface;
100 #endif
101 #if BUILD_BUSPIRATE == 1
102 extern struct jtag_interface buspirate_interface;
103 #endif
104 #if BUILD_REMOTE_BITBANG == 1
105 extern struct jtag_interface remote_bitbang_interface;
106 #endif
107 #if BUILD_STLINK == 1
108 extern struct jtag_interface stlink_interface;
109 #endif
110 #if BUILD_OSBDM == 1
111 extern struct jtag_interface osbdm_interface;
112 #endif
113 #if BUILD_OPENDOUS == 1
114 extern struct jtag_interface opendous_interface;
115 #endif
116 #if BUILD_SYSFSGPIO == 1
117 extern struct jtag_interface sysfsgpio_interface;
118 #endif
119 #endif /* standard drivers */
120
121 /**
122  * The list of built-in JTAG interfaces, containing entries for those
123  * drivers that were enabled by the @c configure script.
124  *
125  * The list should be defined to contain either one minidriver interface
126  * or some number of standard driver interfaces, never both.
127  */
128 struct jtag_interface *jtag_interfaces[] = {
129 #if BUILD_ZY1000 == 1
130                 &zy1000_interface,
131 #elif defined(BUILD_MINIDRIVER_DUMMY)
132                 &minidummy_interface,
133 #else /* standard drivers */
134 #if BUILD_PARPORT == 1
135                 &parport_interface,
136 #endif
137 #if BUILD_DUMMY == 1
138                 &dummy_interface,
139 #endif
140 #if BUILD_FT2232_FTD2XX == 1
141                 &ft2232_interface,
142 #endif
143 #if BUILD_FT2232_LIBFTDI == 1
144                 &ft2232_interface,
145 #endif
146 #if BUILD_FTDI == 1
147                 &ftdi_interface,
148 #endif
149 #if BUILD_USB_BLASTER_LIBFTDI == 1 || BUILD_USB_BLASTER_FTD2XX == 1
150                 &usb_blaster_interface,
151 #endif
152 #if BUILD_AMTJTAGACCEL == 1
153                 &amt_jtagaccel_interface,
154 #endif
155 #if BUILD_EP93XX == 1
156                 &ep93xx_interface,
157 #endif
158 #if BUILD_AT91RM9200 == 1
159                 &at91rm9200_interface,
160 #endif
161 #if BUILD_GW16012 == 1
162                 &gw16012_interface,
163 #endif
164 #if BUILD_PRESTO_LIBFTDI == 1 || BUILD_PRESTO_FTD2XX == 1
165                 &presto_interface,
166 #endif
167 #if BUILD_USBPROG == 1
168                 &usbprog_interface,
169 #endif
170 #if BUILD_JLINK == 1
171                 &jlink_interface,
172 #endif
173 #if BUILD_VSLLINK == 1
174                 &vsllink_interface,
175 #endif
176 #if BUILD_RLINK == 1
177                 &rlink_interface,
178 #endif
179 #if BUILD_ULINK == 1
180                 &ulink_interface,
181 #endif
182 #if BUILD_ARMJTAGEW == 1
183                 &armjtagew_interface,
184 #endif
185 #if BUILD_BUSPIRATE == 1
186                 &buspirate_interface,
187 #endif
188 #if BUILD_REMOTE_BITBANG == 1
189                 &remote_bitbang_interface,
190 #endif
191 #if BUILD_STLINK == 1
192                 &stlink_interface,
193 #endif
194 #if BUILD_OSBDM == 1
195                 &osbdm_interface,
196 #endif
197 #if BUILD_OPENDOUS == 1
198                 &opendous_interface,
199 #endif
200 #if BUILD_SYSFSGPIO == 1
201                 &sysfsgpio_interface,
202 #endif
203 #endif /* standard drivers */
204                 NULL,
205         };
206
207 void jtag_interface_modules_load(const char *path)
208 {
209         /* @todo: implement dynamic module loading for JTAG interface drivers */
210 }