Linux Audio

Check our new training course

Loading...
v3.5.6
 1#ifndef __ASM_S390_PCI_H
 2#define __ASM_S390_PCI_H
 3
 4/* S/390 systems don't have a PCI bus. This file is just here because some stupid .c code
 5 * includes it even if CONFIG_PCI is not set.
 6 */
 7#define PCI_DMA_BUS_IS_PHYS (0)
 
 
 8
 9#endif /* __ASM_S390_PCI_H */
 
 
 
 
10
v3.15
  1#ifndef __ASM_S390_PCI_H
  2#define __ASM_S390_PCI_H
  3
  4/* must be set before including asm-generic/pci.h */
 
 
  5#define PCI_DMA_BUS_IS_PHYS (0)
  6/* must be set before including pci_clp.h */
  7#define PCI_BAR_COUNT	6
  8
  9#include <linux/pci.h>
 10#include <asm-generic/pci.h>
 11#include <asm-generic/pci-dma-compat.h>
 12#include <asm/pci_clp.h>
 13#include <asm/pci_debug.h>
 14
 15#define PCIBIOS_MIN_IO		0x1000
 16#define PCIBIOS_MIN_MEM		0x10000000
 17
 18#define pcibios_assign_all_busses()	(0)
 19
 20void __iomem *pci_iomap(struct pci_dev *, int, unsigned long);
 21void pci_iounmap(struct pci_dev *, void __iomem *);
 22int pci_domain_nr(struct pci_bus *);
 23int pci_proc_domain(struct pci_bus *);
 24
 25#define ZPCI_BUS_NR			0	/* default bus number */
 26#define ZPCI_DEVFN			0	/* default device number */
 27
 28/* PCI Function Controls */
 29#define ZPCI_FC_FN_ENABLED		0x80
 30#define ZPCI_FC_ERROR			0x40
 31#define ZPCI_FC_BLOCKED			0x20
 32#define ZPCI_FC_DMA_ENABLED		0x10
 33
 34struct zpci_fmb {
 35	u32 format	:  8;
 36	u32 dma_valid	:  1;
 37	u32		: 23;
 38	u32 samples;
 39	u64 last_update;
 40	/* hardware counters */
 41	u64 ld_ops;
 42	u64 st_ops;
 43	u64 stb_ops;
 44	u64 rpcit_ops;
 45	u64 dma_rbytes;
 46	u64 dma_wbytes;
 47	/* software counters */
 48	atomic64_t allocated_pages;
 49	atomic64_t mapped_pages;
 50	atomic64_t unmapped_pages;
 51} __packed __aligned(16);
 52
 53#define ZPCI_MSI_VEC_BITS	11
 54#define ZPCI_MSI_VEC_MAX	(1 << ZPCI_MSI_VEC_BITS)
 55#define ZPCI_MSI_VEC_MASK	(ZPCI_MSI_VEC_MAX - 1)
 56
 57enum zpci_state {
 58	ZPCI_FN_STATE_RESERVED,
 59	ZPCI_FN_STATE_STANDBY,
 60	ZPCI_FN_STATE_CONFIGURED,
 61	ZPCI_FN_STATE_ONLINE,
 62	NR_ZPCI_FN_STATES,
 63};
 64
 65struct zpci_bar_struct {
 66	struct resource *res;		/* bus resource */
 67	u32		val;		/* bar start & 3 flag bits */
 68	u16		map_idx;	/* index into bar mapping array */
 69	u8		size;		/* order 2 exponent */
 70};
 71
 72/* Private data per function */
 73struct zpci_dev {
 74	struct pci_dev	*pdev;
 75	struct pci_bus	*bus;
 76	struct list_head entry;		/* list of all zpci_devices, needed for hotplug, etc. */
 77
 78	enum zpci_state state;
 79	u32		fid;		/* function ID, used by sclp */
 80	u32		fh;		/* function handle, used by insn's */
 81	u16		pchid;		/* physical channel ID */
 82	u8		pfgid;		/* function group ID */
 83	u16		domain;
 84
 85	/* IRQ stuff */
 86	u64		msi_addr;	/* MSI address */
 87	struct airq_iv *aibv;		/* adapter interrupt bit vector */
 88	unsigned int	aisb;		/* number of the summary bit */
 89
 90	/* DMA stuff */
 91	unsigned long	*dma_table;
 92	spinlock_t	dma_table_lock;
 93	int		tlb_refresh;
 94
 95	spinlock_t	iommu_bitmap_lock;
 96	unsigned long	*iommu_bitmap;
 97	unsigned long	iommu_size;
 98	unsigned long	iommu_pages;
 99	unsigned int	next_bit;
100
101	char res_name[16];
102	struct zpci_bar_struct bars[PCI_BAR_COUNT];
103
104	u64		start_dma;	/* Start of available DMA addresses */
105	u64		end_dma;	/* End of available DMA addresses */
106	u64		dma_mask;	/* DMA address space mask */
107
108	/* Function measurement block */
109	struct zpci_fmb *fmb;
110	u16		fmb_update;	/* update interval */
111
112	enum pci_bus_speed max_bus_speed;
113
114	struct dentry	*debugfs_dev;
115	struct dentry	*debugfs_perf;
116};
117
118static inline bool zdev_enabled(struct zpci_dev *zdev)
119{
120	return (zdev->fh & (1UL << 31)) ? true : false;
121}
122
123/* -----------------------------------------------------------------------------
124  Prototypes
125----------------------------------------------------------------------------- */
126/* Base stuff */
127int zpci_create_device(struct zpci_dev *);
128int zpci_enable_device(struct zpci_dev *);
129int zpci_disable_device(struct zpci_dev *);
130void zpci_stop_device(struct zpci_dev *);
131int zpci_register_ioat(struct zpci_dev *, u8, u64, u64, u64);
132int zpci_unregister_ioat(struct zpci_dev *, u8);
133
134/* CLP */
135int clp_scan_pci_devices(void);
136int clp_rescan_pci_devices(void);
137int clp_rescan_pci_devices_simple(void);
138int clp_add_pci_device(u32, u32, int);
139int clp_enable_fh(struct zpci_dev *, u8);
140int clp_disable_fh(struct zpci_dev *);
141
142#ifdef CONFIG_PCI
143/* Error handling and recovery */
144void zpci_event_error(void *);
145void zpci_event_availability(void *);
146void zpci_rescan(void);
147bool zpci_is_enabled(void);
148#else /* CONFIG_PCI */
149static inline void zpci_event_error(void *e) {}
150static inline void zpci_event_availability(void *e) {}
151static inline void zpci_rescan(void) {}
152#endif /* CONFIG_PCI */
153
154#ifdef CONFIG_HOTPLUG_PCI_S390
155int zpci_init_slot(struct zpci_dev *);
156void zpci_exit_slot(struct zpci_dev *);
157#else /* CONFIG_HOTPLUG_PCI_S390 */
158static inline int zpci_init_slot(struct zpci_dev *zdev)
159{
160	return 0;
161}
162static inline void zpci_exit_slot(struct zpci_dev *zdev) {}
163#endif /* CONFIG_HOTPLUG_PCI_S390 */
164
165/* Helpers */
166struct zpci_dev *get_zdev(struct pci_dev *);
167struct zpci_dev *get_zdev_by_fid(u32);
168
169/* sysfs */
170int zpci_sysfs_add_device(struct device *);
171void zpci_sysfs_remove_device(struct device *);
172
173/* DMA */
174int zpci_dma_init(void);
175void zpci_dma_exit(void);
176
177/* FMB */
178int zpci_fmb_enable_device(struct zpci_dev *);
179int zpci_fmb_disable_device(struct zpci_dev *);
180
181/* Debug */
182int zpci_debug_init(void);
183void zpci_debug_exit(void);
184void zpci_debug_init_device(struct zpci_dev *);
185void zpci_debug_exit_device(struct zpci_dev *);
186void zpci_debug_info(struct zpci_dev *, struct seq_file *);
187
188#endif