brintos

brintos / linux-shallow public Read only

0
0
Text · 3.5 KiB · 4f4914f Raw
129 lines · c
1/* Broadcom NetXtreme-C/E network driver.2 *3 * Copyright (c) 2016-2018 Broadcom Limited4 *5 * This program is free software; you can redistribute it and/or modify6 * it under the terms of the GNU General Public License as published by7 * the Free Software Foundation.8 */9 10#ifndef BNXT_ULP_H11#define BNXT_ULP_H12 13#define BNXT_ROCE_ULP	014#define BNXT_MAX_ULP	115 16#define BNXT_MIN_ROCE_CP_RINGS	217#define BNXT_MIN_ROCE_STAT_CTXS	118 19#define BNXT_MAX_ROCE_MSIX_VF		220#define BNXT_MAX_ROCE_MSIX_NPAR_PF	521#define BNXT_MAX_ROCE_MSIX		6422 23struct hwrm_async_event_cmpl;24struct bnxt;25 26struct bnxt_msix_entry {27	u32	vector;28	u32	ring_idx;29	u32	db_offset;30};31 32struct bnxt_ulp_ops {33	void (*ulp_irq_stop)(void *);34	void (*ulp_irq_restart)(void *, struct bnxt_msix_entry *);35};36 37struct bnxt_fw_msg {38	void	*msg;39	int	msg_len;40	void	*resp;41	int	resp_max_len;42	int	timeout;43};44 45struct bnxt_ulp {46	void		*handle;47	struct bnxt_ulp_ops __rcu *ulp_ops;48	unsigned long	*async_events_bmap;49	u16		max_async_event_id;50	u16		msix_requested;51	atomic_t	ref_count;52};53 54struct bnxt_en_dev {55	struct net_device *net;56	struct pci_dev *pdev;57	struct bnxt_msix_entry			msix_entries[BNXT_MAX_ROCE_MSIX];58	u32 flags;59	#define BNXT_EN_FLAG_ROCEV1_CAP		0x160	#define BNXT_EN_FLAG_ROCEV2_CAP		0x261	#define BNXT_EN_FLAG_ROCE_CAP		(BNXT_EN_FLAG_ROCEV1_CAP | \62						 BNXT_EN_FLAG_ROCEV2_CAP)63	#define BNXT_EN_FLAG_MSIX_REQUESTED	0x464	#define BNXT_EN_FLAG_ULP_STOPPED	0x865	#define BNXT_EN_FLAG_VF			0x1066#define BNXT_EN_VF(edev)	((edev)->flags & BNXT_EN_FLAG_VF)67 68	struct bnxt_ulp			*ulp_tbl;69	int				l2_db_size;	/* Doorbell BAR size in70							 * bytes mapped by L271							 * driver.72							 */73	int				l2_db_size_nc;	/* Doorbell BAR size in74							 * bytes mapped as non-75							 * cacheable.76							 */77	int				l2_db_offset;	/* Doorbell offset in78							 * bytes within79							 * l2_db_size_nc.80							 */81	u16				chip_num;82	u16				hw_ring_stats_size;83	u16				pf_port_id;84	unsigned long			en_state;	/* Could be checked in85							 * RoCE driver suspend86							 * mode only. Will be87							 * updated in resume.88							 */89	void __iomem                    *bar0;90 91	u16				ulp_num_msix_vec;92	u16				ulp_num_ctxs;93 94					/* serialize ulp operations */95	struct mutex			en_dev_lock;96};97 98static inline bool bnxt_ulp_registered(struct bnxt_en_dev *edev)99{100	if (edev && rcu_access_pointer(edev->ulp_tbl->ulp_ops))101		return true;102	return false;103}104 105int bnxt_get_ulp_msix_num(struct bnxt *bp);106int bnxt_get_ulp_msix_num_in_use(struct bnxt *bp);107void bnxt_set_ulp_msix_num(struct bnxt *bp, int num);108int bnxt_get_ulp_stat_ctxs(struct bnxt *bp);109void bnxt_set_ulp_stat_ctxs(struct bnxt *bp, int num_ctxs);110int bnxt_get_ulp_stat_ctxs_in_use(struct bnxt *bp);111void bnxt_set_dflt_ulp_stat_ctxs(struct bnxt *bp);112void bnxt_ulp_stop(struct bnxt *bp);113void bnxt_ulp_start(struct bnxt *bp, int err);114void bnxt_ulp_sriov_cfg(struct bnxt *bp, int num_vfs);115void bnxt_ulp_irq_stop(struct bnxt *bp);116void bnxt_ulp_irq_restart(struct bnxt *bp, int err);117void bnxt_ulp_async_events(struct bnxt *bp, struct hwrm_async_event_cmpl *cmpl);118void bnxt_rdma_aux_device_uninit(struct bnxt *bp);119void bnxt_rdma_aux_device_del(struct bnxt *bp);120void bnxt_rdma_aux_device_add(struct bnxt *bp);121void bnxt_rdma_aux_device_init(struct bnxt *bp);122int bnxt_register_dev(struct bnxt_en_dev *edev, struct bnxt_ulp_ops *ulp_ops,123		      void *handle);124void bnxt_unregister_dev(struct bnxt_en_dev *edev);125int bnxt_send_msg(struct bnxt_en_dev *edev, struct bnxt_fw_msg *fw_msg);126int bnxt_register_async_events(struct bnxt_en_dev *edev,127			       unsigned long *events_bmap, u16 max_id);128#endif129