Ticket #7449: ehci.patch
File ehci.patch, 2.8 KB (added by , 13 years ago) |
---|
-
home/gabe/haiku/haiku/src/add-ons/kernel/busses/usb/ehci.cpp
379 379 TRACE("starting EHCI host controller\n"); 380 380 TRACE("usbcmd: 0x%08lx; usbsts: 0x%08lx\n", ReadOpReg(EHCI_USBCMD), ReadOpReg(EHCI_USBSTS)); 381 381 382 bool running = false; 383 382 384 uint32 frameListSize = (ReadOpReg(EHCI_USBCMD) >> EHCI_USBCMD_FLS_SHIFT) 383 385 & EHCI_USBCMD_FLS_MASK; 384 WriteOpReg(EHCI_USBCMD, ReadOpReg(EHCI_USBCMD) | EHCI_USBCMD_RUNSTOP385 | EHCI_USBCMD_ASENABLE | EHCI_USBCMD_PSENABLE386 | (frameListSize << EHCI_USBCMD_FLS_SHIFT)387 | (1 << EHCI_USBCMD_ITC_SHIFT));388 386 389 bool running = false; 390 for (int32 i = 0; i < 10; i++) { 391 uint32 status = ReadOpReg(EHCI_USBSTS); 392 TRACE("try %ld: status 0x%08lx\n", i, status); 387 uint32 asyncParkCapable = ReadCapReg32(EHCI_HCCPARAMS) 388 & EHCI_HCCPARAMS_ASPM_MASK; 393 389 394 if (status & EHCI_USBSTS_HCHALTED) { 395 snooze(10000); 390 // frameListSizes defined by values between 00b and 10b. 11b is Reserved 391 if (frameListSize < 3) { 392 if (asyncParkCapable) { 393 WriteOpReg(EHCI_USBCMD, ReadOpReg(EHCI_USBCMD) | EHCI_USBCMD_RUNSTOP 394 | EHCI_USBCMD_ASENABLE | EHCI_USBCMD_PSENABLE | EHCI_USBCMD_ASPME 395 | (0x03 << EHCI_USBCMD_ASPMC_SHIFT) 396 | (frameListSize << EHCI_USBCMD_FLS_SHIFT) 397 | (1 << EHCI_USBCMD_ITC_SHIFT)); 396 398 } else { 397 running = true; 398 break; 399 WriteOpReg(EHCI_USBCMD, ReadOpReg(EHCI_USBCMD) | EHCI_USBCMD_RUNSTOP 400 | EHCI_USBCMD_ASENABLE | EHCI_USBCMD_PSENABLE 401 | (frameListSize << EHCI_USBCMD_FLS_SHIFT) 402 | (1 << EHCI_USBCMD_ITC_SHIFT)); 399 403 } 404 405 for (int32 i = 0; i < 10; i++) { 406 uint32 status = ReadOpReg(EHCI_USBSTS); 407 TRACE("try %ld: status 0x%08lx\n", i, status); 408 409 if (status & EHCI_USBSTS_HCHALTED) { 410 snooze(10000); 411 } else { 412 running = true; 413 break; 414 } 415 } 400 416 } 401 417 402 418 if (!running) { … … 404 420 return B_ERROR; 405 421 } 406 422 423 407 424 // route all ports to us 408 425 WriteOpReg(EHCI_CONFIGFLAG, EHCI_CONFIGFLAG_FLAG); 409 426 snooze(10000); -
home/gabe/haiku/haiku/src/add-ons/kernel/busses/usb/ehci_hardware.h
14 14 #define EHCI_HCIVERSION 0x02 // Interface Version Number 15 15 #define EHCI_HCSPARAMS 0x04 // Structural Parameters 16 16 #define EHCI_HCCPARAMS 0x08 // Capability Parameters 17 #define EHCI_HCCPARAMS_ASPM_MASK 0x04 // Asynchronous Schedule Park Mode 17 18 #define EHCI_HCSP_PORTROUTE 0x0c // Companion Port Route Description 18 19 19 20