diff options
Diffstat (limited to 'include')
131 files changed, 3111 insertions, 1057 deletions
diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h index 7bf83ddf82e0..baacd98e7cc6 100644 --- a/include/acpi/acpi_bus.h +++ b/include/acpi/acpi_bus.h | |||
| @@ -373,7 +373,7 @@ struct acpi_pci_root { | |||
| 373 | struct acpi_pci_id id; | 373 | struct acpi_pci_id id; |
| 374 | struct pci_bus *bus; | 374 | struct pci_bus *bus; |
| 375 | u16 segment; | 375 | u16 segment; |
| 376 | u8 bus_nr; | 376 | struct resource secondary; /* downstream bus range */ |
| 377 | 377 | ||
| 378 | u32 osc_support_set; /* _OSC state of support bits */ | 378 | u32 osc_support_set; /* _OSC state of support bits */ |
| 379 | u32 osc_control_set; /* _OSC state of control bits */ | 379 | u32 osc_control_set; /* _OSC state of control bits */ |
diff --git a/include/acpi/acpi_drivers.h b/include/acpi/acpi_drivers.h index 4f7b44866b76..23d78b4d088b 100644 --- a/include/acpi/acpi_drivers.h +++ b/include/acpi/acpi_drivers.h | |||
| @@ -104,8 +104,7 @@ int acpi_pci_bind_root(struct acpi_device *device); | |||
| 104 | 104 | ||
| 105 | /* Arch-defined function to add a bus to the system */ | 105 | /* Arch-defined function to add a bus to the system */ |
| 106 | 106 | ||
| 107 | struct pci_bus *pci_acpi_scan_root(struct acpi_device *device, int domain, | 107 | struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root); |
| 108 | int bus); | ||
| 109 | void pci_acpi_crs_quirks(void); | 108 | void pci_acpi_crs_quirks(void); |
| 110 | 109 | ||
| 111 | /* -------------------------------------------------------------------------- | 110 | /* -------------------------------------------------------------------------- |
diff --git a/include/acpi/acpi_hest.h b/include/acpi/acpi_hest.h deleted file mode 100644 index 63194d03cb2d..000000000000 --- a/include/acpi/acpi_hest.h +++ /dev/null | |||
| @@ -1,12 +0,0 @@ | |||
| 1 | #ifndef __ACPI_HEST_H | ||
| 2 | #define __ACPI_HEST_H | ||
| 3 | |||
| 4 | #include <linux/pci.h> | ||
| 5 | |||
| 6 | #ifdef CONFIG_ACPI | ||
| 7 | extern int acpi_hest_firmware_first_pci(struct pci_dev *pci); | ||
| 8 | #else | ||
| 9 | static inline int acpi_hest_firmware_first_pci(struct pci_dev *pci) { return 0; } | ||
| 10 | #endif | ||
| 11 | |||
| 12 | #endif | ||
diff --git a/include/acpi/apei.h b/include/acpi/apei.h new file mode 100644 index 000000000000..b3365025ff8d --- /dev/null +++ b/include/acpi/apei.h | |||
| @@ -0,0 +1,34 @@ | |||
| 1 | /* | ||
| 2 | * apei.h - ACPI Platform Error Interface | ||
| 3 | */ | ||
| 4 | |||
| 5 | #ifndef ACPI_APEI_H | ||
| 6 | #define ACPI_APEI_H | ||
| 7 | |||
| 8 | #include <linux/acpi.h> | ||
| 9 | #include <linux/cper.h> | ||
| 10 | #include <asm/ioctls.h> | ||
| 11 | |||
| 12 | #define APEI_ERST_INVALID_RECORD_ID 0xffffffffffffffffULL | ||
| 13 | |||
| 14 | #define APEI_ERST_CLEAR_RECORD _IOW('E', 1, u64) | ||
| 15 | #define APEI_ERST_GET_RECORD_COUNT _IOR('E', 2, u32) | ||
| 16 | |||
| 17 | #ifdef __KERNEL__ | ||
| 18 | |||
| 19 | extern int hest_disable; | ||
| 20 | extern int erst_disable; | ||
| 21 | |||
| 22 | typedef int (*apei_hest_func_t)(struct acpi_hest_header *hest_hdr, void *data); | ||
| 23 | int apei_hest_parse(apei_hest_func_t func, void *data); | ||
| 24 | |||
| 25 | int erst_write(const struct cper_record_header *record); | ||
| 26 | ssize_t erst_get_record_count(void); | ||
| 27 | int erst_get_next_record_id(u64 *record_id); | ||
| 28 | ssize_t erst_read(u64 record_id, struct cper_record_header *record, | ||
| 29 | size_t buflen); | ||
| 30 | ssize_t erst_read_next(struct cper_record_header *record, size_t buflen); | ||
| 31 | int erst_clear(u64 record_id); | ||
| 32 | |||
| 33 | #endif | ||
| 34 | #endif | ||
diff --git a/include/acpi/atomicio.h b/include/acpi/atomicio.h new file mode 100644 index 000000000000..8b9fb4b0b9ce --- /dev/null +++ b/include/acpi/atomicio.h | |||
| @@ -0,0 +1,10 @@ | |||
| 1 | #ifndef ACPI_ATOMIC_IO_H | ||
| 2 | #define ACPI_ATOMIC_IO_H | ||
| 3 | |||
| 4 | int acpi_pre_map_gar(struct acpi_generic_address *reg); | ||
| 5 | int acpi_post_unmap_gar(struct acpi_generic_address *reg); | ||
| 6 | |||
| 7 | int acpi_atomic_read(u64 *val, struct acpi_generic_address *reg); | ||
| 8 | int acpi_atomic_write(u64 val, struct acpi_generic_address *reg); | ||
| 9 | |||
| 10 | #endif | ||
diff --git a/include/acpi/hed.h b/include/acpi/hed.h new file mode 100644 index 000000000000..46e1249b70cc --- /dev/null +++ b/include/acpi/hed.h | |||
| @@ -0,0 +1,18 @@ | |||
| 1 | /* | ||
| 2 | * hed.h - ACPI Hardware Error Device | ||
| 3 | * | ||
| 4 | * Copyright (C) 2009, Intel Corp. | ||
| 5 | * Author: Huang Ying <ying.huang@intel.com> | ||
| 6 | * | ||
| 7 | * This file is released under the GPLv2. | ||
| 8 | */ | ||
| 9 | |||
| 10 | #ifndef ACPI_HED_H | ||
| 11 | #define ACPI_HED_H | ||
| 12 | |||
| 13 | #include <linux/notifier.h> | ||
| 14 | |||
| 15 | int register_acpi_hed_notifier(struct notifier_block *nb); | ||
| 16 | void unregister_acpi_hed_notifier(struct notifier_block *nb); | ||
| 17 | |||
| 18 | #endif | ||
diff --git a/include/acpi/processor.h b/include/acpi/processor.h index 86825ddbe14e..da565a48240e 100644 --- a/include/acpi/processor.h +++ b/include/acpi/processor.h | |||
| @@ -52,17 +52,6 @@ struct acpi_power_register { | |||
| 52 | u64 address; | 52 | u64 address; |
| 53 | } __attribute__ ((packed)); | 53 | } __attribute__ ((packed)); |
| 54 | 54 | ||
| 55 | struct acpi_processor_cx_policy { | ||
| 56 | u32 count; | ||
| 57 | struct acpi_processor_cx *state; | ||
| 58 | struct { | ||
| 59 | u32 time; | ||
| 60 | u32 ticks; | ||
| 61 | u32 count; | ||
| 62 | u32 bm; | ||
| 63 | } threshold; | ||
| 64 | }; | ||
| 65 | |||
| 66 | struct acpi_processor_cx { | 55 | struct acpi_processor_cx { |
| 67 | u8 valid; | 56 | u8 valid; |
| 68 | u8 type; | 57 | u8 type; |
| @@ -74,8 +63,6 @@ struct acpi_processor_cx { | |||
| 74 | u32 power; | 63 | u32 power; |
| 75 | u32 usage; | 64 | u32 usage; |
| 76 | u64 time; | 65 | u64 time; |
| 77 | struct acpi_processor_cx_policy promotion; | ||
| 78 | struct acpi_processor_cx_policy demotion; | ||
| 79 | char desc[ACPI_CX_DESC_LEN]; | 66 | char desc[ACPI_CX_DESC_LEN]; |
| 80 | }; | 67 | }; |
| 81 | 68 | ||
diff --git a/include/acpi/video.h b/include/acpi/video.h index cf7be3dd157b..551793c9b6e8 100644 --- a/include/acpi/video.h +++ b/include/acpi/video.h | |||
| @@ -1,12 +1,28 @@ | |||
| 1 | #ifndef __ACPI_VIDEO_H | 1 | #ifndef __ACPI_VIDEO_H |
| 2 | #define __ACPI_VIDEO_H | 2 | #define __ACPI_VIDEO_H |
| 3 | 3 | ||
| 4 | #define ACPI_VIDEO_DISPLAY_CRT 1 | ||
| 5 | #define ACPI_VIDEO_DISPLAY_TV 2 | ||
| 6 | #define ACPI_VIDEO_DISPLAY_DVI 3 | ||
| 7 | #define ACPI_VIDEO_DISPLAY_LCD 4 | ||
| 8 | |||
| 9 | #define ACPI_VIDEO_DISPLAY_LEGACY_MONITOR 0x0100 | ||
| 10 | #define ACPI_VIDEO_DISPLAY_LEGACY_PANEL 0x0110 | ||
| 11 | #define ACPI_VIDEO_DISPLAY_LEGACY_TV 0x0200 | ||
| 12 | |||
| 4 | #if (defined CONFIG_ACPI_VIDEO || defined CONFIG_ACPI_VIDEO_MODULE) | 13 | #if (defined CONFIG_ACPI_VIDEO || defined CONFIG_ACPI_VIDEO_MODULE) |
| 5 | extern int acpi_video_register(void); | 14 | extern int acpi_video_register(void); |
| 6 | extern void acpi_video_unregister(void); | 15 | extern void acpi_video_unregister(void); |
| 16 | extern int acpi_video_get_edid(struct acpi_device *device, int type, | ||
| 17 | int device_id, void **edid); | ||
| 7 | #else | 18 | #else |
| 8 | static inline int acpi_video_register(void) { return 0; } | 19 | static inline int acpi_video_register(void) { return 0; } |
| 9 | static inline void acpi_video_unregister(void) { return; } | 20 | static inline void acpi_video_unregister(void) { return; } |
| 21 | static inline int acpi_video_get_edid(struct acpi_device *device, int type, | ||
| 22 | int device_id, void **edid) | ||
| 23 | { | ||
| 24 | return -ENODEV; | ||
| 25 | } | ||
| 10 | #endif | 26 | #endif |
| 11 | 27 | ||
| 12 | #endif | 28 | #endif |
diff --git a/include/asm-generic/dma-mapping-common.h b/include/asm-generic/dma-mapping-common.h index 69206957b72c..0c80bb38773f 100644 --- a/include/asm-generic/dma-mapping-common.h +++ b/include/asm-generic/dma-mapping-common.h | |||
| @@ -123,15 +123,7 @@ static inline void dma_sync_single_range_for_cpu(struct device *dev, | |||
| 123 | size_t size, | 123 | size_t size, |
| 124 | enum dma_data_direction dir) | 124 | enum dma_data_direction dir) |
| 125 | { | 125 | { |
| 126 | struct dma_map_ops *ops = get_dma_ops(dev); | 126 | dma_sync_single_for_cpu(dev, addr + offset, size, dir); |
| 127 | |||
| 128 | BUG_ON(!valid_dma_direction(dir)); | ||
| 129 | if (ops->sync_single_range_for_cpu) { | ||
| 130 | ops->sync_single_range_for_cpu(dev, addr, offset, size, dir); | ||
| 131 | debug_dma_sync_single_range_for_cpu(dev, addr, offset, size, dir); | ||
| 132 | |||
| 133 | } else | ||
| 134 | dma_sync_single_for_cpu(dev, addr + offset, size, dir); | ||
| 135 | } | 127 | } |
| 136 | 128 | ||
| 137 | static inline void dma_sync_single_range_for_device(struct device *dev, | 129 | static inline void dma_sync_single_range_for_device(struct device *dev, |
| @@ -140,15 +132,7 @@ static inline void dma_sync_single_range_for_device(struct device *dev, | |||
| 140 | size_t size, | 132 | size_t size, |
| 141 | enum dma_data_direction dir) | 133 | enum dma_data_direction dir) |
| 142 | { | 134 | { |
| 143 | struct dma_map_ops *ops = get_dma_ops(dev); | 135 | dma_sync_single_for_device(dev, addr + offset, size, dir); |
| 144 | |||
| 145 | BUG_ON(!valid_dma_direction(dir)); | ||
| 146 | if (ops->sync_single_range_for_device) { | ||
| 147 | ops->sync_single_range_for_device(dev, addr, offset, size, dir); | ||
| 148 | debug_dma_sync_single_range_for_device(dev, addr, offset, size, dir); | ||
| 149 | |||
| 150 | } else | ||
| 151 | dma_sync_single_for_device(dev, addr + offset, size, dir); | ||
| 152 | } | 136 | } |
| 153 | 137 | ||
| 154 | static inline void | 138 | static inline void |
diff --git a/include/asm-generic/gpio.h b/include/asm-generic/gpio.h index 979c6a57f2f1..4f3d75e1ad39 100644 --- a/include/asm-generic/gpio.h +++ b/include/asm-generic/gpio.h | |||
| @@ -60,7 +60,9 @@ struct module; | |||
| 60 | * @names: if set, must be an array of strings to use as alternative | 60 | * @names: if set, must be an array of strings to use as alternative |
| 61 | * names for the GPIOs in this chip. Any entry in the array | 61 | * names for the GPIOs in this chip. Any entry in the array |
| 62 | * may be NULL if there is no alias for the GPIO, however the | 62 | * may be NULL if there is no alias for the GPIO, however the |
| 63 | * array must be @ngpio entries long. | 63 | * array must be @ngpio entries long. A name can include a single printk |
| 64 | * format specifier for an unsigned int. It is substituted by the actual | ||
| 65 | * number of the gpio. | ||
| 64 | * | 66 | * |
| 65 | * A gpio_chip can help platforms abstract various sources of GPIOs so | 67 | * A gpio_chip can help platforms abstract various sources of GPIOs so |
| 66 | * they can all be accessed through a common programing interface. | 68 | * they can all be accessed through a common programing interface. |
| @@ -88,6 +90,9 @@ struct gpio_chip { | |||
| 88 | unsigned offset); | 90 | unsigned offset); |
| 89 | int (*direction_output)(struct gpio_chip *chip, | 91 | int (*direction_output)(struct gpio_chip *chip, |
| 90 | unsigned offset, int value); | 92 | unsigned offset, int value); |
| 93 | int (*set_debounce)(struct gpio_chip *chip, | ||
| 94 | unsigned offset, unsigned debounce); | ||
| 95 | |||
| 91 | void (*set)(struct gpio_chip *chip, | 96 | void (*set)(struct gpio_chip *chip, |
| 92 | unsigned offset, int value); | 97 | unsigned offset, int value); |
| 93 | 98 | ||
| @@ -98,7 +103,7 @@ struct gpio_chip { | |||
| 98 | struct gpio_chip *chip); | 103 | struct gpio_chip *chip); |
| 99 | int base; | 104 | int base; |
| 100 | u16 ngpio; | 105 | u16 ngpio; |
| 101 | char **names; | 106 | const char *const *names; |
| 102 | unsigned can_sleep:1; | 107 | unsigned can_sleep:1; |
| 103 | unsigned exported:1; | 108 | unsigned exported:1; |
| 104 | }; | 109 | }; |
| @@ -121,6 +126,8 @@ extern void gpio_free(unsigned gpio); | |||
| 121 | extern int gpio_direction_input(unsigned gpio); | 126 | extern int gpio_direction_input(unsigned gpio); |
| 122 | extern int gpio_direction_output(unsigned gpio, int value); | 127 | extern int gpio_direction_output(unsigned gpio, int value); |
| 123 | 128 | ||
| 129 | extern int gpio_set_debounce(unsigned gpio, unsigned debounce); | ||
| 130 | |||
| 124 | extern int gpio_get_value_cansleep(unsigned gpio); | 131 | extern int gpio_get_value_cansleep(unsigned gpio); |
| 125 | extern void gpio_set_value_cansleep(unsigned gpio, int value); | 132 | extern void gpio_set_value_cansleep(unsigned gpio, int value); |
| 126 | 133 | ||
diff --git a/include/asm-generic/percpu.h b/include/asm-generic/percpu.h index 04f91c2d3f7b..b5043a9890d8 100644 --- a/include/asm-generic/percpu.h +++ b/include/asm-generic/percpu.h | |||
| @@ -80,7 +80,7 @@ extern void setup_per_cpu_areas(void); | |||
| 80 | 80 | ||
| 81 | #ifndef PER_CPU_BASE_SECTION | 81 | #ifndef PER_CPU_BASE_SECTION |
| 82 | #ifdef CONFIG_SMP | 82 | #ifdef CONFIG_SMP |
| 83 | #define PER_CPU_BASE_SECTION ".data.percpu" | 83 | #define PER_CPU_BASE_SECTION ".data..percpu" |
| 84 | #else | 84 | #else |
| 85 | #define PER_CPU_BASE_SECTION ".data" | 85 | #define PER_CPU_BASE_SECTION ".data" |
| 86 | #endif | 86 | #endif |
| @@ -92,15 +92,15 @@ extern void setup_per_cpu_areas(void); | |||
| 92 | #define PER_CPU_SHARED_ALIGNED_SECTION "" | 92 | #define PER_CPU_SHARED_ALIGNED_SECTION "" |
| 93 | #define PER_CPU_ALIGNED_SECTION "" | 93 | #define PER_CPU_ALIGNED_SECTION "" |
| 94 | #else | 94 | #else |
| 95 | #define PER_CPU_SHARED_ALIGNED_SECTION ".shared_aligned" | 95 | #define PER_CPU_SHARED_ALIGNED_SECTION "..shared_aligned" |
| 96 | #define PER_CPU_ALIGNED_SECTION ".shared_aligned" | 96 | #define PER_CPU_ALIGNED_SECTION "..shared_aligned" |
| 97 | #endif | 97 | #endif |
| 98 | #define PER_CPU_FIRST_SECTION ".first" | 98 | #define PER_CPU_FIRST_SECTION "..first" |
| 99 | 99 | ||
| 100 | #else | 100 | #else |
| 101 | 101 | ||
| 102 | #define PER_CPU_SHARED_ALIGNED_SECTION "" | 102 | #define PER_CPU_SHARED_ALIGNED_SECTION "" |
| 103 | #define PER_CPU_ALIGNED_SECTION ".shared_aligned" | 103 | #define PER_CPU_ALIGNED_SECTION "..shared_aligned" |
| 104 | #define PER_CPU_FIRST_SECTION "" | 104 | #define PER_CPU_FIRST_SECTION "" |
| 105 | 105 | ||
| 106 | #endif | 106 | #endif |
diff --git a/include/asm-generic/scatterlist.h b/include/asm-generic/scatterlist.h index 8b9454496a7c..5de07355fad4 100644 --- a/include/asm-generic/scatterlist.h +++ b/include/asm-generic/scatterlist.h | |||
| @@ -11,7 +11,9 @@ struct scatterlist { | |||
| 11 | unsigned int offset; | 11 | unsigned int offset; |
| 12 | unsigned int length; | 12 | unsigned int length; |
| 13 | dma_addr_t dma_address; | 13 | dma_addr_t dma_address; |
| 14 | #ifdef CONFIG_NEED_SG_DMA_LENGTH | ||
| 14 | unsigned int dma_length; | 15 | unsigned int dma_length; |
| 16 | #endif | ||
| 15 | }; | 17 | }; |
| 16 | 18 | ||
| 17 | /* | 19 | /* |
| @@ -22,22 +24,11 @@ struct scatterlist { | |||
| 22 | * is 0. | 24 | * is 0. |
| 23 | */ | 25 | */ |
| 24 | #define sg_dma_address(sg) ((sg)->dma_address) | 26 | #define sg_dma_address(sg) ((sg)->dma_address) |
| 25 | #ifndef sg_dma_len | 27 | |
| 26 | /* | 28 | #ifdef CONFIG_NEED_SG_DMA_LENGTH |
| 27 | * Normally, you have an iommu on 64 bit machines, but not on 32 bit | ||
| 28 | * machines. Architectures that are differnt should override this. | ||
| 29 | */ | ||
| 30 | #if __BITS_PER_LONG == 64 | ||
| 31 | #define sg_dma_len(sg) ((sg)->dma_length) | 29 | #define sg_dma_len(sg) ((sg)->dma_length) |
| 32 | #else | 30 | #else |
| 33 | #define sg_dma_len(sg) ((sg)->length) | 31 | #define sg_dma_len(sg) ((sg)->length) |
| 34 | #endif /* 64 bit */ | ||
| 35 | #endif /* sg_dma_len */ | ||
| 36 | |||
| 37 | #ifndef ISA_DMA_THRESHOLD | ||
| 38 | #define ISA_DMA_THRESHOLD (~0UL) | ||
| 39 | #endif | 32 | #endif |
| 40 | 33 | ||
| 41 | #define ARCH_HAS_SG_CHAIN | ||
| 42 | |||
| 43 | #endif /* __ASM_GENERIC_SCATTERLIST_H */ | 34 | #endif /* __ASM_GENERIC_SCATTERLIST_H */ |
diff --git a/include/asm-generic/topology.h b/include/asm-generic/topology.h index 510df36dd5d4..fd60700503c8 100644 --- a/include/asm-generic/topology.h +++ b/include/asm-generic/topology.h | |||
| @@ -34,6 +34,9 @@ | |||
| 34 | #ifndef cpu_to_node | 34 | #ifndef cpu_to_node |
| 35 | #define cpu_to_node(cpu) ((void)(cpu),0) | 35 | #define cpu_to_node(cpu) ((void)(cpu),0) |
| 36 | #endif | 36 | #endif |
| 37 | #ifndef cpu_to_mem | ||
| 38 | #define cpu_to_mem(cpu) ((void)(cpu),0) | ||
| 39 | #endif | ||
| 37 | #ifndef parent_node | 40 | #ifndef parent_node |
| 38 | #define parent_node(node) ((void)(node),0) | 41 | #define parent_node(node) ((void)(node),0) |
| 39 | #endif | 42 | #endif |
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index 67e652068e0e..48c5299cbf26 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h | |||
| @@ -175,25 +175,25 @@ | |||
| 175 | #define NOSAVE_DATA \ | 175 | #define NOSAVE_DATA \ |
| 176 | . = ALIGN(PAGE_SIZE); \ | 176 | . = ALIGN(PAGE_SIZE); \ |
| 177 | VMLINUX_SYMBOL(__nosave_begin) = .; \ | 177 | VMLINUX_SYMBOL(__nosave_begin) = .; \ |
| 178 | *(.data.nosave) \ | 178 | *(.data..nosave) \ |
| 179 | . = ALIGN(PAGE_SIZE); \ | 179 | . = ALIGN(PAGE_SIZE); \ |
| 180 | VMLINUX_SYMBOL(__nosave_end) = .; | 180 | VMLINUX_SYMBOL(__nosave_end) = .; |
| 181 | 181 | ||
| 182 | #define PAGE_ALIGNED_DATA(page_align) \ | 182 | #define PAGE_ALIGNED_DATA(page_align) \ |
| 183 | . = ALIGN(page_align); \ | 183 | . = ALIGN(page_align); \ |
| 184 | *(.data.page_aligned) | 184 | *(.data..page_aligned) |
| 185 | 185 | ||
| 186 | #define READ_MOSTLY_DATA(align) \ | 186 | #define READ_MOSTLY_DATA(align) \ |
| 187 | . = ALIGN(align); \ | 187 | . = ALIGN(align); \ |
| 188 | *(.data.read_mostly) | 188 | *(.data..read_mostly) |
| 189 | 189 | ||
| 190 | #define CACHELINE_ALIGNED_DATA(align) \ | 190 | #define CACHELINE_ALIGNED_DATA(align) \ |
| 191 | . = ALIGN(align); \ | 191 | . = ALIGN(align); \ |
| 192 | *(.data.cacheline_aligned) | 192 | *(.data..cacheline_aligned) |
| 193 | 193 | ||
| 194 | #define INIT_TASK_DATA(align) \ | 194 | #define INIT_TASK_DATA(align) \ |
| 195 | . = ALIGN(align); \ | 195 | . = ALIGN(align); \ |
| 196 | *(.data.init_task) | 196 | *(.data..init_task) |
| 197 | 197 | ||
| 198 | /* | 198 | /* |
| 199 | * Read only Data | 199 | * Read only Data |
| @@ -247,10 +247,10 @@ | |||
| 247 | } \ | 247 | } \ |
| 248 | \ | 248 | \ |
| 249 | /* RapidIO route ops */ \ | 249 | /* RapidIO route ops */ \ |
| 250 | .rio_route : AT(ADDR(.rio_route) - LOAD_OFFSET) { \ | 250 | .rio_ops : AT(ADDR(.rio_ops) - LOAD_OFFSET) { \ |
| 251 | VMLINUX_SYMBOL(__start_rio_route_ops) = .; \ | 251 | VMLINUX_SYMBOL(__start_rio_switch_ops) = .; \ |
| 252 | *(.rio_route_ops) \ | 252 | *(.rio_switch_ops) \ |
| 253 | VMLINUX_SYMBOL(__end_rio_route_ops) = .; \ | 253 | VMLINUX_SYMBOL(__end_rio_switch_ops) = .; \ |
| 254 | } \ | 254 | } \ |
| 255 | \ | 255 | \ |
| 256 | TRACEDATA \ | 256 | TRACEDATA \ |
| @@ -435,7 +435,7 @@ | |||
| 435 | */ | 435 | */ |
| 436 | #define INIT_TASK_DATA_SECTION(align) \ | 436 | #define INIT_TASK_DATA_SECTION(align) \ |
| 437 | . = ALIGN(align); \ | 437 | . = ALIGN(align); \ |
| 438 | .data.init_task : { \ | 438 | .data..init_task : { \ |
| 439 | INIT_TASK_DATA(align) \ | 439 | INIT_TASK_DATA(align) \ |
| 440 | } | 440 | } |
| 441 | 441 | ||
| @@ -499,7 +499,7 @@ | |||
| 499 | #define BSS(bss_align) \ | 499 | #define BSS(bss_align) \ |
| 500 | . = ALIGN(bss_align); \ | 500 | . = ALIGN(bss_align); \ |
| 501 | .bss : AT(ADDR(.bss) - LOAD_OFFSET) { \ | 501 | .bss : AT(ADDR(.bss) - LOAD_OFFSET) { \ |
| 502 | *(.bss.page_aligned) \ | 502 | *(.bss..page_aligned) \ |
| 503 | *(.dynbss) \ | 503 | *(.dynbss) \ |
| 504 | *(.bss) \ | 504 | *(.bss) \ |
| 505 | *(COMMON) \ | 505 | *(COMMON) \ |
| @@ -666,16 +666,16 @@ | |||
| 666 | */ | 666 | */ |
| 667 | #define PERCPU_VADDR(vaddr, phdr) \ | 667 | #define PERCPU_VADDR(vaddr, phdr) \ |
| 668 | VMLINUX_SYMBOL(__per_cpu_load) = .; \ | 668 | VMLINUX_SYMBOL(__per_cpu_load) = .; \ |
| 669 | .data.percpu vaddr : AT(VMLINUX_SYMBOL(__per_cpu_load) \ | 669 | .data..percpu vaddr : AT(VMLINUX_SYMBOL(__per_cpu_load) \ |
| 670 | - LOAD_OFFSET) { \ | 670 | - LOAD_OFFSET) { \ |
| 671 | VMLINUX_SYMBOL(__per_cpu_start) = .; \ | 671 | VMLINUX_SYMBOL(__per_cpu_start) = .; \ |
| 672 | *(.data.percpu.first) \ | 672 | *(.data..percpu..first) \ |
| 673 | *(.data.percpu.page_aligned) \ | 673 | *(.data..percpu..page_aligned) \ |
| 674 | *(.data.percpu) \ | 674 | *(.data..percpu) \ |
| 675 | *(.data.percpu.shared_aligned) \ | 675 | *(.data..percpu..shared_aligned) \ |
| 676 | VMLINUX_SYMBOL(__per_cpu_end) = .; \ | 676 | VMLINUX_SYMBOL(__per_cpu_end) = .; \ |
| 677 | } phdr \ | 677 | } phdr \ |
| 678 | . = VMLINUX_SYMBOL(__per_cpu_load) + SIZEOF(.data.percpu); | 678 | . = VMLINUX_SYMBOL(__per_cpu_load) + SIZEOF(.data..percpu); |
| 679 | 679 | ||
| 680 | /** | 680 | /** |
| 681 | * PERCPU - define output section for percpu area, simple version | 681 | * PERCPU - define output section for percpu area, simple version |
| @@ -687,18 +687,18 @@ | |||
| 687 | * | 687 | * |
| 688 | * This macro is equivalent to ALIGN(align); PERCPU_VADDR( , ) except | 688 | * This macro is equivalent to ALIGN(align); PERCPU_VADDR( , ) except |
| 689 | * that __per_cpu_load is defined as a relative symbol against | 689 | * that __per_cpu_load is defined as a relative symbol against |
| 690 | * .data.percpu which is required for relocatable x86_32 | 690 | * .data..percpu which is required for relocatable x86_32 |
| 691 | * configuration. | 691 | * configuration. |
| 692 | */ | 692 | */ |
| 693 | #define PERCPU(align) \ | 693 | #define PERCPU(align) \ |
| 694 | . = ALIGN(align); \ | 694 | . = ALIGN(align); \ |
| 695 | .data.percpu : AT(ADDR(.data.percpu) - LOAD_OFFSET) { \ | 695 | .data..percpu : AT(ADDR(.data..percpu) - LOAD_OFFSET) { \ |
| 696 | VMLINUX_SYMBOL(__per_cpu_load) = .; \ | 696 | VMLINUX_SYMBOL(__per_cpu_load) = .; \ |
| 697 | VMLINUX_SYMBOL(__per_cpu_start) = .; \ | 697 | VMLINUX_SYMBOL(__per_cpu_start) = .; \ |
| 698 | *(.data.percpu.first) \ | 698 | *(.data..percpu..first) \ |
| 699 | *(.data.percpu.page_aligned) \ | 699 | *(.data..percpu..page_aligned) \ |
| 700 | *(.data.percpu) \ | 700 | *(.data..percpu) \ |
| 701 | *(.data.percpu.shared_aligned) \ | 701 | *(.data..percpu..shared_aligned) \ |
| 702 | VMLINUX_SYMBOL(__per_cpu_end) = .; \ | 702 | VMLINUX_SYMBOL(__per_cpu_end) = .; \ |
| 703 | } | 703 | } |
| 704 | 704 | ||
diff --git a/include/drm/drm_crtc_helper.h b/include/drm/drm_crtc_helper.h index dc5873c21e45..1121f7799c6f 100644 --- a/include/drm/drm_crtc_helper.h +++ b/include/drm/drm_crtc_helper.h | |||
| @@ -130,4 +130,7 @@ extern int drm_helper_resume_force_mode(struct drm_device *dev); | |||
| 130 | extern void drm_kms_helper_poll_init(struct drm_device *dev); | 130 | extern void drm_kms_helper_poll_init(struct drm_device *dev); |
| 131 | extern void drm_kms_helper_poll_fini(struct drm_device *dev); | 131 | extern void drm_kms_helper_poll_fini(struct drm_device *dev); |
| 132 | extern void drm_helper_hpd_irq_event(struct drm_device *dev); | 132 | extern void drm_helper_hpd_irq_event(struct drm_device *dev); |
| 133 | |||
| 134 | extern void drm_kms_helper_poll_disable(struct drm_device *dev); | ||
| 135 | extern void drm_kms_helper_poll_enable(struct drm_device *dev); | ||
| 133 | #endif | 136 | #endif |
diff --git a/include/drm/i915_drm.h b/include/drm/i915_drm.h index b64a8d7cdf6d..7f0028e1010b 100644 --- a/include/drm/i915_drm.h +++ b/include/drm/i915_drm.h | |||
| @@ -275,6 +275,7 @@ typedef struct drm_i915_irq_wait { | |||
| 275 | #define I915_PARAM_HAS_OVERLAY 7 | 275 | #define I915_PARAM_HAS_OVERLAY 7 |
| 276 | #define I915_PARAM_HAS_PAGEFLIPPING 8 | 276 | #define I915_PARAM_HAS_PAGEFLIPPING 8 |
| 277 | #define I915_PARAM_HAS_EXECBUF2 9 | 277 | #define I915_PARAM_HAS_EXECBUF2 9 |
| 278 | #define I915_PARAM_HAS_BSD 10 | ||
| 278 | 279 | ||
| 279 | typedef struct drm_i915_getparam { | 280 | typedef struct drm_i915_getparam { |
| 280 | int param; | 281 | int param; |
| @@ -616,7 +617,9 @@ struct drm_i915_gem_execbuffer2 { | |||
| 616 | __u32 num_cliprects; | 617 | __u32 num_cliprects; |
| 617 | /** This is a struct drm_clip_rect *cliprects */ | 618 | /** This is a struct drm_clip_rect *cliprects */ |
| 618 | __u64 cliprects_ptr; | 619 | __u64 cliprects_ptr; |
| 619 | __u64 flags; /* currently unused */ | 620 | #define I915_EXEC_RENDER (1<<0) |
| 621 | #define I915_EXEC_BSD (1<<1) | ||
| 622 | __u64 flags; | ||
| 620 | __u64 rsvd1; | 623 | __u64 rsvd1; |
| 621 | __u64 rsvd2; | 624 | __u64 rsvd2; |
| 622 | }; | 625 | }; |
diff --git a/include/drm/nouveau_drm.h b/include/drm/nouveau_drm.h index a6a9f4af5ebd..fe917dee723a 100644 --- a/include/drm/nouveau_drm.h +++ b/include/drm/nouveau_drm.h | |||
| @@ -79,6 +79,7 @@ struct drm_nouveau_gpuobj_free { | |||
| 79 | #define NOUVEAU_GETPARAM_CHIPSET_ID 11 | 79 | #define NOUVEAU_GETPARAM_CHIPSET_ID 11 |
| 80 | #define NOUVEAU_GETPARAM_VM_VRAM_BASE 12 | 80 | #define NOUVEAU_GETPARAM_VM_VRAM_BASE 12 |
| 81 | #define NOUVEAU_GETPARAM_GRAPH_UNITS 13 | 81 | #define NOUVEAU_GETPARAM_GRAPH_UNITS 13 |
| 82 | #define NOUVEAU_GETPARAM_PTIMER_TIME 14 | ||
| 82 | struct drm_nouveau_getparam { | 83 | struct drm_nouveau_getparam { |
| 83 | uint64_t param; | 84 | uint64_t param; |
| 84 | uint64_t value; | 85 | uint64_t value; |
diff --git a/include/drm/radeon_drm.h b/include/drm/radeon_drm.h index 3ff9fc071dfe..5347063e9d5a 100644 --- a/include/drm/radeon_drm.h +++ b/include/drm/radeon_drm.h | |||
| @@ -903,6 +903,7 @@ struct drm_radeon_cs { | |||
| 903 | #define RADEON_INFO_NUM_Z_PIPES 0x02 | 903 | #define RADEON_INFO_NUM_Z_PIPES 0x02 |
| 904 | #define RADEON_INFO_ACCEL_WORKING 0x03 | 904 | #define RADEON_INFO_ACCEL_WORKING 0x03 |
| 905 | #define RADEON_INFO_CRTC_FROM_ID 0x04 | 905 | #define RADEON_INFO_CRTC_FROM_ID 0x04 |
| 906 | #define RADEON_INFO_ACCEL_WORKING2 0x05 | ||
| 906 | 907 | ||
| 907 | struct drm_radeon_info { | 908 | struct drm_radeon_info { |
| 908 | uint32_t request; | 909 | uint32_t request; |
diff --git a/include/drm/vmwgfx_drm.h b/include/drm/vmwgfx_drm.h index c7645f480d12..4d0842391edc 100644 --- a/include/drm/vmwgfx_drm.h +++ b/include/drm/vmwgfx_drm.h | |||
| @@ -50,6 +50,8 @@ | |||
| 50 | #define DRM_VMW_EXECBUF 12 | 50 | #define DRM_VMW_EXECBUF 12 |
| 51 | #define DRM_VMW_FIFO_DEBUG 13 | 51 | #define DRM_VMW_FIFO_DEBUG 13 |
| 52 | #define DRM_VMW_FENCE_WAIT 14 | 52 | #define DRM_VMW_FENCE_WAIT 14 |
| 53 | /* guarded by minor version >= 2 */ | ||
| 54 | #define DRM_VMW_UPDATE_LAYOUT 15 | ||
| 53 | 55 | ||
| 54 | 56 | ||
| 55 | /*************************************************************************/ | 57 | /*************************************************************************/ |
| @@ -585,4 +587,28 @@ struct drm_vmw_stream_arg { | |||
| 585 | * sure that the stream has been stopped. | 587 | * sure that the stream has been stopped. |
| 586 | */ | 588 | */ |
| 587 | 589 | ||
| 590 | /*************************************************************************/ | ||
| 591 | /** | ||
| 592 | * DRM_VMW_UPDATE_LAYOUT - Update layout | ||
| 593 | * | ||
| 594 | * Updates the prefered modes and connection status for connectors. The | ||
| 595 | * command conisits of one drm_vmw_update_layout_arg pointing out a array | ||
| 596 | * of num_outputs drm_vmw_rect's. | ||
| 597 | */ | ||
| 598 | |||
| 599 | /** | ||
| 600 | * struct drm_vmw_update_layout_arg | ||
| 601 | * | ||
| 602 | * @num_outputs: number of active | ||
| 603 | * @rects: pointer to array of drm_vmw_rect | ||
| 604 | * | ||
| 605 | * Input argument to the DRM_VMW_UPDATE_LAYOUT Ioctl. | ||
| 606 | */ | ||
| 607 | |||
| 608 | struct drm_vmw_update_layout_arg { | ||
| 609 | uint32_t num_outputs; | ||
| 610 | uint32_t pad64; | ||
| 611 | uint64_t rects; | ||
| 612 | }; | ||
| 613 | |||
| 588 | #endif | 614 | #endif |
diff --git a/include/linux/acpi.h b/include/linux/acpi.h index 3da73f5f0ae9..224a38c960d4 100644 --- a/include/linux/acpi.h +++ b/include/linux/acpi.h | |||
| @@ -248,11 +248,12 @@ int acpi_check_region(resource_size_t start, resource_size_t n, | |||
| 248 | int acpi_check_mem_region(resource_size_t start, resource_size_t n, | 248 | int acpi_check_mem_region(resource_size_t start, resource_size_t n, |
| 249 | const char *name); | 249 | const char *name); |
| 250 | 250 | ||
| 251 | int acpi_resources_are_enforced(void); | ||
| 252 | |||
| 251 | #ifdef CONFIG_PM_SLEEP | 253 | #ifdef CONFIG_PM_SLEEP |
| 252 | void __init acpi_no_s4_hw_signature(void); | 254 | void __init acpi_no_s4_hw_signature(void); |
| 253 | void __init acpi_old_suspend_ordering(void); | 255 | void __init acpi_old_suspend_ordering(void); |
| 254 | void __init acpi_s4_no_nvs(void); | 256 | void __init acpi_s4_no_nvs(void); |
| 255 | void __init acpi_set_sci_en_on_resume(void); | ||
| 256 | #endif /* CONFIG_PM_SLEEP */ | 257 | #endif /* CONFIG_PM_SLEEP */ |
| 257 | 258 | ||
| 258 | struct acpi_osc_context { | 259 | struct acpi_osc_context { |
diff --git a/include/linux/aio.h b/include/linux/aio.h index 811dbb369379..7a8db4155281 100644 --- a/include/linux/aio.h +++ b/include/linux/aio.h | |||
| @@ -212,6 +212,8 @@ extern void kick_iocb(struct kiocb *iocb); | |||
| 212 | extern int aio_complete(struct kiocb *iocb, long res, long res2); | 212 | extern int aio_complete(struct kiocb *iocb, long res, long res2); |
| 213 | struct mm_struct; | 213 | struct mm_struct; |
| 214 | extern void exit_aio(struct mm_struct *mm); | 214 | extern void exit_aio(struct mm_struct *mm); |
| 215 | extern long do_io_submit(aio_context_t ctx_id, long nr, | ||
| 216 | struct iocb __user *__user *iocbpp, bool compat); | ||
| 215 | #else | 217 | #else |
| 216 | static inline ssize_t wait_on_sync_kiocb(struct kiocb *iocb) { return 0; } | 218 | static inline ssize_t wait_on_sync_kiocb(struct kiocb *iocb) { return 0; } |
| 217 | static inline int aio_put_req(struct kiocb *iocb) { return 0; } | 219 | static inline int aio_put_req(struct kiocb *iocb) { return 0; } |
| @@ -219,6 +221,9 @@ static inline void kick_iocb(struct kiocb *iocb) { } | |||
| 219 | static inline int aio_complete(struct kiocb *iocb, long res, long res2) { return 0; } | 221 | static inline int aio_complete(struct kiocb *iocb, long res, long res2) { return 0; } |
| 220 | struct mm_struct; | 222 | struct mm_struct; |
| 221 | static inline void exit_aio(struct mm_struct *mm) { } | 223 | static inline void exit_aio(struct mm_struct *mm) { } |
| 224 | static inline long do_io_submit(aio_context_t ctx_id, long nr, | ||
| 225 | struct iocb __user * __user *iocbpp, | ||
| 226 | bool compat) { return 0; } | ||
| 222 | #endif /* CONFIG_AIO */ | 227 | #endif /* CONFIG_AIO */ |
| 223 | 228 | ||
| 224 | static inline struct kiocb *list_kiocb(struct list_head *h) | 229 | static inline struct kiocb *list_kiocb(struct list_head *h) |
diff --git a/include/linux/amba/pl330.h b/include/linux/amba/pl330.h new file mode 100644 index 000000000000..cbee7de7dd36 --- /dev/null +++ b/include/linux/amba/pl330.h | |||
| @@ -0,0 +1,45 @@ | |||
| 1 | /* linux/include/linux/amba/pl330.h | ||
| 2 | * | ||
| 3 | * Copyright (C) 2010 Samsung Electronics Co. Ltd. | ||
| 4 | * Jaswinder Singh <jassi.brar@samsung.com> | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License as published by | ||
| 8 | * the Free Software Foundation; either version 2 of the License, or | ||
| 9 | * (at your option) any later version. | ||
| 10 | */ | ||
| 11 | |||
| 12 | #ifndef __AMBA_PL330_H_ | ||
| 13 | #define __AMBA_PL330_H_ | ||
| 14 | |||
| 15 | #include <asm/hardware/pl330.h> | ||
| 16 | |||
| 17 | struct dma_pl330_peri { | ||
| 18 | /* | ||
| 19 | * Peri_Req i/f of the DMAC that is | ||
| 20 | * peripheral could be reached from. | ||
| 21 | */ | ||
| 22 | u8 peri_id; /* {0, 31} */ | ||
| 23 | enum pl330_reqtype rqtype; | ||
| 24 | |||
| 25 | /* For M->D and D->M Channels */ | ||
| 26 | int burst_sz; /* in power of 2 */ | ||
| 27 | dma_addr_t fifo_addr; | ||
| 28 | }; | ||
| 29 | |||
| 30 | struct dma_pl330_platdata { | ||
| 31 | /* | ||
| 32 | * Number of valid peripherals connected to DMAC. | ||
| 33 | * This may be different from the value read from | ||
| 34 | * CR0, as the PL330 implementation might have 'holes' | ||
| 35 | * in the peri list or the peri could also be reached | ||
| 36 | * from another DMAC which the platform prefers. | ||
| 37 | */ | ||
| 38 | u8 nr_valid_peri; | ||
| 39 | /* Array of valid peripherals */ | ||
| 40 | struct dma_pl330_peri *peri; | ||
| 41 | /* Bytes to allocate for MC buffer */ | ||
| 42 | unsigned mcbuf_sz; | ||
| 43 | }; | ||
| 44 | |||
| 45 | #endif /* __AMBA_PL330_H_ */ | ||
diff --git a/include/linux/backing-dev.h b/include/linux/backing-dev.h index e6e0cb5437e6..aee5f6ce166e 100644 --- a/include/linux/backing-dev.h +++ b/include/linux/backing-dev.h | |||
| @@ -106,7 +106,7 @@ int bdi_register_dev(struct backing_dev_info *bdi, dev_t dev); | |||
| 106 | void bdi_unregister(struct backing_dev_info *bdi); | 106 | void bdi_unregister(struct backing_dev_info *bdi); |
| 107 | int bdi_setup_and_register(struct backing_dev_info *, char *, unsigned int); | 107 | int bdi_setup_and_register(struct backing_dev_info *, char *, unsigned int); |
| 108 | void bdi_start_writeback(struct backing_dev_info *bdi, struct super_block *sb, | 108 | void bdi_start_writeback(struct backing_dev_info *bdi, struct super_block *sb, |
| 109 | long nr_pages, int sb_locked); | 109 | long nr_pages); |
| 110 | int bdi_writeback_task(struct bdi_writeback *wb); | 110 | int bdi_writeback_task(struct bdi_writeback *wb); |
| 111 | int bdi_has_dirty_io(struct backing_dev_info *bdi); | 111 | int bdi_has_dirty_io(struct backing_dev_info *bdi); |
| 112 | void bdi_arm_supers_timer(void); | 112 | void bdi_arm_supers_timer(void); |
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 8b7f5e0914ad..09a840264d6f 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
| @@ -1211,14 +1211,23 @@ struct work_struct; | |||
| 1211 | int kblockd_schedule_work(struct request_queue *q, struct work_struct *work); | 1211 | int kblockd_schedule_work(struct request_queue *q, struct work_struct *work); |
| 1212 | 1212 | ||
| 1213 | #ifdef CONFIG_BLK_CGROUP | 1213 | #ifdef CONFIG_BLK_CGROUP |
| 1214 | /* | ||
| 1215 | * This should not be using sched_clock(). A real patch is in progress | ||
| 1216 | * to fix this up, until that is in place we need to disable preemption | ||
| 1217 | * around sched_clock() in this function and set_io_start_time_ns(). | ||
| 1218 | */ | ||
| 1214 | static inline void set_start_time_ns(struct request *req) | 1219 | static inline void set_start_time_ns(struct request *req) |
| 1215 | { | 1220 | { |
| 1221 | preempt_disable(); | ||
| 1216 | req->start_time_ns = sched_clock(); | 1222 | req->start_time_ns = sched_clock(); |
| 1223 | preempt_enable(); | ||
| 1217 | } | 1224 | } |
| 1218 | 1225 | ||
| 1219 | static inline void set_io_start_time_ns(struct request *req) | 1226 | static inline void set_io_start_time_ns(struct request *req) |
| 1220 | { | 1227 | { |
| 1228 | preempt_disable(); | ||
| 1221 | req->io_start_time_ns = sched_clock(); | 1229 | req->io_start_time_ns = sched_clock(); |
| 1230 | preempt_enable(); | ||
| 1222 | } | 1231 | } |
| 1223 | 1232 | ||
| 1224 | static inline uint64_t rq_start_time_ns(struct request *req) | 1233 | static inline uint64_t rq_start_time_ns(struct request *req) |
diff --git a/include/linux/buffer_head.h b/include/linux/buffer_head.h index 16ed0284d780..1b9ba193b789 100644 --- a/include/linux/buffer_head.h +++ b/include/linux/buffer_head.h | |||
| @@ -203,6 +203,9 @@ int block_write_full_page_endio(struct page *page, get_block_t *get_block, | |||
| 203 | int block_read_full_page(struct page*, get_block_t*); | 203 | int block_read_full_page(struct page*, get_block_t*); |
| 204 | int block_is_partially_uptodate(struct page *page, read_descriptor_t *desc, | 204 | int block_is_partially_uptodate(struct page *page, read_descriptor_t *desc, |
| 205 | unsigned long from); | 205 | unsigned long from); |
| 206 | int block_write_begin_newtrunc(struct file *, struct address_space *, | ||
| 207 | loff_t, unsigned, unsigned, | ||
| 208 | struct page **, void **, get_block_t*); | ||
| 206 | int block_write_begin(struct file *, struct address_space *, | 209 | int block_write_begin(struct file *, struct address_space *, |
| 207 | loff_t, unsigned, unsigned, | 210 | loff_t, unsigned, unsigned, |
| 208 | struct page **, void **, get_block_t*); | 211 | struct page **, void **, get_block_t*); |
| @@ -214,6 +217,9 @@ int generic_write_end(struct file *, struct address_space *, | |||
| 214 | struct page *, void *); | 217 | struct page *, void *); |
| 215 | void page_zero_new_buffers(struct page *page, unsigned from, unsigned to); | 218 | void page_zero_new_buffers(struct page *page, unsigned from, unsigned to); |
| 216 | int block_prepare_write(struct page*, unsigned, unsigned, get_block_t*); | 219 | int block_prepare_write(struct page*, unsigned, unsigned, get_block_t*); |
| 220 | int cont_write_begin_newtrunc(struct file *, struct address_space *, loff_t, | ||
| 221 | unsigned, unsigned, struct page **, void **, | ||
| 222 | get_block_t *, loff_t *); | ||
| 217 | int cont_write_begin(struct file *, struct address_space *, loff_t, | 223 | int cont_write_begin(struct file *, struct address_space *, loff_t, |
| 218 | unsigned, unsigned, struct page **, void **, | 224 | unsigned, unsigned, struct page **, void **, |
| 219 | get_block_t *, loff_t *); | 225 | get_block_t *, loff_t *); |
| @@ -224,7 +230,10 @@ int block_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf, | |||
| 224 | void block_sync_page(struct page *); | 230 | void block_sync_page(struct page *); |
| 225 | sector_t generic_block_bmap(struct address_space *, sector_t, get_block_t *); | 231 | sector_t generic_block_bmap(struct address_space *, sector_t, get_block_t *); |
| 226 | int block_truncate_page(struct address_space *, loff_t, get_block_t *); | 232 | int block_truncate_page(struct address_space *, loff_t, get_block_t *); |
| 227 | int file_fsync(struct file *, struct dentry *, int); | 233 | int file_fsync(struct file *, int); |
| 234 | int nobh_write_begin_newtrunc(struct file *, struct address_space *, | ||
| 235 | loff_t, unsigned, unsigned, | ||
| 236 | struct page **, void **, get_block_t*); | ||
| 228 | int nobh_write_begin(struct file *, struct address_space *, | 237 | int nobh_write_begin(struct file *, struct address_space *, |
| 229 | loff_t, unsigned, unsigned, | 238 | loff_t, unsigned, unsigned, |
| 230 | struct page **, void **, get_block_t*); | 239 | struct page **, void **, get_block_t*); |
diff --git a/include/linux/byteorder/big_endian.h b/include/linux/byteorder/big_endian.h index d53a67dff018..3c80fd7e8b56 100644 --- a/include/linux/byteorder/big_endian.h +++ b/include/linux/byteorder/big_endian.h | |||
| @@ -7,9 +7,6 @@ | |||
| 7 | #ifndef __BIG_ENDIAN_BITFIELD | 7 | #ifndef __BIG_ENDIAN_BITFIELD |
| 8 | #define __BIG_ENDIAN_BITFIELD | 8 | #define __BIG_ENDIAN_BITFIELD |
| 9 | #endif | 9 | #endif |
| 10 | #ifndef __BYTE_ORDER | ||
| 11 | #define __BYTE_ORDER __BIG_ENDIAN | ||
| 12 | #endif | ||
| 13 | 10 | ||
| 14 | #include <linux/types.h> | 11 | #include <linux/types.h> |
| 15 | #include <linux/swab.h> | 12 | #include <linux/swab.h> |
diff --git a/include/linux/byteorder/little_endian.h b/include/linux/byteorder/little_endian.h index f7f8ad13adb6..83195fb82962 100644 --- a/include/linux/byteorder/little_endian.h +++ b/include/linux/byteorder/little_endian.h | |||
| @@ -7,9 +7,6 @@ | |||
| 7 | #ifndef __LITTLE_ENDIAN_BITFIELD | 7 | #ifndef __LITTLE_ENDIAN_BITFIELD |
| 8 | #define __LITTLE_ENDIAN_BITFIELD | 8 | #define __LITTLE_ENDIAN_BITFIELD |
| 9 | #endif | 9 | #endif |
| 10 | #ifndef __BYTE_ORDER | ||
| 11 | #define __BYTE_ORDER __LITTLE_ENDIAN | ||
| 12 | #endif | ||
| 13 | 10 | ||
| 14 | #include <linux/types.h> | 11 | #include <linux/types.h> |
| 15 | #include <linux/swab.h> | 12 | #include <linux/swab.h> |
diff --git a/include/linux/cache.h b/include/linux/cache.h index 97e24881c4c6..4c570653ab84 100644 --- a/include/linux/cache.h +++ b/include/linux/cache.h | |||
| @@ -31,7 +31,7 @@ | |||
| 31 | #ifndef __cacheline_aligned | 31 | #ifndef __cacheline_aligned |
| 32 | #define __cacheline_aligned \ | 32 | #define __cacheline_aligned \ |
| 33 | __attribute__((__aligned__(SMP_CACHE_BYTES), \ | 33 | __attribute__((__aligned__(SMP_CACHE_BYTES), \ |
| 34 | __section__(".data.cacheline_aligned"))) | 34 | __section__(".data..cacheline_aligned"))) |
| 35 | #endif /* __cacheline_aligned */ | 35 | #endif /* __cacheline_aligned */ |
| 36 | 36 | ||
| 37 | #ifndef __cacheline_aligned_in_smp | 37 | #ifndef __cacheline_aligned_in_smp |
diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h index 8f78073d7caa..0c621604baa1 100644 --- a/include/linux/cgroup.h +++ b/include/linux/cgroup.h | |||
| @@ -397,7 +397,7 @@ struct cftype { | |||
| 397 | * This callback must be implemented, if you want provide | 397 | * This callback must be implemented, if you want provide |
| 398 | * notification functionality. | 398 | * notification functionality. |
| 399 | */ | 399 | */ |
| 400 | int (*unregister_event)(struct cgroup *cgrp, struct cftype *cft, | 400 | void (*unregister_event)(struct cgroup *cgrp, struct cftype *cft, |
| 401 | struct eventfd_ctx *eventfd); | 401 | struct eventfd_ctx *eventfd); |
| 402 | }; | 402 | }; |
| 403 | 403 | ||
diff --git a/include/linux/compat.h b/include/linux/compat.h index 717c691ecd8e..168f7daa7bde 100644 --- a/include/linux/compat.h +++ b/include/linux/compat.h | |||
| @@ -356,5 +356,9 @@ asmlinkage long compat_sys_newfstatat(unsigned int dfd, char __user * filename, | |||
| 356 | asmlinkage long compat_sys_openat(unsigned int dfd, const char __user *filename, | 356 | asmlinkage long compat_sys_openat(unsigned int dfd, const char __user *filename, |
| 357 | int flags, int mode); | 357 | int flags, int mode); |
| 358 | 358 | ||
| 359 | extern ssize_t compat_rw_copy_check_uvector(int type, | ||
| 360 | const struct compat_iovec __user *uvector, unsigned long nr_segs, | ||
| 361 | unsigned long fast_segs, struct iovec *fast_pointer, | ||
| 362 | struct iovec **ret_pointer); | ||
| 359 | #endif /* CONFIG_COMPAT */ | 363 | #endif /* CONFIG_COMPAT */ |
| 360 | #endif /* _LINUX_COMPAT_H */ | 364 | #endif /* _LINUX_COMPAT_H */ |
diff --git a/include/linux/completion.h b/include/linux/completion.h index 4a6b604ef7e4..51e3145196f6 100644 --- a/include/linux/completion.h +++ b/include/linux/completion.h | |||
| @@ -83,6 +83,8 @@ extern unsigned long wait_for_completion_timeout(struct completion *x, | |||
| 83 | unsigned long timeout); | 83 | unsigned long timeout); |
| 84 | extern unsigned long wait_for_completion_interruptible_timeout( | 84 | extern unsigned long wait_for_completion_interruptible_timeout( |
| 85 | struct completion *x, unsigned long timeout); | 85 | struct completion *x, unsigned long timeout); |
| 86 | extern unsigned long wait_for_completion_killable_timeout( | ||
| 87 | struct completion *x, unsigned long timeout); | ||
| 86 | extern bool try_wait_for_completion(struct completion *x); | 88 | extern bool try_wait_for_completion(struct completion *x); |
| 87 | extern bool completion_done(struct completion *x); | 89 | extern bool completion_done(struct completion *x); |
| 88 | 90 | ||
diff --git a/include/linux/cper.h b/include/linux/cper.h new file mode 100644 index 000000000000..4b38f905b705 --- /dev/null +++ b/include/linux/cper.h | |||
| @@ -0,0 +1,314 @@ | |||
| 1 | /* | ||
| 2 | * UEFI Common Platform Error Record | ||
| 3 | * | ||
| 4 | * Copyright (C) 2010, Intel Corp. | ||
| 5 | * Author: Huang Ying <ying.huang@intel.com> | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or | ||
| 8 | * modify it under the terms of the GNU General Public License version | ||
| 9 | * 2 as published by the Free Software Foundation. | ||
| 10 | * | ||
| 11 | * This program is distributed in the hope that it will be useful, | ||
| 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | * GNU General Public License for more details. | ||
| 15 | * | ||
| 16 | * You should have received a copy of the GNU General Public License | ||
| 17 | * along with this program; if not, write to the Free Software | ||
| 18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 19 | */ | ||
| 20 | |||
| 21 | #ifndef LINUX_CPER_H | ||
| 22 | #define LINUX_CPER_H | ||
| 23 | |||
| 24 | #include <linux/uuid.h> | ||
| 25 | |||
| 26 | /* CPER record signature and the size */ | ||
| 27 | #define CPER_SIG_RECORD "CPER" | ||
| 28 | #define CPER_SIG_SIZE 4 | ||
| 29 | /* Used in signature_end field in struct cper_record_header */ | ||
| 30 | #define CPER_SIG_END 0xffffffff | ||
| 31 | |||
| 32 | /* | ||
| 33 | * CPER record header revision, used in revision field in struct | ||
| 34 | * cper_record_header | ||
| 35 | */ | ||
| 36 | #define CPER_RECORD_REV 0x0100 | ||
| 37 | |||
| 38 | /* | ||
| 39 | * Severity difinition for error_severity in struct cper_record_header | ||
| 40 | * and section_severity in struct cper_section_descriptor | ||
| 41 | */ | ||
| 42 | #define CPER_SER_RECOVERABLE 0x0 | ||
| 43 | #define CPER_SER_FATAL 0x1 | ||
| 44 | #define CPER_SER_CORRECTED 0x2 | ||
| 45 | #define CPER_SER_INFORMATIONAL 0x3 | ||
| 46 | |||
| 47 | /* | ||
| 48 | * Validation bits difinition for validation_bits in struct | ||
| 49 | * cper_record_header. If set, corresponding fields in struct | ||
| 50 | * cper_record_header contain valid information. | ||
| 51 | * | ||
| 52 | * corresponds platform_id | ||
| 53 | */ | ||
| 54 | #define CPER_VALID_PLATFORM_ID 0x0001 | ||
| 55 | /* corresponds timestamp */ | ||
| 56 | #define CPER_VALID_TIMESTAMP 0x0002 | ||
| 57 | /* corresponds partition_id */ | ||
| 58 | #define CPER_VALID_PARTITION_ID 0x0004 | ||
| 59 | |||
| 60 | /* | ||
| 61 | * Notification type used to generate error record, used in | ||
| 62 | * notification_type in struct cper_record_header | ||
| 63 | * | ||
| 64 | * Corrected Machine Check | ||
| 65 | */ | ||
| 66 | #define CPER_NOTIFY_CMC \ | ||
| 67 | UUID_LE(0x2DCE8BB1, 0xBDD7, 0x450e, 0xB9, 0xAD, 0x9C, 0xF4, \ | ||
| 68 | 0xEB, 0xD4, 0xF8, 0x90) | ||
| 69 | /* Corrected Platform Error */ | ||
| 70 | #define CPER_NOTIFY_CPE \ | ||
| 71 | UUID_LE(0x4E292F96, 0xD843, 0x4a55, 0xA8, 0xC2, 0xD4, 0x81, \ | ||
| 72 | 0xF2, 0x7E, 0xBE, 0xEE) | ||
| 73 | /* Machine Check Exception */ | ||
| 74 | #define CPER_NOTIFY_MCE \ | ||
| 75 | UUID_LE(0xE8F56FFE, 0x919C, 0x4cc5, 0xBA, 0x88, 0x65, 0xAB, \ | ||
| 76 | 0xE1, 0x49, 0x13, 0xBB) | ||
| 77 | /* PCI Express Error */ | ||
| 78 | #define CPER_NOTIFY_PCIE \ | ||
| 79 | UUID_LE(0xCF93C01F, 0x1A16, 0x4dfc, 0xB8, 0xBC, 0x9C, 0x4D, \ | ||
| 80 | 0xAF, 0x67, 0xC1, 0x04) | ||
| 81 | /* INIT Record (for IPF) */ | ||
| 82 | #define CPER_NOTIFY_INIT \ | ||
| 83 | UUID_LE(0xCC5263E8, 0x9308, 0x454a, 0x89, 0xD0, 0x34, 0x0B, \ | ||
| 84 | 0xD3, 0x9B, 0xC9, 0x8E) | ||
| 85 | /* Non-Maskable Interrupt */ | ||
| 86 | #define CPER_NOTIFY_NMI \ | ||
| 87 | UUID_LE(0x5BAD89FF, 0xB7E6, 0x42c9, 0x81, 0x4A, 0xCF, 0x24, \ | ||
| 88 | 0x85, 0xD6, 0xE9, 0x8A) | ||
| 89 | /* BOOT Error Record */ | ||
| 90 | #define CPER_NOTIFY_BOOT \ | ||
| 91 | UUID_LE(0x3D61A466, 0xAB40, 0x409a, 0xA6, 0x98, 0xF3, 0x62, \ | ||
| 92 | 0xD4, 0x64, 0xB3, 0x8F) | ||
| 93 | /* DMA Remapping Error */ | ||
| 94 | #define CPER_NOTIFY_DMAR \ | ||
| 95 | UUID_LE(0x667DD791, 0xC6B3, 0x4c27, 0x8A, 0x6B, 0x0F, 0x8E, \ | ||
| 96 | 0x72, 0x2D, 0xEB, 0x41) | ||
| 97 | |||
| 98 | /* | ||
| 99 | * Flags bits definitions for flags in struct cper_record_header | ||
| 100 | * If set, the error has been recovered | ||
| 101 | */ | ||
| 102 | #define CPER_HW_ERROR_FLAGS_RECOVERED 0x1 | ||
| 103 | /* If set, the error is for previous boot */ | ||
| 104 | #define CPER_HW_ERROR_FLAGS_PREVERR 0x2 | ||
| 105 | /* If set, the error is injected for testing */ | ||
| 106 | #define CPER_HW_ERROR_FLAGS_SIMULATED 0x4 | ||
| 107 | |||
| 108 | /* | ||
| 109 | * CPER section header revision, used in revision field in struct | ||
| 110 | * cper_section_descriptor | ||
| 111 | */ | ||
| 112 | #define CPER_SEC_REV 0x0100 | ||
| 113 | |||
| 114 | /* | ||
| 115 | * Validation bits difinition for validation_bits in struct | ||
| 116 | * cper_section_descriptor. If set, corresponding fields in struct | ||
| 117 | * cper_section_descriptor contain valid information. | ||
| 118 | * | ||
| 119 | * corresponds fru_id | ||
| 120 | */ | ||
| 121 | #define CPER_SEC_VALID_FRU_ID 0x1 | ||
| 122 | /* corresponds fru_text */ | ||
| 123 | #define CPER_SEC_VALID_FRU_TEXT 0x2 | ||
| 124 | |||
| 125 | /* | ||
| 126 | * Flags bits definitions for flags in struct cper_section_descriptor | ||
| 127 | * | ||
| 128 | * If set, the section is associated with the error condition | ||
| 129 | * directly, and should be focused on | ||
| 130 | */ | ||
| 131 | #define CPER_SEC_PRIMARY 0x0001 | ||
| 132 | /* | ||
| 133 | * If set, the error was not contained within the processor or memory | ||
| 134 | * hierarchy and the error may have propagated to persistent storage | ||
| 135 | * or network | ||
| 136 | */ | ||
| 137 | #define CPER_SEC_CONTAINMENT_WARNING 0x0002 | ||
| 138 | /* If set, the component must be re-initialized or re-enabled prior to use */ | ||
| 139 | #define CPER_SEC_RESET 0x0004 | ||
| 140 | /* If set, Linux may choose to discontinue use of the resource */ | ||
| 141 | #define CPER_SEC_ERROR_THRESHOLD_EXCEEDED 0x0008 | ||
| 142 | /* | ||
| 143 | * If set, resource could not be queried for error information due to | ||
| 144 | * conflicts with other system software or resources. Some fields of | ||
| 145 | * the section will be invalid | ||
| 146 | */ | ||
| 147 | #define CPER_SEC_RESOURCE_NOT_ACCESSIBLE 0x0010 | ||
| 148 | /* | ||
| 149 | * If set, action has been taken to ensure error containment (such as | ||
| 150 | * poisoning data), but the error has not been fully corrected and the | ||
| 151 | * data has not been consumed. Linux may choose to take further | ||
| 152 | * corrective action before the data is consumed | ||
| 153 | */ | ||
| 154 | #define CPER_SEC_LATENT_ERROR 0x0020 | ||
| 155 | |||
| 156 | /* | ||
| 157 | * Section type definitions, used in section_type field in struct | ||
| 158 | * cper_section_descriptor | ||
| 159 | * | ||
| 160 | * Processor Generic | ||
| 161 | */ | ||
| 162 | #define CPER_SEC_PROC_GENERIC \ | ||
| 163 | UUID_LE(0x9876CCAD, 0x47B4, 0x4bdb, 0xB6, 0x5E, 0x16, 0xF1, \ | ||
| 164 | 0x93, 0xC4, 0xF3, 0xDB) | ||
| 165 | /* Processor Specific: X86/X86_64 */ | ||
| 166 | #define CPER_SEC_PROC_IA \ | ||
| 167 | UUID_LE(0xDC3EA0B0, 0xA144, 0x4797, 0xB9, 0x5B, 0x53, 0xFA, \ | ||
| 168 | 0x24, 0x2B, 0x6E, 0x1D) | ||
| 169 | /* Processor Specific: IA64 */ | ||
| 170 | #define CPER_SEC_PROC_IPF \ | ||
| 171 | UUID_LE(0xE429FAF1, 0x3CB7, 0x11D4, 0x0B, 0xCA, 0x07, 0x00, \ | ||
| 172 | 0x80, 0xC7, 0x3C, 0x88, 0x81) | ||
| 173 | /* Platform Memory */ | ||
| 174 | #define CPER_SEC_PLATFORM_MEM \ | ||
| 175 | UUID_LE(0xA5BC1114, 0x6F64, 0x4EDE, 0xB8, 0x63, 0x3E, 0x83, \ | ||
| 176 | 0xED, 0x7C, 0x83, 0xB1) | ||
| 177 | #define CPER_SEC_PCIE \ | ||
| 178 | UUID_LE(0xD995E954, 0xBBC1, 0x430F, 0xAD, 0x91, 0xB4, 0x4D, \ | ||
| 179 | 0xCB, 0x3C, 0x6F, 0x35) | ||
| 180 | /* Firmware Error Record Reference */ | ||
| 181 | #define CPER_SEC_FW_ERR_REC_REF \ | ||
| 182 | UUID_LE(0x81212A96, 0x09ED, 0x4996, 0x94, 0x71, 0x8D, 0x72, \ | ||
| 183 | 0x9C, 0x8E, 0x69, 0xED) | ||
| 184 | /* PCI/PCI-X Bus */ | ||
| 185 | #define CPER_SEC_PCI_X_BUS \ | ||
| 186 | UUID_LE(0xC5753963, 0x3B84, 0x4095, 0xBF, 0x78, 0xED, 0xDA, \ | ||
| 187 | 0xD3, 0xF9, 0xC9, 0xDD) | ||
| 188 | /* PCI Component/Device */ | ||
| 189 | #define CPER_SEC_PCI_DEV \ | ||
| 190 | UUID_LE(0xEB5E4685, 0xCA66, 0x4769, 0xB6, 0xA2, 0x26, 0x06, \ | ||
| 191 | 0x8B, 0x00, 0x13, 0x26) | ||
| 192 | #define CPER_SEC_DMAR_GENERIC \ | ||
| 193 | UUID_LE(0x5B51FEF7, 0xC79D, 0x4434, 0x8F, 0x1B, 0xAA, 0x62, \ | ||
| 194 | 0xDE, 0x3E, 0x2C, 0x64) | ||
| 195 | /* Intel VT for Directed I/O specific DMAr */ | ||
| 196 | #define CPER_SEC_DMAR_VT \ | ||
| 197 | UUID_LE(0x71761D37, 0x32B2, 0x45cd, 0xA7, 0xD0, 0xB0, 0xFE, \ | ||
| 198 | 0xDD, 0x93, 0xE8, 0xCF) | ||
| 199 | /* IOMMU specific DMAr */ | ||
| 200 | #define CPER_SEC_DMAR_IOMMU \ | ||
| 201 | UUID_LE(0x036F84E1, 0x7F37, 0x428c, 0xA7, 0x9E, 0x57, 0x5F, \ | ||
| 202 | 0xDF, 0xAA, 0x84, 0xEC) | ||
| 203 | |||
| 204 | /* | ||
| 205 | * All tables and structs must be byte-packed to match CPER | ||
| 206 | * specification, since the tables are provided by the system BIOS | ||
| 207 | */ | ||
| 208 | #pragma pack(1) | ||
| 209 | |||
| 210 | struct cper_record_header { | ||
| 211 | char signature[CPER_SIG_SIZE]; /* must be CPER_SIG_RECORD */ | ||
| 212 | __u16 revision; /* must be CPER_RECORD_REV */ | ||
| 213 | __u32 signature_end; /* must be CPER_SIG_END */ | ||
| 214 | __u16 section_count; | ||
| 215 | __u32 error_severity; | ||
| 216 | __u32 validation_bits; | ||
| 217 | __u32 record_length; | ||
| 218 | __u64 timestamp; | ||
| 219 | uuid_le platform_id; | ||
| 220 | uuid_le partition_id; | ||
| 221 | uuid_le creator_id; | ||
| 222 | uuid_le notification_type; | ||
| 223 | __u64 record_id; | ||
| 224 | __u32 flags; | ||
| 225 | __u64 persistence_information; | ||
| 226 | __u8 reserved[12]; /* must be zero */ | ||
| 227 | }; | ||
| 228 | |||
| 229 | struct cper_section_descriptor { | ||
| 230 | __u32 section_offset; /* Offset in bytes of the | ||
| 231 | * section body from the base | ||
| 232 | * of the record header */ | ||
| 233 | __u32 section_length; | ||
| 234 | __u16 revision; /* must be CPER_RECORD_REV */ | ||
| 235 | __u8 validation_bits; | ||
| 236 | __u8 reserved; /* must be zero */ | ||
| 237 | __u32 flags; | ||
| 238 | uuid_le section_type; | ||
| 239 | uuid_le fru_id; | ||
| 240 | __u32 section_severity; | ||
| 241 | __u8 fru_text[20]; | ||
| 242 | }; | ||
| 243 | |||
| 244 | /* Generic Processor Error Section */ | ||
| 245 | struct cper_sec_proc_generic { | ||
| 246 | __u64 validation_bits; | ||
| 247 | __u8 proc_type; | ||
| 248 | __u8 proc_isa; | ||
| 249 | __u8 proc_error_type; | ||
| 250 | __u8 operation; | ||
| 251 | __u8 flags; | ||
| 252 | __u8 level; | ||
| 253 | __u16 reserved; | ||
| 254 | __u64 cpu_version; | ||
| 255 | char cpu_brand[128]; | ||
| 256 | __u64 proc_id; | ||
| 257 | __u64 target_addr; | ||
| 258 | __u64 requestor_id; | ||
| 259 | __u64 responder_id; | ||
| 260 | __u64 ip; | ||
| 261 | }; | ||
| 262 | |||
| 263 | /* IA32/X64 Processor Error Section */ | ||
| 264 | struct cper_sec_proc_ia { | ||
| 265 | __u64 validation_bits; | ||
| 266 | __u8 lapic_id; | ||
| 267 | __u8 cpuid[48]; | ||
| 268 | }; | ||
| 269 | |||
| 270 | /* IA32/X64 Processor Error Infomation Structure */ | ||
| 271 | struct cper_ia_err_info { | ||
| 272 | uuid_le err_type; | ||
| 273 | __u64 validation_bits; | ||
| 274 | __u64 check_info; | ||
| 275 | __u64 target_id; | ||
| 276 | __u64 requestor_id; | ||
| 277 | __u64 responder_id; | ||
| 278 | __u64 ip; | ||
| 279 | }; | ||
| 280 | |||
| 281 | /* IA32/X64 Processor Context Information Structure */ | ||
| 282 | struct cper_ia_proc_ctx { | ||
| 283 | __u16 reg_ctx_type; | ||
| 284 | __u16 reg_arr_size; | ||
| 285 | __u32 msr_addr; | ||
| 286 | __u64 mm_reg_addr; | ||
| 287 | }; | ||
| 288 | |||
| 289 | /* Memory Error Section */ | ||
| 290 | struct cper_sec_mem_err { | ||
| 291 | __u64 validation_bits; | ||
| 292 | __u64 error_status; | ||
| 293 | __u64 physical_addr; | ||
| 294 | __u64 physical_addr_mask; | ||
| 295 | __u16 node; | ||
| 296 | __u16 card; | ||
| 297 | __u16 module; | ||
| 298 | __u16 bank; | ||
| 299 | __u16 device; | ||
| 300 | __u16 row; | ||
| 301 | __u16 column; | ||
| 302 | __u16 bit_pos; | ||
| 303 | __u64 requestor_id; | ||
| 304 | __u64 responder_id; | ||
| 305 | __u64 target_id; | ||
| 306 | __u8 error_type; | ||
| 307 | }; | ||
| 308 | |||
| 309 | /* Reset to default packing */ | ||
| 310 | #pragma pack() | ||
| 311 | |||
| 312 | u64 cper_next_record_id(void); | ||
| 313 | |||
| 314 | #endif | ||
diff --git a/include/linux/cpuidle.h b/include/linux/cpuidle.h index dcf77fa826b5..55215cce5005 100644 --- a/include/linux/cpuidle.h +++ b/include/linux/cpuidle.h | |||
| @@ -125,6 +125,7 @@ struct cpuidle_driver { | |||
| 125 | #ifdef CONFIG_CPU_IDLE | 125 | #ifdef CONFIG_CPU_IDLE |
| 126 | 126 | ||
| 127 | extern int cpuidle_register_driver(struct cpuidle_driver *drv); | 127 | extern int cpuidle_register_driver(struct cpuidle_driver *drv); |
| 128 | struct cpuidle_driver *cpuidle_get_driver(void); | ||
| 128 | extern void cpuidle_unregister_driver(struct cpuidle_driver *drv); | 129 | extern void cpuidle_unregister_driver(struct cpuidle_driver *drv); |
| 129 | extern int cpuidle_register_device(struct cpuidle_device *dev); | 130 | extern int cpuidle_register_device(struct cpuidle_device *dev); |
| 130 | extern void cpuidle_unregister_device(struct cpuidle_device *dev); | 131 | extern void cpuidle_unregister_device(struct cpuidle_device *dev); |
| @@ -137,16 +138,17 @@ extern void cpuidle_disable_device(struct cpuidle_device *dev); | |||
| 137 | #else | 138 | #else |
| 138 | 139 | ||
| 139 | static inline int cpuidle_register_driver(struct cpuidle_driver *drv) | 140 | static inline int cpuidle_register_driver(struct cpuidle_driver *drv) |
| 140 | {return 0;} | 141 | {return -ENODEV; } |
| 142 | static inline struct cpuidle_driver *cpuidle_get_driver(void) {return NULL; } | ||
| 141 | static inline void cpuidle_unregister_driver(struct cpuidle_driver *drv) { } | 143 | static inline void cpuidle_unregister_driver(struct cpuidle_driver *drv) { } |
| 142 | static inline int cpuidle_register_device(struct cpuidle_device *dev) | 144 | static inline int cpuidle_register_device(struct cpuidle_device *dev) |
| 143 | {return 0;} | 145 | {return -ENODEV; } |
| 144 | static inline void cpuidle_unregister_device(struct cpuidle_device *dev) { } | 146 | static inline void cpuidle_unregister_device(struct cpuidle_device *dev) { } |
| 145 | 147 | ||
| 146 | static inline void cpuidle_pause_and_lock(void) { } | 148 | static inline void cpuidle_pause_and_lock(void) { } |
| 147 | static inline void cpuidle_resume_and_unlock(void) { } | 149 | static inline void cpuidle_resume_and_unlock(void) { } |
| 148 | static inline int cpuidle_enable_device(struct cpuidle_device *dev) | 150 | static inline int cpuidle_enable_device(struct cpuidle_device *dev) |
| 149 | {return 0;} | 151 | {return -ENODEV; } |
| 150 | static inline void cpuidle_disable_device(struct cpuidle_device *dev) { } | 152 | static inline void cpuidle_disable_device(struct cpuidle_device *dev) { } |
| 151 | 153 | ||
| 152 | #endif | 154 | #endif |
diff --git a/include/linux/cpuset.h b/include/linux/cpuset.h index 20b51cab6593..457ed765a116 100644 --- a/include/linux/cpuset.h +++ b/include/linux/cpuset.h | |||
| @@ -69,6 +69,7 @@ extern void cpuset_task_status_allowed(struct seq_file *m, | |||
| 69 | struct task_struct *task); | 69 | struct task_struct *task); |
| 70 | 70 | ||
| 71 | extern int cpuset_mem_spread_node(void); | 71 | extern int cpuset_mem_spread_node(void); |
| 72 | extern int cpuset_slab_spread_node(void); | ||
| 72 | 73 | ||
| 73 | static inline int cpuset_do_page_mem_spread(void) | 74 | static inline int cpuset_do_page_mem_spread(void) |
| 74 | { | 75 | { |
| @@ -194,6 +195,11 @@ static inline int cpuset_mem_spread_node(void) | |||
| 194 | return 0; | 195 | return 0; |
| 195 | } | 196 | } |
| 196 | 197 | ||
| 198 | static inline int cpuset_slab_spread_node(void) | ||
| 199 | { | ||
| 200 | return 0; | ||
| 201 | } | ||
| 202 | |||
| 197 | static inline int cpuset_do_page_mem_spread(void) | 203 | static inline int cpuset_do_page_mem_spread(void) |
| 198 | { | 204 | { |
| 199 | return 0; | 205 | return 0; |
diff --git a/include/linux/cred.h b/include/linux/cred.h index 52507c3e1387..75c0fa881308 100644 --- a/include/linux/cred.h +++ b/include/linux/cred.h | |||
| @@ -156,7 +156,6 @@ extern int copy_creds(struct task_struct *, unsigned long); | |||
| 156 | extern struct cred *cred_alloc_blank(void); | 156 | extern struct cred *cred_alloc_blank(void); |
| 157 | extern struct cred *prepare_creds(void); | 157 | extern struct cred *prepare_creds(void); |
| 158 | extern struct cred *prepare_exec_creds(void); | 158 | extern struct cred *prepare_exec_creds(void); |
| 159 | extern struct cred *prepare_usermodehelper_creds(void); | ||
| 160 | extern int commit_creds(struct cred *); | 159 | extern int commit_creds(struct cred *); |
| 161 | extern void abort_creds(struct cred *); | 160 | extern void abort_creds(struct cred *); |
| 162 | extern const struct cred *override_creds(const struct cred *); | 161 | extern const struct cred *override_creds(const struct cred *); |
diff --git a/include/linux/debugfs.h b/include/linux/debugfs.h index fc1b930f246c..e7d9b20ddc5b 100644 --- a/include/linux/debugfs.h +++ b/include/linux/debugfs.h | |||
| @@ -63,6 +63,8 @@ struct dentry *debugfs_create_x16(const char *name, mode_t mode, | |||
| 63 | struct dentry *parent, u16 *value); | 63 | struct dentry *parent, u16 *value); |
| 64 | struct dentry *debugfs_create_x32(const char *name, mode_t mode, | 64 | struct dentry *debugfs_create_x32(const char *name, mode_t mode, |
| 65 | struct dentry *parent, u32 *value); | 65 | struct dentry *parent, u32 *value); |
| 66 | struct dentry *debugfs_create_x64(const char *name, mode_t mode, | ||
| 67 | struct dentry *parent, u64 *value); | ||
| 66 | struct dentry *debugfs_create_size_t(const char *name, mode_t mode, | 68 | struct dentry *debugfs_create_size_t(const char *name, mode_t mode, |
| 67 | struct dentry *parent, size_t *value); | 69 | struct dentry *parent, size_t *value); |
| 68 | struct dentry *debugfs_create_bool(const char *name, mode_t mode, | 70 | struct dentry *debugfs_create_bool(const char *name, mode_t mode, |
diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h index ca32ed78b057..89b7e1a605b8 100644 --- a/include/linux/dma-mapping.h +++ b/include/linux/dma-mapping.h | |||
| @@ -40,16 +40,6 @@ struct dma_map_ops { | |||
| 40 | void (*sync_single_for_device)(struct device *dev, | 40 | void (*sync_single_for_device)(struct device *dev, |
| 41 | dma_addr_t dma_handle, size_t size, | 41 | dma_addr_t dma_handle, size_t size, |
| 42 | enum dma_data_direction dir); | 42 | enum dma_data_direction dir); |
| 43 | void (*sync_single_range_for_cpu)(struct device *dev, | ||
| 44 | dma_addr_t dma_handle, | ||
| 45 | unsigned long offset, | ||
| 46 | size_t size, | ||
| 47 | enum dma_data_direction dir); | ||
| 48 | void (*sync_single_range_for_device)(struct device *dev, | ||
| 49 | dma_addr_t dma_handle, | ||
| 50 | unsigned long offset, | ||
| 51 | size_t size, | ||
| 52 | enum dma_data_direction dir); | ||
| 53 | void (*sync_sg_for_cpu)(struct device *dev, | 43 | void (*sync_sg_for_cpu)(struct device *dev, |
| 54 | struct scatterlist *sg, int nents, | 44 | struct scatterlist *sg, int nents, |
| 55 | enum dma_data_direction dir); | 45 | enum dma_data_direction dir); |
| @@ -105,21 +95,6 @@ static inline int is_device_dma_capable(struct device *dev) | |||
| 105 | #include <asm-generic/dma-mapping-broken.h> | 95 | #include <asm-generic/dma-mapping-broken.h> |
| 106 | #endif | 96 | #endif |
| 107 | 97 | ||
| 108 | /* for backwards compatibility, removed soon */ | ||
| 109 | static inline void __deprecated dma_sync_single(struct device *dev, | ||
| 110 | dma_addr_t addr, size_t size, | ||
| 111 | enum dma_data_direction dir) | ||
| 112 | { | ||
| 113 | dma_sync_single_for_cpu(dev, addr, size, dir); | ||
| 114 | } | ||
| 115 | |||
| 116 | static inline void __deprecated dma_sync_sg(struct device *dev, | ||
| 117 | struct scatterlist *sg, int nelems, | ||
| 118 | enum dma_data_direction dir) | ||
| 119 | { | ||
| 120 | dma_sync_sg_for_cpu(dev, sg, nelems, dir); | ||
| 121 | } | ||
| 122 | |||
| 123 | static inline u64 dma_get_mask(struct device *dev) | 98 | static inline u64 dma_get_mask(struct device *dev) |
| 124 | { | 99 | { |
| 125 | if (dev && dev->dma_mask && *dev->dma_mask) | 100 | if (dev && dev->dma_mask && *dev->dma_mask) |
diff --git a/include/linux/drbd.h b/include/linux/drbd.h index 68530521ad00..30da4ae48972 100644 --- a/include/linux/drbd.h +++ b/include/linux/drbd.h | |||
| @@ -53,7 +53,7 @@ | |||
| 53 | 53 | ||
| 54 | 54 | ||
| 55 | extern const char *drbd_buildtag(void); | 55 | extern const char *drbd_buildtag(void); |
| 56 | #define REL_VERSION "8.3.8rc1" | 56 | #define REL_VERSION "8.3.8rc2" |
| 57 | #define API_VERSION 88 | 57 | #define API_VERSION 88 |
| 58 | #define PRO_VERSION_MIN 86 | 58 | #define PRO_VERSION_MIN 86 |
| 59 | #define PRO_VERSION_MAX 94 | 59 | #define PRO_VERSION_MAX 94 |
diff --git a/include/linux/edac_mce.h b/include/linux/edac_mce.h new file mode 100644 index 000000000000..f974fc035363 --- /dev/null +++ b/include/linux/edac_mce.h | |||
| @@ -0,0 +1,31 @@ | |||
| 1 | /* Provides edac interface to mcelog events | ||
| 2 | * | ||
| 3 | * This file may be distributed under the terms of the | ||
| 4 | * GNU General Public License version 2. | ||
| 5 | * | ||
| 6 | * Copyright (c) 2009 by: | ||
| 7 | * Mauro Carvalho Chehab <mchehab@redhat.com> | ||
| 8 | * | ||
| 9 | * Red Hat Inc. http://www.redhat.com | ||
| 10 | */ | ||
| 11 | |||
| 12 | #if defined(CONFIG_EDAC_MCE) || \ | ||
| 13 | (defined(CONFIG_EDAC_MCE_MODULE) && defined(MODULE)) | ||
| 14 | |||
| 15 | #include <asm/mce.h> | ||
| 16 | #include <linux/list.h> | ||
| 17 | |||
| 18 | struct edac_mce { | ||
| 19 | struct list_head list; | ||
| 20 | |||
| 21 | void *priv; | ||
| 22 | int (*check_error)(void *priv, struct mce *mce); | ||
| 23 | }; | ||
| 24 | |||
| 25 | int edac_mce_register(struct edac_mce *edac_mce); | ||
| 26 | void edac_mce_unregister(struct edac_mce *edac_mce); | ||
| 27 | int edac_mce_parse(struct mce *mce); | ||
| 28 | |||
| 29 | #else | ||
| 30 | #define edac_mce_parse(mce) (0) | ||
| 31 | #endif | ||
diff --git a/include/linux/ext3_fs.h b/include/linux/ext3_fs.h index 5f494b465097..7fc62d4550b2 100644 --- a/include/linux/ext3_fs.h +++ b/include/linux/ext3_fs.h | |||
| @@ -868,7 +868,7 @@ extern int ext3_htree_store_dirent(struct file *dir_file, __u32 hash, | |||
| 868 | extern void ext3_htree_free_dir_info(struct dir_private_info *p); | 868 | extern void ext3_htree_free_dir_info(struct dir_private_info *p); |
| 869 | 869 | ||
| 870 | /* fsync.c */ | 870 | /* fsync.c */ |
| 871 | extern int ext3_sync_file (struct file *, struct dentry *, int); | 871 | extern int ext3_sync_file(struct file *, int); |
| 872 | 872 | ||
| 873 | /* hash.c */ | 873 | /* hash.c */ |
| 874 | extern int ext3fs_dirhash(const char *name, int len, struct | 874 | extern int ext3fs_dirhash(const char *name, int len, struct |
diff --git a/include/linux/fb.h b/include/linux/fb.h index f3793ebc241c..907ace3a64c8 100644 --- a/include/linux/fb.h +++ b/include/linux/fb.h | |||
| @@ -4,8 +4,6 @@ | |||
| 4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
| 5 | #include <linux/i2c.h> | 5 | #include <linux/i2c.h> |
| 6 | 6 | ||
| 7 | struct dentry; | ||
| 8 | |||
| 9 | /* Definitions of frame buffers */ | 7 | /* Definitions of frame buffers */ |
| 10 | 8 | ||
| 11 | #define FB_MAX 32 /* sufficient for now */ | 9 | #define FB_MAX 32 /* sufficient for now */ |
| @@ -1017,8 +1015,7 @@ extern void fb_deferred_io_open(struct fb_info *info, | |||
| 1017 | struct inode *inode, | 1015 | struct inode *inode, |
| 1018 | struct file *file); | 1016 | struct file *file); |
| 1019 | extern void fb_deferred_io_cleanup(struct fb_info *info); | 1017 | extern void fb_deferred_io_cleanup(struct fb_info *info); |
| 1020 | extern int fb_deferred_io_fsync(struct file *file, struct dentry *dentry, | 1018 | extern int fb_deferred_io_fsync(struct file *file, int datasync); |
| 1021 | int datasync); | ||
| 1022 | 1019 | ||
| 1023 | static inline bool fb_be_math(struct fb_info *info) | 1020 | static inline bool fb_be_math(struct fb_info *info) |
| 1024 | { | 1021 | { |
diff --git a/include/linux/file.h b/include/linux/file.h index 5555508fd517..b1e12970f617 100644 --- a/include/linux/file.h +++ b/include/linux/file.h | |||
| @@ -11,7 +11,6 @@ | |||
| 11 | 11 | ||
| 12 | struct file; | 12 | struct file; |
| 13 | 13 | ||
| 14 | extern void __fput(struct file *); | ||
| 15 | extern void fput(struct file *); | 14 | extern void fput(struct file *); |
| 16 | extern void drop_file_write_access(struct file *file); | 15 | extern void drop_file_write_access(struct file *file); |
| 17 | 16 | ||
diff --git a/include/linux/firewire.h b/include/linux/firewire.h index 4bd94bf5e739..72e2b8ac2a5a 100644 --- a/include/linux/firewire.h +++ b/include/linux/firewire.h | |||
| @@ -55,13 +55,11 @@ | |||
| 55 | #define CSR_DESCRIPTOR 0x01 | 55 | #define CSR_DESCRIPTOR 0x01 |
| 56 | #define CSR_VENDOR 0x03 | 56 | #define CSR_VENDOR 0x03 |
| 57 | #define CSR_HARDWARE_VERSION 0x04 | 57 | #define CSR_HARDWARE_VERSION 0x04 |
| 58 | #define CSR_NODE_CAPABILITIES 0x0c | ||
| 59 | #define CSR_UNIT 0x11 | 58 | #define CSR_UNIT 0x11 |
| 60 | #define CSR_SPECIFIER_ID 0x12 | 59 | #define CSR_SPECIFIER_ID 0x12 |
| 61 | #define CSR_VERSION 0x13 | 60 | #define CSR_VERSION 0x13 |
| 62 | #define CSR_DEPENDENT_INFO 0x14 | 61 | #define CSR_DEPENDENT_INFO 0x14 |
| 63 | #define CSR_MODEL 0x17 | 62 | #define CSR_MODEL 0x17 |
| 64 | #define CSR_INSTANCE 0x18 | ||
| 65 | #define CSR_DIRECTORY_ID 0x20 | 63 | #define CSR_DIRECTORY_ID 0x20 |
| 66 | 64 | ||
| 67 | struct fw_csr_iterator { | 65 | struct fw_csr_iterator { |
| @@ -89,7 +87,6 @@ struct fw_card { | |||
| 89 | int current_tlabel; | 87 | int current_tlabel; |
| 90 | u64 tlabel_mask; | 88 | u64 tlabel_mask; |
| 91 | struct list_head transaction_list; | 89 | struct list_head transaction_list; |
| 92 | struct timer_list flush_timer; | ||
| 93 | unsigned long reset_jiffies; | 90 | unsigned long reset_jiffies; |
| 94 | 91 | ||
| 95 | unsigned long long guid; | 92 | unsigned long long guid; |
| @@ -290,6 +287,8 @@ struct fw_transaction { | |||
| 290 | int tlabel; | 287 | int tlabel; |
| 291 | int timestamp; | 288 | int timestamp; |
| 292 | struct list_head link; | 289 | struct list_head link; |
| 290 | struct fw_card *card; | ||
| 291 | struct timer_list split_timeout_timer; | ||
| 293 | 292 | ||
| 294 | struct fw_packet packet; | 293 | struct fw_packet packet; |
| 295 | 294 | ||
diff --git a/include/linux/fs.h b/include/linux/fs.h index b336cb9ca9a0..471e1ff5079a 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
| @@ -954,6 +954,7 @@ extern spinlock_t files_lock; | |||
| 954 | #define file_list_unlock() spin_unlock(&files_lock); | 954 | #define file_list_unlock() spin_unlock(&files_lock); |
| 955 | 955 | ||
| 956 | #define get_file(x) atomic_long_inc(&(x)->f_count) | 956 | #define get_file(x) atomic_long_inc(&(x)->f_count) |
| 957 | #define fput_atomic(x) atomic_long_add_unless(&(x)->f_count, -1, 1) | ||
| 957 | #define file_count(x) atomic_long_read(&(x)->f_count) | 958 | #define file_count(x) atomic_long_read(&(x)->f_count) |
| 958 | 959 | ||
| 959 | #ifdef CONFIG_DEBUG_WRITECOUNT | 960 | #ifdef CONFIG_DEBUG_WRITECOUNT |
| @@ -1497,7 +1498,7 @@ struct file_operations { | |||
| 1497 | int (*open) (struct inode *, struct file *); | 1498 | int (*open) (struct inode *, struct file *); |
| 1498 | int (*flush) (struct file *, fl_owner_t id); | 1499 | int (*flush) (struct file *, fl_owner_t id); |
| 1499 | int (*release) (struct inode *, struct file *); | 1500 | int (*release) (struct inode *, struct file *); |
| 1500 | int (*fsync) (struct file *, struct dentry *, int datasync); | 1501 | int (*fsync) (struct file *, int datasync); |
| 1501 | int (*aio_fsync) (struct kiocb *, int datasync); | 1502 | int (*aio_fsync) (struct kiocb *, int datasync); |
| 1502 | int (*fasync) (int, struct file *, int); | 1503 | int (*fasync) (int, struct file *, int); |
| 1503 | int (*lock) (struct file *, int, struct file_lock *); | 1504 | int (*lock) (struct file *, int, struct file_lock *); |
| @@ -2212,7 +2213,7 @@ extern int generic_segment_checks(const struct iovec *iov, | |||
| 2212 | /* fs/block_dev.c */ | 2213 | /* fs/block_dev.c */ |
| 2213 | extern ssize_t blkdev_aio_write(struct kiocb *iocb, const struct iovec *iov, | 2214 | extern ssize_t blkdev_aio_write(struct kiocb *iocb, const struct iovec *iov, |
| 2214 | unsigned long nr_segs, loff_t pos); | 2215 | unsigned long nr_segs, loff_t pos); |
| 2215 | extern int blkdev_fsync(struct file *filp, struct dentry *dentry, int datasync); | 2216 | extern int blkdev_fsync(struct file *filp, int datasync); |
| 2216 | 2217 | ||
| 2217 | /* fs/splice.c */ | 2218 | /* fs/splice.c */ |
| 2218 | extern ssize_t generic_file_splice_read(struct file *, loff_t *, | 2219 | extern ssize_t generic_file_splice_read(struct file *, loff_t *, |
| @@ -2228,6 +2229,7 @@ extern long do_splice_direct(struct file *in, loff_t *ppos, struct file *out, | |||
| 2228 | 2229 | ||
| 2229 | extern void | 2230 | extern void |
| 2230 | file_ra_state_init(struct file_ra_state *ra, struct address_space *mapping); | 2231 | file_ra_state_init(struct file_ra_state *ra, struct address_space *mapping); |
| 2232 | extern loff_t noop_llseek(struct file *file, loff_t offset, int origin); | ||
| 2231 | extern loff_t no_llseek(struct file *file, loff_t offset, int origin); | 2233 | extern loff_t no_llseek(struct file *file, loff_t offset, int origin); |
| 2232 | extern loff_t generic_file_llseek(struct file *file, loff_t offset, int origin); | 2234 | extern loff_t generic_file_llseek(struct file *file, loff_t offset, int origin); |
| 2233 | extern loff_t generic_file_llseek_unlocked(struct file *file, loff_t offset, | 2235 | extern loff_t generic_file_llseek_unlocked(struct file *file, loff_t offset, |
| @@ -2250,10 +2252,19 @@ static inline int xip_truncate_page(struct address_space *mapping, loff_t from) | |||
| 2250 | #endif | 2252 | #endif |
| 2251 | 2253 | ||
| 2252 | #ifdef CONFIG_BLOCK | 2254 | #ifdef CONFIG_BLOCK |
| 2255 | struct bio; | ||
| 2256 | typedef void (dio_submit_t)(int rw, struct bio *bio, struct inode *inode, | ||
| 2257 | loff_t file_offset); | ||
| 2258 | void dio_end_io(struct bio *bio, int error); | ||
| 2259 | |||
| 2260 | ssize_t __blockdev_direct_IO_newtrunc(int rw, struct kiocb *iocb, struct inode *inode, | ||
| 2261 | struct block_device *bdev, const struct iovec *iov, loff_t offset, | ||
| 2262 | unsigned long nr_segs, get_block_t get_block, dio_iodone_t end_io, | ||
| 2263 | dio_submit_t submit_io, int lock_type); | ||
| 2253 | ssize_t __blockdev_direct_IO(int rw, struct kiocb *iocb, struct inode *inode, | 2264 | ssize_t __blockdev_direct_IO(int rw, struct kiocb *iocb, struct inode *inode, |
| 2254 | struct block_device *bdev, const struct iovec *iov, loff_t offset, | 2265 | struct block_device *bdev, const struct iovec *iov, loff_t offset, |
| 2255 | unsigned long nr_segs, get_block_t get_block, dio_iodone_t end_io, | 2266 | unsigned long nr_segs, get_block_t get_block, dio_iodone_t end_io, |
| 2256 | int lock_type); | 2267 | dio_submit_t submit_io, int lock_type); |
| 2257 | 2268 | ||
| 2258 | enum { | 2269 | enum { |
| 2259 | /* need locking between buffered and direct access */ | 2270 | /* need locking between buffered and direct access */ |
| @@ -2263,13 +2274,31 @@ enum { | |||
| 2263 | DIO_SKIP_HOLES = 0x02, | 2274 | DIO_SKIP_HOLES = 0x02, |
| 2264 | }; | 2275 | }; |
| 2265 | 2276 | ||
| 2277 | static inline ssize_t blockdev_direct_IO_newtrunc(int rw, struct kiocb *iocb, | ||
| 2278 | struct inode *inode, struct block_device *bdev, const struct iovec *iov, | ||
| 2279 | loff_t offset, unsigned long nr_segs, get_block_t get_block, | ||
| 2280 | dio_iodone_t end_io) | ||
| 2281 | { | ||
| 2282 | return __blockdev_direct_IO_newtrunc(rw, iocb, inode, bdev, iov, offset, | ||
| 2283 | nr_segs, get_block, end_io, NULL, | ||
| 2284 | DIO_LOCKING | DIO_SKIP_HOLES); | ||
| 2285 | } | ||
| 2286 | |||
| 2287 | static inline ssize_t blockdev_direct_IO_no_locking_newtrunc(int rw, struct kiocb *iocb, | ||
| 2288 | struct inode *inode, struct block_device *bdev, const struct iovec *iov, | ||
| 2289 | loff_t offset, unsigned long nr_segs, get_block_t get_block, | ||
| 2290 | dio_iodone_t end_io) | ||
| 2291 | { | ||
| 2292 | return __blockdev_direct_IO_newtrunc(rw, iocb, inode, bdev, iov, offset, | ||
| 2293 | nr_segs, get_block, end_io, NULL, 0); | ||
| 2294 | } | ||
| 2266 | static inline ssize_t blockdev_direct_IO(int rw, struct kiocb *iocb, | 2295 | static inline ssize_t blockdev_direct_IO(int rw, struct kiocb *iocb, |
| 2267 | struct inode *inode, struct block_device *bdev, const struct iovec *iov, | 2296 | struct inode *inode, struct block_device *bdev, const struct iovec *iov, |
| 2268 | loff_t offset, unsigned long nr_segs, get_block_t get_block, | 2297 | loff_t offset, unsigned long nr_segs, get_block_t get_block, |
| 2269 | dio_iodone_t end_io) | 2298 | dio_iodone_t end_io) |
| 2270 | { | 2299 | { |
| 2271 | return __blockdev_direct_IO(rw, iocb, inode, bdev, iov, offset, | 2300 | return __blockdev_direct_IO(rw, iocb, inode, bdev, iov, offset, |
| 2272 | nr_segs, get_block, end_io, | 2301 | nr_segs, get_block, end_io, NULL, |
| 2273 | DIO_LOCKING | DIO_SKIP_HOLES); | 2302 | DIO_LOCKING | DIO_SKIP_HOLES); |
| 2274 | } | 2303 | } |
| 2275 | 2304 | ||
| @@ -2279,7 +2308,7 @@ static inline ssize_t blockdev_direct_IO_no_locking(int rw, struct kiocb *iocb, | |||
| 2279 | dio_iodone_t end_io) | 2308 | dio_iodone_t end_io) |
| 2280 | { | 2309 | { |
| 2281 | return __blockdev_direct_IO(rw, iocb, inode, bdev, iov, offset, | 2310 | return __blockdev_direct_IO(rw, iocb, inode, bdev, iov, offset, |
| 2282 | nr_segs, get_block, end_io, 0); | 2311 | nr_segs, get_block, end_io, NULL, 0); |
| 2283 | } | 2312 | } |
| 2284 | #endif | 2313 | #endif |
| 2285 | 2314 | ||
| @@ -2335,13 +2364,15 @@ extern int dcache_dir_open(struct inode *, struct file *); | |||
| 2335 | extern int dcache_dir_close(struct inode *, struct file *); | 2364 | extern int dcache_dir_close(struct inode *, struct file *); |
| 2336 | extern loff_t dcache_dir_lseek(struct file *, loff_t, int); | 2365 | extern loff_t dcache_dir_lseek(struct file *, loff_t, int); |
| 2337 | extern int dcache_readdir(struct file *, void *, filldir_t); | 2366 | extern int dcache_readdir(struct file *, void *, filldir_t); |
| 2367 | extern int simple_setattr(struct dentry *, struct iattr *); | ||
| 2338 | extern int simple_getattr(struct vfsmount *, struct dentry *, struct kstat *); | 2368 | extern int simple_getattr(struct vfsmount *, struct dentry *, struct kstat *); |
| 2339 | extern int simple_statfs(struct dentry *, struct kstatfs *); | 2369 | extern int simple_statfs(struct dentry *, struct kstatfs *); |
| 2340 | extern int simple_link(struct dentry *, struct inode *, struct dentry *); | 2370 | extern int simple_link(struct dentry *, struct inode *, struct dentry *); |
| 2341 | extern int simple_unlink(struct inode *, struct dentry *); | 2371 | extern int simple_unlink(struct inode *, struct dentry *); |
| 2342 | extern int simple_rmdir(struct inode *, struct dentry *); | 2372 | extern int simple_rmdir(struct inode *, struct dentry *); |
| 2343 | extern int simple_rename(struct inode *, struct dentry *, struct inode *, struct dentry *); | 2373 | extern int simple_rename(struct inode *, struct dentry *, struct inode *, struct dentry *); |
| 2344 | extern int simple_sync_file(struct file *, struct dentry *, int); | 2374 | extern int simple_setsize(struct inode *, loff_t); |
| 2375 | extern int noop_fsync(struct file *, int); | ||
| 2345 | extern int simple_empty(struct dentry *); | 2376 | extern int simple_empty(struct dentry *); |
| 2346 | extern int simple_readpage(struct file *file, struct page *page); | 2377 | extern int simple_readpage(struct file *file, struct page *page); |
| 2347 | extern int simple_write_begin(struct file *file, struct address_space *mapping, | 2378 | extern int simple_write_begin(struct file *file, struct address_space *mapping, |
| @@ -2357,7 +2388,7 @@ extern const struct file_operations simple_dir_operations; | |||
| 2357 | extern const struct inode_operations simple_dir_inode_operations; | 2388 | extern const struct inode_operations simple_dir_inode_operations; |
| 2358 | struct tree_descr { char *name; const struct file_operations *ops; int mode; }; | 2389 | struct tree_descr { char *name; const struct file_operations *ops; int mode; }; |
| 2359 | struct dentry *d_alloc_name(struct dentry *, const char *); | 2390 | struct dentry *d_alloc_name(struct dentry *, const char *); |
| 2360 | extern int simple_fill_super(struct super_block *, int, struct tree_descr *); | 2391 | extern int simple_fill_super(struct super_block *, unsigned long, struct tree_descr *); |
| 2361 | extern int simple_pin_fs(struct file_system_type *, struct vfsmount **mount, int *count); | 2392 | extern int simple_pin_fs(struct file_system_type *, struct vfsmount **mount, int *count); |
| 2362 | extern void simple_release_fs(struct vfsmount **mount, int *count); | 2393 | extern void simple_release_fs(struct vfsmount **mount, int *count); |
| 2363 | 2394 | ||
| @@ -2366,7 +2397,7 @@ extern ssize_t simple_read_from_buffer(void __user *to, size_t count, | |||
| 2366 | extern ssize_t simple_write_to_buffer(void *to, size_t available, loff_t *ppos, | 2397 | extern ssize_t simple_write_to_buffer(void *to, size_t available, loff_t *ppos, |
| 2367 | const void __user *from, size_t count); | 2398 | const void __user *from, size_t count); |
| 2368 | 2399 | ||
| 2369 | extern int simple_fsync(struct file *, struct dentry *, int); | 2400 | extern int generic_file_fsync(struct file *, int); |
| 2370 | 2401 | ||
| 2371 | #ifdef CONFIG_MIGRATION | 2402 | #ifdef CONFIG_MIGRATION |
| 2372 | extern int buffer_migrate_page(struct address_space *, | 2403 | extern int buffer_migrate_page(struct address_space *, |
| @@ -2377,7 +2408,8 @@ extern int buffer_migrate_page(struct address_space *, | |||
| 2377 | 2408 | ||
| 2378 | extern int inode_change_ok(const struct inode *, struct iattr *); | 2409 | extern int inode_change_ok(const struct inode *, struct iattr *); |
| 2379 | extern int inode_newsize_ok(const struct inode *, loff_t offset); | 2410 | extern int inode_newsize_ok(const struct inode *, loff_t offset); |
| 2380 | extern int __must_check inode_setattr(struct inode *, struct iattr *); | 2411 | extern int __must_check inode_setattr(struct inode *, const struct iattr *); |
| 2412 | extern void generic_setattr(struct inode *inode, const struct iattr *attr); | ||
| 2381 | 2413 | ||
| 2382 | extern void file_update_time(struct file *file); | 2414 | extern void file_update_time(struct file *file); |
| 2383 | 2415 | ||
diff --git a/include/linux/ftrace_event.h b/include/linux/ftrace_event.h index c082f223e2fe..3167f2df4126 100644 --- a/include/linux/ftrace_event.h +++ b/include/linux/ftrace_event.h | |||
| @@ -73,18 +73,25 @@ struct trace_iterator { | |||
| 73 | }; | 73 | }; |
| 74 | 74 | ||
| 75 | 75 | ||
| 76 | struct trace_event; | ||
| 77 | |||
| 76 | typedef enum print_line_t (*trace_print_func)(struct trace_iterator *iter, | 78 | typedef enum print_line_t (*trace_print_func)(struct trace_iterator *iter, |
| 77 | int flags); | 79 | int flags, struct trace_event *event); |
| 78 | struct trace_event { | 80 | |
| 79 | struct hlist_node node; | 81 | struct trace_event_functions { |
| 80 | struct list_head list; | ||
| 81 | int type; | ||
| 82 | trace_print_func trace; | 82 | trace_print_func trace; |
| 83 | trace_print_func raw; | 83 | trace_print_func raw; |
| 84 | trace_print_func hex; | 84 | trace_print_func hex; |
| 85 | trace_print_func binary; | 85 | trace_print_func binary; |
| 86 | }; | 86 | }; |
| 87 | 87 | ||
| 88 | struct trace_event { | ||
| 89 | struct hlist_node node; | ||
| 90 | struct list_head list; | ||
| 91 | int type; | ||
| 92 | struct trace_event_functions *funcs; | ||
| 93 | }; | ||
| 94 | |||
| 88 | extern int register_ftrace_event(struct trace_event *event); | 95 | extern int register_ftrace_event(struct trace_event *event); |
| 89 | extern int unregister_ftrace_event(struct trace_event *event); | 96 | extern int unregister_ftrace_event(struct trace_event *event); |
| 90 | 97 | ||
| @@ -116,28 +123,70 @@ void tracing_record_cmdline(struct task_struct *tsk); | |||
| 116 | 123 | ||
| 117 | struct event_filter; | 124 | struct event_filter; |
| 118 | 125 | ||
| 126 | enum trace_reg { | ||
| 127 | TRACE_REG_REGISTER, | ||
| 128 | TRACE_REG_UNREGISTER, | ||
| 129 | TRACE_REG_PERF_REGISTER, | ||
| 130 | TRACE_REG_PERF_UNREGISTER, | ||
| 131 | }; | ||
| 132 | |||
| 133 | struct ftrace_event_call; | ||
| 134 | |||
| 135 | struct ftrace_event_class { | ||
| 136 | char *system; | ||
| 137 | void *probe; | ||
| 138 | #ifdef CONFIG_PERF_EVENTS | ||
| 139 | void *perf_probe; | ||
| 140 | #endif | ||
| 141 | int (*reg)(struct ftrace_event_call *event, | ||
| 142 | enum trace_reg type); | ||
| 143 | int (*define_fields)(struct ftrace_event_call *); | ||
| 144 | struct list_head *(*get_fields)(struct ftrace_event_call *); | ||
| 145 | struct list_head fields; | ||
| 146 | int (*raw_init)(struct ftrace_event_call *); | ||
| 147 | }; | ||
| 148 | |||
| 149 | enum { | ||
| 150 | TRACE_EVENT_FL_ENABLED_BIT, | ||
| 151 | TRACE_EVENT_FL_FILTERED_BIT, | ||
| 152 | }; | ||
| 153 | |||
| 154 | enum { | ||
| 155 | TRACE_EVENT_FL_ENABLED = (1 << TRACE_EVENT_FL_ENABLED_BIT), | ||
| 156 | TRACE_EVENT_FL_FILTERED = (1 << TRACE_EVENT_FL_FILTERED_BIT), | ||
| 157 | }; | ||
| 158 | |||
| 119 | struct ftrace_event_call { | 159 | struct ftrace_event_call { |
| 120 | struct list_head list; | 160 | struct list_head list; |
| 161 | struct ftrace_event_class *class; | ||
| 121 | char *name; | 162 | char *name; |
| 122 | char *system; | ||
| 123 | struct dentry *dir; | 163 | struct dentry *dir; |
| 124 | struct trace_event *event; | 164 | struct trace_event event; |
| 125 | int enabled; | ||
| 126 | int (*regfunc)(struct ftrace_event_call *); | ||
| 127 | void (*unregfunc)(struct ftrace_event_call *); | ||
| 128 | int id; | ||
| 129 | const char *print_fmt; | 165 | const char *print_fmt; |
| 130 | int (*raw_init)(struct ftrace_event_call *); | ||
| 131 | int (*define_fields)(struct ftrace_event_call *); | ||
| 132 | struct list_head fields; | ||
| 133 | int filter_active; | ||
| 134 | struct event_filter *filter; | 166 | struct event_filter *filter; |
| 135 | void *mod; | 167 | void *mod; |
| 136 | void *data; | 168 | void *data; |
| 137 | 169 | ||
| 170 | /* | ||
| 171 | * 32 bit flags: | ||
| 172 | * bit 1: enabled | ||
| 173 | * bit 2: filter_active | ||
| 174 | * | ||
| 175 | * Changes to flags must hold the event_mutex. | ||
| 176 | * | ||
| 177 | * Note: Reads of flags do not hold the event_mutex since | ||
| 178 | * they occur in critical sections. But the way flags | ||
| 179 | * is currently used, these changes do no affect the code | ||
| 180 | * except that when a change is made, it may have a slight | ||
| 181 | * delay in propagating the changes to other CPUs due to | ||
| 182 | * caching and such. | ||
| 183 | */ | ||
| 184 | unsigned int flags; | ||
| 185 | |||
| 186 | #ifdef CONFIG_PERF_EVENTS | ||
| 138 | int perf_refcount; | 187 | int perf_refcount; |
| 139 | int (*perf_event_enable)(struct ftrace_event_call *); | 188 | struct hlist_head *perf_events; |
| 140 | void (*perf_event_disable)(struct ftrace_event_call *); | 189 | #endif |
| 141 | }; | 190 | }; |
| 142 | 191 | ||
| 143 | #define PERF_MAX_TRACE_SIZE 2048 | 192 | #define PERF_MAX_TRACE_SIZE 2048 |
| @@ -194,24 +243,22 @@ struct perf_event; | |||
| 194 | 243 | ||
| 195 | DECLARE_PER_CPU(struct pt_regs, perf_trace_regs); | 244 | DECLARE_PER_CPU(struct pt_regs, perf_trace_regs); |
| 196 | 245 | ||
| 197 | extern int perf_trace_enable(int event_id); | 246 | extern int perf_trace_init(struct perf_event *event); |
| 198 | extern void perf_trace_disable(int event_id); | 247 | extern void perf_trace_destroy(struct perf_event *event); |
| 199 | extern int ftrace_profile_set_filter(struct perf_event *event, int event_id, | 248 | extern int perf_trace_enable(struct perf_event *event); |
| 249 | extern void perf_trace_disable(struct perf_event *event); | ||
| 250 | extern int ftrace_profile_set_filter(struct perf_event *event, int event_id, | ||
| 200 | char *filter_str); | 251 | char *filter_str); |
| 201 | extern void ftrace_profile_free_filter(struct perf_event *event); | 252 | extern void ftrace_profile_free_filter(struct perf_event *event); |
| 202 | extern void * | 253 | extern void *perf_trace_buf_prepare(int size, unsigned short type, |
| 203 | perf_trace_buf_prepare(int size, unsigned short type, int *rctxp, | 254 | struct pt_regs *regs, int *rctxp); |
| 204 | unsigned long *irq_flags); | ||
| 205 | 255 | ||
| 206 | static inline void | 256 | static inline void |
| 207 | perf_trace_buf_submit(void *raw_data, int size, int rctx, u64 addr, | 257 | perf_trace_buf_submit(void *raw_data, int size, int rctx, u64 addr, |
| 208 | u64 count, unsigned long irq_flags, struct pt_regs *regs) | 258 | u64 count, struct pt_regs *regs, void *head) |
| 209 | { | 259 | { |
| 210 | struct trace_entry *entry = raw_data; | 260 | perf_tp_event(addr, count, raw_data, size, regs, head); |
| 211 | |||
| 212 | perf_tp_event(entry->type, addr, count, raw_data, size, regs); | ||
| 213 | perf_swevent_put_recursion_context(rctx); | 261 | perf_swevent_put_recursion_context(rctx); |
| 214 | local_irq_restore(irq_flags); | ||
| 215 | } | 262 | } |
| 216 | #endif | 263 | #endif |
| 217 | 264 | ||
diff --git a/include/linux/fuse.h b/include/linux/fuse.h index 3e2925a34bf0..88e0eb596919 100644 --- a/include/linux/fuse.h +++ b/include/linux/fuse.h | |||
| @@ -34,6 +34,9 @@ | |||
| 34 | * 7.13 | 34 | * 7.13 |
| 35 | * - make max number of background requests and congestion threshold | 35 | * - make max number of background requests and congestion threshold |
| 36 | * tunables | 36 | * tunables |
| 37 | * | ||
| 38 | * 7.14 | ||
| 39 | * - add splice support to fuse device | ||
| 37 | */ | 40 | */ |
| 38 | 41 | ||
| 39 | #ifndef _LINUX_FUSE_H | 42 | #ifndef _LINUX_FUSE_H |
| @@ -65,7 +68,7 @@ | |||
| 65 | #define FUSE_KERNEL_VERSION 7 | 68 | #define FUSE_KERNEL_VERSION 7 |
| 66 | 69 | ||
| 67 | /** Minor version number of this interface */ | 70 | /** Minor version number of this interface */ |
| 68 | #define FUSE_KERNEL_MINOR_VERSION 13 | 71 | #define FUSE_KERNEL_MINOR_VERSION 14 |
| 69 | 72 | ||
| 70 | /** The node ID of the root inode */ | 73 | /** The node ID of the root inode */ |
| 71 | #define FUSE_ROOT_ID 1 | 74 | #define FUSE_ROOT_ID 1 |
diff --git a/include/linux/gpio.h b/include/linux/gpio.h index 4e949a5b5b85..03f616b78cfa 100644 --- a/include/linux/gpio.h +++ b/include/linux/gpio.h | |||
| @@ -51,6 +51,11 @@ static inline int gpio_direction_output(unsigned gpio, int value) | |||
| 51 | return -ENOSYS; | 51 | return -ENOSYS; |
| 52 | } | 52 | } |
| 53 | 53 | ||
| 54 | static inline int gpio_set_debounce(unsigned gpio, unsigned debounce) | ||
| 55 | { | ||
| 56 | return -ENOSYS; | ||
| 57 | } | ||
| 58 | |||
| 54 | static inline int gpio_get_value(unsigned gpio) | 59 | static inline int gpio_get_value(unsigned gpio) |
| 55 | { | 60 | { |
| 56 | /* GPIO can never have been requested or set as {in,out}put */ | 61 | /* GPIO can never have been requested or set as {in,out}put */ |
diff --git a/include/linux/i2c/adp8860.h b/include/linux/i2c/adp8860.h new file mode 100644 index 000000000000..0b4d39855c91 --- /dev/null +++ b/include/linux/i2c/adp8860.h | |||
| @@ -0,0 +1,154 @@ | |||
| 1 | /* | ||
| 2 | * Definitions and platform data for Analog Devices | ||
| 3 | * Backlight drivers ADP8860 | ||
| 4 | * | ||
| 5 | * Copyright 2009-2010 Analog Devices Inc. | ||
| 6 | * | ||
| 7 | * Licensed under the GPL-2 or later. | ||
| 8 | */ | ||
| 9 | |||
| 10 | #ifndef __LINUX_I2C_ADP8860_H | ||
| 11 | #define __LINUX_I2C_ADP8860_H | ||
| 12 | |||
| 13 | #include <linux/leds.h> | ||
| 14 | #include <linux/types.h> | ||
| 15 | |||
| 16 | #define ID_ADP8860 8860 | ||
| 17 | |||
| 18 | #define ADP8860_MAX_BRIGHTNESS 0x7F | ||
| 19 | #define FLAG_OFFT_SHIFT 8 | ||
| 20 | |||
| 21 | /* | ||
| 22 | * LEDs subdevice platform data | ||
| 23 | */ | ||
| 24 | |||
| 25 | #define ADP8860_LED_DIS_BLINK (0 << FLAG_OFFT_SHIFT) | ||
| 26 | #define ADP8860_LED_OFFT_600ms (1 << FLAG_OFFT_SHIFT) | ||
| 27 | #define ADP8860_LED_OFFT_1200ms (2 << FLAG_OFFT_SHIFT) | ||
| 28 | #define ADP8860_LED_OFFT_1800ms (3 << FLAG_OFFT_SHIFT) | ||
| 29 | |||
| 30 | #define ADP8860_LED_ONT_200ms 0 | ||
| 31 | #define ADP8860_LED_ONT_600ms 1 | ||
| 32 | #define ADP8860_LED_ONT_800ms 2 | ||
| 33 | #define ADP8860_LED_ONT_1200ms 3 | ||
| 34 | |||
| 35 | #define ADP8860_LED_D7 (7) | ||
| 36 | #define ADP8860_LED_D6 (6) | ||
| 37 | #define ADP8860_LED_D5 (5) | ||
| 38 | #define ADP8860_LED_D4 (4) | ||
| 39 | #define ADP8860_LED_D3 (3) | ||
| 40 | #define ADP8860_LED_D2 (2) | ||
| 41 | #define ADP8860_LED_D1 (1) | ||
| 42 | |||
| 43 | /* | ||
| 44 | * Backlight subdevice platform data | ||
| 45 | */ | ||
| 46 | |||
| 47 | #define ADP8860_BL_D7 (1 << 6) | ||
| 48 | #define ADP8860_BL_D6 (1 << 5) | ||
| 49 | #define ADP8860_BL_D5 (1 << 4) | ||
| 50 | #define ADP8860_BL_D4 (1 << 3) | ||
| 51 | #define ADP8860_BL_D3 (1 << 2) | ||
| 52 | #define ADP8860_BL_D2 (1 << 1) | ||
| 53 | #define ADP8860_BL_D1 (1 << 0) | ||
| 54 | |||
| 55 | #define ADP8860_FADE_T_DIS 0 /* Fade Timer Disabled */ | ||
| 56 | #define ADP8860_FADE_T_300ms 1 /* 0.3 Sec */ | ||
| 57 | #define ADP8860_FADE_T_600ms 2 | ||
| 58 | #define ADP8860_FADE_T_900ms 3 | ||
| 59 | #define ADP8860_FADE_T_1200ms 4 | ||
| 60 | #define ADP8860_FADE_T_1500ms 5 | ||
| 61 | #define ADP8860_FADE_T_1800ms 6 | ||
| 62 | #define ADP8860_FADE_T_2100ms 7 | ||
| 63 | #define ADP8860_FADE_T_2400ms 8 | ||
| 64 | #define ADP8860_FADE_T_2700ms 9 | ||
| 65 | #define ADP8860_FADE_T_3000ms 10 | ||
| 66 | #define ADP8860_FADE_T_3500ms 11 | ||
| 67 | #define ADP8860_FADE_T_4000ms 12 | ||
| 68 | #define ADP8860_FADE_T_4500ms 13 | ||
| 69 | #define ADP8860_FADE_T_5000ms 14 | ||
| 70 | #define ADP8860_FADE_T_5500ms 15 /* 5.5 Sec */ | ||
| 71 | |||
| 72 | #define ADP8860_FADE_LAW_LINEAR 0 | ||
| 73 | #define ADP8860_FADE_LAW_SQUARE 1 | ||
| 74 | #define ADP8860_FADE_LAW_CUBIC1 2 | ||
| 75 | #define ADP8860_FADE_LAW_CUBIC2 3 | ||
| 76 | |||
| 77 | #define ADP8860_BL_AMBL_FILT_80ms 0 /* Light sensor filter time */ | ||
| 78 | #define ADP8860_BL_AMBL_FILT_160ms 1 | ||
| 79 | #define ADP8860_BL_AMBL_FILT_320ms 2 | ||
| 80 | #define ADP8860_BL_AMBL_FILT_640ms 3 | ||
| 81 | #define ADP8860_BL_AMBL_FILT_1280ms 4 | ||
| 82 | #define ADP8860_BL_AMBL_FILT_2560ms 5 | ||
| 83 | #define ADP8860_BL_AMBL_FILT_5120ms 6 | ||
| 84 | #define ADP8860_BL_AMBL_FILT_10240ms 7 /* 10.24 sec */ | ||
| 85 | |||
| 86 | /* | ||
| 87 | * Blacklight current 0..30mA | ||
| 88 | */ | ||
| 89 | #define ADP8860_BL_CUR_mA(I) ((I * 127) / 30) | ||
| 90 | |||
| 91 | /* | ||
| 92 | * L2 comparator current 0..1106uA | ||
| 93 | */ | ||
| 94 | #define ADP8860_L2_COMP_CURR_uA(I) ((I * 255) / 1106) | ||
| 95 | |||
| 96 | /* | ||
| 97 | * L3 comparator current 0..138uA | ||
| 98 | */ | ||
| 99 | #define ADP8860_L3_COMP_CURR_uA(I) ((I * 255) / 138) | ||
| 100 | |||
| 101 | struct adp8860_backlight_platform_data { | ||
| 102 | u8 bl_led_assign; /* 1 = Backlight 0 = Individual LED */ | ||
| 103 | |||
| 104 | u8 bl_fade_in; /* Backlight Fade-In Timer */ | ||
| 105 | u8 bl_fade_out; /* Backlight Fade-Out Timer */ | ||
| 106 | u8 bl_fade_law; /* fade-on/fade-off transfer characteristic */ | ||
| 107 | |||
| 108 | u8 en_ambl_sens; /* 1 = enable ambient light sensor */ | ||
| 109 | u8 abml_filt; /* Light sensor filter time */ | ||
| 110 | |||
| 111 | u8 l1_daylight_max; /* use BL_CUR_mA(I) 0 <= I <= 30 mA */ | ||
| 112 | u8 l1_daylight_dim; /* typ = 0, use BL_CUR_mA(I) 0 <= I <= 30 mA */ | ||
| 113 | u8 l2_office_max; /* use BL_CUR_mA(I) 0 <= I <= 30 mA */ | ||
| 114 | u8 l2_office_dim; /* typ = 0, use BL_CUR_mA(I) 0 <= I <= 30 mA */ | ||
| 115 | u8 l3_dark_max; /* use BL_CUR_mA(I) 0 <= I <= 30 mA */ | ||
| 116 | u8 l3_dark_dim; /* typ = 0, use BL_CUR_mA(I) 0 <= I <= 30 mA */ | ||
| 117 | |||
| 118 | u8 l2_trip; /* use L2_COMP_CURR_uA(I) 0 <= I <= 1106 uA */ | ||
| 119 | u8 l2_hyst; /* use L2_COMP_CURR_uA(I) 0 <= I <= 1106 uA */ | ||
| 120 | u8 l3_trip; /* use L3_COMP_CURR_uA(I) 0 <= I <= 551 uA */ | ||
| 121 | u8 l3_hyst; /* use L3_COMP_CURR_uA(I) 0 <= I <= 551 uA */ | ||
| 122 | |||
| 123 | /** | ||
| 124 | * Independent Current Sinks / LEDS | ||
| 125 | * Sinks not assigned to the Backlight can be exposed to | ||
| 126 | * user space using the LEDS CLASS interface | ||
| 127 | */ | ||
| 128 | |||
| 129 | int num_leds; | ||
| 130 | struct led_info *leds; | ||
| 131 | u8 led_fade_in; /* LED Fade-In Timer */ | ||
| 132 | u8 led_fade_out; /* LED Fade-Out Timer */ | ||
| 133 | u8 led_fade_law; /* fade-on/fade-off transfer characteristic */ | ||
| 134 | u8 led_on_time; | ||
| 135 | |||
| 136 | /** | ||
| 137 | * Gain down disable. Setting this option does not allow the | ||
| 138 | * charge pump to switch to lower gains. NOT AVAILABLE on ADP8860 | ||
| 139 | * 1 = the charge pump doesn't switch down in gain until all LEDs are 0. | ||
| 140 | * The charge pump switches up in gain as needed. This feature is | ||
| 141 | * useful if the ADP8863 charge pump is used to drive an external load. | ||
| 142 | * This feature must be used when utilizing small fly capacitors | ||
| 143 | * (0402 or smaller). | ||
| 144 | * 0 = the charge pump automatically switches up and down in gain. | ||
| 145 | * This provides optimal efficiency, but is not suitable for driving | ||
| 146 | * loads that are not connected through the ADP8863 diode drivers. | ||
| 147 | * Additionally, the charge pump fly capacitors should be low ESR | ||
| 148 | * and sized 0603 or greater. | ||
| 149 | */ | ||
| 150 | |||
| 151 | u8 gdwn_dis; | ||
| 152 | }; | ||
| 153 | |||
| 154 | #endif /* __LINUX_I2C_ADP8860_H */ | ||
diff --git a/include/linux/i2c/max732x.h b/include/linux/i2c/max732x.h index e10336631c62..c04bac8bf2fe 100644 --- a/include/linux/i2c/max732x.h +++ b/include/linux/i2c/max732x.h | |||
| @@ -7,6 +7,9 @@ struct max732x_platform_data { | |||
| 7 | /* number of the first GPIO */ | 7 | /* number of the first GPIO */ |
| 8 | unsigned gpio_base; | 8 | unsigned gpio_base; |
| 9 | 9 | ||
| 10 | /* interrupt base */ | ||
| 11 | int irq_base; | ||
| 12 | |||
| 10 | void *context; /* param to setup/teardown */ | 13 | void *context; /* param to setup/teardown */ |
| 11 | 14 | ||
| 12 | int (*setup)(struct i2c_client *client, | 15 | int (*setup)(struct i2c_client *client, |
diff --git a/include/linux/i2c/pca953x.h b/include/linux/i2c/pca953x.h index d5c5a60c8a0b..139ba52667c8 100644 --- a/include/linux/i2c/pca953x.h +++ b/include/linux/i2c/pca953x.h | |||
| @@ -24,7 +24,7 @@ struct pca953x_platform_data { | |||
| 24 | int (*teardown)(struct i2c_client *client, | 24 | int (*teardown)(struct i2c_client *client, |
| 25 | unsigned gpio, unsigned ngpio, | 25 | unsigned gpio, unsigned ngpio, |
| 26 | void *context); | 26 | void *context); |
| 27 | char **names; | 27 | const char *const *names; |
| 28 | }; | 28 | }; |
| 29 | 29 | ||
| 30 | #endif /* _LINUX_PCA953X_H */ | 30 | #endif /* _LINUX_PCA953X_H */ |
diff --git a/include/linux/init.h b/include/linux/init.h index ab1d31f9352b..de994304e0bb 100644 --- a/include/linux/init.h +++ b/include/linux/init.h | |||
| @@ -301,7 +301,7 @@ void __init parse_early_options(char *cmdline); | |||
| 301 | #endif | 301 | #endif |
| 302 | 302 | ||
| 303 | /* Data marked not to be saved by software suspend */ | 303 | /* Data marked not to be saved by software suspend */ |
| 304 | #define __nosavedata __section(.data.nosave) | 304 | #define __nosavedata __section(.data..nosave) |
| 305 | 305 | ||
| 306 | /* This means "can be init if no module support, otherwise module load | 306 | /* This means "can be init if no module support, otherwise module load |
| 307 | may call it." */ | 307 | may call it." */ |
diff --git a/include/linux/init_task.h b/include/linux/init_task.h index 7996fc2c9ba9..1f43fa56f600 100644 --- a/include/linux/init_task.h +++ b/include/linux/init_task.h | |||
| @@ -16,7 +16,7 @@ extern struct files_struct init_files; | |||
| 16 | extern struct fs_struct init_fs; | 16 | extern struct fs_struct init_fs; |
| 17 | 17 | ||
| 18 | #define INIT_SIGNALS(sig) { \ | 18 | #define INIT_SIGNALS(sig) { \ |
| 19 | .count = ATOMIC_INIT(1), \ | 19 | .nr_threads = 1, \ |
| 20 | .wait_chldexit = __WAIT_QUEUE_HEAD_INITIALIZER(sig.wait_chldexit),\ | 20 | .wait_chldexit = __WAIT_QUEUE_HEAD_INITIALIZER(sig.wait_chldexit),\ |
| 21 | .shared_pending = { \ | 21 | .shared_pending = { \ |
| 22 | .list = LIST_HEAD_INIT(sig.shared_pending.list), \ | 22 | .list = LIST_HEAD_INIT(sig.shared_pending.list), \ |
| @@ -35,7 +35,7 @@ extern struct nsproxy init_nsproxy; | |||
| 35 | 35 | ||
| 36 | #define INIT_SIGHAND(sighand) { \ | 36 | #define INIT_SIGHAND(sighand) { \ |
| 37 | .count = ATOMIC_INIT(1), \ | 37 | .count = ATOMIC_INIT(1), \ |
| 38 | .action = { { { .sa_handler = NULL, } }, }, \ | 38 | .action = { { { .sa_handler = SIG_DFL, } }, }, \ |
| 39 | .siglock = __SPIN_LOCK_UNLOCKED(sighand.siglock), \ | 39 | .siglock = __SPIN_LOCK_UNLOCKED(sighand.siglock), \ |
| 40 | .signalfd_wqh = __WAIT_QUEUE_HEAD_INITIALIZER(sighand.signalfd_wqh), \ | 40 | .signalfd_wqh = __WAIT_QUEUE_HEAD_INITIALIZER(sighand.signalfd_wqh), \ |
| 41 | } | 41 | } |
| @@ -45,9 +45,9 @@ extern struct group_info init_groups; | |||
| 45 | #define INIT_STRUCT_PID { \ | 45 | #define INIT_STRUCT_PID { \ |
| 46 | .count = ATOMIC_INIT(1), \ | 46 | .count = ATOMIC_INIT(1), \ |
| 47 | .tasks = { \ | 47 | .tasks = { \ |
| 48 | { .first = &init_task.pids[PIDTYPE_PID].node }, \ | 48 | { .first = NULL }, \ |
| 49 | { .first = &init_task.pids[PIDTYPE_PGID].node }, \ | 49 | { .first = NULL }, \ |
| 50 | { .first = &init_task.pids[PIDTYPE_SID].node }, \ | 50 | { .first = NULL }, \ |
| 51 | }, \ | 51 | }, \ |
| 52 | .level = 0, \ | 52 | .level = 0, \ |
| 53 | .numbers = { { \ | 53 | .numbers = { { \ |
| @@ -61,7 +61,7 @@ extern struct group_info init_groups; | |||
| 61 | { \ | 61 | { \ |
| 62 | .node = { \ | 62 | .node = { \ |
| 63 | .next = NULL, \ | 63 | .next = NULL, \ |
| 64 | .pprev = &init_struct_pid.tasks[type].first, \ | 64 | .pprev = NULL, \ |
| 65 | }, \ | 65 | }, \ |
| 66 | .pid = &init_struct_pid, \ | 66 | .pid = &init_struct_pid, \ |
| 67 | } | 67 | } |
| @@ -163,6 +163,7 @@ extern struct cred init_cred; | |||
| 163 | [PIDTYPE_PGID] = INIT_PID_LINK(PIDTYPE_PGID), \ | 163 | [PIDTYPE_PGID] = INIT_PID_LINK(PIDTYPE_PGID), \ |
| 164 | [PIDTYPE_SID] = INIT_PID_LINK(PIDTYPE_SID), \ | 164 | [PIDTYPE_SID] = INIT_PID_LINK(PIDTYPE_SID), \ |
| 165 | }, \ | 165 | }, \ |
| 166 | .thread_group = LIST_HEAD_INIT(tsk.thread_group), \ | ||
| 166 | .dirties = INIT_PROP_LOCAL_SINGLE(dirties), \ | 167 | .dirties = INIT_PROP_LOCAL_SINGLE(dirties), \ |
| 167 | INIT_IDS \ | 168 | INIT_IDS \ |
| 168 | INIT_PERF_EVENTS(tsk) \ | 169 | INIT_PERF_EVENTS(tsk) \ |
| @@ -182,7 +183,7 @@ extern struct cred init_cred; | |||
| 182 | } | 183 | } |
| 183 | 184 | ||
| 184 | /* Attach to the init_task data structure for proper alignment */ | 185 | /* Attach to the init_task data structure for proper alignment */ |
| 185 | #define __init_task_data __attribute__((__section__(".data.init_task"))) | 186 | #define __init_task_data __attribute__((__section__(".data..init_task"))) |
| 186 | 187 | ||
| 187 | 188 | ||
| 188 | #endif | 189 | #endif |
diff --git a/include/linux/input.h b/include/linux/input.h index 83524e4f3290..6fcc9101beeb 100644 --- a/include/linux/input.h +++ b/include/linux/input.h | |||
| @@ -1155,7 +1155,7 @@ struct input_dev { | |||
| 1155 | 1155 | ||
| 1156 | int sync; | 1156 | int sync; |
| 1157 | 1157 | ||
| 1158 | int abs[ABS_MAX + 1]; | 1158 | int abs[ABS_CNT]; |
| 1159 | int rep[REP_MAX + 1]; | 1159 | int rep[REP_MAX + 1]; |
| 1160 | 1160 | ||
| 1161 | unsigned long key[BITS_TO_LONGS(KEY_CNT)]; | 1161 | unsigned long key[BITS_TO_LONGS(KEY_CNT)]; |
| @@ -1163,11 +1163,11 @@ struct input_dev { | |||
| 1163 | unsigned long snd[BITS_TO_LONGS(SND_CNT)]; | 1163 | unsigned long snd[BITS_TO_LONGS(SND_CNT)]; |
| 1164 | unsigned long sw[BITS_TO_LONGS(SW_CNT)]; | 1164 | unsigned long sw[BITS_TO_LONGS(SW_CNT)]; |
| 1165 | 1165 | ||
| 1166 | int absmax[ABS_MAX + 1]; | 1166 | int absmax[ABS_CNT]; |
| 1167 | int absmin[ABS_MAX + 1]; | 1167 | int absmin[ABS_CNT]; |
| 1168 | int absfuzz[ABS_MAX + 1]; | 1168 | int absfuzz[ABS_CNT]; |
| 1169 | int absflat[ABS_MAX + 1]; | 1169 | int absflat[ABS_CNT]; |
| 1170 | int absres[ABS_MAX + 1]; | 1170 | int absres[ABS_CNT]; |
| 1171 | 1171 | ||
| 1172 | int (*open)(struct input_dev *dev); | 1172 | int (*open)(struct input_dev *dev); |
| 1173 | void (*close)(struct input_dev *dev); | 1173 | void (*close)(struct input_dev *dev); |
diff --git a/include/linux/input/tps6507x-ts.h b/include/linux/input/tps6507x-ts.h new file mode 100644 index 000000000000..ab1440313924 --- /dev/null +++ b/include/linux/input/tps6507x-ts.h | |||
| @@ -0,0 +1,24 @@ | |||
| 1 | /* linux/i2c/tps6507x-ts.h | ||
| 2 | * | ||
| 3 | * Functions to access TPS65070 touch screen chip. | ||
| 4 | * | ||
| 5 | * Copyright (c) 2009 RidgeRun (todd.fischer@ridgerun.com) | ||
| 6 | * | ||
| 7 | * | ||
| 8 | * For licencing details see kernel-base/COPYING | ||
| 9 | */ | ||
| 10 | |||
| 11 | #ifndef __LINUX_I2C_TPS6507X_TS_H | ||
| 12 | #define __LINUX_I2C_TPS6507X_TS_H | ||
| 13 | |||
| 14 | /* Board specific touch screen initial values */ | ||
| 15 | struct touchscreen_init_data { | ||
| 16 | int poll_period; /* ms */ | ||
| 17 | int vref; /* non-zero to leave vref on */ | ||
| 18 | __u16 min_pressure; /* min reading to be treated as a touch */ | ||
| 19 | __u16 vendor; | ||
| 20 | __u16 product; | ||
| 21 | __u16 version; | ||
| 22 | }; | ||
| 23 | |||
| 24 | #endif /* __LINUX_I2C_TPS6507X_TS_H */ | ||
diff --git a/include/linux/iocontext.h b/include/linux/iocontext.h index a0bb301afac0..64d529133031 100644 --- a/include/linux/iocontext.h +++ b/include/linux/iocontext.h | |||
| @@ -7,7 +7,6 @@ | |||
| 7 | struct cfq_queue; | 7 | struct cfq_queue; |
| 8 | struct cfq_io_context { | 8 | struct cfq_io_context { |
| 9 | void *key; | 9 | void *key; |
| 10 | unsigned long dead_key; | ||
| 11 | 10 | ||
| 12 | struct cfq_queue *cfqq[2]; | 11 | struct cfq_queue *cfqq[2]; |
| 13 | 12 | ||
diff --git a/include/linux/joystick.h b/include/linux/joystick.h index 9e20c29c1e14..47199b13e0eb 100644 --- a/include/linux/joystick.h +++ b/include/linux/joystick.h | |||
| @@ -64,8 +64,8 @@ struct js_event { | |||
| 64 | #define JSIOCSCORR _IOW('j', 0x21, struct js_corr) /* set correction values */ | 64 | #define JSIOCSCORR _IOW('j', 0x21, struct js_corr) /* set correction values */ |
| 65 | #define JSIOCGCORR _IOR('j', 0x22, struct js_corr) /* get correction values */ | 65 | #define JSIOCGCORR _IOR('j', 0x22, struct js_corr) /* get correction values */ |
| 66 | 66 | ||
| 67 | #define JSIOCSAXMAP _IOW('j', 0x31, __u8[ABS_MAX + 1]) /* set axis mapping */ | 67 | #define JSIOCSAXMAP _IOW('j', 0x31, __u8[ABS_CNT]) /* set axis mapping */ |
| 68 | #define JSIOCGAXMAP _IOR('j', 0x32, __u8[ABS_MAX + 1]) /* get axis mapping */ | 68 | #define JSIOCGAXMAP _IOR('j', 0x32, __u8[ABS_CNT]) /* get axis mapping */ |
| 69 | #define JSIOCSBTNMAP _IOW('j', 0x33, __u16[KEY_MAX - BTN_MISC + 1]) /* set button mapping */ | 69 | #define JSIOCSBTNMAP _IOW('j', 0x33, __u16[KEY_MAX - BTN_MISC + 1]) /* set button mapping */ |
| 70 | #define JSIOCGBTNMAP _IOR('j', 0x34, __u16[KEY_MAX - BTN_MISC + 1]) /* get button mapping */ | 70 | #define JSIOCGBTNMAP _IOR('j', 0x34, __u16[KEY_MAX - BTN_MISC + 1]) /* get button mapping */ |
| 71 | 71 | ||
diff --git a/include/linux/kmod.h b/include/linux/kmod.h index facb27fe7de0..6efd7a78de6a 100644 --- a/include/linux/kmod.h +++ b/include/linux/kmod.h | |||
| @@ -23,6 +23,7 @@ | |||
| 23 | #include <linux/stddef.h> | 23 | #include <linux/stddef.h> |
| 24 | #include <linux/errno.h> | 24 | #include <linux/errno.h> |
| 25 | #include <linux/compiler.h> | 25 | #include <linux/compiler.h> |
| 26 | #include <linux/workqueue.h> | ||
| 26 | 27 | ||
| 27 | #define KMOD_PATH_LEN 256 | 28 | #define KMOD_PATH_LEN 256 |
| 28 | 29 | ||
| @@ -45,19 +46,6 @@ static inline int request_module_nowait(const char *name, ...) { return -ENOSYS; | |||
| 45 | 46 | ||
| 46 | struct key; | 47 | struct key; |
| 47 | struct file; | 48 | struct file; |
| 48 | struct subprocess_info; | ||
| 49 | |||
| 50 | /* Allocate a subprocess_info structure */ | ||
| 51 | struct subprocess_info *call_usermodehelper_setup(char *path, char **argv, | ||
| 52 | char **envp, gfp_t gfp_mask); | ||
| 53 | |||
| 54 | /* Set various pieces of state into the subprocess_info structure */ | ||
| 55 | void call_usermodehelper_setkeys(struct subprocess_info *info, | ||
| 56 | struct key *session_keyring); | ||
| 57 | int call_usermodehelper_stdinpipe(struct subprocess_info *sub_info, | ||
| 58 | struct file **filp); | ||
| 59 | void call_usermodehelper_setcleanup(struct subprocess_info *info, | ||
| 60 | void (*cleanup)(char **argv, char **envp)); | ||
| 61 | 49 | ||
| 62 | enum umh_wait { | 50 | enum umh_wait { |
| 63 | UMH_NO_WAIT = -1, /* don't wait at all */ | 51 | UMH_NO_WAIT = -1, /* don't wait at all */ |
| @@ -65,6 +53,29 @@ enum umh_wait { | |||
| 65 | UMH_WAIT_PROC = 1, /* wait for the process to complete */ | 53 | UMH_WAIT_PROC = 1, /* wait for the process to complete */ |
| 66 | }; | 54 | }; |
| 67 | 55 | ||
| 56 | struct subprocess_info { | ||
| 57 | struct work_struct work; | ||
| 58 | struct completion *complete; | ||
| 59 | char *path; | ||
| 60 | char **argv; | ||
| 61 | char **envp; | ||
| 62 | enum umh_wait wait; | ||
| 63 | int retval; | ||
| 64 | int (*init)(struct subprocess_info *info); | ||
| 65 | void (*cleanup)(struct subprocess_info *info); | ||
| 66 | void *data; | ||
| 67 | }; | ||
| 68 | |||
| 69 | /* Allocate a subprocess_info structure */ | ||
| 70 | struct subprocess_info *call_usermodehelper_setup(char *path, char **argv, | ||
| 71 | char **envp, gfp_t gfp_mask); | ||
| 72 | |||
| 73 | /* Set various pieces of state into the subprocess_info structure */ | ||
| 74 | void call_usermodehelper_setfns(struct subprocess_info *info, | ||
| 75 | int (*init)(struct subprocess_info *info), | ||
| 76 | void (*cleanup)(struct subprocess_info *info), | ||
| 77 | void *data); | ||
| 78 | |||
| 68 | /* Actually execute the sub-process */ | 79 | /* Actually execute the sub-process */ |
| 69 | int call_usermodehelper_exec(struct subprocess_info *info, enum umh_wait wait); | 80 | int call_usermodehelper_exec(struct subprocess_info *info, enum umh_wait wait); |
| 70 | 81 | ||
| @@ -73,38 +84,33 @@ int call_usermodehelper_exec(struct subprocess_info *info, enum umh_wait wait); | |||
| 73 | void call_usermodehelper_freeinfo(struct subprocess_info *info); | 84 | void call_usermodehelper_freeinfo(struct subprocess_info *info); |
| 74 | 85 | ||
| 75 | static inline int | 86 | static inline int |
| 76 | call_usermodehelper(char *path, char **argv, char **envp, enum umh_wait wait) | 87 | call_usermodehelper_fns(char *path, char **argv, char **envp, |
| 88 | enum umh_wait wait, | ||
| 89 | int (*init)(struct subprocess_info *info), | ||
| 90 | void (*cleanup)(struct subprocess_info *), void *data) | ||
| 77 | { | 91 | { |
| 78 | struct subprocess_info *info; | 92 | struct subprocess_info *info; |
| 79 | gfp_t gfp_mask = (wait == UMH_NO_WAIT) ? GFP_ATOMIC : GFP_KERNEL; | 93 | gfp_t gfp_mask = (wait == UMH_NO_WAIT) ? GFP_ATOMIC : GFP_KERNEL; |
| 80 | 94 | ||
| 81 | info = call_usermodehelper_setup(path, argv, envp, gfp_mask); | 95 | info = call_usermodehelper_setup(path, argv, envp, gfp_mask); |
| 96 | |||
| 82 | if (info == NULL) | 97 | if (info == NULL) |
| 83 | return -ENOMEM; | 98 | return -ENOMEM; |
| 99 | |||
| 100 | call_usermodehelper_setfns(info, init, cleanup, data); | ||
| 101 | |||
| 84 | return call_usermodehelper_exec(info, wait); | 102 | return call_usermodehelper_exec(info, wait); |
| 85 | } | 103 | } |
| 86 | 104 | ||
| 87 | static inline int | 105 | static inline int |
| 88 | call_usermodehelper_keys(char *path, char **argv, char **envp, | 106 | call_usermodehelper(char *path, char **argv, char **envp, enum umh_wait wait) |
| 89 | struct key *session_keyring, enum umh_wait wait) | ||
| 90 | { | 107 | { |
| 91 | struct subprocess_info *info; | 108 | return call_usermodehelper_fns(path, argv, envp, wait, |
| 92 | gfp_t gfp_mask = (wait == UMH_NO_WAIT) ? GFP_ATOMIC : GFP_KERNEL; | 109 | NULL, NULL, NULL); |
| 93 | |||
| 94 | info = call_usermodehelper_setup(path, argv, envp, gfp_mask); | ||
| 95 | if (info == NULL) | ||
| 96 | return -ENOMEM; | ||
| 97 | |||
| 98 | call_usermodehelper_setkeys(info, session_keyring); | ||
| 99 | return call_usermodehelper_exec(info, wait); | ||
| 100 | } | 110 | } |
| 101 | 111 | ||
| 102 | extern void usermodehelper_init(void); | 112 | extern void usermodehelper_init(void); |
| 103 | 113 | ||
| 104 | struct file; | ||
| 105 | extern int call_usermodehelper_pipe(char *path, char *argv[], char *envp[], | ||
| 106 | struct file **filp); | ||
| 107 | |||
| 108 | extern int usermodehelper_disable(void); | 114 | extern int usermodehelper_disable(void); |
| 109 | extern void usermodehelper_enable(void); | 115 | extern void usermodehelper_enable(void); |
| 110 | 116 | ||
diff --git a/include/linux/lcd.h b/include/linux/lcd.h index c67fecafff90..8877123f2d6e 100644 --- a/include/linux/lcd.h +++ b/include/linux/lcd.h | |||
| @@ -69,6 +69,29 @@ struct lcd_device { | |||
| 69 | struct device dev; | 69 | struct device dev; |
| 70 | }; | 70 | }; |
| 71 | 71 | ||
| 72 | struct lcd_platform_data { | ||
| 73 | /* reset lcd panel device. */ | ||
| 74 | int (*reset)(struct lcd_device *ld); | ||
| 75 | /* on or off to lcd panel. if 'enable' is 0 then | ||
| 76 | lcd power off and 1, lcd power on. */ | ||
| 77 | int (*power_on)(struct lcd_device *ld, int enable); | ||
| 78 | |||
| 79 | /* it indicates whether lcd panel was enabled | ||
| 80 | from bootloader or not. */ | ||
| 81 | int lcd_enabled; | ||
| 82 | /* it means delay for stable time when it becomes low to high | ||
| 83 | or high to low that is dependent on whether reset gpio is | ||
| 84 | low active or high active. */ | ||
| 85 | unsigned int reset_delay; | ||
| 86 | /* stable time needing to become lcd power on. */ | ||
| 87 | unsigned int power_on_delay; | ||
| 88 | /* stable time needing to become lcd power off. */ | ||
| 89 | unsigned int power_off_delay; | ||
| 90 | |||
| 91 | /* it could be used for any purpose. */ | ||
| 92 | void *pdata; | ||
| 93 | }; | ||
| 94 | |||
| 72 | static inline void lcd_set_power(struct lcd_device *ld, int power) | 95 | static inline void lcd_set_power(struct lcd_device *ld, int power) |
| 73 | { | 96 | { |
| 74 | mutex_lock(&ld->update_lock); | 97 | mutex_lock(&ld->update_lock); |
diff --git a/include/linux/leds.h b/include/linux/leds.h index d8bf9665e70c..ba6986a11663 100644 --- a/include/linux/leds.h +++ b/include/linux/leds.h | |||
| @@ -149,14 +149,18 @@ struct gpio_led { | |||
| 149 | unsigned default_state : 2; | 149 | unsigned default_state : 2; |
| 150 | /* default_state should be one of LEDS_GPIO_DEFSTATE_(ON|OFF|KEEP) */ | 150 | /* default_state should be one of LEDS_GPIO_DEFSTATE_(ON|OFF|KEEP) */ |
| 151 | }; | 151 | }; |
| 152 | #define LEDS_GPIO_DEFSTATE_OFF 0 | 152 | #define LEDS_GPIO_DEFSTATE_OFF 0 |
| 153 | #define LEDS_GPIO_DEFSTATE_ON 1 | 153 | #define LEDS_GPIO_DEFSTATE_ON 1 |
| 154 | #define LEDS_GPIO_DEFSTATE_KEEP 2 | 154 | #define LEDS_GPIO_DEFSTATE_KEEP 2 |
| 155 | 155 | ||
| 156 | struct gpio_led_platform_data { | 156 | struct gpio_led_platform_data { |
| 157 | int num_leds; | 157 | int num_leds; |
| 158 | struct gpio_led *leds; | 158 | struct gpio_led *leds; |
| 159 | int (*gpio_blink_set)(unsigned gpio, | 159 | |
| 160 | #define GPIO_LED_NO_BLINK_LOW 0 /* No blink GPIO state low */ | ||
| 161 | #define GPIO_LED_NO_BLINK_HIGH 1 /* No blink GPIO state high */ | ||
| 162 | #define GPIO_LED_BLINK 2 /* Plase, blink */ | ||
| 163 | int (*gpio_blink_set)(unsigned gpio, int state, | ||
| 160 | unsigned long *delay_on, | 164 | unsigned long *delay_on, |
| 161 | unsigned long *delay_off); | 165 | unsigned long *delay_off); |
| 162 | }; | 166 | }; |
diff --git a/include/linux/libata.h b/include/linux/libata.h index ee84e7e12039..b85f3ff34d7d 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h | |||
| @@ -386,6 +386,7 @@ enum { | |||
| 386 | ATA_HORKAGE_1_5_GBPS = (1 << 13), /* force 1.5 Gbps */ | 386 | ATA_HORKAGE_1_5_GBPS = (1 << 13), /* force 1.5 Gbps */ |
| 387 | ATA_HORKAGE_NOSETXFER = (1 << 14), /* skip SETXFER, SATA only */ | 387 | ATA_HORKAGE_NOSETXFER = (1 << 14), /* skip SETXFER, SATA only */ |
| 388 | ATA_HORKAGE_BROKEN_FPDMA_AA = (1 << 15), /* skip AA */ | 388 | ATA_HORKAGE_BROKEN_FPDMA_AA = (1 << 15), /* skip AA */ |
| 389 | ATA_HORKAGE_DUMP_ID = (1 << 16), /* dump IDENTIFY data */ | ||
| 389 | 390 | ||
| 390 | /* DMA mask for user DMA control: User visible values; DO NOT | 391 | /* DMA mask for user DMA control: User visible values; DO NOT |
| 391 | renumber */ | 392 | renumber */ |
| @@ -513,7 +514,9 @@ struct ata_ioports { | |||
| 513 | void __iomem *command_addr; | 514 | void __iomem *command_addr; |
| 514 | void __iomem *altstatus_addr; | 515 | void __iomem *altstatus_addr; |
| 515 | void __iomem *ctl_addr; | 516 | void __iomem *ctl_addr; |
| 517 | #ifdef CONFIG_ATA_BMDMA | ||
| 516 | void __iomem *bmdma_addr; | 518 | void __iomem *bmdma_addr; |
| 519 | #endif /* CONFIG_ATA_BMDMA */ | ||
| 517 | void __iomem *scr_addr; | 520 | void __iomem *scr_addr; |
| 518 | }; | 521 | }; |
| 519 | #endif /* CONFIG_ATA_SFF */ | 522 | #endif /* CONFIG_ATA_SFF */ |
| @@ -721,8 +724,10 @@ struct ata_port { | |||
| 721 | u8 ctl; /* cache of ATA control register */ | 724 | u8 ctl; /* cache of ATA control register */ |
| 722 | u8 last_ctl; /* Cache last written value */ | 725 | u8 last_ctl; /* Cache last written value */ |
| 723 | struct delayed_work sff_pio_task; | 726 | struct delayed_work sff_pio_task; |
| 727 | #ifdef CONFIG_ATA_BMDMA | ||
| 724 | struct ata_bmdma_prd *bmdma_prd; /* BMDMA SG list */ | 728 | struct ata_bmdma_prd *bmdma_prd; /* BMDMA SG list */ |
| 725 | dma_addr_t bmdma_prd_dma; /* and its DMA mapping */ | 729 | dma_addr_t bmdma_prd_dma; /* and its DMA mapping */ |
| 730 | #endif /* CONFIG_ATA_BMDMA */ | ||
| 726 | #endif /* CONFIG_ATA_SFF */ | 731 | #endif /* CONFIG_ATA_SFF */ |
| 727 | 732 | ||
| 728 | unsigned int pio_mask; | 733 | unsigned int pio_mask; |
| @@ -856,10 +861,12 @@ struct ata_port_operations { | |||
| 856 | void (*sff_irq_clear)(struct ata_port *); | 861 | void (*sff_irq_clear)(struct ata_port *); |
| 857 | void (*sff_drain_fifo)(struct ata_queued_cmd *qc); | 862 | void (*sff_drain_fifo)(struct ata_queued_cmd *qc); |
| 858 | 863 | ||
| 864 | #ifdef CONFIG_ATA_BMDMA | ||
| 859 | void (*bmdma_setup)(struct ata_queued_cmd *qc); | 865 | void (*bmdma_setup)(struct ata_queued_cmd *qc); |
| 860 | void (*bmdma_start)(struct ata_queued_cmd *qc); | 866 | void (*bmdma_start)(struct ata_queued_cmd *qc); |
| 861 | void (*bmdma_stop)(struct ata_queued_cmd *qc); | 867 | void (*bmdma_stop)(struct ata_queued_cmd *qc); |
| 862 | u8 (*bmdma_status)(struct ata_port *ap); | 868 | u8 (*bmdma_status)(struct ata_port *ap); |
| 869 | #endif /* CONFIG_ATA_BMDMA */ | ||
| 863 | #endif /* CONFIG_ATA_SFF */ | 870 | #endif /* CONFIG_ATA_SFF */ |
| 864 | 871 | ||
| 865 | ssize_t (*em_show)(struct ata_port *ap, char *buf); | 872 | ssize_t (*em_show)(struct ata_port *ap, char *buf); |
| @@ -1016,6 +1023,7 @@ extern void ata_scsi_simulate(struct ata_device *dev, struct scsi_cmnd *cmd, | |||
| 1016 | extern int ata_std_bios_param(struct scsi_device *sdev, | 1023 | extern int ata_std_bios_param(struct scsi_device *sdev, |
| 1017 | struct block_device *bdev, | 1024 | struct block_device *bdev, |
| 1018 | sector_t capacity, int geom[]); | 1025 | sector_t capacity, int geom[]); |
| 1026 | extern void ata_scsi_unlock_native_capacity(struct scsi_device *sdev); | ||
| 1019 | extern int ata_scsi_slave_config(struct scsi_device *sdev); | 1027 | extern int ata_scsi_slave_config(struct scsi_device *sdev); |
| 1020 | extern void ata_scsi_slave_destroy(struct scsi_device *sdev); | 1028 | extern void ata_scsi_slave_destroy(struct scsi_device *sdev); |
| 1021 | extern int ata_scsi_change_queue_depth(struct scsi_device *sdev, | 1029 | extern int ata_scsi_change_queue_depth(struct scsi_device *sdev, |
| @@ -1167,6 +1175,7 @@ extern struct device_attribute *ata_common_sdev_attrs[]; | |||
| 1167 | .slave_configure = ata_scsi_slave_config, \ | 1175 | .slave_configure = ata_scsi_slave_config, \ |
| 1168 | .slave_destroy = ata_scsi_slave_destroy, \ | 1176 | .slave_destroy = ata_scsi_slave_destroy, \ |
| 1169 | .bios_param = ata_std_bios_param, \ | 1177 | .bios_param = ata_std_bios_param, \ |
| 1178 | .unlock_native_capacity = ata_scsi_unlock_native_capacity, \ | ||
| 1170 | .sdev_attrs = ata_common_sdev_attrs | 1179 | .sdev_attrs = ata_common_sdev_attrs |
| 1171 | 1180 | ||
| 1172 | #define ATA_NCQ_SHT(drv_name) \ | 1181 | #define ATA_NCQ_SHT(drv_name) \ |
| @@ -1555,7 +1564,6 @@ extern void sata_pmp_error_handler(struct ata_port *ap); | |||
| 1555 | #ifdef CONFIG_ATA_SFF | 1564 | #ifdef CONFIG_ATA_SFF |
| 1556 | 1565 | ||
| 1557 | extern const struct ata_port_operations ata_sff_port_ops; | 1566 | extern const struct ata_port_operations ata_sff_port_ops; |
| 1558 | extern const struct ata_port_operations ata_bmdma_port_ops; | ||
| 1559 | extern const struct ata_port_operations ata_bmdma32_port_ops; | 1567 | extern const struct ata_port_operations ata_bmdma32_port_ops; |
| 1560 | 1568 | ||
| 1561 | /* PIO only, sg_tablesize and dma_boundary limits can be removed */ | 1569 | /* PIO only, sg_tablesize and dma_boundary limits can be removed */ |
| @@ -1564,11 +1572,6 @@ extern const struct ata_port_operations ata_bmdma32_port_ops; | |||
| 1564 | .sg_tablesize = LIBATA_MAX_PRD, \ | 1572 | .sg_tablesize = LIBATA_MAX_PRD, \ |
| 1565 | .dma_boundary = ATA_DMA_BOUNDARY | 1573 | .dma_boundary = ATA_DMA_BOUNDARY |
| 1566 | 1574 | ||
| 1567 | #define ATA_BMDMA_SHT(drv_name) \ | ||
| 1568 | ATA_BASE_SHT(drv_name), \ | ||
| 1569 | .sg_tablesize = LIBATA_MAX_PRD, \ | ||
| 1570 | .dma_boundary = ATA_DMA_BOUNDARY | ||
| 1571 | |||
| 1572 | extern void ata_sff_dev_select(struct ata_port *ap, unsigned int device); | 1575 | extern void ata_sff_dev_select(struct ata_port *ap, unsigned int device); |
| 1573 | extern u8 ata_sff_check_status(struct ata_port *ap); | 1576 | extern u8 ata_sff_check_status(struct ata_port *ap); |
| 1574 | extern void ata_sff_pause(struct ata_port *ap); | 1577 | extern void ata_sff_pause(struct ata_port *ap); |
| @@ -1593,7 +1596,7 @@ extern int ata_sff_hsm_move(struct ata_port *ap, struct ata_queued_cmd *qc, | |||
| 1593 | extern void ata_sff_queue_pio_task(struct ata_port *ap, unsigned long delay); | 1596 | extern void ata_sff_queue_pio_task(struct ata_port *ap, unsigned long delay); |
| 1594 | extern unsigned int ata_sff_qc_issue(struct ata_queued_cmd *qc); | 1597 | extern unsigned int ata_sff_qc_issue(struct ata_queued_cmd *qc); |
| 1595 | extern bool ata_sff_qc_fill_rtf(struct ata_queued_cmd *qc); | 1598 | extern bool ata_sff_qc_fill_rtf(struct ata_queued_cmd *qc); |
| 1596 | extern unsigned int ata_sff_host_intr(struct ata_port *ap, | 1599 | extern unsigned int ata_sff_port_intr(struct ata_port *ap, |
| 1597 | struct ata_queued_cmd *qc); | 1600 | struct ata_queued_cmd *qc); |
| 1598 | extern irqreturn_t ata_sff_interrupt(int irq, void *dev_instance); | 1601 | extern irqreturn_t ata_sff_interrupt(int irq, void *dev_instance); |
| 1599 | extern void ata_sff_lost_interrupt(struct ata_port *ap); | 1602 | extern void ata_sff_lost_interrupt(struct ata_port *ap); |
| @@ -1625,11 +1628,24 @@ extern int ata_pci_sff_init_one(struct pci_dev *pdev, | |||
| 1625 | struct scsi_host_template *sht, void *host_priv, int hflags); | 1628 | struct scsi_host_template *sht, void *host_priv, int hflags); |
| 1626 | #endif /* CONFIG_PCI */ | 1629 | #endif /* CONFIG_PCI */ |
| 1627 | 1630 | ||
| 1631 | #ifdef CONFIG_ATA_BMDMA | ||
| 1632 | |||
| 1633 | extern const struct ata_port_operations ata_bmdma_port_ops; | ||
| 1634 | |||
| 1635 | #define ATA_BMDMA_SHT(drv_name) \ | ||
| 1636 | ATA_BASE_SHT(drv_name), \ | ||
| 1637 | .sg_tablesize = LIBATA_MAX_PRD, \ | ||
| 1638 | .dma_boundary = ATA_DMA_BOUNDARY | ||
| 1639 | |||
| 1628 | extern void ata_bmdma_qc_prep(struct ata_queued_cmd *qc); | 1640 | extern void ata_bmdma_qc_prep(struct ata_queued_cmd *qc); |
| 1629 | extern unsigned int ata_bmdma_qc_issue(struct ata_queued_cmd *qc); | 1641 | extern unsigned int ata_bmdma_qc_issue(struct ata_queued_cmd *qc); |
| 1630 | extern void ata_bmdma_dumb_qc_prep(struct ata_queued_cmd *qc); | 1642 | extern void ata_bmdma_dumb_qc_prep(struct ata_queued_cmd *qc); |
| 1643 | extern unsigned int ata_bmdma_port_intr(struct ata_port *ap, | ||
| 1644 | struct ata_queued_cmd *qc); | ||
| 1645 | extern irqreturn_t ata_bmdma_interrupt(int irq, void *dev_instance); | ||
| 1631 | extern void ata_bmdma_error_handler(struct ata_port *ap); | 1646 | extern void ata_bmdma_error_handler(struct ata_port *ap); |
| 1632 | extern void ata_bmdma_post_internal_cmd(struct ata_queued_cmd *qc); | 1647 | extern void ata_bmdma_post_internal_cmd(struct ata_queued_cmd *qc); |
| 1648 | extern void ata_bmdma_irq_clear(struct ata_port *ap); | ||
| 1633 | extern void ata_bmdma_setup(struct ata_queued_cmd *qc); | 1649 | extern void ata_bmdma_setup(struct ata_queued_cmd *qc); |
| 1634 | extern void ata_bmdma_start(struct ata_queued_cmd *qc); | 1650 | extern void ata_bmdma_start(struct ata_queued_cmd *qc); |
| 1635 | extern void ata_bmdma_stop(struct ata_queued_cmd *qc); | 1651 | extern void ata_bmdma_stop(struct ata_queued_cmd *qc); |
| @@ -1640,7 +1656,15 @@ extern int ata_bmdma_port_start32(struct ata_port *ap); | |||
| 1640 | #ifdef CONFIG_PCI | 1656 | #ifdef CONFIG_PCI |
| 1641 | extern int ata_pci_bmdma_clear_simplex(struct pci_dev *pdev); | 1657 | extern int ata_pci_bmdma_clear_simplex(struct pci_dev *pdev); |
| 1642 | extern void ata_pci_bmdma_init(struct ata_host *host); | 1658 | extern void ata_pci_bmdma_init(struct ata_host *host); |
| 1659 | extern int ata_pci_bmdma_prepare_host(struct pci_dev *pdev, | ||
| 1660 | const struct ata_port_info * const * ppi, | ||
| 1661 | struct ata_host **r_host); | ||
| 1662 | extern int ata_pci_bmdma_init_one(struct pci_dev *pdev, | ||
| 1663 | const struct ata_port_info * const * ppi, | ||
| 1664 | struct scsi_host_template *sht, | ||
| 1665 | void *host_priv, int hflags); | ||
| 1643 | #endif /* CONFIG_PCI */ | 1666 | #endif /* CONFIG_PCI */ |
| 1667 | #endif /* CONFIG_ATA_BMDMA */ | ||
| 1644 | 1668 | ||
| 1645 | /** | 1669 | /** |
| 1646 | * ata_sff_busy_wait - Wait for a port status register | 1670 | * ata_sff_busy_wait - Wait for a port status register |
diff --git a/include/linux/linkage.h b/include/linux/linkage.h index 5126cceb6ae9..7135ebc8428c 100644 --- a/include/linux/linkage.h +++ b/include/linux/linkage.h | |||
| @@ -18,8 +18,8 @@ | |||
| 18 | # define asmregparm | 18 | # define asmregparm |
| 19 | #endif | 19 | #endif |
| 20 | 20 | ||
| 21 | #define __page_aligned_data __section(.data.page_aligned) __aligned(PAGE_SIZE) | 21 | #define __page_aligned_data __section(.data..page_aligned) __aligned(PAGE_SIZE) |
| 22 | #define __page_aligned_bss __section(.bss.page_aligned) __aligned(PAGE_SIZE) | 22 | #define __page_aligned_bss __section(.bss..page_aligned) __aligned(PAGE_SIZE) |
| 23 | 23 | ||
| 24 | /* | 24 | /* |
| 25 | * For assembly routines. | 25 | * For assembly routines. |
| @@ -27,8 +27,8 @@ | |||
| 27 | * Note when using these that you must specify the appropriate | 27 | * Note when using these that you must specify the appropriate |
| 28 | * alignment directives yourself | 28 | * alignment directives yourself |
| 29 | */ | 29 | */ |
| 30 | #define __PAGE_ALIGNED_DATA .section ".data.page_aligned", "aw" | 30 | #define __PAGE_ALIGNED_DATA .section ".data..page_aligned", "aw" |
| 31 | #define __PAGE_ALIGNED_BSS .section ".bss.page_aligned", "aw" | 31 | #define __PAGE_ALIGNED_BSS .section ".bss..page_aligned", "aw" |
| 32 | 32 | ||
| 33 | /* | 33 | /* |
| 34 | * This is used by architectures to keep arguments on the stack | 34 | * This is used by architectures to keep arguments on the stack |
diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 05894795fdc1..9411d32840b0 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h | |||
| @@ -90,7 +90,8 @@ int mm_match_cgroup(const struct mm_struct *mm, const struct mem_cgroup *cgroup) | |||
| 90 | extern struct cgroup_subsys_state *mem_cgroup_css(struct mem_cgroup *mem); | 90 | extern struct cgroup_subsys_state *mem_cgroup_css(struct mem_cgroup *mem); |
| 91 | 91 | ||
| 92 | extern int | 92 | extern int |
| 93 | mem_cgroup_prepare_migration(struct page *page, struct mem_cgroup **ptr); | 93 | mem_cgroup_prepare_migration(struct page *page, |
| 94 | struct page *newpage, struct mem_cgroup **ptr); | ||
| 94 | extern void mem_cgroup_end_migration(struct mem_cgroup *mem, | 95 | extern void mem_cgroup_end_migration(struct mem_cgroup *mem, |
| 95 | struct page *oldpage, struct page *newpage); | 96 | struct page *oldpage, struct page *newpage); |
| 96 | 97 | ||
| @@ -227,7 +228,8 @@ static inline struct cgroup_subsys_state *mem_cgroup_css(struct mem_cgroup *mem) | |||
| 227 | } | 228 | } |
| 228 | 229 | ||
| 229 | static inline int | 230 | static inline int |
| 230 | mem_cgroup_prepare_migration(struct page *page, struct mem_cgroup **ptr) | 231 | mem_cgroup_prepare_migration(struct page *page, struct page *newpage, |
| 232 | struct mem_cgroup **ptr) | ||
| 231 | { | 233 | { |
| 232 | return 0; | 234 | return 0; |
| 233 | } | 235 | } |
diff --git a/include/linux/mfd/88pm860x.h b/include/linux/mfd/88pm860x.h index e3c4ff8c3e38..bfd23bef7363 100644 --- a/include/linux/mfd/88pm860x.h +++ b/include/linux/mfd/88pm860x.h | |||
| @@ -370,7 +370,7 @@ extern int pm860x_set_bits(struct i2c_client *, int, unsigned char, | |||
| 370 | unsigned char); | 370 | unsigned char); |
| 371 | 371 | ||
| 372 | extern int pm860x_device_init(struct pm860x_chip *chip, | 372 | extern int pm860x_device_init(struct pm860x_chip *chip, |
| 373 | struct pm860x_platform_data *pdata); | 373 | struct pm860x_platform_data *pdata) __devinit ; |
| 374 | extern void pm860x_device_exit(struct pm860x_chip *chip); | 374 | extern void pm860x_device_exit(struct pm860x_chip *chip) __devexit ; |
| 375 | 375 | ||
| 376 | #endif /* __LINUX_MFD_88PM860X_H */ | 376 | #endif /* __LINUX_MFD_88PM860X_H */ |
diff --git a/include/linux/mfd/ab4500.h b/include/linux/mfd/ab4500.h deleted file mode 100644 index a42a7033ae53..000000000000 --- a/include/linux/mfd/ab4500.h +++ /dev/null | |||
| @@ -1,262 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2009 ST-Ericsson | ||
| 3 | * | ||
| 4 | * Author: Srinidhi KASAGAR <srinidhi.kasagar@stericsson.com> | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License version 2, as | ||
| 8 | * published by the Free Software Foundation. | ||
| 9 | * | ||
| 10 | * AB4500 device core funtions, for client access | ||
| 11 | */ | ||
| 12 | #ifndef MFD_AB4500_H | ||
| 13 | #define MFD_AB4500_H | ||
| 14 | |||
| 15 | #include <linux/device.h> | ||
| 16 | |||
| 17 | /* | ||
| 18 | * AB4500 bank addresses | ||
| 19 | */ | ||
| 20 | #define AB4500_SYS_CTRL1_BLOCK 0x1 | ||
| 21 | #define AB4500_SYS_CTRL2_BLOCK 0x2 | ||
| 22 | #define AB4500_REGU_CTRL1 0x3 | ||
| 23 | #define AB4500_REGU_CTRL2 0x4 | ||
| 24 | #define AB4500_USB 0x5 | ||
| 25 | #define AB4500_TVOUT 0x6 | ||
| 26 | #define AB4500_DBI 0x7 | ||
| 27 | #define AB4500_ECI_AV_ACC 0x8 | ||
| 28 | #define AB4500_RESERVED 0x9 | ||
| 29 | #define AB4500_GPADC 0xA | ||
| 30 | #define AB4500_CHARGER 0xB | ||
| 31 | #define AB4500_GAS_GAUGE 0xC | ||
| 32 | #define AB4500_AUDIO 0xD | ||
| 33 | #define AB4500_INTERRUPT 0xE | ||
| 34 | #define AB4500_RTC 0xF | ||
| 35 | #define AB4500_MISC 0x10 | ||
| 36 | #define AB4500_DEBUG 0x12 | ||
| 37 | #define AB4500_PROD_TEST 0x13 | ||
| 38 | #define AB4500_OTP_EMUL 0x15 | ||
| 39 | |||
| 40 | /* | ||
| 41 | * System control 1 register offsets. | ||
| 42 | * Bank = 0x01 | ||
| 43 | */ | ||
| 44 | #define AB4500_TURNON_STAT_REG 0x0100 | ||
| 45 | #define AB4500_RESET_STAT_REG 0x0101 | ||
| 46 | #define AB4500_PONKEY1_PRESS_STAT_REG 0x0102 | ||
| 47 | |||
| 48 | #define AB4500_FSM_STAT1_REG 0x0140 | ||
| 49 | #define AB4500_FSM_STAT2_REG 0x0141 | ||
| 50 | #define AB4500_SYSCLK_REQ_STAT_REG 0x0142 | ||
| 51 | #define AB4500_USB_STAT1_REG 0x0143 | ||
| 52 | #define AB4500_USB_STAT2_REG 0x0144 | ||
| 53 | #define AB4500_STATUS_SPARE1_REG 0x0145 | ||
| 54 | #define AB4500_STATUS_SPARE2_REG 0x0146 | ||
| 55 | |||
| 56 | #define AB4500_CTRL1_REG 0x0180 | ||
| 57 | #define AB4500_CTRL2_REG 0x0181 | ||
| 58 | |||
| 59 | /* | ||
| 60 | * System control 2 register offsets. | ||
| 61 | * bank = 0x02 | ||
| 62 | */ | ||
| 63 | #define AB4500_CTRL3_REG 0x0200 | ||
| 64 | #define AB4500_MAIN_WDOG_CTRL_REG 0x0201 | ||
| 65 | #define AB4500_MAIN_WDOG_TIMER_REG 0x0202 | ||
| 66 | #define AB4500_LOW_BAT_REG 0x0203 | ||
| 67 | #define AB4500_BATT_OK_REG 0x0204 | ||
| 68 | #define AB4500_SYSCLK_TIMER_REG 0x0205 | ||
| 69 | #define AB4500_SMPSCLK_CTRL_REG 0x0206 | ||
| 70 | #define AB4500_SMPSCLK_SEL1_REG 0x0207 | ||
| 71 | #define AB4500_SMPSCLK_SEL2_REG 0x0208 | ||
| 72 | #define AB4500_SMPSCLK_SEL3_REG 0x0209 | ||
| 73 | #define AB4500_SYSULPCLK_CONF_REG 0x020A | ||
| 74 | #define AB4500_SYSULPCLK_CTRL1_REG 0x020B | ||
| 75 | #define AB4500_SYSCLK_CTRL_REG 0x020C | ||
| 76 | #define AB4500_SYSCLK_REQ1_VALID_REG 0x020D | ||
| 77 | #define AB4500_SYSCLK_REQ_VALID_REG 0x020E | ||
| 78 | #define AB4500_SYSCTRL_SPARE_REG 0x020F | ||
| 79 | #define AB4500_PAD_CONF_REG 0x0210 | ||
| 80 | |||
| 81 | /* | ||
| 82 | * Regu control1 register offsets | ||
| 83 | * Bank = 0x03 | ||
| 84 | */ | ||
| 85 | #define AB4500_REGU_SERIAL_CTRL1_REG 0x0300 | ||
| 86 | #define AB4500_REGU_SERIAL_CTRL2_REG 0x0301 | ||
| 87 | #define AB4500_REGU_SERIAL_CTRL3_REG 0x0302 | ||
| 88 | #define AB4500_REGU_REQ_CTRL1_REG 0x0303 | ||
| 89 | #define AB4500_REGU_REQ_CTRL2_REG 0x0304 | ||
| 90 | #define AB4500_REGU_REQ_CTRL3_REG 0x0305 | ||
| 91 | #define AB4500_REGU_REQ_CTRL4_REG 0x0306 | ||
| 92 | #define AB4500_REGU_MISC1_REG 0x0380 | ||
| 93 | #define AB4500_REGU_OTGSUPPLY_CTRL_REG 0x0381 | ||
| 94 | #define AB4500_REGU_VUSB_CTRL_REG 0x0382 | ||
| 95 | #define AB4500_REGU_VAUDIO_SUPPLY_REG 0x0383 | ||
| 96 | #define AB4500_REGU_CTRL1_SPARE_REG 0x0384 | ||
| 97 | |||
| 98 | /* | ||
| 99 | * Regu control2 Vmod register offsets | ||
| 100 | */ | ||
| 101 | #define AB4500_REGU_VMOD_REGU_REG 0x0440 | ||
| 102 | #define AB4500_REGU_VMOD_SEL1_REG 0x0441 | ||
| 103 | #define AB4500_REGU_VMOD_SEL2_REG 0x0442 | ||
| 104 | #define AB4500_REGU_CTRL_DISCH_REG 0x0443 | ||
| 105 | #define AB4500_REGU_CTRL_DISCH2_REG 0x0444 | ||
| 106 | |||
| 107 | /* | ||
| 108 | * USB/ULPI register offsets | ||
| 109 | * Bank : 0x5 | ||
| 110 | */ | ||
| 111 | #define AB4500_USB_LINE_STAT_REG 0x0580 | ||
| 112 | #define AB4500_USB_LINE_CTRL1_REG 0x0581 | ||
| 113 | #define AB4500_USB_LINE_CTRL2_REG 0x0582 | ||
| 114 | #define AB4500_USB_LINE_CTRL3_REG 0x0583 | ||
| 115 | #define AB4500_USB_LINE_CTRL4_REG 0x0584 | ||
| 116 | #define AB4500_USB_LINE_CTRL5_REG 0x0585 | ||
| 117 | #define AB4500_USB_OTG_CTRL_REG 0x0587 | ||
| 118 | #define AB4500_USB_OTG_STAT_REG 0x0588 | ||
| 119 | #define AB4500_USB_OTG_STAT_REG 0x0588 | ||
| 120 | #define AB4500_USB_CTRL_SPARE_REG 0x0589 | ||
| 121 | #define AB4500_USB_PHY_CTRL_REG 0x058A | ||
| 122 | |||
| 123 | /* | ||
| 124 | * TVOUT / CTRL register offsets | ||
| 125 | * Bank : 0x06 | ||
| 126 | */ | ||
| 127 | #define AB4500_TVOUT_CTRL_REG 0x0680 | ||
| 128 | |||
| 129 | /* | ||
| 130 | * DBI register offsets | ||
| 131 | * Bank : 0x07 | ||
| 132 | */ | ||
| 133 | #define AB4500_DBI_REG1_REG 0x0700 | ||
| 134 | #define AB4500_DBI_REG2_REG 0x0701 | ||
| 135 | |||
| 136 | /* | ||
| 137 | * ECI regsiter offsets | ||
| 138 | * Bank : 0x08 | ||
| 139 | */ | ||
| 140 | #define AB4500_ECI_CTRL_REG 0x0800 | ||
| 141 | #define AB4500_ECI_HOOKLEVEL_REG 0x0801 | ||
| 142 | #define AB4500_ECI_DATAOUT_REG 0x0802 | ||
| 143 | #define AB4500_ECI_DATAIN_REG 0x0803 | ||
| 144 | |||
| 145 | /* | ||
| 146 | * AV Connector register offsets | ||
| 147 | * Bank : 0x08 | ||
| 148 | */ | ||
| 149 | #define AB4500_AV_CONN_REG 0x0840 | ||
| 150 | |||
| 151 | /* | ||
| 152 | * Accessory detection register offsets | ||
| 153 | * Bank : 0x08 | ||
| 154 | */ | ||
| 155 | #define AB4500_ACC_DET_DB1_REG 0x0880 | ||
| 156 | #define AB4500_ACC_DET_DB2_REG 0x0881 | ||
| 157 | |||
| 158 | /* | ||
| 159 | * GPADC register offsets | ||
| 160 | * Bank : 0x0A | ||
| 161 | */ | ||
| 162 | #define AB4500_GPADC_CTRL1_REG 0x0A00 | ||
| 163 | #define AB4500_GPADC_CTRL2_REG 0x0A01 | ||
| 164 | #define AB4500_GPADC_CTRL3_REG 0x0A02 | ||
| 165 | #define AB4500_GPADC_AUTO_TIMER_REG 0x0A03 | ||
| 166 | #define AB4500_GPADC_STAT_REG 0x0A04 | ||
| 167 | #define AB4500_GPADC_MANDATAL_REG 0x0A05 | ||
| 168 | #define AB4500_GPADC_MANDATAH_REG 0x0A06 | ||
| 169 | #define AB4500_GPADC_AUTODATAL_REG 0x0A07 | ||
| 170 | #define AB4500_GPADC_AUTODATAH_REG 0x0A08 | ||
| 171 | #define AB4500_GPADC_MUX_CTRL_REG 0x0A09 | ||
| 172 | |||
| 173 | /* | ||
| 174 | * Charger / status register offfsets | ||
| 175 | * Bank : 0x0B | ||
| 176 | */ | ||
| 177 | #define AB4500_CH_STATUS1_REG 0x0B00 | ||
| 178 | #define AB4500_CH_STATUS2_REG 0x0B01 | ||
| 179 | #define AB4500_CH_USBCH_STAT1_REG 0x0B02 | ||
| 180 | #define AB4500_CH_USBCH_STAT2_REG 0x0B03 | ||
| 181 | #define AB4500_CH_FSM_STAT_REG 0x0B04 | ||
| 182 | #define AB4500_CH_STAT_REG 0x0B05 | ||
| 183 | |||
| 184 | /* | ||
| 185 | * Charger / control register offfsets | ||
| 186 | * Bank : 0x0B | ||
| 187 | */ | ||
| 188 | #define AB4500_CH_VOLT_LVL_REG 0x0B40 | ||
| 189 | |||
| 190 | /* | ||
| 191 | * Charger / main control register offfsets | ||
| 192 | * Bank : 0x0B | ||
| 193 | */ | ||
| 194 | #define AB4500_MCH_CTRL1 0x0B80 | ||
| 195 | #define AB4500_MCH_CTRL2 0x0B81 | ||
| 196 | #define AB4500_MCH_IPT_CURLVL_REG 0x0B82 | ||
| 197 | #define AB4500_CH_WD_REG 0x0B83 | ||
| 198 | |||
| 199 | /* | ||
| 200 | * Charger / USB control register offsets | ||
| 201 | * Bank : 0x0B | ||
| 202 | */ | ||
| 203 | #define AB4500_USBCH_CTRL1_REG 0x0BC0 | ||
| 204 | #define AB4500_USBCH_CTRL2_REG 0x0BC1 | ||
| 205 | #define AB4500_USBCH_IPT_CRNTLVL_REG 0x0BC2 | ||
| 206 | |||
| 207 | /* | ||
| 208 | * RTC bank register offsets | ||
| 209 | * Bank : 0xF | ||
| 210 | */ | ||
| 211 | #define AB4500_RTC_SOFF_STAT_REG 0x0F00 | ||
| 212 | #define AB4500_RTC_CC_CONF_REG 0x0F01 | ||
| 213 | #define AB4500_RTC_READ_REQ_REG 0x0F02 | ||
| 214 | #define AB4500_RTC_WATCH_TSECMID_REG 0x0F03 | ||
| 215 | #define AB4500_RTC_WATCH_TSECHI_REG 0x0F04 | ||
| 216 | #define AB4500_RTC_WATCH_TMIN_LOW_REG 0x0F05 | ||
| 217 | #define AB4500_RTC_WATCH_TMIN_MID_REG 0x0F06 | ||
| 218 | #define AB4500_RTC_WATCH_TMIN_HI_REG 0x0F07 | ||
| 219 | #define AB4500_RTC_ALRM_MIN_LOW_REG 0x0F08 | ||
| 220 | #define AB4500_RTC_ALRM_MIN_MID_REG 0x0F09 | ||
| 221 | #define AB4500_RTC_ALRM_MIN_HI_REG 0x0F0A | ||
| 222 | #define AB4500_RTC_STAT_REG 0x0F0B | ||
| 223 | #define AB4500_RTC_BKUP_CHG_REG 0x0F0C | ||
| 224 | #define AB4500_RTC_FORCE_BKUP_REG 0x0F0D | ||
| 225 | #define AB4500_RTC_CALIB_REG 0x0F0E | ||
| 226 | #define AB4500_RTC_SWITCH_STAT_REG 0x0F0F | ||
| 227 | |||
| 228 | /* | ||
| 229 | * PWM Out generators | ||
| 230 | * Bank: 0x10 | ||
| 231 | */ | ||
| 232 | #define AB4500_PWM_OUT_CTRL1_REG 0x1060 | ||
| 233 | #define AB4500_PWM_OUT_CTRL2_REG 0x1061 | ||
| 234 | #define AB4500_PWM_OUT_CTRL3_REG 0x1062 | ||
| 235 | #define AB4500_PWM_OUT_CTRL4_REG 0x1063 | ||
| 236 | #define AB4500_PWM_OUT_CTRL5_REG 0x1064 | ||
| 237 | #define AB4500_PWM_OUT_CTRL6_REG 0x1065 | ||
| 238 | #define AB4500_PWM_OUT_CTRL7_REG 0x1066 | ||
| 239 | |||
| 240 | #define AB4500_I2C_PAD_CTRL_REG 0x1067 | ||
| 241 | #define AB4500_REV_REG 0x1080 | ||
| 242 | |||
| 243 | /** | ||
| 244 | * struct ab4500 | ||
| 245 | * @spi: spi device structure | ||
| 246 | * @tx_buf: transmit buffer | ||
| 247 | * @rx_buf: receive buffer | ||
| 248 | * @lock: sync primitive | ||
| 249 | */ | ||
| 250 | struct ab4500 { | ||
| 251 | struct spi_device *spi; | ||
| 252 | unsigned long tx_buf[4]; | ||
| 253 | unsigned long rx_buf[4]; | ||
| 254 | struct mutex lock; | ||
| 255 | }; | ||
| 256 | |||
| 257 | int ab4500_write(struct ab4500 *ab4500, unsigned char block, | ||
| 258 | unsigned long addr, unsigned char data); | ||
| 259 | int ab4500_read(struct ab4500 *ab4500, unsigned char block, | ||
| 260 | unsigned long addr); | ||
| 261 | |||
| 262 | #endif /* MFD_AB4500_H */ | ||
diff --git a/include/linux/mfd/ab8500.h b/include/linux/mfd/ab8500.h new file mode 100644 index 000000000000..b63ff3ba3351 --- /dev/null +++ b/include/linux/mfd/ab8500.h | |||
| @@ -0,0 +1,128 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) ST-Ericsson SA 2010 | ||
| 3 | * | ||
| 4 | * License Terms: GNU General Public License v2 | ||
| 5 | * Author: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com> | ||
| 6 | */ | ||
| 7 | #ifndef MFD_AB8500_H | ||
| 8 | #define MFD_AB8500_H | ||
| 9 | |||
| 10 | #include <linux/device.h> | ||
| 11 | |||
| 12 | /* | ||
| 13 | * Interrupts | ||
| 14 | */ | ||
| 15 | |||
| 16 | #define AB8500_INT_MAIN_EXT_CH_NOT_OK 0 | ||
| 17 | #define AB8500_INT_UN_PLUG_TV_DET 1 | ||
| 18 | #define AB8500_INT_PLUG_TV_DET 2 | ||
| 19 | #define AB8500_INT_TEMP_WARM 3 | ||
| 20 | #define AB8500_INT_PON_KEY2DB_F 4 | ||
| 21 | #define AB8500_INT_PON_KEY2DB_R 5 | ||
| 22 | #define AB8500_INT_PON_KEY1DB_F 6 | ||
| 23 | #define AB8500_INT_PON_KEY1DB_R 7 | ||
| 24 | #define AB8500_INT_BATT_OVV 8 | ||
| 25 | #define AB8500_INT_MAIN_CH_UNPLUG_DET 10 | ||
| 26 | #define AB8500_INT_MAIN_CH_PLUG_DET 11 | ||
| 27 | #define AB8500_INT_USB_ID_DET_F 12 | ||
| 28 | #define AB8500_INT_USB_ID_DET_R 13 | ||
| 29 | #define AB8500_INT_VBUS_DET_F 14 | ||
| 30 | #define AB8500_INT_VBUS_DET_R 15 | ||
| 31 | #define AB8500_INT_VBUS_CH_DROP_END 16 | ||
| 32 | #define AB8500_INT_RTC_60S 17 | ||
| 33 | #define AB8500_INT_RTC_ALARM 18 | ||
| 34 | #define AB8500_INT_BAT_CTRL_INDB 20 | ||
| 35 | #define AB8500_INT_CH_WD_EXP 21 | ||
| 36 | #define AB8500_INT_VBUS_OVV 22 | ||
| 37 | #define AB8500_INT_MAIN_CH_DROP_END 23 | ||
| 38 | #define AB8500_INT_CCN_CONV_ACC 24 | ||
| 39 | #define AB8500_INT_INT_AUD 25 | ||
| 40 | #define AB8500_INT_CCEOC 26 | ||
| 41 | #define AB8500_INT_CC_INT_CALIB 27 | ||
| 42 | #define AB8500_INT_LOW_BAT_F 28 | ||
| 43 | #define AB8500_INT_LOW_BAT_R 29 | ||
| 44 | #define AB8500_INT_BUP_CHG_NOT_OK 30 | ||
| 45 | #define AB8500_INT_BUP_CHG_OK 31 | ||
| 46 | #define AB8500_INT_GP_HW_ADC_CONV_END 32 | ||
| 47 | #define AB8500_INT_ACC_DETECT_1DB_F 33 | ||
| 48 | #define AB8500_INT_ACC_DETECT_1DB_R 34 | ||
| 49 | #define AB8500_INT_ACC_DETECT_22DB_F 35 | ||
| 50 | #define AB8500_INT_ACC_DETECT_22DB_R 36 | ||
| 51 | #define AB8500_INT_ACC_DETECT_21DB_F 37 | ||
| 52 | #define AB8500_INT_ACC_DETECT_21DB_R 38 | ||
| 53 | #define AB8500_INT_GP_SW_ADC_CONV_END 39 | ||
| 54 | #define AB8500_INT_BTEMP_LOW 72 | ||
| 55 | #define AB8500_INT_BTEMP_LOW_MEDIUM 73 | ||
| 56 | #define AB8500_INT_BTEMP_MEDIUM_HIGH 74 | ||
| 57 | #define AB8500_INT_BTEMP_HIGH 75 | ||
| 58 | #define AB8500_INT_USB_CHARGER_NOT_OK 81 | ||
| 59 | #define AB8500_INT_ID_WAKEUP_R 82 | ||
| 60 | #define AB8500_INT_ID_DET_R1R 84 | ||
| 61 | #define AB8500_INT_ID_DET_R2R 85 | ||
| 62 | #define AB8500_INT_ID_DET_R3R 86 | ||
| 63 | #define AB8500_INT_ID_DET_R4R 87 | ||
| 64 | #define AB8500_INT_ID_WAKEUP_F 88 | ||
| 65 | #define AB8500_INT_ID_DET_R1F 90 | ||
| 66 | #define AB8500_INT_ID_DET_R2F 91 | ||
| 67 | #define AB8500_INT_ID_DET_R3F 92 | ||
| 68 | #define AB8500_INT_ID_DET_R4F 93 | ||
| 69 | #define AB8500_INT_USB_CHG_DET_DONE 94 | ||
| 70 | #define AB8500_INT_USB_CH_TH_PROT_F 96 | ||
| 71 | #define AB8500_INT_USB_CH_TH_PROP_R 97 | ||
| 72 | #define AB8500_INT_MAIN_CH_TH_PROP_F 98 | ||
| 73 | #define AB8500_INT_MAIN_CH_TH_PROT_R 99 | ||
| 74 | #define AB8500_INT_USB_CHARGER_NOT_OKF 103 | ||
| 75 | |||
| 76 | #define AB8500_NR_IRQS 104 | ||
| 77 | #define AB8500_NUM_IRQ_REGS 13 | ||
| 78 | |||
| 79 | /** | ||
| 80 | * struct ab8500 - ab8500 internal structure | ||
| 81 | * @dev: parent device | ||
| 82 | * @lock: read/write operations lock | ||
| 83 | * @irq_lock: genirq bus lock | ||
| 84 | * @revision: chip revision | ||
| 85 | * @irq: irq line | ||
| 86 | * @write: register write | ||
| 87 | * @read: register read | ||
| 88 | * @rx_buf: rx buf for SPI | ||
| 89 | * @tx_buf: tx buf for SPI | ||
| 90 | * @mask: cache of IRQ regs for bus lock | ||
| 91 | * @oldmask: cache of previous IRQ regs for bus lock | ||
| 92 | */ | ||
| 93 | struct ab8500 { | ||
| 94 | struct device *dev; | ||
| 95 | struct mutex lock; | ||
| 96 | struct mutex irq_lock; | ||
| 97 | int revision; | ||
| 98 | int irq_base; | ||
| 99 | int irq; | ||
| 100 | |||
| 101 | int (*write) (struct ab8500 *a8500, u16 addr, u8 data); | ||
| 102 | int (*read) (struct ab8500 *a8500, u16 addr); | ||
| 103 | |||
| 104 | unsigned long tx_buf[4]; | ||
| 105 | unsigned long rx_buf[4]; | ||
| 106 | |||
| 107 | u8 mask[AB8500_NUM_IRQ_REGS]; | ||
| 108 | u8 oldmask[AB8500_NUM_IRQ_REGS]; | ||
| 109 | }; | ||
| 110 | |||
| 111 | /** | ||
| 112 | * struct ab8500_platform_data - AB8500 platform data | ||
| 113 | * @irq_base: start of AB8500 IRQs, AB8500_NR_IRQS will be used | ||
| 114 | * @init: board-specific initialization after detection of ab8500 | ||
| 115 | */ | ||
| 116 | struct ab8500_platform_data { | ||
| 117 | int irq_base; | ||
| 118 | void (*init) (struct ab8500 *); | ||
| 119 | }; | ||
| 120 | |||
| 121 | extern int ab8500_write(struct ab8500 *a8500, u16 addr, u8 data); | ||
| 122 | extern int ab8500_read(struct ab8500 *a8500, u16 addr); | ||
| 123 | extern int ab8500_set_bits(struct ab8500 *a8500, u16 addr, u8 mask, u8 data); | ||
| 124 | |||
| 125 | extern int __devinit ab8500_init(struct ab8500 *ab8500); | ||
| 126 | extern int __devexit ab8500_exit(struct ab8500 *ab8500); | ||
| 127 | |||
| 128 | #endif /* MFD_AB8500_H */ | ||
diff --git a/include/linux/mfd/ab3100.h b/include/linux/mfd/abx500.h index 9a881c305a50..390726fcbcb1 100644 --- a/include/linux/mfd/ab3100.h +++ b/include/linux/mfd/abx500.h | |||
| @@ -3,17 +3,37 @@ | |||
| 3 | * License terms: GNU General Public License (GPL) version 2 | 3 | * License terms: GNU General Public License (GPL) version 2 |
| 4 | * AB3100 core access functions | 4 | * AB3100 core access functions |
| 5 | * Author: Linus Walleij <linus.walleij@stericsson.com> | 5 | * Author: Linus Walleij <linus.walleij@stericsson.com> |
| 6 | * | ||
| 7 | * ABX500 core access functions. | ||
| 8 | * The abx500 interface is used for the Analog Baseband chip | ||
| 9 | * ab3100, ab3550, ab5500 and possibly comming. It is not used for | ||
| 10 | * ab4500 and ab8500 since they are another family of chip. | ||
| 11 | * | ||
| 12 | * Author: Mattias Wallin <mattias.wallin@stericsson.com> | ||
| 13 | * Author: Mattias Nilsson <mattias.i.nilsson@stericsson.com> | ||
| 14 | * Author: Bengt Jonsson <bengt.g.jonsson@stericsson.com> | ||
| 15 | * Author: Rickard Andersson <rickard.andersson@stericsson.com> | ||
| 6 | */ | 16 | */ |
| 7 | 17 | ||
| 8 | #include <linux/device.h> | 18 | #include <linux/device.h> |
| 9 | #include <linux/regulator/machine.h> | 19 | #include <linux/regulator/machine.h> |
| 10 | 20 | ||
| 11 | #ifndef MFD_AB3100_H | 21 | #ifndef MFD_ABX500_H |
| 12 | #define MFD_AB3100_H | 22 | #define MFD_ABX500_H |
| 13 | 23 | ||
| 14 | #define ABUNKNOWN 0 | 24 | #define AB3100_P1A 0xc0 |
| 15 | #define AB3000 1 | 25 | #define AB3100_P1B 0xc1 |
| 16 | #define AB3100 2 | 26 | #define AB3100_P1C 0xc2 |
| 27 | #define AB3100_P1D 0xc3 | ||
| 28 | #define AB3100_P1E 0xc4 | ||
| 29 | #define AB3100_P1F 0xc5 | ||
| 30 | #define AB3100_P1G 0xc6 | ||
| 31 | #define AB3100_R2A 0xc7 | ||
| 32 | #define AB3100_R2B 0xc8 | ||
| 33 | #define AB3550_P1A 0x10 | ||
| 34 | #define AB5500_1_0 0x20 | ||
| 35 | #define AB5500_2_0 0x21 | ||
| 36 | #define AB5500_2_1 0x22 | ||
| 17 | 37 | ||
| 18 | /* | 38 | /* |
| 19 | * AB3100, EVENTA1, A2 and A3 event register flags | 39 | * AB3100, EVENTA1, A2 and A3 event register flags |
| @@ -89,7 +109,7 @@ struct ab3100 { | |||
| 89 | char chip_name[32]; | 109 | char chip_name[32]; |
| 90 | u8 chip_id; | 110 | u8 chip_id; |
| 91 | struct blocking_notifier_head event_subscribers; | 111 | struct blocking_notifier_head event_subscribers; |
| 92 | u32 startup_events; | 112 | u8 startup_events[3]; |
| 93 | bool startup_events_read; | 113 | bool startup_events_read; |
| 94 | }; | 114 | }; |
| 95 | 115 | ||
| @@ -112,18 +132,102 @@ struct ab3100_platform_data { | |||
| 112 | int external_voltage; | 132 | int external_voltage; |
| 113 | }; | 133 | }; |
| 114 | 134 | ||
| 115 | int ab3100_set_register_interruptible(struct ab3100 *ab3100, u8 reg, u8 regval); | ||
| 116 | int ab3100_get_register_interruptible(struct ab3100 *ab3100, u8 reg, u8 *regval); | ||
| 117 | int ab3100_get_register_page_interruptible(struct ab3100 *ab3100, | ||
| 118 | u8 first_reg, u8 *regvals, u8 numregs); | ||
| 119 | int ab3100_mask_and_set_register_interruptible(struct ab3100 *ab3100, | ||
| 120 | u8 reg, u8 andmask, u8 ormask); | ||
| 121 | u8 ab3100_get_chip_type(struct ab3100 *ab3100); | ||
| 122 | int ab3100_event_register(struct ab3100 *ab3100, | 135 | int ab3100_event_register(struct ab3100 *ab3100, |
| 123 | struct notifier_block *nb); | 136 | struct notifier_block *nb); |
| 124 | int ab3100_event_unregister(struct ab3100 *ab3100, | 137 | int ab3100_event_unregister(struct ab3100 *ab3100, |
| 125 | struct notifier_block *nb); | 138 | struct notifier_block *nb); |
| 126 | int ab3100_event_registers_startup_state_get(struct ab3100 *ab3100, | ||
| 127 | u32 *fatevent); | ||
| 128 | 139 | ||
| 140 | /* AB3550, STR register flags */ | ||
| 141 | #define AB3550_STR_ONSWA (0x01) | ||
| 142 | #define AB3550_STR_ONSWB (0x02) | ||
| 143 | #define AB3550_STR_ONSWC (0x04) | ||
| 144 | #define AB3550_STR_DCIO (0x08) | ||
| 145 | #define AB3550_STR_BOOT_MODE (0x10) | ||
| 146 | #define AB3550_STR_SIM_OFF (0x20) | ||
| 147 | #define AB3550_STR_BATT_REMOVAL (0x40) | ||
| 148 | #define AB3550_STR_VBUS (0x80) | ||
| 149 | |||
| 150 | /* Interrupt mask registers */ | ||
| 151 | #define AB3550_IMR1 0x29 | ||
| 152 | #define AB3550_IMR2 0x2a | ||
| 153 | #define AB3550_IMR3 0x2b | ||
| 154 | #define AB3550_IMR4 0x2c | ||
| 155 | #define AB3550_IMR5 0x2d | ||
| 156 | |||
| 157 | enum ab3550_devid { | ||
| 158 | AB3550_DEVID_ADC, | ||
| 159 | AB3550_DEVID_DAC, | ||
| 160 | AB3550_DEVID_LEDS, | ||
| 161 | AB3550_DEVID_POWER, | ||
| 162 | AB3550_DEVID_REGULATORS, | ||
| 163 | AB3550_DEVID_SIM, | ||
| 164 | AB3550_DEVID_UART, | ||
| 165 | AB3550_DEVID_RTC, | ||
| 166 | AB3550_DEVID_CHARGER, | ||
| 167 | AB3550_DEVID_FUELGAUGE, | ||
| 168 | AB3550_DEVID_VIBRATOR, | ||
| 169 | AB3550_DEVID_CODEC, | ||
| 170 | AB3550_NUM_DEVICES, | ||
| 171 | }; | ||
| 172 | |||
| 173 | /** | ||
| 174 | * struct abx500_init_setting | ||
| 175 | * Initial value of the registers for driver to use during setup. | ||
| 176 | */ | ||
| 177 | struct abx500_init_settings { | ||
| 178 | u8 bank; | ||
| 179 | u8 reg; | ||
| 180 | u8 setting; | ||
| 181 | }; | ||
| 182 | |||
| 183 | /** | ||
| 184 | * struct ab3550_platform_data | ||
| 185 | * Data supplied to initialize board connections to the AB3550 | ||
| 186 | */ | ||
| 187 | struct ab3550_platform_data { | ||
| 188 | struct {unsigned int base; unsigned int count; } irq; | ||
| 189 | void *dev_data[AB3550_NUM_DEVICES]; | ||
| 190 | size_t dev_data_sz[AB3550_NUM_DEVICES]; | ||
| 191 | struct abx500_init_settings *init_settings; | ||
| 192 | unsigned int init_settings_sz; | ||
| 193 | }; | ||
| 194 | |||
| 195 | int abx500_set_register_interruptible(struct device *dev, u8 bank, u8 reg, | ||
| 196 | u8 value); | ||
| 197 | int abx500_get_register_interruptible(struct device *dev, u8 bank, u8 reg, | ||
| 198 | u8 *value); | ||
| 199 | int abx500_get_register_page_interruptible(struct device *dev, u8 bank, | ||
| 200 | u8 first_reg, u8 *regvals, u8 numregs); | ||
| 201 | int abx500_set_register_page_interruptible(struct device *dev, u8 bank, | ||
| 202 | u8 first_reg, u8 *regvals, u8 numregs); | ||
| 203 | /** | ||
| 204 | * abx500_mask_and_set_register_inerruptible() - Modifies selected bits of a | ||
| 205 | * target register | ||
| 206 | * | ||
| 207 | * @dev: The AB sub device. | ||
| 208 | * @bank: The i2c bank number. | ||
| 209 | * @bitmask: The bit mask to use. | ||
| 210 | * @bitvalues: The new bit values. | ||
| 211 | * | ||
| 212 | * Updates the value of an AB register: | ||
| 213 | * value -> ((value & ~bitmask) | (bitvalues & bitmask)) | ||
| 214 | */ | ||
| 215 | int abx500_mask_and_set_register_interruptible(struct device *dev, u8 bank, | ||
| 216 | u8 reg, u8 bitmask, u8 bitvalues); | ||
| 217 | int abx500_get_chip_id(struct device *dev); | ||
| 218 | int abx500_event_registers_startup_state_get(struct device *dev, u8 *event); | ||
| 219 | int abx500_startup_irq_enabled(struct device *dev, unsigned int irq); | ||
| 220 | |||
| 221 | struct abx500_ops { | ||
| 222 | int (*get_chip_id) (struct device *); | ||
| 223 | int (*get_register) (struct device *, u8, u8, u8 *); | ||
| 224 | int (*set_register) (struct device *, u8, u8, u8); | ||
| 225 | int (*get_register_page) (struct device *, u8, u8, u8 *, u8); | ||
| 226 | int (*set_register_page) (struct device *, u8, u8, u8 *, u8); | ||
| 227 | int (*mask_and_set_register) (struct device *, u8, u8, u8, u8); | ||
| 228 | int (*event_registers_startup_state_get) (struct device *, u8 *); | ||
| 229 | int (*startup_irq_enabled) (struct device *, unsigned int); | ||
| 230 | }; | ||
| 231 | |||
| 232 | int abx500_register_ops(struct device *core_dev, struct abx500_ops *ops); | ||
| 129 | #endif | 233 | #endif |
diff --git a/include/linux/mfd/janz.h b/include/linux/mfd/janz.h new file mode 100644 index 000000000000..e9994c469803 --- /dev/null +++ b/include/linux/mfd/janz.h | |||
| @@ -0,0 +1,54 @@ | |||
| 1 | /* | ||
| 2 | * Common Definitions for Janz MODULbus devices | ||
| 3 | * | ||
| 4 | * Copyright (c) 2010 Ira W. Snyder <iws@ovro.caltech.edu> | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify it | ||
| 7 | * under the terms of the GNU General Public License as published by the | ||
| 8 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 9 | * option) any later version. | ||
| 10 | */ | ||
| 11 | |||
| 12 | #ifndef JANZ_H | ||
| 13 | #define JANZ_H | ||
| 14 | |||
| 15 | struct janz_platform_data { | ||
| 16 | /* MODULbus Module Number */ | ||
| 17 | unsigned int modno; | ||
| 18 | }; | ||
| 19 | |||
| 20 | /* PLX bridge chip onboard registers */ | ||
| 21 | struct janz_cmodio_onboard_regs { | ||
| 22 | u8 unused1; | ||
| 23 | |||
| 24 | /* | ||
| 25 | * Read access: interrupt status | ||
| 26 | * Write access: interrupt disable | ||
| 27 | */ | ||
| 28 | u8 int_disable; | ||
| 29 | u8 unused2; | ||
| 30 | |||
| 31 | /* | ||
| 32 | * Read access: MODULbus number (hex switch) | ||
| 33 | * Write access: interrupt enable | ||
| 34 | */ | ||
| 35 | u8 int_enable; | ||
| 36 | u8 unused3; | ||
| 37 | |||
| 38 | /* write-only */ | ||
| 39 | u8 reset_assert; | ||
| 40 | u8 unused4; | ||
| 41 | |||
| 42 | /* write-only */ | ||
| 43 | u8 reset_deassert; | ||
| 44 | u8 unused5; | ||
| 45 | |||
| 46 | /* read-write access to serial EEPROM */ | ||
| 47 | u8 eep; | ||
| 48 | u8 unused6; | ||
| 49 | |||
| 50 | /* write-only access to EEPROM chip select */ | ||
| 51 | u8 enid; | ||
| 52 | }; | ||
| 53 | |||
| 54 | #endif /* JANZ_H */ | ||
diff --git a/include/linux/mfd/mc13783.h b/include/linux/mfd/mc13783.h index 8895d9d8879c..4a894f688549 100644 --- a/include/linux/mfd/mc13783.h +++ b/include/linux/mfd/mc13783.h | |||
| @@ -64,6 +64,70 @@ static inline int mc13783_ackirq(struct mc13783 *mc13783, int irq) | |||
| 64 | MC13783_ADC0_TSMOD1 | \ | 64 | MC13783_ADC0_TSMOD1 | \ |
| 65 | MC13783_ADC0_TSMOD2) | 65 | MC13783_ADC0_TSMOD2) |
| 66 | 66 | ||
| 67 | struct mc13783_led_platform_data { | ||
| 68 | #define MC13783_LED_MD 0 | ||
| 69 | #define MC13783_LED_AD 1 | ||
| 70 | #define MC13783_LED_KP 2 | ||
| 71 | #define MC13783_LED_R1 3 | ||
| 72 | #define MC13783_LED_G1 4 | ||
| 73 | #define MC13783_LED_B1 5 | ||
| 74 | #define MC13783_LED_R2 6 | ||
| 75 | #define MC13783_LED_G2 7 | ||
| 76 | #define MC13783_LED_B2 8 | ||
| 77 | #define MC13783_LED_R3 9 | ||
| 78 | #define MC13783_LED_G3 10 | ||
| 79 | #define MC13783_LED_B3 11 | ||
| 80 | #define MC13783_LED_MAX MC13783_LED_B3 | ||
| 81 | int id; | ||
| 82 | const char *name; | ||
| 83 | const char *default_trigger; | ||
| 84 | |||
| 85 | /* Three or two bits current selection depending on the led */ | ||
| 86 | char max_current; | ||
| 87 | }; | ||
| 88 | |||
| 89 | struct mc13783_leds_platform_data { | ||
| 90 | int num_leds; | ||
| 91 | struct mc13783_led_platform_data *led; | ||
| 92 | |||
| 93 | #define MC13783_LED_TRIODE_MD (1 << 0) | ||
| 94 | #define MC13783_LED_TRIODE_AD (1 << 1) | ||
| 95 | #define MC13783_LED_TRIODE_KP (1 << 2) | ||
| 96 | #define MC13783_LED_BOOST_EN (1 << 3) | ||
| 97 | #define MC13783_LED_TC1HALF (1 << 4) | ||
| 98 | #define MC13783_LED_SLEWLIMTC (1 << 5) | ||
| 99 | #define MC13783_LED_SLEWLIMBL (1 << 6) | ||
| 100 | #define MC13783_LED_TRIODE_TC1 (1 << 7) | ||
| 101 | #define MC13783_LED_TRIODE_TC2 (1 << 8) | ||
| 102 | #define MC13783_LED_TRIODE_TC3 (1 << 9) | ||
| 103 | int flags; | ||
| 104 | |||
| 105 | #define MC13783_LED_AB_DISABLED 0 | ||
| 106 | #define MC13783_LED_AB_MD1 1 | ||
| 107 | #define MC13783_LED_AB_MD12 2 | ||
| 108 | #define MC13783_LED_AB_MD123 3 | ||
| 109 | #define MC13783_LED_AB_MD1234 4 | ||
| 110 | #define MC13783_LED_AB_MD1234_AD1 5 | ||
| 111 | #define MC13783_LED_AB_MD1234_AD12 6 | ||
| 112 | #define MC13783_LED_AB_MD1_AD 7 | ||
| 113 | char abmode; | ||
| 114 | |||
| 115 | #define MC13783_LED_ABREF_200MV 0 | ||
| 116 | #define MC13783_LED_ABREF_400MV 1 | ||
| 117 | #define MC13783_LED_ABREF_600MV 2 | ||
| 118 | #define MC13783_LED_ABREF_800MV 3 | ||
| 119 | char abref; | ||
| 120 | |||
| 121 | #define MC13783_LED_PERIOD_10MS 0 | ||
| 122 | #define MC13783_LED_PERIOD_100MS 1 | ||
| 123 | #define MC13783_LED_PERIOD_500MS 2 | ||
| 124 | #define MC13783_LED_PERIOD_2S 3 | ||
| 125 | char bl_period; | ||
| 126 | char tc1_period; | ||
| 127 | char tc2_period; | ||
| 128 | char tc3_period; | ||
| 129 | }; | ||
| 130 | |||
| 67 | /* to be cleaned up */ | 131 | /* to be cleaned up */ |
| 68 | struct regulator_init_data; | 132 | struct regulator_init_data; |
| 69 | 133 | ||
| @@ -80,12 +144,14 @@ struct mc13783_regulator_platform_data { | |||
| 80 | struct mc13783_platform_data { | 144 | struct mc13783_platform_data { |
| 81 | int num_regulators; | 145 | int num_regulators; |
| 82 | struct mc13783_regulator_init_data *regulators; | 146 | struct mc13783_regulator_init_data *regulators; |
| 147 | struct mc13783_leds_platform_data *leds; | ||
| 83 | 148 | ||
| 84 | #define MC13783_USE_TOUCHSCREEN (1 << 0) | 149 | #define MC13783_USE_TOUCHSCREEN (1 << 0) |
| 85 | #define MC13783_USE_CODEC (1 << 1) | 150 | #define MC13783_USE_CODEC (1 << 1) |
| 86 | #define MC13783_USE_ADC (1 << 2) | 151 | #define MC13783_USE_ADC (1 << 2) |
| 87 | #define MC13783_USE_RTC (1 << 3) | 152 | #define MC13783_USE_RTC (1 << 3) |
| 88 | #define MC13783_USE_REGULATOR (1 << 4) | 153 | #define MC13783_USE_REGULATOR (1 << 4) |
| 154 | #define MC13783_USE_LED (1 << 5) | ||
| 89 | unsigned int flags; | 155 | unsigned int flags; |
| 90 | }; | 156 | }; |
| 91 | 157 | ||
diff --git a/include/linux/mfd/pcf50633/backlight.h b/include/linux/mfd/pcf50633/backlight.h new file mode 100644 index 000000000000..83747e217b27 --- /dev/null +++ b/include/linux/mfd/pcf50633/backlight.h | |||
| @@ -0,0 +1,51 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2009-2010, Lars-Peter Clausen <lars@metafoo.de> | ||
| 3 | * PCF50633 backlight device driver | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License as published by the | ||
| 7 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 8 | * option) any later version. | ||
| 9 | * | ||
| 10 | * You should have received a copy of the GNU General Public License along | ||
| 11 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 12 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 13 | * | ||
| 14 | */ | ||
| 15 | |||
| 16 | #ifndef __LINUX_MFD_PCF50633_BACKLIGHT | ||
| 17 | #define __LINUX_MFD_PCF50633_BACKLIGHT | ||
| 18 | |||
| 19 | /* | ||
| 20 | * @default_brightness: Backlight brightness is initialized to this value | ||
| 21 | * | ||
| 22 | * Brightness to be used after the driver has been probed. | ||
| 23 | * Valid range 0-63. | ||
| 24 | * | ||
| 25 | * @default_brightness_limit: The actual brightness is limited by this value | ||
| 26 | * | ||
| 27 | * Brightness limit to be used after the driver has been probed. This is useful | ||
| 28 | * when it is not known how much power is available for the backlight during | ||
| 29 | * probe. | ||
| 30 | * Valid range 0-63. Can be changed later with pcf50633_bl_set_brightness_limit. | ||
| 31 | * | ||
| 32 | * @ramp_time: Display ramp time when changing brightness | ||
| 33 | * | ||
| 34 | * When changing the backlights brightness the change is not instant, instead | ||
| 35 | * it fades smooth from one state to another. This value specifies how long | ||
| 36 | * the fade should take. The lower the value the higher the fade time. | ||
| 37 | * Valid range 0-255 | ||
| 38 | */ | ||
| 39 | struct pcf50633_bl_platform_data { | ||
| 40 | unsigned int default_brightness; | ||
| 41 | unsigned int default_brightness_limit; | ||
| 42 | uint8_t ramp_time; | ||
| 43 | }; | ||
| 44 | |||
| 45 | |||
| 46 | struct pcf50633; | ||
| 47 | |||
| 48 | int pcf50633_bl_set_brightness_limit(struct pcf50633 *pcf, unsigned int limit); | ||
| 49 | |||
| 50 | #endif | ||
| 51 | |||
diff --git a/include/linux/mfd/pcf50633/core.h b/include/linux/mfd/pcf50633/core.h index 3398bd9aab11..ad411a78870c 100644 --- a/include/linux/mfd/pcf50633/core.h +++ b/include/linux/mfd/pcf50633/core.h | |||
| @@ -18,6 +18,7 @@ | |||
| 18 | #include <linux/regulator/driver.h> | 18 | #include <linux/regulator/driver.h> |
| 19 | #include <linux/regulator/machine.h> | 19 | #include <linux/regulator/machine.h> |
| 20 | #include <linux/power_supply.h> | 20 | #include <linux/power_supply.h> |
| 21 | #include <linux/mfd/pcf50633/backlight.h> | ||
| 21 | 22 | ||
| 22 | struct pcf50633; | 23 | struct pcf50633; |
| 23 | 24 | ||
| @@ -43,6 +44,8 @@ struct pcf50633_platform_data { | |||
| 43 | void (*force_shutdown)(struct pcf50633 *); | 44 | void (*force_shutdown)(struct pcf50633 *); |
| 44 | 45 | ||
| 45 | u8 resumers[5]; | 46 | u8 resumers[5]; |
| 47 | |||
| 48 | struct pcf50633_bl_platform_data *backlight_data; | ||
| 46 | }; | 49 | }; |
| 47 | 50 | ||
| 48 | struct pcf50633_irq { | 51 | struct pcf50633_irq { |
| @@ -152,6 +155,7 @@ struct pcf50633 { | |||
| 152 | struct platform_device *mbc_pdev; | 155 | struct platform_device *mbc_pdev; |
| 153 | struct platform_device *adc_pdev; | 156 | struct platform_device *adc_pdev; |
| 154 | struct platform_device *input_pdev; | 157 | struct platform_device *input_pdev; |
| 158 | struct platform_device *bl_pdev; | ||
| 155 | struct platform_device *regulator_pdev[PCF50633_NUM_REGULATORS]; | 159 | struct platform_device *regulator_pdev[PCF50633_NUM_REGULATORS]; |
| 156 | }; | 160 | }; |
| 157 | 161 | ||
diff --git a/include/linux/mfd/rdc321x.h b/include/linux/mfd/rdc321x.h new file mode 100644 index 000000000000..4bdf19c8eedf --- /dev/null +++ b/include/linux/mfd/rdc321x.h | |||
| @@ -0,0 +1,26 @@ | |||
| 1 | #ifndef __RDC321X_MFD_H | ||
| 2 | #define __RDC321X_MFD_H | ||
| 3 | |||
| 4 | #include <linux/types.h> | ||
| 5 | #include <linux/pci.h> | ||
| 6 | |||
| 7 | /* Offsets to be accessed in the southbridge PCI | ||
| 8 | * device configuration register */ | ||
| 9 | #define RDC321X_WDT_CTRL 0x44 | ||
| 10 | #define RDC321X_GPIO_CTRL_REG1 0x48 | ||
| 11 | #define RDC321X_GPIO_DATA_REG1 0x4c | ||
| 12 | #define RDC321X_GPIO_CTRL_REG2 0x84 | ||
| 13 | #define RDC321X_GPIO_DATA_REG2 0x88 | ||
| 14 | |||
| 15 | #define RDC321X_MAX_GPIO 58 | ||
| 16 | |||
| 17 | struct rdc321x_gpio_pdata { | ||
| 18 | struct pci_dev *sb_pdev; | ||
| 19 | unsigned max_gpios; | ||
| 20 | }; | ||
| 21 | |||
| 22 | struct rdc321x_wdt_pdata { | ||
| 23 | struct pci_dev *sb_pdev; | ||
| 24 | }; | ||
| 25 | |||
| 26 | #endif /* __RDC321X_MFD_H */ | ||
diff --git a/include/linux/mfd/tc35892.h b/include/linux/mfd/tc35892.h new file mode 100644 index 000000000000..e47f770d3068 --- /dev/null +++ b/include/linux/mfd/tc35892.h | |||
| @@ -0,0 +1,132 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) ST-Ericsson SA 2010 | ||
| 3 | * | ||
| 4 | * License Terms: GNU General Public License, version 2 | ||
| 5 | */ | ||
| 6 | |||
| 7 | #ifndef __LINUX_MFD_TC35892_H | ||
| 8 | #define __LINUX_MFD_TC35892_H | ||
| 9 | |||
| 10 | #include <linux/device.h> | ||
| 11 | |||
| 12 | #define TC35892_RSTCTRL_IRQRST (1 << 4) | ||
| 13 | #define TC35892_RSTCTRL_TIMRST (1 << 3) | ||
| 14 | #define TC35892_RSTCTRL_ROTRST (1 << 2) | ||
| 15 | #define TC35892_RSTCTRL_KBDRST (1 << 1) | ||
| 16 | #define TC35892_RSTCTRL_GPIRST (1 << 0) | ||
| 17 | |||
| 18 | #define TC35892_IRQST 0x91 | ||
| 19 | |||
| 20 | #define TC35892_MANFCODE_MAGIC 0x03 | ||
| 21 | #define TC35892_MANFCODE 0x80 | ||
| 22 | #define TC35892_VERSION 0x81 | ||
| 23 | #define TC35892_IOCFG 0xA7 | ||
| 24 | |||
| 25 | #define TC35892_CLKMODE 0x88 | ||
| 26 | #define TC35892_CLKCFG 0x89 | ||
| 27 | #define TC35892_CLKEN 0x8A | ||
| 28 | |||
| 29 | #define TC35892_RSTCTRL 0x82 | ||
| 30 | #define TC35892_EXTRSTN 0x83 | ||
| 31 | #define TC35892_RSTINTCLR 0x84 | ||
| 32 | |||
| 33 | #define TC35892_GPIOIS0 0xC9 | ||
| 34 | #define TC35892_GPIOIS1 0xCA | ||
| 35 | #define TC35892_GPIOIS2 0xCB | ||
| 36 | #define TC35892_GPIOIBE0 0xCC | ||
| 37 | #define TC35892_GPIOIBE1 0xCD | ||
| 38 | #define TC35892_GPIOIBE2 0xCE | ||
| 39 | #define TC35892_GPIOIEV0 0xCF | ||
| 40 | #define TC35892_GPIOIEV1 0xD0 | ||
| 41 | #define TC35892_GPIOIEV2 0xD1 | ||
| 42 | #define TC35892_GPIOIE0 0xD2 | ||
| 43 | #define TC35892_GPIOIE1 0xD3 | ||
| 44 | #define TC35892_GPIOIE2 0xD4 | ||
| 45 | #define TC35892_GPIORIS0 0xD6 | ||
| 46 | #define TC35892_GPIORIS1 0xD7 | ||
| 47 | #define TC35892_GPIORIS2 0xD8 | ||
| 48 | #define TC35892_GPIOMIS0 0xD9 | ||
| 49 | #define TC35892_GPIOMIS1 0xDA | ||
| 50 | #define TC35892_GPIOMIS2 0xDB | ||
| 51 | #define TC35892_GPIOIC0 0xDC | ||
| 52 | #define TC35892_GPIOIC1 0xDD | ||
| 53 | #define TC35892_GPIOIC2 0xDE | ||
| 54 | |||
| 55 | #define TC35892_GPIODATA0 0xC0 | ||
| 56 | #define TC35892_GPIOMASK0 0xc1 | ||
| 57 | #define TC35892_GPIODATA1 0xC2 | ||
| 58 | #define TC35892_GPIOMASK1 0xc3 | ||
| 59 | #define TC35892_GPIODATA2 0xC4 | ||
| 60 | #define TC35892_GPIOMASK2 0xC5 | ||
| 61 | |||
| 62 | #define TC35892_GPIODIR0 0xC6 | ||
| 63 | #define TC35892_GPIODIR1 0xC7 | ||
| 64 | #define TC35892_GPIODIR2 0xC8 | ||
| 65 | |||
| 66 | #define TC35892_GPIOSYNC0 0xE6 | ||
| 67 | #define TC35892_GPIOSYNC1 0xE7 | ||
| 68 | #define TC35892_GPIOSYNC2 0xE8 | ||
| 69 | |||
| 70 | #define TC35892_GPIOWAKE0 0xE9 | ||
| 71 | #define TC35892_GPIOWAKE1 0xEA | ||
| 72 | #define TC35892_GPIOWAKE2 0xEB | ||
| 73 | |||
| 74 | #define TC35892_GPIOODM0 0xE0 | ||
| 75 | #define TC35892_GPIOODE0 0xE1 | ||
| 76 | #define TC35892_GPIOODM1 0xE2 | ||
| 77 | #define TC35892_GPIOODE1 0xE3 | ||
| 78 | #define TC35892_GPIOODM2 0xE4 | ||
| 79 | #define TC35892_GPIOODE2 0xE5 | ||
| 80 | |||
| 81 | #define TC35892_INT_GPIIRQ 0 | ||
| 82 | #define TC35892_INT_TI0IRQ 1 | ||
| 83 | #define TC35892_INT_TI1IRQ 2 | ||
| 84 | #define TC35892_INT_TI2IRQ 3 | ||
| 85 | #define TC35892_INT_ROTIRQ 5 | ||
| 86 | #define TC35892_INT_KBDIRQ 6 | ||
| 87 | #define TC35892_INT_PORIRQ 7 | ||
| 88 | |||
| 89 | #define TC35892_NR_INTERNAL_IRQS 8 | ||
| 90 | #define TC35892_INT_GPIO(x) (TC35892_NR_INTERNAL_IRQS + (x)) | ||
| 91 | |||
| 92 | struct tc35892 { | ||
| 93 | struct mutex lock; | ||
| 94 | struct device *dev; | ||
| 95 | struct i2c_client *i2c; | ||
| 96 | |||
| 97 | int irq_base; | ||
| 98 | int num_gpio; | ||
| 99 | struct tc35892_platform_data *pdata; | ||
| 100 | }; | ||
| 101 | |||
| 102 | extern int tc35892_reg_write(struct tc35892 *tc35892, u8 reg, u8 data); | ||
| 103 | extern int tc35892_reg_read(struct tc35892 *tc35892, u8 reg); | ||
| 104 | extern int tc35892_block_read(struct tc35892 *tc35892, u8 reg, u8 length, | ||
| 105 | u8 *values); | ||
| 106 | extern int tc35892_block_write(struct tc35892 *tc35892, u8 reg, u8 length, | ||
| 107 | const u8 *values); | ||
| 108 | extern int tc35892_set_bits(struct tc35892 *tc35892, u8 reg, u8 mask, u8 val); | ||
| 109 | |||
| 110 | /** | ||
| 111 | * struct tc35892_gpio_platform_data - TC35892 GPIO platform data | ||
| 112 | * @gpio_base: first gpio number assigned to TC35892. A maximum of | ||
| 113 | * %TC35892_NR_GPIOS GPIOs will be allocated. | ||
| 114 | */ | ||
| 115 | struct tc35892_gpio_platform_data { | ||
| 116 | int gpio_base; | ||
| 117 | }; | ||
| 118 | |||
| 119 | /** | ||
| 120 | * struct tc35892_platform_data - TC35892 platform data | ||
| 121 | * @irq_base: base IRQ number. %TC35892_NR_IRQS irqs will be used. | ||
| 122 | * @gpio: GPIO-specific platform data | ||
| 123 | */ | ||
| 124 | struct tc35892_platform_data { | ||
| 125 | int irq_base; | ||
| 126 | struct tc35892_gpio_platform_data *gpio; | ||
| 127 | }; | ||
| 128 | |||
| 129 | #define TC35892_NR_GPIOS 24 | ||
| 130 | #define TC35892_NR_IRQS TC35892_INT_GPIO(TC35892_NR_GPIOS) | ||
| 131 | |||
| 132 | #endif | ||
diff --git a/include/linux/mfd/tps6507x.h b/include/linux/mfd/tps6507x.h new file mode 100644 index 000000000000..c923e4864f55 --- /dev/null +++ b/include/linux/mfd/tps6507x.h | |||
| @@ -0,0 +1,169 @@ | |||
| 1 | /* linux/mfd/tps6507x.h | ||
| 2 | * | ||
| 3 | * Functions to access TPS65070 power management chip. | ||
| 4 | * | ||
| 5 | * Copyright (c) 2009 RidgeRun (todd.fischer@ridgerun.com) | ||
| 6 | * | ||
| 7 | * | ||
| 8 | * For licencing details see kernel-base/COPYING | ||
| 9 | */ | ||
| 10 | |||
| 11 | #ifndef __LINUX_MFD_TPS6507X_H | ||
| 12 | #define __LINUX_MFD_TPS6507X_H | ||
| 13 | |||
| 14 | /* | ||
| 15 | * ---------------------------------------------------------------------------- | ||
| 16 | * Registers, all 8 bits | ||
| 17 | * ---------------------------------------------------------------------------- | ||
| 18 | */ | ||
| 19 | |||
| 20 | |||
| 21 | /* Register definitions */ | ||
| 22 | #define TPS6507X_REG_PPATH1 0X01 | ||
| 23 | #define TPS6507X_CHG_USB BIT(7) | ||
| 24 | #define TPS6507X_CHG_AC BIT(6) | ||
| 25 | #define TPS6507X_CHG_USB_PW_ENABLE BIT(5) | ||
| 26 | #define TPS6507X_CHG_AC_PW_ENABLE BIT(4) | ||
| 27 | #define TPS6507X_CHG_AC_CURRENT BIT(2) | ||
| 28 | #define TPS6507X_CHG_USB_CURRENT BIT(0) | ||
| 29 | |||
| 30 | #define TPS6507X_REG_INT 0X02 | ||
| 31 | #define TPS6507X_REG_MASK_AC_USB BIT(7) | ||
| 32 | #define TPS6507X_REG_MASK_TSC BIT(6) | ||
| 33 | #define TPS6507X_REG_MASK_PB_IN BIT(5) | ||
| 34 | #define TPS6507X_REG_TSC_INT BIT(3) | ||
| 35 | #define TPS6507X_REG_PB_IN_INT BIT(2) | ||
| 36 | #define TPS6507X_REG_AC_USB_APPLIED BIT(1) | ||
| 37 | #define TPS6507X_REG_AC_USB_REMOVED BIT(0) | ||
| 38 | |||
| 39 | #define TPS6507X_REG_CHGCONFIG0 0X03 | ||
| 40 | |||
| 41 | #define TPS6507X_REG_CHGCONFIG1 0X04 | ||
| 42 | #define TPS6507X_CON_CTRL1_DCDC1_ENABLE BIT(4) | ||
| 43 | #define TPS6507X_CON_CTRL1_DCDC2_ENABLE BIT(3) | ||
| 44 | #define TPS6507X_CON_CTRL1_DCDC3_ENABLE BIT(2) | ||
| 45 | #define TPS6507X_CON_CTRL1_LDO1_ENABLE BIT(1) | ||
| 46 | #define TPS6507X_CON_CTRL1_LDO2_ENABLE BIT(0) | ||
| 47 | |||
| 48 | #define TPS6507X_REG_CHGCONFIG2 0X05 | ||
| 49 | |||
| 50 | #define TPS6507X_REG_CHGCONFIG3 0X06 | ||
| 51 | |||
| 52 | #define TPS6507X_REG_ADCONFIG 0X07 | ||
| 53 | #define TPS6507X_ADCONFIG_AD_ENABLE BIT(7) | ||
| 54 | #define TPS6507X_ADCONFIG_START_CONVERSION BIT(6) | ||
| 55 | #define TPS6507X_ADCONFIG_CONVERSION_DONE BIT(5) | ||
| 56 | #define TPS6507X_ADCONFIG_VREF_ENABLE BIT(4) | ||
| 57 | #define TPS6507X_ADCONFIG_INPUT_AD_IN1 0 | ||
| 58 | #define TPS6507X_ADCONFIG_INPUT_AD_IN2 1 | ||
| 59 | #define TPS6507X_ADCONFIG_INPUT_AD_IN3 2 | ||
| 60 | #define TPS6507X_ADCONFIG_INPUT_AD_IN4 3 | ||
| 61 | #define TPS6507X_ADCONFIG_INPUT_TS_PIN 4 | ||
| 62 | #define TPS6507X_ADCONFIG_INPUT_BAT_CURRENT 5 | ||
| 63 | #define TPS6507X_ADCONFIG_INPUT_AC_VOLTAGE 6 | ||
| 64 | #define TPS6507X_ADCONFIG_INPUT_SYS_VOLTAGE 7 | ||
| 65 | #define TPS6507X_ADCONFIG_INPUT_CHARGER_VOLTAGE 8 | ||
| 66 | #define TPS6507X_ADCONFIG_INPUT_BAT_VOLTAGE 9 | ||
| 67 | #define TPS6507X_ADCONFIG_INPUT_THRESHOLD_VOLTAGE 10 | ||
| 68 | #define TPS6507X_ADCONFIG_INPUT_ISET1_VOLTAGE 11 | ||
| 69 | #define TPS6507X_ADCONFIG_INPUT_ISET2_VOLTAGE 12 | ||
| 70 | #define TPS6507X_ADCONFIG_INPUT_REAL_TSC 14 | ||
| 71 | #define TPS6507X_ADCONFIG_INPUT_TSC 15 | ||
| 72 | |||
| 73 | #define TPS6507X_REG_TSCMODE 0X08 | ||
| 74 | #define TPS6507X_TSCMODE_X_POSITION 0 | ||
| 75 | #define TPS6507X_TSCMODE_Y_POSITION 1 | ||
| 76 | #define TPS6507X_TSCMODE_PRESSURE 2 | ||
| 77 | #define TPS6507X_TSCMODE_X_PLATE 3 | ||
| 78 | #define TPS6507X_TSCMODE_Y_PLATE 4 | ||
| 79 | #define TPS6507X_TSCMODE_STANDBY 5 | ||
| 80 | #define TPS6507X_TSCMODE_ADC_INPUT 6 | ||
| 81 | #define TPS6507X_TSCMODE_DISABLE 7 | ||
| 82 | |||
| 83 | #define TPS6507X_REG_ADRESULT_1 0X09 | ||
| 84 | |||
| 85 | #define TPS6507X_REG_ADRESULT_2 0X0A | ||
| 86 | #define TPS6507X_REG_ADRESULT_2_MASK (BIT(1) | BIT(0)) | ||
| 87 | |||
| 88 | #define TPS6507X_REG_PGOOD 0X0B | ||
| 89 | |||
| 90 | #define TPS6507X_REG_PGOODMASK 0X0C | ||
| 91 | |||
| 92 | #define TPS6507X_REG_CON_CTRL1 0X0D | ||
| 93 | #define TPS6507X_CON_CTRL1_DCDC1_ENABLE BIT(4) | ||
| 94 | #define TPS6507X_CON_CTRL1_DCDC2_ENABLE BIT(3) | ||
| 95 | #define TPS6507X_CON_CTRL1_DCDC3_ENABLE BIT(2) | ||
| 96 | #define TPS6507X_CON_CTRL1_LDO1_ENABLE BIT(1) | ||
| 97 | #define TPS6507X_CON_CTRL1_LDO2_ENABLE BIT(0) | ||
| 98 | |||
| 99 | #define TPS6507X_REG_CON_CTRL2 0X0E | ||
| 100 | |||
| 101 | #define TPS6507X_REG_CON_CTRL3 0X0F | ||
| 102 | |||
| 103 | #define TPS6507X_REG_DEFDCDC1 0X10 | ||
| 104 | #define TPS6507X_DEFDCDC1_DCDC1_EXT_ADJ_EN BIT(7) | ||
| 105 | #define TPS6507X_DEFDCDC1_DCDC1_MASK 0X3F | ||
| 106 | |||
| 107 | #define TPS6507X_REG_DEFDCDC2_LOW 0X11 | ||
| 108 | #define TPS6507X_DEFDCDC2_LOW_DCDC2_MASK 0X3F | ||
| 109 | |||
| 110 | #define TPS6507X_REG_DEFDCDC2_HIGH 0X12 | ||
| 111 | #define TPS6507X_DEFDCDC2_HIGH_DCDC2_MASK 0X3F | ||
| 112 | |||
| 113 | #define TPS6507X_REG_DEFDCDC3_LOW 0X13 | ||
| 114 | #define TPS6507X_DEFDCDC3_LOW_DCDC3_MASK 0X3F | ||
| 115 | |||
| 116 | #define TPS6507X_REG_DEFDCDC3_HIGH 0X14 | ||
| 117 | #define TPS6507X_DEFDCDC3_HIGH_DCDC3_MASK 0X3F | ||
| 118 | |||
| 119 | #define TPS6507X_REG_DEFSLEW 0X15 | ||
| 120 | |||
| 121 | #define TPS6507X_REG_LDO_CTRL1 0X16 | ||
| 122 | #define TPS6507X_REG_LDO_CTRL1_LDO1_MASK 0X0F | ||
| 123 | |||
| 124 | #define TPS6507X_REG_DEFLDO2 0X17 | ||
| 125 | #define TPS6507X_REG_DEFLDO2_LDO2_MASK 0X3F | ||
| 126 | |||
| 127 | #define TPS6507X_REG_WLED_CTRL1 0X18 | ||
| 128 | |||
| 129 | #define TPS6507X_REG_WLED_CTRL2 0X19 | ||
| 130 | |||
| 131 | /* VDCDC MASK */ | ||
| 132 | #define TPS6507X_DEFDCDCX_DCDC_MASK 0X3F | ||
| 133 | |||
| 134 | #define TPS6507X_MAX_REGISTER 0X19 | ||
| 135 | |||
| 136 | /** | ||
| 137 | * struct tps6507x_board - packages regulator and touchscreen init data | ||
| 138 | * @tps6507x_regulator_data: regulator initialization values | ||
| 139 | * | ||
| 140 | * Board data may be used to initialize regulator and touchscreen. | ||
| 141 | */ | ||
| 142 | |||
| 143 | struct tps6507x_board { | ||
| 144 | struct regulator_init_data *tps6507x_pmic_init_data; | ||
| 145 | struct touchscreen_init_data *tps6507x_ts_init_data; | ||
| 146 | }; | ||
| 147 | |||
| 148 | /** | ||
| 149 | * struct tps6507x_dev - tps6507x sub-driver chip access routines | ||
| 150 | * @read_dev() - I2C register read function | ||
| 151 | * @write_dev() - I2C register write function | ||
| 152 | * | ||
| 153 | * Device data may be used to access the TPS6507x chip | ||
| 154 | */ | ||
| 155 | |||
| 156 | struct tps6507x_dev { | ||
| 157 | struct device *dev; | ||
| 158 | struct i2c_client *i2c_client; | ||
| 159 | int (*read_dev)(struct tps6507x_dev *tps6507x, char reg, int size, | ||
| 160 | void *dest); | ||
| 161 | int (*write_dev)(struct tps6507x_dev *tps6507x, char reg, int size, | ||
| 162 | void *src); | ||
| 163 | |||
| 164 | /* Client devices */ | ||
| 165 | struct tps6507x_pmic *pmic; | ||
| 166 | struct tps6507x_ts *ts; | ||
| 167 | }; | ||
| 168 | |||
| 169 | #endif /* __LINUX_MFD_TPS6507X_H */ | ||
diff --git a/include/linux/mfd/wm831x/core.h b/include/linux/mfd/wm831x/core.h index 5915f6e3d9ab..eb5bd4e0e03c 100644 --- a/include/linux/mfd/wm831x/core.h +++ b/include/linux/mfd/wm831x/core.h | |||
| @@ -256,8 +256,9 @@ struct wm831x { | |||
| 256 | int irq_masks_cache[WM831X_NUM_IRQ_REGS]; /* Cached hardware value */ | 256 | int irq_masks_cache[WM831X_NUM_IRQ_REGS]; /* Cached hardware value */ |
| 257 | 257 | ||
| 258 | /* Chip revision based flags */ | 258 | /* Chip revision based flags */ |
| 259 | unsigned has_gpio_ena:1; /* Has GPIO enable bit */ | 259 | unsigned has_gpio_ena:1; /* Has GPIO enable bit */ |
| 260 | unsigned has_cs_sts:1; /* Has current sink status bit */ | 260 | unsigned has_cs_sts:1; /* Has current sink status bit */ |
| 261 | unsigned charger_irq_wake:1; /* Are charger IRQs a wake source? */ | ||
| 261 | 262 | ||
| 262 | int num_gpio; | 263 | int num_gpio; |
| 263 | 264 | ||
diff --git a/include/linux/miscdevice.h b/include/linux/miscdevice.h index b631c46cffd9..f6c9b7dcb9fd 100644 --- a/include/linux/miscdevice.h +++ b/include/linux/miscdevice.h | |||
| @@ -3,6 +3,12 @@ | |||
| 3 | #include <linux/module.h> | 3 | #include <linux/module.h> |
| 4 | #include <linux/major.h> | 4 | #include <linux/major.h> |
| 5 | 5 | ||
| 6 | /* | ||
| 7 | * These allocations are managed by device@lanana.org. If you use an | ||
| 8 | * entry that is not in assigned your entry may well be moved and | ||
| 9 | * reassigned, or set dynamic if a fixed value is not justified. | ||
| 10 | */ | ||
| 11 | |||
| 6 | #define PSMOUSE_MINOR 1 | 12 | #define PSMOUSE_MINOR 1 |
| 7 | #define MS_BUSMOUSE_MINOR 2 | 13 | #define MS_BUSMOUSE_MINOR 2 |
| 8 | #define ATIXL_BUSMOUSE_MINOR 3 | 14 | #define ATIXL_BUSMOUSE_MINOR 3 |
| @@ -30,7 +36,6 @@ | |||
| 30 | #define HPET_MINOR 228 | 36 | #define HPET_MINOR 228 |
| 31 | #define FUSE_MINOR 229 | 37 | #define FUSE_MINOR 229 |
| 32 | #define KVM_MINOR 232 | 38 | #define KVM_MINOR 232 |
| 33 | #define VHOST_NET_MINOR 233 | ||
| 34 | #define BTRFS_MINOR 234 | 39 | #define BTRFS_MINOR 234 |
| 35 | #define AUTOFS_MINOR 235 | 40 | #define AUTOFS_MINOR 235 |
| 36 | #define MISC_DYNAMIC_MINOR 255 | 41 | #define MISC_DYNAMIC_MINOR 255 |
diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h index 3196c84cc630..f65913c9f5a4 100644 --- a/include/linux/mmc/host.h +++ b/include/linux/mmc/host.h | |||
| @@ -230,7 +230,7 @@ static inline void *mmc_priv(struct mmc_host *host) | |||
| 230 | #define mmc_classdev(x) (&(x)->class_dev) | 230 | #define mmc_classdev(x) (&(x)->class_dev) |
| 231 | #define mmc_hostname(x) (dev_name(&(x)->class_dev)) | 231 | #define mmc_hostname(x) (dev_name(&(x)->class_dev)) |
| 232 | 232 | ||
| 233 | extern int mmc_suspend_host(struct mmc_host *, pm_message_t); | 233 | extern int mmc_suspend_host(struct mmc_host *); |
| 234 | extern int mmc_resume_host(struct mmc_host *); | 234 | extern int mmc_resume_host(struct mmc_host *); |
| 235 | 235 | ||
| 236 | extern void mmc_power_save_host(struct mmc_host *host); | 236 | extern void mmc_power_save_host(struct mmc_host *host); |
diff --git a/include/linux/mmc/sdhci-spear.h b/include/linux/mmc/sdhci-spear.h new file mode 100644 index 000000000000..9188c973f3e1 --- /dev/null +++ b/include/linux/mmc/sdhci-spear.h | |||
| @@ -0,0 +1,42 @@ | |||
| 1 | /* | ||
| 2 | * include/linux/mmc/sdhci-spear.h | ||
| 3 | * | ||
| 4 | * SDHCI declarations specific to ST SPEAr platform | ||
| 5 | * | ||
| 6 | * Copyright (C) 2010 ST Microelectronics | ||
| 7 | * Viresh Kumar<viresh.kumar@st.com> | ||
| 8 | * | ||
| 9 | * This file is licensed under the terms of the GNU General Public | ||
| 10 | * License version 2. This program is licensed "as is" without any | ||
| 11 | * warranty of any kind, whether express or implied. | ||
| 12 | */ | ||
| 13 | |||
| 14 | #ifndef MMC_SDHCI_SPEAR_H | ||
| 15 | #define MMC_SDHCI_SPEAR_H | ||
| 16 | |||
| 17 | #include <linux/platform_device.h> | ||
| 18 | /* | ||
| 19 | * struct sdhci_plat_data: spear sdhci platform data structure | ||
| 20 | * | ||
| 21 | * @card_power_gpio: gpio pin for enabling/disabling power to sdhci socket | ||
| 22 | * @power_active_high: if set, enable power to sdhci socket by setting | ||
| 23 | * card_power_gpio | ||
| 24 | * @power_always_enb: If set, then enable power on probe, otherwise enable only | ||
| 25 | * on card insertion and disable on card removal. | ||
| 26 | * card_int_gpio: gpio pin used for card detection | ||
| 27 | */ | ||
| 28 | struct sdhci_plat_data { | ||
| 29 | int card_power_gpio; | ||
| 30 | int power_active_high; | ||
| 31 | int power_always_enb; | ||
| 32 | int card_int_gpio; | ||
| 33 | }; | ||
| 34 | |||
| 35 | /* This function is used to set platform_data field of pdev->dev */ | ||
| 36 | static inline void | ||
| 37 | sdhci_set_plat_data(struct platform_device *pdev, struct sdhci_plat_data *data) | ||
| 38 | { | ||
| 39 | pdev->dev.platform_data = data; | ||
| 40 | } | ||
| 41 | |||
| 42 | #endif /* MMC_SDHCI_SPEAR_H */ | ||
diff --git a/include/linux/mmc/sdio_func.h b/include/linux/mmc/sdio_func.h index c6c0cceba5fe..31baaf82f458 100644 --- a/include/linux/mmc/sdio_func.h +++ b/include/linux/mmc/sdio_func.h | |||
| @@ -145,6 +145,9 @@ extern void sdio_writew(struct sdio_func *func, u16 b, | |||
| 145 | extern void sdio_writel(struct sdio_func *func, u32 b, | 145 | extern void sdio_writel(struct sdio_func *func, u32 b, |
| 146 | unsigned int addr, int *err_ret); | 146 | unsigned int addr, int *err_ret); |
| 147 | 147 | ||
| 148 | extern u8 sdio_writeb_readb(struct sdio_func *func, u8 write_byte, | ||
| 149 | unsigned int addr, int *err_ret); | ||
| 150 | |||
| 148 | extern int sdio_memcpy_toio(struct sdio_func *func, unsigned int addr, | 151 | extern int sdio_memcpy_toio(struct sdio_func *func, unsigned int addr, |
| 149 | void *src, int count); | 152 | void *src, int count); |
| 150 | extern int sdio_writesb(struct sdio_func *func, unsigned int addr, | 153 | extern int sdio_writesb(struct sdio_func *func, unsigned int addr, |
diff --git a/include/linux/mmc/sh_mmcif.h b/include/linux/mmc/sh_mmcif.h new file mode 100644 index 000000000000..d4a2ebbdab4b --- /dev/null +++ b/include/linux/mmc/sh_mmcif.h | |||
| @@ -0,0 +1,200 @@ | |||
| 1 | /* | ||
| 2 | * include/linux/mmc/sh_mmcif.h | ||
| 3 | * | ||
| 4 | * platform data for eMMC driver | ||
| 5 | * | ||
| 6 | * Copyright (C) 2010 Renesas Solutions Corp. | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or modify | ||
| 9 | * it under the terms of the GNU General Public License as published by | ||
| 10 | * the Free Software Foundation; either version 2 of the License. | ||
| 11 | * | ||
| 12 | */ | ||
| 13 | |||
| 14 | #ifndef __SH_MMCIF_H__ | ||
| 15 | #define __SH_MMCIF_H__ | ||
| 16 | |||
| 17 | #include <linux/platform_device.h> | ||
| 18 | #include <linux/io.h> | ||
| 19 | |||
| 20 | /* | ||
| 21 | * MMCIF : CE_CLK_CTRL [19:16] | ||
| 22 | * 1000 : Peripheral clock / 512 | ||
| 23 | * 0111 : Peripheral clock / 256 | ||
| 24 | * 0110 : Peripheral clock / 128 | ||
| 25 | * 0101 : Peripheral clock / 64 | ||
| 26 | * 0100 : Peripheral clock / 32 | ||
| 27 | * 0011 : Peripheral clock / 16 | ||
| 28 | * 0010 : Peripheral clock / 8 | ||
| 29 | * 0001 : Peripheral clock / 4 | ||
| 30 | * 0000 : Peripheral clock / 2 | ||
| 31 | * 1111 : Peripheral clock (sup_pclk set '1') | ||
| 32 | */ | ||
| 33 | |||
| 34 | struct sh_mmcif_plat_data { | ||
| 35 | void (*set_pwr)(struct platform_device *pdev, int state); | ||
| 36 | void (*down_pwr)(struct platform_device *pdev); | ||
| 37 | u8 sup_pclk; /* 1 :SH7757, 0: SH7724/SH7372 */ | ||
| 38 | unsigned long caps; | ||
| 39 | u32 ocr; | ||
| 40 | }; | ||
| 41 | |||
| 42 | #define MMCIF_CE_CMD_SET 0x00000000 | ||
| 43 | #define MMCIF_CE_ARG 0x00000008 | ||
| 44 | #define MMCIF_CE_ARG_CMD12 0x0000000C | ||
| 45 | #define MMCIF_CE_CMD_CTRL 0x00000010 | ||
| 46 | #define MMCIF_CE_BLOCK_SET 0x00000014 | ||
| 47 | #define MMCIF_CE_CLK_CTRL 0x00000018 | ||
| 48 | #define MMCIF_CE_BUF_ACC 0x0000001C | ||
| 49 | #define MMCIF_CE_RESP3 0x00000020 | ||
| 50 | #define MMCIF_CE_RESP2 0x00000024 | ||
| 51 | #define MMCIF_CE_RESP1 0x00000028 | ||
| 52 | #define MMCIF_CE_RESP0 0x0000002C | ||
| 53 | #define MMCIF_CE_RESP_CMD12 0x00000030 | ||
| 54 | #define MMCIF_CE_DATA 0x00000034 | ||
| 55 | #define MMCIF_CE_INT 0x00000040 | ||
| 56 | #define MMCIF_CE_INT_MASK 0x00000044 | ||
| 57 | #define MMCIF_CE_HOST_STS1 0x00000048 | ||
| 58 | #define MMCIF_CE_HOST_STS2 0x0000004C | ||
| 59 | #define MMCIF_CE_VERSION 0x0000007C | ||
| 60 | |||
| 61 | extern inline u32 sh_mmcif_readl(void __iomem *addr, int reg) | ||
| 62 | { | ||
| 63 | return readl(addr + reg); | ||
| 64 | } | ||
| 65 | |||
| 66 | extern inline void sh_mmcif_writel(void __iomem *addr, int reg, u32 val) | ||
| 67 | { | ||
| 68 | writel(val, addr + reg); | ||
| 69 | } | ||
| 70 | |||
| 71 | #define SH_MMCIF_BBS 512 /* boot block size */ | ||
| 72 | |||
| 73 | extern inline void sh_mmcif_boot_cmd_send(void __iomem *base, | ||
| 74 | unsigned long cmd, unsigned long arg) | ||
| 75 | { | ||
| 76 | sh_mmcif_writel(base, MMCIF_CE_INT, 0); | ||
| 77 | sh_mmcif_writel(base, MMCIF_CE_ARG, arg); | ||
| 78 | sh_mmcif_writel(base, MMCIF_CE_CMD_SET, cmd); | ||
| 79 | } | ||
| 80 | |||
| 81 | extern inline int sh_mmcif_boot_cmd_poll(void __iomem *base, unsigned long mask) | ||
| 82 | { | ||
| 83 | unsigned long tmp; | ||
| 84 | int cnt; | ||
| 85 | |||
| 86 | for (cnt = 0; cnt < 1000000; cnt++) { | ||
| 87 | tmp = sh_mmcif_readl(base, MMCIF_CE_INT); | ||
| 88 | if (tmp & mask) { | ||
| 89 | sh_mmcif_writel(base, MMCIF_CE_INT, tmp & ~mask); | ||
| 90 | return 0; | ||
| 91 | } | ||
| 92 | } | ||
| 93 | |||
| 94 | return -1; | ||
| 95 | } | ||
| 96 | |||
| 97 | extern inline int sh_mmcif_boot_cmd(void __iomem *base, | ||
| 98 | unsigned long cmd, unsigned long arg) | ||
| 99 | { | ||
| 100 | sh_mmcif_boot_cmd_send(base, cmd, arg); | ||
| 101 | return sh_mmcif_boot_cmd_poll(base, 0x00010000); | ||
| 102 | } | ||
| 103 | |||
| 104 | extern inline int sh_mmcif_boot_do_read_single(void __iomem *base, | ||
| 105 | unsigned int block_nr, | ||
| 106 | unsigned long *buf) | ||
| 107 | { | ||
| 108 | int k; | ||
| 109 | |||
| 110 | /* CMD13 - Status */ | ||
| 111 | sh_mmcif_boot_cmd(base, 0x0d400000, 0x00010000); | ||
| 112 | |||
| 113 | if (sh_mmcif_readl(base, MMCIF_CE_RESP0) != 0x0900) | ||
| 114 | return -1; | ||
| 115 | |||
| 116 | /* CMD17 - Read */ | ||
| 117 | sh_mmcif_boot_cmd(base, 0x11480000, block_nr * SH_MMCIF_BBS); | ||
| 118 | if (sh_mmcif_boot_cmd_poll(base, 0x00100000) < 0) | ||
| 119 | return -1; | ||
| 120 | |||
| 121 | for (k = 0; k < (SH_MMCIF_BBS / 4); k++) | ||
| 122 | buf[k] = sh_mmcif_readl(base, MMCIF_CE_DATA); | ||
| 123 | |||
| 124 | return 0; | ||
| 125 | } | ||
| 126 | |||
| 127 | extern inline int sh_mmcif_boot_do_read(void __iomem *base, | ||
| 128 | unsigned long first_block, | ||
| 129 | unsigned long nr_blocks, | ||
| 130 | void *buf) | ||
| 131 | { | ||
| 132 | unsigned long k; | ||
| 133 | int ret = 0; | ||
| 134 | |||
| 135 | /* CMD16 - Set the block size */ | ||
| 136 | sh_mmcif_boot_cmd(base, 0x10400000, SH_MMCIF_BBS); | ||
| 137 | |||
| 138 | for (k = 0; !ret && k < nr_blocks; k++) | ||
| 139 | ret = sh_mmcif_boot_do_read_single(base, first_block + k, | ||
| 140 | buf + (k * SH_MMCIF_BBS)); | ||
| 141 | |||
| 142 | return ret; | ||
| 143 | } | ||
| 144 | |||
| 145 | extern inline void sh_mmcif_boot_init(void __iomem *base) | ||
| 146 | { | ||
| 147 | unsigned long tmp; | ||
| 148 | |||
| 149 | /* reset */ | ||
| 150 | tmp = sh_mmcif_readl(base, MMCIF_CE_VERSION); | ||
| 151 | sh_mmcif_writel(base, MMCIF_CE_VERSION, tmp | 0x80000000); | ||
| 152 | sh_mmcif_writel(base, MMCIF_CE_VERSION, tmp & ~0x80000000); | ||
| 153 | |||
| 154 | /* byte swap */ | ||
| 155 | sh_mmcif_writel(base, MMCIF_CE_BUF_ACC, 0x00010000); | ||
| 156 | |||
| 157 | /* Set block size in MMCIF hardware */ | ||
| 158 | sh_mmcif_writel(base, MMCIF_CE_BLOCK_SET, SH_MMCIF_BBS); | ||
| 159 | |||
| 160 | /* Enable the clock, set it to Bus clock/256 (about 325Khz)*/ | ||
| 161 | sh_mmcif_writel(base, MMCIF_CE_CLK_CTRL, 0x01072fff); | ||
| 162 | |||
| 163 | /* CMD0 */ | ||
| 164 | sh_mmcif_boot_cmd(base, 0x00000040, 0); | ||
| 165 | |||
| 166 | /* CMD1 - Get OCR */ | ||
| 167 | do { | ||
| 168 | sh_mmcif_boot_cmd(base, 0x01405040, 0x40300000); /* CMD1 */ | ||
| 169 | } while ((sh_mmcif_readl(base, MMCIF_CE_RESP0) & 0x80000000) | ||
| 170 | != 0x80000000); | ||
| 171 | |||
| 172 | /* CMD2 - Get CID */ | ||
| 173 | sh_mmcif_boot_cmd(base, 0x02806040, 0); | ||
| 174 | |||
| 175 | /* CMD3 - Set card relative address */ | ||
| 176 | sh_mmcif_boot_cmd(base, 0x03400040, 0x00010000); | ||
| 177 | } | ||
| 178 | |||
| 179 | extern inline void sh_mmcif_boot_slurp(void __iomem *base, | ||
| 180 | unsigned char *buf, | ||
| 181 | unsigned long no_bytes) | ||
| 182 | { | ||
| 183 | unsigned long tmp; | ||
| 184 | |||
| 185 | /* In data transfer mode: Set clock to Bus clock/4 (about 20Mhz) */ | ||
| 186 | sh_mmcif_writel(base, MMCIF_CE_CLK_CTRL, 0x01012fff); | ||
| 187 | |||
| 188 | /* CMD9 - Get CSD */ | ||
| 189 | sh_mmcif_boot_cmd(base, 0x09806000, 0x00010000); | ||
| 190 | |||
| 191 | /* CMD7 - Select the card */ | ||
| 192 | sh_mmcif_boot_cmd(base, 0x07400000, 0x00010000); | ||
| 193 | |||
| 194 | tmp = no_bytes / SH_MMCIF_BBS; | ||
| 195 | tmp += (no_bytes % SH_MMCIF_BBS) ? 1 : 0; | ||
| 196 | |||
| 197 | sh_mmcif_boot_do_read(base, 512, tmp, buf); | ||
| 198 | } | ||
| 199 | |||
| 200 | #endif /* __SH_MMCIF_H__ */ | ||
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index 0fa491326c4a..b4d109e389b8 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h | |||
| @@ -671,6 +671,12 @@ void memory_present(int nid, unsigned long start, unsigned long end); | |||
| 671 | static inline void memory_present(int nid, unsigned long start, unsigned long end) {} | 671 | static inline void memory_present(int nid, unsigned long start, unsigned long end) {} |
| 672 | #endif | 672 | #endif |
| 673 | 673 | ||
| 674 | #ifdef CONFIG_HAVE_MEMORYLESS_NODES | ||
| 675 | int local_memory_node(int node_id); | ||
| 676 | #else | ||
| 677 | static inline int local_memory_node(int node_id) { return node_id; }; | ||
| 678 | #endif | ||
| 679 | |||
| 674 | #ifdef CONFIG_NEED_NODE_MEMMAP_SIZE | 680 | #ifdef CONFIG_NEED_NODE_MEMMAP_SIZE |
| 675 | unsigned long __init node_memmap_size_bytes(int, unsigned long, unsigned long); | 681 | unsigned long __init node_memmap_size_bytes(int, unsigned long, unsigned long); |
| 676 | #endif | 682 | #endif |
diff --git a/include/linux/module.h b/include/linux/module.h index 6914fcad4673..8a6b9fdc7ffa 100644 --- a/include/linux/module.h +++ b/include/linux/module.h | |||
| @@ -181,6 +181,13 @@ void *__symbol_get(const char *symbol); | |||
| 181 | void *__symbol_get_gpl(const char *symbol); | 181 | void *__symbol_get_gpl(const char *symbol); |
| 182 | #define symbol_get(x) ((typeof(&x))(__symbol_get(MODULE_SYMBOL_PREFIX #x))) | 182 | #define symbol_get(x) ((typeof(&x))(__symbol_get(MODULE_SYMBOL_PREFIX #x))) |
| 183 | 183 | ||
| 184 | /* modules using other modules: kdb wants to see this. */ | ||
| 185 | struct module_use { | ||
| 186 | struct list_head source_list; | ||
| 187 | struct list_head target_list; | ||
| 188 | struct module *source, *target; | ||
| 189 | }; | ||
| 190 | |||
| 184 | #ifndef __GENKSYMS__ | 191 | #ifndef __GENKSYMS__ |
| 185 | #ifdef CONFIG_MODVERSIONS | 192 | #ifdef CONFIG_MODVERSIONS |
| 186 | /* Mark the CRC weak since genksyms apparently decides not to | 193 | /* Mark the CRC weak since genksyms apparently decides not to |
| @@ -359,7 +366,9 @@ struct module | |||
| 359 | 366 | ||
| 360 | #ifdef CONFIG_MODULE_UNLOAD | 367 | #ifdef CONFIG_MODULE_UNLOAD |
| 361 | /* What modules depend on me? */ | 368 | /* What modules depend on me? */ |
| 362 | struct list_head modules_which_use_me; | 369 | struct list_head source_list; |
| 370 | /* What modules do I depend on? */ | ||
| 371 | struct list_head target_list; | ||
| 363 | 372 | ||
| 364 | /* Who is waiting for us to be unloaded */ | 373 | /* Who is waiting for us to be unloaded */ |
| 365 | struct task_struct *waiter; | 374 | struct task_struct *waiter; |
| @@ -663,43 +672,10 @@ static inline int module_get_iter_tracepoints(struct tracepoint_iter *iter) | |||
| 663 | 672 | ||
| 664 | #endif /* CONFIG_MODULES */ | 673 | #endif /* CONFIG_MODULES */ |
| 665 | 674 | ||
| 666 | struct device_driver; | ||
| 667 | #ifdef CONFIG_SYSFS | 675 | #ifdef CONFIG_SYSFS |
| 668 | struct module; | ||
| 669 | |||
| 670 | extern struct kset *module_kset; | 676 | extern struct kset *module_kset; |
| 671 | extern struct kobj_type module_ktype; | 677 | extern struct kobj_type module_ktype; |
| 672 | extern int module_sysfs_initialized; | 678 | extern int module_sysfs_initialized; |
| 673 | |||
| 674 | int mod_sysfs_init(struct module *mod); | ||
| 675 | int mod_sysfs_setup(struct module *mod, | ||
| 676 | struct kernel_param *kparam, | ||
| 677 | unsigned int num_params); | ||
| 678 | int module_add_modinfo_attrs(struct module *mod); | ||
| 679 | void module_remove_modinfo_attrs(struct module *mod); | ||
| 680 | |||
| 681 | #else /* !CONFIG_SYSFS */ | ||
| 682 | |||
| 683 | static inline int mod_sysfs_init(struct module *mod) | ||
| 684 | { | ||
| 685 | return 0; | ||
| 686 | } | ||
| 687 | |||
| 688 | static inline int mod_sysfs_setup(struct module *mod, | ||
| 689 | struct kernel_param *kparam, | ||
| 690 | unsigned int num_params) | ||
| 691 | { | ||
| 692 | return 0; | ||
| 693 | } | ||
| 694 | |||
| 695 | static inline int module_add_modinfo_attrs(struct module *mod) | ||
| 696 | { | ||
| 697 | return 0; | ||
| 698 | } | ||
| 699 | |||
| 700 | static inline void module_remove_modinfo_attrs(struct module *mod) | ||
| 701 | { } | ||
| 702 | |||
| 703 | #endif /* CONFIG_SYSFS */ | 679 | #endif /* CONFIG_SYSFS */ |
| 704 | 680 | ||
| 705 | #define symbol_request(x) try_then_request_module(symbol_get(x), "symbol:" #x) | 681 | #define symbol_request(x) try_then_request_module(symbol_get(x), "symbol:" #x) |
diff --git a/include/linux/netfilter/x_tables.h b/include/linux/netfilter/x_tables.h index c00cc0c4d0b7..24e5d01d27d0 100644 --- a/include/linux/netfilter/x_tables.h +++ b/include/linux/netfilter/x_tables.h | |||
| @@ -397,7 +397,7 @@ struct xt_table_info { | |||
| 397 | * @stacksize jumps (number of user chains) can possibly be made. | 397 | * @stacksize jumps (number of user chains) can possibly be made. |
| 398 | */ | 398 | */ |
| 399 | unsigned int stacksize; | 399 | unsigned int stacksize; |
| 400 | unsigned int *stackptr; | 400 | unsigned int __percpu *stackptr; |
| 401 | void ***jumpstack; | 401 | void ***jumpstack; |
| 402 | /* ipt_entry tables: one per CPU */ | 402 | /* ipt_entry tables: one per CPU */ |
| 403 | /* Note : this field MUST be the last one, see XT_TABLE_INFO_SZ */ | 403 | /* Note : this field MUST be the last one, see XT_TABLE_INFO_SZ */ |
diff --git a/include/linux/notifier.h b/include/linux/notifier.h index 7c3609622334..540703b555cb 100644 --- a/include/linux/notifier.h +++ b/include/linux/notifier.h | |||
| @@ -164,7 +164,10 @@ extern int __srcu_notifier_call_chain(struct srcu_notifier_head *nh, | |||
| 164 | /* Encapsulate (negative) errno value (in particular, NOTIFY_BAD <=> EPERM). */ | 164 | /* Encapsulate (negative) errno value (in particular, NOTIFY_BAD <=> EPERM). */ |
| 165 | static inline int notifier_from_errno(int err) | 165 | static inline int notifier_from_errno(int err) |
| 166 | { | 166 | { |
| 167 | return NOTIFY_STOP_MASK | (NOTIFY_OK - err); | 167 | if (err) |
| 168 | return NOTIFY_STOP_MASK | (NOTIFY_OK - err); | ||
| 169 | |||
| 170 | return NOTIFY_OK; | ||
| 168 | } | 171 | } |
| 169 | 172 | ||
| 170 | /* Restore (negative) errno value from notify return value. */ | 173 | /* Restore (negative) errno value from notify return value. */ |
diff --git a/include/linux/page_cgroup.h b/include/linux/page_cgroup.h index aef22ae2af47..5bb13b3db84d 100644 --- a/include/linux/page_cgroup.h +++ b/include/linux/page_cgroup.h | |||
| @@ -40,6 +40,7 @@ enum { | |||
| 40 | PCG_USED, /* this object is in use. */ | 40 | PCG_USED, /* this object is in use. */ |
| 41 | PCG_ACCT_LRU, /* page has been accounted for */ | 41 | PCG_ACCT_LRU, /* page has been accounted for */ |
| 42 | PCG_FILE_MAPPED, /* page is accounted as "mapped" */ | 42 | PCG_FILE_MAPPED, /* page is accounted as "mapped" */ |
| 43 | PCG_MIGRATION, /* under page migration */ | ||
| 43 | }; | 44 | }; |
| 44 | 45 | ||
| 45 | #define TESTPCGFLAG(uname, lname) \ | 46 | #define TESTPCGFLAG(uname, lname) \ |
| @@ -79,6 +80,10 @@ SETPCGFLAG(FileMapped, FILE_MAPPED) | |||
| 79 | CLEARPCGFLAG(FileMapped, FILE_MAPPED) | 80 | CLEARPCGFLAG(FileMapped, FILE_MAPPED) |
| 80 | TESTPCGFLAG(FileMapped, FILE_MAPPED) | 81 | TESTPCGFLAG(FileMapped, FILE_MAPPED) |
| 81 | 82 | ||
| 83 | SETPCGFLAG(Migration, MIGRATION) | ||
| 84 | CLEARPCGFLAG(Migration, MIGRATION) | ||
| 85 | TESTPCGFLAG(Migration, MIGRATION) | ||
| 86 | |||
| 82 | static inline int page_cgroup_nid(struct page_cgroup *pc) | 87 | static inline int page_cgroup_nid(struct page_cgroup *pc) |
| 83 | { | 88 | { |
| 84 | return page_to_nid(pc->page); | 89 | return page_to_nid(pc->page); |
diff --git a/include/linux/pci.h b/include/linux/pci.h index a327322a33ab..7cb00845f150 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h | |||
| @@ -311,7 +311,8 @@ struct pci_dev { | |||
| 311 | unsigned int is_virtfn:1; | 311 | unsigned int is_virtfn:1; |
| 312 | unsigned int reset_fn:1; | 312 | unsigned int reset_fn:1; |
| 313 | unsigned int is_hotplug_bridge:1; | 313 | unsigned int is_hotplug_bridge:1; |
| 314 | unsigned int aer_firmware_first:1; | 314 | unsigned int __aer_firmware_first_valid:1; |
| 315 | unsigned int __aer_firmware_first:1; | ||
| 315 | pci_dev_flags_t dev_flags; | 316 | pci_dev_flags_t dev_flags; |
| 316 | atomic_t enable_cnt; /* pci_enable_device has been called */ | 317 | atomic_t enable_cnt; /* pci_enable_device has been called */ |
| 317 | 318 | ||
| @@ -631,6 +632,7 @@ void pci_fixup_cardbus(struct pci_bus *); | |||
| 631 | 632 | ||
| 632 | /* Generic PCI functions used internally */ | 633 | /* Generic PCI functions used internally */ |
| 633 | 634 | ||
| 635 | void pcibios_scan_specific_bus(int busn); | ||
| 634 | extern struct pci_bus *pci_find_bus(int domain, int busnr); | 636 | extern struct pci_bus *pci_find_bus(int domain, int busnr); |
| 635 | void pci_bus_add_devices(const struct pci_bus *bus); | 637 | void pci_bus_add_devices(const struct pci_bus *bus); |
| 636 | struct pci_bus *pci_scan_bus_parented(struct device *parent, int bus, | 638 | struct pci_bus *pci_scan_bus_parented(struct device *parent, int bus, |
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index ae66851870be..4eb467910a45 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
| @@ -2321,6 +2321,7 @@ | |||
| 2321 | #define PCI_VENDOR_ID_JMICRON 0x197B | 2321 | #define PCI_VENDOR_ID_JMICRON 0x197B |
| 2322 | #define PCI_DEVICE_ID_JMICRON_JMB360 0x2360 | 2322 | #define PCI_DEVICE_ID_JMICRON_JMB360 0x2360 |
| 2323 | #define PCI_DEVICE_ID_JMICRON_JMB361 0x2361 | 2323 | #define PCI_DEVICE_ID_JMICRON_JMB361 0x2361 |
| 2324 | #define PCI_DEVICE_ID_JMICRON_JMB362 0x2362 | ||
| 2324 | #define PCI_DEVICE_ID_JMICRON_JMB363 0x2363 | 2325 | #define PCI_DEVICE_ID_JMICRON_JMB363 0x2363 |
| 2325 | #define PCI_DEVICE_ID_JMICRON_JMB365 0x2365 | 2326 | #define PCI_DEVICE_ID_JMICRON_JMB365 0x2365 |
| 2326 | #define PCI_DEVICE_ID_JMICRON_JMB366 0x2366 | 2327 | #define PCI_DEVICE_ID_JMICRON_JMB366 0x2366 |
| @@ -2532,11 +2533,63 @@ | |||
| 2532 | #define PCI_DEVICE_ID_INTEL_ICH9_6 0x2930 | 2533 | #define PCI_DEVICE_ID_INTEL_ICH9_6 0x2930 |
| 2533 | #define PCI_DEVICE_ID_INTEL_ICH9_7 0x2916 | 2534 | #define PCI_DEVICE_ID_INTEL_ICH9_7 0x2916 |
| 2534 | #define PCI_DEVICE_ID_INTEL_ICH9_8 0x2918 | 2535 | #define PCI_DEVICE_ID_INTEL_ICH9_8 0x2918 |
| 2536 | #define PCI_DEVICE_ID_INTEL_I7_MCR 0x2c18 | ||
| 2537 | #define PCI_DEVICE_ID_INTEL_I7_MC_TAD 0x2c19 | ||
| 2538 | #define PCI_DEVICE_ID_INTEL_I7_MC_RAS 0x2c1a | ||
| 2539 | #define PCI_DEVICE_ID_INTEL_I7_MC_TEST 0x2c1c | ||
| 2540 | #define PCI_DEVICE_ID_INTEL_I7_MC_CH0_CTRL 0x2c20 | ||
| 2541 | #define PCI_DEVICE_ID_INTEL_I7_MC_CH0_ADDR 0x2c21 | ||
| 2542 | #define PCI_DEVICE_ID_INTEL_I7_MC_CH0_RANK 0x2c22 | ||
| 2543 | #define PCI_DEVICE_ID_INTEL_I7_MC_CH0_TC 0x2c23 | ||
| 2544 | #define PCI_DEVICE_ID_INTEL_I7_MC_CH1_CTRL 0x2c28 | ||
| 2545 | #define PCI_DEVICE_ID_INTEL_I7_MC_CH1_ADDR 0x2c29 | ||
| 2546 | #define PCI_DEVICE_ID_INTEL_I7_MC_CH1_RANK 0x2c2a | ||
| 2547 | #define PCI_DEVICE_ID_INTEL_I7_MC_CH1_TC 0x2c2b | ||
| 2548 | #define PCI_DEVICE_ID_INTEL_I7_MC_CH2_CTRL 0x2c30 | ||
| 2549 | #define PCI_DEVICE_ID_INTEL_I7_MC_CH2_ADDR 0x2c31 | ||
| 2550 | #define PCI_DEVICE_ID_INTEL_I7_MC_CH2_RANK 0x2c32 | ||
| 2551 | #define PCI_DEVICE_ID_INTEL_I7_MC_CH2_TC 0x2c33 | ||
| 2552 | #define PCI_DEVICE_ID_INTEL_I7_NONCORE 0x2c41 | ||
| 2553 | #define PCI_DEVICE_ID_INTEL_I7_NONCORE_ALT 0x2c40 | ||
| 2554 | #define PCI_DEVICE_ID_INTEL_LYNNFIELD_NONCORE 0x2c50 | ||
| 2555 | #define PCI_DEVICE_ID_INTEL_LYNNFIELD_NONCORE_ALT 0x2c51 | ||
| 2556 | #define PCI_DEVICE_ID_INTEL_LYNNFIELD_NONCORE_REV2 0x2c70 | ||
| 2557 | #define PCI_DEVICE_ID_INTEL_LYNNFIELD_SAD 0x2c81 | ||
| 2558 | #define PCI_DEVICE_ID_INTEL_LYNNFIELD_QPI_LINK0 0x2c90 | ||
| 2559 | #define PCI_DEVICE_ID_INTEL_LYNNFIELD_QPI_PHY0 0x2c91 | ||
| 2560 | #define PCI_DEVICE_ID_INTEL_LYNNFIELD_MCR 0x2c98 | ||
| 2561 | #define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_TAD 0x2c99 | ||
| 2562 | #define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_TEST 0x2c9C | ||
| 2563 | #define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH0_CTRL 0x2ca0 | ||
| 2564 | #define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH0_ADDR 0x2ca1 | ||
| 2565 | #define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH0_RANK 0x2ca2 | ||
| 2566 | #define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH0_TC 0x2ca3 | ||
| 2567 | #define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH1_CTRL 0x2ca8 | ||
| 2568 | #define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH1_ADDR 0x2ca9 | ||
| 2569 | #define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH1_RANK 0x2caa | ||
| 2570 | #define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH1_TC 0x2cab | ||
| 2571 | #define PCI_DEVICE_ID_INTEL_LYNNFIELD_MCR_REV2 0x2d98 | ||
| 2572 | #define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_TAD_REV2 0x2d99 | ||
| 2573 | #define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_RAS_REV2 0x2d9a | ||
| 2574 | #define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_TEST_REV2 0x2d9c | ||
| 2575 | #define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH0_CTRL_REV2 0x2da0 | ||
| 2576 | #define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH0_ADDR_REV2 0x2da1 | ||
| 2577 | #define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH0_RANK_REV2 0x2da2 | ||
| 2578 | #define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH0_TC_REV2 0x2da3 | ||
| 2579 | #define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH1_CTRL_REV2 0x2da8 | ||
| 2580 | #define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH1_ADDR_REV2 0x2da9 | ||
| 2581 | #define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH1_RANK_REV2 0x2daa | ||
| 2582 | #define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH1_TC_REV2 0x2dab | ||
| 2583 | #define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH2_CTRL_REV2 0x2db0 | ||
| 2584 | #define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH2_ADDR_REV2 0x2db1 | ||
| 2585 | #define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH2_RANK_REV2 0x2db2 | ||
| 2586 | #define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH2_TC_REV2 0x2db3 | ||
| 2535 | #define PCI_DEVICE_ID_INTEL_82855PM_HB 0x3340 | 2587 | #define PCI_DEVICE_ID_INTEL_82855PM_HB 0x3340 |
| 2536 | #define PCI_DEVICE_ID_INTEL_IOAT_TBG4 0x3429 | 2588 | #define PCI_DEVICE_ID_INTEL_IOAT_TBG4 0x3429 |
| 2537 | #define PCI_DEVICE_ID_INTEL_IOAT_TBG5 0x342a | 2589 | #define PCI_DEVICE_ID_INTEL_IOAT_TBG5 0x342a |
| 2538 | #define PCI_DEVICE_ID_INTEL_IOAT_TBG6 0x342b | 2590 | #define PCI_DEVICE_ID_INTEL_IOAT_TBG6 0x342b |
| 2539 | #define PCI_DEVICE_ID_INTEL_IOAT_TBG7 0x342c | 2591 | #define PCI_DEVICE_ID_INTEL_IOAT_TBG7 0x342c |
| 2592 | #define PCI_DEVICE_ID_INTEL_X58_HUB_MGMT 0x342e | ||
| 2540 | #define PCI_DEVICE_ID_INTEL_IOAT_TBG0 0x3430 | 2593 | #define PCI_DEVICE_ID_INTEL_IOAT_TBG0 0x3430 |
| 2541 | #define PCI_DEVICE_ID_INTEL_IOAT_TBG1 0x3431 | 2594 | #define PCI_DEVICE_ID_INTEL_IOAT_TBG1 0x3431 |
| 2542 | #define PCI_DEVICE_ID_INTEL_IOAT_TBG2 0x3432 | 2595 | #define PCI_DEVICE_ID_INTEL_IOAT_TBG2 0x3432 |
diff --git a/include/linux/percpu-defs.h b/include/linux/percpu-defs.h index 68567c0b3a5d..ce2dc655cd1d 100644 --- a/include/linux/percpu-defs.h +++ b/include/linux/percpu-defs.h | |||
| @@ -131,11 +131,11 @@ | |||
| 131 | * Declaration/definition used for per-CPU variables that must be page aligned. | 131 | * Declaration/definition used for per-CPU variables that must be page aligned. |
| 132 | */ | 132 | */ |
| 133 | #define DECLARE_PER_CPU_PAGE_ALIGNED(type, name) \ | 133 | #define DECLARE_PER_CPU_PAGE_ALIGNED(type, name) \ |
| 134 | DECLARE_PER_CPU_SECTION(type, name, ".page_aligned") \ | 134 | DECLARE_PER_CPU_SECTION(type, name, "..page_aligned") \ |
| 135 | __aligned(PAGE_SIZE) | 135 | __aligned(PAGE_SIZE) |
| 136 | 136 | ||
| 137 | #define DEFINE_PER_CPU_PAGE_ALIGNED(type, name) \ | 137 | #define DEFINE_PER_CPU_PAGE_ALIGNED(type, name) \ |
| 138 | DEFINE_PER_CPU_SECTION(type, name, ".page_aligned") \ | 138 | DEFINE_PER_CPU_SECTION(type, name, "..page_aligned") \ |
| 139 | __aligned(PAGE_SIZE) | 139 | __aligned(PAGE_SIZE) |
| 140 | 140 | ||
| 141 | /* | 141 | /* |
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h index 3fd5c82e0e18..5d0266d94985 100644 --- a/include/linux/perf_event.h +++ b/include/linux/perf_event.h | |||
| @@ -485,6 +485,7 @@ struct perf_guest_info_callbacks { | |||
| 485 | #include <linux/ftrace.h> | 485 | #include <linux/ftrace.h> |
| 486 | #include <linux/cpu.h> | 486 | #include <linux/cpu.h> |
| 487 | #include <asm/atomic.h> | 487 | #include <asm/atomic.h> |
| 488 | #include <asm/local.h> | ||
| 488 | 489 | ||
| 489 | #define PERF_MAX_STACK_DEPTH 255 | 490 | #define PERF_MAX_STACK_DEPTH 255 |
| 490 | 491 | ||
| @@ -584,24 +585,22 @@ enum perf_event_active_state { | |||
| 584 | struct file; | 585 | struct file; |
| 585 | 586 | ||
| 586 | struct perf_mmap_data { | 587 | struct perf_mmap_data { |
| 588 | atomic_t refcount; | ||
| 587 | struct rcu_head rcu_head; | 589 | struct rcu_head rcu_head; |
| 588 | #ifdef CONFIG_PERF_USE_VMALLOC | 590 | #ifdef CONFIG_PERF_USE_VMALLOC |
| 589 | struct work_struct work; | 591 | struct work_struct work; |
| 592 | int page_order; /* allocation order */ | ||
| 590 | #endif | 593 | #endif |
| 591 | int data_order; | ||
| 592 | int nr_pages; /* nr of data pages */ | 594 | int nr_pages; /* nr of data pages */ |
| 593 | int writable; /* are we writable */ | 595 | int writable; /* are we writable */ |
| 594 | int nr_locked; /* nr pages mlocked */ | ||
| 595 | 596 | ||
| 596 | atomic_t poll; /* POLL_ for wakeups */ | 597 | atomic_t poll; /* POLL_ for wakeups */ |
| 597 | atomic_t events; /* event_id limit */ | ||
| 598 | |||
| 599 | atomic_long_t head; /* write position */ | ||
| 600 | atomic_long_t done_head; /* completed head */ | ||
| 601 | 598 | ||
| 602 | atomic_t lock; /* concurrent writes */ | 599 | local_t head; /* write position */ |
| 603 | atomic_t wakeup; /* needs a wakeup */ | 600 | local_t nest; /* nested writers */ |
| 604 | atomic_t lost; /* nr records lost */ | 601 | local_t events; /* event limit */ |
| 602 | local_t wakeup; /* wakeup stamp */ | ||
| 603 | local_t lost; /* nr records lost */ | ||
| 605 | 604 | ||
| 606 | long watermark; /* wakeup watermark */ | 605 | long watermark; /* wakeup watermark */ |
| 607 | 606 | ||
| @@ -632,6 +631,9 @@ struct swevent_hlist { | |||
| 632 | struct rcu_head rcu_head; | 631 | struct rcu_head rcu_head; |
| 633 | }; | 632 | }; |
| 634 | 633 | ||
| 634 | #define PERF_ATTACH_CONTEXT 0x01 | ||
| 635 | #define PERF_ATTACH_GROUP 0x02 | ||
| 636 | |||
| 635 | /** | 637 | /** |
| 636 | * struct perf_event - performance event kernel representation: | 638 | * struct perf_event - performance event kernel representation: |
| 637 | */ | 639 | */ |
| @@ -644,10 +646,10 @@ struct perf_event { | |||
| 644 | int nr_siblings; | 646 | int nr_siblings; |
| 645 | int group_flags; | 647 | int group_flags; |
| 646 | struct perf_event *group_leader; | 648 | struct perf_event *group_leader; |
| 647 | struct perf_event *output; | ||
| 648 | const struct pmu *pmu; | 649 | const struct pmu *pmu; |
| 649 | 650 | ||
| 650 | enum perf_event_active_state state; | 651 | enum perf_event_active_state state; |
| 652 | unsigned int attach_state; | ||
| 651 | atomic64_t count; | 653 | atomic64_t count; |
| 652 | 654 | ||
| 653 | /* | 655 | /* |
| @@ -705,6 +707,8 @@ struct perf_event { | |||
| 705 | /* mmap bits */ | 707 | /* mmap bits */ |
| 706 | struct mutex mmap_mutex; | 708 | struct mutex mmap_mutex; |
| 707 | atomic_t mmap_count; | 709 | atomic_t mmap_count; |
| 710 | int mmap_locked; | ||
| 711 | struct user_struct *mmap_user; | ||
| 708 | struct perf_mmap_data *data; | 712 | struct perf_mmap_data *data; |
| 709 | 713 | ||
| 710 | /* poll related */ | 714 | /* poll related */ |
| @@ -728,6 +732,7 @@ struct perf_event { | |||
| 728 | perf_overflow_handler_t overflow_handler; | 732 | perf_overflow_handler_t overflow_handler; |
| 729 | 733 | ||
| 730 | #ifdef CONFIG_EVENT_TRACING | 734 | #ifdef CONFIG_EVENT_TRACING |
| 735 | struct ftrace_event_call *tp_event; | ||
| 731 | struct event_filter *filter; | 736 | struct event_filter *filter; |
| 732 | #endif | 737 | #endif |
| 733 | 738 | ||
| @@ -803,11 +808,12 @@ struct perf_cpu_context { | |||
| 803 | struct perf_output_handle { | 808 | struct perf_output_handle { |
| 804 | struct perf_event *event; | 809 | struct perf_event *event; |
| 805 | struct perf_mmap_data *data; | 810 | struct perf_mmap_data *data; |
| 806 | unsigned long head; | 811 | unsigned long wakeup; |
| 807 | unsigned long offset; | 812 | unsigned long size; |
| 813 | void *addr; | ||
| 814 | int page; | ||
| 808 | int nmi; | 815 | int nmi; |
| 809 | int sample; | 816 | int sample; |
| 810 | int locked; | ||
| 811 | }; | 817 | }; |
| 812 | 818 | ||
| 813 | #ifdef CONFIG_PERF_EVENTS | 819 | #ifdef CONFIG_PERF_EVENTS |
| @@ -993,8 +999,9 @@ static inline bool perf_paranoid_kernel(void) | |||
| 993 | } | 999 | } |
| 994 | 1000 | ||
| 995 | extern void perf_event_init(void); | 1001 | extern void perf_event_init(void); |
| 996 | extern void perf_tp_event(int event_id, u64 addr, u64 count, void *record, | 1002 | extern void perf_tp_event(u64 addr, u64 count, void *record, |
| 997 | int entry_size, struct pt_regs *regs); | 1003 | int entry_size, struct pt_regs *regs, |
| 1004 | struct hlist_head *head); | ||
| 998 | extern void perf_bp_event(struct perf_event *event, void *data); | 1005 | extern void perf_bp_event(struct perf_event *event, void *data); |
| 999 | 1006 | ||
| 1000 | #ifndef perf_misc_flags | 1007 | #ifndef perf_misc_flags |
diff --git a/include/linux/personality.h b/include/linux/personality.h index 126120819a0d..eec3bae164d4 100644 --- a/include/linux/personality.h +++ b/include/linux/personality.h | |||
| @@ -12,7 +12,7 @@ struct pt_regs; | |||
| 12 | 12 | ||
| 13 | extern int register_exec_domain(struct exec_domain *); | 13 | extern int register_exec_domain(struct exec_domain *); |
| 14 | extern int unregister_exec_domain(struct exec_domain *); | 14 | extern int unregister_exec_domain(struct exec_domain *); |
| 15 | extern int __set_personality(unsigned long); | 15 | extern int __set_personality(unsigned int); |
| 16 | 16 | ||
| 17 | #endif /* __KERNEL__ */ | 17 | #endif /* __KERNEL__ */ |
| 18 | 18 | ||
diff --git a/include/linux/pipe_fs_i.h b/include/linux/pipe_fs_i.h index 16de3933c45e..445796945ac9 100644 --- a/include/linux/pipe_fs_i.h +++ b/include/linux/pipe_fs_i.h | |||
| @@ -139,7 +139,9 @@ void pipe_lock(struct pipe_inode_info *); | |||
| 139 | void pipe_unlock(struct pipe_inode_info *); | 139 | void pipe_unlock(struct pipe_inode_info *); |
| 140 | void pipe_double_lock(struct pipe_inode_info *, struct pipe_inode_info *); | 140 | void pipe_double_lock(struct pipe_inode_info *, struct pipe_inode_info *); |
| 141 | 141 | ||
| 142 | extern unsigned int pipe_max_pages; | 142 | extern unsigned int pipe_max_size, pipe_min_size; |
| 143 | int pipe_proc_fn(struct ctl_table *, int, void __user *, size_t *, loff_t *); | ||
| 144 | |||
| 143 | 145 | ||
| 144 | /* Drop the inode semaphore and wait for a pipe event, atomically */ | 146 | /* Drop the inode semaphore and wait for a pipe event, atomically */ |
| 145 | void pipe_wait(struct pipe_inode_info *pipe); | 147 | void pipe_wait(struct pipe_inode_info *pipe); |
diff --git a/include/linux/quota.h b/include/linux/quota.h index 7126a15467f1..94c1f03b50eb 100644 --- a/include/linux/quota.h +++ b/include/linux/quota.h | |||
| @@ -174,8 +174,7 @@ enum { | |||
| 174 | #include <linux/rwsem.h> | 174 | #include <linux/rwsem.h> |
| 175 | #include <linux/spinlock.h> | 175 | #include <linux/spinlock.h> |
| 176 | #include <linux/wait.h> | 176 | #include <linux/wait.h> |
| 177 | #include <linux/percpu.h> | 177 | #include <linux/percpu_counter.h> |
| 178 | #include <linux/smp.h> | ||
| 179 | 178 | ||
| 180 | #include <linux/dqblk_xfs.h> | 179 | #include <linux/dqblk_xfs.h> |
| 181 | #include <linux/dqblk_v1.h> | 180 | #include <linux/dqblk_v1.h> |
| @@ -254,6 +253,7 @@ enum { | |||
| 254 | 253 | ||
| 255 | struct dqstats { | 254 | struct dqstats { |
| 256 | int stat[_DQST_DQSTAT_LAST]; | 255 | int stat[_DQST_DQSTAT_LAST]; |
| 256 | struct percpu_counter counter[_DQST_DQSTAT_LAST]; | ||
| 257 | }; | 257 | }; |
| 258 | 258 | ||
| 259 | extern struct dqstats *dqstats_pcpu; | 259 | extern struct dqstats *dqstats_pcpu; |
| @@ -261,20 +261,12 @@ extern struct dqstats dqstats; | |||
| 261 | 261 | ||
| 262 | static inline void dqstats_inc(unsigned int type) | 262 | static inline void dqstats_inc(unsigned int type) |
| 263 | { | 263 | { |
| 264 | #ifdef CONFIG_SMP | 264 | percpu_counter_inc(&dqstats.counter[type]); |
| 265 | per_cpu_ptr(dqstats_pcpu, smp_processor_id())->stat[type]++; | ||
| 266 | #else | ||
| 267 | dqstats.stat[type]++; | ||
| 268 | #endif | ||
| 269 | } | 265 | } |
| 270 | 266 | ||
| 271 | static inline void dqstats_dec(unsigned int type) | 267 | static inline void dqstats_dec(unsigned int type) |
| 272 | { | 268 | { |
| 273 | #ifdef CONFIG_SMP | 269 | percpu_counter_dec(&dqstats.counter[type]); |
| 274 | per_cpu_ptr(dqstats_pcpu, smp_processor_id())->stat[type]--; | ||
| 275 | #else | ||
| 276 | dqstats.stat[type]--; | ||
| 277 | #endif | ||
| 278 | } | 270 | } |
| 279 | 271 | ||
| 280 | #define DQ_MOD_B 0 /* dquot modified since read */ | 272 | #define DQ_MOD_B 0 /* dquot modified since read */ |
| @@ -332,8 +324,8 @@ struct dquot_operations { | |||
| 332 | 324 | ||
| 333 | /* Operations handling requests from userspace */ | 325 | /* Operations handling requests from userspace */ |
| 334 | struct quotactl_ops { | 326 | struct quotactl_ops { |
| 335 | int (*quota_on)(struct super_block *, int, int, char *, int); | 327 | int (*quota_on)(struct super_block *, int, int, char *); |
| 336 | int (*quota_off)(struct super_block *, int, int); | 328 | int (*quota_off)(struct super_block *, int); |
| 337 | int (*quota_sync)(struct super_block *, int, int); | 329 | int (*quota_sync)(struct super_block *, int, int); |
| 338 | int (*get_info)(struct super_block *, int, struct if_dqinfo *); | 330 | int (*get_info)(struct super_block *, int, struct if_dqinfo *); |
| 339 | int (*set_info)(struct super_block *, int, struct if_dqinfo *); | 331 | int (*set_info)(struct super_block *, int, struct if_dqinfo *); |
diff --git a/include/linux/quotaops.h b/include/linux/quotaops.h index 370abb1e99cb..aa36793b48bd 100644 --- a/include/linux/quotaops.h +++ b/include/linux/quotaops.h | |||
| @@ -9,6 +9,10 @@ | |||
| 9 | 9 | ||
| 10 | #include <linux/fs.h> | 10 | #include <linux/fs.h> |
| 11 | 11 | ||
| 12 | #define DQUOT_SPACE_WARN 0x1 | ||
| 13 | #define DQUOT_SPACE_RESERVE 0x2 | ||
| 14 | #define DQUOT_SPACE_NOFAIL 0x4 | ||
| 15 | |||
| 12 | static inline struct quota_info *sb_dqopt(struct super_block *sb) | 16 | static inline struct quota_info *sb_dqopt(struct super_block *sb) |
| 13 | { | 17 | { |
| 14 | return &sb->s_dquot; | 18 | return &sb->s_dquot; |
| @@ -41,15 +45,22 @@ int dquot_scan_active(struct super_block *sb, | |||
| 41 | struct dquot *dquot_alloc(struct super_block *sb, int type); | 45 | struct dquot *dquot_alloc(struct super_block *sb, int type); |
| 42 | void dquot_destroy(struct dquot *dquot); | 46 | void dquot_destroy(struct dquot *dquot); |
| 43 | 47 | ||
| 44 | int __dquot_alloc_space(struct inode *inode, qsize_t number, | 48 | int __dquot_alloc_space(struct inode *inode, qsize_t number, int flags); |
| 45 | int warn, int reserve); | 49 | void __dquot_free_space(struct inode *inode, qsize_t number, int flags); |
| 46 | void __dquot_free_space(struct inode *inode, qsize_t number, int reserve); | ||
| 47 | 50 | ||
| 48 | int dquot_alloc_inode(const struct inode *inode); | 51 | int dquot_alloc_inode(const struct inode *inode); |
| 49 | 52 | ||
| 50 | int dquot_claim_space_nodirty(struct inode *inode, qsize_t number); | 53 | int dquot_claim_space_nodirty(struct inode *inode, qsize_t number); |
| 51 | void dquot_free_inode(const struct inode *inode); | 54 | void dquot_free_inode(const struct inode *inode); |
| 52 | 55 | ||
| 56 | int dquot_disable(struct super_block *sb, int type, unsigned int flags); | ||
| 57 | /* Suspend quotas on remount RO */ | ||
| 58 | static inline int dquot_suspend(struct super_block *sb, int type) | ||
| 59 | { | ||
| 60 | return dquot_disable(sb, type, DQUOT_SUSPENDED); | ||
| 61 | } | ||
| 62 | int dquot_resume(struct super_block *sb, int type); | ||
| 63 | |||
| 53 | int dquot_commit(struct dquot *dquot); | 64 | int dquot_commit(struct dquot *dquot); |
| 54 | int dquot_acquire(struct dquot *dquot); | 65 | int dquot_acquire(struct dquot *dquot); |
| 55 | int dquot_release(struct dquot *dquot); | 66 | int dquot_release(struct dquot *dquot); |
| @@ -58,27 +69,25 @@ int dquot_mark_dquot_dirty(struct dquot *dquot); | |||
| 58 | 69 | ||
| 59 | int dquot_file_open(struct inode *inode, struct file *file); | 70 | int dquot_file_open(struct inode *inode, struct file *file); |
| 60 | 71 | ||
| 61 | int vfs_quota_on(struct super_block *sb, int type, int format_id, | 72 | int dquot_quota_on(struct super_block *sb, int type, int format_id, |
| 62 | char *path, int remount); | 73 | char *path); |
| 63 | int vfs_quota_enable(struct inode *inode, int type, int format_id, | 74 | int dquot_enable(struct inode *inode, int type, int format_id, |
| 64 | unsigned int flags); | 75 | unsigned int flags); |
| 65 | int vfs_quota_on_path(struct super_block *sb, int type, int format_id, | 76 | int dquot_quota_on_path(struct super_block *sb, int type, int format_id, |
| 66 | struct path *path); | 77 | struct path *path); |
| 67 | int vfs_quota_on_mount(struct super_block *sb, char *qf_name, | 78 | int dquot_quota_on_mount(struct super_block *sb, char *qf_name, |
| 68 | int format_id, int type); | 79 | int format_id, int type); |
| 69 | int vfs_quota_off(struct super_block *sb, int type, int remount); | 80 | int dquot_quota_off(struct super_block *sb, int type); |
| 70 | int vfs_quota_disable(struct super_block *sb, int type, unsigned int flags); | 81 | int dquot_quota_sync(struct super_block *sb, int type, int wait); |
| 71 | int vfs_quota_sync(struct super_block *sb, int type, int wait); | 82 | int dquot_get_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii); |
| 72 | int vfs_get_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii); | 83 | int dquot_set_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii); |
| 73 | int vfs_set_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii); | 84 | int dquot_get_dqblk(struct super_block *sb, int type, qid_t id, |
| 74 | int vfs_get_dqblk(struct super_block *sb, int type, qid_t id, | ||
| 75 | struct fs_disk_quota *di); | 85 | struct fs_disk_quota *di); |
| 76 | int vfs_set_dqblk(struct super_block *sb, int type, qid_t id, | 86 | int dquot_set_dqblk(struct super_block *sb, int type, qid_t id, |
| 77 | struct fs_disk_quota *di); | 87 | struct fs_disk_quota *di); |
| 78 | 88 | ||
| 79 | int __dquot_transfer(struct inode *inode, struct dquot **transfer_to); | 89 | int __dquot_transfer(struct inode *inode, struct dquot **transfer_to); |
| 80 | int dquot_transfer(struct inode *inode, struct iattr *iattr); | 90 | int dquot_transfer(struct inode *inode, struct iattr *iattr); |
| 81 | int vfs_dq_quota_on_remount(struct super_block *sb); | ||
| 82 | 91 | ||
| 83 | static inline struct mem_dqinfo *sb_dqinfo(struct super_block *sb, int type) | 92 | static inline struct mem_dqinfo *sb_dqinfo(struct super_block *sb, int type) |
| 84 | { | 93 | { |
| @@ -145,20 +154,7 @@ static inline unsigned sb_any_quota_active(struct super_block *sb) | |||
| 145 | * Operations supported for diskquotas. | 154 | * Operations supported for diskquotas. |
| 146 | */ | 155 | */ |
| 147 | extern const struct dquot_operations dquot_operations; | 156 | extern const struct dquot_operations dquot_operations; |
| 148 | extern const struct quotactl_ops vfs_quotactl_ops; | 157 | extern const struct quotactl_ops dquot_quotactl_ops; |
| 149 | |||
| 150 | #define sb_dquot_ops (&dquot_operations) | ||
| 151 | #define sb_quotactl_ops (&vfs_quotactl_ops) | ||
| 152 | |||
| 153 | /* Cannot be called inside a transaction */ | ||
| 154 | static inline int vfs_dq_off(struct super_block *sb, int remount) | ||
| 155 | { | ||
| 156 | int ret = -ENOSYS; | ||
| 157 | |||
| 158 | if (sb->s_qcop && sb->s_qcop->quota_off) | ||
| 159 | ret = sb->s_qcop->quota_off(sb, -1, remount); | ||
| 160 | return ret; | ||
| 161 | } | ||
| 162 | 158 | ||
| 163 | #else | 159 | #else |
| 164 | 160 | ||
| @@ -203,12 +199,6 @@ static inline int sb_any_quota_active(struct super_block *sb) | |||
| 203 | return 0; | 199 | return 0; |
| 204 | } | 200 | } |
| 205 | 201 | ||
| 206 | /* | ||
| 207 | * NO-OP when quota not configured. | ||
| 208 | */ | ||
| 209 | #define sb_dquot_ops (NULL) | ||
| 210 | #define sb_quotactl_ops (NULL) | ||
| 211 | |||
| 212 | static inline void dquot_initialize(struct inode *inode) | 202 | static inline void dquot_initialize(struct inode *inode) |
| 213 | { | 203 | { |
| 214 | } | 204 | } |
| @@ -226,39 +216,45 @@ static inline void dquot_free_inode(const struct inode *inode) | |||
| 226 | { | 216 | { |
| 227 | } | 217 | } |
| 228 | 218 | ||
| 229 | static inline int vfs_dq_off(struct super_block *sb, int remount) | 219 | static inline int dquot_transfer(struct inode *inode, struct iattr *iattr) |
| 230 | { | 220 | { |
| 231 | return 0; | 221 | return 0; |
| 232 | } | 222 | } |
| 233 | 223 | ||
| 234 | static inline int vfs_dq_quota_on_remount(struct super_block *sb) | 224 | static inline int __dquot_alloc_space(struct inode *inode, qsize_t number, |
| 225 | int flags) | ||
| 235 | { | 226 | { |
| 227 | if (!(flags & DQUOT_SPACE_RESERVE)) | ||
| 228 | inode_add_bytes(inode, number); | ||
| 236 | return 0; | 229 | return 0; |
| 237 | } | 230 | } |
| 238 | 231 | ||
| 239 | static inline int dquot_transfer(struct inode *inode, struct iattr *iattr) | 232 | static inline void __dquot_free_space(struct inode *inode, qsize_t number, |
| 233 | int flags) | ||
| 234 | { | ||
| 235 | if (!(flags & DQUOT_SPACE_RESERVE)) | ||
| 236 | inode_sub_bytes(inode, number); | ||
| 237 | } | ||
| 238 | |||
| 239 | static inline int dquot_claim_space_nodirty(struct inode *inode, qsize_t number) | ||
| 240 | { | 240 | { |
| 241 | inode_add_bytes(inode, number); | ||
| 241 | return 0; | 242 | return 0; |
| 242 | } | 243 | } |
| 243 | 244 | ||
| 244 | static inline int __dquot_alloc_space(struct inode *inode, qsize_t number, | 245 | static inline int dquot_disable(struct super_block *sb, int type, |
| 245 | int warn, int reserve) | 246 | unsigned int flags) |
| 246 | { | 247 | { |
| 247 | if (!reserve) | ||
| 248 | inode_add_bytes(inode, number); | ||
| 249 | return 0; | 248 | return 0; |
| 250 | } | 249 | } |
| 251 | 250 | ||
| 252 | static inline void __dquot_free_space(struct inode *inode, qsize_t number, | 251 | static inline int dquot_suspend(struct super_block *sb, int type) |
| 253 | int reserve) | ||
| 254 | { | 252 | { |
| 255 | if (!reserve) | 253 | return 0; |
| 256 | inode_sub_bytes(inode, number); | ||
| 257 | } | 254 | } |
| 258 | 255 | ||
| 259 | static inline int dquot_claim_space_nodirty(struct inode *inode, qsize_t number) | 256 | static inline int dquot_resume(struct super_block *sb, int type) |
| 260 | { | 257 | { |
| 261 | inode_add_bytes(inode, number); | ||
| 262 | return 0; | 258 | return 0; |
| 263 | } | 259 | } |
| 264 | 260 | ||
| @@ -268,7 +264,13 @@ static inline int dquot_claim_space_nodirty(struct inode *inode, qsize_t number) | |||
| 268 | 264 | ||
| 269 | static inline int dquot_alloc_space_nodirty(struct inode *inode, qsize_t nr) | 265 | static inline int dquot_alloc_space_nodirty(struct inode *inode, qsize_t nr) |
| 270 | { | 266 | { |
| 271 | return __dquot_alloc_space(inode, nr, 1, 0); | 267 | return __dquot_alloc_space(inode, nr, DQUOT_SPACE_WARN); |
| 268 | } | ||
| 269 | |||
| 270 | static inline void dquot_alloc_space_nofail(struct inode *inode, qsize_t nr) | ||
| 271 | { | ||
| 272 | __dquot_alloc_space(inode, nr, DQUOT_SPACE_WARN|DQUOT_SPACE_NOFAIL); | ||
| 273 | mark_inode_dirty(inode); | ||
| 272 | } | 274 | } |
| 273 | 275 | ||
| 274 | static inline int dquot_alloc_space(struct inode *inode, qsize_t nr) | 276 | static inline int dquot_alloc_space(struct inode *inode, qsize_t nr) |
| @@ -286,6 +288,11 @@ static inline int dquot_alloc_block_nodirty(struct inode *inode, qsize_t nr) | |||
| 286 | return dquot_alloc_space_nodirty(inode, nr << inode->i_blkbits); | 288 | return dquot_alloc_space_nodirty(inode, nr << inode->i_blkbits); |
| 287 | } | 289 | } |
| 288 | 290 | ||
| 291 | static inline void dquot_alloc_block_nofail(struct inode *inode, qsize_t nr) | ||
| 292 | { | ||
| 293 | dquot_alloc_space_nofail(inode, nr << inode->i_blkbits); | ||
| 294 | } | ||
| 295 | |||
| 289 | static inline int dquot_alloc_block(struct inode *inode, qsize_t nr) | 296 | static inline int dquot_alloc_block(struct inode *inode, qsize_t nr) |
| 290 | { | 297 | { |
| 291 | return dquot_alloc_space(inode, nr << inode->i_blkbits); | 298 | return dquot_alloc_space(inode, nr << inode->i_blkbits); |
| @@ -293,7 +300,7 @@ static inline int dquot_alloc_block(struct inode *inode, qsize_t nr) | |||
| 293 | 300 | ||
| 294 | static inline int dquot_prealloc_block_nodirty(struct inode *inode, qsize_t nr) | 301 | static inline int dquot_prealloc_block_nodirty(struct inode *inode, qsize_t nr) |
| 295 | { | 302 | { |
| 296 | return __dquot_alloc_space(inode, nr << inode->i_blkbits, 0, 0); | 303 | return __dquot_alloc_space(inode, nr << inode->i_blkbits, 0); |
| 297 | } | 304 | } |
| 298 | 305 | ||
| 299 | static inline int dquot_prealloc_block(struct inode *inode, qsize_t nr) | 306 | static inline int dquot_prealloc_block(struct inode *inode, qsize_t nr) |
| @@ -308,7 +315,8 @@ static inline int dquot_prealloc_block(struct inode *inode, qsize_t nr) | |||
| 308 | 315 | ||
| 309 | static inline int dquot_reserve_block(struct inode *inode, qsize_t nr) | 316 | static inline int dquot_reserve_block(struct inode *inode, qsize_t nr) |
| 310 | { | 317 | { |
| 311 | return __dquot_alloc_space(inode, nr << inode->i_blkbits, 1, 1); | 318 | return __dquot_alloc_space(inode, nr << inode->i_blkbits, |
| 319 | DQUOT_SPACE_WARN|DQUOT_SPACE_RESERVE); | ||
| 312 | } | 320 | } |
| 313 | 321 | ||
| 314 | static inline int dquot_claim_block(struct inode *inode, qsize_t nr) | 322 | static inline int dquot_claim_block(struct inode *inode, qsize_t nr) |
| @@ -345,7 +353,7 @@ static inline void dquot_free_block(struct inode *inode, qsize_t nr) | |||
| 345 | static inline void dquot_release_reservation_block(struct inode *inode, | 353 | static inline void dquot_release_reservation_block(struct inode *inode, |
| 346 | qsize_t nr) | 354 | qsize_t nr) |
| 347 | { | 355 | { |
| 348 | __dquot_free_space(inode, nr << inode->i_blkbits, 1); | 356 | __dquot_free_space(inode, nr << inode->i_blkbits, DQUOT_SPACE_RESERVE); |
| 349 | } | 357 | } |
| 350 | 358 | ||
| 351 | #endif /* _LINUX_QUOTAOPS_ */ | 359 | #endif /* _LINUX_QUOTAOPS_ */ |
diff --git a/include/linux/random.h b/include/linux/random.h index 25d02fe5c9b5..fb7ab9de5f36 100644 --- a/include/linux/random.h +++ b/include/linux/random.h | |||
| @@ -40,6 +40,10 @@ struct rand_pool_info { | |||
| 40 | __u32 buf[0]; | 40 | __u32 buf[0]; |
| 41 | }; | 41 | }; |
| 42 | 42 | ||
| 43 | struct rnd_state { | ||
| 44 | __u32 s1, s2, s3; | ||
| 45 | }; | ||
| 46 | |||
| 43 | /* Exported functions */ | 47 | /* Exported functions */ |
| 44 | 48 | ||
| 45 | #ifdef __KERNEL__ | 49 | #ifdef __KERNEL__ |
| @@ -74,6 +78,30 @@ unsigned long randomize_range(unsigned long start, unsigned long end, unsigned l | |||
| 74 | u32 random32(void); | 78 | u32 random32(void); |
| 75 | void srandom32(u32 seed); | 79 | void srandom32(u32 seed); |
| 76 | 80 | ||
| 81 | u32 prandom32(struct rnd_state *); | ||
| 82 | |||
| 83 | /* | ||
| 84 | * Handle minimum values for seeds | ||
| 85 | */ | ||
| 86 | static inline u32 __seed(u32 x, u32 m) | ||
| 87 | { | ||
| 88 | return (x < m) ? x + m : x; | ||
| 89 | } | ||
| 90 | |||
| 91 | /** | ||
| 92 | * prandom32_seed - set seed for prandom32(). | ||
| 93 | * @state: pointer to state structure to receive the seed. | ||
| 94 | * @seed: arbitrary 64-bit value to use as a seed. | ||
| 95 | */ | ||
| 96 | static inline void prandom32_seed(struct rnd_state *state, u64 seed) | ||
| 97 | { | ||
| 98 | u32 i = (seed >> 32) ^ (seed << 10) ^ seed; | ||
| 99 | |||
| 100 | state->s1 = __seed(i, 1); | ||
| 101 | state->s2 = __seed(i, 7); | ||
| 102 | state->s3 = __seed(i, 15); | ||
| 103 | } | ||
| 104 | |||
| 77 | #endif /* __KERNEL___ */ | 105 | #endif /* __KERNEL___ */ |
| 78 | 106 | ||
| 79 | #endif /* _LINUX_RANDOM_H */ | 107 | #endif /* _LINUX_RANDOM_H */ |
diff --git a/include/linux/rio.h b/include/linux/rio.h index dc0c75556c63..bd6eb0ed34a7 100644 --- a/include/linux/rio.h +++ b/include/linux/rio.h | |||
| @@ -64,10 +64,13 @@ | |||
| 64 | #define RIO_INB_MBOX_RESOURCE 1 | 64 | #define RIO_INB_MBOX_RESOURCE 1 |
| 65 | #define RIO_OUTB_MBOX_RESOURCE 2 | 65 | #define RIO_OUTB_MBOX_RESOURCE 2 |
| 66 | 66 | ||
| 67 | #define RIO_PW_MSG_SIZE 64 | ||
| 68 | |||
| 67 | extern struct bus_type rio_bus_type; | 69 | extern struct bus_type rio_bus_type; |
| 68 | extern struct list_head rio_devices; /* list of all devices */ | 70 | extern struct list_head rio_devices; /* list of all devices */ |
| 69 | 71 | ||
| 70 | struct rio_mport; | 72 | struct rio_mport; |
| 73 | union rio_pw_msg; | ||
| 71 | 74 | ||
| 72 | /** | 75 | /** |
| 73 | * struct rio_dev - RIO device info | 76 | * struct rio_dev - RIO device info |
| @@ -85,11 +88,15 @@ struct rio_mport; | |||
| 85 | * @swpinfo: Switch port info | 88 | * @swpinfo: Switch port info |
| 86 | * @src_ops: Source operation capabilities | 89 | * @src_ops: Source operation capabilities |
| 87 | * @dst_ops: Destination operation capabilities | 90 | * @dst_ops: Destination operation capabilities |
| 91 | * @comp_tag: RIO component tag | ||
| 92 | * @phys_efptr: RIO device extended features pointer | ||
| 93 | * @em_efptr: RIO Error Management features pointer | ||
| 88 | * @dma_mask: Mask of bits of RIO address this device implements | 94 | * @dma_mask: Mask of bits of RIO address this device implements |
| 89 | * @rswitch: Pointer to &struct rio_switch if valid for this device | 95 | * @rswitch: Pointer to &struct rio_switch if valid for this device |
| 90 | * @driver: Driver claiming this device | 96 | * @driver: Driver claiming this device |
| 91 | * @dev: Device model device | 97 | * @dev: Device model device |
| 92 | * @riores: RIO resources this device owns | 98 | * @riores: RIO resources this device owns |
| 99 | * @pwcback: port-write callback function for this device | ||
| 93 | * @destid: Network destination ID | 100 | * @destid: Network destination ID |
| 94 | */ | 101 | */ |
| 95 | struct rio_dev { | 102 | struct rio_dev { |
| @@ -107,11 +114,15 @@ struct rio_dev { | |||
| 107 | u32 swpinfo; /* Only used for switches */ | 114 | u32 swpinfo; /* Only used for switches */ |
| 108 | u32 src_ops; | 115 | u32 src_ops; |
| 109 | u32 dst_ops; | 116 | u32 dst_ops; |
| 117 | u32 comp_tag; | ||
| 118 | u32 phys_efptr; | ||
| 119 | u32 em_efptr; | ||
| 110 | u64 dma_mask; | 120 | u64 dma_mask; |
| 111 | struct rio_switch *rswitch; /* RIO switch info */ | 121 | struct rio_switch *rswitch; /* RIO switch info */ |
| 112 | struct rio_driver *driver; /* RIO driver claiming this device */ | 122 | struct rio_driver *driver; /* RIO driver claiming this device */ |
| 113 | struct device dev; /* LDM device structure */ | 123 | struct device dev; /* LDM device structure */ |
| 114 | struct resource riores[RIO_MAX_DEV_RESOURCES]; | 124 | struct resource riores[RIO_MAX_DEV_RESOURCES]; |
| 125 | int (*pwcback) (struct rio_dev *rdev, union rio_pw_msg *msg, int step); | ||
| 115 | u16 destid; | 126 | u16 destid; |
| 116 | }; | 127 | }; |
| 117 | 128 | ||
| @@ -211,8 +222,14 @@ struct rio_net { | |||
| 211 | * @hopcount: Hopcount to this switch | 222 | * @hopcount: Hopcount to this switch |
| 212 | * @destid: Associated destid in the path | 223 | * @destid: Associated destid in the path |
| 213 | * @route_table: Copy of switch routing table | 224 | * @route_table: Copy of switch routing table |
| 225 | * @port_ok: Status of each port (one bit per port) - OK=1 or UNINIT=0 | ||
| 214 | * @add_entry: Callback for switch-specific route add function | 226 | * @add_entry: Callback for switch-specific route add function |
| 215 | * @get_entry: Callback for switch-specific route get function | 227 | * @get_entry: Callback for switch-specific route get function |
| 228 | * @clr_table: Callback for switch-specific clear route table function | ||
| 229 | * @set_domain: Callback for switch-specific domain setting function | ||
| 230 | * @get_domain: Callback for switch-specific domain get function | ||
| 231 | * @em_init: Callback for switch-specific error management initialization function | ||
| 232 | * @em_handle: Callback for switch-specific error management handler function | ||
| 216 | */ | 233 | */ |
| 217 | struct rio_switch { | 234 | struct rio_switch { |
| 218 | struct list_head node; | 235 | struct list_head node; |
| @@ -220,10 +237,19 @@ struct rio_switch { | |||
| 220 | u16 hopcount; | 237 | u16 hopcount; |
| 221 | u16 destid; | 238 | u16 destid; |
| 222 | u8 *route_table; | 239 | u8 *route_table; |
| 240 | u32 port_ok; | ||
| 223 | int (*add_entry) (struct rio_mport * mport, u16 destid, u8 hopcount, | 241 | int (*add_entry) (struct rio_mport * mport, u16 destid, u8 hopcount, |
| 224 | u16 table, u16 route_destid, u8 route_port); | 242 | u16 table, u16 route_destid, u8 route_port); |
| 225 | int (*get_entry) (struct rio_mport * mport, u16 destid, u8 hopcount, | 243 | int (*get_entry) (struct rio_mport * mport, u16 destid, u8 hopcount, |
| 226 | u16 table, u16 route_destid, u8 * route_port); | 244 | u16 table, u16 route_destid, u8 * route_port); |
| 245 | int (*clr_table) (struct rio_mport *mport, u16 destid, u8 hopcount, | ||
| 246 | u16 table); | ||
| 247 | int (*set_domain) (struct rio_mport *mport, u16 destid, u8 hopcount, | ||
| 248 | u8 sw_domain); | ||
| 249 | int (*get_domain) (struct rio_mport *mport, u16 destid, u8 hopcount, | ||
| 250 | u8 *sw_domain); | ||
| 251 | int (*em_init) (struct rio_dev *dev); | ||
| 252 | int (*em_handle) (struct rio_dev *dev, u8 swport); | ||
| 227 | }; | 253 | }; |
| 228 | 254 | ||
| 229 | /* Low-level architecture-dependent routines */ | 255 | /* Low-level architecture-dependent routines */ |
| @@ -235,6 +261,7 @@ struct rio_switch { | |||
| 235 | * @cread: Callback to perform network read of config space. | 261 | * @cread: Callback to perform network read of config space. |
| 236 | * @cwrite: Callback to perform network write of config space. | 262 | * @cwrite: Callback to perform network write of config space. |
| 237 | * @dsend: Callback to send a doorbell message. | 263 | * @dsend: Callback to send a doorbell message. |
| 264 | * @pwenable: Callback to enable/disable port-write message handling. | ||
| 238 | */ | 265 | */ |
| 239 | struct rio_ops { | 266 | struct rio_ops { |
| 240 | int (*lcread) (struct rio_mport *mport, int index, u32 offset, int len, | 267 | int (*lcread) (struct rio_mport *mport, int index, u32 offset, int len, |
| @@ -246,6 +273,7 @@ struct rio_ops { | |||
| 246 | int (*cwrite) (struct rio_mport *mport, int index, u16 destid, | 273 | int (*cwrite) (struct rio_mport *mport, int index, u16 destid, |
| 247 | u8 hopcount, u32 offset, int len, u32 data); | 274 | u8 hopcount, u32 offset, int len, u32 data); |
| 248 | int (*dsend) (struct rio_mport *mport, int index, u16 destid, u16 data); | 275 | int (*dsend) (struct rio_mport *mport, int index, u16 destid, u16 data); |
| 276 | int (*pwenable) (struct rio_mport *mport, int enable); | ||
| 249 | }; | 277 | }; |
| 250 | 278 | ||
| 251 | #define RIO_RESOURCE_MEM 0x00000100 | 279 | #define RIO_RESOURCE_MEM 0x00000100 |
| @@ -302,21 +330,28 @@ struct rio_device_id { | |||
| 302 | }; | 330 | }; |
| 303 | 331 | ||
| 304 | /** | 332 | /** |
| 305 | * struct rio_route_ops - Per-switch route operations | 333 | * struct rio_switch_ops - Per-switch operations |
| 306 | * @vid: RIO vendor ID | 334 | * @vid: RIO vendor ID |
| 307 | * @did: RIO device ID | 335 | * @did: RIO device ID |
| 308 | * @add_hook: Callback that adds a route entry | 336 | * @init_hook: Callback that performs switch device initialization |
| 309 | * @get_hook: Callback that gets a route entry | ||
| 310 | * | 337 | * |
| 311 | * Defines the operations that are necessary to manipulate the route | 338 | * Defines the operations that are necessary to initialize/control |
| 312 | * tables for a particular RIO switch device. | 339 | * a particular RIO switch device. |
| 313 | */ | 340 | */ |
| 314 | struct rio_route_ops { | 341 | struct rio_switch_ops { |
| 315 | u16 vid, did; | 342 | u16 vid, did; |
| 316 | int (*add_hook) (struct rio_mport * mport, u16 destid, u8 hopcount, | 343 | int (*init_hook) (struct rio_dev *rdev, int do_enum); |
| 317 | u16 table, u16 route_destid, u8 route_port); | 344 | }; |
| 318 | int (*get_hook) (struct rio_mport * mport, u16 destid, u8 hopcount, | 345 | |
| 319 | u16 table, u16 route_destid, u8 * route_port); | 346 | union rio_pw_msg { |
| 347 | struct { | ||
| 348 | u32 comptag; /* Component Tag CSR */ | ||
| 349 | u32 errdetect; /* Port N Error Detect CSR */ | ||
| 350 | u32 is_port; /* Implementation specific + PortID */ | ||
| 351 | u32 ltlerrdet; /* LTL Error Detect CSR */ | ||
| 352 | u32 padding[12]; | ||
| 353 | } em; | ||
| 354 | u32 raw[RIO_PW_MSG_SIZE/sizeof(u32)]; | ||
| 320 | }; | 355 | }; |
| 321 | 356 | ||
| 322 | /* Architecture and hardware-specific functions */ | 357 | /* Architecture and hardware-specific functions */ |
diff --git a/include/linux/rio_drv.h b/include/linux/rio_drv.h index c93a58a40033..edc55da717b3 100644 --- a/include/linux/rio_drv.h +++ b/include/linux/rio_drv.h | |||
| @@ -413,6 +413,12 @@ void rio_release_regions(struct rio_dev *); | |||
| 413 | int rio_request_region(struct rio_dev *, int, char *); | 413 | int rio_request_region(struct rio_dev *, int, char *); |
| 414 | void rio_release_region(struct rio_dev *, int); | 414 | void rio_release_region(struct rio_dev *, int); |
| 415 | 415 | ||
| 416 | /* Port-Write management */ | ||
| 417 | extern int rio_request_inb_pwrite(struct rio_dev *, | ||
| 418 | int (*)(struct rio_dev *, union rio_pw_msg*, int)); | ||
| 419 | extern int rio_release_inb_pwrite(struct rio_dev *); | ||
| 420 | extern int rio_inb_pwrite_handler(union rio_pw_msg *pw_msg); | ||
| 421 | |||
| 416 | /* LDM support */ | 422 | /* LDM support */ |
| 417 | int rio_register_driver(struct rio_driver *); | 423 | int rio_register_driver(struct rio_driver *); |
| 418 | void rio_unregister_driver(struct rio_driver *); | 424 | void rio_unregister_driver(struct rio_driver *); |
diff --git a/include/linux/rio_ids.h b/include/linux/rio_ids.h index 919d4e07d54e..db50e1c288b7 100644 --- a/include/linux/rio_ids.h +++ b/include/linux/rio_ids.h | |||
| @@ -20,5 +20,19 @@ | |||
| 20 | 20 | ||
| 21 | #define RIO_VID_TUNDRA 0x000d | 21 | #define RIO_VID_TUNDRA 0x000d |
| 22 | #define RIO_DID_TSI500 0x0500 | 22 | #define RIO_DID_TSI500 0x0500 |
| 23 | #define RIO_DID_TSI568 0x0568 | ||
| 24 | #define RIO_DID_TSI572 0x0572 | ||
| 25 | #define RIO_DID_TSI574 0x0574 | ||
| 26 | #define RIO_DID_TSI576 0x0578 /* Same ID as Tsi578 */ | ||
| 27 | #define RIO_DID_TSI577 0x0577 | ||
| 28 | #define RIO_DID_TSI578 0x0578 | ||
| 29 | |||
| 30 | #define RIO_VID_IDT 0x0038 | ||
| 31 | #define RIO_DID_IDT70K200 0x0310 | ||
| 32 | #define RIO_DID_IDTCPS8 0x035c | ||
| 33 | #define RIO_DID_IDTCPS12 0x035d | ||
| 34 | #define RIO_DID_IDTCPS16 0x035b | ||
| 35 | #define RIO_DID_IDTCPS6Q 0x035f | ||
| 36 | #define RIO_DID_IDTCPS10Q 0x035e | ||
| 23 | 37 | ||
| 24 | #endif /* LINUX_RIO_IDS_H */ | 38 | #endif /* LINUX_RIO_IDS_H */ |
diff --git a/include/linux/rio_regs.h b/include/linux/rio_regs.h index 326540f9b54e..aedee0489fb4 100644 --- a/include/linux/rio_regs.h +++ b/include/linux/rio_regs.h | |||
| @@ -39,6 +39,8 @@ | |||
| 39 | #define RIO_PEF_INB_MBOX2 0x00200000 /* [II] Mailbox 2 */ | 39 | #define RIO_PEF_INB_MBOX2 0x00200000 /* [II] Mailbox 2 */ |
| 40 | #define RIO_PEF_INB_MBOX3 0x00100000 /* [II] Mailbox 3 */ | 40 | #define RIO_PEF_INB_MBOX3 0x00100000 /* [II] Mailbox 3 */ |
| 41 | #define RIO_PEF_INB_DOORBELL 0x00080000 /* [II] Doorbells */ | 41 | #define RIO_PEF_INB_DOORBELL 0x00080000 /* [II] Doorbells */ |
| 42 | #define RIO_PEF_EXT_RT 0x00000200 /* [III, 1.3] Extended route table support */ | ||
| 43 | #define RIO_PEF_STD_RT 0x00000100 /* [III, 1.3] Standard route table support */ | ||
| 42 | #define RIO_PEF_CTLS 0x00000010 /* [III] CTLS */ | 44 | #define RIO_PEF_CTLS 0x00000010 /* [III] CTLS */ |
| 43 | #define RIO_PEF_EXT_FEATURES 0x00000008 /* [I] EFT_PTR valid */ | 45 | #define RIO_PEF_EXT_FEATURES 0x00000008 /* [I] EFT_PTR valid */ |
| 44 | #define RIO_PEF_ADDR_66 0x00000004 /* [I] 66 bits */ | 46 | #define RIO_PEF_ADDR_66 0x00000004 /* [I] 66 bits */ |
| @@ -91,7 +93,10 @@ | |||
| 91 | #define RIO_OPS_ATOMIC_CLR 0x00000010 /* [I] Atomic clr op */ | 93 | #define RIO_OPS_ATOMIC_CLR 0x00000010 /* [I] Atomic clr op */ |
| 92 | #define RIO_OPS_PORT_WRITE 0x00000004 /* [I] Port-write op */ | 94 | #define RIO_OPS_PORT_WRITE 0x00000004 /* [I] Port-write op */ |
| 93 | 95 | ||
| 94 | /* 0x20-0x3c *//* Reserved */ | 96 | /* 0x20-0x30 *//* Reserved */ |
| 97 | |||
| 98 | #define RIO_SWITCH_RT_LIMIT 0x34 /* [III, 1.3] Switch Route Table Destination ID Limit CAR */ | ||
| 99 | #define RIO_RT_MAX_DESTID 0x0000ffff | ||
| 95 | 100 | ||
| 96 | #define RIO_MBOX_CSR 0x40 /* [II] Mailbox CSR */ | 101 | #define RIO_MBOX_CSR 0x40 /* [II] Mailbox CSR */ |
| 97 | #define RIO_MBOX0_AVAIL 0x80000000 /* [II] Mbox 0 avail */ | 102 | #define RIO_MBOX0_AVAIL 0x80000000 /* [II] Mbox 0 avail */ |
| @@ -153,7 +158,11 @@ | |||
| 153 | #define RIO_HOST_DID_LOCK_CSR 0x68 /* [III] Host Base Device ID Lock CSR */ | 158 | #define RIO_HOST_DID_LOCK_CSR 0x68 /* [III] Host Base Device ID Lock CSR */ |
| 154 | #define RIO_COMPONENT_TAG_CSR 0x6c /* [III] Component Tag CSR */ | 159 | #define RIO_COMPONENT_TAG_CSR 0x6c /* [III] Component Tag CSR */ |
| 155 | 160 | ||
| 156 | /* 0x70-0xf8 *//* Reserved */ | 161 | #define RIO_STD_RTE_CONF_DESTID_SEL_CSR 0x70 |
| 162 | #define RIO_STD_RTE_CONF_PORT_SEL_CSR 0x74 | ||
| 163 | #define RIO_STD_RTE_DEFAULT_PORT 0x78 | ||
| 164 | |||
| 165 | /* 0x7c-0xf8 *//* Reserved */ | ||
| 157 | /* 0x100-0xfff8 *//* [I] Extended Features Space */ | 166 | /* 0x100-0xfff8 *//* [I] Extended Features Space */ |
| 158 | /* 0x10000-0xfffff8 *//* [I] Implementation-defined Space */ | 167 | /* 0x10000-0xfffff8 *//* [I] Implementation-defined Space */ |
| 159 | 168 | ||
| @@ -183,9 +192,14 @@ | |||
| 183 | #define RIO_EFB_PAR_EP_ID 0x0001 /* [IV] LP/LVDS EP Devices */ | 192 | #define RIO_EFB_PAR_EP_ID 0x0001 /* [IV] LP/LVDS EP Devices */ |
| 184 | #define RIO_EFB_PAR_EP_REC_ID 0x0002 /* [IV] LP/LVDS EP Recovery Devices */ | 193 | #define RIO_EFB_PAR_EP_REC_ID 0x0002 /* [IV] LP/LVDS EP Recovery Devices */ |
| 185 | #define RIO_EFB_PAR_EP_FREE_ID 0x0003 /* [IV] LP/LVDS EP Free Devices */ | 194 | #define RIO_EFB_PAR_EP_FREE_ID 0x0003 /* [IV] LP/LVDS EP Free Devices */ |
| 195 | #define RIO_EFB_SER_EP_ID_V13P 0x0001 /* [VI] LP/Serial EP Devices, RapidIO Spec ver 1.3 and above */ | ||
| 196 | #define RIO_EFB_SER_EP_REC_ID_V13P 0x0002 /* [VI] LP/Serial EP Recovery Devices, RapidIO Spec ver 1.3 and above */ | ||
| 197 | #define RIO_EFB_SER_EP_FREE_ID_V13P 0x0003 /* [VI] LP/Serial EP Free Devices, RapidIO Spec ver 1.3 and above */ | ||
| 186 | #define RIO_EFB_SER_EP_ID 0x0004 /* [VI] LP/Serial EP Devices */ | 198 | #define RIO_EFB_SER_EP_ID 0x0004 /* [VI] LP/Serial EP Devices */ |
| 187 | #define RIO_EFB_SER_EP_REC_ID 0x0005 /* [VI] LP/Serial EP Recovery Devices */ | 199 | #define RIO_EFB_SER_EP_REC_ID 0x0005 /* [VI] LP/Serial EP Recovery Devices */ |
| 188 | #define RIO_EFB_SER_EP_FREE_ID 0x0006 /* [VI] LP/Serial EP Free Devices */ | 200 | #define RIO_EFB_SER_EP_FREE_ID 0x0006 /* [VI] LP/Serial EP Free Devices */ |
| 201 | #define RIO_EFB_SER_EP_FREC_ID 0x0009 /* [VI] LP/Serial EP Free Recovery Devices */ | ||
| 202 | #define RIO_EFB_ERR_MGMNT 0x0007 /* [VIII] Error Management Extensions */ | ||
| 189 | 203 | ||
| 190 | /* | 204 | /* |
| 191 | * Physical 8/16 LP-LVDS | 205 | * Physical 8/16 LP-LVDS |
| @@ -201,15 +215,71 @@ | |||
| 201 | #define RIO_PORT_MNT_HEADER 0x0000 | 215 | #define RIO_PORT_MNT_HEADER 0x0000 |
| 202 | #define RIO_PORT_REQ_CTL_CSR 0x0020 | 216 | #define RIO_PORT_REQ_CTL_CSR 0x0020 |
| 203 | #define RIO_PORT_RSP_CTL_CSR 0x0024 /* 0x0001/0x0002 */ | 217 | #define RIO_PORT_RSP_CTL_CSR 0x0024 /* 0x0001/0x0002 */ |
| 218 | #define RIO_PORT_LINKTO_CTL_CSR 0x0020 /* Serial */ | ||
| 219 | #define RIO_PORT_RSPTO_CTL_CSR 0x0024 /* Serial */ | ||
| 204 | #define RIO_PORT_GEN_CTL_CSR 0x003c | 220 | #define RIO_PORT_GEN_CTL_CSR 0x003c |
| 205 | #define RIO_PORT_GEN_HOST 0x80000000 | 221 | #define RIO_PORT_GEN_HOST 0x80000000 |
| 206 | #define RIO_PORT_GEN_MASTER 0x40000000 | 222 | #define RIO_PORT_GEN_MASTER 0x40000000 |
| 207 | #define RIO_PORT_GEN_DISCOVERED 0x20000000 | 223 | #define RIO_PORT_GEN_DISCOVERED 0x20000000 |
| 208 | #define RIO_PORT_N_MNT_REQ_CSR(x) (0x0040 + x*0x20) /* 0x0002 */ | 224 | #define RIO_PORT_N_MNT_REQ_CSR(x) (0x0040 + x*0x20) /* 0x0002 */ |
| 209 | #define RIO_PORT_N_MNT_RSP_CSR(x) (0x0044 + x*0x20) /* 0x0002 */ | 225 | #define RIO_PORT_N_MNT_RSP_CSR(x) (0x0044 + x*0x20) /* 0x0002 */ |
| 226 | #define RIO_PORT_N_MNT_RSP_RVAL 0x80000000 /* Response Valid */ | ||
| 227 | #define RIO_PORT_N_MNT_RSP_ASTAT 0x000003e0 /* ackID Status */ | ||
| 228 | #define RIO_PORT_N_MNT_RSP_LSTAT 0x0000001f /* Link Status */ | ||
| 210 | #define RIO_PORT_N_ACK_STS_CSR(x) (0x0048 + x*0x20) /* 0x0002 */ | 229 | #define RIO_PORT_N_ACK_STS_CSR(x) (0x0048 + x*0x20) /* 0x0002 */ |
| 211 | #define RIO_PORT_N_ERR_STS_CSR(x) (0x58 + x*0x20) | 230 | #define RIO_PORT_N_ACK_CLEAR 0x80000000 |
| 212 | #define PORT_N_ERR_STS_PORT_OK 0x00000002 | 231 | #define RIO_PORT_N_ACK_INBOUND 0x1f000000 |
| 213 | #define RIO_PORT_N_CTL_CSR(x) (0x5c + x*0x20) | 232 | #define RIO_PORT_N_ACK_OUTSTAND 0x00001f00 |
| 233 | #define RIO_PORT_N_ACK_OUTBOUND 0x0000001f | ||
| 234 | #define RIO_PORT_N_ERR_STS_CSR(x) (0x0058 + x*0x20) | ||
| 235 | #define RIO_PORT_N_ERR_STS_PW_OUT_ES 0x00010000 /* Output Error-stopped */ | ||
| 236 | #define RIO_PORT_N_ERR_STS_PW_INP_ES 0x00000100 /* Input Error-stopped */ | ||
| 237 | #define RIO_PORT_N_ERR_STS_PW_PEND 0x00000010 /* Port-Write Pending */ | ||
| 238 | #define RIO_PORT_N_ERR_STS_PORT_ERR 0x00000004 | ||
| 239 | #define RIO_PORT_N_ERR_STS_PORT_OK 0x00000002 | ||
| 240 | #define RIO_PORT_N_ERR_STS_PORT_UNINIT 0x00000001 | ||
| 241 | #define RIO_PORT_N_ERR_STS_CLR_MASK 0x07120204 | ||
| 242 | #define RIO_PORT_N_CTL_CSR(x) (0x005c + x*0x20) | ||
| 243 | #define RIO_PORT_N_CTL_PWIDTH 0xc0000000 | ||
| 244 | #define RIO_PORT_N_CTL_PWIDTH_1 0x00000000 | ||
| 245 | #define RIO_PORT_N_CTL_PWIDTH_4 0x40000000 | ||
| 246 | #define RIO_PORT_N_CTL_P_TYP_SER 0x00000001 | ||
| 247 | #define RIO_PORT_N_CTL_LOCKOUT 0x00000002 | ||
| 248 | #define RIO_PORT_N_CTL_EN_RX_SER 0x00200000 | ||
| 249 | #define RIO_PORT_N_CTL_EN_TX_SER 0x00400000 | ||
| 250 | #define RIO_PORT_N_CTL_EN_RX_PAR 0x08000000 | ||
| 251 | #define RIO_PORT_N_CTL_EN_TX_PAR 0x40000000 | ||
| 252 | |||
| 253 | /* | ||
| 254 | * Error Management Extensions (RapidIO 1.3+, Part 8) | ||
| 255 | * | ||
| 256 | * Extended Features Block ID=0x0007 | ||
| 257 | */ | ||
| 258 | |||
| 259 | /* General EM Registers (Common for all Ports) */ | ||
| 260 | |||
| 261 | #define RIO_EM_EFB_HEADER 0x000 /* Error Management Extensions Block Header */ | ||
| 262 | #define RIO_EM_LTL_ERR_DETECT 0x008 /* Logical/Transport Layer Error Detect CSR */ | ||
| 263 | #define RIO_EM_LTL_ERR_EN 0x00c /* Logical/Transport Layer Error Enable CSR */ | ||
| 264 | #define RIO_EM_LTL_HIADDR_CAP 0x010 /* Logical/Transport Layer High Address Capture CSR */ | ||
| 265 | #define RIO_EM_LTL_ADDR_CAP 0x014 /* Logical/Transport Layer Address Capture CSR */ | ||
| 266 | #define RIO_EM_LTL_DEVID_CAP 0x018 /* Logical/Transport Layer Device ID Capture CSR */ | ||
| 267 | #define RIO_EM_LTL_CTRL_CAP 0x01c /* Logical/Transport Layer Control Capture CSR */ | ||
| 268 | #define RIO_EM_PW_TGT_DEVID 0x028 /* Port-write Target deviceID CSR */ | ||
| 269 | #define RIO_EM_PKT_TTL 0x02c /* Packet Time-to-live CSR */ | ||
| 270 | |||
| 271 | /* Per-Port EM Registers */ | ||
| 272 | |||
| 273 | #define RIO_EM_PN_ERR_DETECT(x) (0x040 + x*0x40) /* Port N Error Detect CSR */ | ||
| 274 | #define REM_PED_IMPL_SPEC 0x80000000 | ||
| 275 | #define REM_PED_LINK_TO 0x00000001 | ||
| 276 | #define RIO_EM_PN_ERRRATE_EN(x) (0x044 + x*0x40) /* Port N Error Rate Enable CSR */ | ||
| 277 | #define RIO_EM_PN_ATTRIB_CAP(x) (0x048 + x*0x40) /* Port N Attributes Capture CSR */ | ||
| 278 | #define RIO_EM_PN_PKT_CAP_0(x) (0x04c + x*0x40) /* Port N Packet/Control Symbol Capture 0 CSR */ | ||
| 279 | #define RIO_EM_PN_PKT_CAP_1(x) (0x050 + x*0x40) /* Port N Packet Capture 1 CSR */ | ||
| 280 | #define RIO_EM_PN_PKT_CAP_2(x) (0x054 + x*0x40) /* Port N Packet Capture 2 CSR */ | ||
| 281 | #define RIO_EM_PN_PKT_CAP_3(x) (0x058 + x*0x40) /* Port N Packet Capture 3 CSR */ | ||
| 282 | #define RIO_EM_PN_ERRRATE(x) (0x068 + x*0x40) /* Port N Error Rate CSR */ | ||
| 283 | #define RIO_EM_PN_ERRRATE_TR(x) (0x06c + x*0x40) /* Port N Error Rate Threshold CSR */ | ||
| 214 | 284 | ||
| 215 | #endif /* LINUX_RIO_REGS_H */ | 285 | #endif /* LINUX_RIO_REGS_H */ |
diff --git a/include/linux/sched.h b/include/linux/sched.h index c0151ffd3541..f118809c953f 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
| @@ -268,7 +268,6 @@ extern void init_idle(struct task_struct *idle, int cpu); | |||
| 268 | extern void init_idle_bootup_task(struct task_struct *idle); | 268 | extern void init_idle_bootup_task(struct task_struct *idle); |
| 269 | 269 | ||
| 270 | extern int runqueue_is_locked(int cpu); | 270 | extern int runqueue_is_locked(int cpu); |
| 271 | extern void task_rq_unlock_wait(struct task_struct *p); | ||
| 272 | 271 | ||
| 273 | extern cpumask_var_t nohz_cpu_mask; | 272 | extern cpumask_var_t nohz_cpu_mask; |
| 274 | #if defined(CONFIG_SMP) && defined(CONFIG_NO_HZ) | 273 | #if defined(CONFIG_SMP) && defined(CONFIG_NO_HZ) |
| @@ -527,8 +526,9 @@ struct thread_group_cputimer { | |||
| 527 | * the locking of signal_struct. | 526 | * the locking of signal_struct. |
| 528 | */ | 527 | */ |
| 529 | struct signal_struct { | 528 | struct signal_struct { |
| 530 | atomic_t count; | 529 | atomic_t sigcnt; |
| 531 | atomic_t live; | 530 | atomic_t live; |
| 531 | int nr_threads; | ||
| 532 | 532 | ||
| 533 | wait_queue_head_t wait_chldexit; /* for wait4() */ | 533 | wait_queue_head_t wait_chldexit; /* for wait4() */ |
| 534 | 534 | ||
| @@ -1423,6 +1423,7 @@ struct task_struct { | |||
| 1423 | nodemask_t mems_allowed; /* Protected by alloc_lock */ | 1423 | nodemask_t mems_allowed; /* Protected by alloc_lock */ |
| 1424 | int mems_allowed_change_disable; | 1424 | int mems_allowed_change_disable; |
| 1425 | int cpuset_mem_spread_rotor; | 1425 | int cpuset_mem_spread_rotor; |
| 1426 | int cpuset_slab_spread_rotor; | ||
| 1426 | #endif | 1427 | #endif |
| 1427 | #ifdef CONFIG_CGROUPS | 1428 | #ifdef CONFIG_CGROUPS |
| 1428 | /* Control Group info protected by css_set_lock */ | 1429 | /* Control Group info protected by css_set_lock */ |
| @@ -2035,7 +2036,7 @@ extern int do_notify_parent(struct task_struct *, int); | |||
| 2035 | extern void __wake_up_parent(struct task_struct *p, struct task_struct *parent); | 2036 | extern void __wake_up_parent(struct task_struct *p, struct task_struct *parent); |
| 2036 | extern void force_sig(int, struct task_struct *); | 2037 | extern void force_sig(int, struct task_struct *); |
| 2037 | extern int send_sig(int, struct task_struct *, int); | 2038 | extern int send_sig(int, struct task_struct *, int); |
| 2038 | extern void zap_other_threads(struct task_struct *p); | 2039 | extern int zap_other_threads(struct task_struct *p); |
| 2039 | extern struct sigqueue *sigqueue_alloc(void); | 2040 | extern struct sigqueue *sigqueue_alloc(void); |
| 2040 | extern void sigqueue_free(struct sigqueue *); | 2041 | extern void sigqueue_free(struct sigqueue *); |
| 2041 | extern int send_sigqueue(struct sigqueue *, struct task_struct *, int group); | 2042 | extern int send_sigqueue(struct sigqueue *, struct task_struct *, int group); |
| @@ -2100,7 +2101,6 @@ extern void flush_thread(void); | |||
| 2100 | extern void exit_thread(void); | 2101 | extern void exit_thread(void); |
| 2101 | 2102 | ||
| 2102 | extern void exit_files(struct task_struct *); | 2103 | extern void exit_files(struct task_struct *); |
| 2103 | extern void __cleanup_signal(struct signal_struct *); | ||
| 2104 | extern void __cleanup_sighand(struct sighand_struct *); | 2104 | extern void __cleanup_sighand(struct sighand_struct *); |
| 2105 | 2105 | ||
| 2106 | extern void exit_itimers(struct signal_struct *); | 2106 | extern void exit_itimers(struct signal_struct *); |
| @@ -2147,6 +2147,11 @@ extern bool current_is_single_threaded(void); | |||
| 2147 | #define while_each_thread(g, t) \ | 2147 | #define while_each_thread(g, t) \ |
| 2148 | while ((t = next_thread(t)) != g) | 2148 | while ((t = next_thread(t)) != g) |
| 2149 | 2149 | ||
| 2150 | static inline int get_nr_threads(struct task_struct *tsk) | ||
| 2151 | { | ||
| 2152 | return tsk->signal->nr_threads; | ||
| 2153 | } | ||
| 2154 | |||
| 2150 | /* de_thread depends on thread_group_leader not being a pid based check */ | 2155 | /* de_thread depends on thread_group_leader not being a pid based check */ |
| 2151 | #define thread_group_leader(p) (p == p->group_leader) | 2156 | #define thread_group_leader(p) (p == p->group_leader) |
| 2152 | 2157 | ||
| @@ -2393,10 +2398,6 @@ static inline void thread_group_cputime_init(struct signal_struct *sig) | |||
| 2393 | spin_lock_init(&sig->cputimer.lock); | 2398 | spin_lock_init(&sig->cputimer.lock); |
| 2394 | } | 2399 | } |
| 2395 | 2400 | ||
| 2396 | static inline void thread_group_cputime_free(struct signal_struct *sig) | ||
| 2397 | { | ||
| 2398 | } | ||
| 2399 | |||
| 2400 | /* | 2401 | /* |
| 2401 | * Reevaluate whether the task has signals pending delivery. | 2402 | * Reevaluate whether the task has signals pending delivery. |
| 2402 | * Wake the task if so. | 2403 | * Wake the task if so. |
diff --git a/include/linux/sdhci-pltfm.h b/include/linux/sdhci-pltfm.h new file mode 100644 index 000000000000..0239bd70241e --- /dev/null +++ b/include/linux/sdhci-pltfm.h | |||
| @@ -0,0 +1,35 @@ | |||
| 1 | /* | ||
| 2 | * Platform data declarations for the sdhci-pltfm driver. | ||
| 3 | * | ||
| 4 | * Copyright (c) 2010 MontaVista Software, LLC. | ||
| 5 | * | ||
| 6 | * Author: Anton Vorontsov <avorontsov@ru.mvista.com> | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or modify | ||
| 9 | * it under the terms of the GNU General Public License as published by | ||
| 10 | * the Free Software Foundation; either version 2 of the License, or (at | ||
| 11 | * your option) any later version. | ||
| 12 | */ | ||
| 13 | |||
| 14 | #ifndef _SDHCI_PLTFM_H | ||
| 15 | #define _SDHCI_PLTFM_H | ||
| 16 | |||
| 17 | struct sdhci_ops; | ||
| 18 | struct sdhci_host; | ||
| 19 | |||
| 20 | /** | ||
| 21 | * struct sdhci_pltfm_data - SDHCI platform-specific information & hooks | ||
| 22 | * @ops: optional pointer to the platform-provided SDHCI ops | ||
| 23 | * @quirks: optional SDHCI quirks | ||
| 24 | * @init: optional hook that is called during device probe, before the | ||
| 25 | * driver tries to access any SDHCI registers | ||
| 26 | * @exit: optional hook that is called during device removal | ||
| 27 | */ | ||
| 28 | struct sdhci_pltfm_data { | ||
| 29 | struct sdhci_ops *ops; | ||
| 30 | unsigned int quirks; | ||
| 31 | int (*init)(struct sdhci_host *host); | ||
| 32 | void (*exit)(struct sdhci_host *host); | ||
| 33 | }; | ||
| 34 | |||
| 35 | #endif /* _SDHCI_PLTFM_H */ | ||
diff --git a/include/linux/sem.h b/include/linux/sem.h index 8a4adbef8a0f..f2961afa2f66 100644 --- a/include/linux/sem.h +++ b/include/linux/sem.h | |||
| @@ -79,6 +79,7 @@ struct seminfo { | |||
| 79 | #ifdef __KERNEL__ | 79 | #ifdef __KERNEL__ |
| 80 | #include <asm/atomic.h> | 80 | #include <asm/atomic.h> |
| 81 | #include <linux/rcupdate.h> | 81 | #include <linux/rcupdate.h> |
| 82 | #include <linux/cache.h> | ||
| 82 | 83 | ||
| 83 | struct task_struct; | 84 | struct task_struct; |
| 84 | 85 | ||
| @@ -91,7 +92,8 @@ struct sem { | |||
| 91 | 92 | ||
| 92 | /* One sem_array data structure for each set of semaphores in the system. */ | 93 | /* One sem_array data structure for each set of semaphores in the system. */ |
| 93 | struct sem_array { | 94 | struct sem_array { |
| 94 | struct kern_ipc_perm sem_perm; /* permissions .. see ipc.h */ | 95 | struct kern_ipc_perm ____cacheline_aligned_in_smp |
| 96 | sem_perm; /* permissions .. see ipc.h */ | ||
| 95 | time_t sem_otime; /* last semop time */ | 97 | time_t sem_otime; /* last semop time */ |
| 96 | time_t sem_ctime; /* last change time */ | 98 | time_t sem_ctime; /* last change time */ |
| 97 | struct sem *sem_base; /* ptr to first semaphore in array */ | 99 | struct sem *sem_base; /* ptr to first semaphore in array */ |
diff --git a/include/linux/serial_sci.h b/include/linux/serial_sci.h index f5364a1de68b..baed2122c5a6 100644 --- a/include/linux/serial_sci.h +++ b/include/linux/serial_sci.h | |||
| @@ -2,9 +2,7 @@ | |||
| 2 | #define __LINUX_SERIAL_SCI_H | 2 | #define __LINUX_SERIAL_SCI_H |
| 3 | 3 | ||
| 4 | #include <linux/serial_core.h> | 4 | #include <linux/serial_core.h> |
| 5 | #ifdef CONFIG_SERIAL_SH_SCI_DMA | 5 | #include <linux/sh_dma.h> |
| 6 | #include <asm/dmaengine.h> | ||
| 7 | #endif | ||
| 8 | 6 | ||
| 9 | /* | 7 | /* |
| 10 | * Generic header for SuperH SCI(F) (used by sh/sh64/h8300 and related parts) | 8 | * Generic header for SuperH SCI(F) (used by sh/sh64/h8300 and related parts) |
diff --git a/include/linux/sfi.h b/include/linux/sfi.h index 9a6f7607174e..0299b4ce63db 100644 --- a/include/linux/sfi.h +++ b/include/linux/sfi.h | |||
| @@ -73,6 +73,8 @@ | |||
| 73 | #define SFI_SIG_SPIB "SPIB" | 73 | #define SFI_SIG_SPIB "SPIB" |
| 74 | #define SFI_SIG_I2CB "I2CB" | 74 | #define SFI_SIG_I2CB "I2CB" |
| 75 | #define SFI_SIG_GPEM "GPEM" | 75 | #define SFI_SIG_GPEM "GPEM" |
| 76 | #define SFI_SIG_DEVS "DEVS" | ||
| 77 | #define SFI_SIG_GPIO "GPIO" | ||
| 76 | 78 | ||
| 77 | #define SFI_SIGNATURE_SIZE 4 | 79 | #define SFI_SIGNATURE_SIZE 4 |
| 78 | #define SFI_OEM_ID_SIZE 6 | 80 | #define SFI_OEM_ID_SIZE 6 |
| @@ -145,6 +147,27 @@ struct sfi_rtc_table_entry { | |||
| 145 | u32 irq; | 147 | u32 irq; |
| 146 | } __packed; | 148 | } __packed; |
| 147 | 149 | ||
| 150 | struct sfi_device_table_entry { | ||
| 151 | u8 type; /* bus type, I2C, SPI or ...*/ | ||
| 152 | #define SFI_DEV_TYPE_SPI 0 | ||
| 153 | #define SFI_DEV_TYPE_I2C 1 | ||
| 154 | #define SFI_DEV_TYPE_UART 2 | ||
| 155 | #define SFI_DEV_TYPE_HSI 3 | ||
| 156 | #define SFI_DEV_TYPE_IPC 4 | ||
| 157 | |||
| 158 | u8 host_num; /* attached to host 0, 1...*/ | ||
| 159 | u16 addr; | ||
| 160 | u8 irq; | ||
| 161 | u32 max_freq; | ||
| 162 | char name[16]; | ||
| 163 | } __packed; | ||
| 164 | |||
| 165 | struct sfi_gpio_table_entry { | ||
| 166 | char controller_name[16]; | ||
| 167 | u16 pin_no; | ||
| 168 | char pin_name[16]; | ||
| 169 | } __packed; | ||
| 170 | |||
| 148 | struct sfi_spi_table_entry { | 171 | struct sfi_spi_table_entry { |
| 149 | u16 host_num; /* attached to host 0, 1...*/ | 172 | u16 host_num; /* attached to host 0, 1...*/ |
| 150 | u16 cs; /* chip select */ | 173 | u16 cs; /* chip select */ |
| @@ -166,7 +189,6 @@ struct sfi_gpe_table_entry { | |||
| 166 | u16 phys_id; /* physical GPE id */ | 189 | u16 phys_id; /* physical GPE id */ |
| 167 | } __packed; | 190 | } __packed; |
| 168 | 191 | ||
| 169 | |||
| 170 | typedef int (*sfi_table_handler) (struct sfi_table_header *table); | 192 | typedef int (*sfi_table_handler) (struct sfi_table_header *table); |
| 171 | 193 | ||
| 172 | #ifdef CONFIG_SFI | 194 | #ifdef CONFIG_SFI |
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 7cdfb4d52847..f89e7fd59a4c 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
| @@ -380,7 +380,10 @@ struct sk_buff { | |||
| 380 | kmemcheck_bitfield_begin(flags2); | 380 | kmemcheck_bitfield_begin(flags2); |
| 381 | __u16 queue_mapping:16; | 381 | __u16 queue_mapping:16; |
| 382 | #ifdef CONFIG_IPV6_NDISC_NODETYPE | 382 | #ifdef CONFIG_IPV6_NDISC_NODETYPE |
| 383 | __u8 ndisc_nodetype:2; | 383 | __u8 ndisc_nodetype:2, |
| 384 | deliver_no_wcard:1; | ||
| 385 | #else | ||
| 386 | __u8 deliver_no_wcard:1; | ||
| 384 | #endif | 387 | #endif |
| 385 | kmemcheck_bitfield_end(flags2); | 388 | kmemcheck_bitfield_end(flags2); |
| 386 | 389 | ||
| @@ -501,7 +504,7 @@ static inline struct sk_buff *alloc_skb_fclone(unsigned int size, | |||
| 501 | return __alloc_skb(size, priority, 1, -1); | 504 | return __alloc_skb(size, priority, 1, -1); |
| 502 | } | 505 | } |
| 503 | 506 | ||
| 504 | extern int skb_recycle_check(struct sk_buff *skb, int skb_size); | 507 | extern bool skb_recycle_check(struct sk_buff *skb, int skb_size); |
| 505 | 508 | ||
| 506 | extern struct sk_buff *skb_morph(struct sk_buff *dst, struct sk_buff *src); | 509 | extern struct sk_buff *skb_morph(struct sk_buff *dst, struct sk_buff *src); |
| 507 | extern struct sk_buff *skb_clone(struct sk_buff *skb, | 510 | extern struct sk_buff *skb_clone(struct sk_buff *skb, |
diff --git a/include/linux/slub_def.h b/include/linux/slub_def.h index 55695c8d2f8a..4ba59cfc1f75 100644 --- a/include/linux/slub_def.h +++ b/include/linux/slub_def.h | |||
| @@ -75,12 +75,6 @@ struct kmem_cache { | |||
| 75 | int offset; /* Free pointer offset. */ | 75 | int offset; /* Free pointer offset. */ |
| 76 | struct kmem_cache_order_objects oo; | 76 | struct kmem_cache_order_objects oo; |
| 77 | 77 | ||
| 78 | /* | ||
| 79 | * Avoid an extra cache line for UP, SMP and for the node local to | ||
| 80 | * struct kmem_cache. | ||
| 81 | */ | ||
| 82 | struct kmem_cache_node local_node; | ||
| 83 | |||
| 84 | /* Allocation and freeing of slabs */ | 78 | /* Allocation and freeing of slabs */ |
| 85 | struct kmem_cache_order_objects max; | 79 | struct kmem_cache_order_objects max; |
| 86 | struct kmem_cache_order_objects min; | 80 | struct kmem_cache_order_objects min; |
| @@ -102,6 +96,9 @@ struct kmem_cache { | |||
| 102 | */ | 96 | */ |
| 103 | int remote_node_defrag_ratio; | 97 | int remote_node_defrag_ratio; |
| 104 | struct kmem_cache_node *node[MAX_NUMNODES]; | 98 | struct kmem_cache_node *node[MAX_NUMNODES]; |
| 99 | #else | ||
| 100 | /* Avoid an extra cache line for UP */ | ||
| 101 | struct kmem_cache_node local_node; | ||
| 105 | #endif | 102 | #endif |
| 106 | }; | 103 | }; |
| 107 | 104 | ||
| @@ -140,7 +137,7 @@ struct kmem_cache { | |||
| 140 | #ifdef CONFIG_ZONE_DMA | 137 | #ifdef CONFIG_ZONE_DMA |
| 141 | #define SLUB_DMA __GFP_DMA | 138 | #define SLUB_DMA __GFP_DMA |
| 142 | /* Reserve extra caches for potential DMA use */ | 139 | /* Reserve extra caches for potential DMA use */ |
| 143 | #define KMALLOC_CACHES (2 * SLUB_PAGE_SHIFT - 6) | 140 | #define KMALLOC_CACHES (2 * SLUB_PAGE_SHIFT) |
| 144 | #else | 141 | #else |
| 145 | /* Disable DMA functionality */ | 142 | /* Disable DMA functionality */ |
| 146 | #define SLUB_DMA (__force gfp_t)0 | 143 | #define SLUB_DMA (__force gfp_t)0 |
diff --git a/include/linux/spinlock.h b/include/linux/spinlock.h index 89fac6a3f78b..f8854655860e 100644 --- a/include/linux/spinlock.h +++ b/include/linux/spinlock.h | |||
| @@ -60,7 +60,7 @@ | |||
| 60 | /* | 60 | /* |
| 61 | * Must define these before including other files, inline functions need them | 61 | * Must define these before including other files, inline functions need them |
| 62 | */ | 62 | */ |
| 63 | #define LOCK_SECTION_NAME ".text.lock."KBUILD_BASENAME | 63 | #define LOCK_SECTION_NAME ".text..lock."KBUILD_BASENAME |
| 64 | 64 | ||
| 65 | #define LOCK_SECTION_START(extra) \ | 65 | #define LOCK_SECTION_START(extra) \ |
| 66 | ".subsection 1\n\t" \ | 66 | ".subsection 1\n\t" \ |
diff --git a/include/linux/swap.h b/include/linux/swap.h index b6b614364dd8..ff4acea9bbdb 100644 --- a/include/linux/swap.h +++ b/include/linux/swap.h | |||
| @@ -282,6 +282,11 @@ extern void kswapd_stop(int nid); | |||
| 282 | extern int shmem_unuse(swp_entry_t entry, struct page *page); | 282 | extern int shmem_unuse(swp_entry_t entry, struct page *page); |
| 283 | #endif /* CONFIG_MMU */ | 283 | #endif /* CONFIG_MMU */ |
| 284 | 284 | ||
| 285 | #ifdef CONFIG_CGROUP_MEM_RES_CTLR | ||
| 286 | extern void mem_cgroup_get_shmem_target(struct inode *inode, pgoff_t pgoff, | ||
| 287 | struct page **pagep, swp_entry_t *ent); | ||
| 288 | #endif | ||
| 289 | |||
| 285 | extern void swap_unplug_io_fn(struct backing_dev_info *, struct page *); | 290 | extern void swap_unplug_io_fn(struct backing_dev_info *, struct page *); |
| 286 | 291 | ||
| 287 | #ifdef CONFIG_SWAP | 292 | #ifdef CONFIG_SWAP |
diff --git a/include/linux/swiotlb.h b/include/linux/swiotlb.h index febedcf67c7e..81a4e213c6cf 100644 --- a/include/linux/swiotlb.h +++ b/include/linux/swiotlb.h | |||
| @@ -73,16 +73,6 @@ extern void | |||
| 73 | swiotlb_sync_sg_for_device(struct device *hwdev, struct scatterlist *sg, | 73 | swiotlb_sync_sg_for_device(struct device *hwdev, struct scatterlist *sg, |
| 74 | int nelems, enum dma_data_direction dir); | 74 | int nelems, enum dma_data_direction dir); |
| 75 | 75 | ||
| 76 | extern void | ||
| 77 | swiotlb_sync_single_range_for_cpu(struct device *hwdev, dma_addr_t dev_addr, | ||
| 78 | unsigned long offset, size_t size, | ||
| 79 | enum dma_data_direction dir); | ||
| 80 | |||
| 81 | extern void | ||
| 82 | swiotlb_sync_single_range_for_device(struct device *hwdev, dma_addr_t dev_addr, | ||
| 83 | unsigned long offset, size_t size, | ||
| 84 | enum dma_data_direction dir); | ||
| 85 | |||
| 86 | extern int | 76 | extern int |
| 87 | swiotlb_dma_mapping_error(struct device *hwdev, dma_addr_t dma_addr); | 77 | swiotlb_dma_mapping_error(struct device *hwdev, dma_addr_t dma_addr); |
| 88 | 78 | ||
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index 057929b0a651..7f614ce274a9 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h | |||
| @@ -103,22 +103,6 @@ struct perf_event_attr; | |||
| 103 | #define __SC_TEST5(t5, a5, ...) __SC_TEST(t5); __SC_TEST4(__VA_ARGS__) | 103 | #define __SC_TEST5(t5, a5, ...) __SC_TEST(t5); __SC_TEST4(__VA_ARGS__) |
| 104 | #define __SC_TEST6(t6, a6, ...) __SC_TEST(t6); __SC_TEST5(__VA_ARGS__) | 104 | #define __SC_TEST6(t6, a6, ...) __SC_TEST(t6); __SC_TEST5(__VA_ARGS__) |
| 105 | 105 | ||
| 106 | #ifdef CONFIG_PERF_EVENTS | ||
| 107 | |||
| 108 | #define TRACE_SYS_ENTER_PERF_INIT(sname) \ | ||
| 109 | .perf_event_enable = perf_sysenter_enable, \ | ||
| 110 | .perf_event_disable = perf_sysenter_disable, | ||
| 111 | |||
| 112 | #define TRACE_SYS_EXIT_PERF_INIT(sname) \ | ||
| 113 | .perf_event_enable = perf_sysexit_enable, \ | ||
| 114 | .perf_event_disable = perf_sysexit_disable, | ||
| 115 | #else | ||
| 116 | #define TRACE_SYS_ENTER_PERF(sname) | ||
| 117 | #define TRACE_SYS_ENTER_PERF_INIT(sname) | ||
| 118 | #define TRACE_SYS_EXIT_PERF(sname) | ||
| 119 | #define TRACE_SYS_EXIT_PERF_INIT(sname) | ||
| 120 | #endif /* CONFIG_PERF_EVENTS */ | ||
| 121 | |||
| 122 | #ifdef CONFIG_FTRACE_SYSCALLS | 106 | #ifdef CONFIG_FTRACE_SYSCALLS |
| 123 | #define __SC_STR_ADECL1(t, a) #a | 107 | #define __SC_STR_ADECL1(t, a) #a |
| 124 | #define __SC_STR_ADECL2(t, a, ...) #a, __SC_STR_ADECL1(__VA_ARGS__) | 108 | #define __SC_STR_ADECL2(t, a, ...) #a, __SC_STR_ADECL1(__VA_ARGS__) |
| @@ -134,54 +118,43 @@ struct perf_event_attr; | |||
| 134 | #define __SC_STR_TDECL5(t, a, ...) #t, __SC_STR_TDECL4(__VA_ARGS__) | 118 | #define __SC_STR_TDECL5(t, a, ...) #t, __SC_STR_TDECL4(__VA_ARGS__) |
| 135 | #define __SC_STR_TDECL6(t, a, ...) #t, __SC_STR_TDECL5(__VA_ARGS__) | 119 | #define __SC_STR_TDECL6(t, a, ...) #t, __SC_STR_TDECL5(__VA_ARGS__) |
| 136 | 120 | ||
| 121 | extern struct ftrace_event_class event_class_syscall_enter; | ||
| 122 | extern struct ftrace_event_class event_class_syscall_exit; | ||
| 123 | extern struct trace_event_functions enter_syscall_print_funcs; | ||
| 124 | extern struct trace_event_functions exit_syscall_print_funcs; | ||
| 125 | |||
| 137 | #define SYSCALL_TRACE_ENTER_EVENT(sname) \ | 126 | #define SYSCALL_TRACE_ENTER_EVENT(sname) \ |
| 138 | static const struct syscall_metadata __syscall_meta_##sname; \ | 127 | static struct syscall_metadata __syscall_meta_##sname; \ |
| 139 | static struct ftrace_event_call \ | 128 | static struct ftrace_event_call \ |
| 140 | __attribute__((__aligned__(4))) event_enter_##sname; \ | 129 | __attribute__((__aligned__(4))) event_enter_##sname; \ |
| 141 | static struct trace_event enter_syscall_print_##sname = { \ | ||
| 142 | .trace = print_syscall_enter, \ | ||
| 143 | }; \ | ||
| 144 | static struct ftrace_event_call __used \ | 130 | static struct ftrace_event_call __used \ |
| 145 | __attribute__((__aligned__(4))) \ | 131 | __attribute__((__aligned__(4))) \ |
| 146 | __attribute__((section("_ftrace_events"))) \ | 132 | __attribute__((section("_ftrace_events"))) \ |
| 147 | event_enter_##sname = { \ | 133 | event_enter_##sname = { \ |
| 148 | .name = "sys_enter"#sname, \ | 134 | .name = "sys_enter"#sname, \ |
| 149 | .system = "syscalls", \ | 135 | .class = &event_class_syscall_enter, \ |
| 150 | .event = &enter_syscall_print_##sname, \ | 136 | .event.funcs = &enter_syscall_print_funcs, \ |
| 151 | .raw_init = init_syscall_trace, \ | ||
| 152 | .define_fields = syscall_enter_define_fields, \ | ||
| 153 | .regfunc = reg_event_syscall_enter, \ | ||
| 154 | .unregfunc = unreg_event_syscall_enter, \ | ||
| 155 | .data = (void *)&__syscall_meta_##sname,\ | 137 | .data = (void *)&__syscall_meta_##sname,\ |
| 156 | TRACE_SYS_ENTER_PERF_INIT(sname) \ | ||
| 157 | } | 138 | } |
| 158 | 139 | ||
| 159 | #define SYSCALL_TRACE_EXIT_EVENT(sname) \ | 140 | #define SYSCALL_TRACE_EXIT_EVENT(sname) \ |
| 160 | static const struct syscall_metadata __syscall_meta_##sname; \ | 141 | static struct syscall_metadata __syscall_meta_##sname; \ |
| 161 | static struct ftrace_event_call \ | 142 | static struct ftrace_event_call \ |
| 162 | __attribute__((__aligned__(4))) event_exit_##sname; \ | 143 | __attribute__((__aligned__(4))) event_exit_##sname; \ |
| 163 | static struct trace_event exit_syscall_print_##sname = { \ | ||
| 164 | .trace = print_syscall_exit, \ | ||
| 165 | }; \ | ||
| 166 | static struct ftrace_event_call __used \ | 144 | static struct ftrace_event_call __used \ |
| 167 | __attribute__((__aligned__(4))) \ | 145 | __attribute__((__aligned__(4))) \ |
| 168 | __attribute__((section("_ftrace_events"))) \ | 146 | __attribute__((section("_ftrace_events"))) \ |
| 169 | event_exit_##sname = { \ | 147 | event_exit_##sname = { \ |
| 170 | .name = "sys_exit"#sname, \ | 148 | .name = "sys_exit"#sname, \ |
| 171 | .system = "syscalls", \ | 149 | .class = &event_class_syscall_exit, \ |
| 172 | .event = &exit_syscall_print_##sname, \ | 150 | .event.funcs = &exit_syscall_print_funcs, \ |
| 173 | .raw_init = init_syscall_trace, \ | ||
| 174 | .define_fields = syscall_exit_define_fields, \ | ||
| 175 | .regfunc = reg_event_syscall_exit, \ | ||
| 176 | .unregfunc = unreg_event_syscall_exit, \ | ||
| 177 | .data = (void *)&__syscall_meta_##sname,\ | 151 | .data = (void *)&__syscall_meta_##sname,\ |
| 178 | TRACE_SYS_EXIT_PERF_INIT(sname) \ | ||
| 179 | } | 152 | } |
| 180 | 153 | ||
| 181 | #define SYSCALL_METADATA(sname, nb) \ | 154 | #define SYSCALL_METADATA(sname, nb) \ |
| 182 | SYSCALL_TRACE_ENTER_EVENT(sname); \ | 155 | SYSCALL_TRACE_ENTER_EVENT(sname); \ |
| 183 | SYSCALL_TRACE_EXIT_EVENT(sname); \ | 156 | SYSCALL_TRACE_EXIT_EVENT(sname); \ |
| 184 | static const struct syscall_metadata __used \ | 157 | static struct syscall_metadata __used \ |
| 185 | __attribute__((__aligned__(4))) \ | 158 | __attribute__((__aligned__(4))) \ |
| 186 | __attribute__((section("__syscalls_metadata"))) \ | 159 | __attribute__((section("__syscalls_metadata"))) \ |
| 187 | __syscall_meta_##sname = { \ | 160 | __syscall_meta_##sname = { \ |
| @@ -191,12 +164,14 @@ struct perf_event_attr; | |||
| 191 | .args = args_##sname, \ | 164 | .args = args_##sname, \ |
| 192 | .enter_event = &event_enter_##sname, \ | 165 | .enter_event = &event_enter_##sname, \ |
| 193 | .exit_event = &event_exit_##sname, \ | 166 | .exit_event = &event_exit_##sname, \ |
| 167 | .enter_fields = LIST_HEAD_INIT(__syscall_meta_##sname.enter_fields), \ | ||
| 168 | .exit_fields = LIST_HEAD_INIT(__syscall_meta_##sname.exit_fields), \ | ||
| 194 | }; | 169 | }; |
| 195 | 170 | ||
| 196 | #define SYSCALL_DEFINE0(sname) \ | 171 | #define SYSCALL_DEFINE0(sname) \ |
| 197 | SYSCALL_TRACE_ENTER_EVENT(_##sname); \ | 172 | SYSCALL_TRACE_ENTER_EVENT(_##sname); \ |
| 198 | SYSCALL_TRACE_EXIT_EVENT(_##sname); \ | 173 | SYSCALL_TRACE_EXIT_EVENT(_##sname); \ |
| 199 | static const struct syscall_metadata __used \ | 174 | static struct syscall_metadata __used \ |
| 200 | __attribute__((__aligned__(4))) \ | 175 | __attribute__((__aligned__(4))) \ |
| 201 | __attribute__((section("__syscalls_metadata"))) \ | 176 | __attribute__((section("__syscalls_metadata"))) \ |
| 202 | __syscall_meta__##sname = { \ | 177 | __syscall_meta__##sname = { \ |
| @@ -204,6 +179,8 @@ struct perf_event_attr; | |||
| 204 | .nb_args = 0, \ | 179 | .nb_args = 0, \ |
| 205 | .enter_event = &event_enter__##sname, \ | 180 | .enter_event = &event_enter__##sname, \ |
| 206 | .exit_event = &event_exit__##sname, \ | 181 | .exit_event = &event_exit__##sname, \ |
| 182 | .enter_fields = LIST_HEAD_INIT(__syscall_meta__##sname.enter_fields), \ | ||
| 183 | .exit_fields = LIST_HEAD_INIT(__syscall_meta__##sname.exit_fields), \ | ||
| 207 | }; \ | 184 | }; \ |
| 208 | asmlinkage long sys_##sname(void) | 185 | asmlinkage long sys_##sname(void) |
| 209 | #else | 186 | #else |
| @@ -312,7 +289,7 @@ asmlinkage long sys_capget(cap_user_header_t header, | |||
| 312 | cap_user_data_t dataptr); | 289 | cap_user_data_t dataptr); |
| 313 | asmlinkage long sys_capset(cap_user_header_t header, | 290 | asmlinkage long sys_capset(cap_user_header_t header, |
| 314 | const cap_user_data_t data); | 291 | const cap_user_data_t data); |
| 315 | asmlinkage long sys_personality(u_long personality); | 292 | asmlinkage long sys_personality(unsigned int personality); |
| 316 | 293 | ||
| 317 | asmlinkage long sys_sigpending(old_sigset_t __user *set); | 294 | asmlinkage long sys_sigpending(old_sigset_t __user *set); |
| 318 | asmlinkage long sys_sigprocmask(int how, old_sigset_t __user *set, | 295 | asmlinkage long sys_sigprocmask(int how, old_sigset_t __user *set, |
diff --git a/include/linux/threads.h b/include/linux/threads.h index 052b12bec8bd..383ab9592bec 100644 --- a/include/linux/threads.h +++ b/include/linux/threads.h | |||
| @@ -33,4 +33,13 @@ | |||
| 33 | #define PID_MAX_LIMIT (CONFIG_BASE_SMALL ? PAGE_SIZE * 8 : \ | 33 | #define PID_MAX_LIMIT (CONFIG_BASE_SMALL ? PAGE_SIZE * 8 : \ |
| 34 | (sizeof(long) > 4 ? 4 * 1024 * 1024 : PID_MAX_DEFAULT)) | 34 | (sizeof(long) > 4 ? 4 * 1024 * 1024 : PID_MAX_DEFAULT)) |
| 35 | 35 | ||
| 36 | /* | ||
| 37 | * Define a minimum number of pids per cpu. Heuristically based | ||
| 38 | * on original pid max of 32k for 32 cpus. Also, increase the | ||
| 39 | * minimum settable value for pid_max on the running system based | ||
| 40 | * on similar defaults. See kernel/pid.c:pidmap_init() for details. | ||
| 41 | */ | ||
| 42 | #define PIDS_PER_CPU_DEFAULT 1024 | ||
| 43 | #define PIDS_PER_CPU_MIN 8 | ||
| 44 | |||
| 36 | #endif | 45 | #endif |
diff --git a/include/linux/topology.h b/include/linux/topology.h index 5b81156780b1..c44df50a05ab 100644 --- a/include/linux/topology.h +++ b/include/linux/topology.h | |||
| @@ -31,6 +31,7 @@ | |||
| 31 | #include <linux/bitops.h> | 31 | #include <linux/bitops.h> |
| 32 | #include <linux/mmzone.h> | 32 | #include <linux/mmzone.h> |
| 33 | #include <linux/smp.h> | 33 | #include <linux/smp.h> |
| 34 | #include <linux/percpu.h> | ||
| 34 | #include <asm/topology.h> | 35 | #include <asm/topology.h> |
| 35 | 36 | ||
| 36 | #ifndef node_has_online_mem | 37 | #ifndef node_has_online_mem |
| @@ -203,8 +204,114 @@ int arch_update_cpu_topology(void); | |||
| 203 | #ifndef SD_NODE_INIT | 204 | #ifndef SD_NODE_INIT |
| 204 | #error Please define an appropriate SD_NODE_INIT in include/asm/topology.h!!! | 205 | #error Please define an appropriate SD_NODE_INIT in include/asm/topology.h!!! |
| 205 | #endif | 206 | #endif |
| 207 | |||
| 206 | #endif /* CONFIG_NUMA */ | 208 | #endif /* CONFIG_NUMA */ |
| 207 | 209 | ||
| 210 | #ifdef CONFIG_USE_PERCPU_NUMA_NODE_ID | ||
| 211 | DECLARE_PER_CPU(int, numa_node); | ||
| 212 | |||
| 213 | #ifndef numa_node_id | ||
| 214 | /* Returns the number of the current Node. */ | ||
| 215 | static inline int numa_node_id(void) | ||
| 216 | { | ||
| 217 | return __this_cpu_read(numa_node); | ||
| 218 | } | ||
| 219 | #endif | ||
| 220 | |||
| 221 | #ifndef cpu_to_node | ||
| 222 | static inline int cpu_to_node(int cpu) | ||
| 223 | { | ||
| 224 | return per_cpu(numa_node, cpu); | ||
| 225 | } | ||
| 226 | #endif | ||
| 227 | |||
| 228 | #ifndef set_numa_node | ||
| 229 | static inline void set_numa_node(int node) | ||
| 230 | { | ||
| 231 | percpu_write(numa_node, node); | ||
| 232 | } | ||
| 233 | #endif | ||
| 234 | |||
| 235 | #ifndef set_cpu_numa_node | ||
| 236 | static inline void set_cpu_numa_node(int cpu, int node) | ||
| 237 | { | ||
| 238 | per_cpu(numa_node, cpu) = node; | ||
| 239 | } | ||
| 240 | #endif | ||
| 241 | |||
| 242 | #else /* !CONFIG_USE_PERCPU_NUMA_NODE_ID */ | ||
| 243 | |||
| 244 | /* Returns the number of the current Node. */ | ||
| 245 | #ifndef numa_node_id | ||
| 246 | static inline int numa_node_id(void) | ||
| 247 | { | ||
| 248 | return cpu_to_node(raw_smp_processor_id()); | ||
| 249 | } | ||
| 250 | #endif | ||
| 251 | |||
| 252 | #endif /* [!]CONFIG_USE_PERCPU_NUMA_NODE_ID */ | ||
| 253 | |||
| 254 | #ifdef CONFIG_HAVE_MEMORYLESS_NODES | ||
| 255 | |||
| 256 | /* | ||
| 257 | * N.B., Do NOT reference the '_numa_mem_' per cpu variable directly. | ||
| 258 | * It will not be defined when CONFIG_HAVE_MEMORYLESS_NODES is not defined. | ||
| 259 | * Use the accessor functions set_numa_mem(), numa_mem_id() and cpu_to_mem(). | ||
| 260 | */ | ||
| 261 | DECLARE_PER_CPU(int, _numa_mem_); | ||
| 262 | |||
| 263 | #ifndef set_numa_mem | ||
| 264 | static inline void set_numa_mem(int node) | ||
| 265 | { | ||
| 266 | percpu_write(_numa_mem_, node); | ||
| 267 | } | ||
| 268 | #endif | ||
| 269 | |||
| 270 | #ifndef numa_mem_id | ||
| 271 | /* Returns the number of the nearest Node with memory */ | ||
| 272 | static inline int numa_mem_id(void) | ||
| 273 | { | ||
| 274 | return __this_cpu_read(_numa_mem_); | ||
| 275 | } | ||
| 276 | #endif | ||
| 277 | |||
| 278 | #ifndef cpu_to_mem | ||
| 279 | static inline int cpu_to_mem(int cpu) | ||
| 280 | { | ||
| 281 | return per_cpu(_numa_mem_, cpu); | ||
| 282 | } | ||
| 283 | #endif | ||
| 284 | |||
| 285 | #ifndef set_cpu_numa_mem | ||
| 286 | static inline void set_cpu_numa_mem(int cpu, int node) | ||
| 287 | { | ||
| 288 | per_cpu(_numa_mem_, cpu) = node; | ||
| 289 | } | ||
| 290 | #endif | ||
| 291 | |||
| 292 | #else /* !CONFIG_HAVE_MEMORYLESS_NODES */ | ||
| 293 | |||
| 294 | static inline void set_numa_mem(int node) {} | ||
| 295 | |||
| 296 | static inline void set_cpu_numa_mem(int cpu, int node) {} | ||
| 297 | |||
| 298 | #ifndef numa_mem_id | ||
| 299 | /* Returns the number of the nearest Node with memory */ | ||
| 300 | static inline int numa_mem_id(void) | ||
| 301 | { | ||
| 302 | return numa_node_id(); | ||
| 303 | } | ||
| 304 | #endif | ||
| 305 | |||
| 306 | #ifndef cpu_to_mem | ||
| 307 | static inline int cpu_to_mem(int cpu) | ||
| 308 | { | ||
| 309 | return cpu_to_node(cpu); | ||
| 310 | } | ||
| 311 | #endif | ||
| 312 | |||
| 313 | #endif /* [!]CONFIG_HAVE_MEMORYLESS_NODES */ | ||
| 314 | |||
| 208 | #ifndef topology_physical_package_id | 315 | #ifndef topology_physical_package_id |
| 209 | #define topology_physical_package_id(cpu) ((void)(cpu), -1) | 316 | #define topology_physical_package_id(cpu) ((void)(cpu), -1) |
| 210 | #endif | 317 | #endif |
| @@ -218,9 +325,4 @@ int arch_update_cpu_topology(void); | |||
| 218 | #define topology_core_cpumask(cpu) cpumask_of(cpu) | 325 | #define topology_core_cpumask(cpu) cpumask_of(cpu) |
| 219 | #endif | 326 | #endif |
| 220 | 327 | ||
| 221 | /* Returns the number of the current Node. */ | ||
| 222 | #ifndef numa_node_id | ||
| 223 | #define numa_node_id() (cpu_to_node(raw_smp_processor_id())) | ||
| 224 | #endif | ||
| 225 | |||
| 226 | #endif /* _LINUX_TOPOLOGY_H */ | 328 | #endif /* _LINUX_TOPOLOGY_H */ |
diff --git a/include/linux/tracepoint.h b/include/linux/tracepoint.h index 1d85f9a6a199..9a59d1f98cd4 100644 --- a/include/linux/tracepoint.h +++ b/include/linux/tracepoint.h | |||
| @@ -20,12 +20,17 @@ | |||
| 20 | struct module; | 20 | struct module; |
| 21 | struct tracepoint; | 21 | struct tracepoint; |
| 22 | 22 | ||
| 23 | struct tracepoint_func { | ||
| 24 | void *func; | ||
| 25 | void *data; | ||
| 26 | }; | ||
| 27 | |||
| 23 | struct tracepoint { | 28 | struct tracepoint { |
| 24 | const char *name; /* Tracepoint name */ | 29 | const char *name; /* Tracepoint name */ |
| 25 | int state; /* State. */ | 30 | int state; /* State. */ |
| 26 | void (*regfunc)(void); | 31 | void (*regfunc)(void); |
| 27 | void (*unregfunc)(void); | 32 | void (*unregfunc)(void); |
| 28 | void **funcs; | 33 | struct tracepoint_func *funcs; |
| 29 | } __attribute__((aligned(32))); /* | 34 | } __attribute__((aligned(32))); /* |
| 30 | * Aligned on 32 bytes because it is | 35 | * Aligned on 32 bytes because it is |
| 31 | * globally visible and gcc happily | 36 | * globally visible and gcc happily |
| @@ -37,16 +42,19 @@ struct tracepoint { | |||
| 37 | * Connect a probe to a tracepoint. | 42 | * Connect a probe to a tracepoint. |
| 38 | * Internal API, should not be used directly. | 43 | * Internal API, should not be used directly. |
| 39 | */ | 44 | */ |
| 40 | extern int tracepoint_probe_register(const char *name, void *probe); | 45 | extern int tracepoint_probe_register(const char *name, void *probe, void *data); |
| 41 | 46 | ||
| 42 | /* | 47 | /* |
| 43 | * Disconnect a probe from a tracepoint. | 48 | * Disconnect a probe from a tracepoint. |
| 44 | * Internal API, should not be used directly. | 49 | * Internal API, should not be used directly. |
| 45 | */ | 50 | */ |
| 46 | extern int tracepoint_probe_unregister(const char *name, void *probe); | 51 | extern int |
| 52 | tracepoint_probe_unregister(const char *name, void *probe, void *data); | ||
| 47 | 53 | ||
| 48 | extern int tracepoint_probe_register_noupdate(const char *name, void *probe); | 54 | extern int tracepoint_probe_register_noupdate(const char *name, void *probe, |
| 49 | extern int tracepoint_probe_unregister_noupdate(const char *name, void *probe); | 55 | void *data); |
| 56 | extern int tracepoint_probe_unregister_noupdate(const char *name, void *probe, | ||
| 57 | void *data); | ||
| 50 | extern void tracepoint_probe_update_all(void); | 58 | extern void tracepoint_probe_update_all(void); |
| 51 | 59 | ||
| 52 | struct tracepoint_iter { | 60 | struct tracepoint_iter { |
| @@ -102,17 +110,27 @@ static inline void tracepoint_update_probe_range(struct tracepoint *begin, | |||
| 102 | /* | 110 | /* |
| 103 | * it_func[0] is never NULL because there is at least one element in the array | 111 | * it_func[0] is never NULL because there is at least one element in the array |
| 104 | * when the array itself is non NULL. | 112 | * when the array itself is non NULL. |
| 113 | * | ||
| 114 | * Note, the proto and args passed in includes "__data" as the first parameter. | ||
| 115 | * The reason for this is to handle the "void" prototype. If a tracepoint | ||
| 116 | * has a "void" prototype, then it is invalid to declare a function | ||
| 117 | * as "(void *, void)". The DECLARE_TRACE_NOARGS() will pass in just | ||
| 118 | * "void *data", where as the DECLARE_TRACE() will pass in "void *data, proto". | ||
| 105 | */ | 119 | */ |
| 106 | #define __DO_TRACE(tp, proto, args) \ | 120 | #define __DO_TRACE(tp, proto, args) \ |
| 107 | do { \ | 121 | do { \ |
| 108 | void **it_func; \ | 122 | struct tracepoint_func *it_func_ptr; \ |
| 123 | void *it_func; \ | ||
| 124 | void *__data; \ | ||
| 109 | \ | 125 | \ |
| 110 | rcu_read_lock_sched_notrace(); \ | 126 | rcu_read_lock_sched_notrace(); \ |
| 111 | it_func = rcu_dereference_sched((tp)->funcs); \ | 127 | it_func_ptr = rcu_dereference_sched((tp)->funcs); \ |
| 112 | if (it_func) { \ | 128 | if (it_func_ptr) { \ |
| 113 | do { \ | 129 | do { \ |
| 114 | ((void(*)(proto))(*it_func))(args); \ | 130 | it_func = (it_func_ptr)->func; \ |
| 115 | } while (*(++it_func)); \ | 131 | __data = (it_func_ptr)->data; \ |
| 132 | ((void(*)(proto))(it_func))(args); \ | ||
| 133 | } while ((++it_func_ptr)->func); \ | ||
| 116 | } \ | 134 | } \ |
| 117 | rcu_read_unlock_sched_notrace(); \ | 135 | rcu_read_unlock_sched_notrace(); \ |
| 118 | } while (0) | 136 | } while (0) |
| @@ -122,24 +140,32 @@ static inline void tracepoint_update_probe_range(struct tracepoint *begin, | |||
| 122 | * not add unwanted padding between the beginning of the section and the | 140 | * not add unwanted padding between the beginning of the section and the |
| 123 | * structure. Force alignment to the same alignment as the section start. | 141 | * structure. Force alignment to the same alignment as the section start. |
| 124 | */ | 142 | */ |
| 125 | #define DECLARE_TRACE(name, proto, args) \ | 143 | #define __DECLARE_TRACE(name, proto, args, data_proto, data_args) \ |
| 126 | extern struct tracepoint __tracepoint_##name; \ | 144 | extern struct tracepoint __tracepoint_##name; \ |
| 127 | static inline void trace_##name(proto) \ | 145 | static inline void trace_##name(proto) \ |
| 128 | { \ | 146 | { \ |
| 129 | if (unlikely(__tracepoint_##name.state)) \ | 147 | if (unlikely(__tracepoint_##name.state)) \ |
| 130 | __DO_TRACE(&__tracepoint_##name, \ | 148 | __DO_TRACE(&__tracepoint_##name, \ |
| 131 | TP_PROTO(proto), TP_ARGS(args)); \ | 149 | TP_PROTO(data_proto), \ |
| 150 | TP_ARGS(data_args)); \ | ||
| 151 | } \ | ||
| 152 | static inline int \ | ||
| 153 | register_trace_##name(void (*probe)(data_proto), void *data) \ | ||
| 154 | { \ | ||
| 155 | return tracepoint_probe_register(#name, (void *)probe, \ | ||
| 156 | data); \ | ||
| 132 | } \ | 157 | } \ |
| 133 | static inline int register_trace_##name(void (*probe)(proto)) \ | 158 | static inline int \ |
| 159 | unregister_trace_##name(void (*probe)(data_proto), void *data) \ | ||
| 134 | { \ | 160 | { \ |
| 135 | return tracepoint_probe_register(#name, (void *)probe); \ | 161 | return tracepoint_probe_unregister(#name, (void *)probe, \ |
| 162 | data); \ | ||
| 136 | } \ | 163 | } \ |
| 137 | static inline int unregister_trace_##name(void (*probe)(proto)) \ | 164 | static inline void \ |
| 165 | check_trace_callback_type_##name(void (*cb)(data_proto)) \ | ||
| 138 | { \ | 166 | { \ |
| 139 | return tracepoint_probe_unregister(#name, (void *)probe);\ | ||
| 140 | } | 167 | } |
| 141 | 168 | ||
| 142 | |||
| 143 | #define DEFINE_TRACE_FN(name, reg, unreg) \ | 169 | #define DEFINE_TRACE_FN(name, reg, unreg) \ |
| 144 | static const char __tpstrtab_##name[] \ | 170 | static const char __tpstrtab_##name[] \ |
| 145 | __attribute__((section("__tracepoints_strings"))) = #name; \ | 171 | __attribute__((section("__tracepoints_strings"))) = #name; \ |
| @@ -156,18 +182,23 @@ static inline void tracepoint_update_probe_range(struct tracepoint *begin, | |||
| 156 | EXPORT_SYMBOL(__tracepoint_##name) | 182 | EXPORT_SYMBOL(__tracepoint_##name) |
| 157 | 183 | ||
| 158 | #else /* !CONFIG_TRACEPOINTS */ | 184 | #else /* !CONFIG_TRACEPOINTS */ |
| 159 | #define DECLARE_TRACE(name, proto, args) \ | 185 | #define __DECLARE_TRACE(name, proto, args, data_proto, data_args) \ |
| 160 | static inline void _do_trace_##name(struct tracepoint *tp, proto) \ | ||
| 161 | { } \ | ||
| 162 | static inline void trace_##name(proto) \ | 186 | static inline void trace_##name(proto) \ |
| 163 | { } \ | 187 | { } \ |
| 164 | static inline int register_trace_##name(void (*probe)(proto)) \ | 188 | static inline int \ |
| 189 | register_trace_##name(void (*probe)(data_proto), \ | ||
| 190 | void *data) \ | ||
| 165 | { \ | 191 | { \ |
| 166 | return -ENOSYS; \ | 192 | return -ENOSYS; \ |
| 167 | } \ | 193 | } \ |
| 168 | static inline int unregister_trace_##name(void (*probe)(proto)) \ | 194 | static inline int \ |
| 195 | unregister_trace_##name(void (*probe)(data_proto), \ | ||
| 196 | void *data) \ | ||
| 169 | { \ | 197 | { \ |
| 170 | return -ENOSYS; \ | 198 | return -ENOSYS; \ |
| 199 | } \ | ||
| 200 | static inline void check_trace_callback_type_##name(void (*cb)(data_proto)) \ | ||
| 201 | { \ | ||
| 171 | } | 202 | } |
| 172 | 203 | ||
| 173 | #define DEFINE_TRACE_FN(name, reg, unreg) | 204 | #define DEFINE_TRACE_FN(name, reg, unreg) |
| @@ -176,6 +207,29 @@ static inline void tracepoint_update_probe_range(struct tracepoint *begin, | |||
| 176 | #define EXPORT_TRACEPOINT_SYMBOL(name) | 207 | #define EXPORT_TRACEPOINT_SYMBOL(name) |
| 177 | 208 | ||
| 178 | #endif /* CONFIG_TRACEPOINTS */ | 209 | #endif /* CONFIG_TRACEPOINTS */ |
| 210 | |||
| 211 | /* | ||
| 212 | * The need for the DECLARE_TRACE_NOARGS() is to handle the prototype | ||
| 213 | * (void). "void" is a special value in a function prototype and can | ||
| 214 | * not be combined with other arguments. Since the DECLARE_TRACE() | ||
| 215 | * macro adds a data element at the beginning of the prototype, | ||
| 216 | * we need a way to differentiate "(void *data, proto)" from | ||
| 217 | * "(void *data, void)". The second prototype is invalid. | ||
| 218 | * | ||
| 219 | * DECLARE_TRACE_NOARGS() passes "void" as the tracepoint prototype | ||
| 220 | * and "void *__data" as the callback prototype. | ||
| 221 | * | ||
| 222 | * DECLARE_TRACE() passes "proto" as the tracepoint protoype and | ||
| 223 | * "void *__data, proto" as the callback prototype. | ||
| 224 | */ | ||
| 225 | #define DECLARE_TRACE_NOARGS(name) \ | ||
| 226 | __DECLARE_TRACE(name, void, , void *__data, __data) | ||
| 227 | |||
| 228 | #define DECLARE_TRACE(name, proto, args) \ | ||
| 229 | __DECLARE_TRACE(name, PARAMS(proto), PARAMS(args), \ | ||
| 230 | PARAMS(void *__data, proto), \ | ||
| 231 | PARAMS(__data, args)) | ||
| 232 | |||
| 179 | #endif /* DECLARE_TRACE */ | 233 | #endif /* DECLARE_TRACE */ |
| 180 | 234 | ||
| 181 | #ifndef TRACE_EVENT | 235 | #ifndef TRACE_EVENT |
diff --git a/include/linux/uinput.h b/include/linux/uinput.h index 15ddd4483b09..60c81da77f0f 100644 --- a/include/linux/uinput.h +++ b/include/linux/uinput.h | |||
| @@ -166,11 +166,11 @@ struct uinput_ff_erase { | |||
| 166 | struct uinput_user_dev { | 166 | struct uinput_user_dev { |
| 167 | char name[UINPUT_MAX_NAME_SIZE]; | 167 | char name[UINPUT_MAX_NAME_SIZE]; |
| 168 | struct input_id id; | 168 | struct input_id id; |
| 169 | int ff_effects_max; | 169 | int ff_effects_max; |
| 170 | int absmax[ABS_MAX + 1]; | 170 | int absmax[ABS_CNT]; |
| 171 | int absmin[ABS_MAX + 1]; | 171 | int absmin[ABS_CNT]; |
| 172 | int absfuzz[ABS_MAX + 1]; | 172 | int absfuzz[ABS_CNT]; |
| 173 | int absflat[ABS_MAX + 1]; | 173 | int absflat[ABS_CNT]; |
| 174 | }; | 174 | }; |
| 175 | #endif /* __UINPUT_H_ */ | 175 | #endif /* __UINPUT_H_ */ |
| 176 | 176 | ||
diff --git a/include/linux/usb/audio-v2.h b/include/linux/usb/audio-v2.h index 2389f93a28b5..383b94ba8c20 100644 --- a/include/linux/usb/audio-v2.h +++ b/include/linux/usb/audio-v2.h | |||
| @@ -18,6 +18,16 @@ | |||
| 18 | /* v1.0 and v2.0 of this standard have many things in common. For the rest | 18 | /* v1.0 and v2.0 of this standard have many things in common. For the rest |
| 19 | * of the definitions, please refer to audio.h */ | 19 | * of the definitions, please refer to audio.h */ |
| 20 | 20 | ||
| 21 | static inline bool uac2_control_is_readable(u32 bmControls, u8 control) | ||
| 22 | { | ||
| 23 | return (bmControls >> (control * 2)) & 0x1; | ||
| 24 | } | ||
| 25 | |||
| 26 | static inline bool uac2_control_is_writeable(u32 bmControls, u8 control) | ||
| 27 | { | ||
| 28 | return (bmControls >> (control * 2)) & 0x2; | ||
| 29 | } | ||
| 30 | |||
| 21 | /* 4.7.2.1 Clock Source Descriptor */ | 31 | /* 4.7.2.1 Clock Source Descriptor */ |
| 22 | 32 | ||
| 23 | struct uac_clock_source_descriptor { | 33 | struct uac_clock_source_descriptor { |
| @@ -31,6 +41,13 @@ struct uac_clock_source_descriptor { | |||
| 31 | __u8 iClockSource; | 41 | __u8 iClockSource; |
| 32 | } __attribute__((packed)); | 42 | } __attribute__((packed)); |
| 33 | 43 | ||
| 44 | /* bmAttribute fields */ | ||
| 45 | #define UAC_CLOCK_SOURCE_TYPE_EXT 0x0 | ||
| 46 | #define UAC_CLOCK_SOURCE_TYPE_INT_FIXED 0x1 | ||
| 47 | #define UAC_CLOCK_SOURCE_TYPE_INT_VAR 0x2 | ||
| 48 | #define UAC_CLOCK_SOURCE_TYPE_INT_PROG 0x3 | ||
| 49 | #define UAC_CLOCK_SOURCE_SYNCED_TO_SOF (1 << 2) | ||
| 50 | |||
| 34 | /* 4.7.2.2 Clock Source Descriptor */ | 51 | /* 4.7.2.2 Clock Source Descriptor */ |
| 35 | 52 | ||
| 36 | struct uac_clock_selector_descriptor { | 53 | struct uac_clock_selector_descriptor { |
| @@ -39,8 +56,20 @@ struct uac_clock_selector_descriptor { | |||
| 39 | __u8 bDescriptorSubtype; | 56 | __u8 bDescriptorSubtype; |
| 40 | __u8 bClockID; | 57 | __u8 bClockID; |
| 41 | __u8 bNrInPins; | 58 | __u8 bNrInPins; |
| 42 | __u8 bmControls; | ||
| 43 | __u8 baCSourceID[]; | 59 | __u8 baCSourceID[]; |
| 60 | /* bmControls, bAssocTerminal and iClockSource omitted */ | ||
| 61 | } __attribute__((packed)); | ||
| 62 | |||
| 63 | /* 4.7.2.3 Clock Multiplier Descriptor */ | ||
| 64 | |||
| 65 | struct uac_clock_multiplier_descriptor { | ||
| 66 | __u8 bLength; | ||
| 67 | __u8 bDescriptorType; | ||
| 68 | __u8 bDescriptorSubtype; | ||
| 69 | __u8 bClockID; | ||
| 70 | __u8 bCSourceID; | ||
| 71 | __u8 bmControls; | ||
| 72 | __u8 iClockMultiplier; | ||
| 44 | } __attribute__((packed)); | 73 | } __attribute__((packed)); |
| 45 | 74 | ||
| 46 | /* 4.7.2.4 Input terminal descriptor */ | 75 | /* 4.7.2.4 Input terminal descriptor */ |
| @@ -105,6 +134,22 @@ struct uac_as_header_descriptor_v2 { | |||
| 105 | __u8 iChannelNames; | 134 | __u8 iChannelNames; |
| 106 | } __attribute__((packed)); | 135 | } __attribute__((packed)); |
| 107 | 136 | ||
| 137 | /* 4.10.1.2 Class-Specific AS Isochronous Audio Data Endpoint Descriptor */ | ||
| 138 | |||
| 139 | struct uac2_iso_endpoint_descriptor { | ||
| 140 | __u8 bLength; /* in bytes: 8 */ | ||
| 141 | __u8 bDescriptorType; /* USB_DT_CS_ENDPOINT */ | ||
| 142 | __u8 bDescriptorSubtype; /* EP_GENERAL */ | ||
| 143 | __u8 bmAttributes; | ||
| 144 | __u8 bmControls; | ||
| 145 | __u8 bLockDelayUnits; | ||
| 146 | __le16 wLockDelay; | ||
| 147 | } __attribute__((packed)); | ||
| 148 | |||
| 149 | #define UAC2_CONTROL_PITCH (3 << 0) | ||
| 150 | #define UAC2_CONTROL_DATA_OVERRUN (3 << 2) | ||
| 151 | #define UAC2_CONTROL_DATA_UNDERRUN (3 << 4) | ||
| 152 | |||
| 108 | /* 6.1 Interrupt Data Message */ | 153 | /* 6.1 Interrupt Data Message */ |
| 109 | 154 | ||
| 110 | #define UAC2_INTERRUPT_DATA_MSG_VENDOR (1 << 0) | 155 | #define UAC2_INTERRUPT_DATA_MSG_VENDOR (1 << 0) |
diff --git a/include/linux/usb/audio.h b/include/linux/usb/audio.h index 5d646c388752..c51200c715e5 100644 --- a/include/linux/usb/audio.h +++ b/include/linux/usb/audio.h | |||
| @@ -47,6 +47,15 @@ | |||
| 47 | #define UAC_FORMAT_TYPE 0x02 | 47 | #define UAC_FORMAT_TYPE 0x02 |
| 48 | #define UAC_FORMAT_SPECIFIC 0x03 | 48 | #define UAC_FORMAT_SPECIFIC 0x03 |
| 49 | 49 | ||
| 50 | /* A.7 Processing Unit Process Types */ | ||
| 51 | #define UAC_PROCESS_UNDEFINED 0x00 | ||
| 52 | #define UAC_PROCESS_UP_DOWNMIX 0x01 | ||
| 53 | #define UAC_PROCESS_DOLBY_PROLOGIC 0x02 | ||
| 54 | #define UAC_PROCESS_STEREO_EXTENDER 0x03 | ||
| 55 | #define UAC_PROCESS_REVERB 0x04 | ||
| 56 | #define UAC_PROCESS_CHORUS 0x05 | ||
| 57 | #define UAC_PROCESS_DYN_RANGE_COMP 0x06 | ||
| 58 | |||
| 50 | /* A.8 Audio Class-Specific Endpoint Descriptor Subtypes */ | 59 | /* A.8 Audio Class-Specific Endpoint Descriptor Subtypes */ |
| 51 | #define UAC_EP_GENERAL 0x01 | 60 | #define UAC_EP_GENERAL 0x01 |
| 52 | 61 | ||
| @@ -73,6 +82,60 @@ | |||
| 73 | 82 | ||
| 74 | #define UAC_GET_STAT 0xff | 83 | #define UAC_GET_STAT 0xff |
| 75 | 84 | ||
| 85 | /* A.10 Control Selector Codes */ | ||
| 86 | |||
| 87 | /* A.10.1 Terminal Control Selectors */ | ||
| 88 | #define UAC_TERM_COPY_PROTECT 0x01 | ||
| 89 | |||
| 90 | /* A.10.2 Feature Unit Control Selectors */ | ||
| 91 | #define UAC_FU_MUTE 0x01 | ||
| 92 | #define UAC_FU_VOLUME 0x02 | ||
| 93 | #define UAC_FU_BASS 0x03 | ||
| 94 | #define UAC_FU_MID 0x04 | ||
| 95 | #define UAC_FU_TREBLE 0x05 | ||
| 96 | #define UAC_FU_GRAPHIC_EQUALIZER 0x06 | ||
| 97 | #define UAC_FU_AUTOMATIC_GAIN 0x07 | ||
| 98 | #define UAC_FU_DELAY 0x08 | ||
| 99 | #define UAC_FU_BASS_BOOST 0x09 | ||
| 100 | #define UAC_FU_LOUDNESS 0x0a | ||
| 101 | |||
| 102 | #define UAC_CONTROL_BIT(CS) (1 << ((CS) - 1)) | ||
| 103 | |||
| 104 | /* A.10.3.1 Up/Down-mix Processing Unit Controls Selectors */ | ||
| 105 | #define UAC_UD_ENABLE 0x01 | ||
| 106 | #define UAC_UD_MODE_SELECT 0x02 | ||
| 107 | |||
| 108 | /* A.10.3.2 Dolby Prologic (tm) Processing Unit Controls Selectors */ | ||
| 109 | #define UAC_DP_ENABLE 0x01 | ||
| 110 | #define UAC_DP_MODE_SELECT 0x02 | ||
| 111 | |||
| 112 | /* A.10.3.3 3D Stereo Extender Processing Unit Control Selectors */ | ||
| 113 | #define UAC_3D_ENABLE 0x01 | ||
| 114 | #define UAC_3D_SPACE 0x02 | ||
| 115 | |||
| 116 | /* A.10.3.4 Reverberation Processing Unit Control Selectors */ | ||
| 117 | #define UAC_REVERB_ENABLE 0x01 | ||
| 118 | #define UAC_REVERB_LEVEL 0x02 | ||
| 119 | #define UAC_REVERB_TIME 0x03 | ||
| 120 | #define UAC_REVERB_FEEDBACK 0x04 | ||
| 121 | |||
| 122 | /* A.10.3.5 Chorus Processing Unit Control Selectors */ | ||
| 123 | #define UAC_CHORUS_ENABLE 0x01 | ||
| 124 | #define UAC_CHORUS_LEVEL 0x02 | ||
| 125 | #define UAC_CHORUS_RATE 0x03 | ||
| 126 | #define UAC_CHORUS_DEPTH 0x04 | ||
| 127 | |||
| 128 | /* A.10.3.6 Dynamic Range Compressor Unit Control Selectors */ | ||
| 129 | #define UAC_DCR_ENABLE 0x01 | ||
| 130 | #define UAC_DCR_RATE 0x02 | ||
| 131 | #define UAC_DCR_MAXAMPL 0x03 | ||
| 132 | #define UAC_DCR_THRESHOLD 0x04 | ||
| 133 | #define UAC_DCR_ATTACK_TIME 0x05 | ||
| 134 | #define UAC_DCR_RELEASE_TIME 0x06 | ||
| 135 | |||
| 136 | /* A.10.4 Extension Unit Control Selectors */ | ||
| 137 | #define UAC_XU_ENABLE 0x01 | ||
| 138 | |||
| 76 | /* MIDI - A.1 MS Class-Specific Interface Descriptor Subtypes */ | 139 | /* MIDI - A.1 MS Class-Specific Interface Descriptor Subtypes */ |
| 77 | #define UAC_MS_HEADER 0x01 | 140 | #define UAC_MS_HEADER 0x01 |
| 78 | #define UAC_MIDI_IN_JACK 0x02 | 141 | #define UAC_MIDI_IN_JACK 0x02 |
| @@ -244,7 +307,7 @@ struct uac_selector_unit_descriptor { | |||
| 244 | static inline __u8 uac_selector_unit_iSelector(struct uac_selector_unit_descriptor *desc) | 307 | static inline __u8 uac_selector_unit_iSelector(struct uac_selector_unit_descriptor *desc) |
| 245 | { | 308 | { |
| 246 | __u8 *raw = (__u8 *) desc; | 309 | __u8 *raw = (__u8 *) desc; |
| 247 | return raw[9 + desc->bLength - 1]; | 310 | return raw[desc->bLength - 1]; |
| 248 | } | 311 | } |
| 249 | 312 | ||
| 250 | /* 4.3.2.5 Feature Unit Descriptor */ | 313 | /* 4.3.2.5 Feature Unit Descriptor */ |
| @@ -463,31 +526,6 @@ struct uac_iso_endpoint_descriptor { | |||
| 463 | #define UAC_EP_CS_ATTR_PITCH_CONTROL 0x02 | 526 | #define UAC_EP_CS_ATTR_PITCH_CONTROL 0x02 |
| 464 | #define UAC_EP_CS_ATTR_FILL_MAX 0x80 | 527 | #define UAC_EP_CS_ATTR_FILL_MAX 0x80 |
| 465 | 528 | ||
| 466 | /* A.10.2 Feature Unit Control Selectors */ | ||
| 467 | |||
| 468 | #define UAC_FU_CONTROL_UNDEFINED 0x00 | ||
| 469 | #define UAC_MUTE_CONTROL 0x01 | ||
| 470 | #define UAC_VOLUME_CONTROL 0x02 | ||
| 471 | #define UAC_BASS_CONTROL 0x03 | ||
| 472 | #define UAC_MID_CONTROL 0x04 | ||
| 473 | #define UAC_TREBLE_CONTROL 0x05 | ||
| 474 | #define UAC_GRAPHIC_EQUALIZER_CONTROL 0x06 | ||
| 475 | #define UAC_AUTOMATIC_GAIN_CONTROL 0x07 | ||
| 476 | #define UAC_DELAY_CONTROL 0x08 | ||
| 477 | #define UAC_BASS_BOOST_CONTROL 0x09 | ||
| 478 | #define UAC_LOUDNESS_CONTROL 0x0a | ||
| 479 | |||
| 480 | #define UAC_FU_MUTE (1 << (UAC_MUTE_CONTROL - 1)) | ||
| 481 | #define UAC_FU_VOLUME (1 << (UAC_VOLUME_CONTROL - 1)) | ||
| 482 | #define UAC_FU_BASS (1 << (UAC_BASS_CONTROL - 1)) | ||
| 483 | #define UAC_FU_MID (1 << (UAC_MID_CONTROL - 1)) | ||
| 484 | #define UAC_FU_TREBLE (1 << (UAC_TREBLE_CONTROL - 1)) | ||
| 485 | #define UAC_FU_GRAPHIC_EQ (1 << (UAC_GRAPHIC_EQUALIZER_CONTROL - 1)) | ||
| 486 | #define UAC_FU_AUTO_GAIN (1 << (UAC_AUTOMATIC_GAIN_CONTROL - 1)) | ||
| 487 | #define UAC_FU_DELAY (1 << (UAC_DELAY_CONTROL - 1)) | ||
| 488 | #define UAC_FU_BASS_BOOST (1 << (UAC_BASS_BOOST_CONTROL - 1)) | ||
| 489 | #define UAC_FU_LOUDNESS (1 << (UAC_LOUDNESS_CONTROL - 1)) | ||
| 490 | |||
| 491 | /* status word format (3.7.1.1) */ | 529 | /* status word format (3.7.1.1) */ |
| 492 | 530 | ||
| 493 | #define UAC1_STATUS_TYPE_ORIG_MASK 0x0f | 531 | #define UAC1_STATUS_TYPE_ORIG_MASK 0x0f |
diff --git a/include/linux/uuid.h b/include/linux/uuid.h new file mode 100644 index 000000000000..5b7efbfcee4e --- /dev/null +++ b/include/linux/uuid.h | |||
| @@ -0,0 +1,70 @@ | |||
| 1 | /* | ||
| 2 | * UUID/GUID definition | ||
| 3 | * | ||
| 4 | * Copyright (C) 2010, Intel Corp. | ||
| 5 | * Huang Ying <ying.huang@intel.com> | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or | ||
| 8 | * modify it under the terms of the GNU General Public License version | ||
| 9 | * 2 as published by the Free Software Foundation; | ||
| 10 | * | ||
| 11 | * This program is distributed in the hope that it will be useful, | ||
| 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | * GNU General Public License for more details. | ||
| 15 | * | ||
| 16 | * You should have received a copy of the GNU General Public License | ||
| 17 | * along with this program; if not, write to the Free Software | ||
| 18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 19 | */ | ||
| 20 | |||
| 21 | #ifndef _LINUX_UUID_H_ | ||
| 22 | #define _LINUX_UUID_H_ | ||
| 23 | |||
| 24 | #include <linux/types.h> | ||
| 25 | #include <linux/string.h> | ||
| 26 | |||
| 27 | typedef struct { | ||
| 28 | __u8 b[16]; | ||
| 29 | } uuid_le; | ||
| 30 | |||
| 31 | typedef struct { | ||
| 32 | __u8 b[16]; | ||
| 33 | } uuid_be; | ||
| 34 | |||
| 35 | #define UUID_LE(a, b, c, d0, d1, d2, d3, d4, d5, d6, d7) \ | ||
| 36 | ((uuid_le) \ | ||
| 37 | {{ (a) & 0xff, ((a) >> 8) & 0xff, ((a) >> 16) & 0xff, ((a) >> 24) & 0xff, \ | ||
| 38 | (b) & 0xff, ((b) >> 8) & 0xff, \ | ||
| 39 | (c) & 0xff, ((c) >> 8) & 0xff, \ | ||
| 40 | (d0), (d1), (d2), (d3), (d4), (d5), (d6), (d7) }}) | ||
| 41 | |||
| 42 | #define UUID_BE(a, b, c, d0, d1, d2, d3, d4, d5, d6, d7) \ | ||
| 43 | ((uuid_be) \ | ||
| 44 | {{ ((a) >> 24) & 0xff, ((a) >> 16) & 0xff, ((a) >> 8) & 0xff, (a) & 0xff, \ | ||
| 45 | ((b) >> 8) & 0xff, (b) & 0xff, \ | ||
| 46 | ((c) >> 8) & 0xff, (c) & 0xff, \ | ||
| 47 | (d0), (d1), (d2), (d3), (d4), (d5), (d6), (d7) }}) | ||
| 48 | |||
| 49 | #define NULL_UUID_LE \ | ||
| 50 | UUID_LE(0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, \ | ||
| 51 | 0x00, 0x00, 0x00, 0x00) | ||
| 52 | |||
| 53 | #define NULL_UUID_BE \ | ||
| 54 | UUID_BE(0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, \ | ||
| 55 | 0x00, 0x00, 0x00, 0x00) | ||
| 56 | |||
| 57 | static inline int uuid_le_cmp(const uuid_le u1, const uuid_le u2) | ||
| 58 | { | ||
| 59 | return memcmp(&u1, &u2, sizeof(uuid_le)); | ||
| 60 | } | ||
| 61 | |||
| 62 | static inline int uuid_be_cmp(const uuid_be u1, const uuid_be u2) | ||
| 63 | { | ||
| 64 | return memcmp(&u1, &u2, sizeof(uuid_be)); | ||
| 65 | } | ||
| 66 | |||
| 67 | extern void uuid_le_gen(uuid_le *u); | ||
| 68 | extern void uuid_be_gen(uuid_be *u); | ||
| 69 | |||
| 70 | #endif | ||
diff --git a/include/linux/vgaarb.h b/include/linux/vgaarb.h index 2dfaa293ae8c..c9a975976995 100644 --- a/include/linux/vgaarb.h +++ b/include/linux/vgaarb.h | |||
| @@ -5,6 +5,27 @@ | |||
| 5 | * (C) Copyright 2005 Benjamin Herrenschmidt <benh@kernel.crashing.org> | 5 | * (C) Copyright 2005 Benjamin Herrenschmidt <benh@kernel.crashing.org> |
| 6 | * (C) Copyright 2007 Paulo R. Zanoni <przanoni@gmail.com> | 6 | * (C) Copyright 2007 Paulo R. Zanoni <przanoni@gmail.com> |
| 7 | * (C) Copyright 2007, 2009 Tiago Vignatti <vignatti@freedesktop.org> | 7 | * (C) Copyright 2007, 2009 Tiago Vignatti <vignatti@freedesktop.org> |
| 8 | * | ||
| 9 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
| 10 | * copy of this software and associated documentation files (the "Software"), | ||
| 11 | * to deal in the Software without restriction, including without limitation | ||
| 12 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 13 | * and/or sell copies of the Software, and to permit persons to whom the | ||
| 14 | * Software is furnished to do so, subject to the following conditions: | ||
| 15 | * | ||
| 16 | * The above copyright notice and this permission notice (including the next | ||
| 17 | * paragraph) shall be included in all copies or substantial portions of the | ||
| 18 | * Software. | ||
| 19 | * | ||
| 20 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 21 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 22 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 23 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| 24 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | ||
| 25 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | ||
| 26 | * DEALINGS | ||
| 27 | * IN THE SOFTWARE. | ||
| 28 | * | ||
| 8 | */ | 29 | */ |
| 9 | 30 | ||
| 10 | #ifndef LINUX_VGA_H | 31 | #ifndef LINUX_VGA_H |
diff --git a/include/linux/writeback.h b/include/linux/writeback.h index cc97d6caf2b3..d63ef8f9609f 100644 --- a/include/linux/writeback.h +++ b/include/linux/writeback.h | |||
| @@ -56,24 +56,6 @@ struct writeback_control { | |||
| 56 | unsigned for_reclaim:1; /* Invoked from the page allocator */ | 56 | unsigned for_reclaim:1; /* Invoked from the page allocator */ |
| 57 | unsigned range_cyclic:1; /* range_start is cyclic */ | 57 | unsigned range_cyclic:1; /* range_start is cyclic */ |
| 58 | unsigned more_io:1; /* more io to be dispatched */ | 58 | unsigned more_io:1; /* more io to be dispatched */ |
| 59 | /* | ||
| 60 | * write_cache_pages() won't update wbc->nr_to_write and | ||
| 61 | * mapping->writeback_index if no_nrwrite_index_update | ||
| 62 | * is set. write_cache_pages() may write more than we | ||
| 63 | * requested and we want to make sure nr_to_write and | ||
| 64 | * writeback_index are updated in a consistent manner | ||
| 65 | * so we use a single control to update them | ||
| 66 | */ | ||
| 67 | unsigned no_nrwrite_index_update:1; | ||
| 68 | |||
| 69 | /* | ||
| 70 | * For WB_SYNC_ALL, the sb must always be pinned. For WB_SYNC_NONE, | ||
| 71 | * the writeback code will pin the sb for the caller. However, | ||
| 72 | * for eg umount, the caller does WB_SYNC_NONE but already has | ||
| 73 | * the sb pinned. If the below is set, caller already has the | ||
| 74 | * sb pinned. | ||
| 75 | */ | ||
| 76 | unsigned sb_pinned:1; | ||
| 77 | }; | 59 | }; |
| 78 | 60 | ||
| 79 | /* | 61 | /* |
| @@ -82,7 +64,6 @@ struct writeback_control { | |||
| 82 | struct bdi_writeback; | 64 | struct bdi_writeback; |
| 83 | int inode_wait(void *); | 65 | int inode_wait(void *); |
| 84 | void writeback_inodes_sb(struct super_block *); | 66 | void writeback_inodes_sb(struct super_block *); |
| 85 | void writeback_inodes_sb_locked(struct super_block *); | ||
| 86 | int writeback_inodes_sb_if_idle(struct super_block *); | 67 | int writeback_inodes_sb_if_idle(struct super_block *); |
| 87 | void sync_inodes_sb(struct super_block *); | 68 | void sync_inodes_sb(struct super_block *); |
| 88 | void writeback_inodes_wbc(struct writeback_control *wbc); | 69 | void writeback_inodes_wbc(struct writeback_control *wbc); |
diff --git a/include/media/rc-map.h b/include/media/rc-map.h index 5833966a7100..c78e99a435b6 100644 --- a/include/media/rc-map.h +++ b/include/media/rc-map.h | |||
| @@ -55,7 +55,8 @@ void rc_map_init(void); | |||
| 55 | #define RC_MAP_AVERMEDIA_A16D "rc-avermedia-a16d" | 55 | #define RC_MAP_AVERMEDIA_A16D "rc-avermedia-a16d" |
| 56 | #define RC_MAP_AVERMEDIA_CARDBUS "rc-avermedia-cardbus" | 56 | #define RC_MAP_AVERMEDIA_CARDBUS "rc-avermedia-cardbus" |
| 57 | #define RC_MAP_AVERMEDIA_DVBT "rc-avermedia-dvbt" | 57 | #define RC_MAP_AVERMEDIA_DVBT "rc-avermedia-dvbt" |
| 58 | #define RC_MAP_AVERMEDIA_M135A_RM_JX "rc-avermedia-m135a-rm-jx" | 58 | #define RC_MAP_AVERMEDIA_M135A "rc-avermedia-m135a" |
| 59 | #define RC_MAP_AVERMEDIA_M733A_RM_K6 "rc-avermedia-m733a-rm-k6" | ||
| 59 | #define RC_MAP_AVERMEDIA "rc-avermedia" | 60 | #define RC_MAP_AVERMEDIA "rc-avermedia" |
| 60 | #define RC_MAP_AVERTV_303 "rc-avertv-303" | 61 | #define RC_MAP_AVERTV_303 "rc-avertv-303" |
| 61 | #define RC_MAP_BEHOLD_COLUMBUS "rc-behold-columbus" | 62 | #define RC_MAP_BEHOLD_COLUMBUS "rc-behold-columbus" |
diff --git a/include/media/soc_camera.h b/include/media/soc_camera.h index c9a5bbfa6ab5..b8289c2f609b 100644 --- a/include/media/soc_camera.h +++ b/include/media/soc_camera.h | |||
| @@ -66,7 +66,7 @@ struct soc_camera_host_ops { | |||
| 66 | * .get_formats() fail, .put_formats() will not be called at all, the | 66 | * .get_formats() fail, .put_formats() will not be called at all, the |
| 67 | * failing .get_formats() must then clean up internally. | 67 | * failing .get_formats() must then clean up internally. |
| 68 | */ | 68 | */ |
| 69 | int (*get_formats)(struct soc_camera_device *, int, | 69 | int (*get_formats)(struct soc_camera_device *, unsigned int, |
| 70 | struct soc_camera_format_xlate *); | 70 | struct soc_camera_format_xlate *); |
| 71 | void (*put_formats)(struct soc_camera_device *); | 71 | void (*put_formats)(struct soc_camera_device *); |
| 72 | int (*cropcap)(struct soc_camera_device *, struct v4l2_cropcap *); | 72 | int (*cropcap)(struct soc_camera_device *, struct v4l2_cropcap *); |
diff --git a/include/media/v4l2-mediabus.h b/include/media/v4l2-mediabus.h index 0dbe02ada259..865cda7cd611 100644 --- a/include/media/v4l2-mediabus.h +++ b/include/media/v4l2-mediabus.h | |||
| @@ -40,6 +40,7 @@ enum v4l2_mbus_pixelcode { | |||
| 40 | V4L2_MBUS_FMT_SBGGR10_2X8_PADLO_LE, | 40 | V4L2_MBUS_FMT_SBGGR10_2X8_PADLO_LE, |
| 41 | V4L2_MBUS_FMT_SBGGR10_2X8_PADHI_BE, | 41 | V4L2_MBUS_FMT_SBGGR10_2X8_PADHI_BE, |
| 42 | V4L2_MBUS_FMT_SBGGR10_2X8_PADLO_BE, | 42 | V4L2_MBUS_FMT_SBGGR10_2X8_PADLO_BE, |
| 43 | V4L2_MBUS_FMT_SGRBG8_1X8, | ||
| 43 | }; | 44 | }; |
| 44 | 45 | ||
| 45 | /** | 46 | /** |
| @@ -58,4 +59,24 @@ struct v4l2_mbus_framefmt { | |||
| 58 | enum v4l2_colorspace colorspace; | 59 | enum v4l2_colorspace colorspace; |
| 59 | }; | 60 | }; |
| 60 | 61 | ||
| 62 | static inline void v4l2_fill_pix_format(struct v4l2_pix_format *pix_fmt, | ||
| 63 | const struct v4l2_mbus_framefmt *mbus_fmt) | ||
| 64 | { | ||
| 65 | pix_fmt->width = mbus_fmt->width; | ||
| 66 | pix_fmt->height = mbus_fmt->height; | ||
| 67 | pix_fmt->field = mbus_fmt->field; | ||
| 68 | pix_fmt->colorspace = mbus_fmt->colorspace; | ||
| 69 | } | ||
| 70 | |||
| 71 | static inline void v4l2_fill_mbus_format(struct v4l2_mbus_framefmt *mbus_fmt, | ||
| 72 | const struct v4l2_pix_format *pix_fmt, | ||
| 73 | enum v4l2_mbus_pixelcode code) | ||
| 74 | { | ||
| 75 | mbus_fmt->width = pix_fmt->width; | ||
| 76 | mbus_fmt->height = pix_fmt->height; | ||
| 77 | mbus_fmt->field = pix_fmt->field; | ||
| 78 | mbus_fmt->colorspace = pix_fmt->colorspace; | ||
| 79 | mbus_fmt->code = code; | ||
| 80 | } | ||
| 81 | |||
| 61 | #endif | 82 | #endif |
diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h index a88889355ae0..02c6f4d11ed3 100644 --- a/include/media/v4l2-subdev.h +++ b/include/media/v4l2-subdev.h | |||
| @@ -246,7 +246,7 @@ struct v4l2_subdev_video_ops { | |||
| 246 | struct v4l2_dv_timings *timings); | 246 | struct v4l2_dv_timings *timings); |
| 247 | int (*g_dv_timings)(struct v4l2_subdev *sd, | 247 | int (*g_dv_timings)(struct v4l2_subdev *sd, |
| 248 | struct v4l2_dv_timings *timings); | 248 | struct v4l2_dv_timings *timings); |
| 249 | int (*enum_mbus_fmt)(struct v4l2_subdev *sd, int index, | 249 | int (*enum_mbus_fmt)(struct v4l2_subdev *sd, unsigned int index, |
| 250 | enum v4l2_mbus_pixelcode *code); | 250 | enum v4l2_mbus_pixelcode *code); |
| 251 | int (*g_mbus_fmt)(struct v4l2_subdev *sd, | 251 | int (*g_mbus_fmt)(struct v4l2_subdev *sd, |
| 252 | struct v4l2_mbus_framefmt *fmt); | 252 | struct v4l2_mbus_framefmt *fmt); |
diff --git a/include/net/cls_cgroup.h b/include/net/cls_cgroup.h index 6cf44866cecd..726cc3536409 100644 --- a/include/net/cls_cgroup.h +++ b/include/net/cls_cgroup.h | |||
| @@ -39,7 +39,7 @@ extern int net_cls_subsys_id; | |||
| 39 | static inline u32 task_cls_classid(struct task_struct *p) | 39 | static inline u32 task_cls_classid(struct task_struct *p) |
| 40 | { | 40 | { |
| 41 | int id; | 41 | int id; |
| 42 | u32 classid; | 42 | u32 classid = 0; |
| 43 | 43 | ||
| 44 | if (in_interrupt()) | 44 | if (in_interrupt()) |
| 45 | return 0; | 45 | return 0; |
diff --git a/include/net/dst.h b/include/net/dst.h index 612069beda73..81d1413a8701 100644 --- a/include/net/dst.h +++ b/include/net/dst.h | |||
| @@ -250,11 +250,11 @@ static inline void skb_tunnel_rx(struct sk_buff *skb, struct net_device *dev) | |||
| 250 | * Linux networking. Thus, destinations are stackable. | 250 | * Linux networking. Thus, destinations are stackable. |
| 251 | */ | 251 | */ |
| 252 | 252 | ||
| 253 | static inline struct dst_entry *dst_pop(struct dst_entry *dst) | 253 | static inline struct dst_entry *skb_dst_pop(struct sk_buff *skb) |
| 254 | { | 254 | { |
| 255 | struct dst_entry *child = dst_clone(dst->child); | 255 | struct dst_entry *child = skb_dst(skb)->child; |
| 256 | 256 | ||
| 257 | dst_release(dst); | 257 | skb_dst_drop(skb); |
| 258 | return child; | 258 | return child; |
| 259 | } | 259 | } |
| 260 | 260 | ||
diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h index 6173c619913a..4b860116e096 100644 --- a/include/net/sctp/structs.h +++ b/include/net/sctp/structs.h | |||
| @@ -876,7 +876,7 @@ struct sctp_transport { | |||
| 876 | 876 | ||
| 877 | /* Reference counting. */ | 877 | /* Reference counting. */ |
| 878 | atomic_t refcnt; | 878 | atomic_t refcnt; |
| 879 | int dead:1, | 879 | __u32 dead:1, |
| 880 | /* RTO-Pending : A flag used to track if one of the DATA | 880 | /* RTO-Pending : A flag used to track if one of the DATA |
| 881 | * chunks sent to this address is currently being | 881 | * chunks sent to this address is currently being |
| 882 | * used to compute a RTT. If this flag is 0, | 882 | * used to compute a RTT. If this flag is 0, |
diff --git a/include/net/sock.h b/include/net/sock.h index d2a71b04a5ae..731150d52799 100644 --- a/include/net/sock.h +++ b/include/net/sock.h | |||
| @@ -1026,15 +1026,23 @@ extern void release_sock(struct sock *sk); | |||
| 1026 | SINGLE_DEPTH_NESTING) | 1026 | SINGLE_DEPTH_NESTING) |
| 1027 | #define bh_unlock_sock(__sk) spin_unlock(&((__sk)->sk_lock.slock)) | 1027 | #define bh_unlock_sock(__sk) spin_unlock(&((__sk)->sk_lock.slock)) |
| 1028 | 1028 | ||
| 1029 | static inline void lock_sock_bh(struct sock *sk) | 1029 | extern bool lock_sock_fast(struct sock *sk); |
| 1030 | /** | ||
| 1031 | * unlock_sock_fast - complement of lock_sock_fast | ||
| 1032 | * @sk: socket | ||
| 1033 | * @slow: slow mode | ||
| 1034 | * | ||
| 1035 | * fast unlock socket for user context. | ||
| 1036 | * If slow mode is on, we call regular release_sock() | ||
| 1037 | */ | ||
| 1038 | static inline void unlock_sock_fast(struct sock *sk, bool slow) | ||
| 1030 | { | 1039 | { |
| 1031 | spin_lock_bh(&sk->sk_lock.slock); | 1040 | if (slow) |
| 1041 | release_sock(sk); | ||
| 1042 | else | ||
| 1043 | spin_unlock_bh(&sk->sk_lock.slock); | ||
| 1032 | } | 1044 | } |
| 1033 | 1045 | ||
| 1034 | static inline void unlock_sock_bh(struct sock *sk) | ||
| 1035 | { | ||
| 1036 | spin_unlock_bh(&sk->sk_lock.slock); | ||
| 1037 | } | ||
| 1038 | 1046 | ||
| 1039 | extern struct sock *sk_alloc(struct net *net, int family, | 1047 | extern struct sock *sk_alloc(struct net *net, int family, |
| 1040 | gfp_t priority, | 1048 | gfp_t priority, |
| @@ -1516,20 +1524,7 @@ extern void sk_stop_timer(struct sock *sk, struct timer_list* timer); | |||
| 1516 | 1524 | ||
| 1517 | extern int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb); | 1525 | extern int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb); |
| 1518 | 1526 | ||
| 1519 | static inline int sock_queue_err_skb(struct sock *sk, struct sk_buff *skb) | 1527 | extern int sock_queue_err_skb(struct sock *sk, struct sk_buff *skb); |
| 1520 | { | ||
| 1521 | /* Cast skb->rcvbuf to unsigned... It's pointless, but reduces | ||
| 1522 | number of warnings when compiling with -W --ANK | ||
| 1523 | */ | ||
| 1524 | if (atomic_read(&sk->sk_rmem_alloc) + skb->truesize >= | ||
| 1525 | (unsigned)sk->sk_rcvbuf) | ||
| 1526 | return -ENOMEM; | ||
| 1527 | skb_set_owner_r(skb, sk); | ||
| 1528 | skb_queue_tail(&sk->sk_error_queue, skb); | ||
| 1529 | if (!sock_flag(sk, SOCK_DEAD)) | ||
| 1530 | sk->sk_data_ready(sk, skb->len); | ||
| 1531 | return 0; | ||
| 1532 | } | ||
| 1533 | 1528 | ||
| 1534 | /* | 1529 | /* |
| 1535 | * Recover an error report and clear atomically | 1530 | * Recover an error report and clear atomically |
diff --git a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h index c50a97fc76f9..b7bdecb7b76e 100644 --- a/include/scsi/scsi_host.h +++ b/include/scsi/scsi_host.h | |||
| @@ -327,6 +327,14 @@ struct scsi_host_template { | |||
| 327 | sector_t, int []); | 327 | sector_t, int []); |
| 328 | 328 | ||
| 329 | /* | 329 | /* |
| 330 | * This function is called when one or more partitions on the | ||
| 331 | * device reach beyond the end of the device. | ||
| 332 | * | ||
| 333 | * Status: OPTIONAL | ||
| 334 | */ | ||
| 335 | void (*unlock_native_capacity)(struct scsi_device *); | ||
| 336 | |||
| 337 | /* | ||
| 330 | * Can be used to export driver statistics and other infos to the | 338 | * Can be used to export driver statistics and other infos to the |
| 331 | * world outside the kernel ie. userspace and it also provides an | 339 | * world outside the kernel ie. userspace and it also provides an |
| 332 | * interface to feed the driver with information. | 340 | * interface to feed the driver with information. |
diff --git a/include/trace/events/ext4.h b/include/trace/events/ext4.h index 2aa6aa3e8f61..f3865c7b4166 100644 --- a/include/trace/events/ext4.h +++ b/include/trace/events/ext4.h | |||
| @@ -306,7 +306,6 @@ TRACE_EVENT(ext4_da_writepages_result, | |||
| 306 | __field( int, pages_written ) | 306 | __field( int, pages_written ) |
| 307 | __field( long, pages_skipped ) | 307 | __field( long, pages_skipped ) |
| 308 | __field( char, more_io ) | 308 | __field( char, more_io ) |
| 309 | __field( char, no_nrwrite_index_update ) | ||
| 310 | __field( pgoff_t, writeback_index ) | 309 | __field( pgoff_t, writeback_index ) |
| 311 | ), | 310 | ), |
| 312 | 311 | ||
| @@ -317,16 +316,14 @@ TRACE_EVENT(ext4_da_writepages_result, | |||
| 317 | __entry->pages_written = pages_written; | 316 | __entry->pages_written = pages_written; |
| 318 | __entry->pages_skipped = wbc->pages_skipped; | 317 | __entry->pages_skipped = wbc->pages_skipped; |
| 319 | __entry->more_io = wbc->more_io; | 318 | __entry->more_io = wbc->more_io; |
| 320 | __entry->no_nrwrite_index_update = wbc->no_nrwrite_index_update; | ||
| 321 | __entry->writeback_index = inode->i_mapping->writeback_index; | 319 | __entry->writeback_index = inode->i_mapping->writeback_index; |
| 322 | ), | 320 | ), |
| 323 | 321 | ||
| 324 | TP_printk("dev %s ino %lu ret %d pages_written %d pages_skipped %ld more_io %d no_nrwrite_index_update %d writeback_index %lu", | 322 | TP_printk("dev %s ino %lu ret %d pages_written %d pages_skipped %ld more_io %d writeback_index %lu", |
| 325 | jbd2_dev_to_name(__entry->dev), | 323 | jbd2_dev_to_name(__entry->dev), |
| 326 | (unsigned long) __entry->ino, __entry->ret, | 324 | (unsigned long) __entry->ino, __entry->ret, |
| 327 | __entry->pages_written, __entry->pages_skipped, | 325 | __entry->pages_written, __entry->pages_skipped, |
| 328 | __entry->more_io, | 326 | __entry->more_io, |
| 329 | __entry->no_nrwrite_index_update, | ||
| 330 | (unsigned long) __entry->writeback_index) | 327 | (unsigned long) __entry->writeback_index) |
| 331 | ); | 328 | ); |
| 332 | 329 | ||
| @@ -353,7 +350,7 @@ TRACE_EVENT(ext4_discard_blocks, | |||
| 353 | jbd2_dev_to_name(__entry->dev), __entry->blk, __entry->count) | 350 | jbd2_dev_to_name(__entry->dev), __entry->blk, __entry->count) |
| 354 | ); | 351 | ); |
| 355 | 352 | ||
| 356 | TRACE_EVENT(ext4_mb_new_inode_pa, | 353 | DECLARE_EVENT_CLASS(ext4__mb_new_pa, |
| 357 | TP_PROTO(struct ext4_allocation_context *ac, | 354 | TP_PROTO(struct ext4_allocation_context *ac, |
| 358 | struct ext4_prealloc_space *pa), | 355 | struct ext4_prealloc_space *pa), |
| 359 | 356 | ||
| @@ -381,32 +378,20 @@ TRACE_EVENT(ext4_mb_new_inode_pa, | |||
| 381 | __entry->pa_pstart, __entry->pa_len, __entry->pa_lstart) | 378 | __entry->pa_pstart, __entry->pa_len, __entry->pa_lstart) |
| 382 | ); | 379 | ); |
| 383 | 380 | ||
| 384 | TRACE_EVENT(ext4_mb_new_group_pa, | 381 | DEFINE_EVENT(ext4__mb_new_pa, ext4_mb_new_inode_pa, |
| 382 | |||
| 385 | TP_PROTO(struct ext4_allocation_context *ac, | 383 | TP_PROTO(struct ext4_allocation_context *ac, |
| 386 | struct ext4_prealloc_space *pa), | 384 | struct ext4_prealloc_space *pa), |
| 387 | 385 | ||
| 388 | TP_ARGS(ac, pa), | 386 | TP_ARGS(ac, pa) |
| 389 | 387 | ); | |
| 390 | TP_STRUCT__entry( | ||
| 391 | __field( dev_t, dev ) | ||
| 392 | __field( ino_t, ino ) | ||
| 393 | __field( __u64, pa_pstart ) | ||
| 394 | __field( __u32, pa_len ) | ||
| 395 | __field( __u64, pa_lstart ) | ||
| 396 | 388 | ||
| 397 | ), | 389 | DEFINE_EVENT(ext4__mb_new_pa, ext4_mb_new_group_pa, |
| 398 | 390 | ||
| 399 | TP_fast_assign( | 391 | TP_PROTO(struct ext4_allocation_context *ac, |
| 400 | __entry->dev = ac->ac_sb->s_dev; | 392 | struct ext4_prealloc_space *pa), |
| 401 | __entry->ino = ac->ac_inode->i_ino; | ||
| 402 | __entry->pa_pstart = pa->pa_pstart; | ||
| 403 | __entry->pa_len = pa->pa_len; | ||
| 404 | __entry->pa_lstart = pa->pa_lstart; | ||
| 405 | ), | ||
| 406 | 393 | ||
| 407 | TP_printk("dev %s ino %lu pstart %llu len %u lstart %llu", | 394 | TP_ARGS(ac, pa) |
| 408 | jbd2_dev_to_name(__entry->dev), (unsigned long) __entry->ino, | ||
| 409 | __entry->pa_pstart, __entry->pa_len, __entry->pa_lstart) | ||
| 410 | ); | 395 | ); |
| 411 | 396 | ||
| 412 | TRACE_EVENT(ext4_mb_release_inode_pa, | 397 | TRACE_EVENT(ext4_mb_release_inode_pa, |
| @@ -618,9 +603,9 @@ TRACE_EVENT(ext4_free_blocks, | |||
| 618 | ); | 603 | ); |
| 619 | 604 | ||
| 620 | TRACE_EVENT(ext4_sync_file, | 605 | TRACE_EVENT(ext4_sync_file, |
| 621 | TP_PROTO(struct file *file, struct dentry *dentry, int datasync), | 606 | TP_PROTO(struct file *file, int datasync), |
| 622 | 607 | ||
| 623 | TP_ARGS(file, dentry, datasync), | 608 | TP_ARGS(file, datasync), |
| 624 | 609 | ||
| 625 | TP_STRUCT__entry( | 610 | TP_STRUCT__entry( |
| 626 | __field( dev_t, dev ) | 611 | __field( dev_t, dev ) |
| @@ -630,6 +615,8 @@ TRACE_EVENT(ext4_sync_file, | |||
| 630 | ), | 615 | ), |
| 631 | 616 | ||
| 632 | TP_fast_assign( | 617 | TP_fast_assign( |
| 618 | struct dentry *dentry = file->f_path.dentry; | ||
| 619 | |||
| 633 | __entry->dev = dentry->d_inode->i_sb->s_dev; | 620 | __entry->dev = dentry->d_inode->i_sb->s_dev; |
| 634 | __entry->ino = dentry->d_inode->i_ino; | 621 | __entry->ino = dentry->d_inode->i_ino; |
| 635 | __entry->datasync = datasync; | 622 | __entry->datasync = datasync; |
| @@ -790,7 +777,7 @@ TRACE_EVENT(ext4_mballoc_prealloc, | |||
| 790 | __entry->result_len, __entry->result_logical) | 777 | __entry->result_len, __entry->result_logical) |
| 791 | ); | 778 | ); |
| 792 | 779 | ||
| 793 | TRACE_EVENT(ext4_mballoc_discard, | 780 | DECLARE_EVENT_CLASS(ext4__mballoc, |
| 794 | TP_PROTO(struct ext4_allocation_context *ac), | 781 | TP_PROTO(struct ext4_allocation_context *ac), |
| 795 | 782 | ||
| 796 | TP_ARGS(ac), | 783 | TP_ARGS(ac), |
| @@ -819,33 +806,18 @@ TRACE_EVENT(ext4_mballoc_discard, | |||
| 819 | __entry->result_len, __entry->result_logical) | 806 | __entry->result_len, __entry->result_logical) |
| 820 | ); | 807 | ); |
| 821 | 808 | ||
| 822 | TRACE_EVENT(ext4_mballoc_free, | 809 | DEFINE_EVENT(ext4__mballoc, ext4_mballoc_discard, |
| 810 | |||
| 823 | TP_PROTO(struct ext4_allocation_context *ac), | 811 | TP_PROTO(struct ext4_allocation_context *ac), |
| 824 | 812 | ||
| 825 | TP_ARGS(ac), | 813 | TP_ARGS(ac) |
| 814 | ); | ||
| 826 | 815 | ||
| 827 | TP_STRUCT__entry( | 816 | DEFINE_EVENT(ext4__mballoc, ext4_mballoc_free, |
| 828 | __field( dev_t, dev ) | ||
| 829 | __field( ino_t, ino ) | ||
| 830 | __field( __u32, result_logical ) | ||
| 831 | __field( int, result_start ) | ||
| 832 | __field( __u32, result_group ) | ||
| 833 | __field( int, result_len ) | ||
| 834 | ), | ||
| 835 | 817 | ||
| 836 | TP_fast_assign( | 818 | TP_PROTO(struct ext4_allocation_context *ac), |
| 837 | __entry->dev = ac->ac_inode->i_sb->s_dev; | ||
| 838 | __entry->ino = ac->ac_inode->i_ino; | ||
| 839 | __entry->result_logical = ac->ac_b_ex.fe_logical; | ||
| 840 | __entry->result_start = ac->ac_b_ex.fe_start; | ||
| 841 | __entry->result_group = ac->ac_b_ex.fe_group; | ||
| 842 | __entry->result_len = ac->ac_b_ex.fe_len; | ||
| 843 | ), | ||
| 844 | 819 | ||
| 845 | TP_printk("dev %s inode %lu extent %u/%d/%u@%u ", | 820 | TP_ARGS(ac) |
| 846 | jbd2_dev_to_name(__entry->dev), (unsigned long) __entry->ino, | ||
| 847 | __entry->result_group, __entry->result_start, | ||
| 848 | __entry->result_len, __entry->result_logical) | ||
| 849 | ); | 821 | ); |
| 850 | 822 | ||
| 851 | TRACE_EVENT(ext4_forget, | 823 | TRACE_EVENT(ext4_forget, |
| @@ -974,6 +946,39 @@ TRACE_EVENT(ext4_da_release_space, | |||
| 974 | __entry->reserved_meta_blocks, __entry->allocated_meta_blocks) | 946 | __entry->reserved_meta_blocks, __entry->allocated_meta_blocks) |
| 975 | ); | 947 | ); |
| 976 | 948 | ||
| 949 | DECLARE_EVENT_CLASS(ext4__bitmap_load, | ||
| 950 | TP_PROTO(struct super_block *sb, unsigned long group), | ||
| 951 | |||
| 952 | TP_ARGS(sb, group), | ||
| 953 | |||
| 954 | TP_STRUCT__entry( | ||
| 955 | __field( dev_t, dev ) | ||
| 956 | __field( __u32, group ) | ||
| 957 | |||
| 958 | ), | ||
| 959 | |||
| 960 | TP_fast_assign( | ||
| 961 | __entry->dev = sb->s_dev; | ||
| 962 | __entry->group = group; | ||
| 963 | ), | ||
| 964 | |||
| 965 | TP_printk("dev %s group %u", | ||
| 966 | jbd2_dev_to_name(__entry->dev), __entry->group) | ||
| 967 | ); | ||
| 968 | |||
| 969 | DEFINE_EVENT(ext4__bitmap_load, ext4_mb_bitmap_load, | ||
| 970 | |||
| 971 | TP_PROTO(struct super_block *sb, unsigned long group), | ||
| 972 | |||
| 973 | TP_ARGS(sb, group) | ||
| 974 | ); | ||
| 975 | |||
| 976 | DEFINE_EVENT(ext4__bitmap_load, ext4_mb_buddy_bitmap_load, | ||
| 977 | |||
| 978 | TP_PROTO(struct super_block *sb, unsigned long group), | ||
| 979 | |||
| 980 | TP_ARGS(sb, group) | ||
| 981 | ); | ||
| 977 | 982 | ||
| 978 | #endif /* _TRACE_EXT4_H */ | 983 | #endif /* _TRACE_EXT4_H */ |
| 979 | 984 | ||
diff --git a/include/trace/events/sched.h b/include/trace/events/sched.h index 4f733ecea46e..b9e1dd6c6208 100644 --- a/include/trace/events/sched.h +++ b/include/trace/events/sched.h | |||
| @@ -115,6 +115,23 @@ DEFINE_EVENT(sched_wakeup_template, sched_wakeup_new, | |||
| 115 | TP_PROTO(struct task_struct *p, int success), | 115 | TP_PROTO(struct task_struct *p, int success), |
| 116 | TP_ARGS(p, success)); | 116 | TP_ARGS(p, success)); |
| 117 | 117 | ||
| 118 | #ifdef CREATE_TRACE_POINTS | ||
| 119 | static inline long __trace_sched_switch_state(struct task_struct *p) | ||
| 120 | { | ||
| 121 | long state = p->state; | ||
| 122 | |||
| 123 | #ifdef CONFIG_PREEMPT | ||
| 124 | /* | ||
| 125 | * For all intents and purposes a preempted task is a running task. | ||
| 126 | */ | ||
| 127 | if (task_thread_info(p)->preempt_count & PREEMPT_ACTIVE) | ||
| 128 | state = TASK_RUNNING; | ||
| 129 | #endif | ||
| 130 | |||
| 131 | return state; | ||
| 132 | } | ||
| 133 | #endif | ||
| 134 | |||
| 118 | /* | 135 | /* |
| 119 | * Tracepoint for task switches, performed by the scheduler: | 136 | * Tracepoint for task switches, performed by the scheduler: |
| 120 | */ | 137 | */ |
| @@ -139,7 +156,7 @@ TRACE_EVENT(sched_switch, | |||
| 139 | memcpy(__entry->next_comm, next->comm, TASK_COMM_LEN); | 156 | memcpy(__entry->next_comm, next->comm, TASK_COMM_LEN); |
| 140 | __entry->prev_pid = prev->pid; | 157 | __entry->prev_pid = prev->pid; |
| 141 | __entry->prev_prio = prev->prio; | 158 | __entry->prev_prio = prev->prio; |
| 142 | __entry->prev_state = prev->state; | 159 | __entry->prev_state = __trace_sched_switch_state(prev); |
| 143 | memcpy(__entry->prev_comm, prev->comm, TASK_COMM_LEN); | 160 | memcpy(__entry->prev_comm, prev->comm, TASK_COMM_LEN); |
| 144 | __entry->next_pid = next->pid; | 161 | __entry->next_pid = next->pid; |
| 145 | __entry->next_prio = next->prio; | 162 | __entry->next_prio = next->prio; |
diff --git a/include/trace/events/signal.h b/include/trace/events/signal.h index 814566c99d29..17df43464df0 100644 --- a/include/trace/events/signal.h +++ b/include/trace/events/signal.h | |||
| @@ -10,7 +10,8 @@ | |||
| 10 | 10 | ||
| 11 | #define TP_STORE_SIGINFO(__entry, info) \ | 11 | #define TP_STORE_SIGINFO(__entry, info) \ |
| 12 | do { \ | 12 | do { \ |
| 13 | if (info == SEND_SIG_NOINFO) { \ | 13 | if (info == SEND_SIG_NOINFO || \ |
| 14 | info == SEND_SIG_FORCED) { \ | ||
| 14 | __entry->errno = 0; \ | 15 | __entry->errno = 0; \ |
| 15 | __entry->code = SI_USER; \ | 16 | __entry->code = SI_USER; \ |
| 16 | } else if (info == SEND_SIG_PRIV) { \ | 17 | } else if (info == SEND_SIG_PRIV) { \ |
diff --git a/include/trace/ftrace.h b/include/trace/ftrace.h index 88c59c13ea7b..5a64905d7278 100644 --- a/include/trace/ftrace.h +++ b/include/trace/ftrace.h | |||
| @@ -62,10 +62,13 @@ | |||
| 62 | struct trace_entry ent; \ | 62 | struct trace_entry ent; \ |
| 63 | tstruct \ | 63 | tstruct \ |
| 64 | char __data[0]; \ | 64 | char __data[0]; \ |
| 65 | }; | 65 | }; \ |
| 66 | \ | ||
| 67 | static struct ftrace_event_class event_class_##name; | ||
| 68 | |||
| 66 | #undef DEFINE_EVENT | 69 | #undef DEFINE_EVENT |
| 67 | #define DEFINE_EVENT(template, name, proto, args) \ | 70 | #define DEFINE_EVENT(template, name, proto, args) \ |
| 68 | static struct ftrace_event_call \ | 71 | static struct ftrace_event_call __used \ |
| 69 | __attribute__((__aligned__(4))) event_##name | 72 | __attribute__((__aligned__(4))) event_##name |
| 70 | 73 | ||
| 71 | #undef DEFINE_EVENT_PRINT | 74 | #undef DEFINE_EVENT_PRINT |
| @@ -147,7 +150,7 @@ | |||
| 147 | * | 150 | * |
| 148 | * entry = iter->ent; | 151 | * entry = iter->ent; |
| 149 | * | 152 | * |
| 150 | * if (entry->type != event_<call>.id) { | 153 | * if (entry->type != event_<call>->event.type) { |
| 151 | * WARN_ON_ONCE(1); | 154 | * WARN_ON_ONCE(1); |
| 152 | * return TRACE_TYPE_UNHANDLED; | 155 | * return TRACE_TYPE_UNHANDLED; |
| 153 | * } | 156 | * } |
| @@ -206,18 +209,22 @@ | |||
| 206 | #undef DECLARE_EVENT_CLASS | 209 | #undef DECLARE_EVENT_CLASS |
| 207 | #define DECLARE_EVENT_CLASS(call, proto, args, tstruct, assign, print) \ | 210 | #define DECLARE_EVENT_CLASS(call, proto, args, tstruct, assign, print) \ |
| 208 | static notrace enum print_line_t \ | 211 | static notrace enum print_line_t \ |
| 209 | ftrace_raw_output_id_##call(int event_id, const char *name, \ | 212 | ftrace_raw_output_##call(struct trace_iterator *iter, int flags, \ |
| 210 | struct trace_iterator *iter, int flags) \ | 213 | struct trace_event *trace_event) \ |
| 211 | { \ | 214 | { \ |
| 215 | struct ftrace_event_call *event; \ | ||
| 212 | struct trace_seq *s = &iter->seq; \ | 216 | struct trace_seq *s = &iter->seq; \ |
| 213 | struct ftrace_raw_##call *field; \ | 217 | struct ftrace_raw_##call *field; \ |
| 214 | struct trace_entry *entry; \ | 218 | struct trace_entry *entry; \ |
| 215 | struct trace_seq *p; \ | 219 | struct trace_seq *p; \ |
| 216 | int ret; \ | 220 | int ret; \ |
| 217 | \ | 221 | \ |
| 222 | event = container_of(trace_event, struct ftrace_event_call, \ | ||
| 223 | event); \ | ||
| 224 | \ | ||
| 218 | entry = iter->ent; \ | 225 | entry = iter->ent; \ |
| 219 | \ | 226 | \ |
| 220 | if (entry->type != event_id) { \ | 227 | if (entry->type != event->event.type) { \ |
| 221 | WARN_ON_ONCE(1); \ | 228 | WARN_ON_ONCE(1); \ |
| 222 | return TRACE_TYPE_UNHANDLED; \ | 229 | return TRACE_TYPE_UNHANDLED; \ |
| 223 | } \ | 230 | } \ |
| @@ -226,7 +233,7 @@ ftrace_raw_output_id_##call(int event_id, const char *name, \ | |||
| 226 | \ | 233 | \ |
| 227 | p = &get_cpu_var(ftrace_event_seq); \ | 234 | p = &get_cpu_var(ftrace_event_seq); \ |
| 228 | trace_seq_init(p); \ | 235 | trace_seq_init(p); \ |
| 229 | ret = trace_seq_printf(s, "%s: ", name); \ | 236 | ret = trace_seq_printf(s, "%s: ", event->name); \ |
| 230 | if (ret) \ | 237 | if (ret) \ |
| 231 | ret = trace_seq_printf(s, print); \ | 238 | ret = trace_seq_printf(s, print); \ |
| 232 | put_cpu(); \ | 239 | put_cpu(); \ |
| @@ -234,21 +241,16 @@ ftrace_raw_output_id_##call(int event_id, const char *name, \ | |||
| 234 | return TRACE_TYPE_PARTIAL_LINE; \ | 241 | return TRACE_TYPE_PARTIAL_LINE; \ |
| 235 | \ | 242 | \ |
| 236 | return TRACE_TYPE_HANDLED; \ | 243 | return TRACE_TYPE_HANDLED; \ |
| 237 | } | 244 | } \ |
| 238 | 245 | static struct trace_event_functions ftrace_event_type_funcs_##call = { \ | |
| 239 | #undef DEFINE_EVENT | 246 | .trace = ftrace_raw_output_##call, \ |
| 240 | #define DEFINE_EVENT(template, name, proto, args) \ | 247 | }; |
| 241 | static notrace enum print_line_t \ | ||
| 242 | ftrace_raw_output_##name(struct trace_iterator *iter, int flags) \ | ||
| 243 | { \ | ||
| 244 | return ftrace_raw_output_id_##template(event_##name.id, \ | ||
| 245 | #name, iter, flags); \ | ||
| 246 | } | ||
| 247 | 248 | ||
| 248 | #undef DEFINE_EVENT_PRINT | 249 | #undef DEFINE_EVENT_PRINT |
| 249 | #define DEFINE_EVENT_PRINT(template, call, proto, args, print) \ | 250 | #define DEFINE_EVENT_PRINT(template, call, proto, args, print) \ |
| 250 | static notrace enum print_line_t \ | 251 | static notrace enum print_line_t \ |
| 251 | ftrace_raw_output_##call(struct trace_iterator *iter, int flags) \ | 252 | ftrace_raw_output_##call(struct trace_iterator *iter, int flags, \ |
| 253 | struct trace_event *event) \ | ||
| 252 | { \ | 254 | { \ |
| 253 | struct trace_seq *s = &iter->seq; \ | 255 | struct trace_seq *s = &iter->seq; \ |
| 254 | struct ftrace_raw_##template *field; \ | 256 | struct ftrace_raw_##template *field; \ |
| @@ -258,7 +260,7 @@ ftrace_raw_output_##call(struct trace_iterator *iter, int flags) \ | |||
| 258 | \ | 260 | \ |
| 259 | entry = iter->ent; \ | 261 | entry = iter->ent; \ |
| 260 | \ | 262 | \ |
| 261 | if (entry->type != event_##call.id) { \ | 263 | if (entry->type != event_##call.event.type) { \ |
| 262 | WARN_ON_ONCE(1); \ | 264 | WARN_ON_ONCE(1); \ |
| 263 | return TRACE_TYPE_UNHANDLED; \ | 265 | return TRACE_TYPE_UNHANDLED; \ |
| 264 | } \ | 266 | } \ |
| @@ -275,7 +277,10 @@ ftrace_raw_output_##call(struct trace_iterator *iter, int flags) \ | |||
| 275 | return TRACE_TYPE_PARTIAL_LINE; \ | 277 | return TRACE_TYPE_PARTIAL_LINE; \ |
| 276 | \ | 278 | \ |
| 277 | return TRACE_TYPE_HANDLED; \ | 279 | return TRACE_TYPE_HANDLED; \ |
| 278 | } | 280 | } \ |
| 281 | static struct trace_event_functions ftrace_event_type_funcs_##call = { \ | ||
| 282 | .trace = ftrace_raw_output_##call, \ | ||
| 283 | }; | ||
| 279 | 284 | ||
| 280 | #include TRACE_INCLUDE(TRACE_INCLUDE_FILE) | 285 | #include TRACE_INCLUDE(TRACE_INCLUDE_FILE) |
| 281 | 286 | ||
| @@ -381,80 +386,18 @@ static inline notrace int ftrace_get_offsets_##call( \ | |||
| 381 | 386 | ||
| 382 | #include TRACE_INCLUDE(TRACE_INCLUDE_FILE) | 387 | #include TRACE_INCLUDE(TRACE_INCLUDE_FILE) |
| 383 | 388 | ||
| 384 | #ifdef CONFIG_PERF_EVENTS | ||
| 385 | |||
| 386 | /* | ||
| 387 | * Generate the functions needed for tracepoint perf_event support. | ||
| 388 | * | ||
| 389 | * NOTE: The insertion profile callback (ftrace_profile_<call>) is defined later | ||
| 390 | * | ||
| 391 | * static int ftrace_profile_enable_<call>(void) | ||
| 392 | * { | ||
| 393 | * return register_trace_<call>(ftrace_profile_<call>); | ||
| 394 | * } | ||
| 395 | * | ||
| 396 | * static void ftrace_profile_disable_<call>(void) | ||
| 397 | * { | ||
| 398 | * unregister_trace_<call>(ftrace_profile_<call>); | ||
| 399 | * } | ||
| 400 | * | ||
| 401 | */ | ||
| 402 | |||
| 403 | #undef DECLARE_EVENT_CLASS | ||
| 404 | #define DECLARE_EVENT_CLASS(call, proto, args, tstruct, assign, print) | ||
| 405 | |||
| 406 | #undef DEFINE_EVENT | ||
| 407 | #define DEFINE_EVENT(template, name, proto, args) \ | ||
| 408 | \ | ||
| 409 | static void perf_trace_##name(proto); \ | ||
| 410 | \ | ||
| 411 | static notrace int \ | ||
| 412 | perf_trace_enable_##name(struct ftrace_event_call *unused) \ | ||
| 413 | { \ | ||
| 414 | return register_trace_##name(perf_trace_##name); \ | ||
| 415 | } \ | ||
| 416 | \ | ||
| 417 | static notrace void \ | ||
| 418 | perf_trace_disable_##name(struct ftrace_event_call *unused) \ | ||
| 419 | { \ | ||
| 420 | unregister_trace_##name(perf_trace_##name); \ | ||
| 421 | } | ||
| 422 | |||
| 423 | #undef DEFINE_EVENT_PRINT | ||
| 424 | #define DEFINE_EVENT_PRINT(template, name, proto, args, print) \ | ||
| 425 | DEFINE_EVENT(template, name, PARAMS(proto), PARAMS(args)) | ||
| 426 | |||
| 427 | #include TRACE_INCLUDE(TRACE_INCLUDE_FILE) | ||
| 428 | |||
| 429 | #endif /* CONFIG_PERF_EVENTS */ | ||
| 430 | |||
| 431 | /* | 389 | /* |
| 432 | * Stage 4 of the trace events. | 390 | * Stage 4 of the trace events. |
| 433 | * | 391 | * |
| 434 | * Override the macros in <trace/trace_events.h> to include the following: | 392 | * Override the macros in <trace/trace_events.h> to include the following: |
| 435 | * | 393 | * |
| 436 | * static void ftrace_event_<call>(proto) | ||
| 437 | * { | ||
| 438 | * event_trace_printk(_RET_IP_, "<call>: " <fmt>); | ||
| 439 | * } | ||
| 440 | * | ||
| 441 | * static int ftrace_reg_event_<call>(struct ftrace_event_call *unused) | ||
| 442 | * { | ||
| 443 | * return register_trace_<call>(ftrace_event_<call>); | ||
| 444 | * } | ||
| 445 | * | ||
| 446 | * static void ftrace_unreg_event_<call>(struct ftrace_event_call *unused) | ||
| 447 | * { | ||
| 448 | * unregister_trace_<call>(ftrace_event_<call>); | ||
| 449 | * } | ||
| 450 | * | ||
| 451 | * | ||
| 452 | * For those macros defined with TRACE_EVENT: | 394 | * For those macros defined with TRACE_EVENT: |
| 453 | * | 395 | * |
| 454 | * static struct ftrace_event_call event_<call>; | 396 | * static struct ftrace_event_call event_<call>; |
| 455 | * | 397 | * |
| 456 | * static void ftrace_raw_event_<call>(proto) | 398 | * static void ftrace_raw_event_<call>(void *__data, proto) |
| 457 | * { | 399 | * { |
| 400 | * struct ftrace_event_call *event_call = __data; | ||
| 458 | * struct ftrace_data_offsets_<call> __maybe_unused __data_offsets; | 401 | * struct ftrace_data_offsets_<call> __maybe_unused __data_offsets; |
| 459 | * struct ring_buffer_event *event; | 402 | * struct ring_buffer_event *event; |
| 460 | * struct ftrace_raw_<call> *entry; <-- defined in stage 1 | 403 | * struct ftrace_raw_<call> *entry; <-- defined in stage 1 |
| @@ -469,7 +412,7 @@ perf_trace_disable_##name(struct ftrace_event_call *unused) \ | |||
| 469 | * __data_size = ftrace_get_offsets_<call>(&__data_offsets, args); | 412 | * __data_size = ftrace_get_offsets_<call>(&__data_offsets, args); |
| 470 | * | 413 | * |
| 471 | * event = trace_current_buffer_lock_reserve(&buffer, | 414 | * event = trace_current_buffer_lock_reserve(&buffer, |
| 472 | * event_<call>.id, | 415 | * event_<call>->event.type, |
| 473 | * sizeof(*entry) + __data_size, | 416 | * sizeof(*entry) + __data_size, |
| 474 | * irq_flags, pc); | 417 | * irq_flags, pc); |
| 475 | * if (!event) | 418 | * if (!event) |
| @@ -484,43 +427,42 @@ perf_trace_disable_##name(struct ftrace_event_call *unused) \ | |||
| 484 | * event, irq_flags, pc); | 427 | * event, irq_flags, pc); |
| 485 | * } | 428 | * } |
| 486 | * | 429 | * |
| 487 | * static int ftrace_raw_reg_event_<call>(struct ftrace_event_call *unused) | ||
| 488 | * { | ||
| 489 | * return register_trace_<call>(ftrace_raw_event_<call>); | ||
| 490 | * } | ||
| 491 | * | ||
| 492 | * static void ftrace_unreg_event_<call>(struct ftrace_event_call *unused) | ||
| 493 | * { | ||
| 494 | * unregister_trace_<call>(ftrace_raw_event_<call>); | ||
| 495 | * } | ||
| 496 | * | ||
| 497 | * static struct trace_event ftrace_event_type_<call> = { | 430 | * static struct trace_event ftrace_event_type_<call> = { |
| 498 | * .trace = ftrace_raw_output_<call>, <-- stage 2 | 431 | * .trace = ftrace_raw_output_<call>, <-- stage 2 |
| 499 | * }; | 432 | * }; |
| 500 | * | 433 | * |
| 501 | * static const char print_fmt_<call>[] = <TP_printk>; | 434 | * static const char print_fmt_<call>[] = <TP_printk>; |
| 502 | * | 435 | * |
| 436 | * static struct ftrace_event_class __used event_class_<template> = { | ||
| 437 | * .system = "<system>", | ||
| 438 | * .define_fields = ftrace_define_fields_<call>, | ||
| 439 | * .fields = LIST_HEAD_INIT(event_class_##call.fields), | ||
| 440 | * .raw_init = trace_event_raw_init, | ||
| 441 | * .probe = ftrace_raw_event_##call, | ||
| 442 | * }; | ||
| 443 | * | ||
| 503 | * static struct ftrace_event_call __used | 444 | * static struct ftrace_event_call __used |
| 504 | * __attribute__((__aligned__(4))) | 445 | * __attribute__((__aligned__(4))) |
| 505 | * __attribute__((section("_ftrace_events"))) event_<call> = { | 446 | * __attribute__((section("_ftrace_events"))) event_<call> = { |
| 506 | * .name = "<call>", | 447 | * .name = "<call>", |
| 507 | * .system = "<system>", | 448 | * .class = event_class_<template>, |
| 508 | * .raw_init = trace_event_raw_init, | 449 | * .event = &ftrace_event_type_<call>, |
| 509 | * .regfunc = ftrace_reg_event_<call>, | ||
| 510 | * .unregfunc = ftrace_unreg_event_<call>, | ||
| 511 | * .print_fmt = print_fmt_<call>, | 450 | * .print_fmt = print_fmt_<call>, |
| 512 | * .define_fields = ftrace_define_fields_<call>, | 451 | * }; |
| 513 | * } | ||
| 514 | * | 452 | * |
| 515 | */ | 453 | */ |
| 516 | 454 | ||
| 517 | #ifdef CONFIG_PERF_EVENTS | 455 | #ifdef CONFIG_PERF_EVENTS |
| 518 | 456 | ||
| 457 | #define _TRACE_PERF_PROTO(call, proto) \ | ||
| 458 | static notrace void \ | ||
| 459 | perf_trace_##call(void *__data, proto); | ||
| 460 | |||
| 519 | #define _TRACE_PERF_INIT(call) \ | 461 | #define _TRACE_PERF_INIT(call) \ |
| 520 | .perf_event_enable = perf_trace_enable_##call, \ | 462 | .perf_probe = perf_trace_##call, |
| 521 | .perf_event_disable = perf_trace_disable_##call, | ||
| 522 | 463 | ||
| 523 | #else | 464 | #else |
| 465 | #define _TRACE_PERF_PROTO(call, proto) | ||
| 524 | #define _TRACE_PERF_INIT(call) | 466 | #define _TRACE_PERF_INIT(call) |
| 525 | #endif /* CONFIG_PERF_EVENTS */ | 467 | #endif /* CONFIG_PERF_EVENTS */ |
| 526 | 468 | ||
| @@ -554,9 +496,9 @@ perf_trace_disable_##name(struct ftrace_event_call *unused) \ | |||
| 554 | #define DECLARE_EVENT_CLASS(call, proto, args, tstruct, assign, print) \ | 496 | #define DECLARE_EVENT_CLASS(call, proto, args, tstruct, assign, print) \ |
| 555 | \ | 497 | \ |
| 556 | static notrace void \ | 498 | static notrace void \ |
| 557 | ftrace_raw_event_id_##call(struct ftrace_event_call *event_call, \ | 499 | ftrace_raw_event_##call(void *__data, proto) \ |
| 558 | proto) \ | ||
| 559 | { \ | 500 | { \ |
| 501 | struct ftrace_event_call *event_call = __data; \ | ||
| 560 | struct ftrace_data_offsets_##call __maybe_unused __data_offsets;\ | 502 | struct ftrace_data_offsets_##call __maybe_unused __data_offsets;\ |
| 561 | struct ring_buffer_event *event; \ | 503 | struct ring_buffer_event *event; \ |
| 562 | struct ftrace_raw_##call *entry; \ | 504 | struct ftrace_raw_##call *entry; \ |
| @@ -571,7 +513,7 @@ ftrace_raw_event_id_##call(struct ftrace_event_call *event_call, \ | |||
| 571 | __data_size = ftrace_get_offsets_##call(&__data_offsets, args); \ | 513 | __data_size = ftrace_get_offsets_##call(&__data_offsets, args); \ |
| 572 | \ | 514 | \ |
| 573 | event = trace_current_buffer_lock_reserve(&buffer, \ | 515 | event = trace_current_buffer_lock_reserve(&buffer, \ |
| 574 | event_call->id, \ | 516 | event_call->event.type, \ |
| 575 | sizeof(*entry) + __data_size, \ | 517 | sizeof(*entry) + __data_size, \ |
| 576 | irq_flags, pc); \ | 518 | irq_flags, pc); \ |
| 577 | if (!event) \ | 519 | if (!event) \ |
| @@ -586,34 +528,21 @@ ftrace_raw_event_id_##call(struct ftrace_event_call *event_call, \ | |||
| 586 | trace_nowake_buffer_unlock_commit(buffer, \ | 528 | trace_nowake_buffer_unlock_commit(buffer, \ |
| 587 | event, irq_flags, pc); \ | 529 | event, irq_flags, pc); \ |
| 588 | } | 530 | } |
| 531 | /* | ||
| 532 | * The ftrace_test_probe is compiled out, it is only here as a build time check | ||
| 533 | * to make sure that if the tracepoint handling changes, the ftrace probe will | ||
| 534 | * fail to compile unless it too is updated. | ||
| 535 | */ | ||
| 589 | 536 | ||
| 590 | #undef DEFINE_EVENT | 537 | #undef DEFINE_EVENT |
| 591 | #define DEFINE_EVENT(template, call, proto, args) \ | 538 | #define DEFINE_EVENT(template, call, proto, args) \ |
| 592 | \ | 539 | static inline void ftrace_test_probe_##call(void) \ |
| 593 | static notrace void ftrace_raw_event_##call(proto) \ | ||
| 594 | { \ | ||
| 595 | ftrace_raw_event_id_##template(&event_##call, args); \ | ||
| 596 | } \ | ||
| 597 | \ | ||
| 598 | static notrace int \ | ||
| 599 | ftrace_raw_reg_event_##call(struct ftrace_event_call *unused) \ | ||
| 600 | { \ | 540 | { \ |
| 601 | return register_trace_##call(ftrace_raw_event_##call); \ | 541 | check_trace_callback_type_##call(ftrace_raw_event_##template); \ |
| 602 | } \ | 542 | } |
| 603 | \ | ||
| 604 | static notrace void \ | ||
| 605 | ftrace_raw_unreg_event_##call(struct ftrace_event_call *unused) \ | ||
| 606 | { \ | ||
| 607 | unregister_trace_##call(ftrace_raw_event_##call); \ | ||
| 608 | } \ | ||
| 609 | \ | ||
| 610 | static struct trace_event ftrace_event_type_##call = { \ | ||
| 611 | .trace = ftrace_raw_output_##call, \ | ||
| 612 | }; | ||
| 613 | 543 | ||
| 614 | #undef DEFINE_EVENT_PRINT | 544 | #undef DEFINE_EVENT_PRINT |
| 615 | #define DEFINE_EVENT_PRINT(template, name, proto, args, print) \ | 545 | #define DEFINE_EVENT_PRINT(template, name, proto, args, print) |
| 616 | DEFINE_EVENT(template, name, PARAMS(proto), PARAMS(args)) | ||
| 617 | 546 | ||
| 618 | #include TRACE_INCLUDE(TRACE_INCLUDE_FILE) | 547 | #include TRACE_INCLUDE(TRACE_INCLUDE_FILE) |
| 619 | 548 | ||
| @@ -630,7 +559,16 @@ static struct trace_event ftrace_event_type_##call = { \ | |||
| 630 | 559 | ||
| 631 | #undef DECLARE_EVENT_CLASS | 560 | #undef DECLARE_EVENT_CLASS |
| 632 | #define DECLARE_EVENT_CLASS(call, proto, args, tstruct, assign, print) \ | 561 | #define DECLARE_EVENT_CLASS(call, proto, args, tstruct, assign, print) \ |
| 633 | static const char print_fmt_##call[] = print; | 562 | _TRACE_PERF_PROTO(call, PARAMS(proto)); \ |
| 563 | static const char print_fmt_##call[] = print; \ | ||
| 564 | static struct ftrace_event_class __used event_class_##call = { \ | ||
| 565 | .system = __stringify(TRACE_SYSTEM), \ | ||
| 566 | .define_fields = ftrace_define_fields_##call, \ | ||
| 567 | .fields = LIST_HEAD_INIT(event_class_##call.fields),\ | ||
| 568 | .raw_init = trace_event_raw_init, \ | ||
| 569 | .probe = ftrace_raw_event_##call, \ | ||
| 570 | _TRACE_PERF_INIT(call) \ | ||
| 571 | }; | ||
| 634 | 572 | ||
| 635 | #undef DEFINE_EVENT | 573 | #undef DEFINE_EVENT |
| 636 | #define DEFINE_EVENT(template, call, proto, args) \ | 574 | #define DEFINE_EVENT(template, call, proto, args) \ |
| @@ -639,15 +577,10 @@ static struct ftrace_event_call __used \ | |||
| 639 | __attribute__((__aligned__(4))) \ | 577 | __attribute__((__aligned__(4))) \ |
| 640 | __attribute__((section("_ftrace_events"))) event_##call = { \ | 578 | __attribute__((section("_ftrace_events"))) event_##call = { \ |
| 641 | .name = #call, \ | 579 | .name = #call, \ |
| 642 | .system = __stringify(TRACE_SYSTEM), \ | 580 | .class = &event_class_##template, \ |
| 643 | .event = &ftrace_event_type_##call, \ | 581 | .event.funcs = &ftrace_event_type_funcs_##template, \ |
| 644 | .raw_init = trace_event_raw_init, \ | ||
| 645 | .regfunc = ftrace_raw_reg_event_##call, \ | ||
| 646 | .unregfunc = ftrace_raw_unreg_event_##call, \ | ||
| 647 | .print_fmt = print_fmt_##template, \ | 582 | .print_fmt = print_fmt_##template, \ |
| 648 | .define_fields = ftrace_define_fields_##template, \ | 583 | }; |
| 649 | _TRACE_PERF_INIT(call) \ | ||
| 650 | } | ||
| 651 | 584 | ||
| 652 | #undef DEFINE_EVENT_PRINT | 585 | #undef DEFINE_EVENT_PRINT |
| 653 | #define DEFINE_EVENT_PRINT(template, call, proto, args, print) \ | 586 | #define DEFINE_EVENT_PRINT(template, call, proto, args, print) \ |
| @@ -658,14 +591,9 @@ static struct ftrace_event_call __used \ | |||
| 658 | __attribute__((__aligned__(4))) \ | 591 | __attribute__((__aligned__(4))) \ |
| 659 | __attribute__((section("_ftrace_events"))) event_##call = { \ | 592 | __attribute__((section("_ftrace_events"))) event_##call = { \ |
| 660 | .name = #call, \ | 593 | .name = #call, \ |
| 661 | .system = __stringify(TRACE_SYSTEM), \ | 594 | .class = &event_class_##template, \ |
| 662 | .event = &ftrace_event_type_##call, \ | 595 | .event.funcs = &ftrace_event_type_funcs_##call, \ |
| 663 | .raw_init = trace_event_raw_init, \ | ||
| 664 | .regfunc = ftrace_raw_reg_event_##call, \ | ||
| 665 | .unregfunc = ftrace_raw_unreg_event_##call, \ | ||
| 666 | .print_fmt = print_fmt_##call, \ | 596 | .print_fmt = print_fmt_##call, \ |
| 667 | .define_fields = ftrace_define_fields_##template, \ | ||
| 668 | _TRACE_PERF_INIT(call) \ | ||
| 669 | } | 597 | } |
| 670 | 598 | ||
| 671 | #include TRACE_INCLUDE(TRACE_INCLUDE_FILE) | 599 | #include TRACE_INCLUDE(TRACE_INCLUDE_FILE) |
| @@ -765,17 +693,20 @@ __attribute__((section("_ftrace_events"))) event_##call = { \ | |||
| 765 | #undef DECLARE_EVENT_CLASS | 693 | #undef DECLARE_EVENT_CLASS |
| 766 | #define DECLARE_EVENT_CLASS(call, proto, args, tstruct, assign, print) \ | 694 | #define DECLARE_EVENT_CLASS(call, proto, args, tstruct, assign, print) \ |
| 767 | static notrace void \ | 695 | static notrace void \ |
| 768 | perf_trace_templ_##call(struct ftrace_event_call *event_call, \ | 696 | perf_trace_##call(void *__data, proto) \ |
| 769 | struct pt_regs *__regs, proto) \ | ||
| 770 | { \ | 697 | { \ |
| 698 | struct ftrace_event_call *event_call = __data; \ | ||
| 771 | struct ftrace_data_offsets_##call __maybe_unused __data_offsets;\ | 699 | struct ftrace_data_offsets_##call __maybe_unused __data_offsets;\ |
| 772 | struct ftrace_raw_##call *entry; \ | 700 | struct ftrace_raw_##call *entry; \ |
| 701 | struct pt_regs __regs; \ | ||
| 773 | u64 __addr = 0, __count = 1; \ | 702 | u64 __addr = 0, __count = 1; \ |
| 774 | unsigned long irq_flags; \ | 703 | struct hlist_head *head; \ |
| 775 | int __entry_size; \ | 704 | int __entry_size; \ |
| 776 | int __data_size; \ | 705 | int __data_size; \ |
| 777 | int rctx; \ | 706 | int rctx; \ |
| 778 | \ | 707 | \ |
| 708 | perf_fetch_caller_regs(&__regs, 1); \ | ||
| 709 | \ | ||
| 779 | __data_size = ftrace_get_offsets_##call(&__data_offsets, args); \ | 710 | __data_size = ftrace_get_offsets_##call(&__data_offsets, args); \ |
| 780 | __entry_size = ALIGN(__data_size + sizeof(*entry) + sizeof(u32),\ | 711 | __entry_size = ALIGN(__data_size + sizeof(*entry) + sizeof(u32),\ |
| 781 | sizeof(u64)); \ | 712 | sizeof(u64)); \ |
| @@ -784,32 +715,34 @@ perf_trace_templ_##call(struct ftrace_event_call *event_call, \ | |||
| 784 | if (WARN_ONCE(__entry_size > PERF_MAX_TRACE_SIZE, \ | 715 | if (WARN_ONCE(__entry_size > PERF_MAX_TRACE_SIZE, \ |
| 785 | "profile buffer not large enough")) \ | 716 | "profile buffer not large enough")) \ |
| 786 | return; \ | 717 | return; \ |
| 718 | \ | ||
| 787 | entry = (struct ftrace_raw_##call *)perf_trace_buf_prepare( \ | 719 | entry = (struct ftrace_raw_##call *)perf_trace_buf_prepare( \ |
| 788 | __entry_size, event_call->id, &rctx, &irq_flags); \ | 720 | __entry_size, event_call->event.type, &__regs, &rctx); \ |
| 789 | if (!entry) \ | 721 | if (!entry) \ |
| 790 | return; \ | 722 | return; \ |
| 723 | \ | ||
| 791 | tstruct \ | 724 | tstruct \ |
| 792 | \ | 725 | \ |
| 793 | { assign; } \ | 726 | { assign; } \ |
| 794 | \ | 727 | \ |
| 728 | head = this_cpu_ptr(event_call->perf_events); \ | ||
| 795 | perf_trace_buf_submit(entry, __entry_size, rctx, __addr, \ | 729 | perf_trace_buf_submit(entry, __entry_size, rctx, __addr, \ |
| 796 | __count, irq_flags, __regs); \ | 730 | __count, &__regs, head); \ |
| 797 | } | 731 | } |
| 798 | 732 | ||
| 733 | /* | ||
| 734 | * This part is compiled out, it is only here as a build time check | ||
| 735 | * to make sure that if the tracepoint handling changes, the | ||
| 736 | * perf probe will fail to compile unless it too is updated. | ||
| 737 | */ | ||
| 799 | #undef DEFINE_EVENT | 738 | #undef DEFINE_EVENT |
| 800 | #define DEFINE_EVENT(template, call, proto, args) \ | 739 | #define DEFINE_EVENT(template, call, proto, args) \ |
| 801 | static notrace void perf_trace_##call(proto) \ | 740 | static inline void perf_test_probe_##call(void) \ |
| 802 | { \ | 741 | { \ |
| 803 | struct ftrace_event_call *event_call = &event_##call; \ | 742 | check_trace_callback_type_##call(perf_trace_##template); \ |
| 804 | struct pt_regs *__regs = &get_cpu_var(perf_trace_regs); \ | ||
| 805 | \ | ||
| 806 | perf_fetch_caller_regs(__regs, 1); \ | ||
| 807 | \ | ||
| 808 | perf_trace_templ_##template(event_call, __regs, args); \ | ||
| 809 | \ | ||
| 810 | put_cpu_var(perf_trace_regs); \ | ||
| 811 | } | 743 | } |
| 812 | 744 | ||
| 745 | |||
| 813 | #undef DEFINE_EVENT_PRINT | 746 | #undef DEFINE_EVENT_PRINT |
| 814 | #define DEFINE_EVENT_PRINT(template, name, proto, args, print) \ | 747 | #define DEFINE_EVENT_PRINT(template, name, proto, args, print) \ |
| 815 | DEFINE_EVENT(template, name, PARAMS(proto), PARAMS(args)) | 748 | DEFINE_EVENT(template, name, PARAMS(proto), PARAMS(args)) |
diff --git a/include/trace/syscall.h b/include/trace/syscall.h index e5e5f48dbfb3..257e08960d7b 100644 --- a/include/trace/syscall.h +++ b/include/trace/syscall.h | |||
| @@ -25,6 +25,8 @@ struct syscall_metadata { | |||
| 25 | int nb_args; | 25 | int nb_args; |
| 26 | const char **types; | 26 | const char **types; |
| 27 | const char **args; | 27 | const char **args; |
| 28 | struct list_head enter_fields; | ||
| 29 | struct list_head exit_fields; | ||
| 28 | 30 | ||
| 29 | struct ftrace_event_call *enter_event; | 31 | struct ftrace_event_call *enter_event; |
| 30 | struct ftrace_event_call *exit_event; | 32 | struct ftrace_event_call *exit_event; |
| @@ -34,16 +36,16 @@ struct syscall_metadata { | |||
| 34 | extern unsigned long arch_syscall_addr(int nr); | 36 | extern unsigned long arch_syscall_addr(int nr); |
| 35 | extern int init_syscall_trace(struct ftrace_event_call *call); | 37 | extern int init_syscall_trace(struct ftrace_event_call *call); |
| 36 | 38 | ||
| 37 | extern int syscall_enter_define_fields(struct ftrace_event_call *call); | ||
| 38 | extern int syscall_exit_define_fields(struct ftrace_event_call *call); | ||
| 39 | extern int reg_event_syscall_enter(struct ftrace_event_call *call); | 39 | extern int reg_event_syscall_enter(struct ftrace_event_call *call); |
| 40 | extern void unreg_event_syscall_enter(struct ftrace_event_call *call); | 40 | extern void unreg_event_syscall_enter(struct ftrace_event_call *call); |
| 41 | extern int reg_event_syscall_exit(struct ftrace_event_call *call); | 41 | extern int reg_event_syscall_exit(struct ftrace_event_call *call); |
| 42 | extern void unreg_event_syscall_exit(struct ftrace_event_call *call); | 42 | extern void unreg_event_syscall_exit(struct ftrace_event_call *call); |
| 43 | extern int | 43 | extern int |
| 44 | ftrace_format_syscall(struct ftrace_event_call *call, struct trace_seq *s); | 44 | ftrace_format_syscall(struct ftrace_event_call *call, struct trace_seq *s); |
| 45 | enum print_line_t print_syscall_enter(struct trace_iterator *iter, int flags); | 45 | enum print_line_t print_syscall_enter(struct trace_iterator *iter, int flags, |
| 46 | enum print_line_t print_syscall_exit(struct trace_iterator *iter, int flags); | 46 | struct trace_event *event); |
| 47 | enum print_line_t print_syscall_exit(struct trace_iterator *iter, int flags, | ||
| 48 | struct trace_event *event); | ||
| 47 | #endif | 49 | #endif |
| 48 | 50 | ||
| 49 | #ifdef CONFIG_PERF_EVENTS | 51 | #ifdef CONFIG_PERF_EVENTS |
