diff options
| author | Grant Likely <grant.likely@secretlab.ca> | 2012-02-28 14:48:58 -0500 |
|---|---|---|
| committer | Grant Likely <grant.likely@secretlab.ca> | 2012-02-28 14:48:58 -0500 |
| commit | b3950d50cfc343b3e7dc5c69c96a61b182fd1e37 (patch) | |
| tree | d54affae2b1e25464493b48aa88cd8d6b4770812 /include/linux | |
| parent | daefd89efc279b142bbb054577c2d706da211723 (diff) | |
| parent | 280ad7fda5f95211857fda38960f2b6fdf6edd3e (diff) | |
Merge branch 'irqdomain/next' into gpio/next
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/binfmts.h | 3 | ||||
| -rw-r--r-- | include/linux/blkdev.h | 3 | ||||
| -rw-r--r-- | include/linux/cdrom.h | 3 | ||||
| -rw-r--r-- | include/linux/elevator.h | 9 | ||||
| -rw-r--r-- | include/linux/gpio_keys.h | 2 | ||||
| -rw-r--r-- | include/linux/hyperv.h | 2 | ||||
| -rw-r--r-- | include/linux/iocontext.h | 5 | ||||
| -rw-r--r-- | include/linux/irqdomain.h | 191 | ||||
| -rw-r--r--[-rwxr-xr-x] | include/linux/lp8727.h | 0 | ||||
| -rw-r--r-- | include/linux/mfd/twl6040.h | 2 | ||||
| -rw-r--r-- | include/linux/mpi.h | 2 | ||||
| -rw-r--r-- | include/linux/mtd/mtd.h | 6 | ||||
| -rw-r--r-- | include/linux/of_address.h | 33 | ||||
| -rw-r--r-- | include/linux/of_irq.h | 4 | ||||
| -rw-r--r-- | include/linux/of_platform.h | 12 | ||||
| -rw-r--r-- | include/linux/perf_event.h | 1 | ||||
| -rw-r--r-- | include/linux/pm_qos.h | 14 | ||||
| -rw-r--r-- | include/linux/proportions.h | 4 | ||||
| -rw-r--r-- | include/linux/sched.h | 6 | ||||
| -rw-r--r-- | include/linux/sh_dma.h | 1 | ||||
| -rw-r--r-- | include/linux/usb/ch9.h | 2 |
21 files changed, 217 insertions, 88 deletions
diff --git a/include/linux/binfmts.h b/include/linux/binfmts.h index fd88a3945aa1..0092102db2de 100644 --- a/include/linux/binfmts.h +++ b/include/linux/binfmts.h | |||
| @@ -18,7 +18,7 @@ struct pt_regs; | |||
| 18 | #define BINPRM_BUF_SIZE 128 | 18 | #define BINPRM_BUF_SIZE 128 |
| 19 | 19 | ||
| 20 | #ifdef __KERNEL__ | 20 | #ifdef __KERNEL__ |
| 21 | #include <linux/list.h> | 21 | #include <linux/sched.h> |
| 22 | 22 | ||
| 23 | #define CORENAME_MAX_SIZE 128 | 23 | #define CORENAME_MAX_SIZE 128 |
| 24 | 24 | ||
| @@ -58,6 +58,7 @@ struct linux_binprm { | |||
| 58 | unsigned interp_flags; | 58 | unsigned interp_flags; |
| 59 | unsigned interp_data; | 59 | unsigned interp_data; |
| 60 | unsigned long loader, exec; | 60 | unsigned long loader, exec; |
| 61 | char tcomm[TASK_COMM_LEN]; | ||
| 61 | }; | 62 | }; |
| 62 | 63 | ||
| 63 | #define BINPRM_FLAGS_ENFORCE_NONDUMP_BIT 0 | 64 | #define BINPRM_FLAGS_ENFORCE_NONDUMP_BIT 0 |
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 6c6a1f008065..606cf339bb56 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
| @@ -399,9 +399,6 @@ struct request_queue { | |||
| 399 | /* Throttle data */ | 399 | /* Throttle data */ |
| 400 | struct throtl_data *td; | 400 | struct throtl_data *td; |
| 401 | #endif | 401 | #endif |
| 402 | #ifdef CONFIG_LOCKDEP | ||
| 403 | int ioc_release_depth; | ||
| 404 | #endif | ||
| 405 | }; | 402 | }; |
| 406 | 403 | ||
| 407 | #define QUEUE_FLAG_QUEUED 1 /* uses generic tag queueing */ | 404 | #define QUEUE_FLAG_QUEUED 1 /* uses generic tag queueing */ |
diff --git a/include/linux/cdrom.h b/include/linux/cdrom.h index 35eae4b67503..7c48029dffe6 100644 --- a/include/linux/cdrom.h +++ b/include/linux/cdrom.h | |||
| @@ -952,7 +952,8 @@ struct cdrom_device_info { | |||
| 952 | char name[20]; /* name of the device type */ | 952 | char name[20]; /* name of the device type */ |
| 953 | /* per-device flags */ | 953 | /* per-device flags */ |
| 954 | __u8 sanyo_slot : 2; /* Sanyo 3 CD changer support */ | 954 | __u8 sanyo_slot : 2; /* Sanyo 3 CD changer support */ |
| 955 | __u8 reserved : 6; /* not used yet */ | 955 | __u8 keeplocked : 1; /* CDROM_LOCKDOOR status */ |
| 956 | __u8 reserved : 5; /* not used yet */ | ||
| 956 | int cdda_method; /* see flags */ | 957 | int cdda_method; /* see flags */ |
| 957 | __u8 last_sense; | 958 | __u8 last_sense; |
| 958 | __u8 media_written; /* dirty flag, DVD+RW bookkeeping */ | 959 | __u8 media_written; /* dirty flag, DVD+RW bookkeeping */ |
diff --git a/include/linux/elevator.h b/include/linux/elevator.h index c24f3d7fbf1e..7d4e0356f329 100644 --- a/include/linux/elevator.h +++ b/include/linux/elevator.h | |||
| @@ -42,12 +42,6 @@ struct elevator_ops | |||
| 42 | elevator_merged_fn *elevator_merged_fn; | 42 | elevator_merged_fn *elevator_merged_fn; |
| 43 | elevator_merge_req_fn *elevator_merge_req_fn; | 43 | elevator_merge_req_fn *elevator_merge_req_fn; |
| 44 | elevator_allow_merge_fn *elevator_allow_merge_fn; | 44 | elevator_allow_merge_fn *elevator_allow_merge_fn; |
| 45 | |||
| 46 | /* | ||
| 47 | * Used for both plugged list and elevator merging and in the | ||
| 48 | * former case called without queue_lock. Read comment on top of | ||
| 49 | * attempt_plug_merge() for details. | ||
| 50 | */ | ||
| 51 | elevator_bio_merged_fn *elevator_bio_merged_fn; | 45 | elevator_bio_merged_fn *elevator_bio_merged_fn; |
| 52 | 46 | ||
| 53 | elevator_dispatch_fn *elevator_dispatch_fn; | 47 | elevator_dispatch_fn *elevator_dispatch_fn; |
| @@ -122,7 +116,6 @@ extern void elv_dispatch_add_tail(struct request_queue *, struct request *); | |||
| 122 | extern void elv_add_request(struct request_queue *, struct request *, int); | 116 | extern void elv_add_request(struct request_queue *, struct request *, int); |
| 123 | extern void __elv_add_request(struct request_queue *, struct request *, int); | 117 | extern void __elv_add_request(struct request_queue *, struct request *, int); |
| 124 | extern int elv_merge(struct request_queue *, struct request **, struct bio *); | 118 | extern int elv_merge(struct request_queue *, struct request **, struct bio *); |
| 125 | extern int elv_try_merge(struct request *, struct bio *); | ||
| 126 | extern void elv_merge_requests(struct request_queue *, struct request *, | 119 | extern void elv_merge_requests(struct request_queue *, struct request *, |
| 127 | struct request *); | 120 | struct request *); |
| 128 | extern void elv_merged_request(struct request_queue *, struct request *, int); | 121 | extern void elv_merged_request(struct request_queue *, struct request *, int); |
| @@ -155,7 +148,7 @@ extern ssize_t elv_iosched_store(struct request_queue *, const char *, size_t); | |||
| 155 | extern int elevator_init(struct request_queue *, char *); | 148 | extern int elevator_init(struct request_queue *, char *); |
| 156 | extern void elevator_exit(struct elevator_queue *); | 149 | extern void elevator_exit(struct elevator_queue *); |
| 157 | extern int elevator_change(struct request_queue *, const char *); | 150 | extern int elevator_change(struct request_queue *, const char *); |
| 158 | extern int elv_rq_merge_ok(struct request *, struct bio *); | 151 | extern bool elv_rq_merge_ok(struct request *, struct bio *); |
| 159 | 152 | ||
| 160 | /* | 153 | /* |
| 161 | * Helper functions. | 154 | * Helper functions. |
diff --git a/include/linux/gpio_keys.h b/include/linux/gpio_keys.h index b5ca4b2c08ec..004ff33ab38e 100644 --- a/include/linux/gpio_keys.h +++ b/include/linux/gpio_keys.h | |||
| @@ -1,6 +1,8 @@ | |||
| 1 | #ifndef _GPIO_KEYS_H | 1 | #ifndef _GPIO_KEYS_H |
| 2 | #define _GPIO_KEYS_H | 2 | #define _GPIO_KEYS_H |
| 3 | 3 | ||
| 4 | struct device; | ||
| 5 | |||
| 4 | struct gpio_keys_button { | 6 | struct gpio_keys_button { |
| 5 | /* Configuration parameters */ | 7 | /* Configuration parameters */ |
| 6 | unsigned int code; /* input event code (KEY_*, SW_*) */ | 8 | unsigned int code; /* input event code (KEY_*, SW_*) */ |
diff --git a/include/linux/hyperv.h b/include/linux/hyperv.h index 62b908e0e591..0ae065a5fcb2 100644 --- a/include/linux/hyperv.h +++ b/include/linux/hyperv.h | |||
| @@ -35,7 +35,7 @@ | |||
| 35 | #include <linux/mod_devicetable.h> | 35 | #include <linux/mod_devicetable.h> |
| 36 | 36 | ||
| 37 | 37 | ||
| 38 | #define MAX_PAGE_BUFFER_COUNT 18 | 38 | #define MAX_PAGE_BUFFER_COUNT 19 |
| 39 | #define MAX_MULTIPAGE_BUFFER_COUNT 32 /* 128K */ | 39 | #define MAX_MULTIPAGE_BUFFER_COUNT 32 /* 128K */ |
| 40 | 40 | ||
| 41 | #pragma pack(push, 1) | 41 | #pragma pack(push, 1) |
diff --git a/include/linux/iocontext.h b/include/linux/iocontext.h index 7e1371c4bccf..119773eebe31 100644 --- a/include/linux/iocontext.h +++ b/include/linux/iocontext.h | |||
| @@ -133,7 +133,7 @@ static inline struct io_context *ioc_task_link(struct io_context *ioc) | |||
| 133 | 133 | ||
| 134 | struct task_struct; | 134 | struct task_struct; |
| 135 | #ifdef CONFIG_BLOCK | 135 | #ifdef CONFIG_BLOCK |
| 136 | void put_io_context(struct io_context *ioc, struct request_queue *locked_q); | 136 | void put_io_context(struct io_context *ioc); |
| 137 | void exit_io_context(struct task_struct *task); | 137 | void exit_io_context(struct task_struct *task); |
| 138 | struct io_context *get_task_io_context(struct task_struct *task, | 138 | struct io_context *get_task_io_context(struct task_struct *task, |
| 139 | gfp_t gfp_flags, int node); | 139 | gfp_t gfp_flags, int node); |
| @@ -141,8 +141,7 @@ void ioc_ioprio_changed(struct io_context *ioc, int ioprio); | |||
| 141 | void ioc_cgroup_changed(struct io_context *ioc); | 141 | void ioc_cgroup_changed(struct io_context *ioc); |
| 142 | #else | 142 | #else |
| 143 | struct io_context; | 143 | struct io_context; |
| 144 | static inline void put_io_context(struct io_context *ioc, | 144 | static inline void put_io_context(struct io_context *ioc) { } |
| 145 | struct request_queue *locked_q) { } | ||
| 146 | static inline void exit_io_context(struct task_struct *task) { } | 145 | static inline void exit_io_context(struct task_struct *task) { } |
| 147 | #endif | 146 | #endif |
| 148 | 147 | ||
diff --git a/include/linux/irqdomain.h b/include/linux/irqdomain.h index bd4272b61a14..ead4a4215797 100644 --- a/include/linux/irqdomain.h +++ b/include/linux/irqdomain.h | |||
| @@ -9,99 +9,182 @@ | |||
| 9 | * representation into a hardware irq number that can be mapped back to a | 9 | * representation into a hardware irq number that can be mapped back to a |
| 10 | * Linux irq number without any extra platform support code. | 10 | * Linux irq number without any extra platform support code. |
| 11 | * | 11 | * |
| 12 | * irq_domain is expected to be embedded in an interrupt controller's private | 12 | * Interrupt controller "domain" data structure. This could be defined as a |
| 13 | * data structure. | 13 | * irq domain controller. That is, it handles the mapping between hardware |
| 14 | * and virtual interrupt numbers for a given interrupt domain. The domain | ||
| 15 | * structure is generally created by the PIC code for a given PIC instance | ||
| 16 | * (though a domain can cover more than one PIC if they have a flat number | ||
| 17 | * model). It's the domain callbacks that are responsible for setting the | ||
| 18 | * irq_chip on a given irq_desc after it's been mapped. | ||
| 19 | * | ||
| 20 | * The host code and data structures are agnostic to whether or not | ||
| 21 | * we use an open firmware device-tree. We do have references to struct | ||
| 22 | * device_node in two places: in irq_find_host() to find the host matching | ||
| 23 | * a given interrupt controller node, and of course as an argument to its | ||
| 24 | * counterpart domain->ops->match() callback. However, those are treated as | ||
| 25 | * generic pointers by the core and the fact that it's actually a device-node | ||
| 26 | * pointer is purely a convention between callers and implementation. This | ||
| 27 | * code could thus be used on other architectures by replacing those two | ||
| 28 | * by some sort of arch-specific void * "token" used to identify interrupt | ||
| 29 | * controllers. | ||
| 14 | */ | 30 | */ |
| 31 | |||
| 15 | #ifndef _LINUX_IRQDOMAIN_H | 32 | #ifndef _LINUX_IRQDOMAIN_H |
| 16 | #define _LINUX_IRQDOMAIN_H | 33 | #define _LINUX_IRQDOMAIN_H |
| 17 | 34 | ||
| 18 | #include <linux/irq.h> | 35 | #include <linux/types.h> |
| 19 | #include <linux/mod_devicetable.h> | 36 | #include <linux/radix-tree.h> |
| 20 | 37 | ||
| 21 | #ifdef CONFIG_IRQ_DOMAIN | ||
| 22 | struct device_node; | 38 | struct device_node; |
| 23 | struct irq_domain; | 39 | struct irq_domain; |
| 40 | struct of_device_id; | ||
| 41 | |||
| 42 | /* Number of irqs reserved for a legacy isa controller */ | ||
| 43 | #define NUM_ISA_INTERRUPTS 16 | ||
| 44 | |||
| 45 | /* This type is the placeholder for a hardware interrupt number. It has to | ||
| 46 | * be big enough to enclose whatever representation is used by a given | ||
| 47 | * platform. | ||
| 48 | */ | ||
| 49 | typedef unsigned long irq_hw_number_t; | ||
| 24 | 50 | ||
| 25 | /** | 51 | /** |
| 26 | * struct irq_domain_ops - Methods for irq_domain objects | 52 | * struct irq_domain_ops - Methods for irq_domain objects |
| 27 | * @to_irq: (optional) given a local hardware irq number, return the linux | 53 | * @match: Match an interrupt controller device node to a host, returns |
| 28 | * irq number. If to_irq is not implemented, then the irq_domain | 54 | * 1 on a match |
| 29 | * will use this translation: irq = (domain->irq_base + hwirq) | 55 | * @map: Create or update a mapping between a virtual irq number and a hw |
| 30 | * @dt_translate: Given a device tree node and interrupt specifier, decode | 56 | * irq number. This is called only once for a given mapping. |
| 31 | * the hardware irq number and linux irq type value. | 57 | * @unmap: Dispose of such a mapping |
| 58 | * @xlate: Given a device tree node and interrupt specifier, decode | ||
| 59 | * the hardware irq number and linux irq type value. | ||
| 60 | * | ||
| 61 | * Functions below are provided by the driver and called whenever a new mapping | ||
| 62 | * is created or an old mapping is disposed. The driver can then proceed to | ||
| 63 | * whatever internal data structures management is required. It also needs | ||
| 64 | * to setup the irq_desc when returning from map(). | ||
| 32 | */ | 65 | */ |
| 33 | struct irq_domain_ops { | 66 | struct irq_domain_ops { |
| 34 | unsigned int (*to_irq)(struct irq_domain *d, unsigned long hwirq); | 67 | int (*match)(struct irq_domain *d, struct device_node *node); |
| 35 | 68 | int (*map)(struct irq_domain *d, unsigned int virq, irq_hw_number_t hw); | |
| 36 | #ifdef CONFIG_OF | 69 | void (*unmap)(struct irq_domain *d, unsigned int virq); |
| 37 | int (*dt_translate)(struct irq_domain *d, struct device_node *node, | 70 | int (*xlate)(struct irq_domain *d, struct device_node *node, |
| 38 | const u32 *intspec, unsigned int intsize, | 71 | const u32 *intspec, unsigned int intsize, |
| 39 | unsigned long *out_hwirq, unsigned int *out_type); | 72 | unsigned long *out_hwirq, unsigned int *out_type); |
| 40 | #endif /* CONFIG_OF */ | ||
| 41 | }; | 73 | }; |
| 42 | 74 | ||
| 43 | /** | 75 | /** |
| 44 | * struct irq_domain - Hardware interrupt number translation object | 76 | * struct irq_domain - Hardware interrupt number translation object |
| 45 | * @list: Element in global irq_domain list. | 77 | * @link: Element in global irq_domain list. |
| 78 | * @revmap_type: Method used for reverse mapping hwirq numbers to linux irq. This | ||
| 79 | * will be one of the IRQ_DOMAIN_MAP_* values. | ||
| 80 | * @revmap_data: Revmap method specific data. | ||
| 81 | * @ops: pointer to irq_domain methods | ||
| 82 | * @host_data: private data pointer for use by owner. Not touched by irq_domain | ||
| 83 | * core code. | ||
| 46 | * @irq_base: Start of irq_desc range assigned to the irq_domain. The creator | 84 | * @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 | 85 | * of the irq_domain is responsible for allocating the array of |
| 48 | * irq_desc structures. | 86 | * irq_desc structures. |
| 49 | * @nr_irq: Number of irqs managed by the irq domain | 87 | * @nr_irq: Number of irqs managed by the irq domain |
| 50 | * @hwirq_base: Starting number for hwirqs managed by the irq domain | 88 | * @hwirq_base: Starting number for hwirqs managed by the irq domain |
| 51 | * @ops: pointer to irq_domain methods | ||
| 52 | * @priv: private data pointer for use by owner. Not touched by irq_domain | ||
| 53 | * core code. | ||
| 54 | * @of_node: (optional) Pointer to device tree nodes associated with the | 89 | * @of_node: (optional) Pointer to device tree nodes associated with the |
| 55 | * irq_domain. Used when decoding device tree interrupt specifiers. | 90 | * irq_domain. Used when decoding device tree interrupt specifiers. |
| 56 | */ | 91 | */ |
| 57 | struct irq_domain { | 92 | struct irq_domain { |
| 58 | struct list_head list; | 93 | struct list_head link; |
| 59 | unsigned int irq_base; | 94 | |
| 60 | unsigned int nr_irq; | 95 | /* type of reverse mapping_technique */ |
| 61 | unsigned int hwirq_base; | 96 | unsigned int revmap_type; |
| 97 | union { | ||
| 98 | struct { | ||
| 99 | unsigned int size; | ||
| 100 | unsigned int first_irq; | ||
| 101 | irq_hw_number_t first_hwirq; | ||
| 102 | } legacy; | ||
| 103 | struct { | ||
| 104 | unsigned int size; | ||
| 105 | unsigned int *revmap; | ||
| 106 | } linear; | ||
| 107 | struct radix_tree_root tree; | ||
| 108 | } revmap_data; | ||
| 62 | const struct irq_domain_ops *ops; | 109 | const struct irq_domain_ops *ops; |
| 63 | void *priv; | 110 | void *host_data; |
| 111 | irq_hw_number_t inval_irq; | ||
| 112 | |||
| 113 | /* Optional device node pointer */ | ||
| 64 | struct device_node *of_node; | 114 | struct device_node *of_node; |
| 65 | }; | 115 | }; |
| 66 | 116 | ||
| 67 | /** | 117 | #ifdef CONFIG_IRQ_DOMAIN |
| 68 | * irq_domain_to_irq() - Translate from a hardware irq to a linux irq number | 118 | struct irq_domain *irq_domain_add_legacy(struct device_node *of_node, |
| 69 | * | 119 | unsigned int size, |
| 70 | * Returns the linux irq number associated with a hardware irq. By default, | 120 | unsigned int first_irq, |
| 71 | * the mapping is irq == domain->irq_base + hwirq, but this mapping can | 121 | irq_hw_number_t first_hwirq, |
| 72 | * be overridden if the irq_domain implements a .to_irq() hook. | 122 | const struct irq_domain_ops *ops, |
| 73 | */ | 123 | void *host_data); |
| 74 | static inline unsigned int irq_domain_to_irq(struct irq_domain *d, | 124 | struct irq_domain *irq_domain_add_linear(struct device_node *of_node, |
| 75 | unsigned long hwirq) | 125 | unsigned int size, |
| 126 | const struct irq_domain_ops *ops, | ||
| 127 | void *host_data); | ||
| 128 | struct irq_domain *irq_domain_add_nomap(struct device_node *of_node, | ||
| 129 | const struct irq_domain_ops *ops, | ||
| 130 | void *host_data); | ||
| 131 | struct irq_domain *irq_domain_add_tree(struct device_node *of_node, | ||
| 132 | const struct irq_domain_ops *ops, | ||
| 133 | void *host_data); | ||
| 134 | |||
| 135 | extern struct irq_domain *irq_find_host(struct device_node *node); | ||
| 136 | extern void irq_set_default_host(struct irq_domain *host); | ||
| 137 | extern void irq_set_virq_count(unsigned int count); | ||
| 138 | |||
| 139 | static inline struct irq_domain *irq_domain_add_legacy_isa( | ||
| 140 | struct device_node *of_node, | ||
| 141 | const struct irq_domain_ops *ops, | ||
| 142 | void *host_data) | ||
| 76 | { | 143 | { |
| 77 | if (d->ops->to_irq) | 144 | return irq_domain_add_legacy(of_node, NUM_ISA_INTERRUPTS, 0, 0, ops, |
| 78 | return d->ops->to_irq(d, hwirq); | 145 | host_data); |
| 79 | if (WARN_ON(hwirq < d->hwirq_base)) | ||
| 80 | return 0; | ||
| 81 | return d->irq_base + hwirq - d->hwirq_base; | ||
| 82 | } | 146 | } |
| 147 | extern struct irq_domain *irq_find_host(struct device_node *node); | ||
| 148 | extern void irq_set_default_host(struct irq_domain *host); | ||
| 149 | extern void irq_set_virq_count(unsigned int count); | ||
| 83 | 150 | ||
| 84 | #define irq_domain_for_each_hwirq(d, hw) \ | ||
| 85 | for (hw = d->hwirq_base; hw < d->hwirq_base + d->nr_irq; hw++) | ||
| 86 | 151 | ||
| 87 | #define irq_domain_for_each_irq(d, hw, irq) \ | 152 | extern unsigned int irq_create_mapping(struct irq_domain *host, |
| 88 | for (hw = d->hwirq_base, irq = irq_domain_to_irq(d, hw); \ | 153 | irq_hw_number_t hwirq); |
| 89 | hw < d->hwirq_base + d->nr_irq; \ | 154 | extern void irq_dispose_mapping(unsigned int virq); |
| 90 | hw++, irq = irq_domain_to_irq(d, hw)) | 155 | extern unsigned int irq_find_mapping(struct irq_domain *host, |
| 156 | irq_hw_number_t hwirq); | ||
| 157 | extern unsigned int irq_create_direct_mapping(struct irq_domain *host); | ||
| 158 | extern void irq_radix_revmap_insert(struct irq_domain *host, unsigned int virq, | ||
| 159 | irq_hw_number_t hwirq); | ||
| 160 | extern unsigned int irq_radix_revmap_lookup(struct irq_domain *host, | ||
| 161 | irq_hw_number_t hwirq); | ||
| 162 | extern unsigned int irq_linear_revmap(struct irq_domain *host, | ||
| 163 | irq_hw_number_t hwirq); | ||
| 91 | 164 | ||
| 92 | extern void irq_domain_add(struct irq_domain *domain); | 165 | extern const struct irq_domain_ops irq_domain_simple_ops; |
| 93 | extern void irq_domain_del(struct irq_domain *domain); | ||
| 94 | 166 | ||
| 95 | extern struct irq_domain_ops irq_domain_simple_ops; | 167 | /* stock xlate functions */ |
| 96 | #endif /* CONFIG_IRQ_DOMAIN */ | 168 | int irq_domain_xlate_onecell(struct irq_domain *d, struct device_node *ctrlr, |
| 169 | const u32 *intspec, unsigned int intsize, | ||
| 170 | irq_hw_number_t *out_hwirq, unsigned int *out_type); | ||
| 171 | int irq_domain_xlate_twocell(struct irq_domain *d, struct device_node *ctrlr, | ||
| 172 | const u32 *intspec, unsigned int intsize, | ||
| 173 | irq_hw_number_t *out_hwirq, unsigned int *out_type); | ||
| 174 | int irq_domain_xlate_onetwocell(struct irq_domain *d, struct device_node *ctrlr, | ||
| 175 | const u32 *intspec, unsigned int intsize, | ||
| 176 | irq_hw_number_t *out_hwirq, unsigned int *out_type); | ||
| 97 | 177 | ||
| 98 | #if defined(CONFIG_IRQ_DOMAIN) && defined(CONFIG_OF_IRQ) | 178 | #if defined(CONFIG_OF_IRQ) |
| 99 | extern void irq_domain_add_simple(struct device_node *controller, int irq_base); | ||
| 100 | extern void irq_domain_generate_simple(const struct of_device_id *match, | 179 | extern void irq_domain_generate_simple(const struct of_device_id *match, |
| 101 | u64 phys_base, unsigned int irq_start); | 180 | u64 phys_base, unsigned int irq_start); |
| 102 | #else /* CONFIG_IRQ_DOMAIN && CONFIG_OF_IRQ */ | 181 | #else /* CONFIG_OF_IRQ */ |
| 103 | static inline void irq_domain_generate_simple(const struct of_device_id *match, | 182 | static inline void irq_domain_generate_simple(const struct of_device_id *match, |
| 104 | u64 phys_base, unsigned int irq_start) { } | 183 | u64 phys_base, unsigned int irq_start) { } |
| 105 | #endif /* CONFIG_IRQ_DOMAIN && CONFIG_OF_IRQ */ | 184 | #endif /* !CONFIG_OF_IRQ */ |
| 185 | |||
| 186 | #else /* CONFIG_IRQ_DOMAIN */ | ||
| 187 | static inline void irq_dispose_mapping(unsigned int virq) { } | ||
| 188 | #endif /* !CONFIG_IRQ_DOMAIN */ | ||
| 106 | 189 | ||
| 107 | #endif /* _LINUX_IRQDOMAIN_H */ | 190 | #endif /* _LINUX_IRQDOMAIN_H */ |
diff --git a/include/linux/lp8727.h b/include/linux/lp8727.h index d21fa2865bf4..d21fa2865bf4 100755..100644 --- a/include/linux/lp8727.h +++ b/include/linux/lp8727.h | |||
diff --git a/include/linux/mfd/twl6040.h b/include/linux/mfd/twl6040.h index 2463c2619596..9bc9ac651dad 100644 --- a/include/linux/mfd/twl6040.h +++ b/include/linux/mfd/twl6040.h | |||
| @@ -187,8 +187,10 @@ struct twl6040 { | |||
| 187 | int rev; | 187 | int rev; |
| 188 | u8 vibra_ctrl_cache[2]; | 188 | u8 vibra_ctrl_cache[2]; |
| 189 | 189 | ||
| 190 | /* PLL configuration */ | ||
| 190 | int pll; | 191 | int pll; |
| 191 | unsigned int sysclk; | 192 | unsigned int sysclk; |
| 193 | unsigned int mclk; | ||
| 192 | 194 | ||
| 193 | unsigned int irq; | 195 | unsigned int irq; |
| 194 | unsigned int irq_base; | 196 | unsigned int irq_base; |
diff --git a/include/linux/mpi.h b/include/linux/mpi.h index 06f88994ccaa..d02cca6cc8ce 100644 --- a/include/linux/mpi.h +++ b/include/linux/mpi.h | |||
| @@ -57,8 +57,6 @@ struct gcry_mpi { | |||
| 57 | 57 | ||
| 58 | typedef struct gcry_mpi *MPI; | 58 | typedef struct gcry_mpi *MPI; |
| 59 | 59 | ||
| 60 | #define MPI_NULL NULL | ||
| 61 | |||
| 62 | #define mpi_get_nlimbs(a) ((a)->nlimbs) | 60 | #define mpi_get_nlimbs(a) ((a)->nlimbs) |
| 63 | #define mpi_is_neg(a) ((a)->sign) | 61 | #define mpi_is_neg(a) ((a)->sign) |
| 64 | 62 | ||
diff --git a/include/linux/mtd/mtd.h b/include/linux/mtd/mtd.h index 221295208fd0..d43dc25af82e 100644 --- a/include/linux/mtd/mtd.h +++ b/include/linux/mtd/mtd.h | |||
| @@ -427,9 +427,7 @@ static inline int mtd_is_locked(struct mtd_info *mtd, loff_t ofs, uint64_t len) | |||
| 427 | 427 | ||
| 428 | static inline int mtd_suspend(struct mtd_info *mtd) | 428 | static inline int mtd_suspend(struct mtd_info *mtd) |
| 429 | { | 429 | { |
| 430 | if (!mtd->suspend) | 430 | return mtd->suspend ? mtd->suspend(mtd) : 0; |
| 431 | return -EOPNOTSUPP; | ||
| 432 | return mtd->suspend(mtd); | ||
| 433 | } | 431 | } |
| 434 | 432 | ||
| 435 | static inline void mtd_resume(struct mtd_info *mtd) | 433 | static inline void mtd_resume(struct mtd_info *mtd) |
| @@ -489,7 +487,7 @@ static inline int mtd_has_oob(const struct mtd_info *mtd) | |||
| 489 | 487 | ||
| 490 | static inline int mtd_can_have_bb(const struct mtd_info *mtd) | 488 | static inline int mtd_can_have_bb(const struct mtd_info *mtd) |
| 491 | { | 489 | { |
| 492 | return 0; | 490 | return !!mtd->block_isbad; |
| 493 | } | 491 | } |
| 494 | 492 | ||
| 495 | /* Kernel-side ioctl definitions */ | 493 | /* Kernel-side ioctl definitions */ |
diff --git a/include/linux/of_address.h b/include/linux/of_address.h index 3118623c2c1f..01b925ad8d78 100644 --- a/include/linux/of_address.h +++ b/include/linux/of_address.h | |||
| @@ -4,6 +4,7 @@ | |||
| 4 | #include <linux/errno.h> | 4 | #include <linux/errno.h> |
| 5 | #include <linux/of.h> | 5 | #include <linux/of.h> |
| 6 | 6 | ||
| 7 | #ifdef CONFIG_OF_ADDRESS | ||
| 7 | extern u64 of_translate_address(struct device_node *np, const __be32 *addr); | 8 | extern u64 of_translate_address(struct device_node *np, const __be32 *addr); |
| 8 | extern int of_address_to_resource(struct device_node *dev, int index, | 9 | extern int of_address_to_resource(struct device_node *dev, int index, |
| 9 | struct resource *r); | 10 | struct resource *r); |
| @@ -25,12 +26,37 @@ static inline unsigned long pci_address_to_pio(phys_addr_t addr) { return -1; } | |||
| 25 | #define pci_address_to_pio pci_address_to_pio | 26 | #define pci_address_to_pio pci_address_to_pio |
| 26 | #endif | 27 | #endif |
| 27 | 28 | ||
| 28 | #ifdef CONFIG_PCI | 29 | #else /* CONFIG_OF_ADDRESS */ |
| 30 | static inline int of_address_to_resource(struct device_node *dev, int index, | ||
| 31 | struct resource *r) | ||
| 32 | { | ||
| 33 | return -EINVAL; | ||
| 34 | } | ||
| 35 | static inline struct device_node *of_find_matching_node_by_address( | ||
| 36 | struct device_node *from, | ||
| 37 | const struct of_device_id *matches, | ||
| 38 | u64 base_address) | ||
| 39 | { | ||
| 40 | return NULL; | ||
| 41 | } | ||
| 42 | static inline void __iomem *of_iomap(struct device_node *device, int index) | ||
| 43 | { | ||
| 44 | return NULL; | ||
| 45 | } | ||
| 46 | static inline const u32 *of_get_address(struct device_node *dev, int index, | ||
| 47 | u64 *size, unsigned int *flags) | ||
| 48 | { | ||
| 49 | return NULL; | ||
| 50 | } | ||
| 51 | #endif /* CONFIG_OF_ADDRESS */ | ||
| 52 | |||
| 53 | |||
| 54 | #if defined(CONFIG_OF_ADDRESS) && defined(CONFIG_PCI) | ||
| 29 | extern const __be32 *of_get_pci_address(struct device_node *dev, int bar_no, | 55 | extern const __be32 *of_get_pci_address(struct device_node *dev, int bar_no, |
| 30 | u64 *size, unsigned int *flags); | 56 | u64 *size, unsigned int *flags); |
| 31 | extern int of_pci_address_to_resource(struct device_node *dev, int bar, | 57 | extern int of_pci_address_to_resource(struct device_node *dev, int bar, |
| 32 | struct resource *r); | 58 | struct resource *r); |
| 33 | #else /* CONFIG_PCI */ | 59 | #else /* CONFIG_OF_ADDRESS && CONFIG_PCI */ |
| 34 | static inline int of_pci_address_to_resource(struct device_node *dev, int bar, | 60 | static inline int of_pci_address_to_resource(struct device_node *dev, int bar, |
| 35 | struct resource *r) | 61 | struct resource *r) |
| 36 | { | 62 | { |
| @@ -42,8 +68,7 @@ static inline const __be32 *of_get_pci_address(struct device_node *dev, | |||
| 42 | { | 68 | { |
| 43 | return NULL; | 69 | return NULL; |
| 44 | } | 70 | } |
| 45 | #endif /* CONFIG_PCI */ | 71 | #endif /* CONFIG_OF_ADDRESS && CONFIG_PCI */ |
| 46 | |||
| 47 | 72 | ||
| 48 | #endif /* __OF_ADDRESS_H */ | 73 | #endif /* __OF_ADDRESS_H */ |
| 49 | 74 | ||
diff --git a/include/linux/of_irq.h b/include/linux/of_irq.h index d0307eed20c9..d229ad3edee0 100644 --- a/include/linux/of_irq.h +++ b/include/linux/of_irq.h | |||
| @@ -6,6 +6,7 @@ struct of_irq; | |||
| 6 | #include <linux/types.h> | 6 | #include <linux/types.h> |
| 7 | #include <linux/errno.h> | 7 | #include <linux/errno.h> |
| 8 | #include <linux/irq.h> | 8 | #include <linux/irq.h> |
| 9 | #include <linux/irqdomain.h> | ||
| 9 | #include <linux/ioport.h> | 10 | #include <linux/ioport.h> |
| 10 | #include <linux/of.h> | 11 | #include <linux/of.h> |
| 11 | 12 | ||
| @@ -65,9 +66,6 @@ extern int of_irq_map_one(struct device_node *device, int index, | |||
| 65 | extern unsigned int irq_create_of_mapping(struct device_node *controller, | 66 | extern unsigned int irq_create_of_mapping(struct device_node *controller, |
| 66 | const u32 *intspec, | 67 | const u32 *intspec, |
| 67 | unsigned int intsize); | 68 | unsigned int intsize); |
| 68 | #ifdef CONFIG_IRQ_DOMAIN | ||
| 69 | extern void irq_dispose_mapping(unsigned int irq); | ||
| 70 | #endif | ||
| 71 | 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, |
| 72 | struct resource *r); | 70 | struct resource *r); |
| 73 | extern int of_irq_count(struct device_node *dev); | 71 | extern int of_irq_count(struct device_node *dev); |
diff --git a/include/linux/of_platform.h b/include/linux/of_platform.h index 040ce2f6e8de..242fa3563e2e 100644 --- a/include/linux/of_platform.h +++ b/include/linux/of_platform.h | |||
| @@ -81,7 +81,7 @@ extern struct platform_device *of_device_alloc(struct device_node *np, | |||
| 81 | struct device *parent); | 81 | struct device *parent); |
| 82 | extern struct platform_device *of_find_device_by_node(struct device_node *np); | 82 | extern struct platform_device *of_find_device_by_node(struct device_node *np); |
| 83 | 83 | ||
| 84 | #if !defined(CONFIG_SPARC) /* SPARC has its own device registration method */ | 84 | #ifdef CONFIG_OF_ADDRESS /* device reg helpers depend on OF_ADDRESS */ |
| 85 | /* Platform devices and busses creation */ | 85 | /* Platform devices and busses creation */ |
| 86 | extern struct platform_device *of_platform_device_create(struct device_node *np, | 86 | extern struct platform_device *of_platform_device_create(struct device_node *np, |
| 87 | const char *bus_id, | 87 | const char *bus_id, |
| @@ -94,7 +94,15 @@ extern int of_platform_populate(struct device_node *root, | |||
| 94 | const struct of_device_id *matches, | 94 | const struct of_device_id *matches, |
| 95 | const struct of_dev_auxdata *lookup, | 95 | const struct of_dev_auxdata *lookup, |
| 96 | struct device *parent); | 96 | struct device *parent); |
| 97 | #endif /* !CONFIG_SPARC */ | 97 | #else |
| 98 | static inline int of_platform_populate(struct device_node *root, | ||
| 99 | const struct of_device_id *matches, | ||
| 100 | const struct of_dev_auxdata *lookup, | ||
| 101 | struct device *parent) | ||
| 102 | { | ||
| 103 | return -ENODEV; | ||
| 104 | } | ||
| 105 | #endif /* !CONFIG_OF_ADDRESS */ | ||
| 98 | 106 | ||
| 99 | #endif /* CONFIG_OF_DEVICE */ | 107 | #endif /* CONFIG_OF_DEVICE */ |
| 100 | 108 | ||
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h index 08855613ceb3..abb2776be1ba 100644 --- a/include/linux/perf_event.h +++ b/include/linux/perf_event.h | |||
| @@ -587,6 +587,7 @@ struct hw_perf_event { | |||
| 587 | u64 sample_period; | 587 | u64 sample_period; |
| 588 | u64 last_period; | 588 | u64 last_period; |
| 589 | local64_t period_left; | 589 | local64_t period_left; |
| 590 | u64 interrupts_seq; | ||
| 590 | u64 interrupts; | 591 | u64 interrupts; |
| 591 | 592 | ||
| 592 | u64 freq_time_stamp; | 593 | u64 freq_time_stamp; |
diff --git a/include/linux/pm_qos.h b/include/linux/pm_qos.h index e5bbcbaa6f57..4d99e4e6ef83 100644 --- a/include/linux/pm_qos.h +++ b/include/linux/pm_qos.h | |||
| @@ -110,7 +110,19 @@ static inline void pm_qos_remove_request(struct pm_qos_request *req) | |||
| 110 | { return; } | 110 | { return; } |
| 111 | 111 | ||
| 112 | static inline int pm_qos_request(int pm_qos_class) | 112 | static inline int pm_qos_request(int pm_qos_class) |
| 113 | { return 0; } | 113 | { |
| 114 | switch (pm_qos_class) { | ||
| 115 | case PM_QOS_CPU_DMA_LATENCY: | ||
| 116 | return PM_QOS_CPU_DMA_LAT_DEFAULT_VALUE; | ||
| 117 | case PM_QOS_NETWORK_LATENCY: | ||
| 118 | return PM_QOS_NETWORK_LAT_DEFAULT_VALUE; | ||
| 119 | case PM_QOS_NETWORK_THROUGHPUT: | ||
| 120 | return PM_QOS_NETWORK_THROUGHPUT_DEFAULT_VALUE; | ||
| 121 | default: | ||
| 122 | return PM_QOS_DEFAULT_VALUE; | ||
| 123 | } | ||
| 124 | } | ||
| 125 | |||
| 114 | static inline int pm_qos_add_notifier(int pm_qos_class, | 126 | static inline int pm_qos_add_notifier(int pm_qos_class, |
| 115 | struct notifier_block *notifier) | 127 | struct notifier_block *notifier) |
| 116 | { return 0; } | 128 | { return 0; } |
diff --git a/include/linux/proportions.h b/include/linux/proportions.h index ef35bb73f69b..26a8a4ed9b07 100644 --- a/include/linux/proportions.h +++ b/include/linux/proportions.h | |||
| @@ -81,7 +81,11 @@ void prop_inc_percpu(struct prop_descriptor *pd, struct prop_local_percpu *pl) | |||
| 81 | * Limit the time part in order to ensure there are some bits left for the | 81 | * Limit the time part in order to ensure there are some bits left for the |
| 82 | * cycle counter and fraction multiply. | 82 | * cycle counter and fraction multiply. |
| 83 | */ | 83 | */ |
| 84 | #if BITS_PER_LONG == 32 | ||
| 84 | #define PROP_MAX_SHIFT (3*BITS_PER_LONG/4) | 85 | #define PROP_MAX_SHIFT (3*BITS_PER_LONG/4) |
| 86 | #else | ||
| 87 | #define PROP_MAX_SHIFT (BITS_PER_LONG/2) | ||
| 88 | #endif | ||
| 85 | 89 | ||
| 86 | #define PROP_FRAC_SHIFT (BITS_PER_LONG - PROP_MAX_SHIFT - 1) | 90 | #define PROP_FRAC_SHIFT (BITS_PER_LONG - PROP_MAX_SHIFT - 1) |
| 87 | #define PROP_FRAC_BASE (1UL << PROP_FRAC_SHIFT) | 91 | #define PROP_FRAC_BASE (1UL << PROP_FRAC_SHIFT) |
diff --git a/include/linux/sched.h b/include/linux/sched.h index 2234985a5e65..7d379a6bfd88 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
| @@ -2259,6 +2259,12 @@ static inline void mmdrop(struct mm_struct * mm) | |||
| 2259 | extern void mmput(struct mm_struct *); | 2259 | extern void mmput(struct mm_struct *); |
| 2260 | /* Grab a reference to a task's mm, if it is not already going away */ | 2260 | /* Grab a reference to a task's mm, if it is not already going away */ |
| 2261 | extern struct mm_struct *get_task_mm(struct task_struct *task); | 2261 | extern struct mm_struct *get_task_mm(struct task_struct *task); |
| 2262 | /* | ||
| 2263 | * Grab a reference to a task's mm, if it is not already going away | ||
| 2264 | * and ptrace_may_access with the mode parameter passed to it | ||
| 2265 | * succeeds. | ||
| 2266 | */ | ||
| 2267 | extern struct mm_struct *mm_access(struct task_struct *task, unsigned int mode); | ||
| 2262 | /* Remove the current tasks stale references to the old mm_struct */ | 2268 | /* Remove the current tasks stale references to the old mm_struct */ |
| 2263 | extern void mm_release(struct task_struct *, struct mm_struct *); | 2269 | extern void mm_release(struct task_struct *, struct mm_struct *); |
| 2264 | /* Allocate a new mm structure and copy contents from tsk->mm */ | 2270 | /* Allocate a new mm structure and copy contents from tsk->mm */ |
diff --git a/include/linux/sh_dma.h b/include/linux/sh_dma.h index 8cd7fe59cf1a..425450b980b8 100644 --- a/include/linux/sh_dma.h +++ b/include/linux/sh_dma.h | |||
| @@ -70,6 +70,7 @@ struct sh_dmae_pdata { | |||
| 70 | unsigned int needs_tend_set:1; | 70 | unsigned int needs_tend_set:1; |
| 71 | unsigned int no_dmars:1; | 71 | unsigned int no_dmars:1; |
| 72 | unsigned int chclr_present:1; | 72 | unsigned int chclr_present:1; |
| 73 | unsigned int slave_only:1; | ||
| 73 | }; | 74 | }; |
| 74 | 75 | ||
| 75 | /* DMA register */ | 76 | /* DMA register */ |
diff --git a/include/linux/usb/ch9.h b/include/linux/usb/ch9.h index 61b29057b054..3b6f628880f8 100644 --- a/include/linux/usb/ch9.h +++ b/include/linux/usb/ch9.h | |||
| @@ -589,7 +589,7 @@ static inline int usb_endpoint_is_isoc_out( | |||
| 589 | */ | 589 | */ |
| 590 | static inline int usb_endpoint_maxp(const struct usb_endpoint_descriptor *epd) | 590 | static inline int usb_endpoint_maxp(const struct usb_endpoint_descriptor *epd) |
| 591 | { | 591 | { |
| 592 | return le16_to_cpu(epd->wMaxPacketSize); | 592 | return __le16_to_cpu(epd->wMaxPacketSize); |
| 593 | } | 593 | } |
| 594 | 594 | ||
| 595 | /*-------------------------------------------------------------------------*/ | 595 | /*-------------------------------------------------------------------------*/ |
