1#ifndef __ALPHA_PCI_H
2#define __ALPHA_PCI_H
3
4#ifdef __KERNEL__
5
6#include <linux/spinlock.h>
7#include <linux/dma-mapping.h>
8#include <asm/scatterlist.h>
9#include <asm/machvec.h>
10
11
12
13
14
15struct pci_dev;
16struct pci_bus;
17struct resource;
18struct pci_iommu_arena;
19struct page;
20
21
22
23struct pci_controller {
24 struct pci_controller *next;
25 struct pci_bus *bus;
26 struct resource *io_space;
27 struct resource *mem_space;
28
29
30
31
32 unsigned long sparse_mem_base;
33 unsigned long dense_mem_base;
34 unsigned long sparse_io_base;
35 unsigned long dense_io_base;
36
37
38 unsigned long config_space_base;
39
40 unsigned int index;
41
42
43 unsigned int need_domain_info;
44
45 struct pci_iommu_arena *sg_pci;
46 struct pci_iommu_arena *sg_isa;
47
48 void *sysdata;
49};
50
51
52
53
54#define pcibios_assign_all_busses() 1
55
56#define PCIBIOS_MIN_IO alpha_mv.min_io_address
57#define PCIBIOS_MIN_MEM alpha_mv.min_mem_address
58
59extern void pcibios_set_master(struct pci_dev *dev);
60
61extern inline void pcibios_penalize_isa_irq(int irq, int active)
62{
63
64}
65
66
67
68
69
70
71#define PCI_DMA_BUS_IS_PHYS 0
72
73
74
75
76
77
78extern void *__pci_alloc_consistent(struct pci_dev *, size_t,
79 dma_addr_t *, gfp_t);
80static inline void *
81pci_alloc_consistent(struct pci_dev *dev, size_t size, dma_addr_t *dma)
82{
83 return __pci_alloc_consistent(dev, size, dma, GFP_ATOMIC);
84}
85
86
87
88
89
90
91
92extern void pci_free_consistent(struct pci_dev *, size_t, void *, dma_addr_t);
93
94
95
96
97
98
99extern dma_addr_t pci_map_single(struct pci_dev *, void *, size_t, int);
100
101
102extern dma_addr_t pci_map_page(struct pci_dev *, struct page *,
103 unsigned long, size_t, int);
104
105
106
107static inline int
108pci_dma_mapping_error(struct pci_dev *pdev, dma_addr_t dma_addr)
109{
110 return dma_addr == 0;
111}
112
113
114
115
116
117
118
119extern void pci_unmap_single(struct pci_dev *, dma_addr_t, size_t, int);
120extern void pci_unmap_page(struct pci_dev *, dma_addr_t, size_t, int);
121
122
123#define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) \
124 dma_addr_t ADDR_NAME;
125#define DECLARE_PCI_UNMAP_LEN(LEN_NAME) \
126 __u32 LEN_NAME;
127#define pci_unmap_addr(PTR, ADDR_NAME) \
128 ((PTR)->ADDR_NAME)
129#define pci_unmap_addr_set(PTR, ADDR_NAME, VAL) \
130 (((PTR)->ADDR_NAME) = (VAL))
131#define pci_unmap_len(PTR, LEN_NAME) \
132 ((PTR)->LEN_NAME)
133#define pci_unmap_len_set(PTR, LEN_NAME, VAL) \
134 (((PTR)->LEN_NAME) = (VAL))
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150extern int pci_map_sg(struct pci_dev *, struct scatterlist *, int, int);
151
152
153
154
155
156extern void pci_unmap_sg(struct pci_dev *, struct scatterlist *, int, int);
157
158
159
160
161
162
163
164
165
166
167
168
169static inline void
170pci_dma_sync_single_for_cpu(struct pci_dev *dev, dma_addr_t dma_addr,
171 long size, int direction)
172{
173
174}
175
176static inline void
177pci_dma_sync_single_for_device(struct pci_dev *dev, dma_addr_t dma_addr,
178 size_t size, int direction)
179{
180
181}
182
183
184
185
186
187static inline void
188pci_dma_sync_sg_for_cpu(struct pci_dev *dev, struct scatterlist *sg,
189 int nents, int direction)
190{
191
192}
193
194static inline void
195pci_dma_sync_sg_for_device(struct pci_dev *dev, struct scatterlist *sg,
196 int nents, int direction)
197{
198
199}
200
201
202
203
204
205
206extern int pci_dma_supported(struct pci_dev *hwdev, u64 mask);
207
208#ifdef CONFIG_PCI
209static inline void pci_dma_burst_advice(struct pci_dev *pdev,
210 enum pci_dma_burst_strategy *strat,
211 unsigned long *strategy_parameter)
212{
213 unsigned long cacheline_size;
214 u8 byte;
215
216 pci_read_config_byte(pdev, PCI_CACHE_LINE_SIZE, &byte);
217 if (byte == 0)
218 cacheline_size = 1024;
219 else
220 cacheline_size = (int) byte * 4;
221
222 *strat = PCI_DMA_BURST_BOUNDARY;
223 *strategy_parameter = cacheline_size;
224}
225#endif
226
227
228static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel)
229{
230 return channel ? 15 : 14;
231}
232
233extern void pcibios_resource_to_bus(struct pci_dev *, struct pci_bus_region *,
234 struct resource *);
235
236extern void pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res,
237 struct pci_bus_region *region);
238
239#define pci_domain_nr(bus) ((struct pci_controller *)(bus)->sysdata)->index
240
241static inline int pci_proc_domain(struct pci_bus *bus)
242{
243 struct pci_controller *hose = bus->sysdata;
244 return hose->need_domain_info;
245}
246
247struct pci_dev *alpha_gendev_to_pci(struct device *dev);
248
249#endif
250
251
252#define IOBASE_HOSE 0
253#define IOBASE_SPARSE_MEM 1
254#define IOBASE_DENSE_MEM 2
255#define IOBASE_SPARSE_IO 3
256#define IOBASE_DENSE_IO 4
257#define IOBASE_ROOT_BUS 5
258#define IOBASE_FROM_HOSE 0x10000
259
260extern struct pci_dev *isa_bridge;
261
262extern int pci_legacy_read(struct pci_bus *bus, loff_t port, u32 *val,
263 size_t count);
264extern int pci_legacy_write(struct pci_bus *bus, loff_t port, u32 val,
265 size_t count);
266extern int pci_mmap_legacy_page_range(struct pci_bus *bus,
267 struct vm_area_struct *vma,
268 enum pci_mmap_state mmap_state);
269extern void pci_adjust_legacy_attr(struct pci_bus *bus,
270 enum pci_mmap_state mmap_type);
271#define HAVE_PCI_LEGACY 1
272
273extern int pci_create_resource_files(struct pci_dev *dev);
274extern void pci_remove_resource_files(struct pci_dev *dev);
275
276#endif
277