Bulk transfers using USB bus driver

Hi,

I have a vendor-specific USB host driver on Windows XP which does some
vendor-specific operations on a USB device. My host driver makes use of the
bulk pipe to read some vendor-specific information. This functionality
works fine on desktop PCs running Windows XP. But if i make use of the same
host driver on laptops or notebook PCs with almost similar system
configuration as that of the desktop PCs then i get blue screen with
BUGCODE_USB_DRIVER. Basically, for bulk transfers i submit
_URB_BULK_OR_INTERRUPT_TRANSFER to the USB bus driver with
TransferBufferLength of around 2MB. This works perfectly alright on desktop
PCs but on laptops or notebook PCs if i submit more than 256KB of data then
the system shows BSOD. Anything less than or equal to 256KB works fine on
laptops/notebook PCs.

Is there any restriction on the maximum size for the buffer that can be
sumbitted for bulk transfers? Any ideas on this will be highly appreciated.

Regards,
Hari.


STOP MORE SPAM with the new MSN 8 and get 2 months FREE*
http://join.msn.com/?page=features/junkmail

The USBD_PIPE_INFORMATION structure for your pipe will contain a
MaximumTransferSize member. You shouldn’t exceed that in any transfer. You
also probably shouldn’t change it unless since performance gains with a
higher number will be small compared to overall system degradation due to
latency (and other?) problems. Instead, break up large requests into
MaximumTransferSize pieces and submit them.

Marc Reinig
System Solutions

“Hariharan Krishnamurthy” wrote in message
news:xxxxx@ntdev…
>
> Hi,
>
> I have a vendor-specific USB host driver on Windows XP which does some
> vendor-specific operations on a USB device. My host driver makes use of
the
> bulk pipe to read some vendor-specific information. This functionality
> works fine on desktop PCs running Windows XP. But if i make use of the
same
> host driver on laptops or notebook PCs with almost similar system
> configuration as that of the desktop PCs then i get blue screen with
> BUGCODE_USB_DRIVER. Basically, for bulk transfers i submit
> _URB_BULK_OR_INTERRUPT_TRANSFER to the USB bus driver with
> TransferBufferLength of around 2MB. This works perfectly alright on
desktop
> PCs but on laptops or notebook PCs if i submit more than 256KB of data
then
> the system shows BSOD. Anything less than or equal to 256KB works fine on
> laptops/notebook PCs.
>
> Is there any restriction on the maximum size for the buffer that can be
> sumbitted for bulk transfers? Any ideas on this will be highly
appreciated.
>
> Regards,
> Hari.
>
> _________________________________________________________________
> STOP MORE SPAM with the new MSN 8 and get 2 months FREE*
> http://join.msn.com/?page=features/junkmail
>
>
>
>

Hi Marc,

Thanks for the reply. Yes, MaximumTransferSize (represented in bytes)
member can be used but the value is just 4K. I deliberately avoided using
this field earlier because i would have to do bulk transfers of around 1/2
MB in the worst case. Does this mean that i have to submit buffers nearly
256 times if i have to transfer around 1MB of bulk data? Isnt there a
better way to circumvent this problem?

Any suggestions will be really helpful.

Thanks & Regards,
Hari.

The USBD_PIPE_INFORMATION structure for your pipe will contain a
MaximumTransferSize member. You shouldn’t exceed that in any transfer.
You
also probably shouldn’t change it unless since performance gains with a
higher number will be small compared to overall system degradation due to
latency (and other?) problems. Instead, break up large requests into
MaximumTransferSize pieces and submit them.

Marc Reinig
System Solutions

“Hariharan Krishnamurthy” wrote in message
>news:xxxxx@ntdev…
> >
> > Hi,
> >
> > I have a vendor-specific USB host driver on Windows XP which does some
> > vendor-specific operations on a USB device. My host driver makes use of
>the
> > bulk pipe to read some vendor-specific information. This functionality
> > works fine on desktop PCs running Windows XP. But if i make use of the
>same
> > host driver on laptops or notebook PCs with almost similar system
> > configuration as that of the desktop PCs then i get blue screen with
> > BUGCODE_USB_DRIVER. Basically, for bulk transfers i submit
> > _URB_BULK_OR_INTERRUPT_TRANSFER to the USB bus driver with
> > TransferBufferLength of around 2MB. This works perfectly alright on
>desktop
> > PCs but on laptops or notebook PCs if i submit more than 256KB of data
>then
> > the system shows BSOD. Anything less than or equal to 256KB works fine
>on
> > laptops/notebook PCs.
> >
> > Is there any restriction on the maximum size for the buffer that can be
> > sumbitted for bulk transfers? Any ideas on this will be highly
>appreciated.
> >
> > Regards,
> > Hari.
> >
> >
> > STOP MORE SPAM with the new MSN 8 and get 2 months FREE*
> > http://join.msn.com/?page=features/junkmail
> >
> >
> >
> >
>
>
>
>—
>You are currently subscribed to ntdev as: xxxxx@hotmail.com
>To unsubscribe send a blank email to xxxxx@lists.osr.com


MSN 8 with e-mail virus protection service: 2 months FREE*
http://join.msn.com/?page=features/virus

I don’t know what the problem to circumvent is. That’s the way I do it.

Marc Reinig
System Solutions

“Hariharan Krishnamurthy” wrote in message
news:xxxxx@ntdev…
>
> Hi Marc,
>
> Thanks for the reply. Yes, MaximumTransferSize (represented in bytes)
> member can be used but the value is just 4K. I deliberately avoided using
> this field earlier because i would have to do bulk transfers of around 1/2
> MB in the worst case. Does this mean that i have to submit buffers nearly
> 256 times if i have to transfer around 1MB of bulk data? Isnt there a
> better way to circumvent this problem?
>
> Any suggestions will be really helpful.
>
> Thanks & Regards,
> Hari.
>
> >The USBD_PIPE_INFORMATION structure for your pipe will contain a
> >MaximumTransferSize member. You shouldn’t exceed that in any transfer.
> >You
> >also probably shouldn’t change it unless since performance gains with a
> >higher number will be small compared to overall system degradation due to
> >latency (and other?) problems. Instead, break up large requests into
> >MaximumTransferSize pieces and submit them.
> >
> >Marc Reinig
> >System Solutions
> >
> >
> >
> >“Hariharan Krishnamurthy” wrote in message
> >news:xxxxx@ntdev…
> > >
> > > Hi,
> > >
> > > I have a vendor-specific USB host driver on Windows XP which does some
> > > vendor-specific operations on a USB device. My host driver makes use
of
> >the
> > > bulk pipe to read some vendor-specific information. This
functionality
> > > works fine on desktop PCs running Windows XP. But if i make use of
the
> >same
> > > host driver on laptops or notebook PCs with almost similar system
> > > configuration as that of the desktop PCs then i get blue screen with
> > > BUGCODE_USB_DRIVER. Basically, for bulk transfers i submit
> > > _URB_BULK_OR_INTERRUPT_TRANSFER to the USB bus driver with
> > > TransferBufferLength of around 2MB. This works perfectly alright on
> >desktop
> > > PCs but on laptops or notebook PCs if i submit more than 256KB of data
> >then
> > > the system shows BSOD. Anything less than or equal to 256KB works
fine
> >on
> > > laptops/notebook PCs.
> > >
> > > Is there any restriction on the maximum size for the buffer that can
be
> > > sumbitted for bulk transfers? Any ideas on this will be highly
> >appreciated.
> > >
> > > Regards,
> > > Hari.
> > >
> > >
> > > STOP MORE SPAM with the new MSN 8 and get 2 months FREE*
> > > http://join.msn.com/?page=features/junkmail
> > >
> > >
> > >
> > >
> >
> >
> >
> >—
> >You are currently subscribed to ntdev as: xxxxx@hotmail.com
> >To unsubscribe send a blank email to xxxxx@lists.osr.com
>
>
>

> MSN 8 with e-mail virus protection service: 2 months FREE*
> http://join.msn.com/?page=features/virus
>
>
>
>

In tests I did about three years ago on Win2K, I found that I could
set MaximumTransferSize as high as 2 MB and still function just fine. I’m
actually running with 4 KB, though, as that is plenty to keep the endpoints
in my device adequately serviced.
This variable is a puzzling one because of its lack of
documentation. From the name, it would appear to be a restriction on the
driver set by the USB stack, but it’s actually an input from the driver
according to the USBDI.H declaration. My guess is that USBD uses the value
to allocate a nonpaged buffer and that the true limit is simply where
ExAllocatePool(NPP) would fail to get the desired block of memory. I can’t
say that I care enough about it to spend the time digging in the kernel to
find out for sure, though :-).

Best Regards,
Chris Myers
Senior Project Engineer
Quatech, Inc.
xxxxx@quatech.com

-----Original Message-----
From: Marc Reinig [mailto:xxxxx@nospam.com]
Sent: Tuesday, February 25, 2003 11:36 PM
To: NT Developers Interest List
Subject: [ntdev] Re: Bulk transfers using USB bus driver

I don’t know what the problem to circumvent is. That’s the
way I do it.

Marc Reinig
System Solutions

“Hariharan Krishnamurthy” wrote in
>message news:xxxxx@ntdev…
>>
>> Hi Marc,
>>
>> Thanks for the reply. Yes, MaximumTransferSize (represented
>in bytes)
>> member can be used but the value is just 4K. I deliberately avoided
>> using this field earlier because i would have to do bulk
>transfers of
>> around 1/2 MB in the worst case. Does this mean that i have
>to submit
>> buffers nearly 256 times if i have to transfer around 1MB of bulk
>> data? Isnt there a better way to circumvent this problem?
>>
>> Any suggestions will be really helpful.
>>
>> Thanks & Regards,
>> Hari.
>>
>> >The USBD_PIPE_INFORMATION structure for your pipe will contain a
>> >MaximumTransferSize member. You shouldn’t exceed that in any
>> >transfer. You also probably shouldn’t change it unless since
>> >performance gains with a higher number will be small compared to
>> >overall system degradation due to latency (and other?) problems.
>> >Instead, break up large requests into MaximumTransferSize
>pieces and
>> >submit them.
>> >
>> >Marc Reinig
>> >System Solutions
>> >
>> >
>> >
>> >“Hariharan Krishnamurthy” wrote in message
>> >news:xxxxx@ntdev…
>> > >
>> > > Hi,
>> > >
>> > > I have a vendor-specific USB host driver on Windows XP
>which does
>> > > some vendor-specific operations on a USB device. My host driver
>> > > makes use
>of
>> >the
>> > > bulk pipe to read some vendor-specific information. This
>functionality
>> > > works fine on desktop PCs running Windows XP. But if i make use
>> > > of
>the
>> >same
>> > > host driver on laptops or notebook PCs with almost
>similar system
>> > > configuration as that of the desktop PCs then i get blue screen
>> > > with BUGCODE_USB_DRIVER. Basically, for bulk transfers i submit
>> > > _URB_BULK_OR_INTERRUPT_TRANSFER to the USB bus driver with
>> > > TransferBufferLength of around 2MB. This works
>perfectly alright
>> > > on
>> >desktop
>> > > PCs but on laptops or notebook PCs if i submit more than
>256KB of
>> > > data
>> >then
>> > > the system shows BSOD. Anything less than or equal to
>256KB works
>fine
>> >on
>> > > laptops/notebook PCs.
>> > >
>> > > Is there any restriction on the maximum size for the buffer that
>> > > can
>be
>> > > sumbitted for bulk transfers? Any ideas on this will be highly
>> >appreciated.
>> > >
>> > > Regards,
>> > > Hari.
>> > >
>> > >
>> > > STOP MORE SPAM with the new MSN 8 and get 2 months FREE*
>> > > http://join.msn.com/?page=features/junkmail
>> > >
>> > >
>> > >
>> > >
>> >
>> >
>> >
>> >—
>> >You are currently subscribed to ntdev as: xxxxx@hotmail.com To
>> >unsubscribe send a blank email to xxxxx@lists.osr.com
>>
>>
>>

>> MSN 8 with e-mail virus protection service: 2 months FREE*
>> http://join.msn.com/?page=features/virus
>>
>>
>>
>>
>
>
>
>—
>You are currently subscribed to ntdev as:
>xxxxx@quatech.com To unsubscribe send a blank email to
>xxxxx@lists.osr.com
>

According to the owner of the usb core stack. MaximumTransferSize is pretty much ignored on XP (and he is pretty sure about win2k as well). The purpose of MTS was for the port driver to preallocate TDs for incoming endpoint transfers.

D

This posting is provided “AS IS” with no warranties, and confers no rights

-----Original Message-----
From: Chris Myers [mailto:xxxxx@quatech.com]
Sent: Wednesday, February 26, 2003 5:19 AM
To: NT Developers Interest List
Subject: [ntdev] Re: Bulk transfers using USB bus driver

??? In tests I did about three years ago on Win2K, I found that I could set MaximumTransferSize as high as 2 MB and still function just fine.? I’m actually running with 4 KB, though, as that is plenty to keep the endpoints in my device adequately serviced.
??? This variable is a puzzling one because of its lack of documentation.? From the name, it would appear to be a restriction on the driver set by the USB stack, but it’s actually an input from the driver according to the USBDI.H declaration.? My guess is that USBD uses the value to allocate a nonpaged buffer and that the true limit is simply where ExAllocatePool(NPP) would fail to get the desired block of memory.? I can’t say that I care enough about it to spend the time digging in the kernel to find out for sure, though :-).
Best Regards,
Chris Myers
Senior Project Engineer
Quatech, Inc.
xxxxx@quatech.com

-----Original Message-----
From: Marc Reinig [mailto:xxxxx@nospam.com]
Sent: Tuesday, February 25, 2003 11:36 PM
To: NT Developers Interest List
Subject: [ntdev] Re: Bulk transfers using USB bus driver

I don’t know what the problem to circumvent is.? That’s the
way I do it.

Marc Reinig
System Solutions

“Hariharan Krishnamurthy” wrote in
>message news:xxxxx@ntdev…
>>
>> Hi Marc,
>>
>> Thanks for the reply.? Yes, MaximumTransferSize (represented
>in bytes)
>> member can be used but the value is just 4K.? I deliberately avoided
>> using this field earlier because i would have to do bulk
>transfers of
>> around 1/2 MB in the worst case.? Does this mean that i have
>to submit
>> buffers nearly 256 times if i have to transfer around 1MB of bulk
>> data?? Isnt there a better way to circumvent this problem?
>>
>> Any suggestions will be really helpful.
>>
>> Thanks & Regards,
>> Hari.
>>
>> >The USBD_PIPE_INFORMATION structure for your pipe will contain a
>> >MaximumTransferSize member.? You shouldn’t exceed that in any
>> >transfer. You also probably shouldn’t change it unless since
>> >performance gains with a higher number will be small compared to
>> >overall system degradation due to latency (and other?)? problems.?
>> >Instead, break up large requests into MaximumTransferSize
>pieces and
>> >submit them.
>> >
>> >Marc Reinig
>> >System Solutions
>> >
>> >
>> >
>> >“Hariharan Krishnamurthy” wrote in message
>> >news:xxxxx@ntdev…
>> > >
>> > > Hi,
>> > >
>> > > I have a vendor-specific USB host driver on Windows XP
>which does
>> > > some vendor-specific operations on a USB device.? My host driver
>> > > makes use
>of
>> >the
>> > > bulk pipe to read some vendor-specific information.? This
>functionality
>> > > works fine on desktop PCs running Windows XP.? But if i make use
>> > > of
>the
>> >same
>> > > host driver on laptops or notebook PCs with almost
>similar system
>> > > configuration as that of the desktop PCs then i get blue screen
>> > > with BUGCODE_USB_DRIVER.? Basically, for bulk transfers i submit
>> > > _URB_BULK_OR_INTERRUPT_TRANSFER to the USB bus driver with
>> > > TransferBufferLength of around 2MB.? This works
>perfectly alright
>> > > on
>> >desktop
>> > > PCs but on laptops or notebook PCs if i submit more than
>256KB of
>> > > data
>> >then
>> > > the system shows BSOD.? Anything less than or equal to
>256KB works
>fine
>> >on
>> > > laptops/notebook PCs.
>> > >
>> > > Is there any restriction on the maximum size for the buffer that
>> > > can
>be
>> > > sumbitted for bulk transfers?? Any ideas on this will be highly
>> >appreciated.
>> > >
>> > > Regards,
>> > > Hari.
>> > >
>> > >
>> > > STOP MORE SPAM with the new MSN 8 and get 2 months FREE*
>> > > http://join.msn.com/?page=features/junkmail
>> > >
>> > >
>> > >
>> > >
>> >
>> >
>> >
>> >—
>> >You are currently subscribed to ntdev as: xxxxx@hotmail.com To
>> >unsubscribe send a blank email to xxxxx@lists.osr.com
>>
>>
>>

>> MSN 8 with e-mail virus protection service: 2 months FREE*
>> http://join.msn.com/?page=features/virus
>>
>>
>>
>>
>
>
>
>—
>You are currently subscribed to ntdev as:
>xxxxx@quatech.com To unsubscribe send a blank email to
>xxxxx@lists.osr.com
>

You are currently subscribed to ntdev as: xxxxx@windows.microsoft.com
To unsubscribe send a blank email to xxxxx@lists.osr.com

Doron Holan wrote:

According to the owner of the usb core stack. MaximumTransferSize is pretty much ignored on XP (and he is pretty sure about win2k as well). The purpose of MTS was for the port driver to preallocate TDs for incoming endpoint transfers.

It’s not exactly ignored on 2K, in that trying to submit a URB with a
larger transfer size earns you a STATUS_INVALID_PARAMETER failure.


Walter Oney, Consulting and Training
Basic and Advanced Driver Programming Seminars
Now teaming with John Hyde for USB Device Engineering Seminars
Check out our schedule at http://www.oneysoft.com

But on Windows XP, if the driver submits a URB with a larger transfer size
then no STATUS_INVALID_PARAMETER error code is returned. Instead BSOD
happens with BUGCODE_USB_DRIVER. On debugging i find that there was an
access violation in usbccgp.sys

Regards,
Hari.

> According to the owner of the usb core stack. MaximumTransferSize is
pretty much ignored on XP (and he is pretty sure about win2k as well). The
purpose of MTS was for the port driver to preallocate TDs for incoming
endpoint transfers.

It’s not exactly ignored on 2K, in that trying to submit a URB with a
larger transfer size earns you a STATUS_INVALID_PARAMETER failure.


Walter Oney, Consulting and Training
Basic and Advanced Driver Programming Seminars
Now teaming with John Hyde for USB Device Engineering Seminars
Check out our schedule at http://www.oneysoft.com


You are currently subscribed to ntdev as: xxxxx@hotmail.com
To unsubscribe send a blank email to xxxxx@lists.osr.com


If you can send the call stack when the bugcheck occurs (pls make sure
that the symbols are correct), I can try to give you an answer. I
looked through the XP version of usbccgp and it does not check the
MaximumTransferSize outside of select config or select interface so I
need to know more about where the problem is occurring

D

This posting is provided “AS IS” with no warranties, and confers no
rights

-----Original Message-----
From: Hariharan Krishnamurthy [mailto:xxxxx@hotmail.com]
Sent: Thursday, February 27, 2003 5:09 PM
To: NT Developers Interest List
Subject: [ntdev] Re: Bulk transfers using USB bus driver

But on Windows XP, if the driver submits a URB with a larger transfer
size
then no STATUS_INVALID_PARAMETER error code is returned. Instead BSOD
happens with BUGCODE_USB_DRIVER. On debugging i find that there was an
access violation in usbccgp.sys

Regards,
Hari.

> According to the owner of the usb core stack. MaximumTransferSize is

pretty much ignored on XP (and he is pretty sure about win2k as well).
The
purpose of MTS was for the port driver to preallocate TDs for incoming
endpoint transfers.

It’s not exactly ignored on 2K, in that trying to submit a URB with a
larger transfer size earns you a STATUS_INVALID_PARAMETER failure.


Walter Oney, Consulting and Training
Basic and Advanced Driver Programming Seminars
Now teaming with John Hyde for USB Device Engineering Seminars
Check out our schedule at http://www.oneysoft.com


You are currently subscribed to ntdev as: xxxxx@hotmail.com
To unsubscribe send a blank email to xxxxx@lists.osr.com



You are currently subscribed to ntdev as: xxxxx@windows.microsoft.com
To unsubscribe send a blank email to xxxxx@lists.osr.com