[haiku-commits] r41661 - haiku/trunk/src/add-ons/kernel/busses/usb
- From: korli@xxxxxxxxxxxxxxxx
- To: haiku-commits@xxxxxxxxxxxxx
- Date: Sun, 22 May 2011 21:44:10 +0200 (CEST)
Author: korli
Date: 2011-05-22 21:44:09 +0200 (Sun, 22 May 2011)
New Revision: 41661
Changeset: https://dev.haiku-os.org/changeset/41661
Modified:
haiku/trunk/src/add-ons/kernel/busses/usb/ehci.cpp
haiku/trunk/src/add-ons/kernel/busses/usb/ehci_hardware.h
Log:
* added some EHCI definitions (specification 1.1)
* enable per-port change events when available
Modified: haiku/trunk/src/add-ons/kernel/busses/usb/ehci.cpp
===================================================================
--- haiku/trunk/src/add-ons/kernel/busses/usb/ehci.cpp 2011-05-22 19:24:02 UTC
(rev 41660)
+++ haiku/trunk/src/add-ons/kernel/busses/usb/ehci.cpp 2011-05-22 19:44:09 UTC
(rev 41661)
@@ -522,11 +522,15 @@
EHCI::Start()
{
TRACE("starting EHCI host controller\n");
- TRACE("usbcmd: 0x%08lx; usbsts: 0x%08lx\n", ReadOpReg(EHCI_USBCMD),
ReadOpReg(EHCI_USBSTS));
+ TRACE("usbcmd: 0x%08lx; usbsts: 0x%08lx\n", ReadOpReg(EHCI_USBCMD),
+ ReadOpReg(EHCI_USBSTS));
+ bool hasPerPortChangeEvent = (ReadCapReg32(EHCI_HCCPARAMS)
+ & EHCI_HCCPARAMS_PPCEC) != 0;
uint32 frameListSize = (ReadOpReg(EHCI_USBCMD) >> EHCI_USBCMD_FLS_SHIFT)
& EHCI_USBCMD_FLS_MASK;
WriteOpReg(EHCI_USBCMD, ReadOpReg(EHCI_USBCMD) | EHCI_USBCMD_RUNSTOP
+ | (hasPerPortChangeEvent ? EHCI_USBCMD_PPCEE : 0)
| EHCI_USBCMD_ASENABLE | EHCI_USBCMD_PSENABLE
| (frameListSize << EHCI_USBCMD_FLS_SHIFT)
| (1 << EHCI_USBCMD_ITC_SHIFT));
Modified: haiku/trunk/src/add-ons/kernel/busses/usb/ehci_hardware.h
===================================================================
--- haiku/trunk/src/add-ons/kernel/busses/usb/ehci_hardware.h 2011-05-22
19:24:02 UTC (rev 41660)
+++ haiku/trunk/src/add-ons/kernel/busses/usb/ehci_hardware.h 2011-05-22
19:44:09 UTC (rev 41661)
@@ -31,11 +31,15 @@
// USB Command Register (EHCI Spec 2.3.1)
#define EHCI_USBCMD_ITC_SHIFT 16 // Interrupt Threshold
Control
#define EHCI_USBCMD_ITC_MASK 0xff
+#define EHCI_USBCMD_PPCEE (1 << 15) // Per-Port Change
Events Enable
+#define EHCI_USBCMD_FSP (1 << 14) // Fully
Synchronized Prefetch
+#define EHCI_USBCMD_ASPE (1 << 13) // Async Schedule
Prefetch Enable
+#define EHCI_USBCMD_PSPE (1 << 12) // Periodic Schedule
Prefetch Enable
#define EHCI_USBCMD_ASPME (1 << 11) // Async Schedule Park
Mode Enable
#define EHCI_USBCMD_ASPMC_SHIFT 8 // Async
Schedule Park Mode Count
#define EHCI_USBCMD_ASPMC_MASK 0x03
#define EHCI_USBCMD_LHCRESET (1 << 7) // Light Host Controller Reset
-#define EHCI_USBCMD_INTONAAD (1 << 6) // Interrupt on Async Advance
Dorbell
+#define EHCI_USBCMD_INTONAAD (1 << 6) // Interrupt on Async Advance
Doorbell
#define EHCI_USBCMD_ASENABLE (1 << 5) // Asynchronous Schedule Enable
#define EHCI_USBCMD_PSENABLE (1 << 4) // Periodic Schedule Enable
#define EHCI_USBCMD_FLS_SHIFT 2 // Frame List Size
@@ -104,6 +108,10 @@
#define EHCI_LEGSUP_OSOWNED (1 << 24) // OS Owned Semaphore
#define EHCI_LEGSUP_BIOSOWNED (1 << 16) // BIOS Owned Semaphore
+#define EHCI_HCCPARAMS_FPLC (1 << 19) // 32 Frames Period List
+#define EHCI_HCCPARAMS_PPCEC (1 << 18) // Per-Port Change Event
+#define EHCI_HCCPARAMS_LPM (1 << 17) // Link Power Management
+#define EHCI_HCCPARAMS_HP (1 << 16) // Hardware Prefetch
#define EHCI_HCCPARAMS_IPT_SHIFT 4 // Isochronous Periodic
Threshold
#define EHCI_HCCPARAMS_IPT_MASK 0xf
Other related posts:
- » [haiku-commits] r41661 - haiku/trunk/src/add-ons/kernel/busses/usb - korli