Hi folks, we program a usb driver (2.4.20 kernel) for our usb (1.1 & 2.0) devices. The io should be done asynchronously, which works fine for transfers smaller than 128kB. The driver copies the data into a buffer allocated by kmalloc and creates a (bulk) urb pointing to that buffer (and then returns to the user program) But problems occur when the transfer size exceeds 128kB because kmalloc can not allocate a buffer bigger than 128kB. vmalloc doesn't do the job neither because the hcd driver complains when it gets a buffer allocated by vmalloc.
Our prefered way would be to directly pass the user space pointer down with the urb without copying the data but the hcd doesn't like it this way. I know that there still remains the kiobuf interface but kiobuf does not support async transfers and we achieved a big performance boost (under windows) by getting rid of user io threads and do asynchrounous io (what is called overlapped io in the windows world). How is it done under Linux?? Is there some way to make user space or vmalloc allocated buffers valid for usb transfers?? Or must I create more than one urb, copy the data to kmalloc buffers and then link all the urbs?? Or do you think that kiobuf with a user thread is the best (= fastest io) way to achieve it?? Or is there any way to create a big kernel buffer at driver load and then make this space visible to the user program?? I hope I am not the first one encountering this problem and I hope that some one can give me a hint or a link to a page discussing that problem. Thanx for reading that far :) Jan Hegner ------------------------------------------------------- This SF.net email is sponsored by: ValueWeb: Dedicated Hosting for just $79/mo with 500 GB of bandwidth! No other company gives more support or power for your dedicated server http://click.atdmt.com/AFF/go/sdnxxaff00300020aff/direct/01/ _______________________________________________ [EMAIL PROTECTED] To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel
