2006/7/11, Luiz Fernando N. Capitulino <[EMAIL PROTECTED]>: > On Mon, 10 Jul 2006 14:51:40 -0300 > Naranjo Manuel Francisco <[EMAIL PROTECTED]> wrote: > > | Here is a brief description of the device to see how the driver works: > | The device works as an standard CDC device, it has 2 interfaces, the first > one is > | for firmware access and the second is the serial one. > | The device simply need some stuff to understand data comming from the usb > buffer: > | The First and Second byte is used for a Header, the Third and Fourth tells > the > | device the amount of information the package holds. > | Packages are 60 bytes long + Header Stuff. > | I have reached a top of 300 bytes per transfer, which I think is being > limited by > | the hardware itself, I do not think it is actually a driver matter any more. > | > | The driver registers himself with the USB-serial core and the USB Core. > | I had to implement a probe function agains USB-serial, because other way, > the > | driver was attaching himself to both interfaces. I have tryed with different > | configurations of usb_serial_driver with out exit, only the probe function > could > | handle this correctly. > > Maybe, would be good to have this in the top of the file. Do you mean in the header of the source? That's no problem > > | +static int aircable_write(struct usb_serial_port *port, > | + const unsigned char *source, int > count) > | +{ > > [...] > > | + > | + port->write_urb_busy = 1; > > Shouldn't you protect this with the spinlock? You mean making an spinlock before changing the value, and a spinunlock after changing the value?
> > | +static void aircable_write_bulk_callback (struct urb *urb, struct pt_regs > *regs) > | +{ > | + struct usb_serial_port *port = (struct usb_serial_port *)urb->context; > | + > | + /* free up the transfer buffer, as usb_free_urb() does not do this */ > | + kfree(urb->transfer_buffer); > | + > | + dbg("%s - port %d", __FUNCTION__, port->number); > | + > | + port->write_urb_busy = 1; > > What about this one? > > I think there are others.. > > | +static void aircable_read_bulk_callback(struct urb *urb, struct pt_regs > *regs) > | +{ > | + struct usb_serial_port *port = (struct usb_serial_port *)urb->context; > | + struct usb_serial *serial = port->serial; > | + struct tty_struct *tty; > | + unsigned char *data; > | + unsigned long no_packages; > | + unsigned long remaining, package_length; > | + unsigned long i; > | + int result; > | + > | + dbg("%s - port %d", __FUNCTION__, port->number); > | + > | + if (urb->status) { > | + dbg("%s - nonzero read bulk status received: %d", > __FUNCTION__, > | + urb->status); > | + return; > | + } > > Some other drivers does this, but personally I dislike it. > > IMO, you can ignore (ie, report with dbg()) -ECONNRESET, -ENOENT > and -ESHUTDOWN. But all the others should be reported with err(). > I can't get your point, do you mean in other parts of my code, or for other opportunities? ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ linux-usb-devel@lists.sourceforge.net To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel