]>
Commit | Line | Data |
---|---|---|
9d24c888 | 1 | #include <linux/of.h> /* linux/of.h gets to determine #include ordering */ |
9b6b563c PM |
2 | #ifndef _POWERPC_PROM_H |
3 | #define _POWERPC_PROM_H | |
4 | #ifdef __KERNEL__ | |
5 | ||
6 | /* | |
7 | * Definitions for talking to the Open Firmware PROM on | |
8 | * Power Macintosh computers. | |
9 | * | |
10 | * Copyright (C) 1996-2005 Paul Mackerras. | |
11 | * | |
12 | * Updates for PPC64 by Peter Bergner & David Engebretsen, IBM Corp. | |
13 | * | |
14 | * This program is free software; you can redistribute it and/or | |
15 | * modify it under the terms of the GNU General Public License | |
16 | * as published by the Free Software Foundation; either version | |
17 | * 2 of the License, or (at your option) any later version. | |
18 | */ | |
19 | #include <linux/types.h> | |
d8678b58 | 20 | #include <linux/of_fdt.h> |
6b884a8d | 21 | #include <linux/of_address.h> |
e3873444 | 22 | #include <linux/of_irq.h> |
9b6b563c | 23 | #include <linux/proc_fs.h> |
a9b14973 | 24 | #include <linux/platform_device.h> |
99ddef9b | 25 | #include <asm/irq.h> |
9b6b563c PM |
26 | #include <asm/atomic.h> |
27 | ||
9b6b563c PM |
28 | #define HAVE_ARCH_DEVTREE_FIXUPS |
29 | ||
40ef8cbc | 30 | #ifdef CONFIG_PPC32 |
9b6b563c PM |
31 | /* |
32 | * PCI <-> OF matching functions | |
33 | * (XXX should these be here?) | |
34 | */ | |
35 | struct pci_bus; | |
36 | struct pci_dev; | |
37 | extern int pci_device_from_OF_node(struct device_node *node, | |
38 | u8* bus, u8* devfn); | |
39 | extern struct device_node* pci_busdev_to_OF_node(struct pci_bus *, int); | |
40 | extern struct device_node* pci_device_to_OF_node(struct pci_dev *); | |
41 | extern void pci_create_OF_bus_map(void); | |
40ef8cbc PM |
42 | #endif |
43 | ||
d1405b86 | 44 | /* |
d2dd482b BH |
45 | * OF address retreival & translation |
46 | */ | |
47 | ||
837c54db BH |
48 | /* Translate a DMA address from device space to CPU space */ |
49 | extern u64 of_translate_dma_address(struct device_node *dev, | |
50 | const u32 *in_addr); | |
51 | ||
d2dd482b BH |
52 | /* Extract an address from a device, returns the region size and |
53 | * the address space flags too. The PCI version uses a BAR number | |
54 | * instead of an absolute index | |
55 | */ | |
a7f67bdf | 56 | extern const u32 *of_get_address(struct device_node *dev, int index, |
d2dd482b | 57 | u64 *size, unsigned int *flags); |
ff1f4ee9 | 58 | #ifdef CONFIG_PCI |
a7f67bdf | 59 | extern const u32 *of_get_pci_address(struct device_node *dev, int bar_no, |
d2dd482b | 60 | u64 *size, unsigned int *flags); |
ff1f4ee9 AV |
61 | #else |
62 | static inline const u32 *of_get_pci_address(struct device_node *dev, | |
63 | int bar_no, u64 *size, unsigned int *flags) | |
64 | { | |
65 | return NULL; | |
66 | } | |
67 | #endif /* CONFIG_PCI */ | |
d2dd482b | 68 | |
ff1f4ee9 | 69 | #ifdef CONFIG_PCI |
d2dd482b BH |
70 | extern int of_pci_address_to_resource(struct device_node *dev, int bar, |
71 | struct resource *r); | |
ff1f4ee9 AV |
72 | #else |
73 | static inline int of_pci_address_to_resource(struct device_node *dev, int bar, | |
74 | struct resource *r) | |
75 | { | |
76 | return -ENOSYS; | |
77 | } | |
78 | #endif /* CONFIG_PCI */ | |
d1405b86 | 79 | |
1f5bef30 GL |
80 | #ifdef CONFIG_PCI |
81 | extern unsigned long pci_address_to_pio(phys_addr_t address); | |
82 | #else | |
83 | static inline unsigned long pci_address_to_pio(phys_addr_t address) | |
84 | { | |
85 | return (unsigned long)-1; | |
86 | } | |
87 | #endif /* CONFIG_PCI */ | |
88 | ||
d4ad66fa JK |
89 | /* Parse the ibm,dma-window property of an OF node into the busno, phys and |
90 | * size parameters. | |
91 | */ | |
a7f67bdf | 92 | void of_parse_dma_window(struct device_node *dn, const void *dma_window_prop, |
d4ad66fa JK |
93 | unsigned long *busno, unsigned long *phys, unsigned long *size); |
94 | ||
b68239ee ME |
95 | extern void kdump_move_device_tree(void); |
96 | ||
acf7d768 BH |
97 | /* CPU OF node matching */ |
98 | struct device_node *of_get_cpu_node(int cpu, unsigned int *thread); | |
99 | ||
e523f723 NL |
100 | /* cache lookup */ |
101 | struct device_node *of_find_next_cache_node(struct device_node *np); | |
102 | ||
29cfe6f4 TT |
103 | /* Get the MAC address */ |
104 | extern const void *of_get_mac_address(struct device_node *np); | |
cc9fd71c | 105 | |
40681b95 | 106 | /** |
cc9fd71c BH |
107 | * of_irq_map_pci - Resolve the interrupt for a PCI device |
108 | * @pdev: the device whose interrupt is to be resolved | |
109 | * @out_irq: structure of_irq filled by this function | |
110 | * | |
111 | * This function resolves the PCI interrupt for a given PCI device. If a | |
112 | * device-node exists for a given pci_dev, it will use normal OF tree | |
113 | * walking. If not, it will implement standard swizzling and walk up the | |
114 | * PCI tree until an device-node is found, at which point it will finish | |
115 | * resolving using the OF tree walking. | |
116 | */ | |
117 | struct pci_dev; | |
118 | extern int of_irq_map_pci(struct pci_dev *pdev, struct of_irq *out_irq); | |
119 | ||
9b6b563c PM |
120 | #endif /* __KERNEL__ */ |
121 | #endif /* _POWERPC_PROM_H */ |