Changeset ff34e5a in mainline
- Timestamp:
- 2011-03-14T14:04:15Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 9370884
- Parents:
- 6298d80
- Location:
- uspace/drv/uhci-hcd
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/uhci-hcd/uhci.c
r6298d80 rff34e5a 174 174 "Failed(%d) to disable legacy USB: %s.\n", ret, str_error(ret)); 175 175 176 #if 0 176 bool interrupts = false; 177 177 ret = pci_enable_interrupts(device); 178 178 if (ret != EOK) { … … 180 180 "Failed(%d) to enable interrupts, fall back to polling.\n", 181 181 ret); 182 } else { 183 usb_log_debug("Hw interrupts enabled.\n"); 184 interrupts = true; 182 185 } 183 #endif184 186 185 187 instance->hc_fun = ddf_fun_create(device, fun_exposed, "uhci-hc"); 186 188 ret = (instance->hc_fun == NULL) ? ENOMEM : EOK; 187 CHECK_RET_DEST_FUN_RETURN(ret, "Failed(%d) to create HC function.\n", ret); 188 189 ret = uhci_hc_init( 190 &instance->hc, instance->hc_fun, (void*)io_reg_base, io_reg_size); 189 CHECK_RET_DEST_FUN_RETURN(ret, 190 "Failed(%d) to create HC function.\n", ret); 191 192 ret = uhci_hc_init(&instance->hc, instance->hc_fun, 193 (void*)io_reg_base, io_reg_size, interrupts); 191 194 CHECK_RET_DEST_FUN_RETURN(ret, "Failed(%d) to init uhci-hcd.\n", ret); 192 195 instance->hc_fun->ops = &uhci_hc_ops; … … 234 237 #undef CHECK_RET_FINI_RETURN 235 238 } 236 237 239 /** 238 240 * @} -
uspace/drv/uhci-hcd/uhci_hc.c
r6298d80 rff34e5a 82 82 * interrupt fibrils. 83 83 */ 84 int uhci_hc_init(uhci_hc_t *instance, ddf_fun_t *fun, void *regs, size_t reg_size) 84 int uhci_hc_init(uhci_hc_t *instance, ddf_fun_t *fun, 85 void *regs, size_t reg_size, bool interrupts) 85 86 { 86 87 assert(reg_size >= sizeof(regs_t)); … … 95 96 } else (void) 0 96 97 98 instance->hw_interrupts = interrupts; 97 99 /* Setup UHCI function. */ 98 100 instance->ddf_instance = fun; … … 113 115 114 116 uhci_hc_init_hw(instance); 115 instance->cleaner = 116 fibril_create(uhci_hc_interrupt_emulator, instance); 117 fibril_add_ready(instance->cleaner); 117 if (!interrupts) { 118 instance->cleaner = 119 fibril_create(uhci_hc_interrupt_emulator, instance); 120 fibril_add_ready(instance->cleaner); 121 } 118 122 119 123 instance->debug_checker = fibril_create(uhci_hc_debug_checker, instance); … … 149 153 pio_write_32(®isters->flbaseadd, pa); 150 154 151 /* Enable all interrupts, but resume interrupt */ 152 pio_write_16(&instance->registers->usbintr, 153 UHCI_INTR_CRC | UHCI_INTR_COMPLETE | UHCI_INTR_SHORT_PACKET); 155 if (instance->hw_interrupts) { 156 /* Enable all interrupts, but resume interrupt */ 157 pio_write_16(&instance->registers->usbintr, 158 UHCI_INTR_CRC | UHCI_INTR_COMPLETE | UHCI_INTR_SHORT_PACKET); 159 } 154 160 155 161 uint16_t status = pio_read_16(®isters->usbcmd); -
uspace/drv/uhci-hcd/uhci_hc.h
r6298d80 rff34e5a 99 99 fid_t cleaner; 100 100 fid_t debug_checker; 101 bool hw_interrupts; 101 102 102 103 ddf_fun_t *ddf_instance; 103 104 } uhci_hc_t; 104 105 105 int uhci_hc_init(uhci_hc_t *instance, ddf_fun_t *fun, void *regs, size_t reg_size); 106 int uhci_hc_init(uhci_hc_t *instance, ddf_fun_t *fun, 107 void *regs, size_t reg_size, bool interupts); 106 108 107 109 int uhci_hc_schedule(uhci_hc_t *instance, batch_t *batch);
Note:
See TracChangeset
for help on using the changeset viewer.