fooblah
[my-code/fpga.git] / fx2 / cypress_fx2_xilprg.patch
1 diff -Nur xilprg-0.5/cypress_fx2_xilprg.patch xilprg-new/cypress_fx2_xilprg.patch
2 --- xilprg-0.5/cypress_fx2_xilprg.patch 1970-01-01 01:00:00.000000000 +0100
3 +++ xilprg-new/cypress_fx2_xilprg.patch 2007-04-10 10:33:17.000000000 +0200
4 @@ -0,0 +1,208 @@
5 +diff -Nur xilprg-0.5/makefile xilprg-new/makefile
6 +--- xilprg-0.5/makefile        2006-08-23 07:41:20.000000000 +0200
7 ++++ xilprg-new/makefile        2007-04-07 17:09:16.000000000 +0200
8 +@@ -40,6 +40,7 @@
9 +       $(SRC_DIR)/prgfile.cpp \\r
10 +       $(SRC_DIR)/chip.cpp \\r
11 +       $(SRC_DIR)/parport.cpp \\r
12 ++      $(SRC_DIR)/onbusb.cpp \\r
13 +       $(SRC_DIR)/cable.cpp \\r
14 +       $(SRC_DIR)/digilent.cpp \\r
15 +       $(SRC_DIR)/xilinx.cpp\r
16 +diff -Nur xilprg-0.5/src/cable.cpp xilprg-new/src/cable.cpp
17 +--- xilprg-0.5/src/cable.cpp   2006-08-23 07:38:34.000000000 +0200
18 ++++ xilprg-new/src/cable.cpp   2007-04-07 17:20:55.000000000 +0200
19 +@@ -49,6 +49,7 @@
20 + #include "chip.h"\r
21 + #include "cmdline.h"\r
22 + #include "digilent.h"\r
23 ++#include "onbusb.h"\r
24 + #include "parport.h"\r
25\r
26 + cable::cable()\r
27 +@@ -587,6 +588,9 @@
28 +     if (stricmp(argv[0], "dusb") == 0)\r
29 +         cbl = new digilent;\r
30 +     else\r
31 ++    if (stricmp(argv[0], "ousb") ==0)\r
32 ++      cbl = new onbusb;\r
33 ++    else\r
34 +     {\r
35 +         msgf(STR_INVALID_CABLE_DEF);\r
36 +         return NULL;\r
37 +diff -Nur xilprg-0.5/src/onbusb.cpp xilprg-new/src/onbusb.cpp
38 +--- xilprg-0.5/src/onbusb.cpp  1970-01-01 01:00:00.000000000 +0100
39 ++++ xilprg-new/src/onbusb.cpp  2007-04-07 17:15:34.000000000 +0200
40 +@@ -0,0 +1,113 @@
41 ++/*\r
42 ++ * onboard usb\r
43 ++ *\r
44 ++ * author: till & frank zirkelbach\r
45 ++ *\r
46 ++ */\r
47 ++\r
48 ++#include "xilprg.h"\r
49 ++#include "utils.h"\r
50 ++#include "onbusb.h"\r
51 ++\r
52 ++onbusb::onbusb()\r
53 ++{\r
54 ++   handle=NULL;\r
55 ++}\r
56 ++\r
57 ++onbusb::~onbusb()\r
58 ++{\r
59 ++}\r
60 ++\r
61 ++int onbusb::open()\r
62 ++{\r
63 ++   \r
64 ++    struct usb_bus *bus; \r
65 ++\r
66 ++    usb_init();\r
67 ++    usb_find_busses();\r
68 ++    usb_find_devices();\r
69 ++\r
70 ++    bus=usb_get_busses();\r
71 ++    while(bus) {\r
72 ++      dev=bus->devices;\r
73 ++      while(dev) {\r
74 ++              if(dev->descriptor.idVendor==USB_VENDOR_ID &&\r
75 ++                 dev->descriptor.idProduct==USB_PRODUCT_ID)\r
76 ++                      /* found the device */\r
77 ++                      return 0;\r
78 ++              dev=dev->next;\r
79 ++      }\r
80 ++      bus=bus->next;\r
81 ++    }\r
82 ++\r
83 ++    return -1;\r
84 ++\r
85 ++    handle=usb_open(dev);\r
86 ++    if(handle==NULL)\r
87 ++      goto cleanup;\r
88 ++\r
89 ++    if(usb_set_configuration(handle,1)<0)\r
90 ++      goto cleanup;\r
91 ++\r
92 ++    if(usb_claim_interface(handle,0)<0)\r
93 ++      goto cleanup;\r
94 ++\r
95 ++    if(usb_set_altinterface(handle,1)<0)\r
96 ++      goto cleanup;\r
97 ++\r
98 ++    data = 0x10;\r
99 ++\r
100 ++    reset_tap_state();\r
101 ++\r
102 ++    return 0;\r
103 ++\r
104 ++cleanup:\r
105 ++\r
106 ++    close();\r
107 ++\r
108 ++    return 1;\r
109 ++\r
110 ++}\r
111 ++\r
112 ++int onbusb::close()\r
113 ++{\r
114 ++\r
115 ++    usb_close(handle);\r
116 ++\r
117 ++    return 0;\r
118 ++}\r
119 ++\r
120 ++int onbusb::get_description(string& desc)\r
121 ++{\r
122 ++    char s[256];\r
123 ++    sprintf(s, "onboard usb bitbanging");\r
124 ++    desc = s;\r
125 ++    return 0;\r
126 ++}\r
127 ++\r
128 ++void onbusb::set_tdi(int bit)\r
129 ++{\r
130 ++    if (bit) data |= 0x04; else data &= ~0x04;\r
131 ++    data|=0xa0;\r
132 ++    usb_bulk_write(handle,0x01,&data,1,0);\r
133 ++}\r
134 ++\r
135 ++void onbusb::set_tck(int bit)\r
136 ++{\r
137 ++    if (bit) data |= 0x10; else data &= ~0x10;\r
138 ++    data|=0xa0;\r
139 ++    usb_bulk_write(handle,0x01,&data,1,0);\r
140 ++}\r
141 ++\r
142 ++void onbusb::set_tms(int bit)\r
143 ++{\r
144 ++    if (bit) data |= 0x08; else data &= ~0x08;\r
145 ++    data|=0xa0;\r
146 ++    usb_bulk_write(handle,0x01,&data,1,0);\r
147 ++}\r
148 ++\r
149 ++int onbusb::get_tdo()\r
150 ++{\r
151 ++    usb_bulk_read(handle,0x81,&data,1,0);\r
152 ++    return data & 0x01 ? 1 : 0;\r
153 ++}\r
154 +diff -Nur xilprg-0.5/src/onbusb.h xilprg-new/src/onbusb.h
155 +--- xilprg-0.5/src/onbusb.h    1970-01-01 01:00:00.000000000 +0100
156 ++++ xilprg-new/src/onbusb.h    2007-04-07 17:14:07.000000000 +0200
157 +@@ -0,0 +1,43 @@
158 ++/*\r
159 ++ * onboard usb\r
160 ++ *\r
161 ++ * author: till & frank zirkelbach\r
162 ++ *\r
163 ++ */\r
164 ++\r
165 ++#ifndef _ONBUSB_H_INCLUDED_\r
166 ++#define _ONBUSB_H_INCLUDED_\r
167 ++\r
168 ++#include "cable.h"\r
169 ++\r
170 ++#include <usb.h>\r
171 ++\r
172 ++class onbusb : public cable\r
173 ++{\r
174 ++public:\r
175 ++      onbusb();\r
176 ++      virtual ~onbusb();\r
177 ++\r
178 ++    enum\r
179 ++    {\r
180 ++      USB_VENDOR_ID   = 0x04b4,\r
181 ++      USB_PRODUCT_ID  = 0x8613\r
182 ++    };\r
183 ++\r
184 ++    virtual int open();\r
185 ++    virtual int close();\r
186 ++\r
187 ++    virtual int get_description(string&);\r
188 ++\r
189 ++    virtual void set_tdi(int);\r
190 ++    virtual void set_tck(int);\r
191 ++    virtual void set_tms(int);\r
192 ++    virtual int get_tdo();\r
193 ++\r
194 ++protected:\r
195 ++    char data;\r
196 ++    struct usb_device *dev;\r
197 ++    usb_dev_handle *handle;\r
198 ++};\r
199 ++\r
200 ++#endif\r
201 +diff -Nur xilprg-0.5/src/strtable.cpp xilprg-new/src/strtable.cpp
202 +--- xilprg-0.5/src/strtable.cpp        2006-08-23 07:38:34.000000000 +0200
203 ++++ xilprg-new/src/strtable.cpp        2007-04-07 16:56:25.000000000 +0200
204 +@@ -137,7 +137,7 @@
205 +     //STR_CMD_CABLE\r
206 +     "cable\0" \r
207 +     "Sets programmer cable\0"\r
208 +-    "cable {xil3 [ioaddr]|dusb}\0",\r
209 ++    "cable {xil3 [ioaddr]|dusb|ousb}\0",\r
210 +     //STR_CMD_CHIPS\r
211 +     "chips\0"\r
212 +     "Prints supported devices\0" \r
213 diff -Nur xilprg-0.5/makefile xilprg-new/makefile
214 --- xilprg-0.5/makefile 2006-08-23 07:41:20.000000000 +0200
215 +++ xilprg-new/makefile 2007-04-10 10:33:28.000000000 +0200
216 @@ -40,6 +40,7 @@
217         $(SRC_DIR)/prgfile.cpp \\r
218         $(SRC_DIR)/chip.cpp \\r
219         $(SRC_DIR)/parport.cpp \\r
220 +       $(SRC_DIR)/onbusb.cpp \\r
221         $(SRC_DIR)/cable.cpp \\r
222         $(SRC_DIR)/digilent.cpp \\r
223         $(SRC_DIR)/xilinx.cpp\r
224 diff -Nur xilprg-0.5/src/cable.cpp xilprg-new/src/cable.cpp
225 --- xilprg-0.5/src/cable.cpp    2006-08-23 07:38:34.000000000 +0200
226 +++ xilprg-new/src/cable.cpp    2007-04-10 10:33:28.000000000 +0200
227 @@ -49,6 +49,7 @@
228  #include "chip.h"\r
229  #include "cmdline.h"\r
230  #include "digilent.h"\r
231 +#include "onbusb.h"\r
232  #include "parport.h"\r
233  \r
234  cable::cable()\r
235 @@ -587,6 +588,9 @@
236      if (stricmp(argv[0], "dusb") == 0)\r
237          cbl = new digilent;\r
238      else\r
239 +    if (stricmp(argv[0], "ousb") ==0)\r
240 +       cbl = new onbusb;\r
241 +    else\r
242      {\r
243          msgf(STR_INVALID_CABLE_DEF);\r
244          return NULL;\r
245 diff -Nur xilprg-0.5/src/onbusb.cpp xilprg-new/src/onbusb.cpp
246 --- xilprg-0.5/src/onbusb.cpp   1970-01-01 01:00:00.000000000 +0100
247 +++ xilprg-new/src/onbusb.cpp   2007-04-21 14:12:15.000000000 +0200
248 @@ -0,0 +1,126 @@
249 +/*\r
250 + * onboard usb\r
251 + *\r
252 + * author: till & frank zirkelbach\r
253 + *\r
254 + */\r
255 +\r
256 +#include "xilprg.h"\r
257 +#include "utils.h"\r
258 +#include "onbusb.h"\r
259 +\r
260 +onbusb::onbusb()\r
261 +{\r
262 +   handle=NULL;\r
263 +}\r
264 +\r
265 +onbusb::~onbusb()\r
266 +{\r
267 +}\r
268 +\r
269 +int onbusb::open()\r
270 +{\r
271 +   \r
272 +    struct usb_bus *bus; \r
273 +\r
274 +    usb_init();\r
275 +    usb_find_busses();\r
276 +    usb_find_devices();\r
277 +\r
278 +    bus=usb_get_busses();\r
279 +    while(bus) {\r
280 +       dev=bus->devices;\r
281 +       while(dev) {\r
282 +               if(dev->descriptor.idVendor==USB_VENDOR_ID &&\r
283 +                  dev->descriptor.idProduct==USB_PRODUCT_ID) {
284 +
285 +                       /* found the device */\r
286 +
287 +                       printf("found matching usb device\n");
288 +
289 +                       handle=usb_open(dev);\r
290 +                       if(handle==NULL)\r
291 +                               goto cleanup;\r
292 +
293 +                       printf("got handle\n");
294 +\r
295 +                       if(usb_set_configuration(handle,1)<0)\r
296 +                               goto cleanup;\r
297 +
298 +                       printf("set configuration\n");
299 +\r
300 +                       if(usb_claim_interface(handle,0)<0)\r
301 +                               goto cleanup;\r
302 +
303 +                       printf("claimed interface\n");
304 +\r
305 +                       if(usb_set_altinterface(handle,1)<0)\r
306 +                               goto cleanup;\r
307 +
308 +                       printf("set alt interface\n");
309 +\r
310 +                       data = 0x10;\r
311 +\r
312 +                       reset_tap_state();\r
313 +\r
314 +                       return 0;\r
315 +               }
316 +               dev=dev->next;\r
317 +       }\r
318 +       bus=bus->next;\r
319 +    }\r
320 +\r
321 +    return -1;\r
322 +\r
323 +cleanup:\r
324 +\r
325 +    perror("device open");
326 +
327 +    close();\r
328 +\r
329 +    return -1;\r
330 +\r
331 +}\r
332 +\r
333 +int onbusb::close()\r
334 +{\r
335 +\r
336 +    usb_close(handle);\r
337 +\r
338 +    return 0;\r
339 +}\r
340 +\r
341 +int onbusb::get_description(string& desc)\r
342 +{\r
343 +    char s[256];\r
344 +    sprintf(s, "onboard usb bitbanging");\r
345 +    desc = s;\r
346 +    return 0;\r
347 +}\r
348 +\r
349 +void onbusb::set_tdi(int bit)\r
350 +{\r
351 +    if (bit) data |= 0x04; else data &= ~0x04;\r
352 +    data|=0xa0;\r
353 +}\r
354 +\r
355 +void onbusb::set_tck(int bit)\r
356 +{\r
357 +    if (bit) data |= 0x10; else data &= ~0x10;\r
358 +    data|=0xa0;\r
359 +    usb_bulk_write(handle,0x01,&data,1,0);\r
360 +    // if(data&0x10) printf("tms: %d  tdi: %d\n",data&0x08?1:0,data&0x04?1:0);
361 +}\r
362 +\r
363 +void onbusb::set_tms(int bit)\r
364 +{\r
365 +    if (bit) data |= 0x08; else data &= ~0x08;\r
366 +    data|=0xa0;\r
367 +}\r
368 +\r
369 +int onbusb::get_tdo()\r
370 +{\r
371 +    usb_bulk_read(handle,0x81,&data,1,0);\r
372 +    // printf(" ----> %d\n",data&0x01?1:0);
373 +    return data & 0x01 ? 1 : 0;\r
374 +}\r
375 diff -Nur xilprg-0.5/src/onbusb.h xilprg-new/src/onbusb.h
376 --- xilprg-0.5/src/onbusb.h     1970-01-01 01:00:00.000000000 +0100
377 +++ xilprg-new/src/onbusb.h     2007-04-10 10:33:28.000000000 +0200
378 @@ -0,0 +1,43 @@
379 +/*\r
380 + * onboard usb\r
381 + *\r
382 + * author: till & frank zirkelbach\r
383 + *\r
384 + */\r
385 +\r
386 +#ifndef _ONBUSB_H_INCLUDED_\r
387 +#define _ONBUSB_H_INCLUDED_\r
388 +\r
389 +#include "cable.h"\r
390 +\r
391 +#include <usb.h>\r
392 +\r
393 +class onbusb : public cable\r
394 +{\r
395 +public:\r
396 +       onbusb();\r
397 +       virtual ~onbusb();\r
398 +\r
399 +    enum\r
400 +    {\r
401 +       USB_VENDOR_ID   = 0x04b4,\r
402 +       USB_PRODUCT_ID  = 0x8613\r
403 +    };\r
404 +\r
405 +    virtual int open();\r
406 +    virtual int close();\r
407 +\r
408 +    virtual int get_description(string&);\r
409 +\r
410 +    virtual void set_tdi(int);\r
411 +    virtual void set_tck(int);\r
412 +    virtual void set_tms(int);\r
413 +    virtual int get_tdo();\r
414 +\r
415 +protected:\r
416 +    char data;\r
417 +    struct usb_device *dev;\r
418 +    usb_dev_handle *handle;\r
419 +};\r
420 +\r
421 +#endif\r
422 diff -Nur xilprg-0.5/src/strtable.cpp xilprg-new/src/strtable.cpp
423 --- xilprg-0.5/src/strtable.cpp 2006-08-23 07:38:34.000000000 +0200
424 +++ xilprg-new/src/strtable.cpp 2007-04-10 10:33:28.000000000 +0200
425 @@ -137,7 +137,7 @@
426      //STR_CMD_CABLE\r
427      "cable\0" \r
428      "Sets programmer cable\0"\r
429 -    "cable {xil3 [ioaddr]|dusb}\0",\r
430 +    "cable {xil3 [ioaddr]|dusb|ousb}\0",\r
431      //STR_CMD_CHIPS\r
432      "chips\0"\r
433      "Prints supported devices\0" \r