Ticket #7449: ehci.2.patch
File ehci.2.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); 396 } else { 397 running = true; 398 break; 390 uint32 opRegInput = ReadOpReg(EHCI_USBCMD); 391 392 // frameListSizes defined by values between 00b and 10b. 11b is Reserved 393 if (frameListSize < 3) { 394 opRegInput = opRegInput | EHCI_USBCMD_RUNSTOP 395 | EHCI_USBCMD_ASENABLE | EHCI_USBCMD_PSENABLE 396 | (frameListSize << EHCI_USBCMD_FLS_SHIFT) 397 | (1 << EHCI_USBCMD_ITC_SHIFT); 398 399 if (asyncParkCapable) { 400 opRegInput = opRegInput | EHCI_USBCMD_ASPME 401 | (0x03 << EHCI_USBCMD_ASPMC_SHIFT); 402 opRegInput = opRegInput & EHCI_USBCMD_ASPMC_MASK; 403 } 404 405 opRegInput = opRegInput & EHCI_USBCMD_ITC_MASK; 406 WriteOpReg(EHCI_USBCMD, opRegInput); 407 408 for (int32 i = 0; i < 10; i++) { 409 uint32 status = ReadOpReg(EHCI_USBSTS); 410 TRACE("try %ld: status 0x%08lx\n", i, status); 411 412 if (status & EHCI_USBSTS_HCHALTED) { 413 snooze(10000); 414 } else { 415 running = true; 416 break; 417 } 399 418 } 400 419 } 401 420 … … 404 423 return B_ERROR; 405 424 } 406 425 426 407 427 // route all ports to us 408 428 WriteOpReg(EHCI_CONFIGFLAG, EHCI_CONFIGFLAG_FLAG); 409 429 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