Commit Graph
100 Commits
Author SHA1 Message Date
Michael Lotz 86fee1806c Reset the freed device name list so it is not freed a second time on republish. Also check the allocation of the new name list.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23337 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-10 11:45:20 +00:00
Michael Lotz 2c5faa49db Fix multi-line single-line comment warning...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23333 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-09 22:05:26 +00:00
Michael Lotz d7074530fd Clean out some of the spurious whitespace.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23332 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-09 22:00:51 +00:00
Michael Lotz 1df628fe2f * Two more uses for the pause instruction I apparently forgot to commit
* Minor style cleanup in the conversion factor calculation

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23217 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-02 02:10:55 +00:00
Michael Lotz e812c77e4a * Delay initializing SMP stuff like APICs and kstacks of non-boot CPUs until after the boot menu
* When disabling SMP initialization of those parts is avoided so it works more cleanly
* Moved smp_find_mp_config() into smp_init() and moved MPS specific parts into smp_do_mp_config()
* Removed the global floating struct, if found it is now passed into smp_do_mp_config() like it is done for ACPI
* Made the file a bit more C++, applied coding style to some variable names and unified/improved some of the debug output

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23216 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-02 02:07:23 +00:00
Michael Lotz f8e6b29ada Also clear the pci_address_space bit from the bus_master_base. Again might help on bug #1683.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23200 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-01 14:36:51 +00:00
Michael Lotz 576bb2455b Since r23142 the ide_adapter does not clear the PCI_address_space bit when detecting a channel. Drivers that use the ide_adapter therefore have to do that themselfs, which broke legacy_sata (probably this is also the case for the promise_tx2 driver). I investigated this as it broke my attempt of a it8211 driver too. This might fix bug #1683 but I cannot test that. Also cleaned out some space indent in that file.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23199 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-01 12:56:45 +00:00
Michael Lotz b938008fe1 * Update the PAUSE macro from "rep; nop;" to "pause;" which is the same bytecode wise but more readable
* Insert the pause op in all spin wait loops (as macro for platform independent sources or as inline assembly on x86 only files)
* Fix some warnings with tracing on and extended some output
* Minor cleanups here and there

The pause instruction is implemented since P4 systems but is fully backwards compatible (it's a no-op prior to P4). According to Intel specs it reduces performance penalties as memory order violations can be avoided. Also power consumption is reduced. Most of all this will be beneficial to hyper-threading systems as it frees resources to the other logical processor when one logical processor executes a fast spinning loop.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23141 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-12-18 19:46:26 +00:00
Michael Lotz 9e0b9fbda5 * Fix the mem driver to not always return invalid argument
* Cleanup

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23140 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-12-18 18:48:50 +00:00
Michael Lotz fd0986401e Ignore disabled local APICs.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23118 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-12-12 18:39:41 +00:00
Michael Lotz d5f56f7d69 Remove 2 CPU limit from ACPI MP detection in the bootloader.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23116 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-12-11 21:57:02 +00:00
Michael Lotz 7ce6a420b7 Make the initial size of the slab depend on the CPU count. This avoids running out of initial space with more than two CPUs. I haven't fully tracked down the usage of this space, probably it is used to allocate some per CPU construct.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23115 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-12-11 21:54:54 +00:00
Michael Lotz f6c512f8e3 Avoid adding more CPUs than the kernel args can hold (and therefore overwriting other kernel args stuff). Doesn't fix my problems though as the current maximum is 4 CPUs.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23105 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-12-10 20:37:20 +00:00
Michael Lotz 7846435ed2 Use a more generous snooze time when waiting for the initial explore to complete.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23103 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-12-09 22:22:45 +00:00
Michael Lotz d4cecb1787 Removed wrong and now unnecessary condition to add safemode option.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23102 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-12-09 22:21:09 +00:00
Michael Lotz f108445b5e * Initial support for ACPI tables to detect multiprocessor configurations
* ACPI is evaluated first as it also handles things like multi core or hyper threading setups
* Removed other (disabled) hyper threading code per the notes in the corresponding ToDo
* Limit the detected CPU count to 2 for now as I wasn't able to get it working in either emulation nor real hardware with more than 2 CPUs
* Added a reserved byte to the mp_config_table struct, it worked only by luck as the compiler did padding there to get to the same size

I can now boot my Core 2 Quad with two out of four processors active :-)

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23100 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-12-09 21:01:55 +00:00
Michael Lotz 1a802bca9d * Use the rescan function when compiled for Haiku
* Move waiting for the first explore to complete
* Small cleanup

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23099 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-12-09 20:42:47 +00:00
Michael Lotz dfa4dfe033 Something else that has been laying around for some time. Implemented hash_grow() that can grow a hash table to a new table size. Automatic growing is commented out in hash_insert() since there needs to be a way to disallow growing in certain cases (i.e. where no allocations can be made). This is detailed in the ToDo at the top of the file.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23074 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-12-06 21:58:06 +00:00
Michael Lotz bbea21a256 Forgot the header change in the last commit.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23073 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-12-06 21:41:08 +00:00
Michael Lotz 849e3c6724 First try at implementing driver rescans (this has been laying around my disk for quite some time).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23072 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-12-06 21:36:15 +00:00
Michael Lotz 3bd7e77cfa Messed up those numbers. The interval can range from 0 to 16 and we can use 0 to 10 with the 1024 frame list. So it's obviously 11 entries and not 10. Fixes the wrong tree layout and the doubled polling intervals of interrupts.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23035 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-12-01 10:18:27 +00:00
Michael Lotz e4ef0f13b7 Since the interval is now part of the general pipe info we don't have to cast the pipe to an interrupt one anymore.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22976 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-11-22 05:35:13 +00:00
Michael Lotz 10b0646422 Implemented split transactions for control and bulk pipes in EHCI.
With this it is possible to use low/fullspeed (USB 1.1) devices below USB 2.0 Hubs.
Note though that you cannot yet use mice or keyboards attached to USB 2.0 Hubs as split transactions for interrupt pipes are still missing.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22973 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-11-21 19:21:21 +00:00
Michael Lotz 072c28ded5 * Redesign the Pipe constructor to only take the parent object
* All other init is done in InitCommon() which only needs to be present in the base class
* Adding the hub port a device is attached to to the Device class
* Add hub port and hub address to the Pipe class (will be used for split transactions in EHCI)
* Update the root hubs to reflect the changes to hub creation

Sadly we need pipes that do not belong to devices (default pipe for addressing and to get initial device descriptor). Therefore we cannot resolve hub address and port from the parent device.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22972 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-11-21 19:15:16 +00:00
Michael Lotz 7f07482988 * Removed the two extra submit functions and combined them directly into SubmitTransfer()
* The sparation based on async and periodic schedule made no sense as it is a question of queued/non-queued
* Therefore removed the near complete code duplication for adding interrupt transfers (that are also queued)

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22943 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-11-18 01:25:04 +00:00
Michael Lotz ed1eff2fec * Implement interrupt transfers in EHCI
* Uses a "collapsed binary tree" (for lack of a better name) to support the different intervals
* Remove a leftover variable declaration that was hiding error conditions away...
* Some cleanup

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22942 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-11-18 01:05:39 +00:00
Michael Lotz 5524595645 Store the polling interval in the InterruptPipe class to make it accessible to the controller.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22936 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-11-17 11:38:38 +00:00
Michael Lotz 76748b3cb1 Add a small cookie function to the Pipe. This can be used by the controller to store internal data related to a specific transfer pipe.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22931 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-11-15 20:17:18 +00:00
Michael Lotz 13508e8bd0 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
2007-11-14 22:11:05 +00:00
Michael Lotz 2827e2995b Extended flushing repeat messages in kernel debug output. The repeat message is printed when there has been no repeat for more than 1 second and now also when the first repeat was more than 3 seconds ago. This ensures that repeat messages are sent when the repeated message is constantly output at a frequency of less than a second.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22501 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-10-10 20:47:16 +00:00
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