Instead, one needs to execute the ATA command 0xa0 (PACKET) using
a normal ATA PIO FIS and in addition fill the SCSI CDB into the ACMD
space to transfer the ATAPI PACKET command.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25597 a95241bf-73f2-0310-859d-f6bbb57e9c96
Gerald Zajac. Thanks a lot!
* Also put it on the image by default.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25583 a95241bf-73f2-0310-859d-f6bbb57e9c96
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
and {Read|Write}Config() that get a PCIDev structure, added a FindDevice()
method.
* Made sPCI a global gPCI, since the new PCI root/device modules will be using
it directly.
* Moved the functionality of pci_find_capability() into a new
PCI::FindCapability() method.
* Removed the redundant "Pci" from PCI::{Read|Write}PciConfig(), and
GetNthPciInfo().
* Added PCI::_NumFunctions() that returns the number of functions instead of
doing it manually every time.
* Tried to honour the 80 character limit, as well as other coding style things
a bit more.
* Added '_' prefix for private method names.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25575 a95241bf-73f2-0310-859d-f6bbb57e9c96
maintain our fReceiveNext member, or else the other endpoint never gets its
data acknowledged. This fixes the ssl_closure test of the neon test suite,
all tests finally go through.
* Use is_writable() in SendData() instead of checking all the states manually.
* Also bail out when the endpoint stops being writable when we were waiting
for it to become writable.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25573 a95241bf-73f2-0310-859d-f6bbb57e9c96
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
local, and is about to close.
* This fixes several race conditions with the neon test suite that relied
on TCP sockets being gone after close, and their port being available again
(note, that is not what the TCP spec says, anyway, but it makes sense to
do so, since we already removed the time wait state for local connections).
* The endpoint manager is now using a mutex instead of a semaphore.
* TCPEndpoint::_Close() now notifies the senders/receivers instead of
_HandleReset().
* Besides ssl_closure(), all tests of the neon test suite seem to pass now.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25564 a95241bf-73f2-0310-859d-f6bbb57e9c96
Please note, though, that both of these file systems currently don't compile and
are not part of the image.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25561 a95241bf-73f2-0310-859d-f6bbb57e9c96
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
supports up to 15 ports and QEMUs OHCI emulation uses a port count of 10
for example.
* Update the hub code to remove the hardcoded 8 port limits.
* Some other code to enumerate the USB structure I had laying around
(available internally only, might be added as a public API some time).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25555 a95241bf-73f2-0310-859d-f6bbb57e9c96
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
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
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
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
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
* 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
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
* Small style changes.
* Currently ifdef'ed out potentially correct changes, that break Neon
tests which otherwise succeed. Axel will investigate this further.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25530 a95241bf-73f2-0310-859d-f6bbb57e9c96
* 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
_WaitForEstablished() must also accept states implying that the state
has been established at some point. Fixes bug #2172.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25526 a95241bf-73f2-0310-859d-f6bbb57e9c96
Changed condition variables so that it is allowed to block (e.g. lock
mutexes etc.) between Add() and Wait(). This fixes#2059, since the
block writer used them this way and could thusly fail to wait for a
condition variable, causing a temporary stack object to be used past its
lifetime.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25525 a95241bf-73f2-0310-859d-f6bbb57e9c96
that arrived before the shutdown can still be read.
* Debug some more returns.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25514 a95241bf-73f2-0310-859d-f6bbb57e9c96