Linux Audio

Check our new training course

Loading...
v6.2
  1/* SPDX-License-Identifier: GPL-2.0 */
  2#ifndef __ASM_S390_PCI_H
  3#define __ASM_S390_PCI_H
  4
 
 
 
 
 
  5#include <linux/pci.h>
  6#include <linux/mutex.h>
  7#include <linux/iommu.h>
  8#include <linux/pci_hotplug.h>
  9#include <asm/pci_clp.h>
 10#include <asm/pci_debug.h>
 11#include <asm/pci_insn.h>
 12#include <asm/sclp.h>
 13
 14#define PCIBIOS_MIN_IO		0x1000
 15#define PCIBIOS_MIN_MEM		0x10000000
 16
 17#define pcibios_assign_all_busses()	(0)
 18
 19void __iomem *pci_iomap(struct pci_dev *, int, unsigned long);
 20void pci_iounmap(struct pci_dev *, void __iomem *);
 21int pci_domain_nr(struct pci_bus *);
 22int pci_proc_domain(struct pci_bus *);
 23
 24#define ZPCI_BUS_NR			0	/* default bus number */
 25
 26#define ZPCI_NR_DMA_SPACES		1
 27#define ZPCI_NR_DEVICES			CONFIG_PCI_NR_FUNCTIONS
 28#define ZPCI_DOMAIN_BITMAP_SIZE		(1 << 16)
 29
 30#ifdef PCI
 31#if (ZPCI_NR_DEVICES > ZPCI_DOMAIN_BITMAP_SIZE)
 32# error ZPCI_NR_DEVICES can not be bigger than ZPCI_DOMAIN_BITMAP_SIZE
 33#endif
 34#endif /* PCI */
 35
 36/* PCI Function Controls */
 37#define ZPCI_FC_FN_ENABLED		0x80
 38#define ZPCI_FC_ERROR			0x40
 39#define ZPCI_FC_BLOCKED			0x20
 40#define ZPCI_FC_DMA_ENABLED		0x10
 41
 42#define ZPCI_FMB_DMA_COUNTER_VALID	(1 << 23)
 43
 44struct zpci_fmb_fmt0 {
 45	u64 dma_rbytes;
 46	u64 dma_wbytes;
 47};
 48
 49struct zpci_fmb_fmt1 {
 50	u64 rx_bytes;
 51	u64 rx_packets;
 52	u64 tx_bytes;
 53	u64 tx_packets;
 54};
 55
 56struct zpci_fmb_fmt2 {
 57	u64 consumed_work_units;
 58	u64 max_work_units;
 59};
 60
 61struct zpci_fmb_fmt3 {
 62	u64 tx_bytes;
 63};
 64
 65struct zpci_fmb {
 66	u32 format	: 8;
 67	u32 fmt_ind	: 24;
 68	u32 samples;
 69	u64 last_update;
 70	/* common counters */
 71	u64 ld_ops;
 72	u64 st_ops;
 73	u64 stb_ops;
 74	u64 rpcit_ops;
 75	/* format specific counters */
 76	union {
 77		struct zpci_fmb_fmt0 fmt0;
 78		struct zpci_fmb_fmt1 fmt1;
 79		struct zpci_fmb_fmt2 fmt2;
 80		struct zpci_fmb_fmt3 fmt3;
 81	};
 82} __packed __aligned(128);
 83
 84enum zpci_state {
 85	ZPCI_FN_STATE_STANDBY = 0,
 86	ZPCI_FN_STATE_CONFIGURED = 1,
 87	ZPCI_FN_STATE_RESERVED = 2,
 
 88};
 89
 90struct zpci_bar_struct {
 91	struct resource *res;		/* bus resource */
 92	void __iomem	*mio_wb;
 93	void __iomem	*mio_wt;
 94	u32		val;		/* bar start & 3 flag bits */
 95	u16		map_idx;	/* index into bar mapping array */
 96	u8		size;		/* order 2 exponent */
 97};
 98
 99struct s390_domain;
100struct kvm_zdev;
101
102#define ZPCI_FUNCTIONS_PER_BUS 256
103struct zpci_bus {
104	struct kref		kref;
105	struct pci_bus		*bus;
106	struct zpci_dev		*function[ZPCI_FUNCTIONS_PER_BUS];
107	struct list_head	resources;
108	struct list_head	bus_next;
109	struct resource		bus_resource;
110	int			pchid;
111	int			domain_nr;
112	bool			multifunction;
113	enum pci_bus_speed	max_bus_speed;
114};
115
116/* Private data per function */
117struct zpci_dev {
118	struct zpci_bus *zbus;
119	struct list_head entry;		/* list of all zpci_devices, needed for hotplug, etc. */
120	struct list_head iommu_list;
121	struct kref kref;
122	struct rcu_head rcu;
123	struct hotplug_slot hotplug_slot;
124
125	enum zpci_state state;
126	u32		fid;		/* function ID, used by sclp */
127	u32		fh;		/* function handle, used by insn's */
128	u32		gisa;		/* GISA designation for passthrough */
129	u16		vfn;		/* virtual function number */
130	u16		pchid;		/* physical channel ID */
131	u16		maxstbl;	/* Maximum store block size */
132	u8		pfgid;		/* function group ID */
133	u8		pft;		/* pci function type */
134	u8		port;
135	u8		dtsm;		/* Supported DT mask */
136	u8		rid_available	: 1;
137	u8		has_hp_slot	: 1;
138	u8		has_resources	: 1;
139	u8		is_physfn	: 1;
140	u8		util_str_avail	: 1;
141	u8		irqs_registered	: 1;
142	u8		reserved	: 2;
143	unsigned int	devfn;		/* DEVFN part of the RID*/
144
145	struct mutex lock;
146	u8 pfip[CLP_PFIP_NR_SEGMENTS];	/* pci function internal path */
147	u32 uid;			/* user defined id */
148	u8 util_str[CLP_UTIL_STR_LEN];	/* utility string */
149
150	/* IRQ stuff */
151	u64		msi_addr;	/* MSI address */
152	unsigned int	max_msi;	/* maximum number of MSI's */
153	unsigned int	msi_first_bit;
154	unsigned int	msi_nr_irqs;
155	struct airq_iv *aibv;		/* adapter interrupt bit vector */
156	unsigned long	aisb;		/* number of the summary bit */
157
158	/* DMA stuff */
159	unsigned long	*dma_table;
 
160	int		tlb_refresh;
161
162	spinlock_t	iommu_bitmap_lock;
163	unsigned long	*iommu_bitmap;
164	unsigned long	*lazy_bitmap;
165	unsigned long	iommu_size;
166	unsigned long	iommu_pages;
167	unsigned int	next_bit;
168
169	struct iommu_device iommu_dev;  /* IOMMU core handle */
170
171	char res_name[16];
172	bool mio_capable;
173	struct zpci_bar_struct bars[PCI_STD_NUM_BARS];
174
175	u64		start_dma;	/* Start of available DMA addresses */
176	u64		end_dma;	/* End of available DMA addresses */
177	u64		dma_mask;	/* DMA address space mask */
178
179	/* Function measurement block */
180	struct zpci_fmb *fmb;
181	u16		fmb_update;	/* update interval */
182	u16		fmb_length;
183	/* software counters */
184	atomic64_t allocated_pages;
185	atomic64_t mapped_pages;
186	atomic64_t unmapped_pages;
187
188	u8		version;
189	enum pci_bus_speed max_bus_speed;
190
191	struct dentry	*debugfs_dev;
 
192
193	/* IOMMU and passthrough */
194	struct s390_domain *s390_domain; /* s390 IOMMU domain data */
195	struct kvm_zdev *kzdev;
196	struct mutex kzdev_lock;
197};
198
199static inline bool zdev_enabled(struct zpci_dev *zdev)
200{
201	return (zdev->fh & (1UL << 31)) ? true : false;
202}
203
204extern const struct attribute_group *zpci_attr_groups[];
205extern unsigned int s390_pci_force_floating __initdata;
206extern unsigned int s390_pci_no_rid;
207
208extern union zpci_sic_iib *zpci_aipb;
209extern struct airq_iv *zpci_aif_sbv;
210
211/* -----------------------------------------------------------------------------
212  Prototypes
213----------------------------------------------------------------------------- */
214/* Base stuff */
215struct zpci_dev *zpci_create_device(u32 fid, u32 fh, enum zpci_state state);
 
216int zpci_enable_device(struct zpci_dev *);
217int zpci_disable_device(struct zpci_dev *);
218int zpci_scan_configured_device(struct zpci_dev *zdev, u32 fh);
219int zpci_deconfigure_device(struct zpci_dev *zdev);
220void zpci_device_reserved(struct zpci_dev *zdev);
221bool zpci_is_device_configured(struct zpci_dev *zdev);
222
223int zpci_hot_reset_device(struct zpci_dev *zdev);
224int zpci_register_ioat(struct zpci_dev *, u8, u64, u64, u64, u8 *);
225int zpci_unregister_ioat(struct zpci_dev *, u8);
226void zpci_remove_reserved_devices(void);
227void zpci_update_fh(struct zpci_dev *zdev, u32 fh);
228
229/* CLP */
230int clp_setup_writeback_mio(void);
231int clp_scan_pci_devices(void);
232int clp_query_pci_fn(struct zpci_dev *zdev);
233int clp_enable_fh(struct zpci_dev *zdev, u32 *fh, u8 nr_dma_as);
234int clp_disable_fh(struct zpci_dev *zdev, u32 *fh);
 
 
235int clp_get_state(u32 fid, enum zpci_state *state);
236int clp_refresh_fh(u32 fid, u32 *fh);
237
238/* UID */
239void update_uid_checking(bool new);
240
241/* IOMMU Interface */
242int zpci_init_iommu(struct zpci_dev *zdev);
243void zpci_destroy_iommu(struct zpci_dev *zdev);
244
245#ifdef CONFIG_PCI
246static inline bool zpci_use_mio(struct zpci_dev *zdev)
247{
248	return static_branch_likely(&have_mio) && zdev->mio_capable;
249}
250
251/* Error handling and recovery */
252void zpci_event_error(void *);
253void zpci_event_availability(void *);
 
254bool zpci_is_enabled(void);
255#else /* CONFIG_PCI */
256static inline void zpci_event_error(void *e) {}
257static inline void zpci_event_availability(void *e) {}
 
258#endif /* CONFIG_PCI */
259
260#ifdef CONFIG_HOTPLUG_PCI_S390
261int zpci_init_slot(struct zpci_dev *);
262void zpci_exit_slot(struct zpci_dev *);
263#else /* CONFIG_HOTPLUG_PCI_S390 */
264static inline int zpci_init_slot(struct zpci_dev *zdev)
265{
266	return 0;
267}
268static inline void zpci_exit_slot(struct zpci_dev *zdev) {}
269#endif /* CONFIG_HOTPLUG_PCI_S390 */
270
271/* Helpers */
272static inline struct zpci_dev *to_zpci(struct pci_dev *pdev)
273{
274	struct zpci_bus *zbus = pdev->sysdata;
275
276	return zbus->function[pdev->devfn];
277}
278
279static inline struct zpci_dev *to_zpci_dev(struct device *dev)
280{
281	return to_zpci(to_pci_dev(dev));
282}
283
284struct zpci_dev *get_zdev_by_fid(u32);
285
286/* DMA */
287int zpci_dma_init(void);
288void zpci_dma_exit(void);
289int zpci_dma_init_device(struct zpci_dev *zdev);
290int zpci_dma_exit_device(struct zpci_dev *zdev);
291
292/* IRQ */
293int __init zpci_irq_init(void);
294void __init zpci_irq_exit(void);
295
296/* FMB */
297int zpci_fmb_enable_device(struct zpci_dev *);
298int zpci_fmb_disable_device(struct zpci_dev *);
299
300/* Debug */
301int zpci_debug_init(void);
302void zpci_debug_exit(void);
303void zpci_debug_init_device(struct zpci_dev *, const char *);
304void zpci_debug_exit_device(struct zpci_dev *);
 
305
306/* Error handling */
307int zpci_report_error(struct pci_dev *, struct zpci_report_error_header *);
308int zpci_clear_error_state(struct zpci_dev *zdev);
309int zpci_reset_load_store_blocked(struct zpci_dev *zdev);
310
311#ifdef CONFIG_NUMA
312
313/* Returns the node based on PCI bus */
314static inline int __pcibus_to_node(const struct pci_bus *bus)
315{
316	return NUMA_NO_NODE;
317}
318
319static inline const struct cpumask *
320cpumask_of_pcibus(const struct pci_bus *bus)
321{
322	return cpu_online_mask;
323}
324
325#endif /* CONFIG_NUMA */
326
327#endif
v4.17
  1/* SPDX-License-Identifier: GPL-2.0 */
  2#ifndef __ASM_S390_PCI_H
  3#define __ASM_S390_PCI_H
  4
  5/* must be set before including asm-generic/pci.h */
  6#define PCI_DMA_BUS_IS_PHYS (0)
  7/* must be set before including pci_clp.h */
  8#define PCI_BAR_COUNT	6
  9
 10#include <linux/pci.h>
 11#include <linux/mutex.h>
 12#include <linux/iommu.h>
 13#include <asm-generic/pci.h>
 14#include <asm/pci_clp.h>
 15#include <asm/pci_debug.h>
 
 16#include <asm/sclp.h>
 17
 18#define PCIBIOS_MIN_IO		0x1000
 19#define PCIBIOS_MIN_MEM		0x10000000
 20
 21#define pcibios_assign_all_busses()	(0)
 22
 23void __iomem *pci_iomap(struct pci_dev *, int, unsigned long);
 24void pci_iounmap(struct pci_dev *, void __iomem *);
 25int pci_domain_nr(struct pci_bus *);
 26int pci_proc_domain(struct pci_bus *);
 27
 28#define ZPCI_BUS_NR			0	/* default bus number */
 29#define ZPCI_DEVFN			0	/* default device number */
 
 
 
 
 
 
 
 
 
 30
 31/* PCI Function Controls */
 32#define ZPCI_FC_FN_ENABLED		0x80
 33#define ZPCI_FC_ERROR			0x40
 34#define ZPCI_FC_BLOCKED			0x20
 35#define ZPCI_FC_DMA_ENABLED		0x10
 36
 37#define ZPCI_FMB_DMA_COUNTER_VALID	(1 << 23)
 38
 39struct zpci_fmb_fmt0 {
 40	u64 dma_rbytes;
 41	u64 dma_wbytes;
 42};
 43
 44struct zpci_fmb_fmt1 {
 45	u64 rx_bytes;
 46	u64 rx_packets;
 47	u64 tx_bytes;
 48	u64 tx_packets;
 49};
 50
 51struct zpci_fmb_fmt2 {
 52	u64 consumed_work_units;
 53	u64 max_work_units;
 54};
 55
 
 
 
 
 56struct zpci_fmb {
 57	u32 format	: 8;
 58	u32 fmt_ind	: 24;
 59	u32 samples;
 60	u64 last_update;
 61	/* common counters */
 62	u64 ld_ops;
 63	u64 st_ops;
 64	u64 stb_ops;
 65	u64 rpcit_ops;
 66	/* format specific counters */
 67	union {
 68		struct zpci_fmb_fmt0 fmt0;
 69		struct zpci_fmb_fmt1 fmt1;
 70		struct zpci_fmb_fmt2 fmt2;
 
 71	};
 72} __packed __aligned(128);
 73
 74enum zpci_state {
 75	ZPCI_FN_STATE_STANDBY = 0,
 76	ZPCI_FN_STATE_CONFIGURED = 1,
 77	ZPCI_FN_STATE_RESERVED = 2,
 78	ZPCI_FN_STATE_ONLINE = 3,
 79};
 80
 81struct zpci_bar_struct {
 82	struct resource *res;		/* bus resource */
 
 
 83	u32		val;		/* bar start & 3 flag bits */
 84	u16		map_idx;	/* index into bar mapping array */
 85	u8		size;		/* order 2 exponent */
 86};
 87
 88struct s390_domain;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 89
 90/* Private data per function */
 91struct zpci_dev {
 92	struct pci_bus	*bus;
 93	struct list_head entry;		/* list of all zpci_devices, needed for hotplug, etc. */
 
 
 
 
 94
 95	enum zpci_state state;
 96	u32		fid;		/* function ID, used by sclp */
 97	u32		fh;		/* function handle, used by insn's */
 
 98	u16		vfn;		/* virtual function number */
 99	u16		pchid;		/* physical channel ID */
 
100	u8		pfgid;		/* function group ID */
101	u8		pft;		/* pci function type */
102	u16		domain;
 
 
 
 
 
 
 
 
 
103
104	struct mutex lock;
105	u8 pfip[CLP_PFIP_NR_SEGMENTS];	/* pci function internal path */
106	u32 uid;			/* user defined id */
107	u8 util_str[CLP_UTIL_STR_LEN];	/* utility string */
108
109	/* IRQ stuff */
110	u64		msi_addr;	/* MSI address */
111	unsigned int	max_msi;	/* maximum number of MSI's */
 
 
112	struct airq_iv *aibv;		/* adapter interrupt bit vector */
113	unsigned long	aisb;		/* number of the summary bit */
114
115	/* DMA stuff */
116	unsigned long	*dma_table;
117	spinlock_t	dma_table_lock;
118	int		tlb_refresh;
119
120	spinlock_t	iommu_bitmap_lock;
121	unsigned long	*iommu_bitmap;
122	unsigned long	*lazy_bitmap;
123	unsigned long	iommu_size;
124	unsigned long	iommu_pages;
125	unsigned int	next_bit;
126
127	struct iommu_device iommu_dev;  /* IOMMU core handle */
128
129	char res_name[16];
130	struct zpci_bar_struct bars[PCI_BAR_COUNT];
 
131
132	u64		start_dma;	/* Start of available DMA addresses */
133	u64		end_dma;	/* End of available DMA addresses */
134	u64		dma_mask;	/* DMA address space mask */
135
136	/* Function measurement block */
137	struct zpci_fmb *fmb;
138	u16		fmb_update;	/* update interval */
139	u16		fmb_length;
140	/* software counters */
141	atomic64_t allocated_pages;
142	atomic64_t mapped_pages;
143	atomic64_t unmapped_pages;
144
 
145	enum pci_bus_speed max_bus_speed;
146
147	struct dentry	*debugfs_dev;
148	struct dentry	*debugfs_perf;
149
 
150	struct s390_domain *s390_domain; /* s390 IOMMU domain data */
 
 
151};
152
153static inline bool zdev_enabled(struct zpci_dev *zdev)
154{
155	return (zdev->fh & (1UL << 31)) ? true : false;
156}
157
158extern const struct attribute_group *zpci_attr_groups[];
 
 
 
 
 
159
160/* -----------------------------------------------------------------------------
161  Prototypes
162----------------------------------------------------------------------------- */
163/* Base stuff */
164int zpci_create_device(struct zpci_dev *);
165void zpci_remove_device(struct zpci_dev *zdev);
166int zpci_enable_device(struct zpci_dev *);
167int zpci_disable_device(struct zpci_dev *);
168int zpci_register_ioat(struct zpci_dev *, u8, u64, u64, u64);
 
 
 
 
 
 
169int zpci_unregister_ioat(struct zpci_dev *, u8);
170void zpci_remove_reserved_devices(void);
 
171
172/* CLP */
 
173int clp_scan_pci_devices(void);
174int clp_rescan_pci_devices(void);
175int clp_rescan_pci_devices_simple(void);
176int clp_add_pci_device(u32, u32, int);
177int clp_enable_fh(struct zpci_dev *, u8);
178int clp_disable_fh(struct zpci_dev *);
179int clp_get_state(u32 fid, enum zpci_state *state);
 
 
 
 
180
181/* IOMMU Interface */
182int zpci_init_iommu(struct zpci_dev *zdev);
183void zpci_destroy_iommu(struct zpci_dev *zdev);
184
185#ifdef CONFIG_PCI
 
 
 
 
 
186/* Error handling and recovery */
187void zpci_event_error(void *);
188void zpci_event_availability(void *);
189void zpci_rescan(void);
190bool zpci_is_enabled(void);
191#else /* CONFIG_PCI */
192static inline void zpci_event_error(void *e) {}
193static inline void zpci_event_availability(void *e) {}
194static inline void zpci_rescan(void) {}
195#endif /* CONFIG_PCI */
196
197#ifdef CONFIG_HOTPLUG_PCI_S390
198int zpci_init_slot(struct zpci_dev *);
199void zpci_exit_slot(struct zpci_dev *);
200#else /* CONFIG_HOTPLUG_PCI_S390 */
201static inline int zpci_init_slot(struct zpci_dev *zdev)
202{
203	return 0;
204}
205static inline void zpci_exit_slot(struct zpci_dev *zdev) {}
206#endif /* CONFIG_HOTPLUG_PCI_S390 */
207
208/* Helpers */
209static inline struct zpci_dev *to_zpci(struct pci_dev *pdev)
210{
211	return pdev->sysdata;
 
 
 
 
 
 
 
212}
213
214struct zpci_dev *get_zdev_by_fid(u32);
215
216/* DMA */
217int zpci_dma_init(void);
218void zpci_dma_exit(void);
 
 
 
 
 
 
219
220/* FMB */
221int zpci_fmb_enable_device(struct zpci_dev *);
222int zpci_fmb_disable_device(struct zpci_dev *);
223
224/* Debug */
225int zpci_debug_init(void);
226void zpci_debug_exit(void);
227void zpci_debug_init_device(struct zpci_dev *, const char *);
228void zpci_debug_exit_device(struct zpci_dev *);
229void zpci_debug_info(struct zpci_dev *, struct seq_file *);
230
231/* Error reporting */
232int zpci_report_error(struct pci_dev *, struct zpci_report_error_header *);
 
 
233
234#ifdef CONFIG_NUMA
235
236/* Returns the node based on PCI bus */
237static inline int __pcibus_to_node(const struct pci_bus *bus)
238{
239	return NUMA_NO_NODE;
240}
241
242static inline const struct cpumask *
243cpumask_of_pcibus(const struct pci_bus *bus)
244{
245	return cpu_online_mask;
246}
247
248#endif /* CONFIG_NUMA */
249
250#endif