xref: /linux/drivers/net/ethernet/zte/dinghai/en_pf.h (revision 91ec2035134982b98fab0609a9fd8480e8217dc1)
1b8180f79SJunyang Han /* SPDX-License-Identifier: GPL-2.0-only */
2b8180f79SJunyang Han /*
3b8180f79SJunyang Han  * ZTE DingHai Ethernet driver - PF header
4b8180f79SJunyang Han  * Copyright (c) 2022-2026, ZTE Corporation.
5b8180f79SJunyang Han  */
6b8180f79SJunyang Han 
7b8180f79SJunyang Han #ifndef __ZXDH_EN_PF_H__
8b8180f79SJunyang Han #define __ZXDH_EN_PF_H__
9b8180f79SJunyang Han 
10*19df707eSJunyang Han #include <linux/types.h>
11*19df707eSJunyang Han 
12b8180f79SJunyang Han #define ZXDH_PF_VENDOR_ID	0x1cf2
13b8180f79SJunyang Han #define ZXDH_PF_DEVICE_ID	0x8040
14b8180f79SJunyang Han #define ZXDH_VF_DEVICE_ID	0x8041
15b8180f79SJunyang Han 
16*19df707eSJunyang Han /* Common configuration */
17*19df707eSJunyang Han #define ZXDH_PCI_CAP_COMMON_CFG	1
18*19df707eSJunyang Han /* Notifications */
19*19df707eSJunyang Han #define ZXDH_PCI_CAP_NOTIFY_CFG	2
20*19df707eSJunyang Han /* ISR access */
21*19df707eSJunyang Han #define ZXDH_PCI_CAP_ISR_CFG		3
22*19df707eSJunyang Han /* Device specific configuration */
23*19df707eSJunyang Han #define ZXDH_PCI_CAP_DEVICE_CFG	4
24*19df707eSJunyang Han /* PCI configuration access */
25*19df707eSJunyang Han #define ZXDH_PCI_CAP_PCI_CFG		5
26*19df707eSJunyang Han 
27*19df707eSJunyang Han #define ZXDH_PF_MAX_BAR_VAL		0x5
28*19df707eSJunyang Han #define ZXDH_PF_ALIGN4			4
29*19df707eSJunyang Han #define ZXDH_PF_ALIGN2			2
30*19df707eSJunyang Han #define ZXDH_PF_MAP_MINLEN2		2
31*19df707eSJunyang Han 
32b8180f79SJunyang Han struct zxdh_core_dev {
33b8180f79SJunyang Han 	struct device *device;
34b8180f79SJunyang Han 	struct pci_dev *pdev;
35b8180f79SJunyang Han 	struct devlink *devlink;
36b8180f79SJunyang Han 	void *priv;
37b8180f79SJunyang Han };
38b8180f79SJunyang Han 
39b8180f79SJunyang Han struct zxdh_pf_dev {
40*19df707eSJunyang Han 	struct zxdh_pf_pci_common_cfg __iomem *common;
41*19df707eSJunyang Han 	/* Device-specific data (non-legacy mode)  */
42*19df707eSJunyang Han 	/* Base of vq notifications (non-legacy mode). */
43*19df707eSJunyang Han 	void __iomem *device;
44*19df707eSJunyang Han 	void __iomem *notify_base;
45*19df707eSJunyang Han 	/* Physical base of vq notifications */
46*19df707eSJunyang Han 	resource_size_t notify_pa;
47*19df707eSJunyang Han 	/* So we can sanity-check accesses. */
48*19df707eSJunyang Han 	size_t notify_len;
49*19df707eSJunyang Han 	size_t device_len;
50*19df707eSJunyang Han 	/* Capability for when we need to map notifications per-vq. */
51*19df707eSJunyang Han 	s32 notify_map_cap;
52*19df707eSJunyang Han 	u32 notify_offset_multiplier;
53*19df707eSJunyang Han 	/* Multiply queue_notify_off by this value. (non-legacy mode). */
54*19df707eSJunyang Han 	s32 modern_bars;
55b8180f79SJunyang Han 	void __iomem *pci_ioremap_addr[6];
56*19df707eSJunyang Han 	u32 dev_cfg_bar_off;
57b8180f79SJunyang Han };
58b8180f79SJunyang Han 
59b8180f79SJunyang Han void *zxdh_core_alloc_priv(struct zxdh_core_dev *zxdh_dev, size_t size);
60b8180f79SJunyang Han void zxdh_core_free_priv(struct zxdh_core_dev *zxdh_dev);
61b8180f79SJunyang Han void zxdh_pf_pci_close(struct zxdh_core_dev *zxdh_dev);
62*19df707eSJunyang Han int zxdh_pf_pci_find_capability(struct pci_dev *pdev, u8 cfg_type,
63*19df707eSJunyang Han 				u32 ioresource_types, int *bars);
64*19df707eSJunyang Han void __iomem *zxdh_pf_map_capability(struct zxdh_core_dev *zxdh_dev, int off,
65*19df707eSJunyang Han 				     size_t minlen, u32 align,
66*19df707eSJunyang Han 				     u32 start, u32 size,
67*19df707eSJunyang Han 				     size_t *len, resource_size_t *pa,
68*19df707eSJunyang Han 				     u32 *bar_off);
69*19df707eSJunyang Han int zxdh_pf_common_cfg_init(struct zxdh_core_dev *zxdh_dev);
70*19df707eSJunyang Han int zxdh_pf_notify_cfg_init(struct zxdh_core_dev *zxdh_dev);
71*19df707eSJunyang Han int zxdh_pf_device_cfg_init(struct zxdh_core_dev *zxdh_dev);
72*19df707eSJunyang Han void zxdh_pf_modern_cfg_uninit(struct zxdh_core_dev *zxdh_dev);
73*19df707eSJunyang Han int zxdh_pf_modern_cfg_init(struct zxdh_core_dev *zxdh_dev);
74b8180f79SJunyang Han 
75b8180f79SJunyang Han #endif /* __ZXDH_EN_PF_H__ */
76