Rev 1616 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1616 | Rev 1875 | ||
---|---|---|---|
Line 234... | Line 234... | ||
234 | } |
234 | } |
235 | for (i = SKEL_ISO + 1; i < SKEL_ASYNC; ++i) |
235 | for (i = SKEL_ISO + 1; i < SKEL_ASYNC; ++i) |
236 | hc->qh[i]->qlink = hc->qh[SKEL_ASYNC]->dma | 2; |
236 | hc->qh[i]->qlink = hc->qh[SKEL_ASYNC]->dma | 2; |
237 | 237 | ||
Line 238... | Line -... | ||
238 | /* |
- | |
239 | td = alloc_td(); |
- | |
240 | - | ||
241 | td->link = 1; |
- | |
242 | td->status = (1<<24) | (1<<23) ; |
- | |
243 | td->token = TOKEN( 0x7FF, DATA0, 0, 0, 0xE1); |
- | |
244 | td->buffer = 0; |
- | |
245 | td->bk = NULL; |
- | |
246 | */ |
- | |
247 | - | ||
248 | for (i = 0; i < 1024; i++) |
238 | for (i = 0; i < 1024; i++) |
249 | { |
239 | { |
250 | int qnum; |
240 | int qnum; |
Line 251... | Line 241... | ||
251 | 241 | ||
Line 280... | Line 270... | ||
280 | USBCMD_MAXP); |
270 | USBCMD_MAXP); |
281 | 271 | ||
Line 282... | Line 272... | ||
282 | for (port = 0; port < hc->numports; ++port) |
272 | for (port = 0; port < hc->numports; ++port) |
283 | out16(hc->iobase + USBPORTSC1 + (port * 2), 0x200); |
273 | out16(hc->iobase + USBPORTSC1 + (port * 2), 0x200); |
284 | delay(100/10); |
- | |
Line 285... | Line 274... | ||
285 | 274 | ||
286 | for (port = 0; port < 2; ++port) |
275 | for (port = 0; port < 2; ++port) |
287 | { |
276 | { |
Line -... | Line 277... | ||
- | 277 | time_t timeout; |
|
- | 278 | ||
288 | time_t timeout; |
279 | delay(100/10); |
289 | 280 | ||
Line 290... | Line 281... | ||
290 | u32_t status = in16(hc->iobase + USBPORTSC1 + (port * 2)); |
281 | u32_t status = in16(hc->iobase + USBPORTSC1 + (port * 2)); |
Line 402... | Line 393... | ||
402 | 393 | ||
Line 403... | Line 394... | ||
403 | return true; |
394 | return true; |
404 | } |
395 | } |
Line -... | Line 396... | ||
- | 396 | ||
- | 397 | #define ALIGN16(x) (((x)+15)&~15) |
|
- | 398 | ||
- | 399 | #define MakePtr( cast, ptr, addValue ) (cast)((addr_t)(ptr)+(addr_t)(addValue)) |
|
405 | 400 | ||
406 | request_t *create_request(udev_t *dev, endp_t *enp, u32_t dir, |
401 | request_t *alloc_rq_buffer(udev_t *dev, endp_t *enp, u32_t dir, |
407 | void *data, size_t req_size) |
402 | size_t data_size) |
408 | { |
403 | { |
409 | td_t *td, *td_prev; |
- | |
410 | addr_t data_dma; |
404 | size_t packet_size = dev->ep0_size; |
411 | hc_t *hc = dev->host; |
405 | int dsize = data_size; |
- | 406 | size_t buf_size; |
|
412 | size_t packet_size = enp->size; |
407 | |
413 | size_t size = req_size; |
408 | addr_t buf_dma; |
- | 409 | addr_t td_dma; |
|
Line -... | Line 410... | ||
- | 410 | addr_t data_dma; |
|
- | 411 | ||
- | 412 | request_t *rq; |
|
- | 413 | ||
- | 414 | td_t *td, *td_prev; |
|
- | 415 | int td_count = 0; |
|
- | 416 | ||
- | 417 | while(dsize > 0) |
|
- | 418 | { |
|
- | 419 | td_count++; |
|
- | 420 | dsize-= packet_size; |
|
- | 421 | }; |
|
- | 422 | ||
- | 423 | buf_size = ALIGN16(sizeof(request_t)) + ALIGN16(data_size) + |
|
- | 424 | td_count*sizeof(td_t); |
|
- | 425 | ||
- | 426 | rq = (request_t*)hcd_buffer_alloc(buf_size, &buf_dma); |
|
414 | addr_t td_dma; |
427 | memset(rq, 0, buf_size); |
- | 428 | ||
Line 415... | Line 429... | ||
415 | 429 | data_dma = buf_dma + ALIGN16(sizeof(request_t)); |
|
Line -... | Line 430... | ||
- | 430 | td_dma = data_dma + ALIGN16(data_size); |
|
- | 431 | ||
416 | request_t *rq = (request_t*)kmalloc(sizeof(request_t),0); |
432 | INIT_LIST_HEAD(&rq->list); |
417 | 433 | ||
418 | INIT_LIST_HEAD(&rq->list); |
434 | rq->data = MakePtr(addr_t, rq, ALIGN16(sizeof(request_t))); |
Line 419... | Line -... | ||
419 | - | ||
420 | rq->data = (addr_t)data; |
- | |
421 | rq->size = req_size; |
- | |
422 | rq->dev = dev; |
435 | td = MakePtr(td_t*, rq->data, ALIGN16(data_size)); |
Line -... | Line 436... | ||
- | 436 | rq->td_head = td; |
|
- | 437 | rq->size = data_size; |
|
423 | 438 | rq->dev = dev; |
|
424 | if(data) |
439 | |
425 | data_dma = DMA(data); |
440 | td_prev = NULL; |
426 | 441 | ||
427 | td_prev = NULL; |
442 | dsize = data_size; |
428 | 443 | ||
Line 429... | Line -... | ||
429 | while(size > 0) |
- | |
430 | { |
444 | while(dsize != 0) |
Line 431... | Line 445... | ||
431 | if ( size < packet_size) |
445 | { |
Line 432... | Line -... | ||
432 | { |
- | |
433 | packet_size = size; |
- | |
434 | }; |
- | |
435 | 446 | if ( dsize < packet_size) |
|
436 | td = dma_pool_alloc(hc->td_pool, 0, &td_dma); |
447 | { |
437 | td->dma = td_dma; |
448 | packet_size = dsize; |
438 | 449 | }; |
|
439 | td->link = 1; |
450 | |
440 | 451 | td->dma = td_dma; |
|
441 | if(rq->td_head == NULL) |
452 | |
Line 442... | Line 453... | ||
442 | rq->td_head = td; |
453 | td->link = 1; |
Line -... | Line 454... | ||
- | 454 | ||
- | 455 | if( td_prev ) |
|
443 | 456 | td_prev->link = td->dma | 4; |
|
- | 457 | td->status = TD_CTRL_ACTIVE | dev->speed; |
|
444 | if( td_prev ) |
458 | td->token = TOKEN(packet_size,enp->toggle,enp->address, |
445 | td_prev->link = td->dma | 4; |
459 | dev->addr,dir); |
446 | td->status = TD_CTRL_ACTIVE | dev->speed; |
460 | td->buffer = data_dma; |
Line 447... | Line 461... | ||
447 | td->token = TOKEN(packet_size,enp->toggle,enp->address, |
461 | td->bk = td_prev; |
448 | dev->addr,dir); |
462 | |
Line 449... | Line 463... | ||
449 | td->buffer = data_dma; |
463 | td_prev = td; |
Line 450... | Line 464... | ||
450 | td->bk = td_prev; |
464 | |
451 | 465 | td++; |
|
Line 497... | Line 511... | ||
497 | 511 | ||
Line 498... | Line 512... | ||
498 | td0 = dma_pool_alloc(hc->td_pool, 0, &td_dma); |
512 | td0 = dma_pool_alloc(hc->td_pool, 0, &td_dma); |
499 | td0->dma = td_dma; |
513 | td0->dma = td_dma; |
Line 500... | Line 514... | ||
500 | 514 | ||
Line 501... | Line 515... | ||
501 | dbgprintf("alloc td0 %x dma %x\n", td0, td_dma); |
515 | // dbgprintf("alloc td0 %x dma %x\n", td0, td_dma); |
502 | 516 | ||
503 | td0->status = 0x00800000 | dev->speed; |
517 | td0->status = 0x00800000 | dev->speed; |
504 | td0->token = TOKEN( 8, DATA0, 0, dev->addr, 0x2D); |
518 | td0->token = TOKEN( 8, DATA0, 0, dev->addr, 0x2D); |
Line 519... | Line 533... | ||
519 | 533 | ||
Line 520... | Line 534... | ||
520 | td = dma_pool_alloc(hc->td_pool, 0, &td_dma); |
534 | td = dma_pool_alloc(hc->td_pool, 0, &td_dma); |
521 | td->dma = td_dma; |
535 | td->dma = td_dma; |
Line 522... | Line 536... | ||
522 | 536 | ||
Line 523... | Line 537... | ||
523 | dbgprintf("alloc td %x dma %x\n", td, td->dma); |
537 | // dbgprintf("alloc td %x dma %x\n", td, td->dma); |
524 | 538 | ||
525 | td_prev->link = td->dma | 4; |
539 | td_prev->link = td->dma | 4; |
526 | td->status = TD_CTRL_ACTIVE | dev->speed; |
540 | td->status = TD_CTRL_ACTIVE | dev->speed; |
Line 537... | Line 551... | ||
537 | 551 | ||
Line 538... | Line 552... | ||
538 | td = dma_pool_alloc(hc->td_pool, 0, &td_dma); |
552 | td = dma_pool_alloc(hc->td_pool, 0, &td_dma); |
539 | td->dma = td_dma; |
553 | td->dma = td_dma; |
Line 540... | Line 554... | ||
540 | 554 | ||
Line 541... | Line 555... | ||
541 | dbgprintf("alloc td %x dma %x\n", td, td->dma); |
555 | // dbgprintf("alloc td %x dma %x\n", td, td->dma); |
Line 542... | Line 556... | ||
542 | 556 |