TEXT   123

uftdi patch

Guest on 26th May 2022 03:02:33 PM

  1. Index: sys/dev/usb/uftdi.c
  2. ===================================================================
  3. RCS file: /cvsroot/src/sys/dev/usb/uftdi.c,v
  4. retrieving revision 1.51
  5. diff -p -u -r1.51 uftdi.c
  6. --- sys/dev/usb/uftdi.c 11 Feb  05:27:55 -0000  1.51
  7. +++ sys/dev/usb/uftdi.c 11 Aug   06:38:28 -0000
  8. @@ -49,6 +49,7 @@ __KERNEL_RCSID(0, "$NetBSD: uftdi.c,v 1.
  9.  
  10.  #include <dev/usb/uftdireg.h>
  11.  
  12. +#define UFTDI_DEBUG 1
  13.  #ifdef UFTDI_DEBUG
  14.  #define DPRINTF(x)     if (uftdidebug) printf x
  15.  #define DPRINTFN(n,x)  if (uftdidebug>(n)) printf x
  16. @@ -69,6 +70,9 @@ int uftdidebug = 0;
  17.  #define UFTDIIBUFSIZE 64
  18.  #define UFTDIOBUFSIZE 64
  19.  
  20. +#define        UFTDI_MAX_IBUFSIZE      512
  21. +#define        UFTDI_MAX_OBUFSIZE      256
  22. +
  23.  struct uftdi_softc {
  24.         device_t                sc_dev;         /* base device */
  25.         usbd_device_handle      sc_udev;        /* device */
  26. @@ -254,6 +258,7 @@ uftdi_attach(device_t parent, device_t s
  27.                 sc->sc_iface[idx] = iface;
  28.  
  29.                 uca.bulkin = uca.bulkout = -1;
  30. +               uca.ibufsize = uca.obufsize = 0;
  31.                 for (i = 0; i < id->bNumEndpoints; i++) {
  32.                         int addr, dir, attr;
  33.                         ed = usbd_interface2endpoint_descriptor(iface, i);
  34. @@ -267,11 +272,24 @@ uftdi_attach(device_t parent, device_t s
  35.                         addr = ed->bEndpointAddress;
  36.                         dir = UE_GET_DIR(ed->bEndpointAddress);
  37.                         attr = ed->bmAttributes & UE_XFERTYPE;
  38. -                       if (dir == UE_DIR_IN && attr == UE_BULK)
  39. +                       DPRINTF(("uftdi: wMaxPacketSize=%x\n",
  40. +                               (unsigned)UGETW(ed->wMaxPacketSize)));
  41. +                       if (dir == UE_DIR_IN && attr == UE_BULK) {
  42.                                 uca.bulkin = addr;
  43. -                       else if (dir == UE_DIR_OUT && attr == UE_BULK)
  44. +                               uca.ibufsize = UGETW(ed->wMaxPacketSize);
  45. +                               if (uca.ibufsize >= UFTDI_MAX_IBUFSIZE)
  46. +                                       uca.ibufsize = UFTDI_MAX_IBUFSIZE;
  47. +                       } else if (dir == UE_DIR_OUT && attr == UE_BULK) {
  48.                                 uca.bulkout = addr;
  49. -                       else {
  50. +                               uca.obufsize = UGETW(ed->wMaxPacketSize)
  51. +                                   - sc->sc_hdrlen;
  52. +                               if (uca.obufsize >= UFTDI_MAX_OBUFSIZE)
  53. +                                       uca.obufsize = UFTDI_MAX_OBUFSIZE;
  54. +                               /* Limit length if we have a 6-bit header.  */
  55. +                               if ((sc->sc_hdrlen > 0) &&
  56. +                                   (uca.obufsize > UFTDIOBUFSIZE))
  57. +                                       uca.obufsize = UFTDIOBUFSIZE;
  58. +                       } else {
  59.                                 aprint_error_dev(self,
  60.                                     "unexpected endpoint\n");
  61.                                 goto bad;
  62. @@ -290,9 +308,11 @@ uftdi_attach(device_t parent, device_t s
  63.  
  64.                 uca.portno = FTDI_PIT_SIOA + idx;
  65.                 /* bulkin, bulkout set above */
  66. -               uca.ibufsize = UFTDIIBUFSIZE;
  67. -               uca.obufsize = UFTDIOBUFSIZE - sc->sc_hdrlen;
  68. -               uca.ibufsizepad = UFTDIIBUFSIZE;
  69. +               if (uca.ibufsize == 0)
  70. +                       uca.ibufsize = UFTDIIBUFSIZE;
  71. +               uca.ibufsizepad = uca.ibufsize;
  72. +               if (uca.obufsize == 0)
  73. +                       uca.obufsize = UFTDIOBUFSIZE - sc->sc_hdrlen;
  74.                 uca.opkthdrlen = sc->sc_hdrlen;
  75.                 uca.device = dev;
  76.                 uca.iface = iface;
  77. @@ -300,7 +320,9 @@ uftdi_attach(device_t parent, device_t s
  78.                 uca.arg = sc;
  79.                 uca.info = NULL;
  80.  
  81. -               DPRINTF(("uftdi: in=0x%x out=0x%x\n", uca.bulkin, uca.bulkout));
  82. +               DPRINTF(("uftdi: in=0x%x out=0x%x isize=0x%x osize=0x%x\n",
  83. +                       uca.bulkin, uca.bulkout,
  84. +                       uca.ibufsize, uca.obufsize));
  85.                 sc->sc_subdev[idx] = config_found_sm_loc(self, "ucombus", NULL,
  86.                     &uca, ucomprint, ucomsubmatch);
  87.         }

Raw Paste


Login or Register to edit or fork this paste. It's free.