root/drivers/net/ethernet/mellanox/mlx5/core/en/params.h

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

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. mlx5e_qid_get_ch_if_in_group
  2. mlx5e_qid_get_ch_and_group
  3. mlx5e_qid_validate

   1 /* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
   2 /* Copyright (c) 2019 Mellanox Technologies. */
   3 
   4 #ifndef __MLX5_EN_PARAMS_H__
   5 #define __MLX5_EN_PARAMS_H__
   6 
   7 #include "en.h"
   8 
   9 struct mlx5e_xsk_param {
  10         u16 headroom;
  11         u16 chunk_size;
  12 };
  13 
  14 struct mlx5e_rq_param {
  15         u32                        rqc[MLX5_ST_SZ_DW(rqc)];
  16         struct mlx5_wq_param       wq;
  17         struct mlx5e_rq_frags_info frags_info;
  18 };
  19 
  20 struct mlx5e_sq_param {
  21         u32                        sqc[MLX5_ST_SZ_DW(sqc)];
  22         struct mlx5_wq_param       wq;
  23         bool                       is_mpw;
  24 };
  25 
  26 struct mlx5e_cq_param {
  27         u32                        cqc[MLX5_ST_SZ_DW(cqc)];
  28         struct mlx5_wq_param       wq;
  29         u16                        eq_ix;
  30         u8                         cq_period_mode;
  31 };
  32 
  33 struct mlx5e_channel_param {
  34         struct mlx5e_rq_param      rq;
  35         struct mlx5e_sq_param      sq;
  36         struct mlx5e_sq_param      xdp_sq;
  37         struct mlx5e_sq_param      icosq;
  38         struct mlx5e_cq_param      rx_cq;
  39         struct mlx5e_cq_param      tx_cq;
  40         struct mlx5e_cq_param      icosq_cq;
  41 };
  42 
  43 static inline bool mlx5e_qid_get_ch_if_in_group(struct mlx5e_params *params,
  44                                                 u16 qid,
  45                                                 enum mlx5e_rq_group group,
  46                                                 u16 *ix)
  47 {
  48         int nch = params->num_channels;
  49         int ch = qid - nch * group;
  50 
  51         if (ch < 0 || ch >= nch)
  52                 return false;
  53 
  54         *ix = ch;
  55         return true;
  56 }
  57 
  58 static inline void mlx5e_qid_get_ch_and_group(struct mlx5e_params *params,
  59                                               u16 qid,
  60                                               u16 *ix,
  61                                               enum mlx5e_rq_group *group)
  62 {
  63         u16 nch = params->num_channels;
  64 
  65         *ix = qid % nch;
  66         *group = qid / nch;
  67 }
  68 
  69 static inline bool mlx5e_qid_validate(const struct mlx5e_profile *profile,
  70                                       struct mlx5e_params *params, u64 qid)
  71 {
  72         return qid < params->num_channels * profile->rq_groups;
  73 }
  74 
  75 /* Parameter calculations */
  76 
  77 u16 mlx5e_get_linear_rq_headroom(struct mlx5e_params *params,
  78                                  struct mlx5e_xsk_param *xsk);
  79 u32 mlx5e_rx_get_min_frag_sz(struct mlx5e_params *params,
  80                              struct mlx5e_xsk_param *xsk);
  81 u32 mlx5e_rx_get_linear_frag_sz(struct mlx5e_params *params,
  82                                 struct mlx5e_xsk_param *xsk);
  83 u8 mlx5e_mpwqe_log_pkts_per_wqe(struct mlx5e_params *params,
  84                                 struct mlx5e_xsk_param *xsk);
  85 bool mlx5e_rx_is_linear_skb(struct mlx5e_params *params,
  86                             struct mlx5e_xsk_param *xsk);
  87 bool mlx5e_rx_mpwqe_is_linear_skb(struct mlx5_core_dev *mdev,
  88                                   struct mlx5e_params *params,
  89                                   struct mlx5e_xsk_param *xsk);
  90 u8 mlx5e_mpwqe_get_log_rq_size(struct mlx5e_params *params,
  91                                struct mlx5e_xsk_param *xsk);
  92 u8 mlx5e_mpwqe_get_log_stride_size(struct mlx5_core_dev *mdev,
  93                                    struct mlx5e_params *params,
  94                                    struct mlx5e_xsk_param *xsk);
  95 u8 mlx5e_mpwqe_get_log_num_strides(struct mlx5_core_dev *mdev,
  96                                    struct mlx5e_params *params,
  97                                    struct mlx5e_xsk_param *xsk);
  98 u16 mlx5e_get_rq_headroom(struct mlx5_core_dev *mdev,
  99                           struct mlx5e_params *params,
 100                           struct mlx5e_xsk_param *xsk);
 101 
 102 /* Build queue parameters */
 103 
 104 void mlx5e_build_rq_param(struct mlx5e_priv *priv,
 105                           struct mlx5e_params *params,
 106                           struct mlx5e_xsk_param *xsk,
 107                           struct mlx5e_rq_param *param);
 108 void mlx5e_build_sq_param_common(struct mlx5e_priv *priv,
 109                                  struct mlx5e_sq_param *param);
 110 void mlx5e_build_rx_cq_param(struct mlx5e_priv *priv,
 111                              struct mlx5e_params *params,
 112                              struct mlx5e_xsk_param *xsk,
 113                              struct mlx5e_cq_param *param);
 114 void mlx5e_build_tx_cq_param(struct mlx5e_priv *priv,
 115                              struct mlx5e_params *params,
 116                              struct mlx5e_cq_param *param);
 117 void mlx5e_build_ico_cq_param(struct mlx5e_priv *priv,
 118                               u8 log_wq_size,
 119                               struct mlx5e_cq_param *param);
 120 void mlx5e_build_icosq_param(struct mlx5e_priv *priv,
 121                              u8 log_wq_size,
 122                              struct mlx5e_sq_param *param);
 123 void mlx5e_build_xdpsq_param(struct mlx5e_priv *priv,
 124                              struct mlx5e_params *params,
 125                              struct mlx5e_sq_param *param);
 126 
 127 #endif /* __MLX5_EN_PARAMS_H__ */

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