History log of /haiku/src/add-ons/kernel/bus_managers/usb/Transfer.cpp
Revision Date Author Comments
# 55a46882 30-May-2023 Augustin Cavalier <waddlesplash@gmail.com>

USB: Support physical-vector bulk requests.

Introduce a new utility method, "generic_memcpy", which takes
generic_addr_t plus indications of whether these specify virtual or
physical addresses (and potentially user addresess) and calls the
appropriate memcpy variant depending.

All bus drivers adjusted to support this at once. We don't actually
take advantage of the physical addresses in any way (yet), as USB
controllers have some pretty specific requirements that would have
to be carefully validated to use these directly.

All bus drivers tested and confirmed to still be working.

Change-Id: I66326667e148091147bb2b3d0843a26fb7e5bda6
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6479
Reviewed-by: waddlesplash <waddlesplash@gmail.com>


# 99626c29 29-May-2023 Augustin Cavalier <waddlesplash@gmail.com>

USB: Use generic_io_vec in Transfer.

Prepares the way for actual physical-address request support,
which is not yet wired up.

Change-Id: I1b2d04a31e334a79b8361280fa0f3a5fbdb43d2b
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6478
Reviewed-by: waddlesplash <waddlesplash@gmail.com>


# 627dc1ff 29-Sep-2021 Augustin Cavalier <waddlesplash@gmail.com>

USB: Less-than-equals comparison for length and MAX_FRAGMENT_SIZE.

We want to continue iterating until we have either reached the end
of the vectors or until we know that length is greater than MAX_FRAGMENT_SIZE,
so we need <= here, not <.


# cc455ef4 19-Sep-2021 Augustin Cavalier <waddlesplash@gmail.com>

USB: Properly set and reset fFragmented for both SetVector and SetData.

Now that we are not setting fFragmented in VectorLength(), we can
reset it in SetVector based purely on the length of the newly set vectors.

We also need to set it in SetData, as SetVector does not call this.
This fixes an oversight in bc7fd43358d1.


# bc7fd433 20-Sep-2021 Augustin Cavalier <waddlesplash@gmail.com>

USB: Rename Transfer::VectorLength to Transfer::FragmentLength.

It did not return the length of the vectors, but only the current
fragment's worth of vectors. It also modified the fFragmented flag,
which really should have been set in SetVectors in the first place.

As everything seemed to call IsFragmented after VectorLength,
this is not a behavioral change.


# 6e2bbbb1 12-Jul-2019 Augustin Cavalier <waddlesplash@gmail.com>

USB: Rename USB_SPEED_SUPER to USB_SPEED_SUPERSPEED.

For consistency's sake with the others.


# 21c87a5d 09-Sep-2018 Jérôme Duval <jerome.duval@gmail.com>

drivers: remove some non-haiku support code.

Change-Id: Ic55bb4832adabeb807f763c87ad938e74fb3a97d
Reviewed-on: https://review.haiku-os.org/520
Reviewed-by: Axel Dörfler <axeld@pinc-software.de>
Reviewed-by: waddlesplash <waddlesplash@gmail.com>


# 319a3798 22-Dec-2011 Jérôme Duval <jerome.duval@gmail.com>

Work in progress on XHCI bus driver.

* USB Core:
Hub: pass more correct speed, port and address for USB3 devices.
Transfer: doesn't care for bandwidth computation for super speed.
BusManager: Make AllocateDevice() and FreeDevice() virtual, XHCI needs to setup
a slot and an address for the device.
Add USB_SPEED_WIRELESS usb_speed definition.
Add USB2.0 erratum definition and some USB3 definitions
* XHCI:
Find outs which port supports SuperSpeed or not.
Override AllocateDevice() to configure slot and address for a connected device.
Override FreeDevice() to free ressources associated to a slot.
Add context struct definitions.


# 853e6be8 14-Apr-2010 Michael Lotz <mmlr@mlotz.ch>

* Rename usb_p.h to usb_private.h.
* Some automatic whitespace cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36247 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 72457edd 14-Apr-2010 Michael Lotz <mmlr@mlotz.ch>

Add a yet unused physical memory version of queue_bulk_v(). For full/lowspeed
devices it's uninteresting, but for EHCI it may be implemented some day.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36246 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 661d8af6 14-Apr-2010 Michael Lotz <mmlr@mlotz.ch>

The cloned area to access the userspace buffer in the case of fragmented
transfers was created with wrong permissions leading to a read-protected area.
Since we actually support read-protection in Haiku this caused a crash for all
fragmented transfers (transfers > 384K) leading to #5538.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36245 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 60a3c33b 11-May-2009 Michael Lotz <mmlr@mlotz.ch>

In case we already did initialize and prepare kernel access, no need to do it
again. Especially not because it'd likely fail because we are now most probably
in the kernel.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30711 a95241bf-73f2-0310-859d-f6bbb57e9c96


# f14fe767 23-Jan-2009 Michael Lotz <mmlr@mlotz.ch>

* Rework the USB tracing mechanism. Cleaned it up and make it more convenient to
use. It will now print out the usb_ids of the objects that generate the trace
messages. These IDs are unique compared to the device address used previously,
because device addresses are per bus while usb_ids are global. This makes
trace output from devices across multiple controllers distinguishable.
* Some cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29002 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 91b75ef2 24-Nov-2007 Marcus Overhagen <marcusoverhagen@gmail.com>

gcc4 build fix


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22986 a95241bf-73f2-0310-859d-f6bbb57e9c96


# c62d18ce 22-Nov-2007 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* Removed #ifndef HAIKU_TARGET_PLATFORM_HAIKU in InitKernelAccess and PreparKernelAccess as it made those fuctions useless in HAIKU, and those
functions are needed to pass data back to the user space buffer.
* Fixed Jamfile


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22982 a95241bf-73f2-0310-859d-f6bbb57e9c96


# ac9d1195 25-Jun-2007 Michael Lotz <mmlr@mlotz.ch>

Commiting patch by Salvatore Benedetto. This adds isochronous handling to the USB bus manager and enables inbound isochronous support in the UHCI driver. Thanks!

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21503 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 34cbbba7 07-May-2007 Michael Lotz <mmlr@mlotz.ch>

* Reworked userland buffer access functionality into two functions in the Transfer class to not duplicate code in each HCD
* Use these functions in UHCI and EHCI which greatly reduces overhead on fragmented transfers as the vector conversion and area cloning is only done once
* Use the PrepareKernelAccess() function before submitting fragments which fixes the crash when trying to access the next fragments buffer in user memory from the kernel thread

This should fix bug #1167 which could be encountered when sending data to a mass storage device with an application that uses a large enough transfer buffer size.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21059 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 2f142f61 26-Mar-2007 Michael Lotz <mmlr@mlotz.ch>

Try at fixing build for gcc4 suggested by Axel. Does that work?

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20428 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 145461d5 25-Mar-2007 Michael Lotz <mmlr@mlotz.ch>

Implemented fragmented USB transfers. The transfer length will max out at a certain point to not overflow the allocator. The fragmented transfers are resubmitted until all fragments are sent / received.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20416 a95241bf-73f2-0310-859d-f6bbb57e9c96


# ffe3f107 27-Aug-2006 Michael Lotz <mmlr@mlotz.ch>

* Redisigned some of the USB Stack. Unified constructors, removed redundant functions and moved some other functions around
* Implemented the EHCIRootHub
* Reworked UHCIRootHub to be more of a utility class and moved the actual work into the UHCI BusManager
* Implemented port reset in EHCI. Ports with low and fullspeed devices are now correctly handed over to the companion host controller.

Attachs and detachs as well as port resetting / enabling works now in EHCI. Only the actual data transfers are missing thereafter ;-)

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18656 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 02ce23a1 24-Aug-2006 Michael Lotz <mmlr@mlotz.ch>

* Unified and disabled TRACEing for the usb stack and uhci hcd
* Fixed warnings
* Some cleanup
* Added myself as an author to some files

No functional changes.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18614 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 1e8c0b36 19-Aug-2006 Michael Lotz <mmlr@mlotz.ch>

* Implemented iovec based data handling in Transfer and UHCI
* Implemented QueueBulkV of the v3 API that uses it

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18540 a95241bf-73f2-0310-859d-f6bbb57e9c96


# bf9d24ed 14-Aug-2006 Michael Lotz <mmlr@mlotz.ch>

* Fixed memory leak of Transfers never getting deleted (intentionally until now).
* Reduced the Transfer class to a minimum and removed support for synchronous transfers. The only usage of this is in SendRequest(), which now provides a callback and QueueRequest()s it's request instead.
* Clarified semantics of SubmitTransfer(). It returns a status_t indicating wether the transfer was submitted successfully. This includes no information about the outcome. Therefore the UHCI RootHub now reports the status only through the callback and returns B_OK or B_ERROR for SubmitTransfer().
* Added comment to the Transfer class explaining who takes ownership of the Transfer in which cases.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18511 a95241bf-73f2-0310-859d-f6bbb57e9c96


# d83f3c1a 13-Aug-2006 Michael Lotz <mmlr@mlotz.ch>

* Fixed setting configurations (need to use the configuration_value instead of the index of course)
* Fixed reported power status of the UHCI Root Hub
* Added preservation of the SOF_MODIFY register when doing a global reset of the UHC
* Read out the actual length for outgoing transfers too
* Made actual length handling for transfers a bit safer and correct in respect to NULL packets
* Use short packet detect to handle short packets
* First step at implementing the hub interrupt

Since the devices are now configured correctly, some bulk transfers actually work. Also my hub now reports its status correctly.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18506 a95241bf-73f2-0310-859d-f6bbb57e9c96


# f1020a6c 12-Aug-2006 Michael Lotz <mmlr@mlotz.ch>

* Changed the Stack lock to a benaphore
* Removed some debug output from UHCI
* Added some debug output to the usb module instead ;)
* Rewrote the way new devices are attached and ports are handled (now more similar to FreeBSD)
* Corrected handling of port resets so that they should work on hubs too
* Cleaned up some headers

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18499 a95241bf-73f2-0310-859d-f6bbb57e9c96


# b8c6a851 11-Aug-2006 Michael Lotz <mmlr@mlotz.ch>

* Implemented most of the USB module public API (using opaque handles like in R5 will change that to using IDs later)
* Fixed the UHCI root hub and the hub implementation. Interface and endpoint descriptors are part of the configuration descriptor, they cannot be requested individually.
* Added simple support for interrupt and bulk transfers to UHCI. It's enough to get my USB mouse working to a stable and usable degree.
* Cleaned up and reworked some other parts, added allocation checks and such.

Yes, my internet connection is back up :)

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18496 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 8ba81a76 23-Jul-2006 Michael Lotz <mmlr@mlotz.ch>

Continuing work on the USB stack and UHCI driver.
* Moved the transfer descriptor management into the UHCI class
* Added locking to the driver and the queues
* Added service thread for finished transfers (to be implemented correctly)
* Cleaned up some headers and added myself as author

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18245 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 96da8285 28-May-2006 Michael Lotz <mmlr@mlotz.ch>

Applying style to remaining classes. No functional change.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17624 a95241bf-73f2-0310-859d-f6bbb57e9c96


# c81edd87 14-Mar-2005 Niels Sascha Reedijk <niels.reedijk@gmail.com>

Update from my personal Arch tree just in time before SVN-move

Patches applied:

* Niels.Reedijk@gmail.com--nielx-2005/usb-busmanager--development--0.1--base-0
tag of Niels.Reedijk@gmail.com--haiku-2005/usb-busmanager--mainline--0.1--base-0

* Niels.Reedijk@gmail.com--nielx-2005/usb-busmanager--development--0.1--patch-1
Start device addition procedure when a new device is connected

* Niels.Reedijk@gmail.com--nielx-2005/usb-busmanager--development--0.1--patch-2


* Niels.Reedijk@gmail.com--nielx-2005/usb-busmanager--development--0.1--patch-3
Create transfers on the heap.

* Niels.Reedijk@gmail.com--nielx-2005/usb-busmanager--development--0.1--patch-4
Transfer supports synchronous and callbacks

* Niels.Reedijk@gmail.com--nielx-2005/usb-busmanager--development--0.1--patch-5

* Niels.Reedijk@gmail.com--nielx-2005/usb-busmanager--development--0.1--patch-6
Give Pipes a notion of what type they are

* Niels.Reedijk@gmail.com--nielx-2005/usb-busmanager--development--0.1--patch-7
Improve the handling of speed within pipes

* Niels.Reedijk@gmail.com--nielx-2005/usb-busmanager--development--0.1--patch-8
Add a new member to the transfer in which the hostcontroller can store private data

* Niels.Reedijk@gmail.com--nielx-2005/usb-busmanager--development--0.1--patch-9
Made some changes inspired by a mail from Marcus Overhagen

* Niels.Reedijk@gmail.com--nielx-2005/usb-busmanager--development--0.1--patch-10
Fixed memory allocation model


git-svn-id: file:///srv/svn/repos/haiku/trunk/current@11741 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 1a2e81b5 19-Jul-2004 Niels Sascha Reedijk <niels.reedijk@gmail.com>

Summary: Merge in changes in busses / bus-manager loading
Keywords:

Patches applied:

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-24
Rename AllocArea to AllocateArea for consistency

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-25
Make the memory allocation routines more global and share it with the hc

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-26
Change from uint32 to addr_t to be safe on 64 bit in the future

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-27
AllocateChunk returns an area_id

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-28
Really fixing AllocateChunk now

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-29
Fix a bug where data was uninitialised when used and load debug symbols

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-30
Integrate host_controller.h

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-31
Many changes to accomodate for new bus_manager handling


git-svn-id: file:///srv/svn/repos/haiku/trunk/current@8421 a95241bf-73f2-0310-859d-f6bbb57e9c96


# b0216c64 20-Jun-2004 beveloper <beveloper@nowhere.fake>

added missing newline at end of file


git-svn-id: file:///srv/svn/repos/haiku/trunk/current@8078 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 2265a339 19-Jun-2004 Niels Sascha Reedijk <niels.reedijk@gmail.com>

My own "we are haiku now"-commit:
I shall be telling this with a sigh
Somewhere ages and ages hence:
Two roads diverged in a wood, and I -
I took the one less travelled by,
And that has made all the difference
Robert Frost (The Road Not Taken)


git-svn-id: file:///srv/svn/repos/haiku/trunk/current@8070 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 3c232c2c 12-Jun-2004 beveloper <beveloper@nowhere.fake>

added missing newline


git-svn-id: file:///srv/svn/repos/haiku/trunk/current@7938 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 7ce4cf08 30-May-2004 Niels Sascha Reedijk <niels.reedijk@gmail.com>

Summary: Merged with development branch (nielx)

Patches applied:

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-22
Update/add licence header


git-svn-id: file:///srv/svn/repos/haiku/trunk/current@7689 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 0f6609e8 28-May-2004 Niels Sascha Reedijk <niels.reedijk@gmail.com>

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-5
Commit (in between) because of a switch of development-machines

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-6
Implement basic hub init

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-7
Implement a bit more of hub operation

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-8
Device Adress 0 is reserved for the default pipe!

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-9
Implement basic Pipe stuff

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-10
Create basic chunk allocation

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-11
Add Required util.c/util.h

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-12
Provide locking for the stack and make AllocateChunk thread-safe

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-13
Integrated util.c in stack class (cleans up a little)

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-14
Improve Pipe and give the Busmanager its default pipe

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-15
Make the Device class speed aware

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-16
Make Chunk allocation code more dynamic

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-17
Small test-commit to test if webdav is working -- ignore

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-18
Changed Packets into Transfers

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-19
Fix mistakes in host_controller.c

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-20
Advanced a little more in the Pipe stuff

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-21
Merge with mainline and add newlines at the end of files


git-svn-id: file:///srv/svn/repos/haiku/trunk/current@7668 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 319a3798bc05579e8be813c2524bc89864bae489 22-Dec-2011 Jérôme Duval <jerome.duval@gmail.com>

Work in progress on XHCI bus driver.

* USB Core:
Hub: pass more correct speed, port and address for USB3 devices.
Transfer: doesn't care for bandwidth computation for super speed.
BusManager: Make AllocateDevice() and FreeDevice() virtual, XHCI needs to setup
a slot and an address for the device.
Add USB_SPEED_WIRELESS usb_speed definition.
Add USB2.0 erratum definition and some USB3 definitions
* XHCI:
Find outs which port supports SuperSpeed or not.
Override AllocateDevice() to configure slot and address for a connected device.
Override FreeDevice() to free ressources associated to a slot.
Add context struct definitions.


# 853e6be8ca7117d62f497d539aa044adc2fdf573 14-Apr-2010 Michael Lotz <mmlr@mlotz.ch>

* Rename usb_p.h to usb_private.h.
* Some automatic whitespace cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36247 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 72457eddbcbb2c22e11ecbc78ae960375554db97 14-Apr-2010 Michael Lotz <mmlr@mlotz.ch>

Add a yet unused physical memory version of queue_bulk_v(). For full/lowspeed
devices it's uninteresting, but for EHCI it may be implemented some day.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36246 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 661d8af64ce99681f770deb0b3bf75e555d1acc0 14-Apr-2010 Michael Lotz <mmlr@mlotz.ch>

The cloned area to access the userspace buffer in the case of fragmented
transfers was created with wrong permissions leading to a read-protected area.
Since we actually support read-protection in Haiku this caused a crash for all
fragmented transfers (transfers > 384K) leading to #5538.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36245 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 60a3c33b87bc5dd0dae5df36e9f8cc81134fc862 11-May-2009 Michael Lotz <mmlr@mlotz.ch>

In case we already did initialize and prepare kernel access, no need to do it
again. Especially not because it'd likely fail because we are now most probably
in the kernel.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30711 a95241bf-73f2-0310-859d-f6bbb57e9c96


# f14fe767bf568186bbd0678e35b03c99d8a264c6 23-Jan-2009 Michael Lotz <mmlr@mlotz.ch>

* Rework the USB tracing mechanism. Cleaned it up and make it more convenient to
use. It will now print out the usb_ids of the objects that generate the trace
messages. These IDs are unique compared to the device address used previously,
because device addresses are per bus while usb_ids are global. This makes
trace output from devices across multiple controllers distinguishable.
* Some cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29002 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 91b75ef2fd8d73e1626f8b2631a7a6429750950a 24-Nov-2007 Marcus Overhagen <marcusoverhagen@gmail.com>

gcc4 build fix


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22986 a95241bf-73f2-0310-859d-f6bbb57e9c96


# c62d18ceff73eb35cca898db14cf5f4a96a62eeb 22-Nov-2007 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* Removed #ifndef HAIKU_TARGET_PLATFORM_HAIKU in InitKernelAccess and PreparKernelAccess as it made those fuctions useless in HAIKU, and those
functions are needed to pass data back to the user space buffer.
* Fixed Jamfile


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22982 a95241bf-73f2-0310-859d-f6bbb57e9c96


# ac9d119566e5c19de0279483c4847996b2f1a879 25-Jun-2007 Michael Lotz <mmlr@mlotz.ch>

Commiting patch by Salvatore Benedetto. This adds isochronous handling to the USB bus manager and enables inbound isochronous support in the UHCI driver. Thanks!

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21503 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 34cbbba798a50322040ad88254293063d5117fe5 07-May-2007 Michael Lotz <mmlr@mlotz.ch>

* Reworked userland buffer access functionality into two functions in the Transfer class to not duplicate code in each HCD
* Use these functions in UHCI and EHCI which greatly reduces overhead on fragmented transfers as the vector conversion and area cloning is only done once
* Use the PrepareKernelAccess() function before submitting fragments which fixes the crash when trying to access the next fragments buffer in user memory from the kernel thread

This should fix bug #1167 which could be encountered when sending data to a mass storage device with an application that uses a large enough transfer buffer size.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21059 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 2f142f6139db9232f616a525fe7c61737e658556 26-Mar-2007 Michael Lotz <mmlr@mlotz.ch>

Try at fixing build for gcc4 suggested by Axel. Does that work?

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20428 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 145461d547a8e5e1be7ad8b31cc974caf893b884 25-Mar-2007 Michael Lotz <mmlr@mlotz.ch>

Implemented fragmented USB transfers. The transfer length will max out at a certain point to not overflow the allocator. The fragmented transfers are resubmitted until all fragments are sent / received.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20416 a95241bf-73f2-0310-859d-f6bbb57e9c96


# ffe3f107c4ae65ec52128bb36115779fe07a01c0 27-Aug-2006 Michael Lotz <mmlr@mlotz.ch>

* Redisigned some of the USB Stack. Unified constructors, removed redundant functions and moved some other functions around
* Implemented the EHCIRootHub
* Reworked UHCIRootHub to be more of a utility class and moved the actual work into the UHCI BusManager
* Implemented port reset in EHCI. Ports with low and fullspeed devices are now correctly handed over to the companion host controller.

Attachs and detachs as well as port resetting / enabling works now in EHCI. Only the actual data transfers are missing thereafter ;-)

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18656 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 02ce23a1adaf30f7d8a63fd953bb5314ea560d55 24-Aug-2006 Michael Lotz <mmlr@mlotz.ch>

* Unified and disabled TRACEing for the usb stack and uhci hcd
* Fixed warnings
* Some cleanup
* Added myself as an author to some files

No functional changes.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18614 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 1e8c0b3649ff4915369402f2e005b486ef6e7dfb 19-Aug-2006 Michael Lotz <mmlr@mlotz.ch>

* Implemented iovec based data handling in Transfer and UHCI
* Implemented QueueBulkV of the v3 API that uses it

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18540 a95241bf-73f2-0310-859d-f6bbb57e9c96


# bf9d24edd2bbbb8a0341da366180909a32b5b57f 14-Aug-2006 Michael Lotz <mmlr@mlotz.ch>

* Fixed memory leak of Transfers never getting deleted (intentionally until now).
* Reduced the Transfer class to a minimum and removed support for synchronous transfers. The only usage of this is in SendRequest(), which now provides a callback and QueueRequest()s it's request instead.
* Clarified semantics of SubmitTransfer(). It returns a status_t indicating wether the transfer was submitted successfully. This includes no information about the outcome. Therefore the UHCI RootHub now reports the status only through the callback and returns B_OK or B_ERROR for SubmitTransfer().
* Added comment to the Transfer class explaining who takes ownership of the Transfer in which cases.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18511 a95241bf-73f2-0310-859d-f6bbb57e9c96


# d83f3c1a45d231f5ec4e3c1127d5f44a9b54fb00 13-Aug-2006 Michael Lotz <mmlr@mlotz.ch>

* Fixed setting configurations (need to use the configuration_value instead of the index of course)
* Fixed reported power status of the UHCI Root Hub
* Added preservation of the SOF_MODIFY register when doing a global reset of the UHC
* Read out the actual length for outgoing transfers too
* Made actual length handling for transfers a bit safer and correct in respect to NULL packets
* Use short packet detect to handle short packets
* First step at implementing the hub interrupt

Since the devices are now configured correctly, some bulk transfers actually work. Also my hub now reports its status correctly.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18506 a95241bf-73f2-0310-859d-f6bbb57e9c96


# f1020a6c4914d769f910ae85158a8fb9c9c060f7 12-Aug-2006 Michael Lotz <mmlr@mlotz.ch>

* Changed the Stack lock to a benaphore
* Removed some debug output from UHCI
* Added some debug output to the usb module instead ;)
* Rewrote the way new devices are attached and ports are handled (now more similar to FreeBSD)
* Corrected handling of port resets so that they should work on hubs too
* Cleaned up some headers

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18499 a95241bf-73f2-0310-859d-f6bbb57e9c96


# b8c6a85136cd56e8cf3282ca69b0d2d2832a3eee 11-Aug-2006 Michael Lotz <mmlr@mlotz.ch>

* Implemented most of the USB module public API (using opaque handles like in R5 will change that to using IDs later)
* Fixed the UHCI root hub and the hub implementation. Interface and endpoint descriptors are part of the configuration descriptor, they cannot be requested individually.
* Added simple support for interrupt and bulk transfers to UHCI. It's enough to get my USB mouse working to a stable and usable degree.
* Cleaned up and reworked some other parts, added allocation checks and such.

Yes, my internet connection is back up :)

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18496 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 8ba81a767e9e8cd36ddd627853ae12bcf1c6b71c 23-Jul-2006 Michael Lotz <mmlr@mlotz.ch>

Continuing work on the USB stack and UHCI driver.
* Moved the transfer descriptor management into the UHCI class
* Added locking to the driver and the queues
* Added service thread for finished transfers (to be implemented correctly)
* Cleaned up some headers and added myself as author

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18245 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 96da8285b0b36b7499e334e9ecc3da22e8e9b599 28-May-2006 Michael Lotz <mmlr@mlotz.ch>

Applying style to remaining classes. No functional change.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17624 a95241bf-73f2-0310-859d-f6bbb57e9c96


# c81edd87b5d83125e35d7930a2c05abdf4864a97 14-Mar-2005 Niels Sascha Reedijk <niels.reedijk@gmail.com>

Update from my personal Arch tree just in time before SVN-move

Patches applied:

* Niels.Reedijk@gmail.com--nielx-2005/usb-busmanager--development--0.1--base-0
tag of Niels.Reedijk@gmail.com--haiku-2005/usb-busmanager--mainline--0.1--base-0

* Niels.Reedijk@gmail.com--nielx-2005/usb-busmanager--development--0.1--patch-1
Start device addition procedure when a new device is connected

* Niels.Reedijk@gmail.com--nielx-2005/usb-busmanager--development--0.1--patch-2


* Niels.Reedijk@gmail.com--nielx-2005/usb-busmanager--development--0.1--patch-3
Create transfers on the heap.

* Niels.Reedijk@gmail.com--nielx-2005/usb-busmanager--development--0.1--patch-4
Transfer supports synchronous and callbacks

* Niels.Reedijk@gmail.com--nielx-2005/usb-busmanager--development--0.1--patch-5

* Niels.Reedijk@gmail.com--nielx-2005/usb-busmanager--development--0.1--patch-6
Give Pipes a notion of what type they are

* Niels.Reedijk@gmail.com--nielx-2005/usb-busmanager--development--0.1--patch-7
Improve the handling of speed within pipes

* Niels.Reedijk@gmail.com--nielx-2005/usb-busmanager--development--0.1--patch-8
Add a new member to the transfer in which the hostcontroller can store private data

* Niels.Reedijk@gmail.com--nielx-2005/usb-busmanager--development--0.1--patch-9
Made some changes inspired by a mail from Marcus Overhagen

* Niels.Reedijk@gmail.com--nielx-2005/usb-busmanager--development--0.1--patch-10
Fixed memory allocation model


git-svn-id: file:///srv/svn/repos/haiku/trunk/current@11741 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 1a2e81b52cfafb4a0ec65f935ce32b69923638dd 19-Jul-2004 Niels Sascha Reedijk <niels.reedijk@gmail.com>

Summary: Merge in changes in busses / bus-manager loading
Keywords:

Patches applied:

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-24
Rename AllocArea to AllocateArea for consistency

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-25
Make the memory allocation routines more global and share it with the hc

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-26
Change from uint32 to addr_t to be safe on 64 bit in the future

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-27
AllocateChunk returns an area_id

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-28
Really fixing AllocateChunk now

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-29
Fix a bug where data was uninitialised when used and load debug symbols

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-30
Integrate host_controller.h

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-31
Many changes to accomodate for new bus_manager handling


git-svn-id: file:///srv/svn/repos/haiku/trunk/current@8421 a95241bf-73f2-0310-859d-f6bbb57e9c96


# b0216c645fb17fe2a64308cdb5edebeebfdd2135 20-Jun-2004 beveloper <beveloper@nowhere.fake>

added missing newline at end of file


git-svn-id: file:///srv/svn/repos/haiku/trunk/current@8078 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 2265a3399b35fe0c0a11b8bd380e294a4e2e3ba5 19-Jun-2004 Niels Sascha Reedijk <niels.reedijk@gmail.com>

My own "we are haiku now"-commit:
I shall be telling this with a sigh
Somewhere ages and ages hence:
Two roads diverged in a wood, and I -
I took the one less travelled by,
And that has made all the difference
Robert Frost (The Road Not Taken)


git-svn-id: file:///srv/svn/repos/haiku/trunk/current@8070 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 3c232c2cba8e1ee6a5a41ea1258c9fdf5f1a5f82 12-Jun-2004 beveloper <beveloper@nowhere.fake>

added missing newline


git-svn-id: file:///srv/svn/repos/haiku/trunk/current@7938 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 7ce4cf086694f494b20d3e2f1c7eda103aa5af63 30-May-2004 Niels Sascha Reedijk <niels.reedijk@gmail.com>

Summary: Merged with development branch (nielx)

Patches applied:

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-22
Update/add licence header


git-svn-id: file:///srv/svn/repos/haiku/trunk/current@7689 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 0f6609e85c6573eadcfc4b6fa0acaa847e313680 28-May-2004 Niels Sascha Reedijk <niels.reedijk@gmail.com>

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-5
Commit (in between) because of a switch of development-machines

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-6
Implement basic hub init

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-7
Implement a bit more of hub operation

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-8
Device Adress 0 is reserved for the default pipe!

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-9
Implement basic Pipe stuff

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-10
Create basic chunk allocation

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-11
Add Required util.c/util.h

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-12
Provide locking for the stack and make AllocateChunk thread-safe

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-13
Integrated util.c in stack class (cleans up a little)

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-14
Improve Pipe and give the Busmanager its default pipe

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-15
Make the Device class speed aware

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-16
Make Chunk allocation code more dynamic

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-17
Small test-commit to test if webdav is working -- ignore

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-18
Changed Packets into Transfers

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-19
Fix mistakes in host_controller.c

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-20
Advanced a little more in the Pipe stuff

* n.reedijk@planet.nl--nielx-2003/usb-busmanager--development--0.1--patch-21
Merge with mainline and add newlines at the end of files


git-svn-id: file:///srv/svn/repos/haiku/trunk/current@7668 a95241bf-73f2-0310-859d-f6bbb57e9c96