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
137 atomic64_t allocated_pages;
138 atomic64_t mapped_pages;
139 atomic64_t unmapped_pages;
140
141 enum pci_bus_speed max_bus_speed;
142
143 struct dentry *debugfs_dev;
144 struct dentry *debugfs_perf;
145
146 struct s390_domain *s390_domain;
147};
148
149static inline bool zdev_enabled(struct zpci_dev *zdev)
150{
151 return (zdev->fh & (1UL << 31)) ? true : false;
152}
153
154extern const struct attribute_group *zpci_attr_groups[];
155
156
157
158
159
160int zpci_create_device(struct zpci_dev *);
161int zpci_enable_device(struct zpci_dev *);
162int zpci_disable_device(struct zpci_dev *);
163void zpci_stop_device(struct zpci_dev *);
164int zpci_register_ioat(struct zpci_dev *, u8, u64, u64, u64);
165int zpci_unregister_ioat(struct zpci_dev *, u8);
166
167
168int clp_scan_pci_devices(void);
169int clp_rescan_pci_devices(void);
170int clp_rescan_pci_devices_simple(void);
171int clp_add_pci_device(u32, u32, int);
172int clp_enable_fh(struct zpci_dev *, u8);
173int clp_disable_fh(struct zpci_dev *);
174
175#ifdef CONFIG_PCI
176
177void zpci_event_error(void *);
178void zpci_event_availability(void *);
179void zpci_rescan(void);
180bool zpci_is_enabled(void);
181#else
182static inline void zpci_event_error(void *e) {}
183static inline void zpci_event_availability(void *e) {}
184static inline void zpci_rescan(void) {}
185#endif
186
187#ifdef CONFIG_HOTPLUG_PCI_S390
188int zpci_init_slot(struct zpci_dev *);
189void zpci_exit_slot(struct zpci_dev *);
190#else
191static inline int zpci_init_slot(struct zpci_dev *zdev)
192{
193 return 0;
194}
195static inline void zpci_exit_slot(struct zpci_dev *zdev) {}
196#endif
197
198
199static inline struct zpci_dev *to_zpci(struct pci_dev *pdev)
200{
201 return pdev->sysdata;
202}
203
204struct zpci_dev *get_zdev_by_fid(u32);
205
206
207int zpci_dma_init(void);
208void zpci_dma_exit(void);
209
210
211int zpci_fmb_enable_device(struct zpci_dev *);
212int zpci_fmb_disable_device(struct zpci_dev *);
213
214
215int zpci_debug_init(void);
216void zpci_debug_exit(void);
217void zpci_debug_init_device(struct zpci_dev *, const char *);
218void zpci_debug_exit_device(struct zpci_dev *);
219void zpci_debug_info(struct zpci_dev *, struct seq_file *);
220
221
222int zpci_report_error(struct pci_dev *, struct zpci_report_error_header *);
223
224#ifdef CONFIG_NUMA
225
226
227static inline int __pcibus_to_node(const struct pci_bus *bus)
228{
229 return NUMA_NO_NODE;
230}
231
232static inline const struct cpumask *
233cpumask_of_pcibus(const struct pci_bus *bus)
234{
235 return cpu_online_mask;
236}
237
238#endif
239
240#endif
241