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