aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-x86/pci_64.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/asm-x86/pci_64.h')
-rw-r--r--include/asm-x86/pci_64.h70
1 files changed, 70 insertions, 0 deletions
diff --git a/include/asm-x86/pci_64.h b/include/asm-x86/pci_64.h
new file mode 100644
index 000000000000..9baa46d9f594
--- /dev/null
+++ b/include/asm-x86/pci_64.h
@@ -0,0 +1,70 @@
1#ifndef __x8664_PCI_H
2#define __x8664_PCI_H
3
4
5#ifdef __KERNEL__
6
7
8#ifdef CONFIG_CALGARY_IOMMU
9static inline void* pci_iommu(struct pci_bus *bus)
10{
11 struct pci_sysdata *sd = bus->sysdata;
12 return sd->iommu;
13}
14
15static inline void set_pci_iommu(struct pci_bus *bus, void *val)
16{
17 struct pci_sysdata *sd = bus->sysdata;
18 sd->iommu = val;
19}
20#endif /* CONFIG_CALGARY_IOMMU */
21
22
23extern int (*pci_config_read)(int seg, int bus, int dev, int fn, int reg, int len, u32 *value);
24extern int (*pci_config_write)(int seg, int bus, int dev, int fn, int reg, int len, u32 value);
25
26
27
28extern void pci_iommu_alloc(void);
29extern int iommu_setup(char *opt);
30
31/* The PCI address space does equal the physical memory
32 * address space. The networking and block device layers use
33 * this boolean for bounce buffer decisions
34 *
35 * On AMD64 it mostly equals, but we set it to zero if a hardware
36 * IOMMU (gart) of sotware IOMMU (swiotlb) is available.
37 */
38#define PCI_DMA_BUS_IS_PHYS (dma_ops->is_phys)
39
40#if defined(CONFIG_IOMMU) || defined(CONFIG_CALGARY_IOMMU)
41
42#define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) \
43 dma_addr_t ADDR_NAME;
44#define DECLARE_PCI_UNMAP_LEN(LEN_NAME) \
45 __u32 LEN_NAME;
46#define pci_unmap_addr(PTR, ADDR_NAME) \
47 ((PTR)->ADDR_NAME)
48#define pci_unmap_addr_set(PTR, ADDR_NAME, VAL) \
49 (((PTR)->ADDR_NAME) = (VAL))
50#define pci_unmap_len(PTR, LEN_NAME) \
51 ((PTR)->LEN_NAME)
52#define pci_unmap_len_set(PTR, LEN_NAME, VAL) \
53 (((PTR)->LEN_NAME) = (VAL))
54
55#else
56/* No IOMMU */
57
58#define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME)
59#define DECLARE_PCI_UNMAP_LEN(LEN_NAME)
60#define pci_unmap_addr(PTR, ADDR_NAME) (0)
61#define pci_unmap_addr_set(PTR, ADDR_NAME, VAL) do { } while (0)
62#define pci_unmap_len(PTR, LEN_NAME) (0)
63#define pci_unmap_len_set(PTR, LEN_NAME, VAL) do { } while (0)
64
65#endif
66
67#endif /* __KERNEL__ */
68
69
70#endif /* __x8664_PCI_H */