brintos

brintos / linux-shallow public Read only

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