Rev 1613 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1613 | Rev 1616 | ||
---|---|---|---|
Line 214... | Line 214... | ||
214 | hc->frame_base = (u32_t*)KernelAlloc(4096); |
214 | hc->frame_base = (u32_t*)KernelAlloc(4096); |
215 | hc->frame_dma = GetPgAddr(hc->frame_base); |
215 | hc->frame_dma = GetPgAddr(hc->frame_base); |
216 | hc->frame_number = 0; |
216 | hc->frame_number = 0; |
Line -... | Line 217... | ||
- | 217 | ||
- | 218 | hc->td_pool = dma_pool_create("uhci_td", NULL, |
|
- | 219 | sizeof(td_t), 16, 0); |
|
- | 220 | if (!hc->td_pool) |
|
- | 221 | { |
|
- | 222 | dbgprintf("unable to create td dma_pool\n"); |
|
- | 223 | goto err_create_td_pool; |
|
Line 217... | Line 224... | ||
217 | 224 | } |
|
218 | 225 | ||
219 | for (i = 0; i < UHCI_NUM_SKELQH; i++) |
226 | for (i = 0; i < UHCI_NUM_SKELQH; i++) |
Line 334... | Line 341... | ||
334 | }; |
341 | }; |
335 | }; |
342 | }; |
336 | }; |
343 | }; |
337 | return true; |
344 | return true; |
338 | }; |
345 | |
- | 346 | err_create_td_pool: |
|
- | 347 | ||
- | 348 | KernelFree(hc->frame_base); |
|
- | 349 | ||
- | 350 | return false; |
|
- | 351 | }; |
|
339 | 352 | ||
Line 340... | Line 353... | ||
340 | u16_t __attribute__((aligned(16))) |
353 | u16_t __attribute__((aligned(16))) |
341 | req_descr[4] = {0x0680,0x0100,0x0000,8}; |
354 | req_descr[4] = {0x0680,0x0100,0x0000,8}; |
Line 394... | Line 407... | ||
394 | void *data, size_t req_size) |
407 | void *data, size_t req_size) |
395 | { |
408 | { |
396 | td_t *td, *td_prev; |
409 | td_t *td, *td_prev; |
397 | addr_t data_dma; |
410 | addr_t data_dma; |
398 | 411 | hc_t *hc = dev->host; |
|
399 | size_t packet_size = enp->size; |
- | |
- | 412 | size_t packet_size = enp->size; |
|
400 | size_t size = req_size; |
413 | size_t size = req_size; |
401 | 414 | addr_t td_dma; |
|
- | 415 | ||
Line 402... | Line 416... | ||
402 | request_t *rq = (request_t*)kmalloc(sizeof(request_t),0); |
416 | request_t *rq = (request_t*)kmalloc(sizeof(request_t),0); |
Line 403... | Line 417... | ||
403 | 417 | ||
Line 418... | Line 432... | ||
418 | { |
432 | { |
419 | packet_size = size; |
433 | packet_size = size; |
420 | }; |
434 | }; |
421 | 435 | ||
Line -... | Line 436... | ||
- | 436 | td = dma_pool_alloc(hc->td_pool, 0, &td_dma); |
|
422 | td = alloc_td(); |
437 | td->dma = td_dma; |
- | 438 | ||
423 | td->link = 1; |
439 | td->link = 1; |
Line 424... | Line 440... | ||
424 | 440 | ||
425 | if(rq->td_head == NULL) |
441 | if(rq->td_head == NULL) |
Line 463... | Line 479... | ||
463 | 479 | ||
Line 464... | Line 480... | ||
464 | td_t *td0, *td, *td_prev; |
480 | td_t *td0, *td, *td_prev; |
465 | qh_t *qh; |
481 | qh_t *qh; |
466 | addr_t data_dma = 0; |
482 | addr_t data_dma = 0; |
- | 483 | hc_t *hc = dev->host; |
|
- | 484 | ||
- | 485 | addr_t td_dma = 0; |
|
- | 486 | ||
467 | bool retval; |
487 | bool retval; |
Line 468... | Line 488... | ||
468 | 488 | ||
Line 474... | Line 494... | ||
474 | rq->data = (addr_t)data; |
494 | rq->data = (addr_t)data; |
475 | rq->size = req_size; |
495 | rq->size = req_size; |
476 | rq->dev = dev; |
496 | rq->dev = dev; |
Line -... | Line 497... | ||
- | 497 | ||
477 | 498 | td0 = dma_pool_alloc(hc->td_pool, 0, &td_dma); |
|
- | 499 | td0->dma = td_dma; |
|
- | 500 | ||
Line 478... | Line 501... | ||
478 | td0 = alloc_td(); |
501 | dbgprintf("alloc td0 %x dma %x\n", td0, td_dma); |
479 | 502 | ||
480 | td0->status = 0x00800000 | dev->speed; |
503 | td0->status = 0x00800000 | dev->speed; |
481 | td0->token = TOKEN( 8, DATA0, 0, dev->addr, 0x2D); |
504 | td0->token = TOKEN( 8, DATA0, 0, dev->addr, 0x2D); |
Line 493... | Line 516... | ||
493 | { |
516 | { |
494 | packet_size = size; |
517 | packet_size = size; |
495 | }; |
518 | }; |
496 | 519 | ||
Line -... | Line 520... | ||
- | 520 | td = dma_pool_alloc(hc->td_pool, 0, &td_dma); |
|
497 | td = alloc_td(); |
521 | td->dma = td_dma; |
- | 522 | ||
- | 523 | dbgprintf("alloc td %x dma %x\n", td, td->dma); |
|
- | 524 | ||
498 | td_prev->link = td->dma | 4; |
525 | td_prev->link = td->dma | 4; |
499 | td->status = TD_CTRL_ACTIVE | dev->speed; |
526 | td->status = TD_CTRL_ACTIVE | dev->speed; |
500 | td->token = TOKEN(packet_size, toggle, 0,dev->addr, pid); |
527 | td->token = TOKEN(packet_size, toggle, 0,dev->addr, pid); |
501 | td->buffer = data_dma; |
528 | td->buffer = data_dma; |
502 | td->bk = td_prev; |
529 | td->bk = td_prev; |
Line 507... | Line 534... | ||
507 | size-= packet_size; |
534 | size-= packet_size; |
508 | toggle ^= DATA1; |
535 | toggle ^= DATA1; |
509 | } |
536 | } |
510 | 537 | ||
Line -... | Line 538... | ||
- | 538 | td = dma_pool_alloc(hc->td_pool, 0, &td_dma); |
|
511 | td = alloc_td(); |
539 | td->dma = td_dma; |
- | 540 | ||
- | 541 | dbgprintf("alloc td %x dma %x\n", td, td->dma); |
|
- | 542 | ||
512 | td_prev->link = td->dma | 4; |
543 | td_prev->link = td->dma | 4; |
Line 513... | Line 544... | ||
513 | 544 | ||
Line 514... | Line 545... | ||
514 | pid = (pid == DIN) ? DOUT : DIN; |
545 | pid = (pid == DIN) ? DOUT : DIN; |
Line 571... | Line 602... | ||
571 | 602 | ||
Line 572... | Line 603... | ||
572 | do |
603 | do |
573 | { |
604 | { |
574 | td_prev = td->bk; |
605 | td_prev = td->bk; |
575 | free_td(td); |
606 | dma_pool_free(hc->td_pool, td, td->dma); |
576 | td = td_prev; |
607 | td = td_prev; |
577 | }while( td != NULL); |
608 | }while( td != NULL); |
Line 578... | Line 609... | ||
578 | 609 | ||
579 | /* |
610 | /* |