X-Git-Url: http://git.zerfleddert.de/cgi-bin/gitweb.cgi/usb-driver/blobdiff_plain/d377df04c9ee2d7e7fb94168b5e0a3df5e3152f5..77683ab696f183c63e8695063c8107d26809ed99:/usb-driver.c diff --git a/usb-driver.c b/usb-driver.c index 1fcfae1..929c101 100644 --- a/usb-driver.c +++ b/usb-driver.c @@ -466,9 +466,8 @@ int do_wdioctl(int fd, unsigned int request, unsigned char *wdioctl) { { struct event *e = (struct event*)(wdheader->data); struct usb_bus *bus; - char* device_num; - char* remainder; - int devnum = -1; + char* devpos; + int busnum = -1, devnum = -1; int i; DPRINTF("handle: %lu, action: %lu, status: %lu, eventid: %lu, cardtype: %lu, kplug: %lu, options: %lu, dev: %lx:%lx, unique: %lu, ver: %lu, nummatch: %lu\n", @@ -480,14 +479,36 @@ int do_wdioctl(int fd, unsigned int request, unsigned char *wdioctl) { e->u.Usb.dwUniqueID, e->dwEventVer, e->dwNumMatchTables); - device_num=getenv("XILINX_USB_DEVNUM"); - if (device_num!=NULL) { - DPRINTF("XILINX_USB_BUS=%s\n",device_num); - devnum=strtol(device_num,&remainder,10); - if (device_num==remainder) /* no integer in env variable */ - devnum=-1; - } + devpos = getenv("XILINX_USB_DEV"); + if (devpos != NULL) { + int j; + char *devstr = NULL, *remainder; + + DPRINTF("XILINX_USB_DEV=%s\n", devpos); + for (j = 0; j < strlen(devpos) && devpos[j] != 0; j++) { + if (devpos[j] == ':') { + devpos[j] = 0; + devstr = &(devpos[j+1]); + } + } + + if (devstr && strlen(devstr) > 0) { + busnum = strtol(devpos, &remainder, 10); + if (devpos == remainder) { + busnum = -1; + } else { + devnum = strtol(devstr, &remainder, 10); + if (devstr == remainder) { + busnum = -1; + devnum = -1; + } else { + fprintf(stderr,"Using XILINX platform cable USB at %03d:%03d\n", + busnum, devnum); + } + } + } + } for (i = 0; i < e->dwNumMatchTables; i++) { @@ -503,6 +524,9 @@ int do_wdioctl(int fd, unsigned int request, unsigned char *wdioctl) { for (bus = busses; bus; bus = bus->next) { struct usb_device *dev; + if ((devnum != -1) && (strtol(bus->dirname, NULL, 10) != busnum)) + continue; + for (dev = bus->devices; dev; dev = dev->next) { struct usb_device_descriptor *desc = &(dev->descriptor);