Subversion Repositories Kolibri OS

Rev

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
/*