ice_txrx.h 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /* Copyright (c) 2018, Intel Corporation. */
  3. #ifndef _ICE_TXRX_H_
  4. #define _ICE_TXRX_H_
  5. #define ICE_DFLT_IRQ_WORK 256
  6. #define ICE_RXBUF_2048 2048
  7. #define ICE_MAX_CHAINED_RX_BUFS 5
  8. #define ICE_MAX_BUF_TXD 8
  9. #define ICE_MIN_TX_LEN 17
  10. /* The size limit for a transmit buffer in a descriptor is (16K - 1).
  11. * In order to align with the read requests we will align the value to
  12. * the nearest 4K which represents our maximum read request size.
  13. */
  14. #define ICE_MAX_READ_REQ_SIZE 4096
  15. #define ICE_MAX_DATA_PER_TXD (16 * 1024 - 1)
  16. #define ICE_MAX_DATA_PER_TXD_ALIGNED \
  17. (~(ICE_MAX_READ_REQ_SIZE - 1) & ICE_MAX_DATA_PER_TXD)
  18. #define ICE_RX_BUF_WRITE 16 /* Must be power of 2 */
  19. #define ICE_MAX_TXQ_PER_TXQG 128
  20. /* Tx Descriptors needed, worst case */
  21. #define DESC_NEEDED (MAX_SKB_FRAGS + 4)
  22. #define ICE_DESC_UNUSED(R) \
  23. ((((R)->next_to_clean > (R)->next_to_use) ? 0 : (R)->count) + \
  24. (R)->next_to_clean - (R)->next_to_use - 1)
  25. struct ice_tx_buf {
  26. struct ice_tx_desc *next_to_watch;
  27. struct sk_buff *skb;
  28. unsigned int bytecount;
  29. unsigned short gso_segs;
  30. u32 tx_flags;
  31. DEFINE_DMA_UNMAP_ADDR(dma);
  32. DEFINE_DMA_UNMAP_LEN(len);
  33. };
  34. struct ice_rx_buf {
  35. struct sk_buff *skb;
  36. dma_addr_t dma;
  37. struct page *page;
  38. unsigned int page_offset;
  39. };
  40. struct ice_q_stats {
  41. u64 pkts;
  42. u64 bytes;
  43. };
  44. struct ice_txq_stats {
  45. u64 restart_q;
  46. u64 tx_busy;
  47. u64 tx_linearize;
  48. };
  49. struct ice_rxq_stats {
  50. u64 non_eop_descs;
  51. u64 alloc_page_failed;
  52. u64 alloc_buf_failed;
  53. u64 page_reuse_count;
  54. };
  55. /* this enum matches hardware bits and is meant to be used by DYN_CTLN
  56. * registers and QINT registers or more generally anywhere in the manual
  57. * mentioning ITR_INDX, ITR_NONE cannot be used as an index 'n' into any
  58. * register but instead is a special value meaning "don't update" ITR0/1/2.
  59. */
  60. enum ice_dyn_idx_t {
  61. ICE_IDX_ITR0 = 0,
  62. ICE_IDX_ITR1 = 1,
  63. ICE_IDX_ITR2 = 2,
  64. ICE_ITR_NONE = 3 /* ITR_NONE must not be used as an index */
  65. };
  66. /* Header split modes defined by DTYPE field of Rx RLAN context */
  67. enum ice_rx_dtype {
  68. ICE_RX_DTYPE_NO_SPLIT = 0,
  69. ICE_RX_DTYPE_HEADER_SPLIT = 1,
  70. ICE_RX_DTYPE_SPLIT_ALWAYS = 2,
  71. };
  72. /* indices into GLINT_ITR registers */
  73. #define ICE_RX_ITR ICE_IDX_ITR0
  74. #define ICE_TX_ITR ICE_IDX_ITR1
  75. #define ICE_ITR_DYNAMIC 0x8000 /* use top bit as a flag */
  76. #define ICE_ITR_8K 0x003E
  77. /* apply ITR HW granularity translation to program the HW registers */
  78. #define ITR_TO_REG(val, itr_gran) (((val) & ~ICE_ITR_DYNAMIC) >> (itr_gran))
  79. /* Legacy or Advanced Mode Queue */
  80. #define ICE_TX_ADVANCED 0
  81. #define ICE_TX_LEGACY 1
  82. /* descriptor ring, associated with a VSI */
  83. struct ice_ring {
  84. struct ice_ring *next; /* pointer to next ring in q_vector */
  85. void *desc; /* Descriptor ring memory */
  86. struct device *dev; /* Used for DMA mapping */
  87. struct net_device *netdev; /* netdev ring maps to */
  88. struct ice_vsi *vsi; /* Backreference to associated VSI */
  89. struct ice_q_vector *q_vector; /* Backreference to associated vector */
  90. u8 __iomem *tail;
  91. union {
  92. struct ice_tx_buf *tx_buf;
  93. struct ice_rx_buf *rx_buf;
  94. };
  95. u16 q_index; /* Queue number of ring */
  96. u32 txq_teid; /* Added Tx queue TEID */
  97. /* high bit set means dynamic, use accessor routines to read/write.
  98. * hardware supports 2us/1us resolution for the ITR registers.
  99. * these values always store the USER setting, and must be converted
  100. * before programming to a register.
  101. */
  102. u16 rx_itr_setting;
  103. u16 tx_itr_setting;
  104. u16 count; /* Number of descriptors */
  105. u16 reg_idx; /* HW register index of the ring */
  106. /* used in interrupt processing */
  107. u16 next_to_use;
  108. u16 next_to_clean;
  109. bool ring_active; /* is ring online or not */
  110. /* stats structs */
  111. struct ice_q_stats stats;
  112. struct u64_stats_sync syncp;
  113. union {
  114. struct ice_txq_stats tx_stats;
  115. struct ice_rxq_stats rx_stats;
  116. };
  117. unsigned int size; /* length of descriptor ring in bytes */
  118. dma_addr_t dma; /* physical address of ring */
  119. struct rcu_head rcu; /* to avoid race on free */
  120. u16 next_to_alloc;
  121. } ____cacheline_internodealigned_in_smp;
  122. enum ice_latency_range {
  123. ICE_LOWEST_LATENCY = 0,
  124. ICE_LOW_LATENCY = 1,
  125. ICE_BULK_LATENCY = 2,
  126. ICE_ULTRA_LATENCY = 3,
  127. };
  128. struct ice_ring_container {
  129. /* array of pointers to rings */
  130. struct ice_ring *ring;
  131. unsigned int total_bytes; /* total bytes processed this int */
  132. unsigned int total_pkts; /* total packets processed this int */
  133. enum ice_latency_range latency_range;
  134. u16 itr;
  135. };
  136. /* iterator for handling rings in ring container */
  137. #define ice_for_each_ring(pos, head) \
  138. for (pos = (head).ring; pos; pos = pos->next)
  139. bool ice_alloc_rx_bufs(struct ice_ring *rxr, u16 cleaned_count);
  140. netdev_tx_t ice_start_xmit(struct sk_buff *skb, struct net_device *netdev);
  141. void ice_clean_tx_ring(struct ice_ring *tx_ring);
  142. void ice_clean_rx_ring(struct ice_ring *rx_ring);
  143. int ice_setup_tx_ring(struct ice_ring *tx_ring);
  144. int ice_setup_rx_ring(struct ice_ring *rx_ring);
  145. void ice_free_tx_ring(struct ice_ring *tx_ring);
  146. void ice_free_rx_ring(struct ice_ring *rx_ring);
  147. int ice_napi_poll(struct napi_struct *napi, int budget);
  148. #endif /* _ICE_TXRX_H_ */