diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-07-30 02:32:02 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-07-30 02:32:02 -0400 |
| commit | cb7dee8d22f3e9320424e769d860fbd9712a0666 (patch) | |
| tree | 58f33d70453e7cd26ec78e96f33ca7a9673df26e /include/linux | |
| parent | 49267fc82ad2825132be3b016d8eb58a90cb0c36 (diff) | |
| parent | 6124a4e430b64d1577438c8648c59e996d02e73e (diff) | |
Merge branch 'next/dt' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/linux-arm-soc
* 'next/dt' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/linux-arm-soc: (21 commits)
arm/dt: tegra devicetree support
arm/versatile: Add device tree support
dt/irq: add irq_domain_generate_simple() helper
irq: add irq_domain translation infrastructure
dmaengine: imx-sdma: add device tree probe support
dmaengine: imx-sdma: sdma_get_firmware does not need to copy fw_name
dmaengine: imx-sdma: use platform_device_id to identify sdma version
mmc: sdhci-esdhc-imx: add device tree probe support
mmc: sdhci-pltfm: dt device does not pass parent to sdhci_alloc_host
mmc: sdhci-esdhc-imx: get rid of the uses of cpu_is_mx()
mmc: sdhci-esdhc-imx: do not reference platform data after probe
mmc: sdhci-esdhc-imx: extend card_detect and write_protect support for mx5
net/fec: add device tree probe support
net: ibm_newemac: convert it to use of_get_phy_mode
dt/net: add helper function of_get_phy_mode
net/fec: gasket needs to be enabled for some i.mx
serial/imx: add device tree probe support
serial/imx: get rid of the uses of cpu_is_mx1()
arm/dt: Add dtb make rule
arm/dt: Add skeleton dtsi file
...
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/irq.h | 6 | ||||
| -rw-r--r-- | include/linux/irqdomain.h | 91 | ||||
| -rw-r--r-- | include/linux/of_irq.h | 4 | ||||
| -rw-r--r-- | include/linux/of_net.h | 1 | ||||
| -rw-r--r-- | include/linux/phy.h | 4 |
5 files changed, 105 insertions, 1 deletions
diff --git a/include/linux/irq.h b/include/linux/irq.h index 5f695041090c..87a06f345bd2 100644 --- a/include/linux/irq.h +++ b/include/linux/irq.h | |||
| @@ -108,14 +108,18 @@ enum { | |||
| 108 | }; | 108 | }; |
| 109 | 109 | ||
| 110 | struct msi_desc; | 110 | struct msi_desc; |
| 111 | struct irq_domain; | ||
| 111 | 112 | ||
| 112 | /** | 113 | /** |
| 113 | * struct irq_data - per irq and irq chip data passed down to chip functions | 114 | * struct irq_data - per irq and irq chip data passed down to chip functions |
| 114 | * @irq: interrupt number | 115 | * @irq: interrupt number |
| 116 | * @hwirq: hardware interrupt number, local to the interrupt domain | ||
| 115 | * @node: node index useful for balancing | 117 | * @node: node index useful for balancing |
| 116 | * @state_use_accessors: status information for irq chip functions. | 118 | * @state_use_accessors: status information for irq chip functions. |
| 117 | * Use accessor functions to deal with it | 119 | * Use accessor functions to deal with it |
| 118 | * @chip: low level interrupt hardware access | 120 | * @chip: low level interrupt hardware access |
| 121 | * @domain: Interrupt translation domain; responsible for mapping | ||
| 122 | * between hwirq number and linux irq number. | ||
| 119 | * @handler_data: per-IRQ data for the irq_chip methods | 123 | * @handler_data: per-IRQ data for the irq_chip methods |
| 120 | * @chip_data: platform-specific per-chip private data for the chip | 124 | * @chip_data: platform-specific per-chip private data for the chip |
| 121 | * methods, to allow shared chip implementations | 125 | * methods, to allow shared chip implementations |
| @@ -128,9 +132,11 @@ struct msi_desc; | |||
| 128 | */ | 132 | */ |
| 129 | struct irq_data { | 133 | struct irq_data { |
| 130 | unsigned int irq; | 134 | unsigned int irq; |
| 135 | unsigned long hwirq; | ||
| 131 | unsigned int node; | 136 | unsigned int node; |
| 132 | unsigned int state_use_accessors; | 137 | unsigned int state_use_accessors; |
| 133 | struct irq_chip *chip; | 138 | struct irq_chip *chip; |
| 139 | struct irq_domain *domain; | ||
| 134 | void *handler_data; | 140 | void *handler_data; |
| 135 | void *chip_data; | 141 | void *chip_data; |
| 136 | struct msi_desc *msi_desc; | 142 | struct msi_desc *msi_desc; |
diff --git a/include/linux/irqdomain.h b/include/linux/irqdomain.h new file mode 100644 index 000000000000..e807ad687a07 --- /dev/null +++ b/include/linux/irqdomain.h | |||
| @@ -0,0 +1,91 @@ | |||
| 1 | /* | ||
| 2 | * irq_domain - IRQ translation domains | ||
| 3 | * | ||
| 4 | * Translation infrastructure between hw and linux irq numbers. This is | ||
| 5 | * helpful for interrupt controllers to implement mapping between hardware | ||
| 6 | * irq numbers and the Linux irq number space. | ||
| 7 | * | ||
| 8 | * irq_domains also have a hook for translating device tree interrupt | ||
| 9 | * representation into a hardware irq number that can be mapped back to a | ||
| 10 | * Linux irq number without any extra platform support code. | ||
| 11 | * | ||
| 12 | * irq_domain is expected to be embedded in an interrupt controller's private | ||
| 13 | * data structure. | ||
| 14 | */ | ||
| 15 | #ifndef _LINUX_IRQDOMAIN_H | ||
| 16 | #define _LINUX_IRQDOMAIN_H | ||
| 17 | |||
| 18 | #include <linux/irq.h> | ||
| 19 | #include <linux/mod_devicetable.h> | ||
| 20 | |||
| 21 | #ifdef CONFIG_IRQ_DOMAIN | ||
| 22 | struct device_node; | ||
| 23 | struct irq_domain; | ||
| 24 | |||
| 25 | /** | ||
| 26 | * struct irq_domain_ops - Methods for irq_domain objects | ||
| 27 | * @to_irq: (optional) given a local hardware irq number, return the linux | ||
| 28 | * irq number. If to_irq is not implemented, then the irq_domain | ||
| 29 | * will use this translation: irq = (domain->irq_base + hwirq) | ||
| 30 | * @dt_translate: Given a device tree node and interrupt specifier, decode | ||
| 31 | * the hardware irq number and linux irq type value. | ||
| 32 | */ | ||
| 33 | struct irq_domain_ops { | ||
| 34 | unsigned int (*to_irq)(struct irq_domain *d, unsigned long hwirq); | ||
| 35 | |||
| 36 | #ifdef CONFIG_OF | ||
| 37 | int (*dt_translate)(struct irq_domain *d, struct device_node *node, | ||
| 38 | const u32 *intspec, unsigned int intsize, | ||
| 39 | unsigned long *out_hwirq, unsigned int *out_type); | ||
| 40 | #endif /* CONFIG_OF */ | ||
| 41 | }; | ||
| 42 | |||
| 43 | /** | ||
| 44 | * struct irq_domain - Hardware interrupt number translation object | ||
| 45 | * @list: Element in global irq_domain list. | ||
| 46 | * @irq_base: Start of irq_desc range assigned to the irq_domain. The creator | ||
| 47 | * of the irq_domain is responsible for allocating the array of | ||
| 48 | * irq_desc structures. | ||
| 49 | * @nr_irq: Number of irqs managed by the irq domain | ||
| 50 | * @ops: pointer to irq_domain methods | ||
| 51 | * @priv: private data pointer for use by owner. Not touched by irq_domain | ||
| 52 | * core code. | ||
| 53 | * @of_node: (optional) Pointer to device tree nodes associated with the | ||
| 54 | * irq_domain. Used when decoding device tree interrupt specifiers. | ||
| 55 | */ | ||
| 56 | struct irq_domain { | ||
| 57 | struct list_head list; | ||
| 58 | unsigned int irq_base; | ||
| 59 | unsigned int nr_irq; | ||
| 60 | const struct irq_domain_ops *ops; | ||
| 61 | void *priv; | ||
| 62 | struct device_node *of_node; | ||
| 63 | }; | ||
| 64 | |||
| 65 | /** | ||
| 66 | * irq_domain_to_irq() - Translate from a hardware irq to a linux irq number | ||
| 67 | * | ||
| 68 | * Returns the linux irq number associated with a hardware irq. By default, | ||
| 69 | * the mapping is irq == domain->irq_base + hwirq, but this mapping can | ||
| 70 | * be overridden if the irq_domain implements a .to_irq() hook. | ||
| 71 | */ | ||
| 72 | static inline unsigned int irq_domain_to_irq(struct irq_domain *d, | ||
| 73 | unsigned long hwirq) | ||
| 74 | { | ||
| 75 | return d->ops->to_irq ? d->ops->to_irq(d, hwirq) : d->irq_base + hwirq; | ||
| 76 | } | ||
| 77 | |||
| 78 | extern void irq_domain_add(struct irq_domain *domain); | ||
| 79 | extern void irq_domain_del(struct irq_domain *domain); | ||
| 80 | #endif /* CONFIG_IRQ_DOMAIN */ | ||
| 81 | |||
| 82 | #if defined(CONFIG_IRQ_DOMAIN) && defined(CONFIG_OF_IRQ) | ||
| 83 | extern void irq_domain_add_simple(struct device_node *controller, int irq_base); | ||
| 84 | extern void irq_domain_generate_simple(const struct of_device_id *match, | ||
| 85 | u64 phys_base, unsigned int irq_start); | ||
| 86 | #else /* CONFIG_IRQ_DOMAIN && CONFIG_OF_IRQ */ | ||
| 87 | static inline void irq_domain_generate_simple(const struct of_device_id *match, | ||
| 88 | u64 phys_base, unsigned int irq_start) { } | ||
| 89 | #endif /* CONFIG_IRQ_DOMAIN && CONFIG_OF_IRQ */ | ||
| 90 | |||
| 91 | #endif /* _LINUX_IRQDOMAIN_H */ | ||
diff --git a/include/linux/of_irq.h b/include/linux/of_irq.h index e6955f5d1f08..cd2e61ce4e83 100644 --- a/include/linux/of_irq.h +++ b/include/linux/of_irq.h | |||
| @@ -63,6 +63,9 @@ extern int of_irq_map_one(struct device_node *device, int index, | |||
| 63 | extern unsigned int irq_create_of_mapping(struct device_node *controller, | 63 | extern unsigned int irq_create_of_mapping(struct device_node *controller, |
| 64 | const u32 *intspec, | 64 | const u32 *intspec, |
| 65 | unsigned int intsize); | 65 | unsigned int intsize); |
| 66 | #ifdef CONFIG_IRQ_DOMAIN | ||
| 67 | extern void irq_dispose_mapping(unsigned int irq); | ||
| 68 | #endif | ||
| 66 | extern int of_irq_to_resource(struct device_node *dev, int index, | 69 | extern int of_irq_to_resource(struct device_node *dev, int index, |
| 67 | struct resource *r); | 70 | struct resource *r); |
| 68 | extern int of_irq_count(struct device_node *dev); | 71 | extern int of_irq_count(struct device_node *dev); |
| @@ -70,6 +73,7 @@ extern int of_irq_to_resource_table(struct device_node *dev, | |||
| 70 | struct resource *res, int nr_irqs); | 73 | struct resource *res, int nr_irqs); |
| 71 | extern struct device_node *of_irq_find_parent(struct device_node *child); | 74 | extern struct device_node *of_irq_find_parent(struct device_node *child); |
| 72 | 75 | ||
| 76 | |||
| 73 | #endif /* CONFIG_OF_IRQ */ | 77 | #endif /* CONFIG_OF_IRQ */ |
| 74 | #endif /* CONFIG_OF */ | 78 | #endif /* CONFIG_OF */ |
| 75 | #endif /* __OF_IRQ_H */ | 79 | #endif /* __OF_IRQ_H */ |
diff --git a/include/linux/of_net.h b/include/linux/of_net.h index e913081fb52a..f47464188710 100644 --- a/include/linux/of_net.h +++ b/include/linux/of_net.h | |||
| @@ -9,6 +9,7 @@ | |||
| 9 | 9 | ||
| 10 | #ifdef CONFIG_OF_NET | 10 | #ifdef CONFIG_OF_NET |
| 11 | #include <linux/of.h> | 11 | #include <linux/of.h> |
| 12 | extern const int of_get_phy_mode(struct device_node *np); | ||
| 12 | extern const void *of_get_mac_address(struct device_node *np); | 13 | extern const void *of_get_mac_address(struct device_node *np); |
| 13 | #endif | 14 | #endif |
| 14 | 15 | ||
diff --git a/include/linux/phy.h b/include/linux/phy.h index ad5186354d92..54fc4138955f 100644 --- a/include/linux/phy.h +++ b/include/linux/phy.h | |||
| @@ -53,6 +53,7 @@ | |||
| 53 | 53 | ||
| 54 | /* Interface Mode definitions */ | 54 | /* Interface Mode definitions */ |
| 55 | typedef enum { | 55 | typedef enum { |
| 56 | PHY_INTERFACE_MODE_NA, | ||
| 56 | PHY_INTERFACE_MODE_MII, | 57 | PHY_INTERFACE_MODE_MII, |
| 57 | PHY_INTERFACE_MODE_GMII, | 58 | PHY_INTERFACE_MODE_GMII, |
| 58 | PHY_INTERFACE_MODE_SGMII, | 59 | PHY_INTERFACE_MODE_SGMII, |
| @@ -62,7 +63,8 @@ typedef enum { | |||
| 62 | PHY_INTERFACE_MODE_RGMII_ID, | 63 | PHY_INTERFACE_MODE_RGMII_ID, |
| 63 | PHY_INTERFACE_MODE_RGMII_RXID, | 64 | PHY_INTERFACE_MODE_RGMII_RXID, |
| 64 | PHY_INTERFACE_MODE_RGMII_TXID, | 65 | PHY_INTERFACE_MODE_RGMII_TXID, |
| 65 | PHY_INTERFACE_MODE_RTBI | 66 | PHY_INTERFACE_MODE_RTBI, |
| 67 | PHY_INTERFACE_MODE_SMII, | ||
| 66 | } phy_interface_t; | 68 | } phy_interface_t; |
| 67 | 69 | ||
| 68 | 70 | ||
