History log of /haiku-fatelf/src/add-ons/kernel/busses/usb/ohci.cpp
Revision Date Author Comments
# 3b98be3c 04-Oct-2012 Jürgen Wall <fakeEmail@fakesite.fake>

USB OHCI: Fix ownership handover from SMM to OS.

* Disabling all interrupts prior to ownership handover from SMM to OS
can prevent propper OHCI and PS/2 functionality as described in
#8987 and #8984. In that case SMM does not respond to the ownership
change request. On the other hand not disabling the interrupts can
lead to interrupt storms (discussed in #8085) since no interrupt
handler is installed at that moment. As suggested by mmlr this patch
attempts to address both issues by keeping the ownership change
request interrupt enabled.

* Removed an unnecessary reset upon non-responding SMM for now,
since we reset a few lines later anyway and added TODOs respectively.
That should safe a bit boot time.

Signed-off-by: Michael Lotz <mmlr@mlotz.ch>


# a4bca811 15-Aug-2012 Michael Lotz <mmlr@mlotz.ch>

Add MSI support to OHCI.

It looks like VirtualBox assumes MSIs when emulating a 64bit system so
this gets OHCI working there. Shouldn't harm if it's used anywhere else
either.


# 2b883e19 06-Aug-2012 Alex Smith <alex@alex-smith.me.uk>

Fix compilation of OHCI on x86.

Fixes were needed to go with the USB stack changes. Haven't tested it
yet because I don't have a a machine with OHCI, but I doubt there
will be any problems.


# c4650933 15-May-2011 Michael Lotz <mmlr@mlotz.ch>

* Disable interrupts in OHCI before doing BIOS handover. Shouldn't matter much
but maybe it helps on some chipsets to avoid interrupt storms during handover.
* Remove comments that aren't true anymore.


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


# d7411ad2 07-Apr-2011 Jérôme Duval <korli@users.berlios.de>

added traces for unimplemented isochronous transfers for ehci and ohci


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


# 64d79eff 27-May-2010 Ingo Weinhold <ingo_weinhold@gmx.de>

* Changed physical_entry::{address,size} to phys_{addr,size}_t and changed
map_physical_memory()'s physicalAddress parameter type from void* to
phys_addr_t. This breaks source compatibility, but -- as long as
phys_{addr,size}_t remain 32 bit wide -- keeps binary compatibility with
BeOS.
* Adjusted all code using the affected interfaces (Oh what fun!). Added a few
TODOs in places where the wrong types (e.g. void* for physical addresses
are used). Looks like quite a few drivers aren't 64 bit safe and others
will break with PAE.


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


# 1393394b 22-Sep-2009 Michael Lotz <mmlr@mlotz.ch>

We need to guarantee that when cancel returns that the callback won't be called
anymore. It could happen that the transfer was already in the process of being
finished, so wasn't in the list of pending transfers anymore. Cancel would then
return even though the callback wasn't called yet. This could lead to a callback
being called after a driver was already unloaded (even after it cleaned up the
pipes it used).


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


# 1dd6c50c 14-Sep-2009 Michael Lotz <mmlr@mlotz.ch>

When submitting transfers there is a race condition between adding the pending
transfer to the transfer list and scheduling the transfer descriptors on the
controller by switching the endpoint tail. Since we only check that the endpoint
head is equal to the endpoint tail to conclude that there are no active
transfers, we need to ensure that we don't accidently do that check before the
transfer descriptors are scheduled. Otherwise we could happen to processed a not
yet started transfer and finishing it before an actual transfer has taken place.
This would then lead to 0 byte transfers and toggle mismatches. To fix this we
now protect the transfer addition and tail switching as well as the check in the
finisher with a per-endpoint mutex. Note that we allocate the lock on the heap
and only store the pointer in the endpoint structure as this one is allocated
from the precious physical memory pool. Could fix #4067.
Also switched the Jamfile to UsePrivateKernelHeaders (for the MutexLocker) and
removed BeOS compatibility.


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


# 12f58463 25-Aug-2009 Michael Lotz <mmlr@mlotz.ch>

Fix subtle but important error in transfer length calculation. That calculation
does calculate the remaining bytes, not the transferred ones, so obviously that
number has to be subtracted from the expected buffer size! Albeit severe, this
wasn't hit that often, because this calculation will only be used when the
transferred size doesn't match the handed in buffer size exactly. So things like
HID or mass storage, that mostly know the exact transfer size weren't affected.
But it could very well explain #4101 where the size isn't previously know.


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


# 9dbe55eb 20-Aug-2009 Michael Lotz <mmlr@mlotz.ch>

Fix typo.


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


# c265fd23 20-Aug-2009 Michael Lotz <mmlr@mlotz.ch>

We cannot use the condition codes to determine if a transfer descriptor is
processed. The controller may initialize it to any value when starting to
process the descriptor. If a controller did that it was possible that we thought
a transfer was already done even if it actually just started. Transfers would
then return that weren't processed, returning uninitialized buffers.
Instead of relying on the condition codes we now check that the head and tail
pointers are the same. This guarantees that all transfer descriptors of the
endpoint at hand are completed.
Reverted r32534 again as this one fixes the problem for real. The same things
that were mentioned there could happen here essentially, so in the worst case
the device or controller could stall because of freeing in-use structures.
Fixes #4067.


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


# 840cdc9e 20-Aug-2009 Michael Lotz <mmlr@mlotz.ch>

When adding a transfer, the current tail descriptor of the endpoint will be
reused and overwritten by the first descriptor of the new transfer and the first
descriptor will become the new tail. We anticipate this situation in
_AddPendingTransfer() and set the first_descriptor of the transfer data to the
tail already. Since the tail was pretty much cleared to zero, this introduced
a race condition. After adding the pending transfer it can already be found
in the finisher thread. If this happened before actually switching the tail
and first descriptor it would find a descriptor with a condition of 0, meaning
"No Error" and would process the transfer incorrectly. Depending on the count
of descriptors and the timing of the switch taking place this could have
resulted in aborted transfers with actual length 0 or with the correct actual
length but invalid data. In the very worst case it could have freed things still
in use by the controller, resulting in all sorts of device errors. Sadly it
doesn't fix #4067.


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


# 5f92e39f 19-Aug-2009 Michael Lotz <mmlr@mlotz.ch>

That's actually not how it works. OHCI does the dirty work of splitting up the
transfer descriptors into individual packets. The descriptors are more a
logical thing. As such we do not generate one descriptor per packet but one
for each block of two pages at max. Therefore we only set the initial toggle bit
to the one we stored on the first descriptor and let OHCI use the carry bit for
subsequet descriptors. That error would only be visible on transfers above two
pages in size though.


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


# b0a2e9e7 19-Aug-2009 Michael Lotz <mmlr@mlotz.ch>

Even though the specs say the toggle carry field contains the value of the last
retired descriptor, it actually contains the value that is to be used next.
Confirmed that by cross-referencing FreeBSD.


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


# abe8e8a2 18-Aug-2009 Michael Lotz <mmlr@mlotz.ch>

A try at actual data toggle handling. Since we do not properly ensure that the
toggle carry stays valid, we better make sure we set it correctly. Additionally
even if the toggle carry wasn't clobbered, there are conditions the toggle is
reset without the controller being able to notice (as in clearing a halt state).
Since I don't have any OHCI hardware this is untested, but should fix bug #4067
if correct.


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


# eb01fb72 08-Apr-2009 Michael Lotz <mmlr@mlotz.ch>

* Add the kernel debugger extensions only for the haiku target.
* Acknowledge non-enabled interrupts in UHCI as done in EHCI as well.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30063 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


# 2fc7e292 19-Jul-2008 Michael Lotz <mmlr@mlotz.ch>

When calculating the actual length for requests, we don't want to include the
8 byte request header. It was included in the case of outgoing request
transfers before. In fact we always just want the length of the data phase,
which for non-requests just happens to be the whole transfer.

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


# 1751250a 12-Jun-2008 Michael Lotz <mmlr@mlotz.ch>

Remove disabling and clearing interrupts again as it doesn't turn out to be a problem.

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


# 97403a77 10-Jun-2008 Michael Lotz <mmlr@mlotz.ch>

* Fix the check after waiting for owner change to happen and don't reset if the
handover indeed worked. Doesn't really matter though, as we reset anyway,
just not twice in the success case.
* Disable all interrupts and clear any pending active interrupts just after
taking over the controller. This might fix bug #2361.
* Also trace output when the ownership change is successful.
* Don't disable interrupts during reset.

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


# 4ca87670 08-Jun-2008 Michael Lotz <mmlr@mlotz.ch>

When canceling transfers, do not call the callbacks with the lock held. This
prevents deadlocks in cases where a new transfer is scheduled from within the
cancel callback. This is an edge case, as generally you don't want to schedule
anything when explicitly canceling transfers, but there are a valid use cases
when you cancel because of a timeout and then have to reset the device for
example. Note that this hides bug #2353, where the cancel case is probably
not handled correctly.

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


# 1c8de858 01-Jun-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

* Added optional spinlock contention measurement feature. Enabled when
B_DEBUG_SPINLOCK_CONTENTION is defined to 1. It typedefs spinlock to a
structure (thus breaking BeOS binary compatibility), containing a
counter which is incremented whenever a thread has to wait for the
spinlock.
* Added macros for spinlock initialization and access and changed
code using spinlocks accordingly. This breaks compilation for BeOS --
the macros should be defined in the respective compatibility wrappers.
* Added generic syscall to get the spinlock counters for the thread and
the team spinlocks.


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


# 2b07b8e0 28-May-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

* Replaced all instances of benaphores in the kernel code by mutexes.
* Removed kernel benaphores.


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


# 5a1f43f8 22-May-2008 Michael Lotz <mmlr@mlotz.ch>

Unconditionally report initialization success for OHCI too.

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


# 307fe93f 20-May-2008 Michael Lotz <mmlr@mlotz.ch>

* Disable the root hub change interrupt when it gets triggered. As the change
status stays on until the port is reset, this causes the interrupt to be
constantly retriggered on some controllers.
* Added TODO that we need to reenable it once we want to take advantage of
status change notifications instead of polling. It should be reenabled when
clearing roothub status changes in ClearPortFeature().

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


# 9cc4091e 20-May-2008 Michael Lotz <mmlr@mlotz.ch>

Enable interrupts only after installing the interrupt handler.

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


# 5b03912b 19-May-2008 Michael Lotz <mmlr@mlotz.ch>

* Correct removal of failed transfers by applying the address mask. As the head
pointer also contains the toggle carry and the halt bit (which was obviously
always set as the endpoint had an error) the address comparison failed and
the head was dead in the water with all further transfers timing out until
a subsequet cancel cleaned the mess up again.
* Add the OHCI host controller driver to the image as it should now be fully
functional except for isochronous transfers.

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


# a69e04b9 18-May-2008 Michael Lotz <mmlr@mlotz.ch>

* Implement removal of failed transfers. The head pointer will be moved past
the failed transfer if the transfer in question is found to be the offending
one. Probably not quite enough and still untested.

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


# a5a72836 18-May-2008 Michael Lotz <mmlr@mlotz.ch>

* Build the interrupt tree the same (imperfect) way as in EHCI to conserve
on resources but still satisfy the scheduling policy. This works well, but
effectifly limits the bandwidth available as the interrupts aren't spread
across different frames.
* Implement finding the interrupt endpoint head for a certain interval.
* Deactivate endpoints that are going away until removing them is implemented.
* Allow short packets for all data phases.
* Disable tracing by default.

There you go, interrupt transfers should work as well. Should enable mice,
keyboards, hubs and other devices that use interrupt pipes. Note that it's
still easily possible that a single failed request will hang an endpoint and
prevent a device from working.

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


# 016ce5dd 18-May-2008 Michael Lotz <mmlr@mlotz.ch>

* Handle the data == first and last == first case as this can occure for
single td bulk transfers.
* Implement SubmitTransfer() for bulk transfers (interrupts will use the exact
same code path, but as their endpoints aren't yet setup, interrupt transfers
won't work).
* Handle the cancel case when finishing transfers. The descriptors of the
canceled transfers cannot be accessed by the controller so they can be freed.

Bulk transfers should work now, so devices only using control and bulk transfers
should too (anything using usb_disk for example). Note though that a transfer
error will cause the whole thing to fail miserably as the error case is not
yet handled correctly (failed descriptors aren't removed from the endpoint).
Therefore I suggest not testing with the memory stick with that important
presentation you haven't stored anywhere else...

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


# 408a8ff3 18-May-2008 Michael Lotz <mmlr@mlotz.ch>

* Completely rework how transfer finishing is implemented. It is now using
pretty much the same strategy as UHCI. This does not leverage the done queue
the hardware provides us, but as it saves a lot of other overhead and allows
the structures to be smaller I think it is overall worth it.
* Removed now unnecessary stuff from the transfer descriptor struct.
* Directly acknowledge the done head interrupt as we do not use it either.
* Activate control endpoints by removing the skip bit when a transfer is scheduled.
* Correct the way the first descriptor is determined (the current tail becomes
the first descriptor while the current first descriptor becomes the tail).
* Remove the head_logical_descriptor field from the endpoint structure, as this
would simply get out of sync with the first td with no real way of updating.
* Stub out RemoveTransferFromEndpoint() as this needs reworking.
* Correct CreateDescriptorChain() signature and implement the method.
* Add ReadDescriptorChain() and ReadActualLength() to process finished transfers.
* Prepare for actual data transfers by renaming/regrouping transfer types.
* Fully clear out the new tail when switching (for the sake of it)
* Add some helpers and definitions to the hardware header.
* Add debugging facilities.

With all this transfers can now actually be scheduled and they are processed
when done. This brings control transfers to a usable state so setting the
device address and reading out/setting the configuration works. That means you
can now view your device using usb_dev_info, but since any other transfer type
besides control transfers isn't implemented yet the device will most probably
not yet do anything useful.

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


# 87fe2972 18-May-2008 Michael Lotz <mmlr@mlotz.ch>

Correctly clear an endpoint on cancel. Adjusted some comments/output.

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


# 0439bcbb 17-May-2008 Michael Lotz <mmlr@mlotz.ch>

Use a dedicated endpoint lock for endpoint manipulation. Fixes the guaranteed
deadlock with the BusManager on setup of the default pipes (for addressing).

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


# a9d7e87d 17-May-2008 Michael Lotz <mmlr@mlotz.ch>

* Implement "tail switching" so that a new transfer descriptor chain can be
appended to an endpoint descriptor without locking/disabling the endpoint.
* Correct the direction of the data phase of a control transfer.
* Some minor cleanup.

Control requests without data phase (set address for example) might actually
work now, but this is still untested.

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


# aeae544e 18-May-2008 Michael Lotz <mmlr@mlotz.ch>

* Complete the roothub get/set/clear port feature functions
* Reorder to match the usual order of the states/commands
* Fix some debug output and make it more informative

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


# 812dd254 18-May-2008 Michael Lotz <mmlr@mlotz.ch>

Acknowledge OHCI interrupts.

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


# 20bbb1bf 18-May-2008 Michael Lotz <mmlr@mlotz.ch>

* Make the operational register memory a uint8 * instead of a uint32 * so the
driver has at least a chance of working (it previously always used wrong
offsets for register access).
* Remove the hash approach for now (I'm going to explore a few other ways of
doing that first).
* Reorder some stuff and check for errors in some more places.
* More cleanup (mostly whitespace again).

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


# fd1e6f2b 16-May-2008 Michael Lotz <mmlr@mlotz.ch>

* Getting familiar with the existing code
* Cleanup (whitespace, nameing, code style)
* Move around methods so they match the header order
* Fix some obvious stuff
* Initialize all members
* Sync roothub code (this will be reworked to a common roothub)
* Only minor functional changes (to the worse for now)

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


# 8ff902d0 09-Apr-2008 François Revol <revol@free.fr>

Fix building usb busses with tracing on.


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


# 8024db25 06-Apr-2008 Michael Lotz <mmlr@mlotz.ch>

Change just host_controller_info to usb_host_controller_info for the sake of
clearity as suggested by Philippe Houdoin once and brought to my attention by
Slavatore. As this definition is completely private to the USB stack it would
not have caused any conflicts though.

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


# de1ecdaf 25-Jan-2008 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* Added necessary dummy descriptor to every endpoint created
* Implemented _RemoveTransferFromEndpoint
* Reworked _AppendChainDescriptorsToEndpoint as now every endpoint has (must have) a dummy descriptor



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


# 555d13dc 25-Jan-2008 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* Implemented private method _AppendChainDescriptorsToEndpoint in order to avoid code duplication (lock needs to be added)
* Fixed _SubmitControlRequest in order to use _AppendChainDescriptorsToEndpoint


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


# 5f061e0b 24-Jan-2008 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* More work on the finisher thread
* Reworked SubmitTrasfer method
* Implemented CancelQueuedTransfers
* Minor clean up


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


# ea0331c6 22-Jan-2008 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* Removed cast: not needed anymore since Interval() has been moved to the base class (Pipe)


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


# f2e973d4 22-Jan-2008 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* Implemented _AddPendingTransfer
* renamed trasfer_data memeber top to first_descriptor
* added data_descriptor member to transfer_data (useful for control transfer)



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


# 27d7771a 22-Jan-2008 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* Renamed fFinishTransfer to fLastTransfer (I don't even know why I called it
so in the first place)
* Renamed local variable descriptor to current in the finisher thread
* Using next_done_descriptor instead of next_logical_descriptor, as the latest
is used to keep track of all descriptors that belongs to the transfer
* Added _UnlinkTransfer private method
* Implemented _FreeDescriptorChain
* Moved endpoint pointer from the ohci_general_td structur to the transfer_data_s
structure, ad the ohci_general_td has already a transfer_data_s pointer which can
be used to the endpoint pointer reducing ridundancy.


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


# acf9124f 17-Jan-2008 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* Added definition for the hash related methods (not implemented)
* Continue working in the _FinishTransfer thread
* added next_done_descriptor in ohci_[general|isochronous]_td structure in order to handle
collisions.
* added next_logical_descriptor to ohci_isochronous_td structure



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


# d98bdb30 06-Jan-2008 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* Started working on the finisher thread
* Added some TRACE calls in the _InterruptHandler


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


# e78f31eb 27-Dec-2007 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* Partially implemented interrupt handler routine


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


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

* Fixed init part of the controller


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


# 01489ae0 20-Nov-2007 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* Remove SubmitAsyncTransfer and SubmitPeriodicTransfer
* Added _SubmitControlRequest (almost implemented), _LinkDescriptors, _WriteDescriptorChain (basically copied from EHCI, and UHCI)
* Renamed ohci_general_descriptor to ohci_general_td, and ohci_isochronous_descriptor to ohci_isochronous_td
* Finished _CreateGeneralDescriptor and _FreeGeneralDescriptor
* Added buffer_size member to ohci_general_td instead and removed last_logical_byte_address as it looked unnecessary
* minor clean up


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


# 4ff17443 17-Nov-2007 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* Implemented _InsertEndpointForPipe
* usual clean up


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


# eaa35fb2 17-Nov-2007 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* Replaced snooze with spin (Thanks Axel)
* Fixing TRACE messages
* minor clean up


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


# e1abd4c8 16-Nov-2007 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* Moved disable_interrupt right before resetting the controller
* Reworked on NotifyPipeChange
* Added _RemoveEndpointForPipe (not implemented)



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


# 3f652d19 15-Nov-2007 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* Completed SubmitTransfer
* Added SubmitAsyncTransfer and SubmitPeriodicTransfer (not implemented)
* Removed unecessary spinlock
* Wrapped some lines to follow coding guidelines



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


# 13508e8b 14-Nov-2007 Michael Lotz <mmlr@mlotz.ch>

Completely redesign the USB explore process. Replaces the scary race conditions of the previous locking mechanism and simplifies handling of device changes by a more centralized approach.
Changes are now collected during explore and notifications as well as rescans are done at once. Through this a driver is also not rescanned multiple times anymore.

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


# ca73cdd6 14-Nov-2007 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* Renamed some variables
* Reworking the interrupts endpoints tree parts
* Added spin_locker, semaphore, finisher thread and interrupt handler (not implemented)
* Made fInterruptEndpoints allocation dynamic instead of static
* Fixed Start method (it should be correct now)




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


# e3677c6d 10-Nov-2007 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* ups :)


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


# a097d8c8 10-Nov-2007 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* Placed underscore to private methods like ReadReg and WriteReg
* Rewrote _AllocateEndpoint
* More work in the constructor


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


# dfd1357a 20-Oct-2007 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* Rewrote part of the constructor: most of the code is ported from FreeBSD
* Usual clean up


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


# f82eb041 14-Oct-2007 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* License changed: I've successfully contacted Jan-Rixt Van Hoye, and he gave me his bless :)
* Usual clean up


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


# 1b442f19 13-Oct-2007 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* Revert Copyright


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


# 46a41c43 12-Oct-2007 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* Clean up (removing unneeded comment)
* Renaming, fixing coding guidelines
* Re-writing AddTo method
* Removing ohci_software.h file (its content has been moved to ohci.h) but it will probably be deleted in the future.


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


# cd6fd30f 25-May-2007 François Revol <revol@free.fr>

More tracing in ohci. Hmm, existing isn't totally consistent (prefix, ...). Oh well.


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


# f891e74e 22-Jan-2007 Michael Lotz <mmlr@mlotz.ch>

Fixed wrong usage of object types in OHCI. The types are bitmasks, not values.

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


# 04394283 02-Oct-2006 Niels Sascha Reedijk <niels.reedijk@gmail.com>

Implemented endpoint creation for Pipes.

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


# e26f3a11 25-Sep-2006 Niels Sascha Reedijk <niels.reedijk@gmail.com>

Now the ports are powered on and seem to work...


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


# 2159acc7 25-Sep-2006 Niels Sascha Reedijk <niels.reedijk@gmail.com>

Implemented most of the roothub.

There remains only one issue: reading the Port registers seem to return a bogus value (0). I need to find out what's causing it.



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


# bcc2d1b6 15-Sep-2006 Michael Lotz <mmlr@mlotz.ch>

* Implemented usable thread synchronisation for UHCI and EHCI.
* Cleaned interrupt handlers for both busses, too.
* Fixed memory leak of the queue head stray descriptors in EHCI.
* Fixed warnings about assigning NULL to the module flags field.

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


# 915367e3 31-Aug-2006 Niels Sascha Reedijk <niels.reedijk@gmail.com>

Wrote the initialisation routine of the host controller
* Started cleaning up the style (WIP)
* I'll slowly phase out ohci_software.h, since it is BSD legacy
* Cleanup other BSD inspired naming. I like full names.


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


# 2761c5ae 30-Aug-2006 Jérôme Duval <korli@users.berlios.de>

replaced with PCI.h definitions, added PCI_usb_ehci


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


# 34314b98 28-Aug-2006 Niels Sascha Reedijk <niels.reedijk@gmail.com>

First commit to show that work on the ohci bus has restarted.
It doesn't do anything yet, but it allocates the io registers properly and
now the values that are returned when reading it make sense.

More to come...


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


# 9e857d24 25-Aug-2006 Michael Lotz <mmlr@mlotz.ch>

* Adding skeleton EHCI driver. Some parts filled from the specs and the UHCI driver.
* Corrected some errors I found while reading UHCI.

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


# 5b0ec61f 19-Aug-2006 Michael Lotz <mmlr@mlotz.ch>

* Added USB API Version 3. It's put into USB3.h while the v2 API resides in USB2.h. USB.h just includes USB2.h for now.
* Rewrote both headers on the way.
* The usb module now exports both, the v2 and v3 module_info.
* Changed the internals of the USB Stack to give out usb_ids instead of opaque handles to internal classes.
* Cleaned up some more of the Stack by moving members into other classes and removing unused stuff.
* Updated the usb_raw driver from v2 to v3 API.

Since both usb_hid (which still uses the v2 API) and usb_raw (which now uses the v3 API) work, I'd call it a success ;-)

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


# 67c3d9eb 11-Jan-2006 Axel Dörfler <axeld@pinc-software.de>

Fixed building of the UHCI and OHCI modules [reported by AndyBe].


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


# 4097611c 26-Sep-2005 Marcus Overhagen <marcusoverhagen@gmail.com>

Fixed the bugs I introduced earlier. original code was ok.


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


# 2239adfc 23-Sep-2005 Marcus Overhagen <marcusoverhagen@gmail.com>

properly mask off bits


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


# b2141301 23-Sep-2005 Marcus Overhagen <marcusoverhagen@gmail.com>

it's not allowed to spin 250ms


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


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

Quick merge of my development branch with mainline (for SVN switch).
The OHCI stuff was done by Jixt (thanks)./installusb
All is still very much work in progress

Patches applied:

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

* Niels.Reedijk@gmail.com--nielx-2005/usb-busses--development--0.1--patch-1
Set the PORT_STATUS_LOW_SPEED flag correctly (using the register bitflag for low speed devices, instead of the proper lowspeed flag)

* Niels.Reedijk@gmail.com--nielx-2005/usb-busses--development--0.1--patch-2
Clean up transfers when they're done

* Niels.Reedijk@gmail.com--nielx-2005/usb-busses--development--0.1--patch-3


* Niels.Reedijk@gmail.com--nielx-2005/usb-busses--development--0.1--patch-4


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


* Niels.Reedijk@gmail.com--nielx-2005/usb-busses--development--0.1--patch-6


* Niels.Reedijk@gmail.com--nielx-2005/usb-busses--development--0.1--patch-7
Remove obsolete ehci.c

* Niels.Reedijk@gmail.com--nielx-2005/usb-busses--development--0.1--patch-8


* Niels.Reedijk@gmail.com--nielx-2005/usb-busses--development--0.1--patch-9
Completed memory allocation + initialization

* Niels.Reedijk@gmail.com--nielx-2005/usb-busses--development--0.1--patch-10
First attempt at performing control transfers - failed miserably

* Niels.Reedijk@gmail.com--nielx-2005/usb-busses--development--0.1--patch-11
Trying to read a 16bit value into a 8bit integer, stupid

* Niels.Reedijk@gmail.com--nielx-2005/usb-busses--development--0.1--patch-12
nicer way of getting the base io address

* Niels.Reedijk@gmail.com--nielx-2005/usb-busses--development--0.1--patch-13
Take over control from BIOS

* Niels.Reedijk@gmail.com--nielx-2005/usb-busses--development--0.1--patch-14
Revert change for disabling USB BIOS support


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


# 3b98be3cc44741c04fefddc14d7b34a7735468a2 04-Oct-2012 Jürgen Wall <fakeEmail@fakesite.fake>

USB OHCI: Fix ownership handover from SMM to OS.

* Disabling all interrupts prior to ownership handover from SMM to OS
can prevent propper OHCI and PS/2 functionality as described in
#8987 and #8984. In that case SMM does not respond to the ownership
change request. On the other hand not disabling the interrupts can
lead to interrupt storms (discussed in #8085) since no interrupt
handler is installed at that moment. As suggested by mmlr this patch
attempts to address both issues by keeping the ownership change
request interrupt enabled.

* Removed an unnecessary reset upon non-responding SMM for now,
since we reset a few lines later anyway and added TODOs respectively.
That should safe a bit boot time.

Signed-off-by: Michael Lotz <mmlr@mlotz.ch>


# a4bca8119323c016607b25c3d1dcec2f0d4b0010 15-Aug-2012 Michael Lotz <mmlr@mlotz.ch>

Add MSI support to OHCI.

It looks like VirtualBox assumes MSIs when emulating a 64bit system so
this gets OHCI working there. Shouldn't harm if it's used anywhere else
either.


# 2b883e1977b1c420935c80b6fb9eb0067f112301 06-Aug-2012 Alex Smith <alex@alex-smith.me.uk>

Fix compilation of OHCI on x86.

Fixes were needed to go with the USB stack changes. Haven't tested it
yet because I don't have a a machine with OHCI, but I doubt there
will be any problems.


# c46509339b8e4ba1e3edb9b0216be7cc1dcc9e76 15-May-2011 Michael Lotz <mmlr@mlotz.ch>

* Disable interrupts in OHCI before doing BIOS handover. Shouldn't matter much
but maybe it helps on some chipsets to avoid interrupt storms during handover.
* Remove comments that aren't true anymore.


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


# d7411ad2ec16e5fd1b8eefa975119cf3045f5fbd 07-Apr-2011 Jérôme Duval <korli@users.berlios.de>

added traces for unimplemented isochronous transfers for ehci and ohci


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


# 64d79eff7290437d24b1a420537c3ed5c144ab96 27-May-2010 Ingo Weinhold <ingo_weinhold@gmx.de>

* Changed physical_entry::{address,size} to phys_{addr,size}_t and changed
map_physical_memory()'s physicalAddress parameter type from void* to
phys_addr_t. This breaks source compatibility, but -- as long as
phys_{addr,size}_t remain 32 bit wide -- keeps binary compatibility with
BeOS.
* Adjusted all code using the affected interfaces (Oh what fun!). Added a few
TODOs in places where the wrong types (e.g. void* for physical addresses
are used). Looks like quite a few drivers aren't 64 bit safe and others
will break with PAE.


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


# 1393394ba6adde434020a48e5d9b7b22822150b0 22-Sep-2009 Michael Lotz <mmlr@mlotz.ch>

We need to guarantee that when cancel returns that the callback won't be called
anymore. It could happen that the transfer was already in the process of being
finished, so wasn't in the list of pending transfers anymore. Cancel would then
return even though the callback wasn't called yet. This could lead to a callback
being called after a driver was already unloaded (even after it cleaned up the
pipes it used).


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


# 1dd6c50cb3cdbcfe254d9b60f04bbfad100e6848 14-Sep-2009 Michael Lotz <mmlr@mlotz.ch>

When submitting transfers there is a race condition between adding the pending
transfer to the transfer list and scheduling the transfer descriptors on the
controller by switching the endpoint tail. Since we only check that the endpoint
head is equal to the endpoint tail to conclude that there are no active
transfers, we need to ensure that we don't accidently do that check before the
transfer descriptors are scheduled. Otherwise we could happen to processed a not
yet started transfer and finishing it before an actual transfer has taken place.
This would then lead to 0 byte transfers and toggle mismatches. To fix this we
now protect the transfer addition and tail switching as well as the check in the
finisher with a per-endpoint mutex. Note that we allocate the lock on the heap
and only store the pointer in the endpoint structure as this one is allocated
from the precious physical memory pool. Could fix #4067.
Also switched the Jamfile to UsePrivateKernelHeaders (for the MutexLocker) and
removed BeOS compatibility.


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


# 12f584636c4d5a419ce50a9fc8fa700249be7895 25-Aug-2009 Michael Lotz <mmlr@mlotz.ch>

Fix subtle but important error in transfer length calculation. That calculation
does calculate the remaining bytes, not the transferred ones, so obviously that
number has to be subtracted from the expected buffer size! Albeit severe, this
wasn't hit that often, because this calculation will only be used when the
transferred size doesn't match the handed in buffer size exactly. So things like
HID or mass storage, that mostly know the exact transfer size weren't affected.
But it could very well explain #4101 where the size isn't previously know.


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


# 9dbe55ebcc6109652443b35458ffca3706b83cdd 20-Aug-2009 Michael Lotz <mmlr@mlotz.ch>

Fix typo.


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


# c265fd23cd11450d8810fa1afc648a46bd06cd2c 20-Aug-2009 Michael Lotz <mmlr@mlotz.ch>

We cannot use the condition codes to determine if a transfer descriptor is
processed. The controller may initialize it to any value when starting to
process the descriptor. If a controller did that it was possible that we thought
a transfer was already done even if it actually just started. Transfers would
then return that weren't processed, returning uninitialized buffers.
Instead of relying on the condition codes we now check that the head and tail
pointers are the same. This guarantees that all transfer descriptors of the
endpoint at hand are completed.
Reverted r32534 again as this one fixes the problem for real. The same things
that were mentioned there could happen here essentially, so in the worst case
the device or controller could stall because of freeing in-use structures.
Fixes #4067.


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


# 840cdc9efcf81ce93b1ee48884416e11b8ae748b 20-Aug-2009 Michael Lotz <mmlr@mlotz.ch>

When adding a transfer, the current tail descriptor of the endpoint will be
reused and overwritten by the first descriptor of the new transfer and the first
descriptor will become the new tail. We anticipate this situation in
_AddPendingTransfer() and set the first_descriptor of the transfer data to the
tail already. Since the tail was pretty much cleared to zero, this introduced
a race condition. After adding the pending transfer it can already be found
in the finisher thread. If this happened before actually switching the tail
and first descriptor it would find a descriptor with a condition of 0, meaning
"No Error" and would process the transfer incorrectly. Depending on the count
of descriptors and the timing of the switch taking place this could have
resulted in aborted transfers with actual length 0 or with the correct actual
length but invalid data. In the very worst case it could have freed things still
in use by the controller, resulting in all sorts of device errors. Sadly it
doesn't fix #4067.


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


# 5f92e39f7b50cd57fffbdde384133052c749f7bd 19-Aug-2009 Michael Lotz <mmlr@mlotz.ch>

That's actually not how it works. OHCI does the dirty work of splitting up the
transfer descriptors into individual packets. The descriptors are more a
logical thing. As such we do not generate one descriptor per packet but one
for each block of two pages at max. Therefore we only set the initial toggle bit
to the one we stored on the first descriptor and let OHCI use the carry bit for
subsequet descriptors. That error would only be visible on transfers above two
pages in size though.


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


# b0a2e9e7aa53b4c1b73d71dd8a9454263825e62b 19-Aug-2009 Michael Lotz <mmlr@mlotz.ch>

Even though the specs say the toggle carry field contains the value of the last
retired descriptor, it actually contains the value that is to be used next.
Confirmed that by cross-referencing FreeBSD.


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


# abe8e8a2c2ebef2a46252a5f1bf904b4cc18ce3c 18-Aug-2009 Michael Lotz <mmlr@mlotz.ch>

A try at actual data toggle handling. Since we do not properly ensure that the
toggle carry stays valid, we better make sure we set it correctly. Additionally
even if the toggle carry wasn't clobbered, there are conditions the toggle is
reset without the controller being able to notice (as in clearing a halt state).
Since I don't have any OHCI hardware this is untested, but should fix bug #4067
if correct.


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


# eb01fb72f6d90bf6a083941ace087bdd6803a516 08-Apr-2009 Michael Lotz <mmlr@mlotz.ch>

* Add the kernel debugger extensions only for the haiku target.
* Acknowledge non-enabled interrupts in UHCI as done in EHCI as well.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30063 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


# 2fc7e292e5c277938b10d50f99e8fd531fe2e8ed 19-Jul-2008 Michael Lotz <mmlr@mlotz.ch>

When calculating the actual length for requests, we don't want to include the
8 byte request header. It was included in the case of outgoing request
transfers before. In fact we always just want the length of the data phase,
which for non-requests just happens to be the whole transfer.

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


# 1751250abf5964fdd9d0b570f5625fbdfd2ff14f 12-Jun-2008 Michael Lotz <mmlr@mlotz.ch>

Remove disabling and clearing interrupts again as it doesn't turn out to be a problem.

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


# 97403a77f1d46f1cf7cb3b339388e5cf0ca31b97 10-Jun-2008 Michael Lotz <mmlr@mlotz.ch>

* Fix the check after waiting for owner change to happen and don't reset if the
handover indeed worked. Doesn't really matter though, as we reset anyway,
just not twice in the success case.
* Disable all interrupts and clear any pending active interrupts just after
taking over the controller. This might fix bug #2361.
* Also trace output when the ownership change is successful.
* Don't disable interrupts during reset.

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


# 4ca876701dbe6b2676f81902186fabe67b8ad956 08-Jun-2008 Michael Lotz <mmlr@mlotz.ch>

When canceling transfers, do not call the callbacks with the lock held. This
prevents deadlocks in cases where a new transfer is scheduled from within the
cancel callback. This is an edge case, as generally you don't want to schedule
anything when explicitly canceling transfers, but there are a valid use cases
when you cancel because of a timeout and then have to reset the device for
example. Note that this hides bug #2353, where the cancel case is probably
not handled correctly.

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


# 1c8de8581b66c14ea94bccd7ddcea99291955796 01-Jun-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

* Added optional spinlock contention measurement feature. Enabled when
B_DEBUG_SPINLOCK_CONTENTION is defined to 1. It typedefs spinlock to a
structure (thus breaking BeOS binary compatibility), containing a
counter which is incremented whenever a thread has to wait for the
spinlock.
* Added macros for spinlock initialization and access and changed
code using spinlocks accordingly. This breaks compilation for BeOS --
the macros should be defined in the respective compatibility wrappers.
* Added generic syscall to get the spinlock counters for the thread and
the team spinlocks.


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


# 2b07b8e0f1a7f1e76f31db24a21a42cbb01d7b9c 28-May-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

* Replaced all instances of benaphores in the kernel code by mutexes.
* Removed kernel benaphores.


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


# 5a1f43f8f09aeaf9e7f286ea5a25192eecbb6322 22-May-2008 Michael Lotz <mmlr@mlotz.ch>

Unconditionally report initialization success for OHCI too.

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


# 307fe93f85a2a18a77fda7afacd17f26c8612fdc 20-May-2008 Michael Lotz <mmlr@mlotz.ch>

* Disable the root hub change interrupt when it gets triggered. As the change
status stays on until the port is reset, this causes the interrupt to be
constantly retriggered on some controllers.
* Added TODO that we need to reenable it once we want to take advantage of
status change notifications instead of polling. It should be reenabled when
clearing roothub status changes in ClearPortFeature().

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


# 9cc4091e353f453b9ee0c2feb7ebe7d3c79defcd 20-May-2008 Michael Lotz <mmlr@mlotz.ch>

Enable interrupts only after installing the interrupt handler.

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


# 5b03912b5f9783e9652ba9925f44e901af8e24e6 19-May-2008 Michael Lotz <mmlr@mlotz.ch>

* Correct removal of failed transfers by applying the address mask. As the head
pointer also contains the toggle carry and the halt bit (which was obviously
always set as the endpoint had an error) the address comparison failed and
the head was dead in the water with all further transfers timing out until
a subsequet cancel cleaned the mess up again.
* Add the OHCI host controller driver to the image as it should now be fully
functional except for isochronous transfers.

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


# a69e04b96ecde4e73bb1ab229dea9b1176b8e05f 18-May-2008 Michael Lotz <mmlr@mlotz.ch>

* Implement removal of failed transfers. The head pointer will be moved past
the failed transfer if the transfer in question is found to be the offending
one. Probably not quite enough and still untested.

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


# a5a728361ccfdf83dcf89fa7a6f86b8f197b6e80 18-May-2008 Michael Lotz <mmlr@mlotz.ch>

* Build the interrupt tree the same (imperfect) way as in EHCI to conserve
on resources but still satisfy the scheduling policy. This works well, but
effectifly limits the bandwidth available as the interrupts aren't spread
across different frames.
* Implement finding the interrupt endpoint head for a certain interval.
* Deactivate endpoints that are going away until removing them is implemented.
* Allow short packets for all data phases.
* Disable tracing by default.

There you go, interrupt transfers should work as well. Should enable mice,
keyboards, hubs and other devices that use interrupt pipes. Note that it's
still easily possible that a single failed request will hang an endpoint and
prevent a device from working.

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


# 016ce5dd542c3ef0731dc3d7f3b7ab29603b04e8 18-May-2008 Michael Lotz <mmlr@mlotz.ch>

* Handle the data == first and last == first case as this can occure for
single td bulk transfers.
* Implement SubmitTransfer() for bulk transfers (interrupts will use the exact
same code path, but as their endpoints aren't yet setup, interrupt transfers
won't work).
* Handle the cancel case when finishing transfers. The descriptors of the
canceled transfers cannot be accessed by the controller so they can be freed.

Bulk transfers should work now, so devices only using control and bulk transfers
should too (anything using usb_disk for example). Note though that a transfer
error will cause the whole thing to fail miserably as the error case is not
yet handled correctly (failed descriptors aren't removed from the endpoint).
Therefore I suggest not testing with the memory stick with that important
presentation you haven't stored anywhere else...

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


# 408a8ff36a2514df0dcdc2cefe0daa7ad0972f41 18-May-2008 Michael Lotz <mmlr@mlotz.ch>

* Completely rework how transfer finishing is implemented. It is now using
pretty much the same strategy as UHCI. This does not leverage the done queue
the hardware provides us, but as it saves a lot of other overhead and allows
the structures to be smaller I think it is overall worth it.
* Removed now unnecessary stuff from the transfer descriptor struct.
* Directly acknowledge the done head interrupt as we do not use it either.
* Activate control endpoints by removing the skip bit when a transfer is scheduled.
* Correct the way the first descriptor is determined (the current tail becomes
the first descriptor while the current first descriptor becomes the tail).
* Remove the head_logical_descriptor field from the endpoint structure, as this
would simply get out of sync with the first td with no real way of updating.
* Stub out RemoveTransferFromEndpoint() as this needs reworking.
* Correct CreateDescriptorChain() signature and implement the method.
* Add ReadDescriptorChain() and ReadActualLength() to process finished transfers.
* Prepare for actual data transfers by renaming/regrouping transfer types.
* Fully clear out the new tail when switching (for the sake of it)
* Add some helpers and definitions to the hardware header.
* Add debugging facilities.

With all this transfers can now actually be scheduled and they are processed
when done. This brings control transfers to a usable state so setting the
device address and reading out/setting the configuration works. That means you
can now view your device using usb_dev_info, but since any other transfer type
besides control transfers isn't implemented yet the device will most probably
not yet do anything useful.

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


# 87fe2972ec8bb06789554dfe18a38b876e7c09f1 18-May-2008 Michael Lotz <mmlr@mlotz.ch>

Correctly clear an endpoint on cancel. Adjusted some comments/output.

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


# 0439bcbbbbec2fe70401e02bb962b3f013b166b6 17-May-2008 Michael Lotz <mmlr@mlotz.ch>

Use a dedicated endpoint lock for endpoint manipulation. Fixes the guaranteed
deadlock with the BusManager on setup of the default pipes (for addressing).

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


# a9d7e87d40decf63c52a13f553955b0865f45a48 17-May-2008 Michael Lotz <mmlr@mlotz.ch>

* Implement "tail switching" so that a new transfer descriptor chain can be
appended to an endpoint descriptor without locking/disabling the endpoint.
* Correct the direction of the data phase of a control transfer.
* Some minor cleanup.

Control requests without data phase (set address for example) might actually
work now, but this is still untested.

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


# aeae544e7d1531395d34b78006110acd91fa868b 18-May-2008 Michael Lotz <mmlr@mlotz.ch>

* Complete the roothub get/set/clear port feature functions
* Reorder to match the usual order of the states/commands
* Fix some debug output and make it more informative

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


# 812dd254dcde4a920bc5e814ad89ad90e8dfd17c 18-May-2008 Michael Lotz <mmlr@mlotz.ch>

Acknowledge OHCI interrupts.

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


# 20bbb1bf28b5ccd3fcda07e27f0dd24c62fbe71d 18-May-2008 Michael Lotz <mmlr@mlotz.ch>

* Make the operational register memory a uint8 * instead of a uint32 * so the
driver has at least a chance of working (it previously always used wrong
offsets for register access).
* Remove the hash approach for now (I'm going to explore a few other ways of
doing that first).
* Reorder some stuff and check for errors in some more places.
* More cleanup (mostly whitespace again).

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


# fd1e6f2b375d31347be55e2b1924618f9055711f 16-May-2008 Michael Lotz <mmlr@mlotz.ch>

* Getting familiar with the existing code
* Cleanup (whitespace, nameing, code style)
* Move around methods so they match the header order
* Fix some obvious stuff
* Initialize all members
* Sync roothub code (this will be reworked to a common roothub)
* Only minor functional changes (to the worse for now)

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


# 8ff902d0bdbca23a39e31ec8b3810e9a10dd05ad 09-Apr-2008 François Revol <revol@free.fr>

Fix building usb busses with tracing on.


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


# 8024db25a8b9a380d73fd0198f4203f514f4b5dd 06-Apr-2008 Michael Lotz <mmlr@mlotz.ch>

Change just host_controller_info to usb_host_controller_info for the sake of
clearity as suggested by Philippe Houdoin once and brought to my attention by
Slavatore. As this definition is completely private to the USB stack it would
not have caused any conflicts though.

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


# de1ecdaf63d5d81422df2c056af595b508e9eaaf 25-Jan-2008 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* Added necessary dummy descriptor to every endpoint created
* Implemented _RemoveTransferFromEndpoint
* Reworked _AppendChainDescriptorsToEndpoint as now every endpoint has (must have) a dummy descriptor



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


# 555d13dc9fde786e8f12f5be29d67ef22009ae25 25-Jan-2008 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* Implemented private method _AppendChainDescriptorsToEndpoint in order to avoid code duplication (lock needs to be added)
* Fixed _SubmitControlRequest in order to use _AppendChainDescriptorsToEndpoint


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


# 5f061e0b6b5e64775404c84b3a814f7b5e0d4f5d 24-Jan-2008 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* More work on the finisher thread
* Reworked SubmitTrasfer method
* Implemented CancelQueuedTransfers
* Minor clean up


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


# ea0331c6f9e40796b888e6205f1478939d9911dd 22-Jan-2008 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* Removed cast: not needed anymore since Interval() has been moved to the base class (Pipe)


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


# f2e973d406d4bb29d79159a854dc376fab0c1310 22-Jan-2008 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* Implemented _AddPendingTransfer
* renamed trasfer_data memeber top to first_descriptor
* added data_descriptor member to transfer_data (useful for control transfer)



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


# 27d7771a1ec1b6cd2ce5635cfc1f6f9a377bb153 22-Jan-2008 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* Renamed fFinishTransfer to fLastTransfer (I don't even know why I called it
so in the first place)
* Renamed local variable descriptor to current in the finisher thread
* Using next_done_descriptor instead of next_logical_descriptor, as the latest
is used to keep track of all descriptors that belongs to the transfer
* Added _UnlinkTransfer private method
* Implemented _FreeDescriptorChain
* Moved endpoint pointer from the ohci_general_td structur to the transfer_data_s
structure, ad the ohci_general_td has already a transfer_data_s pointer which can
be used to the endpoint pointer reducing ridundancy.


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


# acf9124f1b49d095c7ea2a198f78a2105b49c027 17-Jan-2008 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* Added definition for the hash related methods (not implemented)
* Continue working in the _FinishTransfer thread
* added next_done_descriptor in ohci_[general|isochronous]_td structure in order to handle
collisions.
* added next_logical_descriptor to ohci_isochronous_td structure



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


# d98bdb30bcb05395231e26e7940dbb304a2c9b91 06-Jan-2008 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* Started working on the finisher thread
* Added some TRACE calls in the _InterruptHandler


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


# e78f31ebbed1b8ff8db3a0af6dee8e42c5b5361d 27-Dec-2007 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* Partially implemented interrupt handler routine


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


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

* Fixed init part of the controller


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


# 01489ae0603b930a2c14352c24138ca12c33a2d8 20-Nov-2007 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* Remove SubmitAsyncTransfer and SubmitPeriodicTransfer
* Added _SubmitControlRequest (almost implemented), _LinkDescriptors, _WriteDescriptorChain (basically copied from EHCI, and UHCI)
* Renamed ohci_general_descriptor to ohci_general_td, and ohci_isochronous_descriptor to ohci_isochronous_td
* Finished _CreateGeneralDescriptor and _FreeGeneralDescriptor
* Added buffer_size member to ohci_general_td instead and removed last_logical_byte_address as it looked unnecessary
* minor clean up


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


# 4ff174438e3938700c661ca1bf6b400e9138a1db 17-Nov-2007 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* Implemented _InsertEndpointForPipe
* usual clean up


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


# eaa35fb2d194dec0f63d231e4d6e32c6dc66026e 17-Nov-2007 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* Replaced snooze with spin (Thanks Axel)
* Fixing TRACE messages
* minor clean up


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


# e1abd4c8ce26c6b95bb53cd60d564cdd28300317 16-Nov-2007 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* Moved disable_interrupt right before resetting the controller
* Reworked on NotifyPipeChange
* Added _RemoveEndpointForPipe (not implemented)



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


# 3f652d19a6f8da6944bd6c8d9f9e6b797ab240b3 15-Nov-2007 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* Completed SubmitTransfer
* Added SubmitAsyncTransfer and SubmitPeriodicTransfer (not implemented)
* Removed unecessary spinlock
* Wrapped some lines to follow coding guidelines



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


# 13508e8bd034aac27c2e3271aefa04e255520d99 14-Nov-2007 Michael Lotz <mmlr@mlotz.ch>

Completely redesign the USB explore process. Replaces the scary race conditions of the previous locking mechanism and simplifies handling of device changes by a more centralized approach.
Changes are now collected during explore and notifications as well as rescans are done at once. Through this a driver is also not rescanned multiple times anymore.

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


# ca73cdd62fbfb79e407aba0b4372ac76a6be09dc 14-Nov-2007 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* Renamed some variables
* Reworking the interrupts endpoints tree parts
* Added spin_locker, semaphore, finisher thread and interrupt handler (not implemented)
* Made fInterruptEndpoints allocation dynamic instead of static
* Fixed Start method (it should be correct now)




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


# e3677c6d3c5fc8b9e83f56be784b8957d02cae5e 10-Nov-2007 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* ups :)


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


# a097d8c8ee03896405548330ffc639c6ad7db897 10-Nov-2007 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* Placed underscore to private methods like ReadReg and WriteReg
* Rewrote _AllocateEndpoint
* More work in the constructor


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


# dfd1357ad21f447892ab9a25a7b21dbc7333b1cf 20-Oct-2007 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* Rewrote part of the constructor: most of the code is ported from FreeBSD
* Usual clean up


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


# f82eb0415aab313596ee8de85004c1eed22fb3dc 14-Oct-2007 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* License changed: I've successfully contacted Jan-Rixt Van Hoye, and he gave me his bless :)
* Usual clean up


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


# 1b442f19197e315955fc4948a1e9109501abac79 13-Oct-2007 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* Revert Copyright


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


# 46a41c432c78ffede0165f705000468672bbd681 12-Oct-2007 Salvatore Benedetto <salvatore.benedetto@gmail.com>

* Clean up (removing unneeded comment)
* Renaming, fixing coding guidelines
* Re-writing AddTo method
* Removing ohci_software.h file (its content has been moved to ohci.h) but it will probably be deleted in the future.


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


# cd6fd30f63983ec5ad23de5af15fcda68dcef07b 25-May-2007 François Revol <revol@free.fr>

More tracing in ohci. Hmm, existing isn't totally consistent (prefix, ...). Oh well.


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


# f891e74eeedcfc3e05f9d488b26180ae990901b8 22-Jan-2007 Michael Lotz <mmlr@mlotz.ch>

Fixed wrong usage of object types in OHCI. The types are bitmasks, not values.

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


# 04394283560c099f04d3816286635ec6f436b709 02-Oct-2006 Niels Sascha Reedijk <niels.reedijk@gmail.com>

Implemented endpoint creation for Pipes.

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


# e26f3a113ffe311ba2f95e371dfc9646e4533898 25-Sep-2006 Niels Sascha Reedijk <niels.reedijk@gmail.com>

Now the ports are powered on and seem to work...


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


# 2159acc7d9492bb23888c5f4a8664d49ff91f371 25-Sep-2006 Niels Sascha Reedijk <niels.reedijk@gmail.com>

Implemented most of the roothub.

There remains only one issue: reading the Port registers seem to return a bogus value (0). I need to find out what's causing it.



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


# bcc2d1b69a3c9b2a7951b894ad3e5579dcbaffa1 15-Sep-2006 Michael Lotz <mmlr@mlotz.ch>

* Implemented usable thread synchronisation for UHCI and EHCI.
* Cleaned interrupt handlers for both busses, too.
* Fixed memory leak of the queue head stray descriptors in EHCI.
* Fixed warnings about assigning NULL to the module flags field.

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


# 915367e31aea39fe40ae3239dc7fcc738aebf039 31-Aug-2006 Niels Sascha Reedijk <niels.reedijk@gmail.com>

Wrote the initialisation routine of the host controller
* Started cleaning up the style (WIP)
* I'll slowly phase out ohci_software.h, since it is BSD legacy
* Cleanup other BSD inspired naming. I like full names.


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


# 2761c5ae558dccbeb2f9f088ca1011824c823612 30-Aug-2006 Jérôme Duval <korli@users.berlios.de>

replaced with PCI.h definitions, added PCI_usb_ehci


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


# 34314b980333eb800f399d2970743f9b88d0bbf8 28-Aug-2006 Niels Sascha Reedijk <niels.reedijk@gmail.com>

First commit to show that work on the ohci bus has restarted.
It doesn't do anything yet, but it allocates the io registers properly and
now the values that are returned when reading it make sense.

More to come...


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


# 9e857d24ca41743874f6b3c08bb0c35f53df5763 25-Aug-2006 Michael Lotz <mmlr@mlotz.ch>

* Adding skeleton EHCI driver. Some parts filled from the specs and the UHCI driver.
* Corrected some errors I found while reading UHCI.

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


# 5b0ec61f972bca106675a66c37354e38efb8016d 19-Aug-2006 Michael Lotz <mmlr@mlotz.ch>

* Added USB API Version 3. It's put into USB3.h while the v2 API resides in USB2.h. USB.h just includes USB2.h for now.
* Rewrote both headers on the way.
* The usb module now exports both, the v2 and v3 module_info.
* Changed the internals of the USB Stack to give out usb_ids instead of opaque handles to internal classes.
* Cleaned up some more of the Stack by moving members into other classes and removing unused stuff.
* Updated the usb_raw driver from v2 to v3 API.

Since both usb_hid (which still uses the v2 API) and usb_raw (which now uses the v3 API) work, I'd call it a success ;-)

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


# 67c3d9ebe54b5344d58f06011314440f214528bd 11-Jan-2006 Axel Dörfler <axeld@pinc-software.de>

Fixed building of the UHCI and OHCI modules [reported by AndyBe].


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


# 4097611c9fff4cf60e79caf2c1d531f3a383828e 26-Sep-2005 Marcus Overhagen <marcusoverhagen@gmail.com>

Fixed the bugs I introduced earlier. original code was ok.


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


# 2239adfca3281c130810330b56527cfe18b7afbb 23-Sep-2005 Marcus Overhagen <marcusoverhagen@gmail.com>

properly mask off bits


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


# b21413013bac141e5d97e922716bf6efbfafa401 23-Sep-2005 Marcus Overhagen <marcusoverhagen@gmail.com>

it's not allowed to spin 250ms


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


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

Quick merge of my development branch with mainline (for SVN switch).
The OHCI stuff was done by Jixt (thanks)./installusb
All is still very much work in progress

Patches applied:

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

* Niels.Reedijk@gmail.com--nielx-2005/usb-busses--development--0.1--patch-1
Set the PORT_STATUS_LOW_SPEED flag correctly (using the register bitflag for low speed devices, instead of the proper lowspeed flag)

* Niels.Reedijk@gmail.com--nielx-2005/usb-busses--development--0.1--patch-2
Clean up transfers when they're done

* Niels.Reedijk@gmail.com--nielx-2005/usb-busses--development--0.1--patch-3


* Niels.Reedijk@gmail.com--nielx-2005/usb-busses--development--0.1--patch-4


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


* Niels.Reedijk@gmail.com--nielx-2005/usb-busses--development--0.1--patch-6


* Niels.Reedijk@gmail.com--nielx-2005/usb-busses--development--0.1--patch-7
Remove obsolete ehci.c

* Niels.Reedijk@gmail.com--nielx-2005/usb-busses--development--0.1--patch-8


* Niels.Reedijk@gmail.com--nielx-2005/usb-busses--development--0.1--patch-9
Completed memory allocation + initialization

* Niels.Reedijk@gmail.com--nielx-2005/usb-busses--development--0.1--patch-10
First attempt at performing control transfers - failed miserably

* Niels.Reedijk@gmail.com--nielx-2005/usb-busses--development--0.1--patch-11
Trying to read a 16bit value into a 8bit integer, stupid

* Niels.Reedijk@gmail.com--nielx-2005/usb-busses--development--0.1--patch-12
nicer way of getting the base io address

* Niels.Reedijk@gmail.com--nielx-2005/usb-busses--development--0.1--patch-13
Take over control from BIOS

* Niels.Reedijk@gmail.com--nielx-2005/usb-busses--development--0.1--patch-14
Revert change for disabling USB BIOS support


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