Ticket #7478: ohci_disable_interrupts_early.diff
File ohci_disable_interrupts_early.diff, 1.5 KB (added by , 13 years ago) |
---|
-
src/add-ons/kernel/busses/usb/ohci.cpp
204 204 fInterruptEndpoints[0]->next_physical_endpoint 205 205 = fDummyIsochronous->physical_address; 206 206 207 // Disable all interrupts before handoff/reset 208 _WriteReg(OHCI_INTERRUPT_DISABLE, OHCI_ALL_INTERRUPTS); 209 207 210 // Determine in what context we are running (Kindly copied from FreeBSD) 208 211 uint32 control = _ReadReg(OHCI_CONTROL); 209 212 if (control & OHCI_INTERRUPT_ROUTING) { … … 235 238 uint32 frameInterval = _ReadReg(OHCI_FRAME_INTERVAL); 236 239 uint32 intervalValue = OHCI_GET_INTERVAL_VALUE(frameInterval); 237 240 238 // Disable interrupts right before we reset239 241 _WriteReg(OHCI_COMMAND_STATUS, OHCI_HOST_CONTROLLER_RESET); 240 242 // Nominal time for a reset is 10 us 241 243 uint32 reset = 0; … … 252 254 } 253 255 254 256 // The controller is now in SUSPEND state, we have 2ms to go OPERATIONAL. 255 // Interrupts are disabled.256 257 257 258 // Set up host controller register 258 259 _WriteReg(OHCI_HCCA, (uint32)hccaPhysicalAddress); 259 260 _WriteReg(OHCI_CONTROL_HEAD_ED, (uint32)fDummyControl->physical_address); 260 261 _WriteReg(OHCI_BULK_HEAD_ED, (uint32)fDummyBulk->physical_address); 261 // Disable all interrupts262 _WriteReg(OHCI_INTERRUPT_DISABLE, OHCI_ALL_INTERRUPTS);263 262 // Switch on desired functional features 264 263 control = _ReadReg(OHCI_CONTROL); 265 264 control &= ~(OHCI_CONTROL_BULK_SERVICE_RATIO_MASK | OHCI_ENABLE_LIST