.. | .. |
---|
66 | 66 | #define SG_BPID_MASK 0x3FFF |
---|
67 | 67 | #define SG_FINAL_FLAG_MASK 0x1 |
---|
68 | 68 | #define SG_FINAL_FLAG_SHIFT 15 |
---|
| 69 | +#define FL_SHORT_LEN_FLAG_MASK 0x1 |
---|
| 70 | +#define FL_SHORT_LEN_FLAG_SHIFT 14 |
---|
| 71 | +#define FL_SHORT_LEN_MASK 0x3FFFF |
---|
| 72 | +#define FL_OFFSET_MASK 0x0FFF |
---|
| 73 | +#define FL_FORMAT_MASK 0x3 |
---|
| 74 | +#define FL_FORMAT_SHIFT 12 |
---|
| 75 | +#define FL_BPID_MASK 0x3FFF |
---|
| 76 | +#define FL_FINAL_FLAG_MASK 0x1 |
---|
| 77 | +#define FL_FINAL_FLAG_SHIFT 15 |
---|
69 | 78 | |
---|
70 | 79 | /* Error bits in FD CTRL */ |
---|
71 | 80 | #define FD_CTRL_ERR_MASK 0x000000FF |
---|
.. | .. |
---|
435 | 444 | sg->format_offset |= cpu_to_le16(final << SG_FINAL_FLAG_SHIFT); |
---|
436 | 445 | } |
---|
437 | 446 | |
---|
| 447 | +/** |
---|
| 448 | + * struct dpaa2_fl_entry - structure for frame list entry. |
---|
| 449 | + * @addr: address in the FLE |
---|
| 450 | + * @len: length in the FLE |
---|
| 451 | + * @bpid: buffer pool ID |
---|
| 452 | + * @format_offset: format, offset, and short-length fields |
---|
| 453 | + * @frc: frame context |
---|
| 454 | + * @ctrl: control bits...including pta, pvt1, pvt2, err, etc |
---|
| 455 | + * @flc: flow context address |
---|
| 456 | + */ |
---|
| 457 | +struct dpaa2_fl_entry { |
---|
| 458 | + __le64 addr; |
---|
| 459 | + __le32 len; |
---|
| 460 | + __le16 bpid; |
---|
| 461 | + __le16 format_offset; |
---|
| 462 | + __le32 frc; |
---|
| 463 | + __le32 ctrl; |
---|
| 464 | + __le64 flc; |
---|
| 465 | +}; |
---|
| 466 | + |
---|
| 467 | +enum dpaa2_fl_format { |
---|
| 468 | + dpaa2_fl_single = 0, |
---|
| 469 | + dpaa2_fl_res, |
---|
| 470 | + dpaa2_fl_sg |
---|
| 471 | +}; |
---|
| 472 | + |
---|
| 473 | +/** |
---|
| 474 | + * dpaa2_fl_get_addr() - get the addr field of FLE |
---|
| 475 | + * @fle: the given frame list entry |
---|
| 476 | + * |
---|
| 477 | + * Return the address in the frame list entry. |
---|
| 478 | + */ |
---|
| 479 | +static inline dma_addr_t dpaa2_fl_get_addr(const struct dpaa2_fl_entry *fle) |
---|
| 480 | +{ |
---|
| 481 | + return (dma_addr_t)le64_to_cpu(fle->addr); |
---|
| 482 | +} |
---|
| 483 | + |
---|
| 484 | +/** |
---|
| 485 | + * dpaa2_fl_set_addr() - Set the addr field of FLE |
---|
| 486 | + * @fle: the given frame list entry |
---|
| 487 | + * @addr: the address needs to be set in frame list entry |
---|
| 488 | + */ |
---|
| 489 | +static inline void dpaa2_fl_set_addr(struct dpaa2_fl_entry *fle, |
---|
| 490 | + dma_addr_t addr) |
---|
| 491 | +{ |
---|
| 492 | + fle->addr = cpu_to_le64(addr); |
---|
| 493 | +} |
---|
| 494 | + |
---|
| 495 | +/** |
---|
| 496 | + * dpaa2_fl_get_frc() - Get the frame context in the FLE |
---|
| 497 | + * @fle: the given frame list entry |
---|
| 498 | + * |
---|
| 499 | + * Return the frame context field in the frame lsit entry. |
---|
| 500 | + */ |
---|
| 501 | +static inline u32 dpaa2_fl_get_frc(const struct dpaa2_fl_entry *fle) |
---|
| 502 | +{ |
---|
| 503 | + return le32_to_cpu(fle->frc); |
---|
| 504 | +} |
---|
| 505 | + |
---|
| 506 | +/** |
---|
| 507 | + * dpaa2_fl_set_frc() - Set the frame context in the FLE |
---|
| 508 | + * @fle: the given frame list entry |
---|
| 509 | + * @frc: the frame context needs to be set in frame list entry |
---|
| 510 | + */ |
---|
| 511 | +static inline void dpaa2_fl_set_frc(struct dpaa2_fl_entry *fle, u32 frc) |
---|
| 512 | +{ |
---|
| 513 | + fle->frc = cpu_to_le32(frc); |
---|
| 514 | +} |
---|
| 515 | + |
---|
| 516 | +/** |
---|
| 517 | + * dpaa2_fl_get_ctrl() - Get the control bits in the FLE |
---|
| 518 | + * @fle: the given frame list entry |
---|
| 519 | + * |
---|
| 520 | + * Return the control bits field in the frame list entry. |
---|
| 521 | + */ |
---|
| 522 | +static inline u32 dpaa2_fl_get_ctrl(const struct dpaa2_fl_entry *fle) |
---|
| 523 | +{ |
---|
| 524 | + return le32_to_cpu(fle->ctrl); |
---|
| 525 | +} |
---|
| 526 | + |
---|
| 527 | +/** |
---|
| 528 | + * dpaa2_fl_set_ctrl() - Set the control bits in the FLE |
---|
| 529 | + * @fle: the given frame list entry |
---|
| 530 | + * @ctrl: the control bits to be set in the frame list entry |
---|
| 531 | + */ |
---|
| 532 | +static inline void dpaa2_fl_set_ctrl(struct dpaa2_fl_entry *fle, u32 ctrl) |
---|
| 533 | +{ |
---|
| 534 | + fle->ctrl = cpu_to_le32(ctrl); |
---|
| 535 | +} |
---|
| 536 | + |
---|
| 537 | +/** |
---|
| 538 | + * dpaa2_fl_get_flc() - Get the flow context in the FLE |
---|
| 539 | + * @fle: the given frame list entry |
---|
| 540 | + * |
---|
| 541 | + * Return the flow context in the frame list entry. |
---|
| 542 | + */ |
---|
| 543 | +static inline dma_addr_t dpaa2_fl_get_flc(const struct dpaa2_fl_entry *fle) |
---|
| 544 | +{ |
---|
| 545 | + return (dma_addr_t)le64_to_cpu(fle->flc); |
---|
| 546 | +} |
---|
| 547 | + |
---|
| 548 | +/** |
---|
| 549 | + * dpaa2_fl_set_flc() - Set the flow context field of FLE |
---|
| 550 | + * @fle: the given frame list entry |
---|
| 551 | + * @flc_addr: the flow context needs to be set in frame list entry |
---|
| 552 | + */ |
---|
| 553 | +static inline void dpaa2_fl_set_flc(struct dpaa2_fl_entry *fle, |
---|
| 554 | + dma_addr_t flc_addr) |
---|
| 555 | +{ |
---|
| 556 | + fle->flc = cpu_to_le64(flc_addr); |
---|
| 557 | +} |
---|
| 558 | + |
---|
| 559 | +static inline bool dpaa2_fl_short_len(const struct dpaa2_fl_entry *fle) |
---|
| 560 | +{ |
---|
| 561 | + return !!((le16_to_cpu(fle->format_offset) >> |
---|
| 562 | + FL_SHORT_LEN_FLAG_SHIFT) & FL_SHORT_LEN_FLAG_MASK); |
---|
| 563 | +} |
---|
| 564 | + |
---|
| 565 | +/** |
---|
| 566 | + * dpaa2_fl_get_len() - Get the length in the FLE |
---|
| 567 | + * @fle: the given frame list entry |
---|
| 568 | + * |
---|
| 569 | + * Return the length field in the frame list entry. |
---|
| 570 | + */ |
---|
| 571 | +static inline u32 dpaa2_fl_get_len(const struct dpaa2_fl_entry *fle) |
---|
| 572 | +{ |
---|
| 573 | + if (dpaa2_fl_short_len(fle)) |
---|
| 574 | + return le32_to_cpu(fle->len) & FL_SHORT_LEN_MASK; |
---|
| 575 | + |
---|
| 576 | + return le32_to_cpu(fle->len); |
---|
| 577 | +} |
---|
| 578 | + |
---|
| 579 | +/** |
---|
| 580 | + * dpaa2_fl_set_len() - Set the length field of FLE |
---|
| 581 | + * @fle: the given frame list entry |
---|
| 582 | + * @len: the length needs to be set in frame list entry |
---|
| 583 | + */ |
---|
| 584 | +static inline void dpaa2_fl_set_len(struct dpaa2_fl_entry *fle, u32 len) |
---|
| 585 | +{ |
---|
| 586 | + fle->len = cpu_to_le32(len); |
---|
| 587 | +} |
---|
| 588 | + |
---|
| 589 | +/** |
---|
| 590 | + * dpaa2_fl_get_offset() - Get the offset field in the frame list entry |
---|
| 591 | + * @fle: the given frame list entry |
---|
| 592 | + * |
---|
| 593 | + * Return the offset. |
---|
| 594 | + */ |
---|
| 595 | +static inline u16 dpaa2_fl_get_offset(const struct dpaa2_fl_entry *fle) |
---|
| 596 | +{ |
---|
| 597 | + return le16_to_cpu(fle->format_offset) & FL_OFFSET_MASK; |
---|
| 598 | +} |
---|
| 599 | + |
---|
| 600 | +/** |
---|
| 601 | + * dpaa2_fl_set_offset() - Set the offset field of FLE |
---|
| 602 | + * @fle: the given frame list entry |
---|
| 603 | + * @offset: the offset needs to be set in frame list entry |
---|
| 604 | + */ |
---|
| 605 | +static inline void dpaa2_fl_set_offset(struct dpaa2_fl_entry *fle, u16 offset) |
---|
| 606 | +{ |
---|
| 607 | + fle->format_offset &= cpu_to_le16(~FL_OFFSET_MASK); |
---|
| 608 | + fle->format_offset |= cpu_to_le16(offset); |
---|
| 609 | +} |
---|
| 610 | + |
---|
| 611 | +/** |
---|
| 612 | + * dpaa2_fl_get_format() - Get the format field in the FLE |
---|
| 613 | + * @fle: the given frame list entry |
---|
| 614 | + * |
---|
| 615 | + * Return the format. |
---|
| 616 | + */ |
---|
| 617 | +static inline enum dpaa2_fl_format dpaa2_fl_get_format(const struct dpaa2_fl_entry *fle) |
---|
| 618 | +{ |
---|
| 619 | + return (enum dpaa2_fl_format)((le16_to_cpu(fle->format_offset) >> |
---|
| 620 | + FL_FORMAT_SHIFT) & FL_FORMAT_MASK); |
---|
| 621 | +} |
---|
| 622 | + |
---|
| 623 | +/** |
---|
| 624 | + * dpaa2_fl_set_format() - Set the format field of FLE |
---|
| 625 | + * @fle: the given frame list entry |
---|
| 626 | + * @format: the format needs to be set in frame list entry |
---|
| 627 | + */ |
---|
| 628 | +static inline void dpaa2_fl_set_format(struct dpaa2_fl_entry *fle, |
---|
| 629 | + enum dpaa2_fl_format format) |
---|
| 630 | +{ |
---|
| 631 | + fle->format_offset &= cpu_to_le16(~(FL_FORMAT_MASK << FL_FORMAT_SHIFT)); |
---|
| 632 | + fle->format_offset |= cpu_to_le16(format << FL_FORMAT_SHIFT); |
---|
| 633 | +} |
---|
| 634 | + |
---|
| 635 | +/** |
---|
| 636 | + * dpaa2_fl_get_bpid() - Get the bpid field in the FLE |
---|
| 637 | + * @fle: the given frame list entry |
---|
| 638 | + * |
---|
| 639 | + * Return the buffer pool id. |
---|
| 640 | + */ |
---|
| 641 | +static inline u16 dpaa2_fl_get_bpid(const struct dpaa2_fl_entry *fle) |
---|
| 642 | +{ |
---|
| 643 | + return le16_to_cpu(fle->bpid) & FL_BPID_MASK; |
---|
| 644 | +} |
---|
| 645 | + |
---|
| 646 | +/** |
---|
| 647 | + * dpaa2_fl_set_bpid() - Set the bpid field of FLE |
---|
| 648 | + * @fle: the given frame list entry |
---|
| 649 | + * @bpid: buffer pool id to be set |
---|
| 650 | + */ |
---|
| 651 | +static inline void dpaa2_fl_set_bpid(struct dpaa2_fl_entry *fle, u16 bpid) |
---|
| 652 | +{ |
---|
| 653 | + fle->bpid &= cpu_to_le16(~(FL_BPID_MASK)); |
---|
| 654 | + fle->bpid |= cpu_to_le16(bpid); |
---|
| 655 | +} |
---|
| 656 | + |
---|
| 657 | +/** |
---|
| 658 | + * dpaa2_fl_is_final() - Check final bit in FLE |
---|
| 659 | + * @fle: the given frame list entry |
---|
| 660 | + * |
---|
| 661 | + * Return bool. |
---|
| 662 | + */ |
---|
| 663 | +static inline bool dpaa2_fl_is_final(const struct dpaa2_fl_entry *fle) |
---|
| 664 | +{ |
---|
| 665 | + return !!(le16_to_cpu(fle->format_offset) >> FL_FINAL_FLAG_SHIFT); |
---|
| 666 | +} |
---|
| 667 | + |
---|
| 668 | +/** |
---|
| 669 | + * dpaa2_fl_set_final() - Set the final bit in FLE |
---|
| 670 | + * @fle: the given frame list entry |
---|
| 671 | + * @final: the final boolean to be set |
---|
| 672 | + */ |
---|
| 673 | +static inline void dpaa2_fl_set_final(struct dpaa2_fl_entry *fle, bool final) |
---|
| 674 | +{ |
---|
| 675 | + fle->format_offset &= cpu_to_le16((~(FL_FINAL_FLAG_MASK << |
---|
| 676 | + FL_FINAL_FLAG_SHIFT)) & 0xFFFF); |
---|
| 677 | + fle->format_offset |= cpu_to_le16(final << FL_FINAL_FLAG_SHIFT); |
---|
| 678 | +} |
---|
| 679 | + |
---|
438 | 680 | #endif /* __FSL_DPAA2_FD_H */ |
---|