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) */ |
