1 /* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0-or-later */ 2 /* 3 * Copyright 2008 - 2016 Freescale Semiconductor Inc. 4 */ 5 6 #ifndef __DPAA_H 7 #define __DPAA_H 8 9 #include <linux/netdevice.h> 10 #include <linux/refcount.h> 11 #include <net/xdp.h> 12 #include <soc/fsl/qman.h> 13 #include <soc/fsl/bman.h> 14 15 #include "fman.h" 16 #include "mac.h" 17 #include "dpaa_eth_trace.h" 18 19 /* Number of prioritised traffic classes */ 20 #define DPAA_TC_NUM 4 21 /* Number of Tx queues per traffic class */ 22 #define DPAA_TC_TXQ_NUM NR_CPUS 23 /* Total number of Tx queues */ 24 #define DPAA_ETH_TXQ_NUM (DPAA_TC_NUM * DPAA_TC_TXQ_NUM) 25 26 /* More detailed FQ types - used for fine-grained WQ assignments */ 27 enum dpaa_fq_type { 28 FQ_TYPE_RX_DEFAULT = 1, /* Rx Default FQs */ 29 FQ_TYPE_RX_ERROR, /* Rx Error FQs */ 30 FQ_TYPE_RX_PCD, /* Rx Parse Classify Distribute FQs */ 31 FQ_TYPE_TX, /* "Real" Tx FQs */ 32 FQ_TYPE_TX_CONFIRM, /* Tx default Conf FQ (actually an Rx FQ) */ 33 FQ_TYPE_TX_CONF_MQ, /* Tx conf FQs (one for each Tx FQ) */ 34 FQ_TYPE_TX_ERROR, /* Tx Error FQs (these are actually Rx FQs) */ 35 }; 36 37 struct dpaa_fq { 38 struct qman_fq fq_base; 39 struct list_head list; 40 struct net_device *net_dev; 41 bool init; 42 u32 fqid; 43 u32 flags; 44 u16 channel; 45 u8 wq; 46 enum dpaa_fq_type fq_type; 47 struct xdp_rxq_info xdp_rxq; 48 }; 49 50 struct dpaa_fq_cbs { 51 struct qman_fq rx_defq; 52 struct qman_fq tx_defq; 53 struct qman_fq rx_errq; 54 struct qman_fq tx_errq; 55 struct qman_fq egress_ern; 56 }; 57 58 struct dpaa_priv; 59 60 struct dpaa_bp { 61 /* used in the DMA mapping operations */ 62 struct dpaa_priv *priv; 63 /* current number of buffers in the buffer pool alloted to each CPU */ 64 int __percpu *percpu_count; 65 /* all buffers allocated for this pool have this raw size */ 66 size_t raw_size; 67 /* all buffers in this pool have this same usable size */ 68 size_t size; 69 /* the buffer pools are initialized with config_count buffers for each 70 * CPU; at runtime the number of buffers per CPU is constantly brought 71 * back to this level 72 */ 73 u16 config_count; 74 u8 bpid; 75 struct bman_pool *pool; 76 /* bpool can be seeded before use by this cb */ 77 int (*seed_cb)(struct dpaa_bp *); 78 /* bpool can be emptied before freeing by this cb */ 79 void (*free_buf_cb)(const struct dpaa_bp *, struct bm_buffer *); 80 refcount_t refs; 81 }; 82 83 struct dpaa_rx_errors { 84 u64 dme; /* DMA Error */ 85 u64 fpe; /* Frame Physical Error */ 86 u64 fse; /* Frame Size Error */ 87 u64 phe; /* Header Error */ 88 }; 89 90 /* Counters for QMan ERN frames - one counter per rejection code */ 91 struct dpaa_ern_cnt { 92 u64 cg_tdrop; /* Congestion group taildrop */ 93 u64 wred; /* WRED congestion */ 94 u64 err_cond; /* Error condition */ 95 u64 early_window; /* Order restoration, frame too early */ 96 u64 late_window; /* Order restoration, frame too late */ 97 u64 fq_tdrop; /* FQ taildrop */ 98 u64 fq_retired; /* FQ is retired */ 99 u64 orp_zero; /* ORP disabled */ 100 }; 101 102 struct dpaa_napi_portal { 103 struct napi_struct napi; 104 struct qman_portal *p; 105 bool down; 106 int xdp_act; 107 }; 108 109 struct dpaa_percpu_priv { 110 struct net_device *net_dev; 111 struct dpaa_napi_portal np; 112 u64 in_interrupt; 113 u64 tx_confirm; 114 /* fragmented (non-linear) skbuffs received from the stack */ 115 u64 tx_frag_skbuffs; 116 struct rtnl_link_stats64 stats; 117 struct dpaa_rx_errors rx_errors; 118 struct dpaa_ern_cnt ern_cnt; 119 }; 120 121 struct dpaa_buffer_layout { 122 u16 priv_data_size; 123 }; 124 125 /* Information to be used on the Tx confirmation path. Stored just 126 * before the start of the transmit buffer. Maximum size allowed 127 * is DPAA_TX_PRIV_DATA_SIZE bytes. 128 */ 129 struct dpaa_eth_swbp { 130 struct sk_buff *skb; 131 struct xdp_frame *xdpf; 132 }; 133 134 struct dpaa_priv { 135 struct dpaa_percpu_priv __percpu *percpu_priv; 136 struct dpaa_bp *dpaa_bp; 137 /* Store here the needed Tx headroom for convenience and speed 138 * (even though it can be computed based on the fields of buf_layout) 139 */ 140 u16 tx_headroom; 141 struct net_device *net_dev; 142 struct mac_device *mac_dev; 143 struct device *rx_dma_dev; 144 struct device *tx_dma_dev; 145 struct qman_fq *egress_fqs[DPAA_ETH_TXQ_NUM]; 146 struct qman_fq *conf_fqs[DPAA_ETH_TXQ_NUM]; 147 148 u16 channel; 149 struct list_head dpaa_fq_list; 150 151 u8 num_tc; 152 bool keygen_in_use; 153 u32 msg_enable; /* net_device message level */ 154 155 struct { 156 /* All egress queues to a given net device belong to one 157 * (and the same) congestion group. 158 */ 159 struct qman_cgr cgr; 160 /* If congested, when it began. Used for performance stats. */ 161 u32 congestion_start_jiffies; 162 /* Number of jiffies the Tx port was congested. */ 163 u32 congested_jiffies; 164 /* Counter for the number of times the CGR 165 * entered congestion state 166 */ 167 u32 cgr_congested_count; 168 } cgr_data; 169 /* Use a per-port CGR for ingress traffic. */ 170 bool use_ingress_cgr; 171 struct qman_cgr ingress_cgr; 172 173 struct dpaa_buffer_layout buf_layout[2]; 174 u16 rx_headroom; 175 176 bool tx_tstamp; /* Tx timestamping enabled */ 177 bool rx_tstamp; /* Rx timestamping enabled */ 178 179 struct bpf_prog *xdp_prog; 180 }; 181 182 /* from dpaa_ethtool.c */ 183 extern const struct ethtool_ops dpaa_ethtool_ops; 184 185 /* from dpaa_eth_sysfs.c */ 186 void dpaa_eth_sysfs_remove(struct device *dev); 187 void dpaa_eth_sysfs_init(struct device *dev); 188 #endif /* __DPAA_H */ 189