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