Changes in uspace/drv/ohci/hc.c [8790650:c6fe469] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/ohci/hc.c
r8790650 rc6fe469 135 135 } 136 136 137 transfer_list_add_batch(138 instance->transfers[batch->transfer_type], batch);139 140 137 switch (batch->transfer_type) { 141 138 case USB_TRANSFER_CONTROL: 142 139 instance->registers->control &= ~C_CLE; 140 transfer_list_add_batch( 141 instance->transfers[batch->transfer_type], batch); 143 142 instance->registers->command_status |= CS_CLF; 144 usb_log_debug2("Set control transfer filled: %x.\n",143 usb_log_debug2("Set CS control transfer filled: %x.\n", 145 144 instance->registers->command_status); 145 instance->registers->control_current = 0; 146 146 instance->registers->control |= C_CLE; 147 147 break; 148 148 case USB_TRANSFER_BULK: 149 instance->registers->control &= ~C_BLE; 150 transfer_list_add_batch( 151 instance->transfers[batch->transfer_type], batch); 149 152 instance->registers->command_status |= CS_BLF; 150 153 usb_log_debug2("Set bulk transfer filled: %x.\n", 151 154 instance->registers->command_status); 155 instance->registers->control |= C_BLE; 156 break; 157 case USB_TRANSFER_INTERRUPT: 158 case USB_TRANSFER_ISOCHRONOUS: 159 instance->registers->control &= ~C_PLE; 160 transfer_list_add_batch( 161 instance->transfers[batch->transfer_type], batch); 162 instance->registers->control |= C_PLE; 152 163 break; 153 164 default: … … 165 176 rh_interrupt(&instance->rh); 166 177 167 usb_log_info("OHCI interrupt: %x.\n", status); 168 169 170 LIST_INITIALIZE(done); 171 transfer_list_remove_finished(&instance->transfers_interrupt, &done); 172 transfer_list_remove_finished(&instance->transfers_isochronous, &done); 173 transfer_list_remove_finished(&instance->transfers_control, &done); 174 transfer_list_remove_finished(&instance->transfers_bulk, &done); 175 176 while (!list_empty(&done)) { 177 link_t *item = done.next; 178 list_remove(item); 179 usb_transfer_batch_t *batch = 180 list_get_instance(item, usb_transfer_batch_t, link); 181 usb_transfer_batch_finish(batch); 178 usb_log_debug("OHCI interrupt: %x.\n", status); 179 180 181 if (status & IS_WDH) { 182 LIST_INITIALIZE(done); 183 transfer_list_remove_finished( 184 &instance->transfers_interrupt, &done); 185 transfer_list_remove_finished( 186 &instance->transfers_isochronous, &done); 187 transfer_list_remove_finished( 188 &instance->transfers_control, &done); 189 transfer_list_remove_finished( 190 &instance->transfers_bulk, &done); 191 192 while (!list_empty(&done)) { 193 link_t *item = done.next; 194 list_remove(item); 195 usb_transfer_batch_t *batch = 196 list_get_instance(item, usb_transfer_batch_t, link); 197 usb_transfer_batch_finish(batch); 198 } 182 199 } 183 200 } … … 191 208 instance->registers->interrupt_status = status; 192 209 hc_interrupt(instance, status); 193 async_usleep(1000 );210 async_usleep(10000); 194 211 } 195 212 return EOK; … … 267 284 instance->registers->control); 268 285 286 /* Use HCCA */ 287 instance->registers->hcca = addr_to_phys(instance->hcca); 288 289 /* Use queues */ 290 instance->registers->bulk_head = instance->transfers_bulk.list_head_pa; 291 usb_log_debug2("Bulk HEAD set to: %p(%p).\n", 292 instance->transfers_bulk.list_head, 293 instance->transfers_bulk.list_head_pa); 294 295 instance->registers->control_head = 296 instance->transfers_control.list_head_pa; 297 usb_log_debug2("Control HEAD set to: %p(%p).\n", 298 instance->transfers_control.list_head, 299 instance->transfers_control.list_head_pa); 300 269 301 /* Enable queues */ 270 302 instance->registers->control |= (C_PLE | C_IE | C_CLE | C_BLE); … … 342 374 return ENOMEM; 343 375 bzero(instance->hcca, sizeof(hcca_t)); 344 instance->registers->hcca = addr_to_phys(instance->hcca); 345 usb_log_debug2("OHCI HCCA initialized at %p(%p).\n", 346 instance->hcca, instance->registers->hcca); 347 348 /* Use queues */ 349 instance->registers->bulk_head = instance->transfers_bulk.list_head_pa; 350 usb_log_debug2("Bulk HEAD set to: %p(%p).\n", 351 instance->transfers_bulk.list_head, 352 instance->transfers_bulk.list_head_pa); 353 354 instance->registers->control_head = 355 instance->transfers_control.list_head_pa; 356 usb_log_debug2("Control HEAD set to: %p(%p).\n", 357 instance->transfers_control.list_head, 358 instance->transfers_control.list_head_pa); 376 usb_log_debug2("OHCI HCCA initialized at %p.\n", instance->hcca); 359 377 360 378 unsigned i = 0;
Note:
See TracChangeset
for help on using the changeset viewer.