Changeset 02cacce in mainline for uspace/drv/ohci/hc.c
- Timestamp:
- 2011-05-18T18:24:22Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 030937e
- Parents:
- 45e0e07
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/ohci/hc.c
r45e0e07 r02cacce 51 51 static int hc_init_memory(hc_t *instance); 52 52 /*----------------------------------------------------------------------------*/ 53 /** Announce OHCI root hub to the DDF 54 * 55 * @param[in] instance OHCI driver intance 56 * @param[in] hub_fun DDF fuction representing OHCI root hub 57 * @return Error code 58 */ 53 59 int hc_register_hub(hc_t *instance, ddf_fun_t *hub_fun) 54 60 { … … 95 101 } 96 102 /*----------------------------------------------------------------------------*/ 103 /** Initialize OHCI hc driver structure 104 * 105 * @param[in] instance Memory place for the structure. 106 * @param[in] regs Address of the memory mapped I/O registers. 107 * @param[in] reg_size Size of the memory mapped area. 108 * @param[in] interrupts True if w interrupts should be used 109 * @return Error code 110 */ 97 111 int hc_init(hc_t *instance, uintptr_t regs, size_t reg_size, bool interrupts) 98 112 { … … 136 150 } 137 151 /*----------------------------------------------------------------------------*/ 152 /** Create end register endpoint structures 153 * 154 * @param[in] instance OHCI driver structure. 155 * @param[in] address USB address of the device. 156 * @param[in] endpoint USB endpoint number. 157 * @param[in] speed Communication speeed of the device. 158 * @param[in] type Endpoint's transfer type. 159 * @param[in] direction Endpoint's direction. 160 * @param[in] mps Maximum packet size the endpoint accepts. 161 * @param[in] size Maximum allowed buffer size. 162 * @param[in] interval Time between transfers(interrupt transfers only). 163 * @return Error code 164 */ 138 165 int hc_add_endpoint( 139 166 hc_t *instance, usb_address_t address, usb_endpoint_t endpoint, … … 193 220 } 194 221 /*----------------------------------------------------------------------------*/ 222 /** Dequeue and delete endpoint structures 223 * 224 * @param[in] instance OHCI hc driver structure. 225 * @param[in] address USB address of the device. 226 * @param[in] endpoint USB endpoint number. 227 * @param[in] direction Direction of the endpoint. 228 * @return Error code 229 */ 195 230 int hc_remove_endpoint(hc_t *instance, usb_address_t address, 196 231 usb_endpoint_t endpoint, usb_direction_t direction) … … 243 278 } 244 279 /*----------------------------------------------------------------------------*/ 280 /** Get access to endpoint structures 281 * 282 * @param[in] instance OHCI hc driver structure. 283 * @param[in] address USB address of the device. 284 * @param[in] endpoint USB endpoint number. 285 * @param[in] direction Direction of the endpoint. 286 * @param[out] bw Reserved bandwidth. 287 * @return Error code 288 */ 245 289 endpoint_t * hc_get_endpoint(hc_t *instance, usb_address_t address, 246 290 usb_endpoint_t endpoint, usb_direction_t direction, size_t *bw) … … 254 298 } 255 299 /*----------------------------------------------------------------------------*/ 300 /** Add USB transfer to the schedule. 301 * 302 * @param[in] instance OHCI hc driver structure. 303 * @param[in] batch Batch representing the transfer. 304 * @return Error code. 305 */ 256 306 int hc_schedule(hc_t *instance, usb_transfer_batch_t *batch) 257 307 { … … 260 310 assert(batch->ep); 261 311 262 /* check for root hub communication */312 /* Check for root hub communication */ 263 313 if (batch->ep->address == instance->rh.address) { 264 314 return rh_request(&instance->rh, batch); … … 268 318 list_append(&batch->link, &instance->pending_batches); 269 319 batch_commit(batch); 270 switch (batch->ep->transfer_type) { 320 321 /* Control and bulk schedules need a kick to start working */ 322 switch (batch->ep->transfer_type) 323 { 271 324 case USB_TRANSFER_CONTROL: 272 325 instance->registers->command_status |= CS_CLF; … … 278 331 break; 279 332 } 280 281 333 fibril_mutex_unlock(&instance->guard); 282 334 return EOK; 283 335 } 284 336 /*----------------------------------------------------------------------------*/ 337 /** Interrupt handling routine 338 * 339 * @param[in] instance OHCI hc driver structure. 340 * @param[in] status Value of the status register at the time of interrupt. 341 */ 285 342 void hc_interrupt(hc_t *instance, uint32_t status) 286 343 { … … 321 378 } 322 379 /*----------------------------------------------------------------------------*/ 380 /** Check status register regularly 381 * 382 * @param[in] instance OHCI hc driver structure. 383 * @return Error code 384 */ 323 385 int interrupt_emulator(hc_t *instance) 324 386 { … … 329 391 instance->registers->interrupt_status = status; 330 392 hc_interrupt(instance, status); 331 async_usleep( 50000);393 async_usleep(10000); 332 394 } 333 395 return EOK; 334 396 } 335 397 /*----------------------------------------------------------------------------*/ 398 /** Turn off any (BIOS)driver that might be in control of the device. 399 * 400 * @param[in] instance OHCI hc driver structure. 401 */ 336 402 void hc_gain_control(hc_t *instance) 337 403 { … … 383 449 } 384 450 /*----------------------------------------------------------------------------*/ 451 /** OHCI hw initialization routine. 452 * 453 * @param[in] instance OHCI hc driver structure. 454 */ 385 455 void hc_start_hw(hc_t *instance) 386 456 { … … 450 520 } 451 521 /*----------------------------------------------------------------------------*/ 522 /** Initialize schedule queues 523 * 524 * @param[in] instance OHCI hc driver structure 525 * @return Error code 526 */ 452 527 int hc_init_transfer_lists(hc_t *instance) 453 528 { … … 465 540 endpoint_list_fini(&instance->lists[USB_TRANSFER_BULK]); \ 466 541 } \ 542 return ret; \ 467 543 } while (0) 468 544 … … 478 554 } 479 555 /*----------------------------------------------------------------------------*/ 556 /** Initialize memory structures used by the OHCI hcd. 557 * 558 * @param[in] instance OHCI hc driver structure. 559 * @return Error code. 560 */ 480 561 int hc_init_memory(hc_t *instance) 481 562 { … … 504 585 /* Init interrupt code */ 505 586 instance->interrupt_code.cmds = instance->interrupt_commands; 587 instance->interrupt_code.cmdcount = OHCI_NEEDED_IRQ_COMMANDS; 506 588 { 507 589 /* Read status register */ … … 523 605 instance->interrupt_commands[2].srcarg = 2; 524 606 525 /* Write 607 /* Write-clean status register */ 526 608 instance->interrupt_commands[3].cmd = CMD_MEM_WRITE_A_32; 527 609 instance->interrupt_commands[3].srcarg = 1; … … 531 613 /* Accept interrupt */ 532 614 instance->interrupt_commands[4].cmd = CMD_ACCEPT; 533 534 instance->interrupt_code.cmdcount = OHCI_NEEDED_IRQ_COMMANDS;535 615 } 536 616
Note:
See TracChangeset
for help on using the changeset viewer.