|
301 | 301 |
|
302 | 302 | /* Structures */
|
303 | 303 |
|
304 |
| -struct dwc3_trb_hw; |
| 304 | +struct dwc3_trb; |
305 | 305 |
|
306 | 306 | /**
|
307 | 307 | * struct dwc3_event_buffer - Software event buffer representation
|
@@ -356,7 +356,7 @@ struct dwc3_ep {
|
356 | 356 | struct list_head request_list;
|
357 | 357 | struct list_head req_queued;
|
358 | 358 |
|
359 |
| - struct dwc3_trb_hw *trb_pool; |
| 359 | + struct dwc3_trb *trb_pool; |
360 | 360 | dma_addr_t trb_pool_dma;
|
361 | 361 | u32 free_slot;
|
362 | 362 | u32 busy_slot;
|
@@ -431,102 +431,49 @@ enum dwc3_device_state {
|
431 | 431 | DWC3_CONFIGURED_STATE,
|
432 | 432 | };
|
433 | 433 |
|
434 |
| -/** |
435 |
| - * struct dwc3_trb - transfer request block |
436 |
| - * @bpl: lower 32bit of the buffer |
437 |
| - * @bph: higher 32bit of the buffer |
438 |
| - * @length: buffer size (up to 16mb - 1) |
439 |
| - * @pcm1: packet count m1 |
440 |
| - * @trbsts: trb status |
441 |
| - * 0 = ok |
442 |
| - * 1 = missed isoc |
443 |
| - * 2 = setup pending |
444 |
| - * @hwo: hardware owner of descriptor |
445 |
| - * @lst: last trb |
446 |
| - * @chn: chain buffers |
447 |
| - * @csp: continue on short packets (only supported on isoc eps) |
448 |
| - * @trbctl: trb control |
449 |
| - * 1 = normal |
450 |
| - * 2 = control-setup |
451 |
| - * 3 = control-status-2 |
452 |
| - * 4 = control-status-3 |
453 |
| - * 5 = control-data (first trb of data stage) |
454 |
| - * 6 = isochronous-first (first trb of service interval) |
455 |
| - * 7 = isochronous |
456 |
| - * 8 = link trb |
457 |
| - * others = reserved |
458 |
| - * @isp_imi: interrupt on short packet / interrupt on missed isoc |
459 |
| - * @ioc: interrupt on complete |
460 |
| - * @sid_sofn: Stream ID / SOF Number |
461 |
| - */ |
462 |
| -struct dwc3_trb { |
463 |
| - u64 bplh; |
464 |
| - |
465 |
| - union { |
466 |
| - struct { |
467 |
| - u32 length:24; |
468 |
| - u32 pcm1:2; |
469 |
| - u32 reserved27_26:2; |
470 |
| - u32 trbsts:4; |
471 |
| -#define DWC3_TRB_STS_OKAY 0 |
472 |
| -#define DWC3_TRB_STS_MISSED_ISOC 1 |
473 |
| -#define DWC3_TRB_STS_SETUP_PENDING 2 |
474 |
| - }; |
475 |
| - u32 len_pcm; |
476 |
| - }; |
477 |
| - |
478 |
| - union { |
479 |
| - struct { |
480 |
| - u32 hwo:1; |
481 |
| - u32 lst:1; |
482 |
| - u32 chn:1; |
483 |
| - u32 csp:1; |
484 |
| - u32 trbctl:6; |
485 |
| - u32 isp_imi:1; |
486 |
| - u32 ioc:1; |
487 |
| - u32 reserved13_12:2; |
488 |
| - u32 sid_sofn:16; |
489 |
| - u32 reserved31_30:2; |
490 |
| - }; |
491 |
| - u32 control; |
492 |
| - }; |
493 |
| -} __packed; |
| 434 | +/* TRB Length, PCM and Status */ |
| 435 | +#define DWC3_TRB_SIZE_MASK (0x00ffffff) |
| 436 | +#define DWC3_TRB_SIZE_LENGTH(n) ((n) & DWC3_TRB_SIZE_MASK) |
| 437 | +#define DWC3_TRB_SIZE_PCM1(n) (((n) & 0x03) << 24) |
| 438 | +#define DWC3_TRB_SIZE_TRBSTS(n) (((n) & (0x0f << 28) >> 28)) |
| 439 | + |
| 440 | +#define DWC3_TRBSTS_OK 0 |
| 441 | +#define DWC3_TRBSTS_MISSED_ISOC 1 |
| 442 | +#define DWC3_TRBSTS_SETUP_PENDING 2 |
| 443 | + |
| 444 | +/* TRB Control */ |
| 445 | +#define DWC3_TRB_CTRL_HWO (1 << 0) |
| 446 | +#define DWC3_TRB_CTRL_LST (1 << 1) |
| 447 | +#define DWC3_TRB_CTRL_CHN (1 << 2) |
| 448 | +#define DWC3_TRB_CTRL_CSP (1 << 3) |
| 449 | +#define DWC3_TRB_CTRL_TRBCTL(n) (((n) & 0x3f) << 4) |
| 450 | +#define DWC3_TRB_CTRL_ISP_IMI (1 << 10) |
| 451 | +#define DWC3_TRB_CTRL_IOC (1 << 11) |
| 452 | +#define DWC3_TRB_CTRL_SID_SOFN(n) (((n) & 0xffff) << 14) |
| 453 | + |
| 454 | +#define DWC3_TRBCTL_NORMAL DWC3_TRB_CTRL_TRBCTL(1) |
| 455 | +#define DWC3_TRBCTL_CONTROL_SETUP DWC3_TRB_CTRL_TRBCTL(2) |
| 456 | +#define DWC3_TRBCTL_CONTROL_STATUS2 DWC3_TRB_CTRL_TRBCTL(3) |
| 457 | +#define DWC3_TRBCTL_CONTROL_STATUS3 DWC3_TRB_CTRL_TRBCTL(4) |
| 458 | +#define DWC3_TRBCTL_CONTROL_DATA DWC3_TRB_CTRL_TRBCTL(5) |
| 459 | +#define DWC3_TRBCTL_ISOCHRONOUS_FIRST DWC3_TRB_CTRL_TRBCTL(6) |
| 460 | +#define DWC3_TRBCTL_ISOCHRONOUS DWC3_TRB_CTRL_TRBCTL(7) |
| 461 | +#define DWC3_TRBCTL_LINK_TRB DWC3_TRB_CTRL_TRBCTL(8) |
494 | 462 |
|
495 | 463 | /**
|
496 |
| - * struct dwc3_trb_hw - transfer request block (hw format) |
| 464 | + * struct dwc3_trb - transfer request block (hw format) |
497 | 465 | * @bpl: DW0-3
|
498 | 466 | * @bph: DW4-7
|
499 | 467 | * @size: DW8-B
|
500 | 468 | * @trl: DWC-F
|
501 | 469 | */
|
502 |
| -struct dwc3_trb_hw { |
503 |
| - __le32 bpl; |
504 |
| - __le32 bph; |
505 |
| - __le32 size; |
506 |
| - __le32 ctrl; |
| 470 | +struct dwc3_trb { |
| 471 | + u32 bpl; |
| 472 | + u32 bph; |
| 473 | + u32 size; |
| 474 | + u32 ctrl; |
507 | 475 | } __packed;
|
508 | 476 |
|
509 |
| -static inline void dwc3_trb_to_hw(struct dwc3_trb *nat, struct dwc3_trb_hw *hw) |
510 |
| -{ |
511 |
| - hw->bpl = cpu_to_le32(lower_32_bits(nat->bplh)); |
512 |
| - hw->bph = cpu_to_le32(upper_32_bits(nat->bplh)); |
513 |
| - hw->size = cpu_to_le32p(&nat->len_pcm); |
514 |
| - /* HWO is written last */ |
515 |
| - hw->ctrl = cpu_to_le32p(&nat->control); |
516 |
| -} |
517 |
| - |
518 |
| -static inline void dwc3_trb_to_nat(struct dwc3_trb_hw *hw, struct dwc3_trb *nat) |
519 |
| -{ |
520 |
| - u64 bplh; |
521 |
| - |
522 |
| - bplh = le32_to_cpup(&hw->bpl); |
523 |
| - bplh |= (u64) le32_to_cpup(&hw->bph) << 32; |
524 |
| - nat->bplh = bplh; |
525 |
| - |
526 |
| - nat->len_pcm = le32_to_cpup(&hw->size); |
527 |
| - nat->control = le32_to_cpup(&hw->ctrl); |
528 |
| -} |
529 |
| - |
530 | 477 | /**
|
531 | 478 | * dwc3_hwparams - copy of HWPARAMS registers
|
532 | 479 | * @hwparams0 - GHWPARAMS0
|
@@ -573,7 +520,7 @@ struct dwc3_request {
|
573 | 520 | struct dwc3_ep *dep;
|
574 | 521 |
|
575 | 522 | u8 epnum;
|
576 |
| - struct dwc3_trb_hw *trb; |
| 523 | + struct dwc3_trb *trb; |
577 | 524 | dma_addr_t trb_dma;
|
578 | 525 |
|
579 | 526 | unsigned direction:1;
|
@@ -624,7 +571,7 @@ struct dwc3_request {
|
624 | 571 | */
|
625 | 572 | struct dwc3 {
|
626 | 573 | struct usb_ctrlrequest *ctrl_req;
|
627 |
| - struct dwc3_trb_hw *ep0_trb; |
| 574 | + struct dwc3_trb *ep0_trb; |
628 | 575 | void *ep0_bounce;
|
629 | 576 | u8 *setup_buf;
|
630 | 577 | dma_addr_t ctrl_req_addr;
|
@@ -691,19 +638,6 @@ struct dwc3 {
|
691 | 638 |
|
692 | 639 | /* -------------------------------------------------------------------------- */
|
693 | 640 |
|
694 |
| -#define DWC3_TRBSTS_OK 0 |
695 |
| -#define DWC3_TRBSTS_MISSED_ISOC 1 |
696 |
| -#define DWC3_TRBSTS_SETUP_PENDING 2 |
697 |
| - |
698 |
| -#define DWC3_TRBCTL_NORMAL 1 |
699 |
| -#define DWC3_TRBCTL_CONTROL_SETUP 2 |
700 |
| -#define DWC3_TRBCTL_CONTROL_STATUS2 3 |
701 |
| -#define DWC3_TRBCTL_CONTROL_STATUS3 4 |
702 |
| -#define DWC3_TRBCTL_CONTROL_DATA 5 |
703 |
| -#define DWC3_TRBCTL_ISOCHRONOUS_FIRST 6 |
704 |
| -#define DWC3_TRBCTL_ISOCHRONOUS 7 |
705 |
| -#define DWC3_TRBCTL_LINK_TRB 8 |
706 |
| - |
707 | 641 | /* -------------------------------------------------------------------------- */
|
708 | 642 |
|
709 | 643 | struct dwc3_event_type {
|
|
0 commit comments