PCI: remove pcibios_scan_all_fns()
[linux-2.6.git] / arch / sparc / include / asm / pci_32.h
1 #ifndef __SPARC_PCI_H
2 #define __SPARC_PCI_H
3
4 #ifdef __KERNEL__
5
6 #include <linux/dma-mapping.h>
7
8 /* Can be used to override the logic in pci_scan_bus for skipping
9  * already-configured bus numbers - to be used for buggy BIOSes
10  * or architectures with incomplete PCI setup by the loader.
11  */
12 #define pcibios_assign_all_busses()     0
13
14 #define PCIBIOS_MIN_IO          0UL
15 #define PCIBIOS_MIN_MEM         0UL
16
17 #define PCI_IRQ_NONE            0xffffffff
18
19 static inline void pcibios_set_master(struct pci_dev *dev)
20 {
21         /* No special bus mastering setup handling */
22 }
23
24 static inline void pcibios_penalize_isa_irq(int irq, int active)
25 {
26         /* We don't do dynamic PCI IRQ allocation */
27 }
28
29 /* Dynamic DMA mapping stuff.
30  */
31 #define PCI_DMA_BUS_IS_PHYS     (0)
32
33 #include <asm/scatterlist.h>
34
35 struct pci_dev;
36
37 /* Allocate and map kernel buffer using consistent mode DMA for a device.
38  * hwdev should be valid struct pci_dev pointer for PCI devices.
39  */
40 extern void *pci_alloc_consistent(struct pci_dev *hwdev, size_t size, dma_addr_t *dma_handle);
41
42 /* Free and unmap a consistent DMA buffer.
43  * cpu_addr is what was returned from pci_alloc_consistent,
44  * size must be the same as what as passed into pci_alloc_consistent,
45  * and likewise dma_addr must be the same as what *dma_addrp was set to.
46  *
47  * References to the memory and mappings assosciated with cpu_addr/dma_addr
48  * past this call are illegal.
49  */
50 extern void pci_free_consistent(struct pci_dev *hwdev, size_t size, void *vaddr, dma_addr_t dma_handle);
51
52 /* Map a single buffer of the indicated size for DMA in streaming mode.
53  * The 32-bit bus address to use is returned.
54  *
55  * Once the device is given the dma address, the device owns this memory
56  * until either pci_unmap_single or pci_dma_sync_single_for_cpu is performed.
57  */
58 extern dma_addr_t pci_map_single(struct pci_dev *hwdev, void *ptr, size_t size, int direction);
59
60 /* Unmap a single streaming mode DMA translation.  The dma_addr and size
61  * must match what was provided for in a previous pci_map_single call.  All
62  * other usages are undefined.
63  *
64  * After this call, reads by the cpu to the buffer are guaranteed to see
65  * whatever the device wrote there.
66  */
67 extern void pci_unmap_single(struct pci_dev *hwdev, dma_addr_t dma_addr, size_t size, int direction);
68
69 /* pci_unmap_{single,page} is not a nop, thus... */
70 #define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME)       \
71         dma_addr_t ADDR_NAME;
72 #define DECLARE_PCI_UNMAP_LEN(LEN_NAME)         \
73         __u32 LEN_NAME;
74 #define pci_unmap_addr(PTR, ADDR_NAME)                  \
75         ((PTR)->ADDR_NAME)
76 #define pci_unmap_addr_set(PTR, ADDR_NAME, VAL)         \
77         (((PTR)->ADDR_NAME) = (VAL))
78 #define pci_unmap_len(PTR, LEN_NAME)                    \
79         ((PTR)->LEN_NAME)
80 #define pci_unmap_len_set(PTR, LEN_NAME, VAL)           \
81         (((PTR)->LEN_NAME) = (VAL))
82
83 /*
84  * Same as above, only with pages instead of mapped addresses.
85  */
86 extern dma_addr_t pci_map_page(struct pci_dev *hwdev, struct page *page,
87                         unsigned long offset, size_t size, int direction);
88 extern void pci_unmap_page(struct pci_dev *hwdev,
89                         dma_addr_t dma_address, size_t size, int direction);
90
91 /* Map a set of buffers described by scatterlist in streaming
92  * mode for DMA.  This is the scather-gather version of the
93  * above pci_map_single interface.  Here the scatter gather list
94  * elements are each tagged with the appropriate dma address
95  * and length.  They are obtained via sg_dma_{address,length}(SG).
96  *
97  * NOTE: An implementation may be able to use a smaller number of
98  *       DMA address/length pairs than there are SG table elements.
99  *       (for example via virtual mapping capabilities)
100  *       The routine returns the number of addr/length pairs actually
101  *       used, at most nents.
102  *
103  * Device ownership issues as mentioned above for pci_map_single are
104  * the same here.
105  */
106 extern int pci_map_sg(struct pci_dev *hwdev, struct scatterlist *sg, int nents, int direction);
107
108 /* Unmap a set of streaming mode DMA translations.
109  * Again, cpu read rules concerning calls here are the same as for
110  * pci_unmap_single() above.
111  */
112 extern void pci_unmap_sg(struct pci_dev *hwdev, struct scatterlist *sg, int nhwents, int direction);
113
114 /* Make physical memory consistent for a single
115  * streaming mode DMA translation after a transfer.
116  *
117  * If you perform a pci_map_single() but wish to interrogate the
118  * buffer using the cpu, yet do not wish to teardown the PCI dma
119  * mapping, you must call this function before doing so.  At the
120  * next point you give the PCI dma address back to the card, you
121  * must first perform a pci_dma_sync_for_device, and then the device
122  * again owns the buffer.
123  */
124 extern void pci_dma_sync_single_for_cpu(struct pci_dev *hwdev, dma_addr_t dma_handle, size_t size, int direction);
125 extern void pci_dma_sync_single_for_device(struct pci_dev *hwdev, dma_addr_t dma_handle, size_t size, int direction);
126
127 /* Make physical memory consistent for a set of streaming
128  * mode DMA translations after a transfer.
129  *
130  * The same as pci_dma_sync_single_* but for a scatter-gather list,
131  * same rules and usage.
132  */
133 extern void pci_dma_sync_sg_for_cpu(struct pci_dev *hwdev, struct scatterlist *sg, int nelems, int direction);
134 extern void pci_dma_sync_sg_for_device(struct pci_dev *hwdev, struct scatterlist *sg, int nelems, int direction);
135
136 /* Return whether the given PCI device DMA address mask can
137  * be supported properly.  For example, if your device can
138  * only drive the low 24-bits during PCI bus mastering, then
139  * you would pass 0x00ffffff as the mask to this function.
140  */
141 static inline int pci_dma_supported(struct pci_dev *hwdev, u64 mask)
142 {
143         return 1;
144 }
145
146 #ifdef CONFIG_PCI
147 static inline void pci_dma_burst_advice(struct pci_dev *pdev,
148                                         enum pci_dma_burst_strategy *strat,
149                                         unsigned long *strategy_parameter)
150 {
151         *strat = PCI_DMA_BURST_INFINITY;
152         *strategy_parameter = ~0UL;
153 }
154 #endif
155
156 #define PCI_DMA_ERROR_CODE      (~(dma_addr_t)0x0)
157
158 static inline int pci_dma_mapping_error(struct pci_dev *pdev,
159                                         dma_addr_t dma_addr)
160 {
161         return (dma_addr == PCI_DMA_ERROR_CODE);
162 }
163
164 struct device_node;
165 extern struct device_node *pci_device_to_OF_node(struct pci_dev *pdev);
166
167 #endif /* __KERNEL__ */
168
169 /* generic pci stuff */
170 #include <asm-generic/pci.h>
171
172 #endif /* __SPARC_PCI_H */