Commit graph

79 commits

Author SHA1 Message Date
Cameron Gutman 33c1f6019d [USBEHCI]
- Wait 20 milliseconds for port reset

svn path=/branches/usb-bringup-trunk/; revision=55366
2012-02-01 11:49:57 +00:00
Cameron Gutman 6c5ad5e239 [USBEHCI]
- Wait 20 milliseconds after enabling power for the port to stabilize

svn path=/branches/usb-bringup-trunk/; revision=55365
2012-02-01 11:22:43 +00:00
Cameron Gutman a77425676b [USBEHCI]
- Remove debug spam

svn path=/branches/usb-bringup-trunk/; revision=55341
2012-01-30 22:54:40 +00:00
Johannes Anderwald fc2d4e3800 - Remove cruft from CMakeLists.txt
- Silence debug flood
- Remove debugging code
- Add traces for composite device detection
- Don't print device descriptor

svn path=/branches/usb-bringup-trunk/; revision=55302
2012-01-29 23:11:21 +00:00
Johannes Anderwald a4c2608e34 [USBEHCI]
- Enable device as pci bus master
- Fixes hanging of Vmware USB EHCI controller
- Revert changes from 55293 from usb_queue
- Currently crashes when usbstor wants to receive descriptors

svn path=/branches/usb-bringup-trunk/; revision=55294
2012-01-29 20:34:46 +00:00
Johannes Anderwald 2b13dd5132 [USBEHCI]
- Update async address everytime a new queue head is added as specified in EHCI spec section 3.2
- Add more checks
- Vmware EHCI not yet working

svn path=/branches/usb-bringup-trunk/; revision=55293
2012-01-29 17:30:31 +00:00
Johannes Anderwald 99c0842bcb [EHCI]
- EHCI controllers support 15 ports as specified

svn path=/branches/usb-bringup-trunk/; revision=55292
2012-01-29 17:25:34 +00:00
Johannes Anderwald 403bb82e09 [USBEHCI]
- Rewrite the init routine of EHCI controller
- Implement PORT_POWER

svn path=/branches/usb-bringup-trunk/; revision=55291
2012-01-29 17:24:41 +00:00
Cameron Gutman 6f54b01f29 [USBEHCI]
- Fix initialization bugs for EHCI controllers
- Try again to release ownership of low-speed devices after reset
- Wait for the port reset to complete

svn path=/branches/usb-bringup-trunk/; revision=55232
2012-01-27 06:27:12 +00:00
Cameron Gutman f0363e1cc1 [USBEHCI_NEW]
- Disable debug spam

svn path=/branches/usb-bringup-trunk/; revision=55225
2012-01-26 20:25:12 +00:00
Cameron Gutman 334c9ed261 [USBEHCI]
- Fix GetPortStatus() and remove the cached status stuff (except for reset that we have to cache because the EHCI spec has no port reset complete bit)

svn path=/branches/usb-bringup-trunk/; revision=55188
2012-01-26 00:29:25 +00:00
Cameron Gutman 75947d6708 [USBEHCI/USBOHCI]
- Handle invalid device handles gracefully instead of crashing

svn path=/branches/usb-bringup-trunk/; revision=55154
2012-01-24 22:21:30 +00:00
Johannes Anderwald 4f681bfe61 [USBEHCI]
- Display error status when host controller reports failure

svn path=/branches/usb-bringup-trunk/; revision=55149
2012-01-24 20:49:01 +00:00
Johannes Anderwald 98731d6286 [USBOHCI]
- Fix warning
- Remove assert
[USBEHCI]
- Remove assert

svn path=/branches/usb-bringup-trunk/; revision=55122
2012-01-23 16:47:19 +00:00
Cameron Gutman eb6202bdb6 [USBEHCI]
- Remove unused variable

svn path=/branches/usb-bringup-trunk/; revision=55121
2012-01-23 16:29:43 +00:00
Johannes Anderwald 88a17911fa [USBEHCI]
- Remove traces

svn path=/branches/usb-bringup-trunk/; revision=55117
2012-01-23 16:17:21 +00:00
Cameron Gutman 2e9bda4f63 [USB-BRINGUP-TRUNK]
- Store correct device power state for PowerSystemWorking

svn path=/branches/usb-bringup-trunk/; revision=55115
2012-01-23 16:06:32 +00:00
Johannes Anderwald 8478147bbf [USBEHCI]
- Use the same lock in the IUSBQueue as in the IDMAMemoryManager
- add debug traces (default off)

svn path=/branches/usb-bringup-trunk/; revision=55110
2012-01-23 15:49:43 +00:00
Johannes Anderwald 1cdf0e1d0d [USBEHCI]
- Don't complete irps with lock held

svn path=/branches/usb-bringup-trunk/; revision=55091
2012-01-23 04:22:11 +00:00
Johannes Anderwald b434c46463 [USBEHCI]
- Don't acquire spinlock twice

svn path=/branches/usb-bringup-trunk/; revision=55090
2012-01-23 03:50:11 +00:00
Cameron Gutman a1bb133fae [USB-BRINGUP-TRUNK]
- Implement device disconnect indication for usbehci and usbohci
- Implement device removal for FDOs and PDOs in usbstor and usbhub

svn path=/branches/usb-bringup-trunk/; revision=55080
2012-01-22 21:58:06 +00:00
Cameron Gutman d0fd35677e [USB-BRINGUP-TRUNK]
- Add usbd to bootcd because usbohci depends on it
- Make device interface creation failure a non-fatal error so the port drivers start successfully in 1st stage

svn path=/branches/usb-bringup-trunk/; revision=55034
2012-01-20 23:58:29 +00:00
Cameron Gutman 9dacc2a9ac [USB-BRINGUP-TRUNK]
- Fix usbehci build

svn path=/branches/usb-bringup-trunk/; revision=55029
2012-01-20 22:53:30 +00:00
Cameron Gutman 3a034047fc [USB-BRINGUP-TRUNK]
- Add USB stuff to 1st stage setup

svn path=/branches/usb-bringup-trunk/; revision=55024
2012-01-20 22:04:57 +00:00
Cameron Gutman f5223ccf13 [USB-BRINGUP-TRUNK]
- Remove outdated cmake attribute

svn path=/branches/usb-bringup-trunk/; revision=55021
2012-01-20 21:28:33 +00:00
Johannes Anderwald 756f0b704b [USBEHCI]
- Implement URB_FUNCTION_ISOCH_TRANSFER, URB_FUNCTION_CLASS_ENDPOINT, URB_FUNCTION_GET_DESCRIPTOR_FROM_INTERFACE

svn path=/branches/usb-bringup/; revision=54736
2011-12-23 15:20:00 +00:00
Johannes Anderwald 3dfadd12ae [USBEHCI]
- Enable sync frame list

svn path=/branches/usb-bringup/; revision=51827
2011-05-20 15:06:39 +00:00
Johannes Anderwald 9e2ca3d539 [USBEHCI]
- Pass memory manager to USBQueue object
- Fix bug in memory manager which did not check if an allocation equals page size
- Implement interrupt queue head array with frequencys of 1ms up to 32ms
- Store queue heads in the sync schedule array
- WIP

svn path=/branches/usb-bringup/; revision=51826
2011-05-20 14:47:15 +00:00
Michael Martin 76310d7679 [USBEHCI_NEW]
- Modify BuildBulkTransferQueueHead to support TransferBufferLengths larger than PAGE_SIZE * 5.
- Acquire a SpinLock before adding QueueHeads to AsyncList and PendingList.
- Dont request a new QueueHead for incomplete transfers in QueueHeadCompletion, as the memory for the just completed QueueHead has not been released yet. Doing so overwrites the m_TransferDescriptor[x] members with new address resulting in memory leaks. Instead request a new QueueHead after the QueueHead has been freed in QueueHeadCleanup.
- Fix a bug where a QueueHead was removed from the m_CompletedRequestAsyncList instead of the m_PendingRequestAsyncList.
- Temporary hackfix InternalCalculateTransferLength to return the TransferBufferLength. This hack will be removed as soon as possible.
- With these changes the hub and ehci driver allow viewing content of and transfers to/from usb disks.

svn path=/branches/usb-bringup/; revision=51684
2011-05-12 13:35:06 +00:00
Michael Martin 741b7ea0aa [USBEHCI_NEW]
- When clearing feature port reset, remove the flag from Change and if the port is hardware enabled set the enable flag in Status. 
- When checking port status, if Change has any flags set an SCE request most be completed. Verified while writing usbhub driver in xp.
- Probably fixes a case where an endless loop of completing SCE requests.

svn path=/branches/usb-bringup/; revision=51642
2011-05-08 12:42:15 +00:00
Johannes Anderwald dd5249b4b6 [USBEHCI_NEW]
- Silence debug flood

svn path=/branches/usb-bringup/; revision=51584
2011-05-05 00:35:56 +00:00
Johannes Anderwald 11ca3bd492 [USBEHCI_NEW]
- Fix warnings
- Fix mingw build

svn path=/branches/usb-bringup/; revision=51573
2011-05-04 12:09:07 +00:00
Johannes Anderwald c2b34a98be [USBEHCI_NEW]
- Invoke status change callback at passive level
- Fill out usb descriptor struct instead passing everything in char array
- Use 1 byte interrupt endpoint packet size for hub for now
- Fill in interface information when SelectConfiguration request is passed. Fixes sce callback and pool corruptions
- Return device descriptor in USBHI_QueryDeviceInformation
- Tested in WinXP with special pool enabled & overrun support

svn path=/branches/usb-bringup/; revision=51572
2011-05-04 11:49:00 +00:00
Johannes Anderwald 991d02daa5 [USBEHCI_NEW]
- Remove function declaration
[USBSTOR]
- Start on usbstor driver (USB Mass Storage Driver)
- Implement reading device descriptor / configuration descriptor
- Implement scanning of configuration descriptor for bulk in / bulk out endpoints
- Implement selecting configuration and interface and verify selected interface
- Implement reading max lun and create child device object for each lun
- Handle PnP requests for functional device object
- Implement support routines to send urb's to lower device object (usbhub)
- Start implementing PDO routines

svn path=/branches/usb-bringup/; revision=51563
2011-05-03 00:15:23 +00:00
Johannes Anderwald bca978808b [USBEHCI_NEW]
- Silence usb bulk control traces

svn path=/branches/usb-bringup/; revision=51507
2011-04-30 18:46:10 +00:00
Johannes Anderwald 6321f84f30 [USBEHCI_NEW]
- Store number of bytes transferred in the transfer descriptors
- Perform queue head completion when the door bell ring has been acknowledged. Fixes race condition between multiple irps in the async list
- Fix calculation of transfer length when the request is an bulk in operation
- Use EndPointDescriptor member to access transfer type / pid direction
- Use MmGetSystemAddressForMdlSafe to retrieve system address for urb buffer
- Fix check if first transfer buffer finishes on first size if the size is of page_size
- With these changes and little luck and good weather, usb mass storage devices have been seen to  work in Windows XP SP3 
- Code inspired of mjmartin usbehci driver and Haiku's usb stack


svn path=/branches/usb-bringup/; revision=51506
2011-04-30 17:44:43 +00:00
Johannes Anderwald 547ea14508 [USBEHCI_NEW]
- Port URB_FUNCTION_CLASS_INTERFACE from mjmartin usbehci driver
- Fix typo in interface declaration
- Disable assert for now
- Return irp status pending when irp is added to the queue
- Fix bug in InternalGetPidDirection
- More work on the bulk transfers, not yet working

svn path=/branches/usb-bringup/; revision=51501
2011-04-30 08:04:35 +00:00
Michael Martin bdfaf318b8 [USBEHCI_NEW]
- Fix a type causing CommitIrp to fail.
- Add a sanity check in StatusChangeEndpointCallBack to check that a pending SCE irp is queued.
- Start Implementing Bulk Transfers. Needs more work.



svn path=/branches/usb-bringup/; revision=51493
2011-04-29 13:16:03 +00:00
Michael Martin 07dbb71da0 [USBEHCI_NEW]
- Set the NakCountReload to 0 in the QueueHead that is set in the Async register, as this is a dead QueueHead marked as halted and does not need it.
- Set the Async register in StartController. Note: The Async and Periodic registers can only be modified when the controller is stopped. 
- Driver now works in Qemu.

svn path=/branches/usb-bringup/; revision=51491
2011-04-29 06:14:44 +00:00
Johannes Anderwald 20a1892864 [USBEHCI_NEW]
- Fix SelectConfiguration / SelectInterface
- By mjmartin

svn path=/branches/usb-bringup/; revision=51490
2011-04-29 03:17:57 +00:00
Johannes Anderwald 3b6ba2f1d8 [USBEHCI_NEW]
- Implement SelectInterface / SelectConfiguration based on mjmartin usbehci driver
- Initialization runs untill SelectInterface request
- Tested with WinXP SP2

svn path=/branches/usb-bringup/; revision=51489
2011-04-29 02:46:04 +00:00
Michael Martin f48754e09b [USBEHCI_NEW]
- hub_controller.cpp: Change RtlSetBit and RtlClearBit to RtlSetBtis and RtlClearBits for Win2k compatibility.

svn path=/branches/usb-bringup/; revision=51488
2011-04-29 02:19:10 +00:00
Johannes Anderwald e8cf4c5591 [USBEHCI_NEW]
- Remove assert for unknown clear feature
- Implement retrieving string descriptors, based on mjmartin usbehci driver
- Start implementing USBHI_RestoreUsbDevice
- Fixup device stack in USBHI_SetDeviceHandleData. Needs more investigation

svn path=/branches/usb-bringup/; revision=51487
2011-04-28 23:59:53 +00:00
Johannes Anderwald 823176506d [USBEHCI_NEW]
- Implement retrieving device / configuration descriptor for usb devices
- Based on mjmartin usbehci driver
- Mass storage device found wizard now pops up (fails to install - WIP)

svn path=/branches/usb-bringup/; revision=51478
2011-04-28 17:45:32 +00:00
Johannes Anderwald a3f701378c [USBEHCI_NEW]
- Move error checking if controller reported an error inside the door bell ring check block
- Extend interface of IUSBRequest to include DeviceAddress, which is needed to retrieve configuration descriptor of newly set address
- Allocate CtrlSetup from nonpaged pool
- Release setup packet on cleanup
- Devices now receive an device address
- Currently asserts while retrieving configuration descriptor as this code path is not yet existant
*** Assertion failed: Urb->UrbHeader.UsbdDeviceHandle == NULL
***   Source File: d:\usb-bringup\drivers\usb\usbehci_new\hub_controller.cpp, line 1118

svn path=/branches/usb-bringup/; revision=51477
2011-04-28 16:40:07 +00:00
Johannes Anderwald ede1d48da4 [USBEHCI_NEW]
- Change interface to return real async queue head
- Set the async queue head register after the controller has been started
- Enable async queue in StartController
- Port DumpDeviceDescriptor from mjmartin usbehci driver
- Remove pseudo queue head from usb queue, instead use the real async queue head exported from IUSBHardwareDevice 
- Get physical address for transfer data in BuildControlTransferQueueHead
- Retrieving device descriptor now ~works, currently stops at setting device address (needs more work)

svn path=/branches/usb-bringup/; revision=51476
2011-04-28 15:16:33 +00:00
Johannes Anderwald 8df637b778 [USBEHCI_NEW]
- Check if the current request type is supported (currently only control is supported, bulk will be implemented soon)
- Fix bug in IUSBRequest::CreateQueueHead
- Code runs now until first device descriptor get request (async / periodic queue not yet enabled)
- mjmartin usbehci status not yet reached
- Let the fun now begin ;)

svn path=/branches/usb-bringup/; revision=51474
2011-04-28 13:13:13 +00:00
Johannes Anderwald ede324a063 [USBEHCI_NEW]
- Cache port status & port change settings because it appears that some ehci controllers do not store the status reset register bit correctly
- This commit is a temporary solutions, needs to be reworked
- Return correct status from HandleClassOther
- Handle IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION to return status success

svn path=/branches/usb-bringup/; revision=51473
2011-04-28 12:41:16 +00:00
Johannes Anderwald 591cffee7c [USBEHCI_NEW]
- Return the physical address of the async queue head in CUSBHardwareDevice::GetAsyncListRegister
- Remove superflous entries from queue head structure, they are processed within IUSBRequest class
- Remove USBHI_GetPortHackFlags, this function has been deprecated
- Add interface functions for IUSBRequest / IUSBQueue
- Callback into IUSBQueue when a hardware interrupt arrives
- Implement callback function to check for completed queue heads / free completed queue head depending on the Async Advance interrupt bit

svn path=/branches/usb-bringup/; revision=51466
2011-04-27 16:23:42 +00:00
Johannes Anderwald 346a95197f [USBEHCI_NEW]
- Fix build 
- Implement retrieving configuration descriptor (USBHI_GetUsbDescriptors)
- Implement function to build a setup packet from urb (taken from mjmartin usbehci driver)

svn path=/branches/usb-bringup/; revision=51443
2011-04-24 09:26:22 +00:00