Commit Graph
100 Commits
Author SHA1 Message Date
Michael Lotz b7a5b10ad1 Synced with r22047 of main version. Thanks Jerome for noticing.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22057 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-26 08:47:33 +00:00
Michael Lotz d570f3bf79 * Don't leak buffers when reallocs fail
* Always check the return of the resize function
* Handle resize errors gracefully and ensure that the message stays intact
* Don't crash when printing a message that contains a field with no items (unlikely but possible in low memory situations)
* Fixed renaming fields - was completely broken and would have missed up field names and contents
* Some cleanup

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22047 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-23 21:17:44 +00:00
Michael Lotz 8b39e73209 Print class, subclass and protocol field as hex numbers. This fits general usage and documentation.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22009 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-18 18:45:49 +00:00
Michael Lotz ff9e2d0cf7 Correct printing generic descriptors (the length includes the two other struct fields). Fixed warnings.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22008 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-18 18:39:29 +00:00
Michael Lotz b70ffa1a18 Fix off by one error in FontDemo. Should fix bug #1393.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21934 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-13 19:27:17 +00:00
Michael Lotz d3ce129ef3 Use swap_data() when unflattening a swapped message. It fits this purpose perfectly as it does conversion based on the type code. Now known type like B_INT32_TYPE will get swapped automatically.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21913 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-12 22:27:25 +00:00
Michael Lotz ed8dc403a9 * Changed realloc() again to leave the old block intact (obviously...)
* Check for failed allocations and set errno correspondingly in malloc(), calloc(), memalign() and realloc()

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21911 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-12 16:23:55 +00:00
Michael Lotz c954d33405 * Apply more sane canceling logic to EHCI too
* Remove the leftover user_area - this is handeled inside the Transfer class by now

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21906 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-12 12:54:16 +00:00
Michael Lotz d2e77702cb Change the way notify hooks and rescans are handeled. The rescans are now delayed to after all notify hooks are called (like in BeOS).
This also ensures that the rescans do not happen while the devices are not yet added or already removed.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21905 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-12 12:04:41 +00:00
Michael Lotz 154860eb4b Port endian conversion fixes to build version of BMessage.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21904 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-12 11:47:11 +00:00
Michael Lotz e72c1f9cb1 Avoid a crash in realloc() if the allocation of the new block failed. Return NULL instead.
Someone please review. Should errno be set to ENOMEM here?

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21903 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-12 10:51:56 +00:00
Michael Lotz a156e74ad7 * Changed swap_data() to behave like the R5 version
* Added a todo about unsafe access of the buffer
* Removed some types from is_type_swapped() to exactly mirror R5

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21902 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-12 10:42:40 +00:00
Michael Lotz 0127fb779d * Respect endiannes for item lengths inside swapped BMessages
* Also swap the flattened size when creating the read buffer
* Define specialized byte_swap()s for unsigned types too so that type_code and the like get swapped correctly

This should fix bug #1371.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21901 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-12 10:32:21 +00:00
Michael Lotz 16298429e5 Change the way UHCI does things. Restructured processing of transfers in the finisher thread:
* Transfer removal is now done only from the finisher
* Processing is only done after the transfer has been removed from the list
* Canceling transfers only sets a flag so the finisher can remove the transfer
* The callback at cancel is done synchronously though

This fixes quite a few race conditions where transfers were processed while they where already removed. It could happen before that callbacks would have been called twice or freed descriptors/callback buffers were accessed.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21882 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-10 07:10:14 +00:00
Michael Lotz 62db84dc99 Made FPS counter of GLTeapot more scalable. Also made the file style guide compliant.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21782 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-01 18:00:46 +00:00
Michael Lotz 63218bfd3f Use a flag to cancel issuing new transfers instead of relying on a B_CANCELED. This should ensure that the hid driver does not use the device after the remove hook completes. Untested...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21748 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-30 12:54:20 +00:00
Michael Lotz 8040388202 Initialize the endpoints of all interfaces of the configuration to be set. Fixes stuff that needs more than one interface at the same time (ACM modems for example).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21741 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-29 21:46:10 +00:00
Michael Lotz 7ca97e3548 Patches by Salvatore Benedetto to fix changes made by me and also the underlaying problem that caused high CPU usage in the isochronous finisher thread. Also includes patches to support isochronous support through USBKit / usb_raw. Thanks!
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21636 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-17 20:00:53 +00:00
Michael Lotz ba416ad375 Removed the app signature from FileType again and add a comment why there is none.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21519 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-06-27 23:18:11 +00:00
Michael Lotz 7f9939f06d Made a failing update_mime_info() non fatal. It seems that the BeOS version of mimeset does the same. Tested with FileType-F a mimeset under R5 does not quit with an error. This fixes the build on R5 and should therefore fix bug #1280.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21518 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-06-27 22:59:00 +00:00
Michael Lotz 8374316088 Actually initialize the list of first and last isochronous transfers.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21517 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-06-27 21:47:23 +00:00
Michael Lotz 2172794336 Fixing bug #1284.
* Rearranged isochronous finishing to happen from within the finisher thread
* Removed the separate isochronous finishing thread

Since the finisher thread blocks when no transfers are complete this should bring down CPU load.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21516 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-06-27 21:40:54 +00:00
Michael Lotz da0f338e87 * Ported over a simplified version (no message sending) of the current BMessage implementation to the build libbe
* Also ported over the new MessageAdapter class
* Removed old BMessage implementation prototypes that apparently were left in the private folder

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21515 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-06-27 20:33:51 +00:00
Michael Lotz 5dc45eb4fe * Unified handling of different BMessage formats into MessageAdapter.cpp
* Removed r5_message.cpp and dano_message.cpp accordingly
* Also moved out KMessage handling from Message.cpp to MessageAdapter.cpp
* Fixed some minor style issues in Message.cpp

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21514 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-06-27 20:22:53 +00:00
Michael Lotz ac9d119566 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
2007-06-25 19:51:12 +00:00
Michael Lotz 16c1a4e653 Uncomment signature and flags of FileType add-on to fix bug #1280.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21496 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-06-23 21:48:34 +00:00
Michael Lotz 687e327bac Reworked the handling of periodically updated poses (currently only ones with a volume space bar):
* Addad global list where poses that need periodic updates can be registered with a callback
* Use this mechanism for poses with a volume space bar
* Create only one BVolume when the BPose is created for a volume, instead of every time the free space is calculated
* On Pulse() the global list is used to update all of the registered periodic update poses
* As the poses know their volume, it is no longer necessary to use a BVolumeRoster to loop through each volume on each Pulse()
* Removed the now superfluous SendNotices() mechanism
* Removed corresponding watching / handling of these notices in BPoseView

The BPoseView did a linear search for each volume pose on each Pulse() before. What's more it did this once for each mounted volume as it did get one individual notice for each of them. To get these volumes a BVolumeRoster was used to loop through the volumes, but then the BPose did still create a new BVolume to actually calculate the free space! I'm surprised that it did not suck away more performance with this method...

Anyway, this should bring down BVolume construction and update overhead down to a minimum and hopefully fix ticket #1247.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21462 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-06-19 09:33:29 +00:00
Michael Lotz d081ee7b5b Remove now unused fxp directories. BTW: is there a reason to have those drivers under "haiku_name/dev/freebsd_name/*" instead of directly under "haiku_name/*"?
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21091 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-05-09 14:25:17 +00:00
Michael Lotz 34cbbba798 * 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
2007-05-07 17:57:30 +00:00
Michael Lotz 562328e70a Fixed wrong cancelling algorithm. This is what you get when you "rework" an existing function without thinking it through again... Thanks J Jerome for noticing\!
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21058 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-05-07 16:58:00 +00:00
Michael Lotz 4b3d0fcfda Implemented transfer cancelling for EHCI by reworking the previously unused CancelPendingTransfer() into CancelQueuedTransfers() with the pipe based semantic.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21044 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-05-06 15:55:26 +00:00
Michael Lotz 3dc77d1dc9 Prepare cancelling transfers from the stack side. The actual handling will happen in the HCD modules where transfer management has to be done anyway.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21043 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-05-06 15:22:12 +00:00
Michael Lotz a49633c222 * Moved around some initialization to avoid problems when deleting incompletely created objects
* Also move waiting for the first explore to run through out of the constructor to reduce delays
* Remove the old device when a new one is connected to the same port - this could happen when you very quickly un- and replug a device

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21042 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-05-06 15:17:00 +00:00
Michael Lotz 3f2288a41b Fixed wrong deallocation of device resources which caused KDL when unplugging devices with more than one interface.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21038 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-05-06 12:48:38 +00:00
Michael Lotz 2f470aec1c Commiting an example SCSI driver written to understand the new SCSI API. But the module isn't used even when installed and linked as a boot driver.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20951 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-05-01 13:06:57 +00:00
Michael Lotz 2f142f6139 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
2007-03-26 19:55:37 +00:00
Michael Lotz 3ad50dab2e Fixed design flaw in the UHCI fragment implementation and a memory leak both introduced in the last commit.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20418 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-03-25 11:43:09 +00:00
Michael Lotz 2852a6db8f Removed transfer buffer in usb_raw driver. The user provided buffers are now used directly which saves two memcpy operations and removes the 4K transfer length restriction from the USBKit.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20417 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-03-25 08:54:22 +00:00
Michael Lotz 145461d547 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
2007-03-25 08:49:13 +00:00
Michael Lotz 4771489e89 Changing from a stack allocated result struct to a heap allocated one. This removes the possibility that a timed out transfer that later still triggers the callback writes into invalid stack space.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20004 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-01-29 01:18:17 +00:00
Michael Lotz a94a8358e8 With plain R5 kernels, the usb module image is apparently loaded twice (once for each exported module), while for BONE kernels and up the module is only loaded once.
So the mechanism with the global variable did not work for R5 what caused two USB stacks and host controller drivers to be active concurrently which resulted in completely unpredictable results.
This kind-of-inelegant fix was all I could come up with, if someone has a better idea please send it this way.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20003 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-01-29 01:12:40 +00:00
Michael Lotz 011a5431dd Corrected include directories for non-Haiku platforms. USBKit.a can now be built for R5 too.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19974 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-01-26 16:57:34 +00:00
Michael Lotz 03d79ead32 Added USBVersion() and MaxEndpoint0PacketSize() infos to the output.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19971 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-01-26 14:54:08 +00:00
Michael Lotz 5f1534dbf3 Obviously submitting the requested generic index is necessary for this function to work...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19970 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-01-26 14:37:59 +00:00
Michael Lotz e40b5c0d59 Fixed a wrong index that could cause crashes with devices containing generic descriptors
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19969 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-01-26 14:36:03 +00:00
Michael Lotz 3a630146d2 * Minor cleanup
* Fixed wrong wording in comment

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19915 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-01-23 16:44:37 +00:00
Michael Lotz a0398f333c * Added configuration and interface strings to the output
* Added printing generic descriptors from 2000 sample code archive
* Added license header
* Adjusted style

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19914 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-01-23 16:40:36 +00:00
Michael Lotz 3c0b8e7fff Commiting reimplemented USBKit that is compatible with the old Be sample code version.
It is supposed to be cleaner and more object oriented. It also adds some features (like a string getter for the interface) that were appearantly left out in the Be implementation.
It is currently built as a small static library from src/libs.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19913 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-01-23 15:55:34 +00:00
Michael Lotz f891e74eee 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
2007-01-22 15:19:01 +00:00
Michael Lotz 57205205ed Added the EHCI module to the image.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19862 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-01-18 22:40:50 +00:00
Michael Lotz a3dfc2743a * Implemented clearing port enabled change
* Fixed build with debug output turned on
* Cleaned up the uhci_hardware header a bit

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19861 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-01-18 22:28:34 +00:00
Michael Lotz c4cce7277c * Revised locking of the USB stack classes
* Implemented the Hub destructor to properly free all of its child devices
* Added FreeDevice() and FreeAddress() to the BusManager class
* Added timeout to ControlPipe::SendRequest()
* Changed how the recursive device reporting works so that it respects the support descriptors of a driver
* Enabled driver rescanning for drivers that are not currently loaded but still registered (R5 only as the devfs function is yet missing from Haiku)
* Changed the way usb_ids are handed out so that free ones are reused instead of just running out of ids
* Fixed driver registration so that each driver is only added once (and devices are reported once per driver)
* Unified debug output and fixed some warnings with debug output turned on
* Fixed some style issues and removed stray whitespaces

Overall the USB stack should now be much more reliable. It should not crash on disconnects anymore and repluging of a device should be noticed by all drivers.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19860 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-01-18 22:25:02 +00:00
Michael Lotz e323965be8 * Properly initialize the whole mouse_movement structure to 0 instead of only some fields
This fixes the random horizontal scrolling that happened with one-wheeled USB mice like mine or Marcus'.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19820 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-01-15 22:16:10 +00:00
Michael Lotz 9c8cdfd89e * Reworked transfer queuing so that each transfer is grouped with it's own queue head
* Fixed max packet size under bandwidth reclamation
* Increased the thread priority of the finisher thread so that USB input devices should be more responsible under load
* Added a comment to clarify the queue concept

The queue management should now be less complex and less error prone.
The max packet size is now set to 64 bytes which is the maximum size allowed. Transfers that caused babble errors before should now work.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19738 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-01-08 03:16:29 +00:00
Michael Lotz a8be7d1ea3 * Added some more debug output to the hub code
* Report and clear yet unhandled port changes in hubs
* Fixed the way devices that vanish on port reset are handled
* Added a status field to the memory allocator and check it creating it

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19732 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-01-06 18:10:15 +00:00
Michael Lotz 955dc88f0c * Fixed spinlock usage in EHCI and UHCI drivers
* Fixed UHCI to allow for empty transfer buffers
* Extended the check for still linked transfer descriptors when removing a chain

There remain UHCI bugs that will cause transfers outgoing transfers to fail. I'll have to review / rewrite the UHCI driver.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19730 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-01-06 18:05:05 +00:00
Michael Lotz 4ad4c6c1b8 ConvertBits() now checks the out of range case before reading/writing the buffers. Previously it was possible to read/write one line after the buffers end because the values were not checked after line advancement. This fixes the crashing bug #850. It however reveals another bug that brings the app_server into an endless loop when using the TextFader screensaver.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19626 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-12-26 13:22:25 +00:00
Michael Lotz f3001f6a1d Corrected comments. It's a 0 byte, not a NULL pointer.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19625 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-12-25 22:02:01 +00:00
Michael Lotz 3379428150 * Made UTF8 functions overflow safe
* Unified UTF8CountChars and UTF8ToLength and removed the latter
* Rewrote UTF8CountBytes to use the more safe algorithm from UTF8CountChars
* Removed the unsafe count_utf8_bytes() function

This should fix bug #839. Marcus can you please review?

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19624 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-12-25 21:58:00 +00:00
Michael Lotz 8449c78396 Fixing build of the printing package for BONE and hopefully R5 too.
Now printing to that old HP LaserJet 2100 over an even older LPR print server from R5 with the PCL5 driver and LPR transport...

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19374 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-11-25 20:06:18 +00:00
Michael Lotz cf0656184d Fixing the settings file naming.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19079 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-10-18 23:35:06 +00:00
Michael Lotz a7082940ce Adding ipw2100 driver for Intel(R) PRO/Wireless 2100 devices.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19078 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-10-18 23:15:44 +00:00
Michael Lotz 4e9efbcf24 * Moved and unified the explore threads from the BusManager to the Stack
Now there is only one explore thread instead of one per BusManager.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18981 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-09-29 19:33:03 +00:00
Michael Lotz 099dab0753 * Fixed device creation. No pipes for device endpoints are created and the initial handle of all endpoints is 0.
* The endpoint pipes of a configuration are now created when the configuration is actually set.
* Implemented an Unconfigure() function that tears down any pipe that was created for that configuration.
* Implemented the device destructor that unconfigures and frees the resources allocated for the various usb_*_info structures.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18952 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-09-27 19:09:01 +00:00
Michael Lotz 00f6fab931 * Implemented a notification method for BusManagers so that they can be notified of pipe changes (creation, destruction, changed settings).
This is necessary in OHCI and will probably be used in EHCI also to keep one endpoint construct for each pipe open instead on creating and deleting it for each transfer.
* Pseudo implemented set_pipe_policy for isochronous pipes that makes use of the new notification system.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18945 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-09-26 20:51:31 +00:00
Michael Lotz a183e86663 Oops, this was the very conservative value. Testing with my laptop (that has a slow EHCI controller) reveals that we need some more room here.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18930 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-09-25 19:13:59 +00:00
Michael Lotz 4330ef22d5 * Added retries to the PhysicalMemoryAllocator. Memory is allocated and freed at a very high frequency, so low memory conditions shouldn't last very long.
* Added a separate thread for cleaning up EHCI transfers. This makes it possible to actually always wait for the async advance interrupt without hindering execution of transfers.
This pushes performance again and fixes the bug I introduced in the last change, that we could free yet cached descriptors when a previous async advance timed out.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18929 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-09-25 18:52:50 +00:00
Michael Lotz 17f83b219d * Switched from the old v2 callback status codes to the new v3 codes
This means that the usb_callback_func now takes a status_t instead of a uint32 status.
Also the error codes are now different. I don't see this as a real problem in binary compatibility, as the status codes were never really documented and most drivers just assumed that a nonzero status meant an error.
Source compatibility breaks for callback functions and error defines. I fixed (hopefully) all places in the tree that are currenty included in the image and affected by the change.
* Corrected error reporting in UHCI and EHCI using the new status codes.
* Fixed a memory leak in EHCI where the async advance interrupt was not triggered in time.
* Fixed another race condition in usb_raw that could cause a crash when a device is removed while a transfer is pending.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18916 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-09-24 20:17:56 +00:00
Michael Lotz 8a278a1bb7 * Fixing my previous attempt at fixing cookie handling. Device addresses cannot be used, since there may be devices with the same address across different busses. A linked list of usb_driver_cookies is maintained now that relates devices and cookies.
* Fixed endpoint halt clearing. The data toggle has to be reset when we clear a stall.
* Now using up to B_PAGE_SIZE * 4 sized buffers in EHCI. They are split automatically by the host controller. This further pushes throughput.
* Optimize memory allocator settings for the above case. Enlarging it's managed space to 1MB
* Ignore the transaction error bit in EHCI. It is only of informational character as it also idicates errors that were recovered automatically. If an unrecoverable error occures, other bits will indicate this.
* Fixed some more print formats in debug output.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18915 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-09-24 15:30:04 +00:00
Michael Lotz 4205612012 * Made usb_raw more robust and correct when handling rescans and adding/removing devices
* Fixed warnings when debug output is on
* Disabled debug output

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18913 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-09-23 17:28:34 +00:00
Michael Lotz 90b9fb4fbc * Fixed notify cookie handling. There is not one cookie per device, but one per device/driver combination
* Fixed SetFeature/ClearFeature/GetStatus for interfaces by adding the respective interface number
* Added driver rescanning mechanism (taken from bin/rescan)

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18912 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-09-23 17:24:23 +00:00
Michael Lotz 7145ff1705 * Implemented compatibility workaround for BeOS to be able to write user memory from the kernel finisher thread
This fixes crashing of the USB Mass Storage driver under R5.  It is fully working there now.
I hope to be able to do this more cleanly under Haiku though.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18894 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-09-20 21:12:51 +00:00
Michael Lotz 48080d8c54 Quick workaround for a appearantly common problem (getting the initial state of a hid device hanging the system).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18858 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-09-16 00:39:58 +00:00
Michael Lotz bcc2d1b69a * 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
2006-09-16 00:06:04 +00:00
Michael Lotz 6f52af5f5c Adding compatibility headers to enable R5 build of the USB stack again.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18856 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-09-15 20:11:20 +00:00
Michael Lotz dff0c634db * Implemented transfer finishing in EHCI
* Implemented actual length calculation in EHCI
* Implemented bulk transfers in EHCI
* Implemented queue freeing in EHCI
* Added extended buffer pointers to the EHCI structs, necessary when the controller supports 64bit
* Fixed debug output and removed warnings due to wrong print format

Control and bulk transfers are now working nicely for EHCI. This means that I can now get pictures from my camera with USB 2.0 speed. Note though that many things still are unimplemented (isochronous transfers, split transactions, interrupt transfers, queue chaches per pipe, ...). But it's certainly a nice step forward :-).

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18855 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-09-15 19:44:31 +00:00
Michael Lotz f452f9dc78 * Implemented most qTD and qH functions for EHCI async transfers.
* Implementing control and bulk (async) transfers. They don't work yet though.
* Corrected the legacy support handling in EHCI
* Fixed the bit mask for total bytes in qTDs and added the data toggle bit
* Changed the boolean low speed flags to usb_speed enum that allows for low, full and highspeed

Also wrote a memory allocator that takes over memory management from the stack. It is similar to a buddy allocator. This does on the one hand remove some ugly code from the stack and is on the other hand far more scalable than the previous free list approach. This scalability is needed for proper EHCI support where buffers can go up to a size of 5 pages. The allocator is not perfect and it's memory overhead is quite high compared to the managed memory (depends on the managed block sizes), but it's quik and works well so far.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18849 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-09-14 21:59:14 +00:00
Michael Lotz 8001b0c614 This subtle error (introduced in r18656) caused bulk pipes to stall.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18713 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-08-30 21:54:29 +00:00
Michael Lotz 6b0ee87455 Accidently forgot to remove debug output define again.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18712 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-08-30 19:31:21 +00:00
Michael Lotz c773d729dc Fixed wrong length of string descriptors.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18711 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-08-30 18:45:29 +00:00
Michael Lotz 8fedfdfcf8 * Rewrote some stack internals (again). Everything is now created using a parent object that shares the BusManager and Stack information to reduce individual constructors.
* Don't inherit Device and Interface from pipes anymore. The device has a default pipe member now.
* Since the parent of each Object is now known, we can send control messages using the default pipe of the device from all attached elements (pipes and interfaces).
* Fixed the generic {Set|Clear}Feature() and GetStatus() calls to include the endpoint address for pipe specific requests.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18710 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-08-30 17:59:23 +00:00
Michael Lotz 641309e8d0 Obviously forgot this in the last commit...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18701 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-08-29 18:27:00 +00:00
Michael Lotz 1bad4a4ef9 * Fixed queue_isochronous in USB3.h to match the actual v3 API.
* Changed the usb module accordingly. Isochronous is all still left ToDo though.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18700 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-08-29 18:25:34 +00:00
Michael Lotz ffe3f107c4 * 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
2006-08-28 00:43:10 +00:00
Michael Lotz 01595708f3 * Changed EHCI register access from port to memory mapped io (which is required)
* Added individual register operations for operational and capability registers
* Added resetting the host controller which appearantly actually works

Note that you shouldn't install the ehci module if you want uhci to work.
It disables the companion host controller drivers (uhci and ohci) because it takes port ownership and does not yet give it back for low and fullspeed devices.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18648 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-08-26 15:48:41 +00:00
Michael Lotz 9e857d24ca * 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
2006-08-25 21:43:21 +00:00
Michael Lotz cad14954c8 Adding the USB stack and the HCDs to the image.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18615 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-08-24 20:25:29 +00:00
Michael Lotz 02ce23a1ad * 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
2006-08-24 20:18:29 +00:00
Michael Lotz 5cbcad2217 Enable non Haiku target build. You will need a v3 USB bus_manager though (>= Dano, USB Patches or Haiku).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18578 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-08-23 04:08:54 +00:00
Michael Lotz cef5199427 As Jerome put out correctly, I have forgotten to commit the v3 changes to usb_raw.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18577 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-08-23 03:59:41 +00:00
Michael Lotz 1e8c0b3649 * 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
2006-08-20 01:07:15 +00:00
Michael Lotz 5b0ec61f97 * 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
2006-08-19 23:09:05 +00:00
Michael Lotz c3157a2749 Created a compatibility header for the USB Stack so that it can be compiled on BeOS too. How to do this correctly? I don't think that this stuff should go to HaikuBuildCompatibility.h as it's kernel stuff.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18538 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-08-19 13:18:03 +00:00
Michael Lotz 5591ec214e Use the new usb_ioctl to get the logical device name for publishing devfs entries in usb_raw.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18516 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-08-16 20:10:49 +00:00
Michael Lotz 64f3c06503 Implemented a usb_ioctl to retrive the logical device name (like 0/0, 0/1/0 or 1/hub) that will be used by usb_raw to publish the according devfs entries.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18515 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-08-16 20:07:24 +00:00
Michael Lotz 8c76868794 Adding usb_raw driver. Written from scratch, but kept the data structures and status codes to be compatible with existing apps. Tested OK with the PTP plugin for Exposure.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18512 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-08-15 23:36:18 +00:00
Michael Lotz bf9d24edd2 * 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
2006-08-14 20:54:57 +00:00
Michael Lotz 49617128ca * Fixed data toggle handling. It must be taken after the transfer finished and from the last transmitted transfer descriptor (which in case of a short packet is not neccessarily the last descriptor of the chain)
* Moved convenience endpoint requests from ControlPipe to Pipe

With this change, bulk transfers are fairly stable now. See here for evidence: http://haiku.mlotz.ch/haiku-usb01.png ;). Those are pictures from my Canon Digital Ixus 750 downloaded with Exposure using the PTP plugin. I of course navigated Haiku with my USB Logitech iFeel mouse which works nice since some days.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18510 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-08-14 19:26:51 +00:00
Michael Lotz d83f3c1a45 * 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
2006-08-13 14:48:10 +00:00
Michael Lotz f1020a6c49 * 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
2006-08-12 21:07:34 +00:00