Commit Graph
100 Commits
Author SHA1 Message Date
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
Michael Lotz 8be9a75c4e Forgot this in my last commit.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18497 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-08-12 12:50:53 +00:00
Michael Lotz b8c6a85136 * Implemented most of the USB module public API (using opaque handles like in R5 will change that to using IDs later)
* Fixed the UHCI root hub and the hub implementation. Interface and endpoint descriptors are part of the configuration descriptor, they cannot be requested individually.
* Added simple support for interrupt and bulk transfers to UHCI. It's enough to get my USB mouse working to a stable and usable degree.
* Cleaned up and reworked some other parts, added allocation checks and such.

Yes, my internet connection is back up :)

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18496 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-08-12 12:49:45 +00:00
Michael Lotz 852c3506f5 Check the reallocation in usb_hid. Use B_NO_MEMORY instead of B_ERROR in other checks.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18495 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-08-12 10:14:55 +00:00
Michael Lotz 4872c00b87 Fixed usage of realloc. Fixes crashing bug of usb_hid under Haiku.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18494 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-08-12 09:42:50 +00:00
Michael Lotz 8ba81a767e Continuing work on the USB stack and UHCI driver.
* Moved the transfer descriptor management into the UHCI class
* Added locking to the driver and the queues
* Added service thread for finished transfers (to be implemented correctly)
* Cleaned up some headers and added myself as author

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18245 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-07-23 22:21:34 +00:00
Michael Lotz 49c9f0ba0d Renaming the USB Mass Storage driver from "usb" to "usb_scsi". There is a naming conflict with the USB bus_manager.
The bus_manager files were compiled but were not used for linking the "usb" bus_manager module.
I only found this out by looking at the binary and finding strange strings that were for sure not in the USB stack.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17679 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-05-31 20:40:40 +00:00
Michael Lotz d30ac125dd Respect the transfer direction. Control transfers with buffers work in both directions now.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17643 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-05-29 23:36:37 +00:00
Michael Lotz 61119116a2 Fixed the debug output of the short descriptor and replaced remaining deviceNum with deviceAddress as that's what it is.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17640 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-05-29 22:24:29 +00:00
Michael Lotz b7a062b5ad * Calmed down debug output a bit
* Removed all friends in the USB stack classes (as they are not needed)
* Added max packet size to the pipe and respect it on transfers
* Use pipes with the same speed as the device

Device descriptors can now also be retrieved from full speed devices and devices with a packet size of more than 8 bytes. The devices are also correctly initialized to their default configuration.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17639 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-05-29 22:09:21 +00:00
Michael Lotz 96da8285b0 Applying style to remaining classes. No functional change.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17624 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-05-28 23:29:06 +00:00
Michael Lotz 64312bc94c * Moved the transfer descriptor handling to separate functions
* Added debugging facilities
* Implemented the data stage of control messages

The device descriptor can now be successfully retrieved. Now interrupt, bulk and isochronous data transfers need to be implemented.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17623 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-05-28 20:33:25 +00:00
Michael Lotz 64d49b54fc And another forgotten header. Sorry to pollute the logs :-).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17617 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-05-28 11:12:34 +00:00
Michael Lotz 30c18ecbf6 Forgot these two in last commit.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17616 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-05-28 11:11:28 +00:00
Michael Lotz 11bd72c28c * Cleaned up / applied style to the Pipe class
* Introduced a Queue class that manages itself and where transfers are attached to
* Added "set feature" to the roothub and use it to enable the port of new devices

It is now possible to successfully detect new devices and send at least one transfer descriptor to them.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17615 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-05-28 11:09:43 +00:00
Michael Lotz 26f34d1c06 * Cleaned up / applied style to the BusManager class
* Fixed some copy&paste errors I introduced earlier
* Removed the "one UHCI bus only" limit
* Other fixes

The hub now sees when a new device is connected but failes when getting its descriptor.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17611 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-05-27 19:33:30 +00:00
Michael Lotz 76e69839f7 The framelist was allocated in the object which caused the host controller to fail. Also the root hub is now setup after the host controller is started since new devices are created which use transfers to discover their parameters. The controller should now be correctly initialized and stay up.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17610 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-05-27 16:02:54 +00:00
Michael Lotz 5430d867b4 The buffersize variable was not reset after the loop which caused the UHCI bus driver not to be found. Changed debug output a bit.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17609 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-05-27 15:52:52 +00:00
Michael Lotz 12b0511534 Picking up work on the USB stack. First of all adapting the style of the UHCI driver. Not yet working any more than until now.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17607 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-05-27 13:07:11 +00:00
Michael Lotz f2274165dd Changing AddMessage() and ReplaceMessage() to use R5 message format to ensure compatibility.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17322 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-05-04 19:42:09 +00:00
Michael Lotz 3279f3b055 Detect recursions of UpdateIfNeeded. This is necessary as we may call hook functions (FrameResized(), FrameMoved()) that in turn could call UpdateIfNeeded again. This is the case for DarkSite which uses GetMouse() inside FrameResized(). This fixes resizing DarkSite and probably fixes bug 539 too.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17314 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-05-03 22:30:52 +00:00
Michael Lotz 035eafc5f3 We should never mess with fQueueLink as it's maintained by the BMessageQueue. Small simplification.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17313 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-05-03 22:23:09 +00:00
Michael Lotz 17fee3eab7 Removed the extra info struct in the cpu_ent union and made said union a struct instead. Same as r1137 in NewOS.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17273 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-29 22:38:19 +00:00
Michael Lotz 2a03240eb1 Reverted my last change as it turned out that the lazy FPU state handling was not SMP safe afterall and the performance gain is questionable. Maybe it'll be implemented correctly in the future. Sorry for any inconvenience this may have cost.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17272 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-29 22:10:04 +00:00
Michael Lotz 7eee76e65a Implemented lazy FPU state save/restore. In the end mostly ported from NewOS. SMP safe.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17251 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-27 22:02:48 +00:00
Michael Lotz b026647574 Changed the temporary buffer to be static to avoid using that much stack. Replaced wrong maximum buffer length (oops).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17137 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-16 10:56:00 +00:00
Michael Lotz 1df23ecc52 Should finally fix the eaten up messages. We obviously must not use the output buffer to write the repeat count as the output buffer already contains the new message...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17131 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-14 12:38:31 +00:00
Michael Lotz 34ff238b88 Implemented the BRect version of DragMessage(). This just creates a drag bitmap with the rect. We may want to switch to a less heavy implementation later on though.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17115 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-12 20:26:56 +00:00
Michael Lotz eef8149582 Fixed wrong length calculation for memmove. This should at least fix bug #314 and probably more yet unknown problems with ReplaceData(). Also optimized removing data from the end of the buffer.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17101 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-11 23:01:32 +00:00
Michael Lotz 2f5143505b Another try at removing the "Last message repeated 1 times.", this time with locking.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17099 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-11 21:11:50 +00:00
Michael Lotz 6ac6b512a0 Reverted my last change as it causes a segfault with syslog output enabled.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17094 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-11 19:40:49 +00:00
Michael Lotz d7faea3f20 Replaced "Last message repeated 1 times." with just reprinting the message (requested by Jerome Duval).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17060 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-10 21:28:43 +00:00
Michael Lotz 39cdae74a7 First steps at getting drag & drop to work properly. Simple drag & drop (draging Tracker items) should work now. Not sure about the negotiated version (with mimetype exchange). Fixed left behind drag bitmaps. Some cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17058 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-10 21:22:05 +00:00
Michael Lotz f51fb4696c Corrected the repeat checks (did not compare the right buffers) and added a length argument to debug_puts() to safe the strlen in the syslog case. Also removed some leftover.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16991 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-03 20:48:30 +00:00
Michael Lotz 3647d70ded Replaced the hash based approach to repeat detection with the probably more efficient strncmp.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16970 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-02 16:45:04 +00:00
Michael Lotz 3352a462a7 Implemented the "Last message repeated x times." thing in the kernel (hash based).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16968 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-02 16:23:47 +00:00
Michael Lotz 0ef40c5e17 This should fix the wrong colors for selected Tracker icons. Fixes bug #205.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16951 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-01 14:31:21 +00:00
Michael Lotz 0581480cfe * Fixed ServerBitmap::ImportBits() to use the correct width/height
* Extended ConvertBits() to properly handle negative offsets and overlapping lines
* Implemented blitting the software cursor to the bitmap returned from ReadBitmap()

Note: In the future we will have to directly use the final graphics buffer for ReadBitmap() if we want DirectWindow output too (R5 includes it). I don't know how R5 handles the hardware cursor though.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16766 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-13 16:48:44 +00:00
Michael Lotz 641a8290a7 Fixed converting KMessages, their target and reply info weren't preserved. Fixes bug 295.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16734 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-12 13:21:08 +00:00
Michael Lotz 1daa34ec2c Fixed two small errors that prevented _NativeFlatten() from working. Should fix at least the Deskbar and shutdown issues of bug 295.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16732 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-12 12:35:26 +00:00