File Index
Files and directories
Sign in
FILE

otx2_common.h

File preview with syntax highlighting.

linux-6.19.14/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h C
   1/* SPDX-License-Identifier: GPL-2.0 */
   2/* Marvell RVU Ethernet driver
   3 *
   4 * Copyright (C) 2020 Marvell.
   5 *
   6 */
   7
   8#ifndef OTX2_COMMON_H
   9#define OTX2_COMMON_H
  10
  11#include <linux/ethtool.h>
  12#include <linux/pci.h>
  13#include <linux/iommu.h>
  14#include <linux/net_tstamp.h>
  15#include <linux/ptp_clock_kernel.h>
  16#include <linux/timecounter.h>
  17#include <linux/soc/marvell/silicons.h>
  18#include <linux/soc/marvell/octeontx2/asm.h>
  19#include <net/macsec.h>
  20#include <net/pkt_cls.h>
  21#include <net/devlink.h>
  22#include <linux/time64.h>
  23#include <linux/dim.h>
  24#include <uapi/linux/if_macsec.h>
  25#include <net/page_pool/helpers.h>
  26
  27#include <mbox.h>
  28#include <npc.h>
  29#include "otx2_reg.h"
  30#include "otx2_txrx.h"
  31#include "otx2_devlink.h"
  32#include <rvu.h>
  33#include <rvu_trace.h>
  34#include "qos.h"
  35#include "rep.h"
  36#include "cn10k_ipsec.h"
  37#include "cn20k.h"
  38
  39/* IPv4 flag more fragment bit */
  40#define IPV4_FLAG_MORE				0x20
  41
  42/* PCI device IDs */
  43#define PCI_DEVID_OCTEONTX2_RVU_PF              0xA063
  44#define PCI_DEVID_OCTEONTX2_RVU_VF		0xA064
  45#define PCI_DEVID_OCTEONTX2_RVU_AFVF		0xA0F8
  46
  47#define PCI_SUBSYS_DEVID_96XX_RVU_PFVF		0xB200
  48#define PCI_SUBSYS_DEVID_CN10K_A_RVU_PFVF	0xB900
  49#define PCI_SUBSYS_DEVID_CN10K_B_RVU_PFVF	0xBD00
  50
  51#define PCI_DEVID_OCTEONTX2_SDP_REP		0xA0F7
  52
  53/* PCI BAR nos */
  54#define PCI_CFG_REG_BAR_NUM                     2
  55#define PCI_MBOX_BAR_NUM                        4
  56
  57#define NAME_SIZE                               32
  58
  59#ifdef CONFIG_DCB
  60/* Max priority supported for PFC */
  61#define NIX_PF_PFC_PRIO_MAX			8
  62#endif
  63
  64/* Number of segments per SG structure */
  65#define MAX_SEGS_PER_SG 3
  66
  67irqreturn_t otx2_pfaf_mbox_intr_handler(int irq, void *pf_irq);
  68irqreturn_t cn20k_pfaf_mbox_intr_handler(int irq, void *pf_irq);
  69irqreturn_t cn20k_vfaf_mbox_intr_handler(int irq, void *vf_irq);
  70irqreturn_t cn20k_pfvf_mbox_intr_handler(int irq, void *pf_irq);
  71irqreturn_t otx2_pfvf_mbox_intr_handler(int irq, void *pf_irq);
  72
  73enum arua_mapped_qtypes {
  74	AURA_NIX_RQ,
  75	AURA_NIX_SQ,
  76};
  77
  78/* NIX LF interrupts range*/
  79#define NIX_LF_QINT_VEC_START			0x00
  80#define NIX_LF_CINT_VEC_START			0x40
  81#define NIX_LF_GINT_VEC				0x80
  82#define NIX_LF_ERR_VEC				0x81
  83#define NIX_LF_POISON_VEC			0x82
  84
  85/* Send skid of 2000 packets required for CQ size of 4K CQEs. */
  86#define SEND_CQ_SKID	2000
  87
  88#define OTX2_GET_RX_STATS(reg) \
  89	otx2_read64(pfvf, NIX_LF_RX_STATX(reg))
  90#define OTX2_GET_TX_STATS(reg) \
  91	otx2_read64(pfvf, NIX_LF_TX_STATX(reg))
  92
  93struct otx2_lmt_info {
  94	u64 lmt_addr;
  95	u16 lmt_id;
  96};
  97
  98struct otx2_rss_info {
  99	u8 enable;
 100	u32 flowkey_cfg;
 101	u16 rss_size;
 102#define RSS_HASH_KEY_SIZE	44   /* 352 bit key */
 103	u8  key[RSS_HASH_KEY_SIZE];
 104	u32 ind_tbl[MAX_RSS_INDIR_TBL_SIZE];
 105};
 106
 107/* NIX (or NPC) RX errors */
 108enum otx2_errlvl {
 109	NPC_ERRLVL_RE,
 110	NPC_ERRLVL_LID_LA,
 111	NPC_ERRLVL_LID_LB,
 112	NPC_ERRLVL_LID_LC,
 113	NPC_ERRLVL_LID_LD,
 114	NPC_ERRLVL_LID_LE,
 115	NPC_ERRLVL_LID_LF,
 116	NPC_ERRLVL_LID_LG,
 117	NPC_ERRLVL_LID_LH,
 118	NPC_ERRLVL_NIX = 0x0F,
 119};
 120
 121enum otx2_errcodes_re {
 122	/* NPC_ERRLVL_RE errcodes */
 123	ERRCODE_FCS = 0x7,
 124	ERRCODE_FCS_RCV = 0x8,
 125	ERRCODE_UNDERSIZE = 0x10,
 126	ERRCODE_OVERSIZE = 0x11,
 127	ERRCODE_OL2_LEN_MISMATCH = 0x12,
 128	/* NPC_ERRLVL_NIX errcodes */
 129	ERRCODE_OL3_LEN = 0x10,
 130	ERRCODE_OL4_LEN = 0x11,
 131	ERRCODE_OL4_CSUM = 0x12,
 132	ERRCODE_IL3_LEN = 0x20,
 133	ERRCODE_IL4_LEN = 0x21,
 134	ERRCODE_IL4_CSUM = 0x22,
 135};
 136
 137enum otx2_xdp_action {
 138	OTX2_XDP_TX	  = BIT(0),
 139	OTX2_XDP_REDIRECT = BIT(1),
 140	OTX2_AF_XDP_FRAME = BIT(2),
 141};
 142
 143struct otx2_dev_stats {
 144	u64 rx_bytes;
 145	u64 rx_frames;
 146	u64 rx_ucast_frames;
 147	u64 rx_bcast_frames;
 148	u64 rx_mcast_frames;
 149	u64 rx_drops;
 150
 151	u64 tx_bytes;
 152	u64 tx_frames;
 153	u64 tx_ucast_frames;
 154	u64 tx_bcast_frames;
 155	u64 tx_mcast_frames;
 156	u64 tx_drops;
 157	atomic_long_t tx_discards;
 158};
 159
 160/* Driver counted stats */
 161struct otx2_drv_stats {
 162	atomic_t rx_fcs_errs;
 163	atomic_t rx_oversize_errs;
 164	atomic_t rx_undersize_errs;
 165	atomic_t rx_csum_errs;
 166	atomic_t rx_len_errs;
 167	atomic_t rx_other_errs;
 168};
 169
 170struct mbox {
 171	struct otx2_mbox	mbox;
 172	struct work_struct	mbox_wrk;
 173	struct otx2_mbox	mbox_up;
 174	struct work_struct	mbox_up_wrk;
 175	struct otx2_nic		*pfvf;
 176	void			*bbuf_base; /* Bounce buffer for mbox memory */
 177	struct mutex		lock;	/* serialize mailbox access */
 178	int			num_msgs; /* mbox number of messages */
 179	int			up_num_msgs; /* mbox_up number of messages */
 180};
 181
 182/* Egress rate limiting definitions */
 183#define MAX_BURST_EXPONENT		0x0FULL
 184#define MAX_BURST_MANTISSA		0xFFULL
 185#define MAX_BURST_SIZE			130816ULL
 186#define MAX_RATE_DIVIDER_EXPONENT	12ULL
 187#define MAX_RATE_EXPONENT		0x0FULL
 188#define MAX_RATE_MANTISSA		0xFFULL
 189
 190/* Bitfields in NIX_TLX_PIR register */
 191#define TLX_RATE_MANTISSA		GENMASK_ULL(8, 1)
 192#define TLX_RATE_EXPONENT		GENMASK_ULL(12, 9)
 193#define TLX_RATE_DIVIDER_EXPONENT	GENMASK_ULL(16, 13)
 194#define TLX_BURST_MANTISSA		GENMASK_ULL(36, 29)
 195#define TLX_BURST_EXPONENT		GENMASK_ULL(40, 37)
 196
 197struct otx2_hw {
 198	struct pci_dev		*pdev;
 199	struct otx2_rss_info	rss_info;
 200	u16                     rx_queues;
 201	u16                     tx_queues;
 202	u16                     xdp_queues;
 203	u16			tc_tx_queues;
 204	u16                     non_qos_queues; /* tx queues plus xdp queues */
 205	u16			max_queues;
 206	u16			pool_cnt;
 207	u16			rqpool_cnt;
 208	u16			sqpool_cnt;
 209
 210#define OTX2_DEFAULT_RBUF_LEN	2048
 211	u16			rbuf_len;
 212	u32			xqe_size;
 213
 214	/* NPA */
 215	u32			stack_pg_ptrs;  /* No of ptrs per stack page */
 216	u32			stack_pg_bytes; /* Size of stack page */
 217	u16			sqb_size;
 218
 219	/* NIX */
 220	u8			txschq_link_cfg_lvl;
 221	u8			txschq_cnt[NIX_TXSCH_LVL_CNT];
 222	u8			txschq_aggr_lvl_rr_prio;
 223	u16			txschq_list[NIX_TXSCH_LVL_CNT][MAX_TXSCHQ_PER_FUNC];
 224	u16			matchall_ipolicer;
 225	u32			dwrr_mtu;
 226	u32			max_mtu;
 227	u8			smq_link_type;
 228
 229	/* HW settings, coalescing etc */
 230	u16			rx_chan_base;
 231	u16			tx_chan_base;
 232	u8			rx_chan_cnt;
 233	u8			tx_chan_cnt;
 234	u16			cq_qcount_wait;
 235	u16			cq_ecount_wait;
 236	u16			rq_skid;
 237	u8			cq_time_wait;
 238
 239	/* Segmentation */
 240	u8			lso_tsov4_idx;
 241	u8			lso_tsov6_idx;
 242	u8			lso_udpv4_idx;
 243	u8			lso_udpv6_idx;
 244
 245	/* RSS */
 246	u8			flowkey_alg_idx;
 247
 248	/* MSI-X */
 249	u8			cint_cnt; /* CQ interrupt count */
 250	u16			npa_msixoff; /* Offset of NPA vectors */
 251	u16			nix_msixoff; /* Offset of NIX vectors */
 252	char			*irq_name;
 253	cpumask_var_t           *affinity_mask;
 254	struct pf_irq_data	*pfvf_irq_devid[4];
 255
 256	/* Stats */
 257	struct otx2_dev_stats	dev_stats;
 258	struct otx2_drv_stats	drv_stats;
 259	u64			cgx_rx_stats[CGX_RX_STATS_COUNT];
 260	u64			cgx_tx_stats[CGX_TX_STATS_COUNT];
 261	u64			cgx_fec_corr_blks;
 262	u64			cgx_fec_uncorr_blks;
 263	u8			cgx_links;  /* No. of CGX links present in HW */
 264	u8			lbk_links;  /* No. of LBK links present in HW */
 265	u8			tx_link;    /* Transmit channel link number */
 266#define HW_TSO			0
 267#define CN10K_MBOX		1
 268#define CN10K_LMTST		2
 269#define CN10K_RPM		3
 270#define CN10K_PTP_ONESTEP	4
 271#define CN10K_HW_MACSEC		5
 272#define QOS_CIR_PIR_SUPPORT	6
 273	unsigned long		cap_flag;
 274
 275#define LMT_LINE_SIZE		128
 276#define LMT_BURST_SIZE		32 /* 32 LMTST lines for burst SQE flush */
 277	u64			*lmt_base;
 278	struct otx2_lmt_info	__percpu *lmt_info;
 279};
 280
 281enum vfperm {
 282	OTX2_RESET_VF_PERM,
 283	OTX2_TRUSTED_VF,
 284};
 285
 286struct otx2_vf_config {
 287	struct otx2_nic *pf;
 288	struct delayed_work link_event_work;
 289	bool intf_down; /* interface was either configured or not */
 290	u8 mac[ETH_ALEN];
 291	u16 vlan;
 292	int tx_vtag_idx;
 293	bool trusted;
 294};
 295
 296struct flr_work {
 297	struct work_struct work;
 298	struct otx2_nic *pf;
 299};
 300
 301struct refill_work {
 302	struct delayed_work pool_refill_work;
 303	struct otx2_nic *pf;
 304	struct napi_struct *napi;
 305};
 306
 307/* PTPv2 originTimestamp structure */
 308struct ptpv2_tstamp {
 309	__be16 seconds_msb; /* 16 bits + */
 310	__be32 seconds_lsb; /* 32 bits = 48 bits*/
 311	__be32 nanoseconds;
 312} __packed;
 313
 314struct otx2_ptp {
 315	struct ptp_clock_info ptp_info;
 316	struct ptp_clock *ptp_clock;
 317	struct otx2_nic *nic;
 318
 319	struct cyclecounter cycle_counter;
 320	struct timecounter time_counter;
 321
 322	struct delayed_work extts_work;
 323	u64 last_extts;
 324	u64 thresh;
 325
 326	struct ptp_pin_desc extts_config;
 327	u64 (*convert_rx_ptp_tstmp)(u64 timestamp);
 328	u64 (*convert_tx_ptp_tstmp)(u64 timestamp);
 329	u64 (*ptp_tstamp2nsec)(const struct timecounter *time_counter, u64 timestamp);
 330	struct delayed_work synctstamp_work;
 331	u64 tstamp;
 332	u32 base_ns;
 333};
 334
 335#define OTX2_HW_TIMESTAMP_LEN	8
 336
 337struct otx2_mac_table {
 338	u8 addr[ETH_ALEN];
 339	u16 mcam_entry;
 340	bool inuse;
 341};
 342
 343struct otx2_flow_config {
 344	u16			*flow_ent;
 345	u16			*def_ent;
 346	u16			nr_flows;
 347#define OTX2_DEFAULT_FLOWCOUNT		16
 348#define OTX2_DEFAULT_UNICAST_FLOWS	4
 349#define OTX2_MAX_VLAN_FLOWS		1
 350#define OTX2_MAX_TC_FLOWS	OTX2_DEFAULT_FLOWCOUNT
 351	u16			unicast_offset;
 352	u16			rx_vlan_offset;
 353	u16			vf_vlan_offset;
 354#define OTX2_PER_VF_VLAN_FLOWS	2 /* Rx + Tx per VF */
 355#define OTX2_VF_VLAN_RX_INDEX	0
 356#define OTX2_VF_VLAN_TX_INDEX	1
 357	u32			*bmap_to_dmacindex;
 358	unsigned long		*dmacflt_bmap;
 359	struct list_head	flow_list;
 360	u32			dmacflt_max_flows;
 361	u16                     max_flows;
 362	refcount_t		mark_flows;
 363	struct list_head	flow_list_tc;
 364	u8			ucast_flt_cnt;
 365	bool			ntuple;
 366	u16			ntuple_cnt;
 367};
 368
 369struct dev_hw_ops {
 370	int	(*sq_aq_init)(void *dev, u16 qidx, u8 chan_offset,
 371			      u16 sqb_aura);
 372	void	(*sqe_flush)(void *dev, struct otx2_snd_queue *sq,
 373			     int size, int qidx);
 374	int	(*refill_pool_ptrs)(void *dev, struct otx2_cq_queue *cq);
 375	void	(*aura_freeptr)(void *dev, int aura, u64 buf);
 376	irqreturn_t (*pfaf_mbox_intr_handler)(int irq, void *pf_irq);
 377	irqreturn_t (*vfaf_mbox_intr_handler)(int irq, void *pf_irq);
 378	irqreturn_t (*pfvf_mbox_intr_handler)(int irq, void *pf_irq);
 379	int	(*aura_aq_init)(struct otx2_nic *pfvf, int aura_id,
 380				int pool_id, int numptrs);
 381	int	(*pool_aq_init)(struct otx2_nic *pfvf, u16 pool_id,
 382				int stack_pages, int numptrs, int buf_size,
 383				int type);
 384};
 385
 386#define CN10K_MCS_SA_PER_SC	4
 387
 388/* Stats which need to be accumulated in software because
 389 * of shared counters in hardware.
 390 */
 391struct cn10k_txsc_stats {
 392	u64 InPktsUntagged;
 393	u64 InPktsNoTag;
 394	u64 InPktsBadTag;
 395	u64 InPktsUnknownSCI;
 396	u64 InPktsNoSCI;
 397	u64 InPktsOverrun;
 398};
 399
 400struct cn10k_rxsc_stats {
 401	u64 InOctetsValidated;
 402	u64 InOctetsDecrypted;
 403	u64 InPktsUnchecked;
 404	u64 InPktsDelayed;
 405	u64 InPktsOK;
 406	u64 InPktsInvalid;
 407	u64 InPktsLate;
 408	u64 InPktsNotValid;
 409	u64 InPktsNotUsingSA;
 410	u64 InPktsUnusedSA;
 411};
 412
 413struct cn10k_mcs_txsc {
 414	struct macsec_secy *sw_secy;
 415	struct cn10k_txsc_stats stats;
 416	struct list_head entry;
 417	enum macsec_validation_type last_validate_frames;
 418	bool last_replay_protect;
 419	u16 hw_secy_id_tx;
 420	u16 hw_secy_id_rx;
 421	u16 hw_flow_id;
 422	u16 hw_sc_id;
 423	u16 hw_sa_id[CN10K_MCS_SA_PER_SC];
 424	u8 sa_bmap;
 425	u8 sa_key[CN10K_MCS_SA_PER_SC][MACSEC_MAX_KEY_LEN];
 426	u8 encoding_sa;
 427	u8 salt[CN10K_MCS_SA_PER_SC][MACSEC_SALT_LEN];
 428	ssci_t ssci[CN10K_MCS_SA_PER_SC];
 429	bool vlan_dev; /* macsec running on VLAN ? */
 430};
 431
 432struct cn10k_mcs_rxsc {
 433	struct macsec_secy *sw_secy;
 434	struct macsec_rx_sc *sw_rxsc;
 435	struct cn10k_rxsc_stats stats;
 436	struct list_head entry;
 437	u16 hw_flow_id;
 438	u16 hw_sc_id;
 439	u16 hw_sa_id[CN10K_MCS_SA_PER_SC];
 440	u8 sa_bmap;
 441	u8 sa_key[CN10K_MCS_SA_PER_SC][MACSEC_MAX_KEY_LEN];
 442	u8 salt[CN10K_MCS_SA_PER_SC][MACSEC_SALT_LEN];
 443	ssci_t ssci[CN10K_MCS_SA_PER_SC];
 444};
 445
 446struct cn10k_mcs_cfg {
 447	struct list_head txsc_list;
 448	struct list_head rxsc_list;
 449};
 450
 451struct pf_irq_data {
 452	u64 intr_status;
 453	void (*pf_queue_work_hdlr)(struct mbox *mb, struct workqueue_struct *mw,
 454				   int first, int mdevs, u64 intr);
 455	struct otx2_nic *pf;
 456	int vec_num;
 457	int start;
 458	int mdevs;
 459};
 460
 461struct otx2_nic {
 462	void __iomem		*reg_base;
 463	struct net_device	*netdev;
 464	struct dev_hw_ops	*hw_ops;
 465	void			*iommu_domain;
 466	u16			tx_max_pktlen;
 467	u16			rbsize; /* Receive buffer size */
 468
 469#define OTX2_FLAG_RX_TSTAMP_ENABLED		BIT_ULL(0)
 470#define OTX2_FLAG_TX_TSTAMP_ENABLED		BIT_ULL(1)
 471#define OTX2_FLAG_INTF_DOWN			BIT_ULL(2)
 472#define OTX2_FLAG_MCAM_ENTRIES_ALLOC		BIT_ULL(3)
 473#define OTX2_FLAG_NTUPLE_SUPPORT		BIT_ULL(4)
 474#define OTX2_FLAG_UCAST_FLTR_SUPPORT		BIT_ULL(5)
 475#define OTX2_FLAG_RX_VLAN_SUPPORT		BIT_ULL(6)
 476#define OTX2_FLAG_VF_VLAN_SUPPORT		BIT_ULL(7)
 477#define OTX2_FLAG_PF_SHUTDOWN			BIT_ULL(8)
 478#define OTX2_FLAG_RX_PAUSE_ENABLED		BIT_ULL(9)
 479#define OTX2_FLAG_TX_PAUSE_ENABLED		BIT_ULL(10)
 480#define OTX2_FLAG_TC_FLOWER_SUPPORT		BIT_ULL(11)
 481#define OTX2_FLAG_TC_MATCHALL_EGRESS_ENABLED	BIT_ULL(12)
 482#define OTX2_FLAG_TC_MATCHALL_INGRESS_ENABLED	BIT_ULL(13)
 483#define OTX2_FLAG_DMACFLTR_SUPPORT		BIT_ULL(14)
 484#define OTX2_FLAG_PTP_ONESTEP_SYNC		BIT_ULL(15)
 485#define OTX2_FLAG_ADPTV_INT_COAL_ENABLED BIT_ULL(16)
 486#define OTX2_FLAG_TC_MARK_ENABLED		BIT_ULL(17)
 487#define OTX2_FLAG_REP_MODE_ENABLED		 BIT_ULL(18)
 488#define OTX2_FLAG_PORT_UP			BIT_ULL(19)
 489#define OTX2_FLAG_IPSEC_OFFLOAD_ENABLED		BIT_ULL(20)
 490	u64			flags;
 491	u64			*cq_op_addr;
 492
 493	struct bpf_prog		*xdp_prog;
 494	struct otx2_qset	qset;
 495	struct otx2_hw		hw;
 496	struct pci_dev		*pdev;
 497	struct device		*dev;
 498
 499	/* Mbox */
 500	struct mbox		mbox;
 501	struct mbox		*mbox_pfvf;
 502	struct workqueue_struct *mbox_wq;
 503	struct workqueue_struct *mbox_pfvf_wq;
 504	struct qmem		*pfvf_mbox_addr;
 505
 506	u8			total_vfs;
 507	u16			pcifunc; /* RVU PF_FUNC */
 508	u16			bpid[NIX_MAX_BPID_CHAN];
 509	struct otx2_vf_config	*vf_configs;
 510	struct cgx_link_user_info linfo;
 511
 512	/* NPC MCAM */
 513	struct otx2_flow_config	*flow_cfg;
 514	struct otx2_mac_table	*mac_table;
 515
 516	u64			reset_count;
 517	struct work_struct	reset_task;
 518	struct workqueue_struct	*flr_wq;
 519	struct flr_work		*flr_wrk;
 520	struct refill_work	*refill_wrk;
 521	struct workqueue_struct	*otx2_wq;
 522	struct work_struct	rx_mode_work;
 523
 524	/* Ethtool stuff */
 525	u32			msg_enable;
 526
 527	/* Block address of NIX either BLKADDR_NIX0 or BLKADDR_NIX1 */
 528	int			nix_blkaddr;
 529	/* LMTST Lines info */
 530	struct qmem		*dync_lmt;
 531	u16			tot_lmt_lines;
 532	u16			npa_lmt_lines;
 533	u32			nix_lmt_size;
 534
 535	struct otx2_ptp		*ptp;
 536	struct kernel_hwtstamp_config tstamp;
 537
 538	unsigned long		rq_bmap;
 539
 540	/* Devlink */
 541	struct otx2_devlink	*dl;
 542	/* PFC */
 543	u8			pfc_en;
 544#ifdef CONFIG_DCB
 545	u8			*queue_to_pfc_map;
 546	u16			pfc_schq_list[NIX_TXSCH_LVL_CNT][MAX_TXSCHQ_PER_FUNC];
 547	bool			pfc_alloc_status[NIX_PF_PFC_PRIO_MAX];
 548#endif
 549	/* qos */
 550	struct otx2_qos		qos;
 551
 552	/* napi event count. It is needed for adaptive irq coalescing. */
 553	u32 napi_events;
 554
 555#if IS_ENABLED(CONFIG_MACSEC)
 556	struct cn10k_mcs_cfg	*macsec_cfg;
 557#endif
 558
 559#if IS_ENABLED(CONFIG_RVU_ESWITCH)
 560	struct rep_dev		**reps;
 561	int			rep_cnt;
 562	u16			rep_pf_map[RVU_MAX_REP];
 563	u16			esw_mode;
 564#endif
 565
 566	/* Inline ipsec */
 567	struct cn10k_ipsec	ipsec;
 568	/* af_xdp zero-copy */
 569	unsigned long		*af_xdp_zc_qidx;
 570};
 571
 572static inline bool is_otx2_lbkvf(struct pci_dev *pdev)
 573{
 574	return (pdev->device == PCI_DEVID_OCTEONTX2_RVU_AFVF) ||
 575		(pdev->device == PCI_DEVID_RVU_REP);
 576}
 577
 578static inline bool is_96xx_A0(struct pci_dev *pdev)
 579{
 580	return (pdev->revision == 0x00) &&
 581		(pdev->subsystem_device == PCI_SUBSYS_DEVID_96XX_RVU_PFVF);
 582}
 583
 584static inline bool is_96xx_B0(struct pci_dev *pdev)
 585{
 586	return (pdev->revision == 0x01) &&
 587		(pdev->subsystem_device == PCI_SUBSYS_DEVID_96XX_RVU_PFVF);
 588}
 589
 590static inline bool is_otx2_sdp_rep(struct pci_dev *pdev)
 591{
 592	return pdev->device == PCI_DEVID_OCTEONTX2_SDP_REP;
 593}
 594
 595/* REVID for PCIe devices.
 596 * Bits 0..1: minor pass, bit 3..2: major pass
 597 * bits 7..4: midr id
 598 */
 599#define PCI_REVISION_ID_96XX		0x00
 600#define PCI_REVISION_ID_95XX		0x10
 601#define PCI_REVISION_ID_95XXN		0x20
 602#define PCI_REVISION_ID_98XX		0x30
 603#define PCI_REVISION_ID_95XXMM		0x40
 604#define PCI_REVISION_ID_95XXO		0xE0
 605
 606static inline bool is_dev_otx2(struct pci_dev *pdev)
 607{
 608	u8 midr = pdev->revision & 0xF0;
 609
 610	return (midr == PCI_REVISION_ID_96XX || midr == PCI_REVISION_ID_95XX ||
 611		midr == PCI_REVISION_ID_95XXN || midr == PCI_REVISION_ID_98XX ||
 612		midr == PCI_REVISION_ID_95XXMM || midr == PCI_REVISION_ID_95XXO);
 613}
 614
 615static inline bool is_dev_cn10kb(struct pci_dev *pdev)
 616{
 617	return pdev->subsystem_device == PCI_SUBSYS_DEVID_CN10K_B_RVU_PFVF;
 618}
 619
 620static inline bool is_dev_cn10ka_b0(struct pci_dev *pdev)
 621{
 622	if (pdev->subsystem_device == PCI_SUBSYS_DEVID_CN10K_A_RVU_PFVF &&
 623	    (pdev->revision & 0xFF) == 0x54)
 624		return true;
 625
 626	return false;
 627}
 628
 629static inline void otx2_setup_dev_hw_settings(struct otx2_nic *pfvf)
 630{
 631	struct otx2_hw *hw = &pfvf->hw;
 632
 633	pfvf->hw.cq_time_wait = CQ_TIMER_THRESH_DEFAULT;
 634	pfvf->hw.cq_ecount_wait = CQ_CQE_THRESH_DEFAULT;
 635	pfvf->hw.cq_qcount_wait = CQ_QCOUNT_DEFAULT;
 636
 637	__set_bit(HW_TSO, &hw->cap_flag);
 638
 639	if (is_96xx_A0(pfvf->pdev)) {
 640		__clear_bit(HW_TSO, &hw->cap_flag);
 641
 642		/* Time based irq coalescing is not supported */
 643		pfvf->hw.cq_qcount_wait = 0x0;
 644
 645		/* Due to HW issue previous silicons required minimum
 646		 * 600 unused CQE to avoid CQ overflow.
 647		 */
 648		pfvf->hw.rq_skid = 600;
 649		pfvf->qset.rqe_cnt = Q_COUNT(Q_SIZE_1K);
 650	}
 651	if (is_96xx_B0(pfvf->pdev))
 652		__clear_bit(HW_TSO, &hw->cap_flag);
 653
 654	if (!is_dev_otx2(pfvf->pdev)) {
 655		__set_bit(CN10K_MBOX, &hw->cap_flag);
 656		__set_bit(CN10K_LMTST, &hw->cap_flag);
 657		__set_bit(CN10K_RPM, &hw->cap_flag);
 658		__set_bit(CN10K_PTP_ONESTEP, &hw->cap_flag);
 659		__set_bit(QOS_CIR_PIR_SUPPORT, &hw->cap_flag);
 660	}
 661}
 662
 663/* Register read/write APIs */
 664static inline void __iomem *otx2_get_regaddr(struct otx2_nic *nic, u64 offset)
 665{
 666	u64 blkaddr;
 667
 668	switch ((offset >> RVU_FUNC_BLKADDR_SHIFT) & RVU_FUNC_BLKADDR_MASK) {
 669	case BLKTYPE_NIX:
 670		blkaddr = nic->nix_blkaddr;
 671		break;
 672	case BLKTYPE_NPA:
 673		blkaddr = BLKADDR_NPA;
 674		break;
 675	case BLKTYPE_CPT:
 676		blkaddr = BLKADDR_CPT0;
 677		break;
 678	default:
 679		blkaddr = BLKADDR_RVUM;
 680		break;
 681	}
 682
 683	offset &= ~(RVU_FUNC_BLKADDR_MASK << RVU_FUNC_BLKADDR_SHIFT);
 684	offset |= (blkaddr << RVU_FUNC_BLKADDR_SHIFT);
 685
 686	return nic->reg_base + offset;
 687}
 688
 689static inline void otx2_write64(struct otx2_nic *nic, u64 offset, u64 val)
 690{
 691	void __iomem *addr = otx2_get_regaddr(nic, offset);
 692
 693	writeq(val, addr);
 694}
 695
 696static inline u64 otx2_read64(struct otx2_nic *nic, u64 offset)
 697{
 698	void __iomem *addr = otx2_get_regaddr(nic, offset);
 699
 700	return readq(addr);
 701}
 702
 703/* Mbox bounce buffer APIs */
 704static inline int otx2_mbox_bbuf_init(struct mbox *mbox, struct pci_dev *pdev)
 705{
 706	struct otx2_mbox *otx2_mbox;
 707	struct otx2_mbox_dev *mdev;
 708
 709	mbox->bbuf_base = devm_kmalloc(&pdev->dev, MBOX_SIZE, GFP_KERNEL);
 710	if (!mbox->bbuf_base)
 711		return -ENOMEM;
 712
 713	/* Overwrite mbox mbase to point to bounce buffer, so that PF/VF
 714	 * prepare all mbox messages in bounce buffer instead of directly
 715	 * in hw mbox memory.
 716	 */
 717	otx2_mbox = &mbox->mbox;
 718	mdev = &otx2_mbox->dev[0];
 719	mdev->mbase = mbox->bbuf_base;
 720
 721	otx2_mbox = &mbox->mbox_up;
 722	mdev = &otx2_mbox->dev[0];
 723	mdev->mbase = mbox->bbuf_base;
 724	return 0;
 725}
 726
 727static inline void otx2_sync_mbox_bbuf(struct otx2_mbox *mbox, int devid)
 728{
 729	u16 msgs_offset = ALIGN(sizeof(struct mbox_hdr), MBOX_MSG_ALIGN);
 730	void *hw_mbase = mbox->hwbase + (devid * MBOX_SIZE);
 731	struct otx2_mbox_dev *mdev = &mbox->dev[devid];
 732	struct mbox_hdr *hdr;
 733	u64 msg_size;
 734
 735	if (mdev->mbase == hw_mbase)
 736		return;
 737
 738	hdr = hw_mbase + mbox->rx_start;
 739	msg_size = hdr->msg_size;
 740
 741	if (msg_size > mbox->rx_size - msgs_offset)
 742		msg_size = mbox->rx_size - msgs_offset;
 743
 744	/* Copy mbox messages from mbox memory to bounce buffer */
 745	memcpy(mdev->mbase + mbox->rx_start,
 746	       hw_mbase + mbox->rx_start, msg_size + msgs_offset);
 747}
 748
 749/* With the absence of API for 128-bit IO memory access for arm64,
 750 * implement required operations at place.
 751 */
 752#if defined(CONFIG_ARM64)
 753static inline void otx2_write128(u64 lo, u64 hi, void __iomem *addr)
 754{
 755	__asm__ volatile("stp %x[x0], %x[x1], [%x[p1],#0]!"
 756			 ::[x0]"r"(lo), [x1]"r"(hi), [p1]"r"(addr));
 757}
 758
 759static inline u64 otx2_atomic64_add(u64 incr, void __iomem *addr)
 760{
 761	u64 __iomem *ptr = addr;
 762	u64 result;
 763
 764	__asm__ volatile(".cpu   generic+lse\n"
 765			 "ldadd %x[i], %x[r], [%[b]]"
 766			 : [r]"=r"(result), "+m"(*ptr)
 767			 : [i]"r"(incr), [b]"r"(ptr)
 768			 : "memory");
 769	return result;
 770}
 771
 772#else
 773#define otx2_write128(lo, hi, addr)		writeq((hi) | (lo), addr)
 774
 775static inline u64 otx2_atomic64_add(u64 incr, void __iomem *addr)
 776{
 777	return 0;
 778}
 779#endif
 780
 781static inline void __cn10k_aura_freeptr(struct otx2_nic *pfvf, u64 aura,
 782					u64 *ptrs, u64 num_ptrs)
 783{
 784	struct otx2_lmt_info *lmt_info;
 785	u64 size = 0, count_eot = 0;
 786	u64 tar_addr, val = 0;
 787
 788	lmt_info = per_cpu_ptr(pfvf->hw.lmt_info, smp_processor_id());
 789	tar_addr = (__force u64)otx2_get_regaddr(pfvf, NPA_LF_AURA_BATCH_FREE0);
 790	/* LMTID is same as AURA Id */
 791	val = (lmt_info->lmt_id & 0x7FF) | BIT_ULL(63);
 792	/* Set if [127:64] of last 128bit word has a valid pointer */
 793	count_eot = (num_ptrs % 2) ? 0ULL : 1ULL;
 794	/* Set AURA ID to free pointer */
 795	ptrs[0] = (count_eot << 32) | (aura & 0xFFFFF);
 796	/* Target address for LMTST flush tells HW how many 128bit
 797	 * words are valid from NPA_LF_AURA_BATCH_FREE0.
 798	 *
 799	 * tar_addr[6:4] is LMTST size-1 in units of 128b.
 800	 */
 801	if (num_ptrs > 2) {
 802		size = (sizeof(u64) * num_ptrs) / 16;
 803		if (!count_eot)
 804			size++;
 805		tar_addr |=  ((size - 1) & 0x7) << 4;
 806	}
 807	dma_wmb();
 808	memcpy((u64 *)lmt_info->lmt_addr, ptrs, sizeof(u64) * num_ptrs);
 809	/* Perform LMTST flush */
 810	cn10k_lmt_flush(val, tar_addr);
 811}
 812
 813static inline void cn10k_aura_freeptr(void *dev, int aura, u64 buf)
 814{
 815	struct otx2_nic *pfvf = dev;
 816	u64 ptrs[2];
 817
 818	ptrs[1] = buf;
 819	get_cpu();
 820	/* Free only one buffer at time during init and teardown */
 821	__cn10k_aura_freeptr(pfvf, aura, ptrs, 2);
 822	put_cpu();
 823}
 824
 825/* Alloc pointer from pool/aura */
 826static inline u64 otx2_aura_allocptr(struct otx2_nic *pfvf, int aura)
 827{
 828	void __iomem *ptr = otx2_get_regaddr(pfvf, NPA_LF_AURA_OP_ALLOCX(0));
 829	u64 incr = (u64)aura | BIT_ULL(63);
 830
 831	return otx2_atomic64_add(incr, ptr);
 832}
 833
 834/* Free pointer to a pool/aura */
 835static inline void otx2_aura_freeptr(void *dev, int aura, u64 buf)
 836{
 837	struct otx2_nic *pfvf = dev;
 838	void __iomem *addr = otx2_get_regaddr(pfvf, NPA_LF_AURA_OP_FREE0);
 839
 840	otx2_write128(buf, (u64)aura | BIT_ULL(63), addr);
 841}
 842
 843static inline int otx2_get_pool_idx(struct otx2_nic *pfvf, int type, int idx)
 844{
 845	if (type == AURA_NIX_SQ)
 846		return pfvf->hw.rqpool_cnt + idx;
 847
 848	 /* AURA_NIX_RQ */
 849	return idx;
 850}
 851
 852/* Mbox APIs */
 853static inline int otx2_sync_mbox_msg(struct mbox *mbox)
 854{
 855	int err;
 856
 857	if (!otx2_mbox_nonempty(&mbox->mbox, 0))
 858		return 0;
 859	otx2_mbox_msg_send(&mbox->mbox, 0);
 860	err = otx2_mbox_wait_for_rsp(&mbox->mbox, 0);
 861	if (err)
 862		return err;
 863
 864	return otx2_mbox_check_rsp_msgs(&mbox->mbox, 0);
 865}
 866
 867static inline int otx2_sync_mbox_up_msg(struct mbox *mbox, int devid)
 868{
 869	int err;
 870
 871	if (!otx2_mbox_nonempty(&mbox->mbox_up, devid))
 872		return 0;
 873	otx2_mbox_msg_send_up(&mbox->mbox_up, devid);
 874	err = otx2_mbox_wait_for_rsp(&mbox->mbox_up, devid);
 875	if (err)
 876		return err;
 877
 878	return otx2_mbox_check_rsp_msgs(&mbox->mbox_up, devid);
 879}
 880
 881/* Use this API to send mbox msgs in atomic context
 882 * where sleeping is not allowed
 883 */
 884static inline int otx2_sync_mbox_msg_busy_poll(struct mbox *mbox)
 885{
 886	int err;
 887
 888	if (!otx2_mbox_nonempty(&mbox->mbox, 0))
 889		return 0;
 890	otx2_mbox_msg_send(&mbox->mbox, 0);
 891	err = otx2_mbox_busy_poll_for_rsp(&mbox->mbox, 0);
 892	if (err)
 893		return err;
 894
 895	return otx2_mbox_check_rsp_msgs(&mbox->mbox, 0);
 896}
 897
 898#define M(_name, _id, _fn_name, _req_type, _rsp_type)                   \
 899static struct _req_type __maybe_unused					\
 900*otx2_mbox_alloc_msg_ ## _fn_name(struct mbox *mbox)                    \
 901{									\
 902	struct _req_type *req;						\
 903	u16 pcifunc = mbox->pfvf->pcifunc;				\
 904									\
 905	req = (struct _req_type *)otx2_mbox_alloc_msg_rsp(		\
 906		&mbox->mbox, 0, sizeof(struct _req_type),		\
 907		sizeof(struct _rsp_type));				\
 908	if (!req)							\
 909		return NULL;						\
 910	req->hdr.sig = OTX2_MBOX_REQ_SIG;				\
 911	req->hdr.id = _id;						\
 912	req->hdr.pcifunc = pcifunc;					\
 913	trace_otx2_msg_alloc(mbox->mbox.pdev, _id, sizeof(*req), pcifunc); \
 914	return req;							\
 915}
 916
 917MBOX_MESSAGES
 918#undef M
 919
 920#define M(_name, _id, _fn_name, _req_type, _rsp_type)			\
 921int									\
 922otx2_mbox_up_handler_ ## _fn_name(struct otx2_nic *pfvf,		\
 923				struct _req_type *req,			\
 924				struct _rsp_type *rsp);			\
 925
 926MBOX_UP_CGX_MESSAGES
 927MBOX_UP_MCS_MESSAGES
 928#undef M
 929
 930/* Time to wait before watchdog kicks off */
 931#define OTX2_TX_TIMEOUT		(100 * HZ)
 932
 933static inline bool is_otx2_vf(u16 pcifunc)
 934{
 935	return !!(pcifunc & RVU_PFVF_FUNC_MASK);
 936}
 937
 938static inline dma_addr_t otx2_dma_map_page(struct otx2_nic *pfvf,
 939					   struct page *page,
 940					   size_t offset, size_t size,
 941					   enum dma_data_direction dir)
 942{
 943	return dma_map_page_attrs(pfvf->dev, page,
 944				  offset, size, dir, DMA_ATTR_SKIP_CPU_SYNC);
 945}
 946
 947static inline void otx2_dma_unmap_page(struct otx2_nic *pfvf,
 948				       dma_addr_t addr, size_t size,
 949				       enum dma_data_direction dir)
 950{
 951	dma_unmap_page_attrs(pfvf->dev, addr, size,
 952			     dir, DMA_ATTR_SKIP_CPU_SYNC);
 953}
 954
 955static inline u16 otx2_get_smq_idx(struct otx2_nic *pfvf, u16 qidx)
 956{
 957	u16 smq;
 958	int idx;
 959
 960#ifdef CONFIG_DCB
 961	if (qidx < NIX_PF_PFC_PRIO_MAX && pfvf->pfc_alloc_status[qidx])
 962		return pfvf->pfc_schq_list[NIX_TXSCH_LVL_SMQ][qidx];
 963#endif
 964	/* check if qidx falls under QOS queues */
 965	if (qidx >= pfvf->hw.non_qos_queues) {
 966		smq = pfvf->qos.qid_to_sqmap[qidx - pfvf->hw.non_qos_queues];
 967	} else {
 968		idx = qidx % pfvf->hw.txschq_cnt[NIX_TXSCH_LVL_SMQ];
 969		smq = pfvf->hw.txschq_list[NIX_TXSCH_LVL_SMQ][idx];
 970	}
 971
 972	return smq;
 973}
 974
 975static inline u16 otx2_get_total_tx_queues(struct otx2_nic *pfvf)
 976{
 977	return pfvf->hw.non_qos_queues + pfvf->hw.tc_tx_queues;
 978}
 979
 980static inline u64 otx2_convert_rate(u64 rate)
 981{
 982	u64 converted_rate;
 983
 984	/* Convert bytes per second to Mbps */
 985	converted_rate = rate * 8;
 986	converted_rate = max_t(u64, converted_rate / 1000000, 1);
 987
 988	return converted_rate;
 989}
 990
 991static inline int otx2_tc_flower_rule_cnt(struct otx2_nic *pfvf)
 992{
 993	/* return here if MCAM entries not allocated */
 994	if (!pfvf->flow_cfg)
 995		return 0;
 996
 997	return pfvf->flow_cfg->nr_flows;
 998}
 999
1000/* MSI-X APIs */
1001void otx2_free_cints(struct otx2_nic *pfvf, int n);
1002void otx2_set_cints_affinity(struct otx2_nic *pfvf);
1003int otx2_set_mac_address(struct net_device *netdev, void *p);
1004int otx2_hw_set_mtu(struct otx2_nic *pfvf, int mtu);
1005void otx2_tx_timeout(struct net_device *netdev, unsigned int txq);
1006void otx2_get_mac_from_af(struct net_device *netdev);
1007void otx2_config_irq_coalescing(struct otx2_nic *pfvf, int qidx);
1008int otx2_config_pause_frm(struct otx2_nic *pfvf);
1009void otx2_setup_segmentation(struct otx2_nic *pfvf);
1010int otx2_reset_mac_stats(struct otx2_nic *pfvf);
1011
1012/* RVU block related APIs */
1013int otx2_attach_npa_nix(struct otx2_nic *pfvf);
1014int otx2_detach_resources(struct mbox *mbox);
1015int otx2_config_npa(struct otx2_nic *pfvf);
1016int otx2_sq_aura_pool_init(struct otx2_nic *pfvf);
1017int otx2_rq_aura_pool_init(struct otx2_nic *pfvf);
1018void otx2_aura_pool_free(struct otx2_nic *pfvf);
1019void otx2_free_aura_ptr(struct otx2_nic *pfvf, int type);
1020void otx2_sq_free_sqbs(struct otx2_nic *pfvf);
1021int otx2_config_nix(struct otx2_nic *pfvf);
1022int otx2_config_nix_queues(struct otx2_nic *pfvf);
1023int otx2_txschq_config(struct otx2_nic *pfvf, int lvl, int prio, bool pfc_en);
1024int otx2_txsch_alloc(struct otx2_nic *pfvf);
1025void otx2_txschq_stop(struct otx2_nic *pfvf);
1026void otx2_txschq_free_one(struct otx2_nic *pfvf, u16 lvl, u16 schq);
1027void otx2_free_pending_sqe(struct otx2_nic *pfvf);
1028void otx2_sqb_flush(struct otx2_nic *pfvf);
1029int otx2_alloc_rbuf(struct otx2_nic *pfvf, struct otx2_pool *pool,
1030		    dma_addr_t *dma, int qidx, int idx);
1031int otx2_rxtx_enable(struct otx2_nic *pfvf, bool enable);
1032void otx2_ctx_disable(struct mbox *mbox, int type, bool npa);
1033int otx2_nix_config_bp(struct otx2_nic *pfvf, bool enable);
1034int otx2_nix_cpt_config_bp(struct otx2_nic *pfvf, bool enable);
1035void otx2_cleanup_rx_cqes(struct otx2_nic *pfvf, struct otx2_cq_queue *cq, int qidx);
1036void otx2_cleanup_tx_cqes(struct otx2_nic *pfvf, struct otx2_cq_queue *cq);
1037int otx2_sq_init(struct otx2_nic *pfvf, u16 qidx, u16 sqb_aura);
1038int otx2_sq_aq_init(void *dev, u16 qidx, u8 chan_offset, u16 sqb_aura);
1039int cn10k_sq_aq_init(void *dev, u16 qidx, u8 chan_offset, u16 sqb_aura);
1040int otx2_alloc_buffer(struct otx2_nic *pfvf, struct otx2_cq_queue *cq,
1041		      dma_addr_t *dma);
1042int otx2_pool_init(struct otx2_nic *pfvf, u16 pool_id,
1043		   int stack_pages, int numptrs, int buf_size, int type);
1044int otx2_aura_init(struct otx2_nic *pfvf, int aura_id,
1045		   int pool_id, int numptrs);
1046int otx2_init_rsrc(struct pci_dev *pdev, struct otx2_nic *pf);
1047void otx2_free_queue_mem(struct otx2_qset *qset);
1048int otx2_alloc_queue_mem(struct otx2_nic *pf);
1049int otx2_init_hw_resources(struct otx2_nic *pfvf);
1050void otx2_free_hw_resources(struct otx2_nic *pf);
1051int otx2_wq_init(struct otx2_nic *pf);
1052int otx2_check_pf_usable(struct otx2_nic *pf);
1053int otx2_pfaf_mbox_init(struct otx2_nic *pf);
1054int otx2_register_mbox_intr(struct otx2_nic *pf, bool probe_af);
1055int otx2_realloc_msix_vectors(struct otx2_nic *pf);
1056void otx2_pfaf_mbox_destroy(struct otx2_nic *pf);
1057void otx2_disable_mbox_intr(struct otx2_nic *pf);
1058void otx2_disable_napi(struct otx2_nic *pf);
1059irqreturn_t otx2_cq_intr_handler(int irq, void *cq_irq);
1060int otx2_rq_init(struct otx2_nic *pfvf, u16 qidx, u16 lpb_aura);
1061int otx2_cq_init(struct otx2_nic *pfvf, u16 qidx);
1062int otx2_set_hw_capabilities(struct otx2_nic *pfvf);
1063int otx2_aura_aq_init(struct otx2_nic *pfvf, int aura_id,
1064		      int pool_id, int numptrs);
1065int otx2_pool_aq_init(struct otx2_nic *pfvf, u16 pool_id,
1066		      int stack_pages, int numptrs, int buf_size, int type);
1067
1068/* RSS configuration APIs*/
1069int otx2_rss_init(struct otx2_nic *pfvf);
1070int otx2_set_flowkey_cfg(struct otx2_nic *pfvf);
1071void otx2_set_rss_key(struct otx2_nic *pfvf);
1072int otx2_set_rss_table(struct otx2_nic *pfvf, int ctx_id, const u32 *ind_tbl);
1073
1074/* Mbox handlers */
1075void mbox_handler_msix_offset(struct otx2_nic *pfvf,
1076			      struct msix_offset_rsp *rsp);
1077void mbox_handler_npa_lf_alloc(struct otx2_nic *pfvf,
1078			       struct npa_lf_alloc_rsp *rsp);
1079void mbox_handler_nix_lf_alloc(struct otx2_nic *pfvf,
1080			       struct nix_lf_alloc_rsp *rsp);
1081void mbox_handler_nix_txsch_alloc(struct otx2_nic *pf,
1082				  struct nix_txsch_alloc_rsp *rsp);
1083void mbox_handler_cgx_stats(struct otx2_nic *pfvf,
1084			    struct cgx_stats_rsp *rsp);
1085void mbox_handler_cgx_fec_stats(struct otx2_nic *pfvf,
1086				struct cgx_fec_stats_rsp *rsp);
1087void otx2_set_fec_stats_count(struct otx2_nic *pfvf);
1088void mbox_handler_nix_bp_enable(struct otx2_nic *pfvf,
1089				struct nix_bp_cfg_rsp *rsp);
1090
1091/* Device stats APIs */
1092void otx2_get_dev_stats(struct otx2_nic *pfvf);
1093void otx2_get_stats64(struct net_device *netdev,
1094		      struct rtnl_link_stats64 *stats);
1095void otx2_update_lmac_stats(struct otx2_nic *pfvf);
1096void otx2_update_lmac_fec_stats(struct otx2_nic *pfvf);
1097int otx2_update_rq_stats(struct otx2_nic *pfvf, int qidx);
1098int otx2_update_sq_stats(struct otx2_nic *pfvf, int qidx);
1099void otx2_set_ethtool_ops(struct net_device *netdev);
1100void otx2vf_set_ethtool_ops(struct net_device *netdev);
1101
1102int otx2_open(struct net_device *netdev);
1103int otx2_stop(struct net_device *netdev);
1104int otx2_set_real_num_queues(struct net_device *netdev,
1105			     int tx_queues, int rx_queues);
1106int otx2_config_hwtstamp_get(struct net_device *netdev,
1107			     struct kernel_hwtstamp_config *config);
1108int otx2_config_hwtstamp_set(struct net_device *netdev,
1109			     struct kernel_hwtstamp_config *config,
1110			     struct netlink_ext_ack *extack);
1111
1112/* MCAM filter related APIs */
1113int otx2_mcam_flow_init(struct otx2_nic *pf);
1114int otx2vf_mcam_flow_init(struct otx2_nic *pfvf);
1115int otx2_alloc_mcam_entries(struct otx2_nic *pfvf, u16 count);
1116void otx2_mcam_flow_del(struct otx2_nic *pf);
1117int otx2_destroy_ntuple_flows(struct otx2_nic *pf);
1118int otx2_destroy_mcam_flows(struct otx2_nic *pfvf);
1119int otx2_get_flow(struct otx2_nic *pfvf,
1120		  struct ethtool_rxnfc *nfc, u32 location);
1121int otx2_get_all_flows(struct otx2_nic *pfvf,
1122		       struct ethtool_rxnfc *nfc, u32 *rule_locs);
1123int otx2_add_flow(struct otx2_nic *pfvf,
1124		  struct ethtool_rxnfc *nfc);
1125int otx2_remove_flow(struct otx2_nic *pfvf, u32 location);
1126int otx2_get_maxflows(struct otx2_flow_config *flow_cfg);
1127void otx2_rss_ctx_flow_del(struct otx2_nic *pfvf, int ctx_id);
1128int otx2_del_macfilter(struct net_device *netdev, const u8 *mac);
1129int otx2_add_macfilter(struct net_device *netdev, const u8 *mac);
1130int otx2_enable_rxvlan(struct otx2_nic *pf, bool enable);
1131int otx2_install_rxvlan_offload_flow(struct otx2_nic *pfvf);
1132bool otx2_xdp_sq_append_pkt(struct otx2_nic *pfvf, struct xdp_frame *xdpf,
1133			    u64 iova, int len, u16 qidx, u16 flags);
1134void otx2_xdp_sqe_add_sg(struct otx2_snd_queue *sq, struct xdp_frame *xdpf,
1135			 u64 dma_addr, int len, int *offset, u16 flags);
1136u16 otx2_get_max_mtu(struct otx2_nic *pfvf);
1137int otx2_handle_ntuple_tc_features(struct net_device *netdev,
1138				   netdev_features_t features);
1139int otx2_smq_flush(struct otx2_nic *pfvf, int smq);
1140void otx2_free_bufs(struct otx2_nic *pfvf, struct otx2_pool *pool,
1141		    u64 iova, int size);
1142int otx2_mcam_entry_init(struct otx2_nic *pfvf);
1143
1144/* tc support */
1145int otx2_init_tc(struct otx2_nic *nic);
1146void otx2_shutdown_tc(struct otx2_nic *nic);
1147int otx2_setup_tc(struct net_device *netdev, enum tc_setup_type type,
1148		  void *type_data);
1149void otx2_tc_apply_ingress_police_rules(struct otx2_nic *nic);
1150
1151/* CGX/RPM DMAC filters support */
1152int otx2_dmacflt_get_max_cnt(struct otx2_nic *pf);
1153int otx2_dmacflt_add(struct otx2_nic *pf, const u8 *mac, u32 bit_pos);
1154int otx2_dmacflt_remove(struct otx2_nic *pf, const u8 *mac, u32 bit_pos);
1155int otx2_dmacflt_update(struct otx2_nic *pf, u8 *mac, u32 bit_pos);
1156void otx2_dmacflt_reinstall_flows(struct otx2_nic *pf);
1157void otx2_dmacflt_update_pfmac_flow(struct otx2_nic *pfvf);
1158
1159#ifdef CONFIG_DCB
1160/* DCB support*/
1161void otx2_update_bpid_in_rqctx(struct otx2_nic *pfvf, int vlan_prio, int qidx, bool pfc_enable);
1162int otx2_config_priority_flow_ctrl(struct otx2_nic *pfvf);
1163int otx2_dcbnl_set_ops(struct net_device *dev);
1164/* PFC support */
1165int otx2_pfc_txschq_config(struct otx2_nic *pfvf);
1166int otx2_pfc_txschq_alloc(struct otx2_nic *pfvf);
1167int otx2_pfc_txschq_update(struct otx2_nic *pfvf);
1168int otx2_pfc_txschq_stop(struct otx2_nic *pfvf);
1169#endif
1170
1171#if IS_ENABLED(CONFIG_MACSEC)
1172/* MACSEC offload support */
1173int cn10k_mcs_init(struct otx2_nic *pfvf);
1174void cn10k_mcs_free(struct otx2_nic *pfvf);
1175void cn10k_handle_mcs_event(struct otx2_nic *pfvf, struct mcs_intr_info *event);
1176#else
1177static inline int cn10k_mcs_init(struct otx2_nic *pfvf) { return 0; }
1178static inline void cn10k_mcs_free(struct otx2_nic *pfvf) {}
1179static inline void cn10k_handle_mcs_event(struct otx2_nic *pfvf,
1180					  struct mcs_intr_info *event)
1181{}
1182#endif /* CONFIG_MACSEC */
1183
1184/* qos support */
1185static inline void otx2_qos_init(struct otx2_nic *pfvf, int qos_txqs)
1186{
1187	struct otx2_hw *hw = &pfvf->hw;
1188
1189	hw->tc_tx_queues = qos_txqs;
1190	INIT_LIST_HEAD(&pfvf->qos.qos_tree);
1191	mutex_init(&pfvf->qos.qos_lock);
1192}
1193
1194static inline void otx2_shutdown_qos(struct otx2_nic *pfvf)
1195{
1196	mutex_destroy(&pfvf->qos.qos_lock);
1197}
1198
1199u16 otx2_select_queue(struct net_device *netdev, struct sk_buff *skb,
1200		      struct net_device *sb_dev);
1201int otx2_get_txq_by_classid(struct otx2_nic *pfvf, u16 classid);
1202void otx2_qos_config_txschq(struct otx2_nic *pfvf);
1203void otx2_clean_qos_queues(struct otx2_nic *pfvf);
1204int rvu_event_up_notify(struct otx2_nic *pf, struct rep_event *info);
1205int otx2_setup_tc_cls_flower(struct otx2_nic *nic,
1206			     struct flow_cls_offload *cls_flower);
1207
1208static inline int mcam_entry_cmp(const void *a, const void *b)
1209{
1210	return *(u16 *)a - *(u16 *)b;
1211}
1212
1213dma_addr_t otx2_dma_map_skb_frag(struct otx2_nic *pfvf,
1214				 struct sk_buff *skb, int seg, int *len);
1215void otx2_dma_unmap_skb_frags(struct otx2_nic *pfvf, struct sg_list *sg);
1216int otx2_read_free_sqe(struct otx2_nic *pfvf, u16 qidx);
1217void otx2_queue_vf_work(struct mbox *mw, struct workqueue_struct *mbox_wq,
1218			int first, int mdevs, u64 intr);
1219#endif /* OTX2_COMMON_H */
~/ Read-only file preview.