1#ifndef __ASM_S390_PCI_H
2#define __ASM_S390_PCI_H
3
4
5#define PCI_DMA_BUS_IS_PHYS (0)
6
7#define PCI_BAR_COUNT 6
8
9#include <linux/pci.h>
10#include <linux/mutex.h>
11#include <asm-generic/pci.h>
12#include <asm/pci_clp.h>
13#include <asm/pci_debug.h>
14#include <asm/sclp.h>
15
16#define PCIBIOS_MIN_IO 0x1000
17#define PCIBIOS_MIN_MEM 0x10000000
18
19#define pcibios_assign_all_busses() (0)
20
21void __iomem *pci_iomap(struct pci_dev *, int, unsigned long);
22void pci_iounmap(struct pci_dev *, void __iomem *);
23int pci_domain_nr(struct pci_bus *);
24int pci_proc_domain(struct pci_bus *);
25
26#define ZPCI_BUS_NR 0
27#define ZPCI_DEVFN 0
28
29
30#define ZPCI_FC_FN_ENABLED 0x80
31#define ZPCI_FC_ERROR 0x40
32#define ZPCI_FC_BLOCKED 0x20
33#define ZPCI_FC_DMA_ENABLED 0x10
34
35#define ZPCI_FMB_DMA_COUNTER_VALID (1 << 23)
36
37struct zpci_fmb_fmt0 {
38 u64 dma_rbytes;
39 u64 dma_wbytes;
40};
41
42struct zpci_fmb_fmt1 {
43 u64 rx_bytes;
44 u64 rx_packets;
45 u64 tx_bytes;
46 u64 tx_packets;
47};
48
49struct zpci_fmb_fmt2 {
50 u64 consumed_work_units;
51 u64 max_work_units;
52};
53
54struct zpci_fmb {
55 u32 format : 8;
56 u32 fmt_ind : 24;
57 u32 samples;
58 u64 last_update;
59
60 u64 ld_ops;
61 u64 st_ops;
62 u64 stb_ops;
63 u64 rpcit_ops;
64
65 union {
66 struct zpci_fmb_fmt0 fmt0;
67 struct zpci_fmb_fmt1 fmt1;
68 struct zpci_fmb_fmt2 fmt2;
69 };
70} __packed __aligned(128);
71
72enum zpci_state {
73 ZPCI_FN_STATE_RESERVED,
74 ZPCI_FN_STATE_STANDBY,
75 ZPCI_FN_STATE_CONFIGURED,
76 ZPCI_FN_STATE_ONLINE,
77 NR_ZPCI_FN_STATES,
78};
79
80struct zpci_bar_struct {
81 struct resource *res;
82 u32 val;
83 u16 map_idx;
84 u8 size;
85};
86
87struct s390_domain;
88
89
90struct zpci_dev {
91 struct pci_bus *bus;
92 struct list_head entry;
93
94 enum zpci_state state;
95 u32 fid;
96 u32 fh;
97 u16 vfn;
98 u16 pchid;
99 u8 pfgid;
100 u8 pft;
101 u16 domain;
102
103 struct mutex lock;
104 u8 pfip[CLP_PFIP_NR_SEGMENTS];
105 u32 uid;
106 u8 util_str[CLP_UTIL_STR_LEN];
107
108
109 u64 msi_addr;
110 unsigned int max_msi;
111 struct airq_iv *aibv;
112 unsigned int aisb;
113
114
115 unsigned long *dma_table;
116 spinlock_t dma_table_lock;
117 int tlb_refresh;
118
119 spinlock_t iommu_bitmap_lock;
120 unsigned long *iommu_bitmap;
121 unsigned long *lazy_bitmap;
122 unsigned long iommu_size;
123 unsigned long iommu_pages;
124 unsigned int next_bit;
125
126 char res_name[16];
127 struct zpci_bar_struct bars[PCI_BAR_COUNT];
128
129 u64 start_dma;
130 u64 end_dma;
131 u64 dma_mask;
132
133
134 struct zpci_fmb *fmb;
135 u16 fmb_update;
136 u16 fmb_length;
137
138 atomic64_t allocated_pages;
139 atomic64_t mapped_pages;
140 atomic64_t unmapped_pages;
141
142 enum pci_bus_speed max_bus_speed;
143
144 struct dentry *debugfs_dev;
145 struct dentry *debugfs_perf;
146
147 struct s390_domain *s390_domain;
148};
149
150static inline bool zdev_enabled(struct zpci_dev *zdev)
151{
152 return (zdev->fh & (1UL << 31)) ? true : false;
153}
154
155extern const struct attribute_group *zpci_attr_groups[];
156
157
158
159
160
161int zpci_create_device(struct zpci_dev *);
162int zpci_enable_device(struct zpci_dev *);
163int zpci_disable_device(struct zpci_dev *);
164void zpci_stop_device(struct zpci_dev *);
165int zpci_register_ioat(struct zpci_dev *, u8, u64, u64, u64);
166int zpci_unregister_ioat(struct zpci_dev *, u8);
167
168
169int clp_scan_pci_devices(void);
170int clp_rescan_pci_devices(void);
171int clp_rescan_pci_devices_simple(void);
172int clp_add_pci_device(u32, u32, int);
173int clp_enable_fh(struct zpci_dev *, u8);
174int clp_disable_fh(struct zpci_dev *);
175
176#ifdef CONFIG_PCI
177
178void zpci_event_error(void *);
179void zpci_event_availability(void *);
180void zpci_rescan(void);
181bool zpci_is_enabled(void);
182#else
183static inline void zpci_event_error(void *e) {}
184static inline void zpci_event_availability(void *e) {}
185static inline void zpci_rescan(void) {}
186#endif
187
188#ifdef CONFIG_HOTPLUG_PCI_S390
189int zpci_init_slot(struct zpci_dev *);
190void zpci_exit_slot(struct zpci_dev *);
191#else
192static inline int zpci_init_slot(struct zpci_dev *zdev)
193{
194 return 0;
195}
196static inline void zpci_exit_slot(struct zpci_dev *zdev) {}
197#endif
198
199
200static inline struct zpci_dev *to_zpci(struct pci_dev *pdev)
201{
202 return pdev->sysdata;
203}
204
205struct zpci_dev *get_zdev_by_fid(u32);
206
207
208int zpci_dma_init(void);
209void zpci_dma_exit(void);
210
211
212int zpci_fmb_enable_device(struct zpci_dev *);
213int zpci_fmb_disable_device(struct zpci_dev *);
214
215
216int zpci_debug_init(void);
217void zpci_debug_exit(void);
218void zpci_debug_init_device(struct zpci_dev *, const char *);
219void zpci_debug_exit_device(struct zpci_dev *);
220void zpci_debug_info(struct zpci_dev *, struct seq_file *);
221
222
223int zpci_report_error(struct pci_dev *, struct zpci_report_error_header *);
224
225#ifdef CONFIG_NUMA
226
227
228static inline int __pcibus_to_node(const struct pci_bus *bus)
229{
230 return NUMA_NO_NODE;
231}
232
233static inline const struct cpumask *
234cpumask_of_pcibus(const struct pci_bus *bus)
235{
236 return cpu_online_mask;
237}
238
239#endif
240
241#endif
242