Changes in / [6991188:1a46610] in mainline
- Location:
- uspace/drv/ohci
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/ohci/batch.c
r6991188 r1a46610 145 145 data->tds[i].status, data->tds[i].cbp, data->tds[i].next, 146 146 data->tds[i].be); 147 if (!td_is_finished(&data->tds[i])) {147 if (!td_is_finished(&data->tds[i])) 148 148 return false; 149 }150 149 instance->error = td_error(&data->tds[i]); 151 150 /* FIXME: calculate real transfered size */ … … 288 287 289 288 /* data stage */ 290 size_t td_current = 0;289 size_t td_current = 1; 291 290 size_t remain_size = instance->buffer_size; 292 291 char *transfer_buffer = instance->transport_buffer; -
uspace/drv/ohci/hc.c
r6991188 r1a46610 113 113 ret, str_error(ret)); 114 114 hc_init_hw(instance); 115 fibril_mutex_initialize(&instance->guard);116 115 117 116 rh_init(&instance->rh, dev, instance->registers); … … 136 135 } 137 136 138 fibril_mutex_lock(&instance->guard);139 137 switch (batch->transfer_type) { 140 138 case USB_TRANSFER_CONTROL: … … 159 157 case USB_TRANSFER_INTERRUPT: 160 158 case USB_TRANSFER_ISOCHRONOUS: 161 instance->registers->control &= (~C_PLE & ~C_IE);159 instance->registers->control &= ~C_PLE; 162 160 transfer_list_add_batch( 163 161 instance->transfers[batch->transfer_type], batch); 164 instance->registers->control |= C_PLE | C_IE; 165 usb_log_debug2("Added periodic transfer: %x.\n", 166 instance->registers->periodic_current); 162 instance->registers->control |= C_PLE; 167 163 break; 168 164 default: 169 165 break; 170 166 } 171 fibril_mutex_unlock(&instance->guard);172 167 return EOK; 173 168 } … … 183 178 usb_log_debug("OHCI interrupt: %x.\n", status); 184 179 180 185 181 if (status & IS_WDH) { 186 fibril_mutex_lock(&instance->guard);187 usb_log_debug2("HCCA: %p-%p(%p).\n", instance->hcca,188 instance->registers->hcca, addr_to_phys(instance->hcca));189 usb_log_debug2("Periodic current: %p.\n",190 instance->registers->periodic_current);191 182 LIST_INITIALIZE(done); 192 183 transfer_list_remove_finished( … … 206 197 usb_transfer_batch_finish(batch); 207 198 } 208 fibril_mutex_unlock(&instance->guard);209 199 } 210 200 } … … 218 208 instance->registers->interrupt_status = status; 219 209 hc_interrupt(instance, status); 220 async_usleep( 50000);210 async_usleep(10000); 221 211 } 222 212 return EOK; … … 355 345 SETUP_TRANSFER_LIST(transfers_control, "CONTROL"); 356 346 SETUP_TRANSFER_LIST(transfers_bulk, "BULK"); 357 #undef SETUP_TRANSFER_LIST 347 358 348 transfer_list_set_next(&instance->transfers_interrupt, 359 349 &instance->transfers_isochronous); … … 370 360 371 361 return EOK; 362 #undef CHECK_RET_CLEAR_RETURN 372 363 } 373 364 /*----------------------------------------------------------------------------*/ -
uspace/drv/ohci/hc.h
r6991188 r1a46610 69 69 usb_endpoint_manager_t ep_manager; 70 70 fid_t interrupt_emulator; 71 fibril_mutex_t guard;72 71 } hc_t; 73 72 -
uspace/drv/ohci/hw_struct/hcca.h
r6991188 r1a46610 43 43 uint32_t done_head; 44 44 uint32_t reserved[29]; 45 } __attribute__((packed , aligned)) hcca_t;45 } __attribute__((packed)) hcca_t; 46 46 47 47 #endif -
uspace/drv/ohci/hw_struct/transfer_descriptor.c
r6991188 r1a46610 53 53 } 54 54 if (buffer != NULL) { 55 assert(size != 0);56 55 instance->cbp = addr_to_phys(buffer); 57 56 instance->be = addr_to_phys(buffer + size - 1); -
uspace/drv/ohci/hw_struct/transfer_descriptor.h
r6991188 r1a46610 86 86 int cc = (instance->status >> TD_STATUS_CC_SHIFT) & TD_STATUS_CC_MASK; 87 87 /* something went wrong, error code is set */ 88 if (cc != CC_NOACCESS1 && cc != CC_NOACCESS2 ) {88 if (cc != CC_NOACCESS1 && cc != CC_NOACCESS2 && cc != CC_NOERROR) { 89 89 return true; 90 90 } -
uspace/drv/ohci/main.c
r6991188 r1a46610 92 92 int main(int argc, char *argv[]) 93 93 { 94 usb_log_enable(USB_LOG_LEVEL_DE FAULT, NAME);94 usb_log_enable(USB_LOG_LEVEL_DEBUG, NAME); 95 95 sleep(5); 96 96 return ddf_driver_main(&ohci_driver); -
uspace/drv/ohci/ohci_regs.h
r6991188 r1a46610 100 100 #define HCCA_PTR_MASK 0xffffff00 /* HCCA is 256B aligned */ 101 101 102 /** Currently executed period icendpoint */103 const volatile uint32_t period ic_current;102 /** Currently executed period endpoint */ 103 const volatile uint32_t period_current; 104 104 105 105 /** The first control endpoint */ -
uspace/drv/ohci/transfer_list.c
r6991188 r1a46610 79 79 assert(instance); 80 80 assert(next); 81 /* Set both queue_head.next to point to the follower */ 81 82 ed_append_ed(instance->list_head, next->list_head); 82 83 } … … 124 125 batch, instance->name, first, batch_ed(first)); 125 126 if (last_ed == instance->list_head) { 126 usb_log_debug2("%s head ED(%p-%p): %x:%x:%x:%x.\n", 127 instance->name, last_ed, instance->list_head_pa, 128 last_ed->status, last_ed->td_tail, last_ed->td_head, 129 last_ed->next); 127 usb_log_debug2("%s head ED: %x:%x:%x:%x.\n", instance->name, 128 last_ed->status, last_ed->td_tail, last_ed->td_head, 129 last_ed->next); 130 130 } 131 131 fibril_mutex_unlock(&instance->guard); -
uspace/drv/ohci/utils/malloc32.h
r6991188 r1a46610 41 41 #include <as.h> 42 42 43 #define UHCI_STRCUTURES_ALIGNMENT 16 43 44 #define UHCI_REQUIRED_PAGE_SIZE 4096 44 45 … … 64 65 */ 65 66 static inline void * malloc32(size_t size) 66 { return memalign( size, size); }67 { return memalign(UHCI_STRCUTURES_ALIGNMENT, size); } 67 68 /*----------------------------------------------------------------------------*/ 68 69 /** Physical mallocator simulator
Note:
See TracChangeset
for help on using the changeset viewer.