Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
422 | giacomo | 1 | #ifndef __i386_PCI_H |
2 | #define __i386_PCI_H |
||
3 | |||
4 | #include <linux/config.h> |
||
5 | |||
6 | #ifdef __KERNEL__ |
||
7 | #include <linux/mm.h> /* for struct page */ |
||
8 | |||
9 | /* Can be used to override the logic in pci_scan_bus for skipping |
||
10 | already-configured bus numbers - to be used for buggy BIOSes |
||
11 | or architectures with incomplete PCI setup by the loader */ |
||
12 | |||
13 | #ifdef CONFIG_PCI |
||
14 | extern unsigned int pcibios_assign_all_busses(void); |
||
15 | #else |
||
16 | #define pcibios_assign_all_busses() 0 |
||
17 | #endif |
||
18 | |||
19 | extern unsigned long pci_mem_start; |
||
20 | #define PCIBIOS_MIN_IO 0x1000 |
||
21 | #define PCIBIOS_MIN_MEM (pci_mem_start) |
||
22 | |||
23 | #define PCIBIOS_MIN_CARDBUS_IO 0x4000 |
||
24 | |||
25 | void pcibios_config_init(void); |
||
26 | struct pci_bus * pcibios_scan_root(int bus); |
||
27 | |||
28 | void pcibios_set_master(struct pci_dev *dev); |
||
29 | void pcibios_penalize_isa_irq(int irq); |
||
30 | struct irq_routing_table *pcibios_get_irq_routing_table(void); |
||
31 | int pcibios_set_irq_routing(struct pci_dev *dev, int pin, int irq); |
||
32 | |||
33 | /* Dynamic DMA mapping stuff. |
||
34 | * i386 has everything mapped statically. |
||
35 | */ |
||
36 | |||
37 | #include <linux/types.h> |
||
38 | #include <linux/slab.h> |
||
39 | #include <asm/scatterlist.h> |
||
40 | #include <linux/string.h> |
||
41 | #include <asm/io.h> |
||
42 | |||
43 | struct pci_dev; |
||
44 | |||
45 | /* The PCI address space does equal the physical memory |
||
46 | * address space. The networking and block device layers use |
||
47 | * this boolean for bounce buffer decisions. |
||
48 | */ |
||
49 | #define PCI_DMA_BUS_IS_PHYS (1) |
||
50 | |||
51 | /* pci_unmap_{page,single} is a nop so... */ |
||
52 | #define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) |
||
53 | #define DECLARE_PCI_UNMAP_LEN(LEN_NAME) |
||
54 | #define pci_unmap_addr(PTR, ADDR_NAME) (0) |
||
55 | #define pci_unmap_addr_set(PTR, ADDR_NAME, VAL) do { } while (0) |
||
56 | #define pci_unmap_len(PTR, LEN_NAME) (0) |
||
57 | #define pci_unmap_len_set(PTR, LEN_NAME, VAL) do { } while (0) |
||
58 | |||
59 | /* This is always fine. */ |
||
60 | #define pci_dac_dma_supported(pci_dev, mask) (1) |
||
61 | |||
62 | static __inline__ dma64_addr_t |
||
63 | pci_dac_page_to_dma(struct pci_dev *pdev, struct page *page, unsigned long offset, int direction) |
||
64 | { |
||
65 | return ((dma64_addr_t) page_to_phys(page) + |
||
66 | (dma64_addr_t) offset); |
||
67 | } |
||
68 | |||
69 | static __inline__ struct page * |
||
70 | pci_dac_dma_to_page(struct pci_dev *pdev, dma64_addr_t dma_addr) |
||
71 | { |
||
72 | return pfn_to_page(dma_addr >> PAGE_SHIFT); |
||
73 | } |
||
74 | |||
75 | static __inline__ unsigned long |
||
76 | pci_dac_dma_to_offset(struct pci_dev *pdev, dma64_addr_t dma_addr) |
||
77 | { |
||
78 | return (dma_addr & ~PAGE_MASK); |
||
79 | } |
||
80 | |||
81 | static __inline__ void |
||
82 | pci_dac_dma_sync_single(struct pci_dev *pdev, dma64_addr_t dma_addr, size_t len, int direction) |
||
83 | { |
||
84 | flush_write_buffers(); |
||
85 | } |
||
86 | |||
87 | #define HAVE_PCI_MMAP |
||
88 | extern int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma, |
||
89 | enum pci_mmap_state mmap_state, int write_combine); |
||
90 | |||
91 | #endif /* __KERNEL__ */ |
||
92 | |||
93 | /* implement the pci_ DMA API in terms of the generic device dma_ one */ |
||
94 | #include <asm-generic/pci-dma-compat.h> |
||
95 | |||
96 | /* generic pci stuff */ |
||
97 | #include <asm-generic/pci.h> |
||
98 | |||
99 | #endif /* __i386_PCI_H */ |