root/drivers/net/ethernet/stmicro/stmmac/descs_com.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. ehn_desc_rx_set_on_ring
  2. enh_desc_end_tx_desc_on_ring
  3. enh_set_tx_desc_len_on_ring
  4. ndesc_rx_set_on_ring
  5. ndesc_end_tx_desc_on_ring
  6. norm_set_tx_desc_len_on_ring
  7. ehn_desc_rx_set_on_chain
  8. enh_desc_end_tx_desc_on_chain
  9. enh_set_tx_desc_len_on_chain
  10. ndesc_rx_set_on_chain
  11. ndesc_tx_set_on_chain
  12. norm_set_tx_desc_len_on_chain

   1 /* SPDX-License-Identifier: GPL-2.0-only */
   2 /*******************************************************************************
   3   Header File to describe Normal/enhanced descriptor functions used for RING
   4   and CHAINED modes.
   5 
   6   Copyright(C) 2011  STMicroelectronics Ltd
   7 
   8   It defines all the functions used to handle the normal/enhanced
   9   descriptors in case of the DMA is configured to work in chained or
  10   in ring mode.
  11 
  12 
  13   Author: Giuseppe Cavallaro <peppe.cavallaro@st.com>
  14 *******************************************************************************/
  15 
  16 #ifndef __DESC_COM_H__
  17 #define __DESC_COM_H__
  18 
  19 /* Specific functions used for Ring mode */
  20 
  21 /* Enhanced descriptors */
  22 static inline void ehn_desc_rx_set_on_ring(struct dma_desc *p, int end,
  23                                            int bfsize)
  24 {
  25         if (bfsize == BUF_SIZE_16KiB)
  26                 p->des1 |= cpu_to_le32((BUF_SIZE_8KiB
  27                                 << ERDES1_BUFFER2_SIZE_SHIFT)
  28                            & ERDES1_BUFFER2_SIZE_MASK);
  29 
  30         if (end)
  31                 p->des1 |= cpu_to_le32(ERDES1_END_RING);
  32 }
  33 
  34 static inline void enh_desc_end_tx_desc_on_ring(struct dma_desc *p, int end)
  35 {
  36         if (end)
  37                 p->des0 |= cpu_to_le32(ETDES0_END_RING);
  38         else
  39                 p->des0 &= cpu_to_le32(~ETDES0_END_RING);
  40 }
  41 
  42 static inline void enh_set_tx_desc_len_on_ring(struct dma_desc *p, int len)
  43 {
  44         if (unlikely(len > BUF_SIZE_4KiB)) {
  45                 p->des1 |= cpu_to_le32((((len - BUF_SIZE_4KiB)
  46                                         << ETDES1_BUFFER2_SIZE_SHIFT)
  47                             & ETDES1_BUFFER2_SIZE_MASK) | (BUF_SIZE_4KiB
  48                             & ETDES1_BUFFER1_SIZE_MASK));
  49         } else
  50                 p->des1 |= cpu_to_le32((len & ETDES1_BUFFER1_SIZE_MASK));
  51 }
  52 
  53 /* Normal descriptors */
  54 static inline void ndesc_rx_set_on_ring(struct dma_desc *p, int end, int bfsize)
  55 {
  56         if (bfsize >= BUF_SIZE_2KiB) {
  57                 int bfsize2;
  58 
  59                 bfsize2 = min(bfsize - BUF_SIZE_2KiB + 1, BUF_SIZE_2KiB - 1);
  60                 p->des1 |= cpu_to_le32((bfsize2 << RDES1_BUFFER2_SIZE_SHIFT)
  61                             & RDES1_BUFFER2_SIZE_MASK);
  62         }
  63 
  64         if (end)
  65                 p->des1 |= cpu_to_le32(RDES1_END_RING);
  66 }
  67 
  68 static inline void ndesc_end_tx_desc_on_ring(struct dma_desc *p, int end)
  69 {
  70         if (end)
  71                 p->des1 |= cpu_to_le32(TDES1_END_RING);
  72         else
  73                 p->des1 &= cpu_to_le32(~TDES1_END_RING);
  74 }
  75 
  76 static inline void norm_set_tx_desc_len_on_ring(struct dma_desc *p, int len)
  77 {
  78         if (unlikely(len > BUF_SIZE_2KiB)) {
  79                 unsigned int buffer1 = (BUF_SIZE_2KiB - 1)
  80                                         & TDES1_BUFFER1_SIZE_MASK;
  81                 p->des1 |= cpu_to_le32((((len - buffer1)
  82                                         << TDES1_BUFFER2_SIZE_SHIFT)
  83                                 & TDES1_BUFFER2_SIZE_MASK) | buffer1);
  84         } else
  85                 p->des1 |= cpu_to_le32((len & TDES1_BUFFER1_SIZE_MASK));
  86 }
  87 
  88 /* Specific functions used for Chain mode */
  89 
  90 /* Enhanced descriptors */
  91 static inline void ehn_desc_rx_set_on_chain(struct dma_desc *p)
  92 {
  93         p->des1 |= cpu_to_le32(ERDES1_SECOND_ADDRESS_CHAINED);
  94 }
  95 
  96 static inline void enh_desc_end_tx_desc_on_chain(struct dma_desc *p)
  97 {
  98         p->des0 |= cpu_to_le32(ETDES0_SECOND_ADDRESS_CHAINED);
  99 }
 100 
 101 static inline void enh_set_tx_desc_len_on_chain(struct dma_desc *p, int len)
 102 {
 103         p->des1 |= cpu_to_le32(len & ETDES1_BUFFER1_SIZE_MASK);
 104 }
 105 
 106 /* Normal descriptors */
 107 static inline void ndesc_rx_set_on_chain(struct dma_desc *p, int end)
 108 {
 109         p->des1 |= cpu_to_le32(RDES1_SECOND_ADDRESS_CHAINED);
 110 }
 111 
 112 static inline void ndesc_tx_set_on_chain(struct dma_desc *p)
 113 {
 114         p->des1 |= cpu_to_le32(TDES1_SECOND_ADDRESS_CHAINED);
 115 }
 116 
 117 static inline void norm_set_tx_desc_len_on_chain(struct dma_desc *p, int len)
 118 {
 119         p->des1 |= cpu_to_le32(len & TDES1_BUFFER1_SIZE_MASK);
 120 }
 121 #endif /* __DESC_COM_H__ */

/* [<][>][^][v][top][bottom][index][help] */