small ep mods for fx2, added xilprg patch to support bitbanging the fx2
[my-code/fpga.git] / fx2 / cypress_fx2_xilprg.patch
diff --git a/fx2/cypress_fx2_xilprg.patch b/fx2/cypress_fx2_xilprg.patch
new file mode 100644 (file)
index 0000000..96d9eab
--- /dev/null
@@ -0,0 +1,208 @@
+diff -Nur xilprg-0.5/makefile xilprg-new/makefile
+--- xilprg-0.5/makefile        2006-08-23 07:41:20.000000000 +0200
++++ xilprg-new/makefile        2007-04-07 17:09:16.000000000 +0200
+@@ -40,6 +40,7 @@
+       $(SRC_DIR)/prgfile.cpp \\r
+       $(SRC_DIR)/chip.cpp \\r
+       $(SRC_DIR)/parport.cpp \\r
++      $(SRC_DIR)/onbusb.cpp \\r
+       $(SRC_DIR)/cable.cpp \\r
+       $(SRC_DIR)/digilent.cpp \\r
+       $(SRC_DIR)/xilinx.cpp\r
+diff -Nur xilprg-0.5/src/cable.cpp xilprg-new/src/cable.cpp
+--- xilprg-0.5/src/cable.cpp   2006-08-23 07:38:34.000000000 +0200
++++ xilprg-new/src/cable.cpp   2007-04-07 17:20:55.000000000 +0200
+@@ -49,6 +49,7 @@
+ #include "chip.h"\r
+ #include "cmdline.h"\r
+ #include "digilent.h"\r
++#include "onbusb.h"\r
+ #include "parport.h"\r
\r
+ cable::cable()\r
+@@ -587,6 +588,9 @@
+     if (stricmp(argv[0], "dusb") == 0)\r
+         cbl = new digilent;\r
+     else\r
++    if (stricmp(argv[0], "ousb") ==0)\r
++      cbl = new onbusb;\r
++    else\r
+     {\r
+         msgf(STR_INVALID_CABLE_DEF);\r
+         return NULL;\r
+diff -Nur xilprg-0.5/src/onbusb.cpp xilprg-new/src/onbusb.cpp
+--- xilprg-0.5/src/onbusb.cpp  1970-01-01 01:00:00.000000000 +0100
++++ xilprg-new/src/onbusb.cpp  2007-04-07 17:15:34.000000000 +0200
+@@ -0,0 +1,113 @@
++/*\r
++ * onboard usb\r
++ *\r
++ * author: till & frank zirkelbach\r
++ *\r
++ */\r
++\r
++#include "xilprg.h"\r
++#include "utils.h"\r
++#include "onbusb.h"\r
++\r
++onbusb::onbusb()\r
++{\r
++   handle=NULL;\r
++}\r
++\r
++onbusb::~onbusb()\r
++{\r
++}\r
++\r
++int onbusb::open()\r
++{\r
++   \r
++    struct usb_bus *bus; \r
++\r
++    usb_init();\r
++    usb_find_busses();\r
++    usb_find_devices();\r
++\r
++    bus=usb_get_busses();\r
++    while(bus) {\r
++      dev=bus->devices;\r
++      while(dev) {\r
++              if(dev->descriptor.idVendor==USB_VENDOR_ID &&\r
++                 dev->descriptor.idProduct==USB_PRODUCT_ID)\r
++                      /* found the device */\r
++                      return 0;\r
++              dev=dev->next;\r
++      }\r
++      bus=bus->next;\r
++    }\r
++\r
++    return -1;\r
++\r
++    handle=usb_open(dev);\r
++    if(handle==NULL)\r
++      goto cleanup;\r
++\r
++    if(usb_set_configuration(handle,1)<0)\r
++      goto cleanup;\r
++\r
++    if(usb_claim_interface(handle,0)<0)\r
++      goto cleanup;\r
++\r
++    if(usb_set_altinterface(handle,1)<0)\r
++      goto cleanup;\r
++\r
++    data = 0x10;\r
++\r
++    reset_tap_state();\r
++\r
++    return 0;\r
++\r
++cleanup:\r
++\r
++    close();\r
++\r
++    return 1;\r
++\r
++}\r
++\r
++int onbusb::close()\r
++{\r
++\r
++    usb_close(handle);\r
++\r
++    return 0;\r
++}\r
++\r
++int onbusb::get_description(string& desc)\r
++{\r
++    char s[256];\r
++    sprintf(s, "onboard usb bitbanging");\r
++    desc = s;\r
++    return 0;\r
++}\r
++\r
++void onbusb::set_tdi(int bit)\r
++{\r
++    if (bit) data |= 0x04; else data &= ~0x04;\r
++    data|=0xa0;\r
++    usb_bulk_write(handle,0x01,&data,1,0);\r
++}\r
++\r
++void onbusb::set_tck(int bit)\r
++{\r
++    if (bit) data |= 0x10; else data &= ~0x10;\r
++    data|=0xa0;\r
++    usb_bulk_write(handle,0x01,&data,1,0);\r
++}\r
++\r
++void onbusb::set_tms(int bit)\r
++{\r
++    if (bit) data |= 0x08; else data &= ~0x08;\r
++    data|=0xa0;\r
++    usb_bulk_write(handle,0x01,&data,1,0);\r
++}\r
++\r
++int onbusb::get_tdo()\r
++{\r
++    usb_bulk_read(handle,0x81,&data,1,0);\r
++    return data & 0x01 ? 1 : 0;\r
++}\r
+diff -Nur xilprg-0.5/src/onbusb.h xilprg-new/src/onbusb.h
+--- xilprg-0.5/src/onbusb.h    1970-01-01 01:00:00.000000000 +0100
++++ xilprg-new/src/onbusb.h    2007-04-07 17:14:07.000000000 +0200
+@@ -0,0 +1,43 @@
++/*\r
++ * onboard usb\r
++ *\r
++ * author: till & frank zirkelbach\r
++ *\r
++ */\r
++\r
++#ifndef _ONBUSB_H_INCLUDED_\r
++#define _ONBUSB_H_INCLUDED_\r
++\r
++#include "cable.h"\r
++\r
++#include <usb.h>\r
++\r
++class onbusb : public cable\r
++{\r
++public:\r
++      onbusb();\r
++      virtual ~onbusb();\r
++\r
++    enum\r
++    {\r
++      USB_VENDOR_ID   = 0x04b4,\r
++      USB_PRODUCT_ID  = 0x8613\r
++    };\r
++\r
++    virtual int open();\r
++    virtual int close();\r
++\r
++    virtual int get_description(string&);\r
++\r
++    virtual void set_tdi(int);\r
++    virtual void set_tck(int);\r
++    virtual void set_tms(int);\r
++    virtual int get_tdo();\r
++\r
++protected:\r
++    char data;\r
++    struct usb_device *dev;\r
++    usb_dev_handle *handle;\r
++};\r
++\r
++#endif\r
+diff -Nur xilprg-0.5/src/strtable.cpp xilprg-new/src/strtable.cpp
+--- xilprg-0.5/src/strtable.cpp        2006-08-23 07:38:34.000000000 +0200
++++ xilprg-new/src/strtable.cpp        2007-04-07 16:56:25.000000000 +0200
+@@ -137,7 +137,7 @@
+     //STR_CMD_CABLE\r
+     "cable\0" \r
+     "Sets programmer cable\0"\r
+-    "cable {xil3 [ioaddr]|dusb}\0",\r
++    "cable {xil3 [ioaddr]|dusb|ousb}\0",\r
+     //STR_CMD_CHIPS\r
+     "chips\0"\r
+     "Prints supported devices\0" \r