403 * Make this HCD instance known to USBA
404 * (dma_attr must be passed for USBA busctl's)
405 */
406 hcdi_args.usba_hcdi_register_version = HCDI_REGISTER_VERSION;
407 hcdi_args.usba_hcdi_register_dip = dip;
408 hcdi_args.usba_hcdi_register_ops = uhcip->uhci_hcdi_ops;
409 hcdi_args.usba_hcdi_register_dma_attr = &uhcip->uhci_dma_attr;
410 hcdi_args.usba_hcdi_register_iblock_cookie =
411 (ddi_iblock_cookie_t)(uintptr_t)uhcip->uhci_intr_pri;
412
413 if (usba_hcdi_register(&hcdi_args, 0) != USB_SUCCESS) {
414
415 goto fail;
416 }
417
418 #ifndef __sparc
419 /*
420 * On NCR system, the driver seen failure of some commands
421 * while booting. This delay mysteriously solved the problem.
422 */
423 delay(drv_usectohz(uhci_attach_wait*1000000));
424 #endif
425
426 /*
427 * Create another timeout handler to check whether any
428 * control/bulk/interrupt commands failed.
429 * This gets called every second.
430 */
431 uhcip->uhci_cmd_timeout_id = timeout(uhci_cmd_timeout_hdlr,
432 (void *)uhcip, UHCI_ONE_SECOND);
433
434 mutex_enter(&uhcip->uhci_int_mutex);
435
436 /*
437 * Set HcInterruptEnable to enable all interrupts except Root
438 * Hub Status change and SOF interrupts.
439 */
440 Set_OpReg16(USBINTR, ENABLE_ALL_INTRS);
441
442 /* Test the SOF interrupt */
443 if (uhci_wait_for_sof(uhcip) != USB_SUCCESS) {
|
403 * Make this HCD instance known to USBA
404 * (dma_attr must be passed for USBA busctl's)
405 */
406 hcdi_args.usba_hcdi_register_version = HCDI_REGISTER_VERSION;
407 hcdi_args.usba_hcdi_register_dip = dip;
408 hcdi_args.usba_hcdi_register_ops = uhcip->uhci_hcdi_ops;
409 hcdi_args.usba_hcdi_register_dma_attr = &uhcip->uhci_dma_attr;
410 hcdi_args.usba_hcdi_register_iblock_cookie =
411 (ddi_iblock_cookie_t)(uintptr_t)uhcip->uhci_intr_pri;
412
413 if (usba_hcdi_register(&hcdi_args, 0) != USB_SUCCESS) {
414
415 goto fail;
416 }
417
418 #ifndef __sparc
419 /*
420 * On NCR system, the driver seen failure of some commands
421 * while booting. This delay mysteriously solved the problem.
422 */
423 delay(drv_sectohz(uhci_attach_wait));
424 #endif
425
426 /*
427 * Create another timeout handler to check whether any
428 * control/bulk/interrupt commands failed.
429 * This gets called every second.
430 */
431 uhcip->uhci_cmd_timeout_id = timeout(uhci_cmd_timeout_hdlr,
432 (void *)uhcip, UHCI_ONE_SECOND);
433
434 mutex_enter(&uhcip->uhci_int_mutex);
435
436 /*
437 * Set HcInterruptEnable to enable all interrupts except Root
438 * Hub Status change and SOF interrupts.
439 */
440 Set_OpReg16(USBINTR, ENABLE_ALL_INTRS);
441
442 /* Test the SOF interrupt */
443 if (uhci_wait_for_sof(uhcip) != USB_SUCCESS) {
|