irdma.h 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. /* SPDX-License-Identifier: GPL-2.0 or Linux-OpenIB */
  2. /* Copyright (c) 2017 - 2021 Intel Corporation */
  3. #ifndef IRDMA_H
  4. #define IRDMA_H
  5. #define IRDMA_WQEALLOC_WQE_DESC_INDEX GENMASK(31, 20)
  6. #define IRDMA_CQPTAIL_WQTAIL GENMASK(10, 0)
  7. #define IRDMA_CQPTAIL_CQP_OP_ERR BIT(31)
  8. #define IRDMA_CQPERRCODES_CQP_MINOR_CODE GENMASK(15, 0)
  9. #define IRDMA_CQPERRCODES_CQP_MAJOR_CODE GENMASK(31, 16)
  10. #define IRDMA_GLPCI_LBARCTRL_PE_DB_SIZE GENMASK(5, 4)
  11. #define IRDMA_GLINT_RATE_INTERVAL GENMASK(5, 0)
  12. #define IRDMA_GLINT_RATE_INTRL_ENA BIT(6)
  13. #define IRDMA_GLINT_DYN_CTL_INTENA BIT(0)
  14. #define IRDMA_GLINT_DYN_CTL_CLEARPBA BIT(1)
  15. #define IRDMA_GLINT_DYN_CTL_ITR_INDX GENMASK(4, 3)
  16. #define IRDMA_GLINT_DYN_CTL_INTERVAL GENMASK(16, 5)
  17. #define IRDMA_GLINT_CEQCTL_ITR_INDX GENMASK(12, 11)
  18. #define IRDMA_GLINT_CEQCTL_CAUSE_ENA BIT(30)
  19. #define IRDMA_GLINT_CEQCTL_MSIX_INDX GENMASK(10, 0)
  20. #define IRDMA_PFINT_AEQCTL_MSIX_INDX GENMASK(10, 0)
  21. #define IRDMA_PFINT_AEQCTL_ITR_INDX GENMASK(12, 11)
  22. #define IRDMA_PFINT_AEQCTL_CAUSE_ENA BIT(30)
  23. #define IRDMA_PFHMC_PDINV_PMSDIDX GENMASK(11, 0)
  24. #define IRDMA_PFHMC_PDINV_PMSDPARTSEL BIT(15)
  25. #define IRDMA_PFHMC_PDINV_PMPDIDX GENMASK(24, 16)
  26. #define IRDMA_PFHMC_SDDATALOW_PMSDVALID BIT(0)
  27. #define IRDMA_PFHMC_SDDATALOW_PMSDTYPE BIT(1)
  28. #define IRDMA_PFHMC_SDDATALOW_PMSDBPCOUNT GENMASK(11, 2)
  29. #define IRDMA_PFHMC_SDDATALOW_PMSDDATALOW GENMASK(31, 12)
  30. #define IRDMA_PFHMC_SDCMD_PMSDWR BIT(31)
  31. #define IRDMA_INVALID_CQ_IDX 0xffffffff
  32. enum irdma_registers {
  33. IRDMA_CQPTAIL,
  34. IRDMA_CQPDB,
  35. IRDMA_CCQPSTATUS,
  36. IRDMA_CCQPHIGH,
  37. IRDMA_CCQPLOW,
  38. IRDMA_CQARM,
  39. IRDMA_CQACK,
  40. IRDMA_AEQALLOC,
  41. IRDMA_CQPERRCODES,
  42. IRDMA_WQEALLOC,
  43. IRDMA_GLINT_DYN_CTL,
  44. IRDMA_DB_ADDR_OFFSET,
  45. IRDMA_GLPCI_LBARCTRL,
  46. IRDMA_GLPE_CPUSTATUS0,
  47. IRDMA_GLPE_CPUSTATUS1,
  48. IRDMA_GLPE_CPUSTATUS2,
  49. IRDMA_PFINT_AEQCTL,
  50. IRDMA_GLINT_CEQCTL,
  51. IRDMA_VSIQF_PE_CTL1,
  52. IRDMA_PFHMC_PDINV,
  53. IRDMA_GLHMC_VFPDINV,
  54. IRDMA_GLPE_CRITERR,
  55. IRDMA_GLINT_RATE,
  56. IRDMA_MAX_REGS, /* Must be last entry */
  57. };
  58. enum irdma_shifts {
  59. IRDMA_CCQPSTATUS_CCQP_DONE_S,
  60. IRDMA_CCQPSTATUS_CCQP_ERR_S,
  61. IRDMA_CQPSQ_STAG_PDID_S,
  62. IRDMA_CQPSQ_CQ_CEQID_S,
  63. IRDMA_CQPSQ_CQ_CQID_S,
  64. IRDMA_COMMIT_FPM_CQCNT_S,
  65. IRDMA_MAX_SHIFTS,
  66. };
  67. enum irdma_masks {
  68. IRDMA_CCQPSTATUS_CCQP_DONE_M,
  69. IRDMA_CCQPSTATUS_CCQP_ERR_M,
  70. IRDMA_CQPSQ_STAG_PDID_M,
  71. IRDMA_CQPSQ_CQ_CEQID_M,
  72. IRDMA_CQPSQ_CQ_CQID_M,
  73. IRDMA_COMMIT_FPM_CQCNT_M,
  74. IRDMA_MAX_MASKS, /* Must be last entry */
  75. };
  76. #define IRDMA_MAX_MGS_PER_CTX 8
  77. struct irdma_mcast_grp_ctx_entry_info {
  78. u32 qp_id;
  79. bool valid_entry;
  80. u16 dest_port;
  81. u32 use_cnt;
  82. };
  83. struct irdma_mcast_grp_info {
  84. u8 dest_mac_addr[ETH_ALEN];
  85. u16 vlan_id;
  86. u8 hmc_fcn_id;
  87. bool ipv4_valid:1;
  88. bool vlan_valid:1;
  89. u16 mg_id;
  90. u32 no_of_mgs;
  91. u32 dest_ip_addr[4];
  92. u16 qs_handle;
  93. struct irdma_dma_mem dma_mem_mc;
  94. struct irdma_mcast_grp_ctx_entry_info mg_ctx_info[IRDMA_MAX_MGS_PER_CTX];
  95. };
  96. enum irdma_vers {
  97. IRDMA_GEN_RSVD,
  98. IRDMA_GEN_1,
  99. IRDMA_GEN_2,
  100. };
  101. struct irdma_uk_attrs {
  102. u64 feature_flags;
  103. u32 max_hw_wq_frags;
  104. u32 max_hw_read_sges;
  105. u32 max_hw_inline;
  106. u32 max_hw_rq_quanta;
  107. u32 max_hw_wq_quanta;
  108. u32 min_hw_cq_size;
  109. u32 max_hw_cq_size;
  110. u16 max_hw_sq_chunk;
  111. u8 hw_rev;
  112. };
  113. struct irdma_hw_attrs {
  114. struct irdma_uk_attrs uk_attrs;
  115. u64 max_hw_outbound_msg_size;
  116. u64 max_hw_inbound_msg_size;
  117. u64 max_mr_size;
  118. u64 page_size_cap;
  119. u32 min_hw_qp_id;
  120. u32 min_hw_aeq_size;
  121. u32 max_hw_aeq_size;
  122. u32 min_hw_ceq_size;
  123. u32 max_hw_ceq_size;
  124. u32 max_hw_device_pages;
  125. u32 max_hw_vf_fpm_id;
  126. u32 first_hw_vf_fpm_id;
  127. u32 max_hw_ird;
  128. u32 max_hw_ord;
  129. u32 max_hw_wqes;
  130. u32 max_hw_pds;
  131. u32 max_hw_ena_vf_count;
  132. u32 max_qp_wr;
  133. u32 max_pe_ready_count;
  134. u32 max_done_count;
  135. u32 max_sleep_count;
  136. u32 max_cqp_compl_wait_time_ms;
  137. u16 max_stat_inst;
  138. };
  139. void i40iw_init_hw(struct irdma_sc_dev *dev);
  140. void icrdma_init_hw(struct irdma_sc_dev *dev);
  141. #endif /* IRDMA_H*/