Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 #ifndef __ASM_S390_PCI_H
0003 #define __ASM_S390_PCI_H
0004 
0005 #include <linux/pci.h>
0006 #include <linux/mutex.h>
0007 #include <linux/iommu.h>
0008 #include <linux/pci_hotplug.h>
0009 #include <asm/pci_clp.h>
0010 #include <asm/pci_debug.h>
0011 #include <asm/pci_insn.h>
0012 #include <asm/sclp.h>
0013 
0014 #define PCIBIOS_MIN_IO      0x1000
0015 #define PCIBIOS_MIN_MEM     0x10000000
0016 
0017 #define pcibios_assign_all_busses() (0)
0018 
0019 void __iomem *pci_iomap(struct pci_dev *, int, unsigned long);
0020 void pci_iounmap(struct pci_dev *, void __iomem *);
0021 int pci_domain_nr(struct pci_bus *);
0022 int pci_proc_domain(struct pci_bus *);
0023 
0024 #define ZPCI_BUS_NR         0   /* default bus number */
0025 
0026 #define ZPCI_NR_DMA_SPACES      1
0027 #define ZPCI_NR_DEVICES         CONFIG_PCI_NR_FUNCTIONS
0028 #define ZPCI_DOMAIN_BITMAP_SIZE     (1 << 16)
0029 
0030 #ifdef PCI
0031 #if (ZPCI_NR_DEVICES > ZPCI_DOMAIN_BITMAP_SIZE)
0032 # error ZPCI_NR_DEVICES can not be bigger than ZPCI_DOMAIN_BITMAP_SIZE
0033 #endif
0034 #endif /* PCI */
0035 
0036 /* PCI Function Controls */
0037 #define ZPCI_FC_FN_ENABLED      0x80
0038 #define ZPCI_FC_ERROR           0x40
0039 #define ZPCI_FC_BLOCKED         0x20
0040 #define ZPCI_FC_DMA_ENABLED     0x10
0041 
0042 #define ZPCI_FMB_DMA_COUNTER_VALID  (1 << 23)
0043 
0044 struct zpci_fmb_fmt0 {
0045     u64 dma_rbytes;
0046     u64 dma_wbytes;
0047 };
0048 
0049 struct zpci_fmb_fmt1 {
0050     u64 rx_bytes;
0051     u64 rx_packets;
0052     u64 tx_bytes;
0053     u64 tx_packets;
0054 };
0055 
0056 struct zpci_fmb_fmt2 {
0057     u64 consumed_work_units;
0058     u64 max_work_units;
0059 };
0060 
0061 struct zpci_fmb_fmt3 {
0062     u64 tx_bytes;
0063 };
0064 
0065 struct zpci_fmb {
0066     u32 format  : 8;
0067     u32 fmt_ind : 24;
0068     u32 samples;
0069     u64 last_update;
0070     /* common counters */
0071     u64 ld_ops;
0072     u64 st_ops;
0073     u64 stb_ops;
0074     u64 rpcit_ops;
0075     /* format specific counters */
0076     union {
0077         struct zpci_fmb_fmt0 fmt0;
0078         struct zpci_fmb_fmt1 fmt1;
0079         struct zpci_fmb_fmt2 fmt2;
0080         struct zpci_fmb_fmt3 fmt3;
0081     };
0082 } __packed __aligned(128);
0083 
0084 enum zpci_state {
0085     ZPCI_FN_STATE_STANDBY = 0,
0086     ZPCI_FN_STATE_CONFIGURED = 1,
0087     ZPCI_FN_STATE_RESERVED = 2,
0088 };
0089 
0090 struct zpci_bar_struct {
0091     struct resource *res;       /* bus resource */
0092     void __iomem    *mio_wb;
0093     void __iomem    *mio_wt;
0094     u32     val;        /* bar start & 3 flag bits */
0095     u16     map_idx;    /* index into bar mapping array */
0096     u8      size;       /* order 2 exponent */
0097 };
0098 
0099 struct s390_domain;
0100 struct kvm_zdev;
0101 
0102 #define ZPCI_FUNCTIONS_PER_BUS 256
0103 struct zpci_bus {
0104     struct kref     kref;
0105     struct pci_bus      *bus;
0106     struct zpci_dev     *function[ZPCI_FUNCTIONS_PER_BUS];
0107     struct list_head    resources;
0108     struct list_head    bus_next;
0109     struct resource     bus_resource;
0110     int         pchid;
0111     int         domain_nr;
0112     bool            multifunction;
0113     enum pci_bus_speed  max_bus_speed;
0114 };
0115 
0116 /* Private data per function */
0117 struct zpci_dev {
0118     struct zpci_bus *zbus;
0119     struct list_head entry;     /* list of all zpci_devices, needed for hotplug, etc. */
0120     struct list_head bus_next;
0121     struct kref kref;
0122     struct hotplug_slot hotplug_slot;
0123 
0124     enum zpci_state state;
0125     u32     fid;        /* function ID, used by sclp */
0126     u32     fh;     /* function handle, used by insn's */
0127     u32     gisa;       /* GISA designation for passthrough */
0128     u16     vfn;        /* virtual function number */
0129     u16     pchid;      /* physical channel ID */
0130     u16     maxstbl;    /* Maximum store block size */
0131     u8      pfgid;      /* function group ID */
0132     u8      pft;        /* pci function type */
0133     u8      port;
0134     u8      dtsm;       /* Supported DT mask */
0135     u8      rid_available   : 1;
0136     u8      has_hp_slot : 1;
0137     u8      has_resources   : 1;
0138     u8      is_physfn   : 1;
0139     u8      util_str_avail  : 1;
0140     u8      irqs_registered : 1;
0141     u8      reserved    : 2;
0142     unsigned int    devfn;      /* DEVFN part of the RID*/
0143 
0144     struct mutex lock;
0145     u8 pfip[CLP_PFIP_NR_SEGMENTS];  /* pci function internal path */
0146     u32 uid;            /* user defined id */
0147     u8 util_str[CLP_UTIL_STR_LEN];  /* utility string */
0148 
0149     /* IRQ stuff */
0150     u64     msi_addr;   /* MSI address */
0151     unsigned int    max_msi;    /* maximum number of MSI's */
0152     unsigned int    msi_first_bit;
0153     unsigned int    msi_nr_irqs;
0154     struct airq_iv *aibv;       /* adapter interrupt bit vector */
0155     unsigned long   aisb;       /* number of the summary bit */
0156 
0157     /* DMA stuff */
0158     unsigned long   *dma_table;
0159     spinlock_t  dma_table_lock;
0160     int     tlb_refresh;
0161 
0162     spinlock_t  iommu_bitmap_lock;
0163     unsigned long   *iommu_bitmap;
0164     unsigned long   *lazy_bitmap;
0165     unsigned long   iommu_size;
0166     unsigned long   iommu_pages;
0167     unsigned int    next_bit;
0168 
0169     struct iommu_device iommu_dev;  /* IOMMU core handle */
0170 
0171     char res_name[16];
0172     bool mio_capable;
0173     struct zpci_bar_struct bars[PCI_STD_NUM_BARS];
0174 
0175     u64     start_dma;  /* Start of available DMA addresses */
0176     u64     end_dma;    /* End of available DMA addresses */
0177     u64     dma_mask;   /* DMA address space mask */
0178 
0179     /* Function measurement block */
0180     struct zpci_fmb *fmb;
0181     u16     fmb_update; /* update interval */
0182     u16     fmb_length;
0183     /* software counters */
0184     atomic64_t allocated_pages;
0185     atomic64_t mapped_pages;
0186     atomic64_t unmapped_pages;
0187 
0188     u8      version;
0189     enum pci_bus_speed max_bus_speed;
0190 
0191     struct dentry   *debugfs_dev;
0192 
0193     /* IOMMU and passthrough */
0194     struct s390_domain *s390_domain; /* s390 IOMMU domain data */
0195     struct kvm_zdev *kzdev;
0196     struct mutex kzdev_lock;
0197 };
0198 
0199 static inline bool zdev_enabled(struct zpci_dev *zdev)
0200 {
0201     return (zdev->fh & (1UL << 31)) ? true : false;
0202 }
0203 
0204 extern const struct attribute_group *zpci_attr_groups[];
0205 extern unsigned int s390_pci_force_floating __initdata;
0206 extern unsigned int s390_pci_no_rid;
0207 
0208 extern union zpci_sic_iib *zpci_aipb;
0209 extern struct airq_iv *zpci_aif_sbv;
0210 
0211 /* -----------------------------------------------------------------------------
0212   Prototypes
0213 ----------------------------------------------------------------------------- */
0214 /* Base stuff */
0215 struct zpci_dev *zpci_create_device(u32 fid, u32 fh, enum zpci_state state);
0216 int zpci_enable_device(struct zpci_dev *);
0217 int zpci_disable_device(struct zpci_dev *);
0218 int zpci_scan_configured_device(struct zpci_dev *zdev, u32 fh);
0219 int zpci_deconfigure_device(struct zpci_dev *zdev);
0220 void zpci_device_reserved(struct zpci_dev *zdev);
0221 bool zpci_is_device_configured(struct zpci_dev *zdev);
0222 
0223 int zpci_hot_reset_device(struct zpci_dev *zdev);
0224 int zpci_register_ioat(struct zpci_dev *, u8, u64, u64, u64);
0225 int zpci_unregister_ioat(struct zpci_dev *, u8);
0226 void zpci_remove_reserved_devices(void);
0227 void zpci_update_fh(struct zpci_dev *zdev, u32 fh);
0228 
0229 /* CLP */
0230 int clp_setup_writeback_mio(void);
0231 int clp_scan_pci_devices(void);
0232 int clp_query_pci_fn(struct zpci_dev *zdev);
0233 int clp_enable_fh(struct zpci_dev *zdev, u32 *fh, u8 nr_dma_as);
0234 int clp_disable_fh(struct zpci_dev *zdev, u32 *fh);
0235 int clp_get_state(u32 fid, enum zpci_state *state);
0236 int clp_refresh_fh(u32 fid, u32 *fh);
0237 
0238 /* UID */
0239 void update_uid_checking(bool new);
0240 
0241 /* IOMMU Interface */
0242 int zpci_init_iommu(struct zpci_dev *zdev);
0243 void zpci_destroy_iommu(struct zpci_dev *zdev);
0244 
0245 #ifdef CONFIG_PCI
0246 static inline bool zpci_use_mio(struct zpci_dev *zdev)
0247 {
0248     return static_branch_likely(&have_mio) && zdev->mio_capable;
0249 }
0250 
0251 /* Error handling and recovery */
0252 void zpci_event_error(void *);
0253 void zpci_event_availability(void *);
0254 bool zpci_is_enabled(void);
0255 #else /* CONFIG_PCI */
0256 static inline void zpci_event_error(void *e) {}
0257 static inline void zpci_event_availability(void *e) {}
0258 #endif /* CONFIG_PCI */
0259 
0260 #ifdef CONFIG_HOTPLUG_PCI_S390
0261 int zpci_init_slot(struct zpci_dev *);
0262 void zpci_exit_slot(struct zpci_dev *);
0263 #else /* CONFIG_HOTPLUG_PCI_S390 */
0264 static inline int zpci_init_slot(struct zpci_dev *zdev)
0265 {
0266     return 0;
0267 }
0268 static inline void zpci_exit_slot(struct zpci_dev *zdev) {}
0269 #endif /* CONFIG_HOTPLUG_PCI_S390 */
0270 
0271 /* Helpers */
0272 static inline struct zpci_dev *to_zpci(struct pci_dev *pdev)
0273 {
0274     struct zpci_bus *zbus = pdev->sysdata;
0275 
0276     return zbus->function[pdev->devfn];
0277 }
0278 
0279 static inline struct zpci_dev *to_zpci_dev(struct device *dev)
0280 {
0281     return to_zpci(to_pci_dev(dev));
0282 }
0283 
0284 struct zpci_dev *get_zdev_by_fid(u32);
0285 
0286 /* DMA */
0287 int zpci_dma_init(void);
0288 void zpci_dma_exit(void);
0289 int zpci_dma_init_device(struct zpci_dev *zdev);
0290 int zpci_dma_exit_device(struct zpci_dev *zdev);
0291 
0292 /* IRQ */
0293 int __init zpci_irq_init(void);
0294 void __init zpci_irq_exit(void);
0295 
0296 /* FMB */
0297 int zpci_fmb_enable_device(struct zpci_dev *);
0298 int zpci_fmb_disable_device(struct zpci_dev *);
0299 
0300 /* Debug */
0301 int zpci_debug_init(void);
0302 void zpci_debug_exit(void);
0303 void zpci_debug_init_device(struct zpci_dev *, const char *);
0304 void zpci_debug_exit_device(struct zpci_dev *);
0305 
0306 /* Error handling */
0307 int zpci_report_error(struct pci_dev *, struct zpci_report_error_header *);
0308 int zpci_clear_error_state(struct zpci_dev *zdev);
0309 int zpci_reset_load_store_blocked(struct zpci_dev *zdev);
0310 
0311 #ifdef CONFIG_NUMA
0312 
0313 /* Returns the node based on PCI bus */
0314 static inline int __pcibus_to_node(const struct pci_bus *bus)
0315 {
0316     return NUMA_NO_NODE;
0317 }
0318 
0319 static inline const struct cpumask *
0320 cpumask_of_pcibus(const struct pci_bus *bus)
0321 {
0322     return cpu_online_mask;
0323 }
0324 
0325 #endif /* CONFIG_NUMA */
0326 
0327 #endif