Yes, there are two fields in struct request_queue for this:
max_phys_segments (the driver's limit) and max_hw_segments (the
hardware's limit).
Standard EHCI hardware requires that the memory locations of the data
for each packet be "virtually contiguous", i.e., discontiguities are
allowed only at 4-KB page boundaries. This severely limits the ability
to handle general S-G lists. For example, a 1024-byte packet can't be
broken up into two 512-byte pieces unless the first piece ends at a
page boundary and the second piece begins at a page boundary. Maybe
HWA host controllers are required to be more flexible, I don't know.
This may mean that your suggested approach won't work.
Alan Stern
--