diff options
author | Linus Torvalds <torvalds@g5.osdl.org> | 2006-06-24 17:48:24 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-06-24 17:48:24 -0400 |
commit | b9d8be7828e974f076717f0da608d052440fe192 (patch) | |
tree | d4bc4d3e13f816a76b1a02bde922ee7ad0dbdbd9 /include | |
parent | d02f40e81e003be6ddba5c176f2e40ea290c3729 (diff) | |
parent | 1812fd40725c13cf050c29791a6dd35d593eb8d8 (diff) |
Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6: (40 commits)
[SPARC64]: Update defconfig.
[SPARC64]: Make auxio a real driver.
[PARPORT] sunbpp: Convert to new SBUS device framework.
[Documentation]: Update probing info in sbus_drivers.txt
[SCSI] qlogicpti: Convert to new SBUS device framework.
[SCSI] esp: Fix bug in esp_remove_common.
[NET] sunhme: Kill useless loop over sdevs in quattro_sbus_find().
[NET] myri_sbus: Kill unused next_module struct member.
[NET] myri_sbus: Convert to new SBUS device layer.
[NET] sunqe: Convert to new SBUS driver layer.
[NET] sunbmac: Convert over to new SBUS device framework.
[NET] sunlance: Convert to new SBUS driver framework.
[NET] sunhme: Convert to new SBUS driver framework.
[NET] sunhme: Kill __sparc__ and __sparc_v9__ ifdefs.
[SCSI] sparc: Port esp to new SBUS driver layer.
[SOUND] sparc: Port amd7930 to new SBUS device layer.
[SBUS]: Rewrite and plug into of_device framework.
[SPARC]: Port of_device layer and make ebus use it.
[SPARC]: Port sparc64 in-kernel device tree code to sparc32.
[SPARC64]: Add of_device layer and make ebus/isa use it.
...
Diffstat (limited to 'include')
-rw-r--r-- | include/asm-sparc/ebus.h | 17 | ||||
-rw-r--r-- | include/asm-sparc/of_device.h | 63 | ||||
-rw-r--r-- | include/asm-sparc/pbm.h | 3 | ||||
-rw-r--r-- | include/asm-sparc/prom.h | 98 | ||||
-rw-r--r-- | include/asm-sparc/sbus.h | 28 | ||||
-rw-r--r-- | include/asm-sparc64/ebus.h | 20 | ||||
-rw-r--r-- | include/asm-sparc64/fhc.h | 7 | ||||
-rw-r--r-- | include/asm-sparc64/floppy.h | 27 | ||||
-rw-r--r-- | include/asm-sparc64/isa.h | 21 | ||||
-rw-r--r-- | include/asm-sparc64/of_device.h | 64 | ||||
-rw-r--r-- | include/asm-sparc64/oplib.h | 5 | ||||
-rw-r--r-- | include/asm-sparc64/parport.h | 25 | ||||
-rw-r--r-- | include/asm-sparc64/pbm.h | 15 | ||||
-rw-r--r-- | include/asm-sparc64/pgtable.h | 2 | ||||
-rw-r--r-- | include/asm-sparc64/prom.h | 98 | ||||
-rw-r--r-- | include/asm-sparc64/sbus.h | 29 | ||||
-rw-r--r-- | include/asm-sparc64/vdev.h | 5 |
17 files changed, 435 insertions, 92 deletions
diff --git a/include/asm-sparc/ebus.h b/include/asm-sparc/ebus.h index 2d6a997c5b0c..54652887c127 100644 --- a/include/asm-sparc/ebus.h +++ b/include/asm-sparc/ebus.h | |||
@@ -13,13 +13,14 @@ | |||
13 | #include <linux/ioport.h> | 13 | #include <linux/ioport.h> |
14 | #endif | 14 | #endif |
15 | #include <asm/oplib.h> | 15 | #include <asm/oplib.h> |
16 | #include <asm/prom.h> | ||
17 | #include <asm/of_device.h> | ||
16 | 18 | ||
17 | struct linux_ebus_child { | 19 | struct linux_ebus_child { |
18 | struct linux_ebus_child *next; | 20 | struct linux_ebus_child *next; |
19 | struct linux_ebus_device *parent; | 21 | struct linux_ebus_device *parent; |
20 | struct linux_ebus *bus; | 22 | struct linux_ebus *bus; |
21 | int prom_node; | 23 | struct device_node *prom_node; |
22 | char prom_name[64]; | ||
23 | struct resource resource[PROMREG_MAX]; | 24 | struct resource resource[PROMREG_MAX]; |
24 | int num_addrs; | 25 | int num_addrs; |
25 | unsigned int irqs[PROMINTR_MAX]; | 26 | unsigned int irqs[PROMINTR_MAX]; |
@@ -27,27 +28,27 @@ struct linux_ebus_child { | |||
27 | }; | 28 | }; |
28 | 29 | ||
29 | struct linux_ebus_device { | 30 | struct linux_ebus_device { |
31 | struct of_device ofdev; | ||
30 | struct linux_ebus_device *next; | 32 | struct linux_ebus_device *next; |
31 | struct linux_ebus_child *children; | 33 | struct linux_ebus_child *children; |
32 | struct linux_ebus *bus; | 34 | struct linux_ebus *bus; |
33 | int prom_node; | 35 | struct device_node *prom_node; |
34 | char prom_name[64]; | ||
35 | struct resource resource[PROMREG_MAX]; | 36 | struct resource resource[PROMREG_MAX]; |
36 | int num_addrs; | 37 | int num_addrs; |
37 | unsigned int irqs[PROMINTR_MAX]; | 38 | unsigned int irqs[PROMINTR_MAX]; |
38 | int num_irqs; | 39 | int num_irqs; |
39 | }; | 40 | }; |
41 | #define to_ebus_device(d) container_of(d, struct linux_ebus_device, ofdev.dev) | ||
40 | 42 | ||
41 | struct linux_ebus { | 43 | struct linux_ebus { |
44 | struct of_device ofdev; | ||
42 | struct linux_ebus *next; | 45 | struct linux_ebus *next; |
43 | struct linux_ebus_device *devices; | 46 | struct linux_ebus_device *devices; |
44 | struct linux_pbm_info *parent; | 47 | struct linux_pbm_info *parent; |
45 | struct pci_dev *self; | 48 | struct pci_dev *self; |
46 | int prom_node; | 49 | struct device_node *prom_node; |
47 | char prom_name[64]; | ||
48 | struct linux_prom_ebus_ranges ebus_ranges[PROMREG_MAX]; | ||
49 | int num_ebus_ranges; | ||
50 | }; | 50 | }; |
51 | #define to_ebus(d) container_of(d, struct linux_ebus, ofdev.dev) | ||
51 | 52 | ||
52 | struct linux_ebus_dma { | 53 | struct linux_ebus_dma { |
53 | unsigned int dcsr; | 54 | unsigned int dcsr; |
diff --git a/include/asm-sparc/of_device.h b/include/asm-sparc/of_device.h new file mode 100644 index 000000000000..4816d102f918 --- /dev/null +++ b/include/asm-sparc/of_device.h | |||
@@ -0,0 +1,63 @@ | |||
1 | #ifndef _ASM_SPARC_OF_DEVICE_H | ||
2 | #define _ASM_SPARC_OF_DEVICE_H | ||
3 | #ifdef __KERNEL__ | ||
4 | |||
5 | #include <linux/device.h> | ||
6 | #include <linux/mod_devicetable.h> | ||
7 | #include <asm/prom.h> | ||
8 | |||
9 | extern struct bus_type ebus_bus_type; | ||
10 | extern struct bus_type sbus_bus_type; | ||
11 | |||
12 | /* | ||
13 | * The of_device is a kind of "base class" that is a superset of | ||
14 | * struct device for use by devices attached to an OF node and | ||
15 | * probed using OF properties. | ||
16 | */ | ||
17 | struct of_device | ||
18 | { | ||
19 | struct device_node *node; /* OF device node */ | ||
20 | struct device dev; /* Generic device interface */ | ||
21 | }; | ||
22 | #define to_of_device(d) container_of(d, struct of_device, dev) | ||
23 | |||
24 | extern const struct of_device_id *of_match_device( | ||
25 | const struct of_device_id *matches, const struct of_device *dev); | ||
26 | |||
27 | extern struct of_device *of_dev_get(struct of_device *dev); | ||
28 | extern void of_dev_put(struct of_device *dev); | ||
29 | |||
30 | /* | ||
31 | * An of_platform_driver driver is attached to a basic of_device on | ||
32 | * the ISA, EBUS, and SBUS busses on sparc64. | ||
33 | */ | ||
34 | struct of_platform_driver | ||
35 | { | ||
36 | char *name; | ||
37 | struct of_device_id *match_table; | ||
38 | struct module *owner; | ||
39 | |||
40 | int (*probe)(struct of_device* dev, const struct of_device_id *match); | ||
41 | int (*remove)(struct of_device* dev); | ||
42 | |||
43 | int (*suspend)(struct of_device* dev, pm_message_t state); | ||
44 | int (*resume)(struct of_device* dev); | ||
45 | int (*shutdown)(struct of_device* dev); | ||
46 | |||
47 | struct device_driver driver; | ||
48 | }; | ||
49 | #define to_of_platform_driver(drv) container_of(drv,struct of_platform_driver, driver) | ||
50 | |||
51 | extern int of_register_driver(struct of_platform_driver *drv, | ||
52 | struct bus_type *bus); | ||
53 | extern void of_unregister_driver(struct of_platform_driver *drv); | ||
54 | extern int of_device_register(struct of_device *ofdev); | ||
55 | extern void of_device_unregister(struct of_device *ofdev); | ||
56 | extern struct of_device *of_platform_device_create(struct device_node *np, | ||
57 | const char *bus_id, | ||
58 | struct device *parent, | ||
59 | struct bus_type *bus); | ||
60 | extern void of_release_dev(struct device *dev); | ||
61 | |||
62 | #endif /* __KERNEL__ */ | ||
63 | #endif /* _ASM_SPARC_OF_DEVICE_H */ | ||
diff --git a/include/asm-sparc/pbm.h b/include/asm-sparc/pbm.h index 0aba3a82c2eb..fedd9c6e875c 100644 --- a/include/asm-sparc/pbm.h +++ b/include/asm-sparc/pbm.h | |||
@@ -22,6 +22,7 @@ | |||
22 | 22 | ||
23 | #include <linux/pci.h> | 23 | #include <linux/pci.h> |
24 | #include <asm/oplib.h> | 24 | #include <asm/oplib.h> |
25 | #include <asm/prom.h> | ||
25 | 26 | ||
26 | struct linux_pbm_info { | 27 | struct linux_pbm_info { |
27 | int prom_node; | 28 | int prom_node; |
@@ -40,7 +41,7 @@ struct linux_pbm_info { | |||
40 | */ | 41 | */ |
41 | struct pcidev_cookie { | 42 | struct pcidev_cookie { |
42 | struct linux_pbm_info *pbm; | 43 | struct linux_pbm_info *pbm; |
43 | int prom_node; | 44 | struct device_node *prom_node; |
44 | }; | 45 | }; |
45 | 46 | ||
46 | #endif /* !(__SPARC_PBM_H) */ | 47 | #endif /* !(__SPARC_PBM_H) */ |
diff --git a/include/asm-sparc/prom.h b/include/asm-sparc/prom.h new file mode 100644 index 000000000000..c5e3d26eabd3 --- /dev/null +++ b/include/asm-sparc/prom.h | |||
@@ -0,0 +1,98 @@ | |||
1 | #ifndef _SPARC_PROM_H | ||
2 | #define _SPARC_PROM_H | ||
3 | #ifdef __KERNEL__ | ||
4 | |||
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 | * Updates for SPARC32 by David S. Miller | ||
14 | * | ||
15 | * This program is free software; you can redistribute it and/or | ||
16 | * modify it under the terms of the GNU General Public License | ||
17 | * as published by the Free Software Foundation; either version | ||
18 | * 2 of the License, or (at your option) any later version. | ||
19 | */ | ||
20 | |||
21 | #include <linux/types.h> | ||
22 | #include <linux/proc_fs.h> | ||
23 | #include <asm/atomic.h> | ||
24 | |||
25 | typedef u32 phandle; | ||
26 | typedef u32 ihandle; | ||
27 | |||
28 | struct interrupt_info { | ||
29 | int line; | ||
30 | int sense; /* +ve/-ve logic, edge or level, etc. */ | ||
31 | }; | ||
32 | |||
33 | struct property { | ||
34 | char *name; | ||
35 | int length; | ||
36 | void *value; | ||
37 | struct property *next; | ||
38 | }; | ||
39 | |||
40 | struct device_node { | ||
41 | char *name; | ||
42 | char *type; | ||
43 | phandle node; | ||
44 | phandle linux_phandle; | ||
45 | int n_intrs; | ||
46 | struct interrupt_info *intrs; | ||
47 | char *path_component_name; | ||
48 | char *full_name; | ||
49 | |||
50 | struct property *properties; | ||
51 | struct property *deadprops; /* removed properties */ | ||
52 | struct device_node *parent; | ||
53 | struct device_node *child; | ||
54 | struct device_node *sibling; | ||
55 | struct device_node *next; /* next device of same type */ | ||
56 | struct device_node *allnext; /* next in list of all nodes */ | ||
57 | struct proc_dir_entry *pde; /* this node's proc directory */ | ||
58 | struct kref kref; | ||
59 | unsigned long _flags; | ||
60 | void *data; | ||
61 | }; | ||
62 | |||
63 | static inline void set_node_proc_entry(struct device_node *dn, struct proc_dir_entry *de) | ||
64 | { | ||
65 | dn->pde = de; | ||
66 | } | ||
67 | |||
68 | extern struct device_node *of_find_node_by_name(struct device_node *from, | ||
69 | const char *name); | ||
70 | #define for_each_node_by_name(dn, name) \ | ||
71 | for (dn = of_find_node_by_name(NULL, name); dn; \ | ||
72 | dn = of_find_node_by_name(dn, name)) | ||
73 | extern struct device_node *of_find_node_by_type(struct device_node *from, | ||
74 | const char *type); | ||
75 | #define for_each_node_by_type(dn, type) \ | ||
76 | for (dn = of_find_node_by_type(NULL, type); dn; \ | ||
77 | dn = of_find_node_by_type(dn, type)) | ||
78 | extern struct device_node *of_find_compatible_node(struct device_node *from, | ||
79 | const char *type, const char *compat); | ||
80 | extern struct device_node *of_find_node_by_path(const char *path); | ||
81 | extern struct device_node *of_find_node_by_phandle(phandle handle); | ||
82 | extern struct device_node *of_get_parent(const struct device_node *node); | ||
83 | extern struct device_node *of_get_next_child(const struct device_node *node, | ||
84 | struct device_node *prev); | ||
85 | extern struct property *of_find_property(struct device_node *np, | ||
86 | const char *name, | ||
87 | int *lenp); | ||
88 | extern int of_device_is_compatible(struct device_node *device, const char *); | ||
89 | extern void *of_get_property(struct device_node *node, const char *name, | ||
90 | int *lenp); | ||
91 | extern int of_getintprop_default(struct device_node *np, | ||
92 | const char *name, | ||
93 | int def); | ||
94 | |||
95 | extern void prom_build_devicetree(void); | ||
96 | |||
97 | #endif /* __KERNEL__ */ | ||
98 | #endif /* _SPARC_PROM_H */ | ||
diff --git a/include/asm-sparc/sbus.h b/include/asm-sparc/sbus.h index a13cddcecec5..d036e4419d79 100644 --- a/include/asm-sparc/sbus.h +++ b/include/asm-sparc/sbus.h | |||
@@ -11,7 +11,8 @@ | |||
11 | #include <linux/ioport.h> | 11 | #include <linux/ioport.h> |
12 | 12 | ||
13 | #include <asm/oplib.h> | 13 | #include <asm/oplib.h> |
14 | /* #include <asm/iommu.h> */ /* Unused since we use opaque iommu (|io-unit) */ | 14 | #include <asm/prom.h> |
15 | #include <asm/of_device.h> | ||
15 | #include <asm/scatterlist.h> | 16 | #include <asm/scatterlist.h> |
16 | 17 | ||
17 | /* We scan which devices are on the SBus using the PROM node device | 18 | /* We scan which devices are on the SBus using the PROM node device |
@@ -42,18 +43,19 @@ struct sbus_bus; | |||
42 | 43 | ||
43 | /* Linux SBUS device tables */ | 44 | /* Linux SBUS device tables */ |
44 | struct sbus_dev { | 45 | struct sbus_dev { |
45 | struct sbus_bus *bus; /* Back ptr to sbus */ | 46 | struct of_device ofdev; |
46 | struct sbus_dev *next; /* next device on this SBus or null */ | 47 | struct sbus_bus *bus; |
47 | struct sbus_dev *child; /* For ledma and espdma on sun4m */ | 48 | struct sbus_dev *next; |
48 | struct sbus_dev *parent; /* Parent device if not toplevel */ | 49 | struct sbus_dev *child; |
49 | int prom_node; /* PROM device tree node for this device */ | 50 | struct sbus_dev *parent; |
50 | char prom_name[64]; /* PROM device name */ | 51 | int prom_node; |
52 | char prom_name[64]; | ||
51 | int slot; | 53 | int slot; |
52 | 54 | ||
53 | struct resource resource[PROMREG_MAX]; | 55 | struct resource resource[PROMREG_MAX]; |
54 | 56 | ||
55 | struct linux_prom_registers reg_addrs[PROMREG_MAX]; | 57 | struct linux_prom_registers reg_addrs[PROMREG_MAX]; |
56 | int num_registers, ranges_applied; | 58 | int num_registers; |
57 | 59 | ||
58 | struct linux_prom_ranges device_ranges[PROMREG_MAX]; | 60 | struct linux_prom_ranges device_ranges[PROMREG_MAX]; |
59 | int num_device_ranges; | 61 | int num_device_ranges; |
@@ -61,9 +63,11 @@ struct sbus_dev { | |||
61 | unsigned int irqs[4]; | 63 | unsigned int irqs[4]; |
62 | int num_irqs; | 64 | int num_irqs; |
63 | }; | 65 | }; |
66 | #define to_sbus_device(d) container_of(d, struct sbus_dev, ofdev.dev) | ||
64 | 67 | ||
65 | /* This struct describes the SBus(s) found on this machine. */ | 68 | /* This struct describes the SBus(s) found on this machine. */ |
66 | struct sbus_bus { | 69 | struct sbus_bus { |
70 | struct of_device ofdev; | ||
67 | void *iommu; /* Opaque IOMMU cookie */ | 71 | void *iommu; /* Opaque IOMMU cookie */ |
68 | struct sbus_dev *devices; /* Link to devices on this SBus */ | 72 | struct sbus_dev *devices; /* Link to devices on this SBus */ |
69 | struct sbus_bus *next; /* next SBus, if more than one SBus */ | 73 | struct sbus_bus *next; /* next SBus, if more than one SBus */ |
@@ -77,6 +81,7 @@ struct sbus_bus { | |||
77 | int devid; | 81 | int devid; |
78 | int board; | 82 | int board; |
79 | }; | 83 | }; |
84 | #define to_sbus(d) container_of(d, struct sbus_bus, ofdev.dev) | ||
80 | 85 | ||
81 | extern struct sbus_bus *sbus_root; | 86 | extern struct sbus_bus *sbus_root; |
82 | 87 | ||
@@ -102,6 +107,7 @@ sbus_is_slave(struct sbus_dev *dev) | |||
102 | #define sbus_can_dma_64bit(sdev) (0) /* actually, sparc_cpu_model==sun4d */ | 107 | #define sbus_can_dma_64bit(sdev) (0) /* actually, sparc_cpu_model==sun4d */ |
103 | #define sbus_can_burst64(sdev) (0) /* actually, sparc_cpu_model==sun4d */ | 108 | #define sbus_can_burst64(sdev) (0) /* actually, sparc_cpu_model==sun4d */ |
104 | extern void sbus_set_sbus64(struct sbus_dev *, int); | 109 | extern void sbus_set_sbus64(struct sbus_dev *, int); |
110 | extern void sbus_fill_device_irq(struct sbus_dev *); | ||
105 | 111 | ||
106 | /* These yield IOMMU mappings in consistent mode. */ | 112 | /* These yield IOMMU mappings in consistent mode. */ |
107 | extern void *sbus_alloc_consistent(struct sbus_dev *, long, u32 *dma_addrp); | 113 | extern void *sbus_alloc_consistent(struct sbus_dev *, long, u32 *dma_addrp); |
@@ -139,4 +145,10 @@ extern void sbus_dma_sync_sg_for_device(struct sbus_dev *, struct scatterlist *, | |||
139 | BTFIXUPDEF_CALL(unsigned int, sbint_to_irq, struct sbus_dev *sdev, unsigned int) | 145 | BTFIXUPDEF_CALL(unsigned int, sbint_to_irq, struct sbus_dev *sdev, unsigned int) |
140 | #define sbint_to_irq(sdev, sbint) BTFIXUP_CALL(sbint_to_irq)(sdev, sbint) | 146 | #define sbint_to_irq(sdev, sbint) BTFIXUP_CALL(sbint_to_irq)(sdev, sbint) |
141 | 147 | ||
148 | extern void sbus_arch_bus_ranges_init(struct device_node *, struct sbus_bus *); | ||
149 | extern void sbus_setup_iommu(struct sbus_bus *, struct device_node *); | ||
150 | extern void sbus_setup_arch_props(struct sbus_bus *, struct device_node *); | ||
151 | extern int sbus_arch_preinit(void); | ||
152 | extern void sbus_arch_postinit(void); | ||
153 | |||
142 | #endif /* !(_SPARC_SBUS_H) */ | 154 | #endif /* !(_SPARC_SBUS_H) */ |
diff --git a/include/asm-sparc64/ebus.h b/include/asm-sparc64/ebus.h index 7a408a030f52..a4afe9d5703a 100644 --- a/include/asm-sparc64/ebus.h +++ b/include/asm-sparc64/ebus.h | |||
@@ -10,13 +10,14 @@ | |||
10 | 10 | ||
11 | #include <asm/pbm.h> | 11 | #include <asm/pbm.h> |
12 | #include <asm/oplib.h> | 12 | #include <asm/oplib.h> |
13 | #include <asm/prom.h> | ||
14 | #include <asm/of_device.h> | ||
13 | 15 | ||
14 | struct linux_ebus_child { | 16 | struct linux_ebus_child { |
15 | struct linux_ebus_child *next; | 17 | struct linux_ebus_child *next; |
16 | struct linux_ebus_device *parent; | 18 | struct linux_ebus_device *parent; |
17 | struct linux_ebus *bus; | 19 | struct linux_ebus *bus; |
18 | int prom_node; | 20 | struct device_node *prom_node; |
19 | char prom_name[64]; | ||
20 | struct resource resource[PROMREG_MAX]; | 21 | struct resource resource[PROMREG_MAX]; |
21 | int num_addrs; | 22 | int num_addrs; |
22 | unsigned int irqs[PROMINTR_MAX]; | 23 | unsigned int irqs[PROMINTR_MAX]; |
@@ -24,32 +25,29 @@ struct linux_ebus_child { | |||
24 | }; | 25 | }; |
25 | 26 | ||
26 | struct linux_ebus_device { | 27 | struct linux_ebus_device { |
28 | struct of_device ofdev; | ||
27 | struct linux_ebus_device *next; | 29 | struct linux_ebus_device *next; |
28 | struct linux_ebus_child *children; | 30 | struct linux_ebus_child *children; |
29 | struct linux_ebus *bus; | 31 | struct linux_ebus *bus; |
30 | int prom_node; | 32 | struct device_node *prom_node; |
31 | char prom_name[64]; | ||
32 | struct resource resource[PROMREG_MAX]; | 33 | struct resource resource[PROMREG_MAX]; |
33 | int num_addrs; | 34 | int num_addrs; |
34 | unsigned int irqs[PROMINTR_MAX]; | 35 | unsigned int irqs[PROMINTR_MAX]; |
35 | int num_irqs; | 36 | int num_irqs; |
36 | }; | 37 | }; |
38 | #define to_ebus_device(d) container_of(d, struct linux_ebus_device, ofdev.dev) | ||
37 | 39 | ||
38 | struct linux_ebus { | 40 | struct linux_ebus { |
41 | struct of_device ofdev; | ||
39 | struct linux_ebus *next; | 42 | struct linux_ebus *next; |
40 | struct linux_ebus_device *devices; | 43 | struct linux_ebus_device *devices; |
41 | struct pci_pbm_info *parent; | 44 | struct pci_pbm_info *parent; |
42 | struct pci_dev *self; | 45 | struct pci_dev *self; |
43 | int index; | 46 | int index; |
44 | int is_rio; | 47 | int is_rio; |
45 | int prom_node; | 48 | struct device_node *prom_node; |
46 | char prom_name[64]; | ||
47 | struct linux_prom_ebus_ranges ebus_ranges[PROMREG_MAX]; | ||
48 | int num_ebus_ranges; | ||
49 | struct linux_prom_ebus_intmap ebus_intmap[PROMREG_MAX]; | ||
50 | int num_ebus_intmap; | ||
51 | struct linux_prom_ebus_intmask ebus_intmask; | ||
52 | }; | 49 | }; |
50 | #define to_ebus(d) container_of(d, struct linux_ebus, ofdev.dev) | ||
53 | 51 | ||
54 | struct ebus_dma_info { | 52 | struct ebus_dma_info { |
55 | spinlock_t lock; | 53 | spinlock_t lock; |
diff --git a/include/asm-sparc64/fhc.h b/include/asm-sparc64/fhc.h index f29eaa254055..9e7f1b0d78b9 100644 --- a/include/asm-sparc64/fhc.h +++ b/include/asm-sparc64/fhc.h | |||
@@ -10,6 +10,7 @@ | |||
10 | #include <linux/timer.h> | 10 | #include <linux/timer.h> |
11 | 11 | ||
12 | #include <asm/oplib.h> | 12 | #include <asm/oplib.h> |
13 | #include <asm/prom.h> | ||
13 | #include <asm/upa.h> | 14 | #include <asm/upa.h> |
14 | 15 | ||
15 | struct linux_fhc; | 16 | struct linux_fhc; |
@@ -34,8 +35,7 @@ struct linux_central { | |||
34 | unsigned long clkregs; | 35 | unsigned long clkregs; |
35 | unsigned long clkver; | 36 | unsigned long clkver; |
36 | int slots; | 37 | int slots; |
37 | int prom_node; | 38 | struct device_node *prom_node; |
38 | char prom_name[64]; | ||
39 | 39 | ||
40 | struct linux_prom_ranges central_ranges[PROMREG_MAX]; | 40 | struct linux_prom_ranges central_ranges[PROMREG_MAX]; |
41 | int num_central_ranges; | 41 | int num_central_ranges; |
@@ -112,8 +112,7 @@ struct linux_fhc { | |||
112 | struct fhc_regs fhc_regs; | 112 | struct fhc_regs fhc_regs; |
113 | int board; | 113 | int board; |
114 | int jtag_master; | 114 | int jtag_master; |
115 | int prom_node; | 115 | struct device_node *prom_node; |
116 | char prom_name[64]; | ||
117 | 116 | ||
118 | struct linux_prom_ranges fhc_ranges[PROMREG_MAX]; | 117 | struct linux_prom_ranges fhc_ranges[PROMREG_MAX]; |
119 | int num_fhc_ranges; | 118 | int num_fhc_ranges; |
diff --git a/include/asm-sparc64/floppy.h b/include/asm-sparc64/floppy.h index 07ccd6f04b52..f8d57bb5570c 100644 --- a/include/asm-sparc64/floppy.h +++ b/include/asm-sparc64/floppy.h | |||
@@ -498,15 +498,14 @@ static int sun_pci_fd_test_drive(unsigned long port, int drive) | |||
498 | #ifdef CONFIG_PCI | 498 | #ifdef CONFIG_PCI |
499 | static int __init ebus_fdthree_p(struct linux_ebus_device *edev) | 499 | static int __init ebus_fdthree_p(struct linux_ebus_device *edev) |
500 | { | 500 | { |
501 | if (!strcmp(edev->prom_name, "fdthree")) | 501 | if (!strcmp(edev->prom_node->name, "fdthree")) |
502 | return 1; | 502 | return 1; |
503 | if (!strcmp(edev->prom_name, "floppy")) { | 503 | if (!strcmp(edev->prom_node->name, "floppy")) { |
504 | char compat[16]; | 504 | char *compat; |
505 | prom_getstring(edev->prom_node, | 505 | |
506 | "compatible", | 506 | compat = of_get_property(edev->prom_node, |
507 | compat, sizeof(compat)); | 507 | "compatible", NULL); |
508 | compat[15] = '\0'; | 508 | if (compat && !strcmp(compat, "fdthree")) |
509 | if (!strcmp(compat, "fdthree")) | ||
510 | return 1; | 509 | return 1; |
511 | } | 510 | } |
512 | return 0; | 511 | return 0; |
@@ -524,12 +523,12 @@ static unsigned long __init isa_floppy_init(void) | |||
524 | 523 | ||
525 | for_each_isa(isa_br) { | 524 | for_each_isa(isa_br) { |
526 | for_each_isadev(isa_dev, isa_br) { | 525 | for_each_isadev(isa_dev, isa_br) { |
527 | if (!strcmp(isa_dev->prom_name, "dma")) { | 526 | if (!strcmp(isa_dev->prom_node->name, "dma")) { |
528 | struct sparc_isa_device *child = | 527 | struct sparc_isa_device *child = |
529 | isa_dev->child; | 528 | isa_dev->child; |
530 | 529 | ||
531 | while (child) { | 530 | while (child) { |
532 | if (!strcmp(child->prom_name, | 531 | if (!strcmp(child->prom_node->name, |
533 | "floppy")) { | 532 | "floppy")) { |
534 | isa_dev = child; | 533 | isa_dev = child; |
535 | goto isa_done; | 534 | goto isa_done; |
@@ -614,6 +613,7 @@ static unsigned long __init sun_floppy_init(void) | |||
614 | struct linux_ebus_device *edev = NULL; | 613 | struct linux_ebus_device *edev = NULL; |
615 | unsigned long config = 0; | 614 | unsigned long config = 0; |
616 | void __iomem *auxio_reg; | 615 | void __iomem *auxio_reg; |
616 | char *state_prop; | ||
617 | 617 | ||
618 | for_each_ebus(ebus) { | 618 | for_each_ebus(ebus) { |
619 | for_each_ebusdev(edev, ebus) { | 619 | for_each_ebusdev(edev, ebus) { |
@@ -630,9 +630,8 @@ static unsigned long __init sun_floppy_init(void) | |||
630 | #endif | 630 | #endif |
631 | } | 631 | } |
632 | 632 | ||
633 | prom_getproperty(edev->prom_node, "status", | 633 | state_prop = of_get_property(edev->prom_node, "status", NULL); |
634 | state, sizeof(state)); | 634 | if (state_prop && !strncmp(state_prop, "disabled", 8)) |
635 | if (!strncmp(state, "disabled", 8)) | ||
636 | return 0; | 635 | return 0; |
637 | 636 | ||
638 | FLOPPY_IRQ = edev->irqs[0]; | 637 | FLOPPY_IRQ = edev->irqs[0]; |
@@ -703,7 +702,7 @@ static unsigned long __init sun_floppy_init(void) | |||
703 | */ | 702 | */ |
704 | for_each_ebus(ebus) { | 703 | for_each_ebus(ebus) { |
705 | for_each_ebusdev(edev, ebus) { | 704 | for_each_ebusdev(edev, ebus) { |
706 | if (!strcmp(edev->prom_name, "ecpp")) { | 705 | if (!strcmp(edev->prom_node->name, "ecpp")) { |
707 | config = edev->resource[1].start; | 706 | config = edev->resource[1].start; |
708 | goto config_done; | 707 | goto config_done; |
709 | } | 708 | } |
diff --git a/include/asm-sparc64/isa.h b/include/asm-sparc64/isa.h index 4601bbfc3e7b..d9728b9031fc 100644 --- a/include/asm-sparc64/isa.h +++ b/include/asm-sparc64/isa.h | |||
@@ -9,37 +9,32 @@ | |||
9 | 9 | ||
10 | #include <asm/pbm.h> | 10 | #include <asm/pbm.h> |
11 | #include <asm/oplib.h> | 11 | #include <asm/oplib.h> |
12 | #include <asm/prom.h> | ||
13 | #include <asm/of_device.h> | ||
12 | 14 | ||
13 | struct sparc_isa_bridge; | 15 | struct sparc_isa_bridge; |
14 | 16 | ||
15 | struct sparc_isa_device { | 17 | struct sparc_isa_device { |
18 | struct of_device ofdev; | ||
16 | struct sparc_isa_device *next; | 19 | struct sparc_isa_device *next; |
17 | struct sparc_isa_device *child; | 20 | struct sparc_isa_device *child; |
18 | struct sparc_isa_bridge *bus; | 21 | struct sparc_isa_bridge *bus; |
19 | int prom_node; | 22 | struct device_node *prom_node; |
20 | char prom_name[64]; | ||
21 | char compatible[64]; | ||
22 | struct resource resource; | 23 | struct resource resource; |
23 | unsigned int irq; | 24 | unsigned int irq; |
24 | }; | 25 | }; |
26 | #define to_isa_device(d) container_of(d, struct sparc_isa_device, ofdev.dev) | ||
25 | 27 | ||
26 | struct sparc_isa_bridge { | 28 | struct sparc_isa_bridge { |
29 | struct of_device ofdev; | ||
27 | struct sparc_isa_bridge *next; | 30 | struct sparc_isa_bridge *next; |
28 | struct sparc_isa_device *devices; | 31 | struct sparc_isa_device *devices; |
29 | struct pci_pbm_info *parent; | 32 | struct pci_pbm_info *parent; |
30 | struct pci_dev *self; | 33 | struct pci_dev *self; |
31 | int index; | 34 | int index; |
32 | int prom_node; | 35 | struct device_node *prom_node; |
33 | char prom_name[64]; | ||
34 | #define linux_prom_isa_ranges linux_prom_ebus_ranges | ||
35 | struct linux_prom_isa_ranges isa_ranges[PROMREG_MAX]; | ||
36 | int num_isa_ranges; | ||
37 | #define linux_prom_isa_intmap linux_prom_ebus_intmap | ||
38 | struct linux_prom_isa_intmap isa_intmap[PROMREG_MAX]; | ||
39 | int num_isa_intmap; | ||
40 | #define linux_prom_isa_intmask linux_prom_ebus_intmask | ||
41 | struct linux_prom_isa_intmap isa_intmask; | ||
42 | }; | 36 | }; |
37 | #define to_isa_bridge(d) container_of(d, struct sparc_isa_bridge, ofdev.dev) | ||
43 | 38 | ||
44 | extern struct sparc_isa_bridge *isa_chain; | 39 | extern struct sparc_isa_bridge *isa_chain; |
45 | 40 | ||
diff --git a/include/asm-sparc64/of_device.h b/include/asm-sparc64/of_device.h new file mode 100644 index 000000000000..024088ef9d27 --- /dev/null +++ b/include/asm-sparc64/of_device.h | |||
@@ -0,0 +1,64 @@ | |||
1 | #ifndef _ASM_SPARC64_OF_DEVICE_H | ||
2 | #define _ASM_SPARC64_OF_DEVICE_H | ||
3 | #ifdef __KERNEL__ | ||
4 | |||
5 | #include <linux/device.h> | ||
6 | #include <linux/mod_devicetable.h> | ||
7 | #include <asm/prom.h> | ||
8 | |||
9 | extern struct bus_type isa_bus_type; | ||
10 | extern struct bus_type ebus_bus_type; | ||
11 | extern struct bus_type sbus_bus_type; | ||
12 | |||
13 | /* | ||
14 | * The of_device is a kind of "base class" that is a superset of | ||
15 | * struct device for use by devices attached to an OF node and | ||
16 | * probed using OF properties. | ||
17 | */ | ||
18 | struct of_device | ||
19 | { | ||
20 | struct device_node *node; /* OF device node */ | ||
21 | struct device dev; /* Generic device interface */ | ||
22 | }; | ||
23 | #define to_of_device(d) container_of(d, struct of_device, dev) | ||
24 | |||
25 | extern const struct of_device_id *of_match_device( | ||
26 | const struct of_device_id *matches, const struct of_device *dev); | ||
27 | |||
28 | extern struct of_device *of_dev_get(struct of_device *dev); | ||
29 | extern void of_dev_put(struct of_device *dev); | ||
30 | |||
31 | /* | ||
32 | * An of_platform_driver driver is attached to a basic of_device on | ||
33 | * the ISA, EBUS, and SBUS busses on sparc64. | ||
34 | */ | ||
35 | struct of_platform_driver | ||
36 | { | ||
37 | char *name; | ||
38 | struct of_device_id *match_table; | ||
39 | struct module *owner; | ||
40 | |||
41 | int (*probe)(struct of_device* dev, const struct of_device_id *match); | ||
42 | int (*remove)(struct of_device* dev); | ||
43 | |||
44 | int (*suspend)(struct of_device* dev, pm_message_t state); | ||
45 | int (*resume)(struct of_device* dev); | ||
46 | int (*shutdown)(struct of_device* dev); | ||
47 | |||
48 | struct device_driver driver; | ||
49 | }; | ||
50 | #define to_of_platform_driver(drv) container_of(drv,struct of_platform_driver, driver) | ||
51 | |||
52 | extern int of_register_driver(struct of_platform_driver *drv, | ||
53 | struct bus_type *bus); | ||
54 | extern void of_unregister_driver(struct of_platform_driver *drv); | ||
55 | extern int of_device_register(struct of_device *ofdev); | ||
56 | extern void of_device_unregister(struct of_device *ofdev); | ||
57 | extern struct of_device *of_platform_device_create(struct device_node *np, | ||
58 | const char *bus_id, | ||
59 | struct device *parent, | ||
60 | struct bus_type *bus); | ||
61 | extern void of_release_dev(struct device *dev); | ||
62 | |||
63 | #endif /* __KERNEL__ */ | ||
64 | #endif /* _ASM_SPARC64_OF_DEVICE_H */ | ||
diff --git a/include/asm-sparc64/oplib.h b/include/asm-sparc64/oplib.h index dea3e73f0955..a68b0bb05958 100644 --- a/include/asm-sparc64/oplib.h +++ b/include/asm-sparc64/oplib.h | |||
@@ -323,8 +323,9 @@ extern int prom_pathtoinode(const char *path); | |||
323 | extern int prom_inst2pkg(int); | 323 | extern int prom_inst2pkg(int); |
324 | 324 | ||
325 | /* CPU probing helpers. */ | 325 | /* CPU probing helpers. */ |
326 | int cpu_find_by_instance(int instance, int *prom_node, int *mid); | 326 | struct device_node; |
327 | int cpu_find_by_mid(int mid, int *prom_node); | 327 | int cpu_find_by_instance(int instance, struct device_node **dev_node, int *mid); |
328 | int cpu_find_by_mid(int mid, struct device_node **prom_node); | ||
328 | 329 | ||
329 | /* Client interface level routines. */ | 330 | /* Client interface level routines. */ |
330 | extern void prom_set_trap_table(unsigned long tba); | 331 | extern void prom_set_trap_table(unsigned long tba); |
diff --git a/include/asm-sparc64/parport.h b/include/asm-sparc64/parport.h index 56b5197d7898..d3895873e4c7 100644 --- a/include/asm-sparc64/parport.h +++ b/include/asm-sparc64/parport.h | |||
@@ -67,18 +67,17 @@ static __inline__ unsigned int get_dma_residue(unsigned int dmanr) | |||
67 | 67 | ||
68 | static int ebus_ecpp_p(struct linux_ebus_device *edev) | 68 | static int ebus_ecpp_p(struct linux_ebus_device *edev) |
69 | { | 69 | { |
70 | if (!strcmp(edev->prom_name, "ecpp")) | 70 | if (!strcmp(edev->prom_node->name, "ecpp")) |
71 | return 1; | 71 | return 1; |
72 | if (!strcmp(edev->prom_name, "parallel")) { | 72 | if (!strcmp(edev->prom_node->name, "parallel")) { |
73 | char compat[19]; | 73 | char *compat; |
74 | prom_getstring(edev->prom_node, | 74 | |
75 | "compatible", | 75 | compat = of_get_property(edev->prom_node, |
76 | compat, sizeof(compat)); | 76 | "compatible", NULL); |
77 | compat[18] = '\0'; | 77 | if (compat && |
78 | if (!strcmp(compat, "ecpp")) | 78 | (!strcmp(compat, "ecpp") || |
79 | return 1; | 79 | !strcmp(compat, "ns87317-ecpp") || |
80 | if (!strcmp(compat, "ns87317-ecpp") && | 80 | !strcmp(compat + 13, "ecpp"))) |
81 | !strcmp(compat + 13, "ecpp")) | ||
82 | return 1; | 81 | return 1; |
83 | } | 82 | } |
84 | return 0; | 83 | return 0; |
@@ -94,12 +93,12 @@ static int parport_isa_probe(int count) | |||
94 | struct sparc_isa_device *child; | 93 | struct sparc_isa_device *child; |
95 | unsigned long base; | 94 | unsigned long base; |
96 | 95 | ||
97 | if (strcmp(isa_dev->prom_name, "dma")) | 96 | if (strcmp(isa_dev->prom_node->name, "dma")) |
98 | continue; | 97 | continue; |
99 | 98 | ||
100 | child = isa_dev->child; | 99 | child = isa_dev->child; |
101 | while (child) { | 100 | while (child) { |
102 | if (!strcmp(child->prom_name, "parallel")) | 101 | if (!strcmp(child->prom_node->name, "parallel")) |
103 | break; | 102 | break; |
104 | child = child->next; | 103 | child = child->next; |
105 | } | 104 | } |
diff --git a/include/asm-sparc64/pbm.h b/include/asm-sparc64/pbm.h index 1396f110939a..cebe80b1da6c 100644 --- a/include/asm-sparc64/pbm.h +++ b/include/asm-sparc64/pbm.h | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <asm/io.h> | 15 | #include <asm/io.h> |
16 | #include <asm/page.h> | 16 | #include <asm/page.h> |
17 | #include <asm/oplib.h> | 17 | #include <asm/oplib.h> |
18 | #include <asm/prom.h> | ||
18 | #include <asm/iommu.h> | 19 | #include <asm/iommu.h> |
19 | 20 | ||
20 | /* The abstraction used here is that there are PCI controllers, | 21 | /* The abstraction used here is that there are PCI controllers, |
@@ -153,16 +154,15 @@ struct pci_pbm_info { | |||
153 | int chip_revision; | 154 | int chip_revision; |
154 | 155 | ||
155 | /* Name used for top-level resources. */ | 156 | /* Name used for top-level resources. */ |
156 | char name[64]; | 157 | char *name; |
157 | 158 | ||
158 | /* OBP specific information. */ | 159 | /* OBP specific information. */ |
159 | int prom_node; | 160 | struct device_node *prom_node; |
160 | char prom_name[64]; | 161 | struct linux_prom_pci_ranges *pbm_ranges; |
161 | struct linux_prom_pci_ranges pbm_ranges[PROM_PCIRNG_MAX]; | ||
162 | int num_pbm_ranges; | 162 | int num_pbm_ranges; |
163 | struct linux_prom_pci_intmap pbm_intmap[PROM_PCIIMAP_MAX]; | 163 | struct linux_prom_pci_intmap *pbm_intmap; |
164 | int num_pbm_intmap; | 164 | int num_pbm_intmap; |
165 | struct linux_prom_pci_intmask pbm_intmask; | 165 | struct linux_prom_pci_intmask *pbm_intmask; |
166 | u64 ino_bitmap; | 166 | u64 ino_bitmap; |
167 | 167 | ||
168 | /* PBM I/O and Memory space resources. */ | 168 | /* PBM I/O and Memory space resources. */ |
@@ -227,8 +227,7 @@ struct pci_controller_info { | |||
227 | */ | 227 | */ |
228 | struct pcidev_cookie { | 228 | struct pcidev_cookie { |
229 | struct pci_pbm_info *pbm; | 229 | struct pci_pbm_info *pbm; |
230 | char prom_name[64]; | 230 | struct device_node *prom_node; |
231 | int prom_node; | ||
232 | struct linux_prom_pci_registers prom_regs[PROMREG_MAX]; | 231 | struct linux_prom_pci_registers prom_regs[PROMREG_MAX]; |
233 | int num_prom_regs; | 232 | int num_prom_regs; |
234 | struct linux_prom_pci_registers prom_assignments[PROMREG_MAX]; | 233 | struct linux_prom_pci_registers prom_assignments[PROMREG_MAX]; |
diff --git a/include/asm-sparc64/pgtable.h b/include/asm-sparc64/pgtable.h index 4e218814bb3c..03f5bc9b6bec 100644 --- a/include/asm-sparc64/pgtable.h +++ b/include/asm-sparc64/pgtable.h | |||
@@ -756,6 +756,8 @@ extern unsigned long *sparc64_valid_addr_bitmap; | |||
756 | #define kern_addr_valid(addr) \ | 756 | #define kern_addr_valid(addr) \ |
757 | (test_bit(__pa((unsigned long)(addr))>>22, sparc64_valid_addr_bitmap)) | 757 | (test_bit(__pa((unsigned long)(addr))>>22, sparc64_valid_addr_bitmap)) |
758 | 758 | ||
759 | extern int page_in_phys_avail(unsigned long paddr); | ||
760 | |||
759 | extern int io_remap_pfn_range(struct vm_area_struct *vma, unsigned long from, | 761 | extern int io_remap_pfn_range(struct vm_area_struct *vma, unsigned long from, |
760 | unsigned long pfn, | 762 | unsigned long pfn, |
761 | unsigned long size, pgprot_t prot); | 763 | unsigned long size, pgprot_t prot); |
diff --git a/include/asm-sparc64/prom.h b/include/asm-sparc64/prom.h new file mode 100644 index 000000000000..6d1556c0c263 --- /dev/null +++ b/include/asm-sparc64/prom.h | |||
@@ -0,0 +1,98 @@ | |||
1 | #ifndef _SPARC64_PROM_H | ||
2 | #define _SPARC64_PROM_H | ||
3 | #ifdef __KERNEL__ | ||
4 | |||
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 | * Updates for SPARC64 by David S. Miller | ||
14 | * | ||
15 | * This program is free software; you can redistribute it and/or | ||
16 | * modify it under the terms of the GNU General Public License | ||
17 | * as published by the Free Software Foundation; either version | ||
18 | * 2 of the License, or (at your option) any later version. | ||
19 | */ | ||
20 | |||
21 | #include <linux/types.h> | ||
22 | #include <linux/proc_fs.h> | ||
23 | #include <asm/atomic.h> | ||
24 | |||
25 | typedef u32 phandle; | ||
26 | typedef u32 ihandle; | ||
27 | |||
28 | struct interrupt_info { | ||
29 | int line; | ||
30 | int sense; /* +ve/-ve logic, edge or level, etc. */ | ||
31 | }; | ||
32 | |||
33 | struct property { | ||
34 | char *name; | ||
35 | int length; | ||
36 | void *value; | ||
37 | struct property *next; | ||
38 | }; | ||
39 | |||
40 | struct device_node { | ||
41 | char *name; | ||
42 | char *type; | ||
43 | phandle node; | ||
44 | phandle linux_phandle; | ||
45 | int n_intrs; | ||
46 | struct interrupt_info *intrs; | ||
47 | char *path_component_name; | ||
48 | char *full_name; | ||
49 | |||
50 | struct property *properties; | ||
51 | struct property *deadprops; /* removed properties */ | ||
52 | struct device_node *parent; | ||
53 | struct device_node *child; | ||
54 | struct device_node *sibling; | ||
55 | struct device_node *next; /* next device of same type */ | ||
56 | struct device_node *allnext; /* next in list of all nodes */ | ||
57 | struct proc_dir_entry *pde; /* this node's proc directory */ | ||
58 | struct kref kref; | ||
59 | unsigned long _flags; | ||
60 | void *data; | ||
61 | }; | ||
62 | |||
63 | static inline void set_node_proc_entry(struct device_node *dn, struct proc_dir_entry *de) | ||
64 | { | ||
65 | dn->pde = de; | ||
66 | } | ||
67 | |||
68 | extern struct device_node *of_find_node_by_name(struct device_node *from, | ||
69 | const char *name); | ||
70 | #define for_each_node_by_name(dn, name) \ | ||
71 | for (dn = of_find_node_by_name(NULL, name); dn; \ | ||
72 | dn = of_find_node_by_name(dn, name)) | ||
73 | extern struct device_node *of_find_node_by_type(struct device_node *from, | ||
74 | const char *type); | ||
75 | #define for_each_node_by_type(dn, type) \ | ||
76 | for (dn = of_find_node_by_type(NULL, type); dn; \ | ||
77 | dn = of_find_node_by_type(dn, type)) | ||
78 | extern struct device_node *of_find_compatible_node(struct device_node *from, | ||
79 | const char *type, const char *compat); | ||
80 | extern struct device_node *of_find_node_by_path(const char *path); | ||
81 | extern struct device_node *of_find_node_by_phandle(phandle handle); | ||
82 | extern struct device_node *of_get_parent(const struct device_node *node); | ||
83 | extern struct device_node *of_get_next_child(const struct device_node *node, | ||
84 | struct device_node *prev); | ||
85 | extern struct property *of_find_property(struct device_node *np, | ||
86 | const char *name, | ||
87 | int *lenp); | ||
88 | extern int of_device_is_compatible(struct device_node *device, const char *); | ||
89 | extern void *of_get_property(struct device_node *node, const char *name, | ||
90 | int *lenp); | ||
91 | extern int of_getintprop_default(struct device_node *np, | ||
92 | const char *name, | ||
93 | int def); | ||
94 | |||
95 | extern void prom_build_devicetree(void); | ||
96 | |||
97 | #endif /* __KERNEL__ */ | ||
98 | #endif /* _SPARC64_PROM_H */ | ||
diff --git a/include/asm-sparc64/sbus.h b/include/asm-sparc64/sbus.h index 48279e10f385..56ee985e4605 100644 --- a/include/asm-sparc64/sbus.h +++ b/include/asm-sparc64/sbus.h | |||
@@ -11,6 +11,8 @@ | |||
11 | #include <linux/ioport.h> | 11 | #include <linux/ioport.h> |
12 | 12 | ||
13 | #include <asm/oplib.h> | 13 | #include <asm/oplib.h> |
14 | #include <asm/prom.h> | ||
15 | #include <asm/of_device.h> | ||
14 | #include <asm/iommu.h> | 16 | #include <asm/iommu.h> |
15 | #include <asm/scatterlist.h> | 17 | #include <asm/scatterlist.h> |
16 | 18 | ||
@@ -42,18 +44,19 @@ struct sbus_bus; | |||
42 | 44 | ||
43 | /* Linux SBUS device tables */ | 45 | /* Linux SBUS device tables */ |
44 | struct sbus_dev { | 46 | struct sbus_dev { |
45 | struct sbus_bus *bus; /* Our toplevel parent SBUS */ | 47 | struct of_device ofdev; |
46 | struct sbus_dev *next; /* Chain of siblings */ | 48 | struct sbus_bus *bus; |
47 | struct sbus_dev *child; /* Chain of children */ | 49 | struct sbus_dev *next; |
48 | struct sbus_dev *parent;/* Parent device if not toplevel*/ | 50 | struct sbus_dev *child; |
49 | int prom_node; /* OBP node of this device */ | 51 | struct sbus_dev *parent; |
50 | char prom_name[64]; /* OBP device name property */ | 52 | int prom_node; |
51 | int slot; /* SBUS slot number */ | 53 | char prom_name[64]; |
54 | int slot; | ||
52 | 55 | ||
53 | struct resource resource[PROMREG_MAX]; | 56 | struct resource resource[PROMREG_MAX]; |
54 | 57 | ||
55 | struct linux_prom_registers reg_addrs[PROMREG_MAX]; | 58 | struct linux_prom_registers reg_addrs[PROMREG_MAX]; |
56 | int num_registers, ranges_applied; | 59 | int num_registers; |
57 | 60 | ||
58 | struct linux_prom_ranges device_ranges[PROMREG_MAX]; | 61 | struct linux_prom_ranges device_ranges[PROMREG_MAX]; |
59 | int num_device_ranges; | 62 | int num_device_ranges; |
@@ -61,9 +64,11 @@ struct sbus_dev { | |||
61 | unsigned int irqs[4]; | 64 | unsigned int irqs[4]; |
62 | int num_irqs; | 65 | int num_irqs; |
63 | }; | 66 | }; |
67 | #define to_sbus_device(d) container_of(d, struct sbus_dev, ofdev.dev) | ||
64 | 68 | ||
65 | /* This struct describes the SBus(s) found on this machine. */ | 69 | /* This struct describes the SBus(s) found on this machine. */ |
66 | struct sbus_bus { | 70 | struct sbus_bus { |
71 | struct of_device ofdev; | ||
67 | void *iommu; /* Opaque IOMMU cookie */ | 72 | void *iommu; /* Opaque IOMMU cookie */ |
68 | struct sbus_dev *devices; /* Tree of SBUS devices */ | 73 | struct sbus_dev *devices; /* Tree of SBUS devices */ |
69 | struct sbus_bus *next; /* Next SBUS in system */ | 74 | struct sbus_bus *next; /* Next SBUS in system */ |
@@ -77,6 +82,7 @@ struct sbus_bus { | |||
77 | int portid; | 82 | int portid; |
78 | void *starfire_cookie; | 83 | void *starfire_cookie; |
79 | }; | 84 | }; |
85 | #define to_sbus(d) container_of(d, struct sbus_bus, ofdev.dev) | ||
80 | 86 | ||
81 | extern struct sbus_bus *sbus_root; | 87 | extern struct sbus_bus *sbus_root; |
82 | 88 | ||
@@ -95,6 +101,7 @@ extern struct sbus_bus *sbus_root; | |||
95 | #define sbus_can_dma_64bit(sdev) (1) | 101 | #define sbus_can_dma_64bit(sdev) (1) |
96 | #define sbus_can_burst64(sdev) (1) | 102 | #define sbus_can_burst64(sdev) (1) |
97 | extern void sbus_set_sbus64(struct sbus_dev *, int); | 103 | extern void sbus_set_sbus64(struct sbus_dev *, int); |
104 | extern void sbus_fill_device_irq(struct sbus_dev *); | ||
98 | 105 | ||
99 | /* These yield IOMMU mappings in consistent mode. */ | 106 | /* These yield IOMMU mappings in consistent mode. */ |
100 | extern void *sbus_alloc_consistent(struct sbus_dev *, size_t, dma_addr_t *dma_addrp); | 107 | extern void *sbus_alloc_consistent(struct sbus_dev *, size_t, dma_addr_t *dma_addrp); |
@@ -119,4 +126,10 @@ extern void sbus_dma_sync_sg_for_cpu(struct sbus_dev *, struct scatterlist *, in | |||
119 | #define sbus_dma_sync_sg sbus_dma_sync_sg_for_cpu | 126 | #define sbus_dma_sync_sg sbus_dma_sync_sg_for_cpu |
120 | extern void sbus_dma_sync_sg_for_device(struct sbus_dev *, struct scatterlist *, int, int); | 127 | extern void sbus_dma_sync_sg_for_device(struct sbus_dev *, struct scatterlist *, int, int); |
121 | 128 | ||
129 | extern void sbus_arch_bus_ranges_init(struct device_node *, struct sbus_bus *); | ||
130 | extern void sbus_setup_iommu(struct sbus_bus *, struct device_node *); | ||
131 | extern void sbus_setup_arch_props(struct sbus_bus *, struct device_node *); | ||
132 | extern int sbus_arch_preinit(void); | ||
133 | extern void sbus_arch_postinit(void); | ||
134 | |||
122 | #endif /* !(_SPARC64_SBUS_H) */ | 135 | #endif /* !(_SPARC64_SBUS_H) */ |
diff --git a/include/asm-sparc64/vdev.h b/include/asm-sparc64/vdev.h index 996e6be7b976..25637c57675d 100644 --- a/include/asm-sparc64/vdev.h +++ b/include/asm-sparc64/vdev.h | |||
@@ -7,10 +7,11 @@ | |||
7 | #define _SPARC64_VDEV_H | 7 | #define _SPARC64_VDEV_H |
8 | 8 | ||
9 | #include <linux/types.h> | 9 | #include <linux/types.h> |
10 | #include <asm/prom.h> | ||
10 | 11 | ||
11 | extern u32 sun4v_vdev_devhandle; | 12 | extern u32 sun4v_vdev_devhandle; |
12 | extern int sun4v_vdev_root; | 13 | extern struct device_node *sun4v_vdev_root; |
13 | 14 | ||
14 | extern unsigned int sun4v_vdev_device_interrupt(unsigned int); | 15 | extern unsigned int sun4v_vdev_device_interrupt(struct device_node *dev_node); |
15 | 16 | ||
16 | #endif /* !(_SPARC64_VDEV_H) */ | 17 | #endif /* !(_SPARC64_VDEV_H) */ |