diff options
Diffstat (limited to 'include')
485 files changed, 15365 insertions, 4948 deletions
diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h index c65e4ce6c3af..1b3b36068ca5 100644 --- a/include/acpi/acpi_bus.h +++ b/include/acpi/acpi_bus.h | |||
@@ -248,7 +248,6 @@ struct acpi_device_perf { | |||
248 | /* Wakeup Management */ | 248 | /* Wakeup Management */ |
249 | struct acpi_device_wakeup_flags { | 249 | struct acpi_device_wakeup_flags { |
250 | u8 valid:1; /* Can successfully enable wakeup? */ | 250 | u8 valid:1; /* Can successfully enable wakeup? */ |
251 | u8 prepared:1; /* Has the wake-up capability been enabled? */ | ||
252 | u8 run_wake:1; /* Run-Wake GPE devices */ | 251 | u8 run_wake:1; /* Run-Wake GPE devices */ |
253 | }; | 252 | }; |
254 | 253 | ||
@@ -263,6 +262,7 @@ struct acpi_device_wakeup { | |||
263 | struct acpi_handle_list resources; | 262 | struct acpi_handle_list resources; |
264 | struct acpi_device_wakeup_state state; | 263 | struct acpi_device_wakeup_state state; |
265 | struct acpi_device_wakeup_flags flags; | 264 | struct acpi_device_wakeup_flags flags; |
265 | int prepare_count; | ||
266 | }; | 266 | }; |
267 | 267 | ||
268 | /* Device */ | 268 | /* Device */ |
@@ -356,7 +356,6 @@ void acpi_remove_dir(struct acpi_device *); | |||
356 | /* | 356 | /* |
357 | * Bind physical devices with ACPI devices | 357 | * Bind physical devices with ACPI devices |
358 | */ | 358 | */ |
359 | #include <linux/device.h> | ||
360 | struct acpi_bus_type { | 359 | struct acpi_bus_type { |
361 | struct list_head list; | 360 | struct list_head list; |
362 | struct bus_type *bus; | 361 | struct bus_type *bus; |
@@ -369,10 +368,26 @@ int register_acpi_bus_type(struct acpi_bus_type *); | |||
369 | int unregister_acpi_bus_type(struct acpi_bus_type *); | 368 | int unregister_acpi_bus_type(struct acpi_bus_type *); |
370 | struct device *acpi_get_physical_device(acpi_handle); | 369 | struct device *acpi_get_physical_device(acpi_handle); |
371 | 370 | ||
371 | struct acpi_pci_root { | ||
372 | struct list_head node; | ||
373 | struct acpi_device * device; | ||
374 | struct acpi_pci_id id; | ||
375 | struct pci_bus *bus; | ||
376 | u16 segment; | ||
377 | u8 bus_nr; | ||
378 | |||
379 | u32 osc_support_set; /* _OSC state of support bits */ | ||
380 | u32 osc_control_set; /* _OSC state of control bits */ | ||
381 | u32 osc_control_qry; /* the latest _OSC query result */ | ||
382 | |||
383 | u32 osc_queried:1; /* has _OSC control been queried? */ | ||
384 | }; | ||
385 | |||
372 | /* helper */ | 386 | /* helper */ |
373 | acpi_handle acpi_get_child(acpi_handle, acpi_integer); | 387 | acpi_handle acpi_get_child(acpi_handle, acpi_integer); |
374 | int acpi_is_root_bridge(acpi_handle); | 388 | int acpi_is_root_bridge(acpi_handle); |
375 | acpi_handle acpi_get_pci_rootbridge_handle(unsigned int, unsigned int); | 389 | acpi_handle acpi_get_pci_rootbridge_handle(unsigned int, unsigned int); |
390 | struct acpi_pci_root *acpi_pci_find_root(acpi_handle handle); | ||
376 | #define DEVICE_ACPI_HANDLE(dev) ((acpi_handle)((dev)->archdata.acpi_handle)) | 391 | #define DEVICE_ACPI_HANDLE(dev) ((acpi_handle)((dev)->archdata.acpi_handle)) |
377 | 392 | ||
378 | #ifdef CONFIG_PM_SLEEP | 393 | #ifdef CONFIG_PM_SLEEP |
diff --git a/include/acpi/acpiosxf.h b/include/acpi/acpiosxf.h index 3e798593b17b..ab0b85cf21f3 100644 --- a/include/acpi/acpiosxf.h +++ b/include/acpi/acpiosxf.h | |||
@@ -242,6 +242,10 @@ acpi_os_derive_pci_id(acpi_handle rhandle, | |||
242 | acpi_status acpi_os_validate_interface(char *interface); | 242 | acpi_status acpi_os_validate_interface(char *interface); |
243 | acpi_status acpi_osi_invalidate(char* interface); | 243 | acpi_status acpi_osi_invalidate(char* interface); |
244 | 244 | ||
245 | acpi_status | ||
246 | acpi_os_validate_address(u8 space_id, acpi_physical_address address, | ||
247 | acpi_size length, char *name); | ||
248 | |||
245 | u64 acpi_os_get_timer(void); | 249 | u64 acpi_os_get_timer(void); |
246 | 250 | ||
247 | acpi_status acpi_os_signal(u32 function, void *info); | 251 | acpi_status acpi_os_signal(u32 function, void *info); |
diff --git a/include/acpi/actypes.h b/include/acpi/actypes.h index 37ba576d06e8..8052236d1a3d 100644 --- a/include/acpi/actypes.h +++ b/include/acpi/actypes.h | |||
@@ -288,7 +288,7 @@ typedef u32 acpi_physical_address; | |||
288 | /* | 288 | /* |
289 | * Some compilers complain about unused variables. Sometimes we don't want to | 289 | * Some compilers complain about unused variables. Sometimes we don't want to |
290 | * use all the variables (for example, _acpi_module_name). This allows us | 290 | * use all the variables (for example, _acpi_module_name). This allows us |
291 | * to to tell the compiler in a per-variable manner that a variable | 291 | * to tell the compiler in a per-variable manner that a variable |
292 | * is unused | 292 | * is unused |
293 | */ | 293 | */ |
294 | #ifndef ACPI_UNUSED_VAR | 294 | #ifndef ACPI_UNUSED_VAR |
diff --git a/include/acpi/platform/acgcc.h b/include/acpi/platform/acgcc.h index 935c5d7fc86e..6aadbf84ae71 100644 --- a/include/acpi/platform/acgcc.h +++ b/include/acpi/platform/acgcc.h | |||
@@ -57,7 +57,7 @@ | |||
57 | /* | 57 | /* |
58 | * Some compilers complain about unused variables. Sometimes we don't want to | 58 | * Some compilers complain about unused variables. Sometimes we don't want to |
59 | * use all the variables (for example, _acpi_module_name). This allows us | 59 | * use all the variables (for example, _acpi_module_name). This allows us |
60 | * to to tell the compiler warning in a per-variable manner that a variable | 60 | * to tell the compiler warning in a per-variable manner that a variable |
61 | * is unused. | 61 | * is unused. |
62 | */ | 62 | */ |
63 | #define ACPI_UNUSED_VAR __attribute__ ((unused)) | 63 | #define ACPI_UNUSED_VAR __attribute__ ((unused)) |
diff --git a/include/acpi/processor.h b/include/acpi/processor.h index baf1e0a9a7ee..740ac3ad8fd0 100644 --- a/include/acpi/processor.h +++ b/include/acpi/processor.h | |||
@@ -174,7 +174,7 @@ struct acpi_processor_throttling { | |||
174 | cpumask_var_t shared_cpu_map; | 174 | cpumask_var_t shared_cpu_map; |
175 | int (*acpi_processor_get_throttling) (struct acpi_processor * pr); | 175 | int (*acpi_processor_get_throttling) (struct acpi_processor * pr); |
176 | int (*acpi_processor_set_throttling) (struct acpi_processor * pr, | 176 | int (*acpi_processor_set_throttling) (struct acpi_processor * pr, |
177 | int state); | 177 | int state, bool force); |
178 | 178 | ||
179 | u32 address; | 179 | u32 address; |
180 | u8 duty_offset; | 180 | u8 duty_offset; |
@@ -321,7 +321,8 @@ static inline int acpi_processor_ppc_has_changed(struct acpi_processor *pr) | |||
321 | /* in processor_throttling.c */ | 321 | /* in processor_throttling.c */ |
322 | int acpi_processor_tstate_has_changed(struct acpi_processor *pr); | 322 | int acpi_processor_tstate_has_changed(struct acpi_processor *pr); |
323 | int acpi_processor_get_throttling_info(struct acpi_processor *pr); | 323 | int acpi_processor_get_throttling_info(struct acpi_processor *pr); |
324 | extern int acpi_processor_set_throttling(struct acpi_processor *pr, int state); | 324 | extern int acpi_processor_set_throttling(struct acpi_processor *pr, |
325 | int state, bool force); | ||
325 | extern const struct file_operations acpi_processor_throttling_fops; | 326 | extern const struct file_operations acpi_processor_throttling_fops; |
326 | extern void acpi_processor_throttling_init(void); | 327 | extern void acpi_processor_throttling_init(void); |
327 | /* in processor_idle.c */ | 328 | /* in processor_idle.c */ |
diff --git a/include/asm-generic/4level-fixup.h b/include/asm-generic/4level-fixup.h index 9d40e879f99e..77ff547730af 100644 --- a/include/asm-generic/4level-fixup.h +++ b/include/asm-generic/4level-fixup.h | |||
@@ -27,9 +27,9 @@ | |||
27 | #define pud_page_vaddr(pud) pgd_page_vaddr(pud) | 27 | #define pud_page_vaddr(pud) pgd_page_vaddr(pud) |
28 | 28 | ||
29 | #undef pud_free_tlb | 29 | #undef pud_free_tlb |
30 | #define pud_free_tlb(tlb, x) do { } while (0) | 30 | #define pud_free_tlb(tlb, x, addr) do { } while (0) |
31 | #define pud_free(mm, x) do { } while (0) | 31 | #define pud_free(mm, x) do { } while (0) |
32 | #define __pud_free_tlb(tlb, x) do { } while (0) | 32 | #define __pud_free_tlb(tlb, x, addr) do { } while (0) |
33 | 33 | ||
34 | #undef pud_addr_end | 34 | #undef pud_addr_end |
35 | #define pud_addr_end(addr, end) (end) | 35 | #define pud_addr_end(addr, end) (end) |
diff --git a/include/asm-generic/Kbuild.asm b/include/asm-generic/Kbuild.asm index 290910e4ede4..96d7c9804dc1 100644 --- a/include/asm-generic/Kbuild.asm +++ b/include/asm-generic/Kbuild.asm | |||
@@ -3,6 +3,11 @@ ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/include/asm/kvm.h \ | |||
3 | header-y += kvm.h | 3 | header-y += kvm.h |
4 | endif | 4 | endif |
5 | 5 | ||
6 | ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/include/asm/kvm_para.h \ | ||
7 | $(srctree)/include/asm-$(SRCARCH)/kvm_para.h),) | ||
8 | header-y += kvm_para.h | ||
9 | endif | ||
10 | |||
6 | ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/include/asm/a.out.h \ | 11 | ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/include/asm/a.out.h \ |
7 | $(srctree)/include/asm-$(SRCARCH)/a.out.h),) | 12 | $(srctree)/include/asm-$(SRCARCH)/a.out.h),) |
8 | unifdef-y += a.out.h | 13 | unifdef-y += a.out.h |
diff --git a/include/asm-generic/device.h b/include/asm-generic/device.h index c17c9600f220..d7c76bba640d 100644 --- a/include/asm-generic/device.h +++ b/include/asm-generic/device.h | |||
@@ -9,4 +9,7 @@ | |||
9 | struct dev_archdata { | 9 | struct dev_archdata { |
10 | }; | 10 | }; |
11 | 11 | ||
12 | struct pdev_archdata { | ||
13 | }; | ||
14 | |||
12 | #endif /* _ASM_GENERIC_DEVICE_H */ | 15 | #endif /* _ASM_GENERIC_DEVICE_H */ |
diff --git a/include/asm-generic/dma-mapping-common.h b/include/asm-generic/dma-mapping-common.h index 5406a601185c..e694263445f7 100644 --- a/include/asm-generic/dma-mapping-common.h +++ b/include/asm-generic/dma-mapping-common.h | |||
@@ -103,7 +103,6 @@ static inline void dma_sync_single_for_cpu(struct device *dev, dma_addr_t addr, | |||
103 | if (ops->sync_single_for_cpu) | 103 | if (ops->sync_single_for_cpu) |
104 | ops->sync_single_for_cpu(dev, addr, size, dir); | 104 | ops->sync_single_for_cpu(dev, addr, size, dir); |
105 | debug_dma_sync_single_for_cpu(dev, addr, size, dir); | 105 | debug_dma_sync_single_for_cpu(dev, addr, size, dir); |
106 | flush_write_buffers(); | ||
107 | } | 106 | } |
108 | 107 | ||
109 | static inline void dma_sync_single_for_device(struct device *dev, | 108 | static inline void dma_sync_single_for_device(struct device *dev, |
@@ -116,7 +115,6 @@ static inline void dma_sync_single_for_device(struct device *dev, | |||
116 | if (ops->sync_single_for_device) | 115 | if (ops->sync_single_for_device) |
117 | ops->sync_single_for_device(dev, addr, size, dir); | 116 | ops->sync_single_for_device(dev, addr, size, dir); |
118 | debug_dma_sync_single_for_device(dev, addr, size, dir); | 117 | debug_dma_sync_single_for_device(dev, addr, size, dir); |
119 | flush_write_buffers(); | ||
120 | } | 118 | } |
121 | 119 | ||
122 | static inline void dma_sync_single_range_for_cpu(struct device *dev, | 120 | static inline void dma_sync_single_range_for_cpu(struct device *dev, |
@@ -132,7 +130,6 @@ static inline void dma_sync_single_range_for_cpu(struct device *dev, | |||
132 | ops->sync_single_range_for_cpu(dev, addr, offset, size, dir); | 130 | ops->sync_single_range_for_cpu(dev, addr, offset, size, dir); |
133 | debug_dma_sync_single_range_for_cpu(dev, addr, offset, size, dir); | 131 | debug_dma_sync_single_range_for_cpu(dev, addr, offset, size, dir); |
134 | 132 | ||
135 | flush_write_buffers(); | ||
136 | } else | 133 | } else |
137 | dma_sync_single_for_cpu(dev, addr, size, dir); | 134 | dma_sync_single_for_cpu(dev, addr, size, dir); |
138 | } | 135 | } |
@@ -150,7 +147,6 @@ static inline void dma_sync_single_range_for_device(struct device *dev, | |||
150 | ops->sync_single_range_for_device(dev, addr, offset, size, dir); | 147 | ops->sync_single_range_for_device(dev, addr, offset, size, dir); |
151 | debug_dma_sync_single_range_for_device(dev, addr, offset, size, dir); | 148 | debug_dma_sync_single_range_for_device(dev, addr, offset, size, dir); |
152 | 149 | ||
153 | flush_write_buffers(); | ||
154 | } else | 150 | } else |
155 | dma_sync_single_for_device(dev, addr, size, dir); | 151 | dma_sync_single_for_device(dev, addr, size, dir); |
156 | } | 152 | } |
@@ -165,7 +161,6 @@ dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, | |||
165 | if (ops->sync_sg_for_cpu) | 161 | if (ops->sync_sg_for_cpu) |
166 | ops->sync_sg_for_cpu(dev, sg, nelems, dir); | 162 | ops->sync_sg_for_cpu(dev, sg, nelems, dir); |
167 | debug_dma_sync_sg_for_cpu(dev, sg, nelems, dir); | 163 | debug_dma_sync_sg_for_cpu(dev, sg, nelems, dir); |
168 | flush_write_buffers(); | ||
169 | } | 164 | } |
170 | 165 | ||
171 | static inline void | 166 | static inline void |
@@ -179,7 +174,6 @@ dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg, | |||
179 | ops->sync_sg_for_device(dev, sg, nelems, dir); | 174 | ops->sync_sg_for_device(dev, sg, nelems, dir); |
180 | debug_dma_sync_sg_for_device(dev, sg, nelems, dir); | 175 | debug_dma_sync_sg_for_device(dev, sg, nelems, dir); |
181 | 176 | ||
182 | flush_write_buffers(); | ||
183 | } | 177 | } |
184 | 178 | ||
185 | #define dma_map_single(d, a, s, r) dma_map_single_attrs(d, a, s, r, NULL) | 179 | #define dma_map_single(d, a, s, r) dma_map_single_attrs(d, a, s, r, NULL) |
diff --git a/include/asm-generic/mman-common.h b/include/asm-generic/mman-common.h index 3b69ad34189a..dd63bd38864b 100644 --- a/include/asm-generic/mman-common.h +++ b/include/asm-generic/mman-common.h | |||
@@ -35,6 +35,9 @@ | |||
35 | #define MADV_DONTFORK 10 /* don't inherit across fork */ | 35 | #define MADV_DONTFORK 10 /* don't inherit across fork */ |
36 | #define MADV_DOFORK 11 /* do inherit across fork */ | 36 | #define MADV_DOFORK 11 /* do inherit across fork */ |
37 | 37 | ||
38 | #define MADV_MERGEABLE 12 /* KSM may merge identical pages */ | ||
39 | #define MADV_UNMERGEABLE 13 /* KSM may not merge identical pages */ | ||
40 | |||
38 | /* compatibility flags */ | 41 | /* compatibility flags */ |
39 | #define MAP_FILE 0 | 42 | #define MAP_FILE 0 |
40 | 43 | ||
diff --git a/include/asm-generic/mman.h b/include/asm-generic/mman.h index 7cab4de2bca6..32c8bd6a196d 100644 --- a/include/asm-generic/mman.h +++ b/include/asm-generic/mman.h | |||
@@ -11,6 +11,7 @@ | |||
11 | #define MAP_POPULATE 0x8000 /* populate (prefault) pagetables */ | 11 | #define MAP_POPULATE 0x8000 /* populate (prefault) pagetables */ |
12 | #define MAP_NONBLOCK 0x10000 /* do not block on IO */ | 12 | #define MAP_NONBLOCK 0x10000 /* do not block on IO */ |
13 | #define MAP_STACK 0x20000 /* give out an address that is best suited for process/thread stacks */ | 13 | #define MAP_STACK 0x20000 /* give out an address that is best suited for process/thread stacks */ |
14 | #define MAP_HUGETLB 0x40000 /* create a huge page mapping */ | ||
14 | 15 | ||
15 | #define MCL_CURRENT 1 /* lock all current mappings */ | 16 | #define MCL_CURRENT 1 /* lock all current mappings */ |
16 | #define MCL_FUTURE 2 /* lock all future mappings */ | 17 | #define MCL_FUTURE 2 /* lock all future mappings */ |
diff --git a/include/asm-generic/pci.h b/include/asm-generic/pci.h index b4326b5466eb..26373cff4546 100644 --- a/include/asm-generic/pci.h +++ b/include/asm-generic/pci.h | |||
@@ -30,7 +30,18 @@ pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res, | |||
30 | res->end = region->end; | 30 | res->end = region->end; |
31 | } | 31 | } |
32 | 32 | ||
33 | #define pcibios_scan_all_fns(a, b) 0 | 33 | static inline struct resource * |
34 | pcibios_select_root(struct pci_dev *pdev, struct resource *res) | ||
35 | { | ||
36 | struct resource *root = NULL; | ||
37 | |||
38 | if (res->flags & IORESOURCE_IO) | ||
39 | root = &ioport_resource; | ||
40 | if (res->flags & IORESOURCE_MEM) | ||
41 | root = &iomem_resource; | ||
42 | |||
43 | return root; | ||
44 | } | ||
34 | 45 | ||
35 | #ifndef HAVE_ARCH_PCI_GET_LEGACY_IDE_IRQ | 46 | #ifndef HAVE_ARCH_PCI_GET_LEGACY_IDE_IRQ |
36 | static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel) | 47 | static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel) |
diff --git a/include/asm-generic/percpu.h b/include/asm-generic/percpu.h index d7d50d7ee51e..90079c373f1c 100644 --- a/include/asm-generic/percpu.h +++ b/include/asm-generic/percpu.h | |||
@@ -81,14 +81,17 @@ extern void setup_per_cpu_areas(void); | |||
81 | 81 | ||
82 | #ifdef MODULE | 82 | #ifdef MODULE |
83 | #define PER_CPU_SHARED_ALIGNED_SECTION "" | 83 | #define PER_CPU_SHARED_ALIGNED_SECTION "" |
84 | #define PER_CPU_ALIGNED_SECTION "" | ||
84 | #else | 85 | #else |
85 | #define PER_CPU_SHARED_ALIGNED_SECTION ".shared_aligned" | 86 | #define PER_CPU_SHARED_ALIGNED_SECTION ".shared_aligned" |
87 | #define PER_CPU_ALIGNED_SECTION ".shared_aligned" | ||
86 | #endif | 88 | #endif |
87 | #define PER_CPU_FIRST_SECTION ".first" | 89 | #define PER_CPU_FIRST_SECTION ".first" |
88 | 90 | ||
89 | #else | 91 | #else |
90 | 92 | ||
91 | #define PER_CPU_SHARED_ALIGNED_SECTION "" | 93 | #define PER_CPU_SHARED_ALIGNED_SECTION "" |
94 | #define PER_CPU_ALIGNED_SECTION ".shared_aligned" | ||
92 | #define PER_CPU_FIRST_SECTION "" | 95 | #define PER_CPU_FIRST_SECTION "" |
93 | 96 | ||
94 | #endif | 97 | #endif |
@@ -97,4 +100,8 @@ extern void setup_per_cpu_areas(void); | |||
97 | #define PER_CPU_ATTRIBUTES | 100 | #define PER_CPU_ATTRIBUTES |
98 | #endif | 101 | #endif |
99 | 102 | ||
103 | #ifndef PER_CPU_DEF_ATTRIBUTES | ||
104 | #define PER_CPU_DEF_ATTRIBUTES | ||
105 | #endif | ||
106 | |||
100 | #endif /* _ASM_GENERIC_PERCPU_H_ */ | 107 | #endif /* _ASM_GENERIC_PERCPU_H_ */ |
diff --git a/include/asm-generic/pgtable-nopmd.h b/include/asm-generic/pgtable-nopmd.h index a7cdc48e8b78..725612b793ce 100644 --- a/include/asm-generic/pgtable-nopmd.h +++ b/include/asm-generic/pgtable-nopmd.h | |||
@@ -59,7 +59,7 @@ static inline pmd_t * pmd_offset(pud_t * pud, unsigned long address) | |||
59 | static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd) | 59 | static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd) |
60 | { | 60 | { |
61 | } | 61 | } |
62 | #define __pmd_free_tlb(tlb, x) do { } while (0) | 62 | #define __pmd_free_tlb(tlb, x, a) do { } while (0) |
63 | 63 | ||
64 | #undef pmd_addr_end | 64 | #undef pmd_addr_end |
65 | #define pmd_addr_end(addr, end) (end) | 65 | #define pmd_addr_end(addr, end) (end) |
diff --git a/include/asm-generic/pgtable-nopud.h b/include/asm-generic/pgtable-nopud.h index 87cf449a6df3..810431d8351b 100644 --- a/include/asm-generic/pgtable-nopud.h +++ b/include/asm-generic/pgtable-nopud.h | |||
@@ -52,7 +52,7 @@ static inline pud_t * pud_offset(pgd_t * pgd, unsigned long address) | |||
52 | */ | 52 | */ |
53 | #define pud_alloc_one(mm, address) NULL | 53 | #define pud_alloc_one(mm, address) NULL |
54 | #define pud_free(mm, x) do { } while (0) | 54 | #define pud_free(mm, x) do { } while (0) |
55 | #define __pud_free_tlb(tlb, x) do { } while (0) | 55 | #define __pud_free_tlb(tlb, x, a) do { } while (0) |
56 | 56 | ||
57 | #undef pud_addr_end | 57 | #undef pud_addr_end |
58 | #define pud_addr_end(addr, end) (end) | 58 | #define pud_addr_end(addr, end) (end) |
diff --git a/include/asm-generic/socket.h b/include/asm-generic/socket.h index 5d79e409241c..538991cef6f0 100644 --- a/include/asm-generic/socket.h +++ b/include/asm-generic/socket.h | |||
@@ -60,4 +60,7 @@ | |||
60 | #define SO_TIMESTAMPING 37 | 60 | #define SO_TIMESTAMPING 37 |
61 | #define SCM_TIMESTAMPING SO_TIMESTAMPING | 61 | #define SCM_TIMESTAMPING SO_TIMESTAMPING |
62 | 62 | ||
63 | #define SO_PROTOCOL 38 | ||
64 | #define SO_DOMAIN 39 | ||
65 | |||
63 | #endif /* __ASM_GENERIC_SOCKET_H */ | 66 | #endif /* __ASM_GENERIC_SOCKET_H */ |
diff --git a/include/asm-generic/tlb.h b/include/asm-generic/tlb.h index f490e43a90b9..e43f9766259f 100644 --- a/include/asm-generic/tlb.h +++ b/include/asm-generic/tlb.h | |||
@@ -123,24 +123,24 @@ static inline void tlb_remove_page(struct mmu_gather *tlb, struct page *page) | |||
123 | __tlb_remove_tlb_entry(tlb, ptep, address); \ | 123 | __tlb_remove_tlb_entry(tlb, ptep, address); \ |
124 | } while (0) | 124 | } while (0) |
125 | 125 | ||
126 | #define pte_free_tlb(tlb, ptep) \ | 126 | #define pte_free_tlb(tlb, ptep, address) \ |
127 | do { \ | 127 | do { \ |
128 | tlb->need_flush = 1; \ | 128 | tlb->need_flush = 1; \ |
129 | __pte_free_tlb(tlb, ptep); \ | 129 | __pte_free_tlb(tlb, ptep, address); \ |
130 | } while (0) | 130 | } while (0) |
131 | 131 | ||
132 | #ifndef __ARCH_HAS_4LEVEL_HACK | 132 | #ifndef __ARCH_HAS_4LEVEL_HACK |
133 | #define pud_free_tlb(tlb, pudp) \ | 133 | #define pud_free_tlb(tlb, pudp, address) \ |
134 | do { \ | 134 | do { \ |
135 | tlb->need_flush = 1; \ | 135 | tlb->need_flush = 1; \ |
136 | __pud_free_tlb(tlb, pudp); \ | 136 | __pud_free_tlb(tlb, pudp, address); \ |
137 | } while (0) | 137 | } while (0) |
138 | #endif | 138 | #endif |
139 | 139 | ||
140 | #define pmd_free_tlb(tlb, pmdp) \ | 140 | #define pmd_free_tlb(tlb, pmdp, address) \ |
141 | do { \ | 141 | do { \ |
142 | tlb->need_flush = 1; \ | 142 | tlb->need_flush = 1; \ |
143 | __pmd_free_tlb(tlb, pmdp); \ | 143 | __pmd_free_tlb(tlb, pmdp, address); \ |
144 | } while (0) | 144 | } while (0) |
145 | 145 | ||
146 | #define tlb_migrate_finish(mm) do {} while (0) | 146 | #define tlb_migrate_finish(mm) do {} while (0) |
diff --git a/include/asm-generic/unistd.h b/include/asm-generic/unistd.h index 1125e5a1ee5d..d76b66acea95 100644 --- a/include/asm-generic/unistd.h +++ b/include/asm-generic/unistd.h | |||
@@ -620,8 +620,8 @@ __SYSCALL(__NR_move_pages, sys_move_pages) | |||
620 | 620 | ||
621 | #define __NR_rt_tgsigqueueinfo 240 | 621 | #define __NR_rt_tgsigqueueinfo 240 |
622 | __SYSCALL(__NR_rt_tgsigqueueinfo, sys_rt_tgsigqueueinfo) | 622 | __SYSCALL(__NR_rt_tgsigqueueinfo, sys_rt_tgsigqueueinfo) |
623 | #define __NR_perf_counter_open 241 | 623 | #define __NR_perf_event_open 241 |
624 | __SYSCALL(__NR_perf_counter_open, sys_perf_counter_open) | 624 | __SYSCALL(__NR_perf_event_open, sys_perf_event_open) |
625 | 625 | ||
626 | #undef __NR_syscalls | 626 | #undef __NR_syscalls |
627 | #define __NR_syscalls 242 | 627 | #define __NR_syscalls 242 |
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index 92b73b6140ff..29ca8f53ffbe 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h | |||
@@ -30,18 +30,13 @@ | |||
30 | * EXCEPTION_TABLE(...) | 30 | * EXCEPTION_TABLE(...) |
31 | * NOTES | 31 | * NOTES |
32 | * | 32 | * |
33 | * __bss_start = .; | 33 | * BSS_SECTION(0, 0, 0) |
34 | * BSS_SECTION(0, 0) | ||
35 | * __bss_stop = .; | ||
36 | * _end = .; | 34 | * _end = .; |
37 | * | 35 | * |
38 | * /DISCARD/ : { | ||
39 | * EXIT_TEXT | ||
40 | * EXIT_DATA | ||
41 | * EXIT_CALL | ||
42 | * } | ||
43 | * STABS_DEBUG | 36 | * STABS_DEBUG |
44 | * DWARF_DEBUG | 37 | * DWARF_DEBUG |
38 | * | ||
39 | * DISCARDS // must be the last | ||
45 | * } | 40 | * } |
46 | * | 41 | * |
47 | * [__init_begin, __init_end] is the init section that may be freed after init | 42 | * [__init_begin, __init_end] is the init section that may be freed after init |
@@ -93,7 +88,8 @@ | |||
93 | #endif | 88 | #endif |
94 | 89 | ||
95 | #ifdef CONFIG_FTRACE_MCOUNT_RECORD | 90 | #ifdef CONFIG_FTRACE_MCOUNT_RECORD |
96 | #define MCOUNT_REC() VMLINUX_SYMBOL(__start_mcount_loc) = .; \ | 91 | #define MCOUNT_REC() . = ALIGN(8); \ |
92 | VMLINUX_SYMBOL(__start_mcount_loc) = .; \ | ||
97 | *(__mcount_loc) \ | 93 | *(__mcount_loc) \ |
98 | VMLINUX_SYMBOL(__stop_mcount_loc) = .; | 94 | VMLINUX_SYMBOL(__stop_mcount_loc) = .; |
99 | #else | 95 | #else |
@@ -191,7 +187,7 @@ | |||
191 | . = ALIGN(align); \ | 187 | . = ALIGN(align); \ |
192 | *(.data.cacheline_aligned) | 188 | *(.data.cacheline_aligned) |
193 | 189 | ||
194 | #define INIT_TASK(align) \ | 190 | #define INIT_TASK_DATA(align) \ |
195 | . = ALIGN(align); \ | 191 | . = ALIGN(align); \ |
196 | *(.data.init_task) | 192 | *(.data.init_task) |
197 | 193 | ||
@@ -333,7 +329,6 @@ | |||
333 | /* __*init sections */ \ | 329 | /* __*init sections */ \ |
334 | __init_rodata : AT(ADDR(__init_rodata) - LOAD_OFFSET) { \ | 330 | __init_rodata : AT(ADDR(__init_rodata) - LOAD_OFFSET) { \ |
335 | *(.ref.rodata) \ | 331 | *(.ref.rodata) \ |
336 | MCOUNT_REC() \ | ||
337 | DEV_KEEP(init.rodata) \ | 332 | DEV_KEEP(init.rodata) \ |
338 | DEV_KEEP(exit.rodata) \ | 333 | DEV_KEEP(exit.rodata) \ |
339 | CPU_KEEP(init.rodata) \ | 334 | CPU_KEEP(init.rodata) \ |
@@ -434,14 +429,15 @@ | |||
434 | /* | 429 | /* |
435 | * Init task | 430 | * Init task |
436 | */ | 431 | */ |
437 | #define INIT_TASK_DATA(align) \ | 432 | #define INIT_TASK_DATA_SECTION(align) \ |
438 | . = ALIGN(align); \ | 433 | . = ALIGN(align); \ |
439 | .data.init_task : { \ | 434 | .data.init_task : { \ |
440 | INIT_TASK \ | 435 | INIT_TASK_DATA(align) \ |
441 | } | 436 | } |
442 | 437 | ||
443 | #ifdef CONFIG_CONSTRUCTORS | 438 | #ifdef CONFIG_CONSTRUCTORS |
444 | #define KERNEL_CTORS() VMLINUX_SYMBOL(__ctors_start) = .; \ | 439 | #define KERNEL_CTORS() . = ALIGN(8); \ |
440 | VMLINUX_SYMBOL(__ctors_start) = .; \ | ||
445 | *(.ctors) \ | 441 | *(.ctors) \ |
446 | VMLINUX_SYMBOL(__ctors_end) = .; | 442 | VMLINUX_SYMBOL(__ctors_end) = .; |
447 | #else | 443 | #else |
@@ -456,6 +452,7 @@ | |||
456 | MEM_DISCARD(init.data) \ | 452 | MEM_DISCARD(init.data) \ |
457 | KERNEL_CTORS() \ | 453 | KERNEL_CTORS() \ |
458 | *(.init.rodata) \ | 454 | *(.init.rodata) \ |
455 | MCOUNT_REC() \ | ||
459 | DEV_DISCARD(init.rodata) \ | 456 | DEV_DISCARD(init.rodata) \ |
460 | CPU_DISCARD(init.rodata) \ | 457 | CPU_DISCARD(init.rodata) \ |
461 | MEM_DISCARD(init.rodata) | 458 | MEM_DISCARD(init.rodata) |
@@ -488,7 +485,8 @@ | |||
488 | * bss (Block Started by Symbol) - uninitialized data | 485 | * bss (Block Started by Symbol) - uninitialized data |
489 | * zeroed during startup | 486 | * zeroed during startup |
490 | */ | 487 | */ |
491 | #define SBSS \ | 488 | #define SBSS(sbss_align) \ |
489 | . = ALIGN(sbss_align); \ | ||
492 | .sbss : AT(ADDR(.sbss) - LOAD_OFFSET) { \ | 490 | .sbss : AT(ADDR(.sbss) - LOAD_OFFSET) { \ |
493 | *(.sbss) \ | 491 | *(.sbss) \ |
494 | *(.scommon) \ | 492 | *(.scommon) \ |
@@ -497,12 +495,10 @@ | |||
497 | #define BSS(bss_align) \ | 495 | #define BSS(bss_align) \ |
498 | . = ALIGN(bss_align); \ | 496 | . = ALIGN(bss_align); \ |
499 | .bss : AT(ADDR(.bss) - LOAD_OFFSET) { \ | 497 | .bss : AT(ADDR(.bss) - LOAD_OFFSET) { \ |
500 | VMLINUX_SYMBOL(__bss_start) = .; \ | ||
501 | *(.bss.page_aligned) \ | 498 | *(.bss.page_aligned) \ |
502 | *(.dynbss) \ | 499 | *(.dynbss) \ |
503 | *(.bss) \ | 500 | *(.bss) \ |
504 | *(COMMON) \ | 501 | *(COMMON) \ |
505 | VMLINUX_SYMBOL(__bss_stop) = .; \ | ||
506 | } | 502 | } |
507 | 503 | ||
508 | /* | 504 | /* |
@@ -628,6 +624,23 @@ | |||
628 | #define INIT_RAM_FS | 624 | #define INIT_RAM_FS |
629 | #endif | 625 | #endif |
630 | 626 | ||
627 | /* | ||
628 | * Default discarded sections. | ||
629 | * | ||
630 | * Some archs want to discard exit text/data at runtime rather than | ||
631 | * link time due to cross-section references such as alt instructions, | ||
632 | * bug table, eh_frame, etc. DISCARDS must be the last of output | ||
633 | * section definitions so that such archs put those in earlier section | ||
634 | * definitions. | ||
635 | */ | ||
636 | #define DISCARDS \ | ||
637 | /DISCARD/ : { \ | ||
638 | EXIT_TEXT \ | ||
639 | EXIT_DATA \ | ||
640 | EXIT_CALL \ | ||
641 | *(.discard) \ | ||
642 | } | ||
643 | |||
631 | /** | 644 | /** |
632 | * PERCPU_VADDR - define output section for percpu area | 645 | * PERCPU_VADDR - define output section for percpu area |
633 | * @vaddr: explicit base address (optional) | 646 | * @vaddr: explicit base address (optional) |
@@ -704,15 +717,15 @@ | |||
704 | * matches the requirment of PAGE_ALIGNED_DATA. | 717 | * matches the requirment of PAGE_ALIGNED_DATA. |
705 | * | 718 | * |
706 | * use 0 as page_align if page_aligned data is not used */ | 719 | * use 0 as page_align if page_aligned data is not used */ |
707 | #define RW_DATA_SECTION(cacheline, nosave, pagealigned, inittask) \ | 720 | #define RW_DATA_SECTION(cacheline, pagealigned, inittask) \ |
708 | . = ALIGN(PAGE_SIZE); \ | 721 | . = ALIGN(PAGE_SIZE); \ |
709 | .data : AT(ADDR(.data) - LOAD_OFFSET) { \ | 722 | .data : AT(ADDR(.data) - LOAD_OFFSET) { \ |
710 | INIT_TASK(inittask) \ | 723 | INIT_TASK_DATA(inittask) \ |
711 | CACHELINE_ALIGNED_DATA(cacheline) \ | 724 | CACHELINE_ALIGNED_DATA(cacheline) \ |
712 | READ_MOSTLY_DATA(cacheline) \ | 725 | READ_MOSTLY_DATA(cacheline) \ |
713 | DATA_DATA \ | 726 | DATA_DATA \ |
714 | CONSTRUCTORS \ | 727 | CONSTRUCTORS \ |
715 | NOSAVE_DATA(nosave) \ | 728 | NOSAVE_DATA \ |
716 | PAGE_ALIGNED_DATA(pagealigned) \ | 729 | PAGE_ALIGNED_DATA(pagealigned) \ |
717 | } | 730 | } |
718 | 731 | ||
@@ -734,8 +747,10 @@ | |||
734 | INIT_RAM_FS \ | 747 | INIT_RAM_FS \ |
735 | } | 748 | } |
736 | 749 | ||
737 | #define BSS_SECTION(sbss_align, bss_align) \ | 750 | #define BSS_SECTION(sbss_align, bss_align, stop_align) \ |
738 | SBSS \ | 751 | . = ALIGN(sbss_align); \ |
752 | VMLINUX_SYMBOL(__bss_start) = .; \ | ||
753 | SBSS(sbss_align) \ | ||
739 | BSS(bss_align) \ | 754 | BSS(bss_align) \ |
740 | . = ALIGN(4); | 755 | . = ALIGN(stop_align); \ |
741 | 756 | VMLINUX_SYMBOL(__bss_stop) = .; | |
diff --git a/include/crypto/algapi.h b/include/crypto/algapi.h index 010545436efa..1ffb53f74d37 100644 --- a/include/crypto/algapi.h +++ b/include/crypto/algapi.h | |||
@@ -22,11 +22,9 @@ struct seq_file; | |||
22 | 22 | ||
23 | struct crypto_type { | 23 | struct crypto_type { |
24 | unsigned int (*ctxsize)(struct crypto_alg *alg, u32 type, u32 mask); | 24 | unsigned int (*ctxsize)(struct crypto_alg *alg, u32 type, u32 mask); |
25 | unsigned int (*extsize)(struct crypto_alg *alg, | 25 | unsigned int (*extsize)(struct crypto_alg *alg); |
26 | const struct crypto_type *frontend); | ||
27 | int (*init)(struct crypto_tfm *tfm, u32 type, u32 mask); | 26 | int (*init)(struct crypto_tfm *tfm, u32 type, u32 mask); |
28 | int (*init_tfm)(struct crypto_tfm *tfm, | 27 | int (*init_tfm)(struct crypto_tfm *tfm); |
29 | const struct crypto_type *frontend); | ||
30 | void (*show)(struct seq_file *m, struct crypto_alg *alg); | 28 | void (*show)(struct seq_file *m, struct crypto_alg *alg); |
31 | struct crypto_alg *(*lookup)(const char *name, u32 type, u32 mask); | 29 | struct crypto_alg *(*lookup)(const char *name, u32 type, u32 mask); |
32 | 30 | ||
@@ -52,6 +50,7 @@ struct crypto_template { | |||
52 | 50 | ||
53 | struct crypto_instance *(*alloc)(struct rtattr **tb); | 51 | struct crypto_instance *(*alloc)(struct rtattr **tb); |
54 | void (*free)(struct crypto_instance *inst); | 52 | void (*free)(struct crypto_instance *inst); |
53 | int (*create)(struct crypto_template *tmpl, struct rtattr **tb); | ||
55 | 54 | ||
56 | char name[CRYPTO_MAX_ALG_NAME]; | 55 | char name[CRYPTO_MAX_ALG_NAME]; |
57 | }; | 56 | }; |
@@ -60,6 +59,7 @@ struct crypto_spawn { | |||
60 | struct list_head list; | 59 | struct list_head list; |
61 | struct crypto_alg *alg; | 60 | struct crypto_alg *alg; |
62 | struct crypto_instance *inst; | 61 | struct crypto_instance *inst; |
62 | const struct crypto_type *frontend; | ||
63 | u32 mask; | 63 | u32 mask; |
64 | }; | 64 | }; |
65 | 65 | ||
@@ -114,11 +114,19 @@ int crypto_register_template(struct crypto_template *tmpl); | |||
114 | void crypto_unregister_template(struct crypto_template *tmpl); | 114 | void crypto_unregister_template(struct crypto_template *tmpl); |
115 | struct crypto_template *crypto_lookup_template(const char *name); | 115 | struct crypto_template *crypto_lookup_template(const char *name); |
116 | 116 | ||
117 | int crypto_register_instance(struct crypto_template *tmpl, | ||
118 | struct crypto_instance *inst); | ||
119 | |||
117 | int crypto_init_spawn(struct crypto_spawn *spawn, struct crypto_alg *alg, | 120 | int crypto_init_spawn(struct crypto_spawn *spawn, struct crypto_alg *alg, |
118 | struct crypto_instance *inst, u32 mask); | 121 | struct crypto_instance *inst, u32 mask); |
122 | int crypto_init_spawn2(struct crypto_spawn *spawn, struct crypto_alg *alg, | ||
123 | struct crypto_instance *inst, | ||
124 | const struct crypto_type *frontend); | ||
125 | |||
119 | void crypto_drop_spawn(struct crypto_spawn *spawn); | 126 | void crypto_drop_spawn(struct crypto_spawn *spawn); |
120 | struct crypto_tfm *crypto_spawn_tfm(struct crypto_spawn *spawn, u32 type, | 127 | struct crypto_tfm *crypto_spawn_tfm(struct crypto_spawn *spawn, u32 type, |
121 | u32 mask); | 128 | u32 mask); |
129 | void *crypto_spawn_tfm2(struct crypto_spawn *spawn); | ||
122 | 130 | ||
123 | static inline void crypto_set_spawn(struct crypto_spawn *spawn, | 131 | static inline void crypto_set_spawn(struct crypto_spawn *spawn, |
124 | struct crypto_instance *inst) | 132 | struct crypto_instance *inst) |
@@ -129,14 +137,26 @@ static inline void crypto_set_spawn(struct crypto_spawn *spawn, | |||
129 | struct crypto_attr_type *crypto_get_attr_type(struct rtattr **tb); | 137 | struct crypto_attr_type *crypto_get_attr_type(struct rtattr **tb); |
130 | int crypto_check_attr_type(struct rtattr **tb, u32 type); | 138 | int crypto_check_attr_type(struct rtattr **tb, u32 type); |
131 | const char *crypto_attr_alg_name(struct rtattr *rta); | 139 | const char *crypto_attr_alg_name(struct rtattr *rta); |
132 | struct crypto_alg *crypto_attr_alg(struct rtattr *rta, u32 type, u32 mask); | 140 | struct crypto_alg *crypto_attr_alg2(struct rtattr *rta, |
141 | const struct crypto_type *frontend, | ||
142 | u32 type, u32 mask); | ||
143 | |||
144 | static inline struct crypto_alg *crypto_attr_alg(struct rtattr *rta, | ||
145 | u32 type, u32 mask) | ||
146 | { | ||
147 | return crypto_attr_alg2(rta, NULL, type, mask); | ||
148 | } | ||
149 | |||
133 | int crypto_attr_u32(struct rtattr *rta, u32 *num); | 150 | int crypto_attr_u32(struct rtattr *rta, u32 *num); |
151 | void *crypto_alloc_instance2(const char *name, struct crypto_alg *alg, | ||
152 | unsigned int head); | ||
134 | struct crypto_instance *crypto_alloc_instance(const char *name, | 153 | struct crypto_instance *crypto_alloc_instance(const char *name, |
135 | struct crypto_alg *alg); | 154 | struct crypto_alg *alg); |
136 | 155 | ||
137 | void crypto_init_queue(struct crypto_queue *queue, unsigned int max_qlen); | 156 | void crypto_init_queue(struct crypto_queue *queue, unsigned int max_qlen); |
138 | int crypto_enqueue_request(struct crypto_queue *queue, | 157 | int crypto_enqueue_request(struct crypto_queue *queue, |
139 | struct crypto_async_request *request); | 158 | struct crypto_async_request *request); |
159 | void *__crypto_dequeue_request(struct crypto_queue *queue, unsigned int offset); | ||
140 | struct crypto_async_request *crypto_dequeue_request(struct crypto_queue *queue); | 160 | struct crypto_async_request *crypto_dequeue_request(struct crypto_queue *queue); |
141 | int crypto_tfm_in_queue(struct crypto_queue *queue, struct crypto_tfm *tfm); | 161 | int crypto_tfm_in_queue(struct crypto_queue *queue, struct crypto_tfm *tfm); |
142 | 162 | ||
@@ -156,12 +176,8 @@ int blkcipher_walk_virt_block(struct blkcipher_desc *desc, | |||
156 | 176 | ||
157 | static inline void *crypto_tfm_ctx_aligned(struct crypto_tfm *tfm) | 177 | static inline void *crypto_tfm_ctx_aligned(struct crypto_tfm *tfm) |
158 | { | 178 | { |
159 | unsigned long addr = (unsigned long)crypto_tfm_ctx(tfm); | 179 | return PTR_ALIGN(crypto_tfm_ctx(tfm), |
160 | unsigned long align = crypto_tfm_alg_alignmask(tfm); | 180 | crypto_tfm_alg_alignmask(tfm) + 1); |
161 | |||
162 | if (align <= crypto_tfm_ctx_alignment()) | ||
163 | align = 1; | ||
164 | return (void *)ALIGN(addr, align); | ||
165 | } | 181 | } |
166 | 182 | ||
167 | static inline struct crypto_instance *crypto_tfm_alg_instance( | 183 | static inline struct crypto_instance *crypto_tfm_alg_instance( |
diff --git a/include/crypto/cryptd.h b/include/crypto/cryptd.h index 55fa7bbdbc71..2f65a6e8ea4d 100644 --- a/include/crypto/cryptd.h +++ b/include/crypto/cryptd.h | |||
@@ -7,6 +7,7 @@ | |||
7 | 7 | ||
8 | #include <linux/crypto.h> | 8 | #include <linux/crypto.h> |
9 | #include <linux/kernel.h> | 9 | #include <linux/kernel.h> |
10 | #include <crypto/hash.h> | ||
10 | 11 | ||
11 | struct cryptd_ablkcipher { | 12 | struct cryptd_ablkcipher { |
12 | struct crypto_ablkcipher base; | 13 | struct crypto_ablkcipher base; |
@@ -24,4 +25,20 @@ struct cryptd_ablkcipher *cryptd_alloc_ablkcipher(const char *alg_name, | |||
24 | struct crypto_blkcipher *cryptd_ablkcipher_child(struct cryptd_ablkcipher *tfm); | 25 | struct crypto_blkcipher *cryptd_ablkcipher_child(struct cryptd_ablkcipher *tfm); |
25 | void cryptd_free_ablkcipher(struct cryptd_ablkcipher *tfm); | 26 | void cryptd_free_ablkcipher(struct cryptd_ablkcipher *tfm); |
26 | 27 | ||
28 | struct cryptd_ahash { | ||
29 | struct crypto_ahash base; | ||
30 | }; | ||
31 | |||
32 | static inline struct cryptd_ahash *__cryptd_ahash_cast( | ||
33 | struct crypto_ahash *tfm) | ||
34 | { | ||
35 | return (struct cryptd_ahash *)tfm; | ||
36 | } | ||
37 | |||
38 | /* alg_name should be algorithm to be cryptd-ed */ | ||
39 | struct cryptd_ahash *cryptd_alloc_ahash(const char *alg_name, | ||
40 | u32 type, u32 mask); | ||
41 | struct crypto_shash *cryptd_ahash_child(struct cryptd_ahash *tfm); | ||
42 | void cryptd_free_ahash(struct cryptd_ahash *tfm); | ||
43 | |||
27 | #endif | 44 | #endif |
diff --git a/include/crypto/hash.h b/include/crypto/hash.h index d56bb71617c3..26cb1eb16f4c 100644 --- a/include/crypto/hash.h +++ b/include/crypto/hash.h | |||
@@ -15,6 +15,42 @@ | |||
15 | 15 | ||
16 | #include <linux/crypto.h> | 16 | #include <linux/crypto.h> |
17 | 17 | ||
18 | struct crypto_ahash; | ||
19 | |||
20 | struct hash_alg_common { | ||
21 | unsigned int digestsize; | ||
22 | unsigned int statesize; | ||
23 | |||
24 | struct crypto_alg base; | ||
25 | }; | ||
26 | |||
27 | struct ahash_request { | ||
28 | struct crypto_async_request base; | ||
29 | |||
30 | unsigned int nbytes; | ||
31 | struct scatterlist *src; | ||
32 | u8 *result; | ||
33 | |||
34 | /* This field may only be used by the ahash API code. */ | ||
35 | void *priv; | ||
36 | |||
37 | void *__ctx[] CRYPTO_MINALIGN_ATTR; | ||
38 | }; | ||
39 | |||
40 | struct ahash_alg { | ||
41 | int (*init)(struct ahash_request *req); | ||
42 | int (*update)(struct ahash_request *req); | ||
43 | int (*final)(struct ahash_request *req); | ||
44 | int (*finup)(struct ahash_request *req); | ||
45 | int (*digest)(struct ahash_request *req); | ||
46 | int (*export)(struct ahash_request *req, void *out); | ||
47 | int (*import)(struct ahash_request *req, const void *in); | ||
48 | int (*setkey)(struct crypto_ahash *tfm, const u8 *key, | ||
49 | unsigned int keylen); | ||
50 | |||
51 | struct hash_alg_common halg; | ||
52 | }; | ||
53 | |||
18 | struct shash_desc { | 54 | struct shash_desc { |
19 | struct crypto_shash *tfm; | 55 | struct crypto_shash *tfm; |
20 | u32 flags; | 56 | u32 flags; |
@@ -24,7 +60,6 @@ struct shash_desc { | |||
24 | 60 | ||
25 | struct shash_alg { | 61 | struct shash_alg { |
26 | int (*init)(struct shash_desc *desc); | 62 | int (*init)(struct shash_desc *desc); |
27 | int (*reinit)(struct shash_desc *desc); | ||
28 | int (*update)(struct shash_desc *desc, const u8 *data, | 63 | int (*update)(struct shash_desc *desc, const u8 *data, |
29 | unsigned int len); | 64 | unsigned int len); |
30 | int (*final)(struct shash_desc *desc, u8 *out); | 65 | int (*final)(struct shash_desc *desc, u8 *out); |
@@ -32,38 +67,48 @@ struct shash_alg { | |||
32 | unsigned int len, u8 *out); | 67 | unsigned int len, u8 *out); |
33 | int (*digest)(struct shash_desc *desc, const u8 *data, | 68 | int (*digest)(struct shash_desc *desc, const u8 *data, |
34 | unsigned int len, u8 *out); | 69 | unsigned int len, u8 *out); |
70 | int (*export)(struct shash_desc *desc, void *out); | ||
71 | int (*import)(struct shash_desc *desc, const void *in); | ||
35 | int (*setkey)(struct crypto_shash *tfm, const u8 *key, | 72 | int (*setkey)(struct crypto_shash *tfm, const u8 *key, |
36 | unsigned int keylen); | 73 | unsigned int keylen); |
37 | 74 | ||
38 | unsigned int descsize; | 75 | unsigned int descsize; |
39 | unsigned int digestsize; | 76 | |
77 | /* These fields must match hash_alg_common. */ | ||
78 | unsigned int digestsize | ||
79 | __attribute__ ((aligned(__alignof__(struct hash_alg_common)))); | ||
80 | unsigned int statesize; | ||
40 | 81 | ||
41 | struct crypto_alg base; | 82 | struct crypto_alg base; |
42 | }; | 83 | }; |
43 | 84 | ||
44 | struct crypto_ahash { | 85 | struct crypto_ahash { |
86 | int (*init)(struct ahash_request *req); | ||
87 | int (*update)(struct ahash_request *req); | ||
88 | int (*final)(struct ahash_request *req); | ||
89 | int (*finup)(struct ahash_request *req); | ||
90 | int (*digest)(struct ahash_request *req); | ||
91 | int (*export)(struct ahash_request *req, void *out); | ||
92 | int (*import)(struct ahash_request *req, const void *in); | ||
93 | int (*setkey)(struct crypto_ahash *tfm, const u8 *key, | ||
94 | unsigned int keylen); | ||
95 | |||
96 | unsigned int reqsize; | ||
45 | struct crypto_tfm base; | 97 | struct crypto_tfm base; |
46 | }; | 98 | }; |
47 | 99 | ||
48 | struct crypto_shash { | 100 | struct crypto_shash { |
101 | unsigned int descsize; | ||
49 | struct crypto_tfm base; | 102 | struct crypto_tfm base; |
50 | }; | 103 | }; |
51 | 104 | ||
52 | static inline struct crypto_ahash *__crypto_ahash_cast(struct crypto_tfm *tfm) | 105 | static inline struct crypto_ahash *__crypto_ahash_cast(struct crypto_tfm *tfm) |
53 | { | 106 | { |
54 | return (struct crypto_ahash *)tfm; | 107 | return container_of(tfm, struct crypto_ahash, base); |
55 | } | 108 | } |
56 | 109 | ||
57 | static inline struct crypto_ahash *crypto_alloc_ahash(const char *alg_name, | 110 | struct crypto_ahash *crypto_alloc_ahash(const char *alg_name, u32 type, |
58 | u32 type, u32 mask) | 111 | u32 mask); |
59 | { | ||
60 | type &= ~CRYPTO_ALG_TYPE_MASK; | ||
61 | mask &= ~CRYPTO_ALG_TYPE_MASK; | ||
62 | type |= CRYPTO_ALG_TYPE_AHASH; | ||
63 | mask |= CRYPTO_ALG_TYPE_AHASH_MASK; | ||
64 | |||
65 | return __crypto_ahash_cast(crypto_alloc_base(alg_name, type, mask)); | ||
66 | } | ||
67 | 112 | ||
68 | static inline struct crypto_tfm *crypto_ahash_tfm(struct crypto_ahash *tfm) | 113 | static inline struct crypto_tfm *crypto_ahash_tfm(struct crypto_ahash *tfm) |
69 | { | 114 | { |
@@ -72,7 +117,7 @@ static inline struct crypto_tfm *crypto_ahash_tfm(struct crypto_ahash *tfm) | |||
72 | 117 | ||
73 | static inline void crypto_free_ahash(struct crypto_ahash *tfm) | 118 | static inline void crypto_free_ahash(struct crypto_ahash *tfm) |
74 | { | 119 | { |
75 | crypto_free_tfm(crypto_ahash_tfm(tfm)); | 120 | crypto_destroy_tfm(tfm, crypto_ahash_tfm(tfm)); |
76 | } | 121 | } |
77 | 122 | ||
78 | static inline unsigned int crypto_ahash_alignmask( | 123 | static inline unsigned int crypto_ahash_alignmask( |
@@ -81,14 +126,26 @@ static inline unsigned int crypto_ahash_alignmask( | |||
81 | return crypto_tfm_alg_alignmask(crypto_ahash_tfm(tfm)); | 126 | return crypto_tfm_alg_alignmask(crypto_ahash_tfm(tfm)); |
82 | } | 127 | } |
83 | 128 | ||
84 | static inline struct ahash_tfm *crypto_ahash_crt(struct crypto_ahash *tfm) | 129 | static inline struct hash_alg_common *__crypto_hash_alg_common( |
130 | struct crypto_alg *alg) | ||
131 | { | ||
132 | return container_of(alg, struct hash_alg_common, base); | ||
133 | } | ||
134 | |||
135 | static inline struct hash_alg_common *crypto_hash_alg_common( | ||
136 | struct crypto_ahash *tfm) | ||
85 | { | 137 | { |
86 | return &crypto_ahash_tfm(tfm)->crt_ahash; | 138 | return __crypto_hash_alg_common(crypto_ahash_tfm(tfm)->__crt_alg); |
87 | } | 139 | } |
88 | 140 | ||
89 | static inline unsigned int crypto_ahash_digestsize(struct crypto_ahash *tfm) | 141 | static inline unsigned int crypto_ahash_digestsize(struct crypto_ahash *tfm) |
90 | { | 142 | { |
91 | return crypto_ahash_crt(tfm)->digestsize; | 143 | return crypto_hash_alg_common(tfm)->digestsize; |
144 | } | ||
145 | |||
146 | static inline unsigned int crypto_ahash_statesize(struct crypto_ahash *tfm) | ||
147 | { | ||
148 | return crypto_hash_alg_common(tfm)->statesize; | ||
92 | } | 149 | } |
93 | 150 | ||
94 | static inline u32 crypto_ahash_get_flags(struct crypto_ahash *tfm) | 151 | static inline u32 crypto_ahash_get_flags(struct crypto_ahash *tfm) |
@@ -114,7 +171,7 @@ static inline struct crypto_ahash *crypto_ahash_reqtfm( | |||
114 | 171 | ||
115 | static inline unsigned int crypto_ahash_reqsize(struct crypto_ahash *tfm) | 172 | static inline unsigned int crypto_ahash_reqsize(struct crypto_ahash *tfm) |
116 | { | 173 | { |
117 | return crypto_ahash_crt(tfm)->reqsize; | 174 | return tfm->reqsize; |
118 | } | 175 | } |
119 | 176 | ||
120 | static inline void *ahash_request_ctx(struct ahash_request *req) | 177 | static inline void *ahash_request_ctx(struct ahash_request *req) |
@@ -122,44 +179,30 @@ static inline void *ahash_request_ctx(struct ahash_request *req) | |||
122 | return req->__ctx; | 179 | return req->__ctx; |
123 | } | 180 | } |
124 | 181 | ||
125 | static inline int crypto_ahash_setkey(struct crypto_ahash *tfm, | 182 | int crypto_ahash_setkey(struct crypto_ahash *tfm, const u8 *key, |
126 | const u8 *key, unsigned int keylen) | 183 | unsigned int keylen); |
127 | { | 184 | int crypto_ahash_finup(struct ahash_request *req); |
128 | struct ahash_tfm *crt = crypto_ahash_crt(tfm); | 185 | int crypto_ahash_final(struct ahash_request *req); |
129 | 186 | int crypto_ahash_digest(struct ahash_request *req); | |
130 | return crt->setkey(tfm, key, keylen); | ||
131 | } | ||
132 | 187 | ||
133 | static inline int crypto_ahash_digest(struct ahash_request *req) | 188 | static inline int crypto_ahash_export(struct ahash_request *req, void *out) |
134 | { | 189 | { |
135 | struct ahash_tfm *crt = crypto_ahash_crt(crypto_ahash_reqtfm(req)); | 190 | return crypto_ahash_reqtfm(req)->export(req, out); |
136 | return crt->digest(req); | ||
137 | } | 191 | } |
138 | 192 | ||
139 | static inline void crypto_ahash_export(struct ahash_request *req, u8 *out) | 193 | static inline int crypto_ahash_import(struct ahash_request *req, const void *in) |
140 | { | 194 | { |
141 | memcpy(out, ahash_request_ctx(req), | 195 | return crypto_ahash_reqtfm(req)->import(req, in); |
142 | crypto_ahash_reqsize(crypto_ahash_reqtfm(req))); | ||
143 | } | 196 | } |
144 | 197 | ||
145 | int crypto_ahash_import(struct ahash_request *req, const u8 *in); | ||
146 | |||
147 | static inline int crypto_ahash_init(struct ahash_request *req) | 198 | static inline int crypto_ahash_init(struct ahash_request *req) |
148 | { | 199 | { |
149 | struct ahash_tfm *crt = crypto_ahash_crt(crypto_ahash_reqtfm(req)); | 200 | return crypto_ahash_reqtfm(req)->init(req); |
150 | return crt->init(req); | ||
151 | } | 201 | } |
152 | 202 | ||
153 | static inline int crypto_ahash_update(struct ahash_request *req) | 203 | static inline int crypto_ahash_update(struct ahash_request *req) |
154 | { | 204 | { |
155 | struct ahash_tfm *crt = crypto_ahash_crt(crypto_ahash_reqtfm(req)); | 205 | return crypto_ahash_reqtfm(req)->update(req); |
156 | return crt->update(req); | ||
157 | } | ||
158 | |||
159 | static inline int crypto_ahash_final(struct ahash_request *req) | ||
160 | { | ||
161 | struct ahash_tfm *crt = crypto_ahash_crt(crypto_ahash_reqtfm(req)); | ||
162 | return crt->final(req); | ||
163 | } | 206 | } |
164 | 207 | ||
165 | static inline void ahash_request_set_tfm(struct ahash_request *req, | 208 | static inline void ahash_request_set_tfm(struct ahash_request *req, |
@@ -184,7 +227,7 @@ static inline struct ahash_request *ahash_request_alloc( | |||
184 | 227 | ||
185 | static inline void ahash_request_free(struct ahash_request *req) | 228 | static inline void ahash_request_free(struct ahash_request *req) |
186 | { | 229 | { |
187 | kfree(req); | 230 | kzfree(req); |
188 | } | 231 | } |
189 | 232 | ||
190 | static inline struct ahash_request *ahash_request_cast( | 233 | static inline struct ahash_request *ahash_request_cast( |
@@ -251,6 +294,11 @@ static inline unsigned int crypto_shash_digestsize(struct crypto_shash *tfm) | |||
251 | return crypto_shash_alg(tfm)->digestsize; | 294 | return crypto_shash_alg(tfm)->digestsize; |
252 | } | 295 | } |
253 | 296 | ||
297 | static inline unsigned int crypto_shash_statesize(struct crypto_shash *tfm) | ||
298 | { | ||
299 | return crypto_shash_alg(tfm)->statesize; | ||
300 | } | ||
301 | |||
254 | static inline u32 crypto_shash_get_flags(struct crypto_shash *tfm) | 302 | static inline u32 crypto_shash_get_flags(struct crypto_shash *tfm) |
255 | { | 303 | { |
256 | return crypto_tfm_get_flags(crypto_shash_tfm(tfm)); | 304 | return crypto_tfm_get_flags(crypto_shash_tfm(tfm)); |
@@ -268,7 +316,7 @@ static inline void crypto_shash_clear_flags(struct crypto_shash *tfm, u32 flags) | |||
268 | 316 | ||
269 | static inline unsigned int crypto_shash_descsize(struct crypto_shash *tfm) | 317 | static inline unsigned int crypto_shash_descsize(struct crypto_shash *tfm) |
270 | { | 318 | { |
271 | return crypto_shash_alg(tfm)->descsize; | 319 | return tfm->descsize; |
272 | } | 320 | } |
273 | 321 | ||
274 | static inline void *shash_desc_ctx(struct shash_desc *desc) | 322 | static inline void *shash_desc_ctx(struct shash_desc *desc) |
@@ -281,12 +329,15 @@ int crypto_shash_setkey(struct crypto_shash *tfm, const u8 *key, | |||
281 | int crypto_shash_digest(struct shash_desc *desc, const u8 *data, | 329 | int crypto_shash_digest(struct shash_desc *desc, const u8 *data, |
282 | unsigned int len, u8 *out); | 330 | unsigned int len, u8 *out); |
283 | 331 | ||
284 | static inline void crypto_shash_export(struct shash_desc *desc, u8 *out) | 332 | static inline int crypto_shash_export(struct shash_desc *desc, void *out) |
285 | { | 333 | { |
286 | memcpy(out, shash_desc_ctx(desc), crypto_shash_descsize(desc->tfm)); | 334 | return crypto_shash_alg(desc->tfm)->export(desc, out); |
287 | } | 335 | } |
288 | 336 | ||
289 | int crypto_shash_import(struct shash_desc *desc, const u8 *in); | 337 | static inline int crypto_shash_import(struct shash_desc *desc, const void *in) |
338 | { | ||
339 | return crypto_shash_alg(desc->tfm)->import(desc, in); | ||
340 | } | ||
290 | 341 | ||
291 | static inline int crypto_shash_init(struct shash_desc *desc) | 342 | static inline int crypto_shash_init(struct shash_desc *desc) |
292 | { | 343 | { |
diff --git a/include/crypto/internal/hash.h b/include/crypto/internal/hash.h index 82b70564bcab..5bfad8c80595 100644 --- a/include/crypto/internal/hash.h +++ b/include/crypto/internal/hash.h | |||
@@ -34,6 +34,22 @@ struct crypto_hash_walk { | |||
34 | unsigned int flags; | 34 | unsigned int flags; |
35 | }; | 35 | }; |
36 | 36 | ||
37 | struct ahash_instance { | ||
38 | struct ahash_alg alg; | ||
39 | }; | ||
40 | |||
41 | struct shash_instance { | ||
42 | struct shash_alg alg; | ||
43 | }; | ||
44 | |||
45 | struct crypto_ahash_spawn { | ||
46 | struct crypto_spawn base; | ||
47 | }; | ||
48 | |||
49 | struct crypto_shash_spawn { | ||
50 | struct crypto_spawn base; | ||
51 | }; | ||
52 | |||
37 | extern const struct crypto_type crypto_ahash_type; | 53 | extern const struct crypto_type crypto_ahash_type; |
38 | 54 | ||
39 | int crypto_hash_walk_done(struct crypto_hash_walk *walk, int err); | 55 | int crypto_hash_walk_done(struct crypto_hash_walk *walk, int err); |
@@ -43,18 +59,100 @@ int crypto_hash_walk_first_compat(struct hash_desc *hdesc, | |||
43 | struct crypto_hash_walk *walk, | 59 | struct crypto_hash_walk *walk, |
44 | struct scatterlist *sg, unsigned int len); | 60 | struct scatterlist *sg, unsigned int len); |
45 | 61 | ||
62 | static inline int crypto_hash_walk_last(struct crypto_hash_walk *walk) | ||
63 | { | ||
64 | return !(walk->entrylen | walk->total); | ||
65 | } | ||
66 | |||
67 | int crypto_register_ahash(struct ahash_alg *alg); | ||
68 | int crypto_unregister_ahash(struct ahash_alg *alg); | ||
69 | int ahash_register_instance(struct crypto_template *tmpl, | ||
70 | struct ahash_instance *inst); | ||
71 | void ahash_free_instance(struct crypto_instance *inst); | ||
72 | |||
73 | int crypto_init_ahash_spawn(struct crypto_ahash_spawn *spawn, | ||
74 | struct hash_alg_common *alg, | ||
75 | struct crypto_instance *inst); | ||
76 | |||
77 | static inline void crypto_drop_ahash(struct crypto_ahash_spawn *spawn) | ||
78 | { | ||
79 | crypto_drop_spawn(&spawn->base); | ||
80 | } | ||
81 | |||
82 | struct hash_alg_common *ahash_attr_alg(struct rtattr *rta, u32 type, u32 mask); | ||
83 | |||
46 | int crypto_register_shash(struct shash_alg *alg); | 84 | int crypto_register_shash(struct shash_alg *alg); |
47 | int crypto_unregister_shash(struct shash_alg *alg); | 85 | int crypto_unregister_shash(struct shash_alg *alg); |
86 | int shash_register_instance(struct crypto_template *tmpl, | ||
87 | struct shash_instance *inst); | ||
88 | void shash_free_instance(struct crypto_instance *inst); | ||
89 | |||
90 | int crypto_init_shash_spawn(struct crypto_shash_spawn *spawn, | ||
91 | struct shash_alg *alg, | ||
92 | struct crypto_instance *inst); | ||
93 | |||
94 | static inline void crypto_drop_shash(struct crypto_shash_spawn *spawn) | ||
95 | { | ||
96 | crypto_drop_spawn(&spawn->base); | ||
97 | } | ||
98 | |||
99 | struct shash_alg *shash_attr_alg(struct rtattr *rta, u32 type, u32 mask); | ||
100 | |||
101 | int shash_ahash_update(struct ahash_request *req, struct shash_desc *desc); | ||
102 | int shash_ahash_finup(struct ahash_request *req, struct shash_desc *desc); | ||
103 | int shash_ahash_digest(struct ahash_request *req, struct shash_desc *desc); | ||
104 | |||
105 | int crypto_init_shash_ops_async(struct crypto_tfm *tfm); | ||
48 | 106 | ||
49 | static inline void *crypto_ahash_ctx(struct crypto_ahash *tfm) | 107 | static inline void *crypto_ahash_ctx(struct crypto_ahash *tfm) |
50 | { | 108 | { |
51 | return crypto_tfm_ctx(&tfm->base); | 109 | return crypto_tfm_ctx(crypto_ahash_tfm(tfm)); |
110 | } | ||
111 | |||
112 | static inline struct ahash_alg *__crypto_ahash_alg(struct crypto_alg *alg) | ||
113 | { | ||
114 | return container_of(__crypto_hash_alg_common(alg), struct ahash_alg, | ||
115 | halg); | ||
116 | } | ||
117 | |||
118 | static inline void crypto_ahash_set_reqsize(struct crypto_ahash *tfm, | ||
119 | unsigned int reqsize) | ||
120 | { | ||
121 | tfm->reqsize = reqsize; | ||
122 | } | ||
123 | |||
124 | static inline struct crypto_instance *ahash_crypto_instance( | ||
125 | struct ahash_instance *inst) | ||
126 | { | ||
127 | return container_of(&inst->alg.halg.base, struct crypto_instance, alg); | ||
52 | } | 128 | } |
53 | 129 | ||
54 | static inline struct ahash_alg *crypto_ahash_alg( | 130 | static inline struct ahash_instance *ahash_instance( |
55 | struct crypto_ahash *tfm) | 131 | struct crypto_instance *inst) |
56 | { | 132 | { |
57 | return &crypto_ahash_tfm(tfm)->__crt_alg->cra_ahash; | 133 | return container_of(&inst->alg, struct ahash_instance, alg.halg.base); |
134 | } | ||
135 | |||
136 | static inline void *ahash_instance_ctx(struct ahash_instance *inst) | ||
137 | { | ||
138 | return crypto_instance_ctx(ahash_crypto_instance(inst)); | ||
139 | } | ||
140 | |||
141 | static inline unsigned int ahash_instance_headroom(void) | ||
142 | { | ||
143 | return sizeof(struct ahash_alg) - sizeof(struct crypto_alg); | ||
144 | } | ||
145 | |||
146 | static inline struct ahash_instance *ahash_alloc_instance( | ||
147 | const char *name, struct crypto_alg *alg) | ||
148 | { | ||
149 | return crypto_alloc_instance2(name, alg, ahash_instance_headroom()); | ||
150 | } | ||
151 | |||
152 | static inline struct crypto_ahash *crypto_spawn_ahash( | ||
153 | struct crypto_ahash_spawn *spawn) | ||
154 | { | ||
155 | return crypto_spawn_tfm2(&spawn->base); | ||
58 | } | 156 | } |
59 | 157 | ||
60 | static inline int ahash_enqueue_request(struct crypto_queue *queue, | 158 | static inline int ahash_enqueue_request(struct crypto_queue *queue, |
@@ -80,5 +178,46 @@ static inline void *crypto_shash_ctx(struct crypto_shash *tfm) | |||
80 | return crypto_tfm_ctx(&tfm->base); | 178 | return crypto_tfm_ctx(&tfm->base); |
81 | } | 179 | } |
82 | 180 | ||
181 | static inline struct crypto_instance *shash_crypto_instance( | ||
182 | struct shash_instance *inst) | ||
183 | { | ||
184 | return container_of(&inst->alg.base, struct crypto_instance, alg); | ||
185 | } | ||
186 | |||
187 | static inline struct shash_instance *shash_instance( | ||
188 | struct crypto_instance *inst) | ||
189 | { | ||
190 | return container_of(__crypto_shash_alg(&inst->alg), | ||
191 | struct shash_instance, alg); | ||
192 | } | ||
193 | |||
194 | static inline void *shash_instance_ctx(struct shash_instance *inst) | ||
195 | { | ||
196 | return crypto_instance_ctx(shash_crypto_instance(inst)); | ||
197 | } | ||
198 | |||
199 | static inline struct shash_instance *shash_alloc_instance( | ||
200 | const char *name, struct crypto_alg *alg) | ||
201 | { | ||
202 | return crypto_alloc_instance2(name, alg, | ||
203 | sizeof(struct shash_alg) - sizeof(*alg)); | ||
204 | } | ||
205 | |||
206 | static inline struct crypto_shash *crypto_spawn_shash( | ||
207 | struct crypto_shash_spawn *spawn) | ||
208 | { | ||
209 | return crypto_spawn_tfm2(&spawn->base); | ||
210 | } | ||
211 | |||
212 | static inline void *crypto_shash_ctx_aligned(struct crypto_shash *tfm) | ||
213 | { | ||
214 | return crypto_tfm_ctx_aligned(&tfm->base); | ||
215 | } | ||
216 | |||
217 | static inline struct crypto_shash *__crypto_shash_cast(struct crypto_tfm *tfm) | ||
218 | { | ||
219 | return container_of(tfm, struct crypto_shash, base); | ||
220 | } | ||
221 | |||
83 | #endif /* _CRYPTO_INTERNAL_HASH_H */ | 222 | #endif /* _CRYPTO_INTERNAL_HASH_H */ |
84 | 223 | ||
diff --git a/include/crypto/internal/skcipher.h b/include/crypto/internal/skcipher.h index 2ba42cd7d6aa..3a748a6bf772 100644 --- a/include/crypto/internal/skcipher.h +++ b/include/crypto/internal/skcipher.h | |||
@@ -79,8 +79,8 @@ static inline int skcipher_enqueue_givcrypt( | |||
79 | static inline struct skcipher_givcrypt_request *skcipher_dequeue_givcrypt( | 79 | static inline struct skcipher_givcrypt_request *skcipher_dequeue_givcrypt( |
80 | struct crypto_queue *queue) | 80 | struct crypto_queue *queue) |
81 | { | 81 | { |
82 | return container_of(ablkcipher_dequeue_request(queue), | 82 | return __crypto_dequeue_request( |
83 | struct skcipher_givcrypt_request, creq); | 83 | queue, offsetof(struct skcipher_givcrypt_request, creq.base)); |
84 | } | 84 | } |
85 | 85 | ||
86 | static inline void *skcipher_givcrypt_reqctx( | 86 | static inline void *skcipher_givcrypt_reqctx( |
diff --git a/include/crypto/sha.h b/include/crypto/sha.h index c0ccc2b1a2d8..069e85ba97e1 100644 --- a/include/crypto/sha.h +++ b/include/crypto/sha.h | |||
@@ -5,6 +5,8 @@ | |||
5 | #ifndef _CRYPTO_SHA_H | 5 | #ifndef _CRYPTO_SHA_H |
6 | #define _CRYPTO_SHA_H | 6 | #define _CRYPTO_SHA_H |
7 | 7 | ||
8 | #include <linux/types.h> | ||
9 | |||
8 | #define SHA1_DIGEST_SIZE 20 | 10 | #define SHA1_DIGEST_SIZE 20 |
9 | #define SHA1_BLOCK_SIZE 64 | 11 | #define SHA1_BLOCK_SIZE 64 |
10 | 12 | ||
@@ -62,4 +64,22 @@ | |||
62 | #define SHA512_H6 0x1f83d9abfb41bd6bULL | 64 | #define SHA512_H6 0x1f83d9abfb41bd6bULL |
63 | #define SHA512_H7 0x5be0cd19137e2179ULL | 65 | #define SHA512_H7 0x5be0cd19137e2179ULL |
64 | 66 | ||
67 | struct sha1_state { | ||
68 | u64 count; | ||
69 | u32 state[SHA1_DIGEST_SIZE / 4]; | ||
70 | u8 buffer[SHA1_BLOCK_SIZE]; | ||
71 | }; | ||
72 | |||
73 | struct sha256_state { | ||
74 | u64 count; | ||
75 | u32 state[SHA256_DIGEST_SIZE / 4]; | ||
76 | u8 buf[SHA256_BLOCK_SIZE]; | ||
77 | }; | ||
78 | |||
79 | struct sha512_state { | ||
80 | u64 count[2]; | ||
81 | u64 state[SHA512_DIGEST_SIZE / 8]; | ||
82 | u8 buf[SHA512_BLOCK_SIZE]; | ||
83 | }; | ||
84 | |||
65 | #endif | 85 | #endif |
diff --git a/include/crypto/vmac.h b/include/crypto/vmac.h new file mode 100644 index 000000000000..c4467c55df1e --- /dev/null +++ b/include/crypto/vmac.h | |||
@@ -0,0 +1,61 @@ | |||
1 | /* | ||
2 | * Modified to interface to the Linux kernel | ||
3 | * Copyright (c) 2009, Intel Corporation. | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify it | ||
6 | * under the terms and conditions of the GNU General Public License, | ||
7 | * version 2, as published by the Free Software Foundation. | ||
8 | * | ||
9 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
12 | * more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License along with | ||
15 | * this program; if not, write to the Free Software Foundation, Inc., 59 Temple | ||
16 | * Place - Suite 330, Boston, MA 02111-1307 USA. | ||
17 | */ | ||
18 | |||
19 | #ifndef __CRYPTO_VMAC_H | ||
20 | #define __CRYPTO_VMAC_H | ||
21 | |||
22 | /* -------------------------------------------------------------------------- | ||
23 | * VMAC and VHASH Implementation by Ted Krovetz (tdk@acm.org) and Wei Dai. | ||
24 | * This implementation is herby placed in the public domain. | ||
25 | * The authors offers no warranty. Use at your own risk. | ||
26 | * Please send bug reports to the authors. | ||
27 | * Last modified: 17 APR 08, 1700 PDT | ||
28 | * ----------------------------------------------------------------------- */ | ||
29 | |||
30 | /* | ||
31 | * User definable settings. | ||
32 | */ | ||
33 | #define VMAC_TAG_LEN 64 | ||
34 | #define VMAC_KEY_SIZE 128/* Must be 128, 192 or 256 */ | ||
35 | #define VMAC_KEY_LEN (VMAC_KEY_SIZE/8) | ||
36 | #define VMAC_NHBYTES 128/* Must 2^i for any 3 < i < 13 Standard = 128*/ | ||
37 | |||
38 | /* | ||
39 | * This implementation uses u32 and u64 as names for unsigned 32- | ||
40 | * and 64-bit integer types. These are defined in C99 stdint.h. The | ||
41 | * following may need adaptation if you are not running a C99 or | ||
42 | * Microsoft C environment. | ||
43 | */ | ||
44 | struct vmac_ctx { | ||
45 | u64 nhkey[(VMAC_NHBYTES/8)+2*(VMAC_TAG_LEN/64-1)]; | ||
46 | u64 polykey[2*VMAC_TAG_LEN/64]; | ||
47 | u64 l3key[2*VMAC_TAG_LEN/64]; | ||
48 | u64 polytmp[2*VMAC_TAG_LEN/64]; | ||
49 | u64 cached_nonce[2]; | ||
50 | u64 cached_aes[2]; | ||
51 | int first_block_processed; | ||
52 | }; | ||
53 | |||
54 | typedef u64 vmac_t; | ||
55 | |||
56 | struct vmac_ctx_t { | ||
57 | struct crypto_cipher *child; | ||
58 | struct vmac_ctx __vmac_ctx; | ||
59 | }; | ||
60 | |||
61 | #endif /* __CRYPTO_VMAC_H */ | ||
diff --git a/include/drm/drmP.h b/include/drm/drmP.h index 45b67d9c39c1..c8e64bbadbcf 100644 --- a/include/drm/drmP.h +++ b/include/drm/drmP.h | |||
@@ -88,7 +88,37 @@ struct drm_device; | |||
88 | #define DRM_UT_CORE 0x01 | 88 | #define DRM_UT_CORE 0x01 |
89 | #define DRM_UT_DRIVER 0x02 | 89 | #define DRM_UT_DRIVER 0x02 |
90 | #define DRM_UT_KMS 0x04 | 90 | #define DRM_UT_KMS 0x04 |
91 | #define DRM_UT_MODE 0x08 | 91 | /* |
92 | * Three debug levels are defined. | ||
93 | * drm_core, drm_driver, drm_kms | ||
94 | * drm_core level can be used in the generic drm code. For example: | ||
95 | * drm_ioctl, drm_mm, drm_memory | ||
96 | * The macro definiton of DRM_DEBUG is used. | ||
97 | * DRM_DEBUG(fmt, args...) | ||
98 | * The debug info by using the DRM_DEBUG can be obtained by adding | ||
99 | * the boot option of "drm.debug=1". | ||
100 | * | ||
101 | * drm_driver level can be used in the specific drm driver. It is used | ||
102 | * to add the debug info related with the drm driver. For example: | ||
103 | * i915_drv, i915_dma, i915_gem, radeon_drv, | ||
104 | * The macro definition of DRM_DEBUG_DRIVER can be used. | ||
105 | * DRM_DEBUG_DRIVER(fmt, args...) | ||
106 | * The debug info by using the DRM_DEBUG_DRIVER can be obtained by | ||
107 | * adding the boot option of "drm.debug=0x02" | ||
108 | * | ||
109 | * drm_kms level can be used in the KMS code related with specific drm driver. | ||
110 | * It is used to add the debug info related with KMS mode. For example: | ||
111 | * the connector/crtc , | ||
112 | * The macro definition of DRM_DEBUG_KMS can be used. | ||
113 | * DRM_DEBUG_KMS(fmt, args...) | ||
114 | * The debug info by using the DRM_DEBUG_KMS can be obtained by | ||
115 | * adding the boot option of "drm.debug=0x04" | ||
116 | * | ||
117 | * If we add the boot option of "drm.debug=0x06", we can get the debug info by | ||
118 | * using the DRM_DEBUG_KMS and DRM_DEBUG_DRIVER. | ||
119 | * If we add the boot option of "drm.debug=0x05", we can get the debug info by | ||
120 | * using the DRM_DEBUG_KMS and DRM_DEBUG. | ||
121 | */ | ||
92 | 122 | ||
93 | extern void drm_ut_debug_printk(unsigned int request_level, | 123 | extern void drm_ut_debug_printk(unsigned int request_level, |
94 | const char *prefix, | 124 | const char *prefix, |
@@ -174,19 +204,14 @@ extern void drm_ut_debug_printk(unsigned int request_level, | |||
174 | __func__, fmt, ##args); \ | 204 | __func__, fmt, ##args); \ |
175 | } while (0) | 205 | } while (0) |
176 | 206 | ||
177 | #define DRM_DEBUG_DRIVER(prefix, fmt, args...) \ | 207 | #define DRM_DEBUG_DRIVER(fmt, args...) \ |
178 | do { \ | 208 | do { \ |
179 | drm_ut_debug_printk(DRM_UT_DRIVER, prefix, \ | 209 | drm_ut_debug_printk(DRM_UT_DRIVER, DRM_NAME, \ |
180 | __func__, fmt, ##args); \ | 210 | __func__, fmt, ##args); \ |
181 | } while (0) | 211 | } while (0) |
182 | #define DRM_DEBUG_KMS(prefix, fmt, args...) \ | 212 | #define DRM_DEBUG_KMS(fmt, args...) \ |
183 | do { \ | 213 | do { \ |
184 | drm_ut_debug_printk(DRM_UT_KMS, prefix, \ | 214 | drm_ut_debug_printk(DRM_UT_KMS, DRM_NAME, \ |
185 | __func__, fmt, ##args); \ | ||
186 | } while (0) | ||
187 | #define DRM_DEBUG_MODE(prefix, fmt, args...) \ | ||
188 | do { \ | ||
189 | drm_ut_debug_printk(DRM_UT_MODE, prefix, \ | ||
190 | __func__, fmt, ##args); \ | 215 | __func__, fmt, ##args); \ |
191 | } while (0) | 216 | } while (0) |
192 | #define DRM_LOG(fmt, args...) \ | 217 | #define DRM_LOG(fmt, args...) \ |
@@ -210,9 +235,8 @@ extern void drm_ut_debug_printk(unsigned int request_level, | |||
210 | NULL, fmt, ##args); \ | 235 | NULL, fmt, ##args); \ |
211 | } while (0) | 236 | } while (0) |
212 | #else | 237 | #else |
213 | #define DRM_DEBUG_DRIVER(prefix, fmt, args...) do { } while (0) | 238 | #define DRM_DEBUG_DRIVER(fmt, args...) do { } while (0) |
214 | #define DRM_DEBUG_KMS(prefix, fmt, args...) do { } while (0) | 239 | #define DRM_DEBUG_KMS(fmt, args...) do { } while (0) |
215 | #define DRM_DEBUG_MODE(prefix, fmt, args...) do { } while (0) | ||
216 | #define DRM_DEBUG(fmt, arg...) do { } while (0) | 240 | #define DRM_DEBUG(fmt, arg...) do { } while (0) |
217 | #define DRM_LOG(fmt, arg...) do { } while (0) | 241 | #define DRM_LOG(fmt, arg...) do { } while (0) |
218 | #define DRM_LOG_KMS(fmt, args...) do { } while (0) | 242 | #define DRM_LOG_KMS(fmt, args...) do { } while (0) |
@@ -786,6 +810,9 @@ struct drm_driver { | |||
786 | int (*gem_init_object) (struct drm_gem_object *obj); | 810 | int (*gem_init_object) (struct drm_gem_object *obj); |
787 | void (*gem_free_object) (struct drm_gem_object *obj); | 811 | void (*gem_free_object) (struct drm_gem_object *obj); |
788 | 812 | ||
813 | /* vga arb irq handler */ | ||
814 | void (*vgaarb_irq)(struct drm_device *dev, bool state); | ||
815 | |||
789 | /* Driver private ops for this object */ | 816 | /* Driver private ops for this object */ |
790 | struct vm_operations_struct *gem_vm_ops; | 817 | struct vm_operations_struct *gem_vm_ops; |
791 | 818 | ||
@@ -1417,7 +1444,7 @@ drm_gem_object_unreference(struct drm_gem_object *obj) | |||
1417 | 1444 | ||
1418 | int drm_gem_handle_create(struct drm_file *file_priv, | 1445 | int drm_gem_handle_create(struct drm_file *file_priv, |
1419 | struct drm_gem_object *obj, | 1446 | struct drm_gem_object *obj, |
1420 | int *handlep); | 1447 | u32 *handlep); |
1421 | 1448 | ||
1422 | static inline void | 1449 | static inline void |
1423 | drm_gem_object_handle_reference(struct drm_gem_object *obj) | 1450 | drm_gem_object_handle_reference(struct drm_gem_object *obj) |
@@ -1443,7 +1470,7 @@ drm_gem_object_handle_unreference(struct drm_gem_object *obj) | |||
1443 | 1470 | ||
1444 | struct drm_gem_object *drm_gem_object_lookup(struct drm_device *dev, | 1471 | struct drm_gem_object *drm_gem_object_lookup(struct drm_device *dev, |
1445 | struct drm_file *filp, | 1472 | struct drm_file *filp, |
1446 | int handle); | 1473 | u32 handle); |
1447 | int drm_gem_close_ioctl(struct drm_device *dev, void *data, | 1474 | int drm_gem_close_ioctl(struct drm_device *dev, void *data, |
1448 | struct drm_file *file_priv); | 1475 | struct drm_file *file_priv); |
1449 | int drm_gem_flink_ioctl(struct drm_device *dev, void *data, | 1476 | int drm_gem_flink_ioctl(struct drm_device *dev, void *data, |
diff --git a/include/drm/drm_cache.h b/include/drm/drm_cache.h new file mode 100644 index 000000000000..7bfb063029d8 --- /dev/null +++ b/include/drm/drm_cache.h | |||
@@ -0,0 +1,38 @@ | |||
1 | /************************************************************************** | ||
2 | * | ||
3 | * Copyright 2009 Red Hat Inc. | ||
4 | * All Rights Reserved. | ||
5 | * | ||
6 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
7 | * copy of this software and associated documentation files (the | ||
8 | * "Software"), to deal in the Software without restriction, including | ||
9 | * without limitation the rights to use, copy, modify, merge, publish, | ||
10 | * distribute, sub license, and/or sell copies of the Software, and to | ||
11 | * permit persons to whom the Software is furnished to do so, subject to | ||
12 | * the following conditions: | ||
13 | * | ||
14 | * The above copyright notice and this permission notice (including the | ||
15 | * next paragraph) shall be included in all copies or substantial portions | ||
16 | * of the Software. | ||
17 | * | ||
18 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
19 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
20 | * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL | ||
21 | * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, | ||
22 | * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR | ||
23 | * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE | ||
24 | * USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
25 | * | ||
26 | * | ||
27 | **************************************************************************/ | ||
28 | /* | ||
29 | * Authors: | ||
30 | * Dave Airlie <airlied@redhat.com> | ||
31 | */ | ||
32 | |||
33 | #ifndef _DRM_CACHE_H_ | ||
34 | #define _DRM_CACHE_H_ | ||
35 | |||
36 | void drm_clflush_pages(struct page *pages[], unsigned long num_pages); | ||
37 | |||
38 | #endif | ||
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index 7300fb866767..ae1e9e166959 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h | |||
@@ -259,6 +259,8 @@ struct drm_framebuffer { | |||
259 | void *fbdev; | 259 | void *fbdev; |
260 | u32 pseudo_palette[17]; | 260 | u32 pseudo_palette[17]; |
261 | struct list_head filp_head; | 261 | struct list_head filp_head; |
262 | /* if you are using the helper */ | ||
263 | void *helper_private; | ||
262 | }; | 264 | }; |
263 | 265 | ||
264 | struct drm_property_blob { | 266 | struct drm_property_blob { |
@@ -572,6 +574,12 @@ struct drm_mode_config { | |||
572 | struct drm_property *tv_right_margin_property; | 574 | struct drm_property *tv_right_margin_property; |
573 | struct drm_property *tv_top_margin_property; | 575 | struct drm_property *tv_top_margin_property; |
574 | struct drm_property *tv_bottom_margin_property; | 576 | struct drm_property *tv_bottom_margin_property; |
577 | struct drm_property *tv_brightness_property; | ||
578 | struct drm_property *tv_contrast_property; | ||
579 | struct drm_property *tv_flicker_reduction_property; | ||
580 | struct drm_property *tv_overscan_property; | ||
581 | struct drm_property *tv_saturation_property; | ||
582 | struct drm_property *tv_hue_property; | ||
575 | 583 | ||
576 | /* Optional properties */ | 584 | /* Optional properties */ |
577 | struct drm_property *scaling_mode_property; | 585 | struct drm_property *scaling_mode_property; |
@@ -736,4 +744,12 @@ extern int drm_mode_gamma_get_ioctl(struct drm_device *dev, | |||
736 | extern int drm_mode_gamma_set_ioctl(struct drm_device *dev, | 744 | extern int drm_mode_gamma_set_ioctl(struct drm_device *dev, |
737 | void *data, struct drm_file *file_priv); | 745 | void *data, struct drm_file *file_priv); |
738 | extern bool drm_detect_hdmi_monitor(struct edid *edid); | 746 | extern bool drm_detect_hdmi_monitor(struct edid *edid); |
747 | extern struct drm_display_mode *drm_cvt_mode(struct drm_device *dev, | ||
748 | int hdisplay, int vdisplay, int vrefresh, | ||
749 | bool reduced, bool interlaced); | ||
750 | extern struct drm_display_mode *drm_gtf_mode(struct drm_device *dev, | ||
751 | int hdisplay, int vdisplay, int vrefresh, | ||
752 | bool interlaced, int margins); | ||
753 | extern int drm_add_modes_noedid(struct drm_connector *connector, | ||
754 | int hdisplay, int vdisplay); | ||
739 | #endif /* __DRM_CRTC_H__ */ | 755 | #endif /* __DRM_CRTC_H__ */ |
diff --git a/include/drm/drm_crtc_helper.h b/include/drm/drm_crtc_helper.h index 6769ff6c1bc0..4c8dacaf4f58 100644 --- a/include/drm/drm_crtc_helper.h +++ b/include/drm/drm_crtc_helper.h | |||
@@ -79,6 +79,8 @@ struct drm_encoder_helper_funcs { | |||
79 | /* detect for DAC style encoders */ | 79 | /* detect for DAC style encoders */ |
80 | enum drm_connector_status (*detect)(struct drm_encoder *encoder, | 80 | enum drm_connector_status (*detect)(struct drm_encoder *encoder, |
81 | struct drm_connector *connector); | 81 | struct drm_connector *connector); |
82 | /* disable encoder when not in use - more explicit than dpms off */ | ||
83 | void (*disable)(struct drm_encoder *encoder); | ||
82 | }; | 84 | }; |
83 | 85 | ||
84 | struct drm_connector_helper_funcs { | 86 | struct drm_connector_helper_funcs { |
@@ -98,6 +100,7 @@ extern bool drm_crtc_helper_set_mode(struct drm_crtc *crtc, | |||
98 | int x, int y, | 100 | int x, int y, |
99 | struct drm_framebuffer *old_fb); | 101 | struct drm_framebuffer *old_fb); |
100 | extern bool drm_helper_crtc_in_use(struct drm_crtc *crtc); | 102 | extern bool drm_helper_crtc_in_use(struct drm_crtc *crtc); |
103 | extern bool drm_helper_encoder_in_use(struct drm_encoder *encoder); | ||
101 | 104 | ||
102 | extern void drm_helper_connector_dpms(struct drm_connector *connector, int mode); | 105 | extern void drm_helper_connector_dpms(struct drm_connector *connector, int mode); |
103 | 106 | ||
diff --git a/include/drm/drm_encoder_slave.h b/include/drm/drm_encoder_slave.h new file mode 100644 index 000000000000..2f65633d28a7 --- /dev/null +++ b/include/drm/drm_encoder_slave.h | |||
@@ -0,0 +1,162 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2009 Francisco Jerez. | ||
3 | * All Rights Reserved. | ||
4 | * | ||
5 | * Permission is hereby granted, free of charge, to any person obtaining | ||
6 | * a copy of this software and associated documentation files (the | ||
7 | * "Software"), to deal in the Software without restriction, including | ||
8 | * without limitation the rights to use, copy, modify, merge, publish, | ||
9 | * distribute, sublicense, and/or sell copies of the Software, and to | ||
10 | * permit persons to whom the Software is furnished to do so, subject to | ||
11 | * the following conditions: | ||
12 | * | ||
13 | * The above copyright notice and this permission notice (including the | ||
14 | * next paragraph) shall be included in all copies or substantial | ||
15 | * portions of the Software. | ||
16 | * | ||
17 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | ||
18 | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||
19 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. | ||
20 | * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE | ||
21 | * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION | ||
22 | * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
23 | * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
24 | * | ||
25 | */ | ||
26 | |||
27 | #ifndef __DRM_ENCODER_SLAVE_H__ | ||
28 | #define __DRM_ENCODER_SLAVE_H__ | ||
29 | |||
30 | #include "drmP.h" | ||
31 | #include "drm_crtc.h" | ||
32 | |||
33 | /** | ||
34 | * struct drm_encoder_slave_funcs - Entry points exposed by a slave encoder driver | ||
35 | * @set_config: Initialize any encoder-specific modesetting parameters. | ||
36 | * The meaning of the @params parameter is implementation | ||
37 | * dependent. It will usually be a structure with DVO port | ||
38 | * data format settings or timings. It's not required for | ||
39 | * the new parameters to take effect until the next mode | ||
40 | * is set. | ||
41 | * | ||
42 | * Most of its members are analogous to the function pointers in | ||
43 | * &drm_encoder_helper_funcs and they can optionally be used to | ||
44 | * initialize the latter. Connector-like methods (e.g. @get_modes and | ||
45 | * @set_property) will typically be wrapped around and only be called | ||
46 | * if the encoder is the currently selected one for the connector. | ||
47 | */ | ||
48 | struct drm_encoder_slave_funcs { | ||
49 | void (*set_config)(struct drm_encoder *encoder, | ||
50 | void *params); | ||
51 | |||
52 | void (*destroy)(struct drm_encoder *encoder); | ||
53 | void (*dpms)(struct drm_encoder *encoder, int mode); | ||
54 | void (*save)(struct drm_encoder *encoder); | ||
55 | void (*restore)(struct drm_encoder *encoder); | ||
56 | bool (*mode_fixup)(struct drm_encoder *encoder, | ||
57 | struct drm_display_mode *mode, | ||
58 | struct drm_display_mode *adjusted_mode); | ||
59 | int (*mode_valid)(struct drm_encoder *encoder, | ||
60 | struct drm_display_mode *mode); | ||
61 | void (*mode_set)(struct drm_encoder *encoder, | ||
62 | struct drm_display_mode *mode, | ||
63 | struct drm_display_mode *adjusted_mode); | ||
64 | |||
65 | enum drm_connector_status (*detect)(struct drm_encoder *encoder, | ||
66 | struct drm_connector *connector); | ||
67 | int (*get_modes)(struct drm_encoder *encoder, | ||
68 | struct drm_connector *connector); | ||
69 | int (*create_resources)(struct drm_encoder *encoder, | ||
70 | struct drm_connector *connector); | ||
71 | int (*set_property)(struct drm_encoder *encoder, | ||
72 | struct drm_connector *connector, | ||
73 | struct drm_property *property, | ||
74 | uint64_t val); | ||
75 | |||
76 | }; | ||
77 | |||
78 | /** | ||
79 | * struct drm_encoder_slave - Slave encoder struct | ||
80 | * @base: DRM encoder object. | ||
81 | * @slave_funcs: Slave encoder callbacks. | ||
82 | * @slave_priv: Slave encoder private data. | ||
83 | * @bus_priv: Bus specific data. | ||
84 | * | ||
85 | * A &drm_encoder_slave has two sets of callbacks, @slave_funcs and the | ||
86 | * ones in @base. The former are never actually called by the common | ||
87 | * CRTC code, it's just a convenience for splitting the encoder | ||
88 | * functions in an upper, GPU-specific layer and a (hopefully) | ||
89 | * GPU-agnostic lower layer: It's the GPU driver responsibility to | ||
90 | * call the slave methods when appropriate. | ||
91 | * | ||
92 | * drm_i2c_encoder_init() provides a way to get an implementation of | ||
93 | * this. | ||
94 | */ | ||
95 | struct drm_encoder_slave { | ||
96 | struct drm_encoder base; | ||
97 | |||
98 | struct drm_encoder_slave_funcs *slave_funcs; | ||
99 | void *slave_priv; | ||
100 | void *bus_priv; | ||
101 | }; | ||
102 | #define to_encoder_slave(x) container_of((x), struct drm_encoder_slave, base) | ||
103 | |||
104 | int drm_i2c_encoder_init(struct drm_device *dev, | ||
105 | struct drm_encoder_slave *encoder, | ||
106 | struct i2c_adapter *adap, | ||
107 | const struct i2c_board_info *info); | ||
108 | |||
109 | |||
110 | /** | ||
111 | * struct drm_i2c_encoder_driver | ||
112 | * | ||
113 | * Describes a device driver for an encoder connected to the GPU | ||
114 | * through an I2C bus. In addition to the entry points in @i2c_driver | ||
115 | * an @encoder_init function should be provided. It will be called to | ||
116 | * give the driver an opportunity to allocate any per-encoder data | ||
117 | * structures and to initialize the @slave_funcs and (optionally) | ||
118 | * @slave_priv members of @encoder. | ||
119 | */ | ||
120 | struct drm_i2c_encoder_driver { | ||
121 | struct i2c_driver i2c_driver; | ||
122 | |||
123 | int (*encoder_init)(struct i2c_client *client, | ||
124 | struct drm_device *dev, | ||
125 | struct drm_encoder_slave *encoder); | ||
126 | |||
127 | }; | ||
128 | #define to_drm_i2c_encoder_driver(x) container_of((x), \ | ||
129 | struct drm_i2c_encoder_driver, \ | ||
130 | i2c_driver) | ||
131 | |||
132 | /** | ||
133 | * drm_i2c_encoder_get_client - Get the I2C client corresponding to an encoder | ||
134 | */ | ||
135 | static inline struct i2c_client *drm_i2c_encoder_get_client(struct drm_encoder *encoder) | ||
136 | { | ||
137 | return (struct i2c_client *)to_encoder_slave(encoder)->bus_priv; | ||
138 | } | ||
139 | |||
140 | /** | ||
141 | * drm_i2c_encoder_register - Register an I2C encoder driver | ||
142 | * @owner: Module containing the driver. | ||
143 | * @driver: Driver to be registered. | ||
144 | */ | ||
145 | static inline int drm_i2c_encoder_register(struct module *owner, | ||
146 | struct drm_i2c_encoder_driver *driver) | ||
147 | { | ||
148 | return i2c_register_driver(owner, &driver->i2c_driver); | ||
149 | } | ||
150 | |||
151 | /** | ||
152 | * drm_i2c_encoder_unregister - Unregister an I2C encoder driver | ||
153 | * @driver: Driver to be unregistered. | ||
154 | */ | ||
155 | static inline void drm_i2c_encoder_unregister(struct drm_i2c_encoder_driver *driver) | ||
156 | { | ||
157 | i2c_del_driver(&driver->i2c_driver); | ||
158 | } | ||
159 | |||
160 | void drm_i2c_encoder_destroy(struct drm_encoder *encoder); | ||
161 | |||
162 | #endif | ||
diff --git a/include/drm/drm_fb_helper.h b/include/drm/drm_fb_helper.h new file mode 100644 index 000000000000..88fffbdfa26f --- /dev/null +++ b/include/drm/drm_fb_helper.h | |||
@@ -0,0 +1,82 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2006-2009 Red Hat Inc. | ||
3 | * Copyright (c) 2006-2008 Intel Corporation | ||
4 | * Copyright (c) 2007 Dave Airlie <airlied@linux.ie> | ||
5 | * | ||
6 | * DRM framebuffer helper functions | ||
7 | * | ||
8 | * Permission to use, copy, modify, distribute, and sell this software and its | ||
9 | * documentation for any purpose is hereby granted without fee, provided that | ||
10 | * the above copyright notice appear in all copies and that both that copyright | ||
11 | * notice and this permission notice appear in supporting documentation, and | ||
12 | * that the name of the copyright holders not be used in advertising or | ||
13 | * publicity pertaining to distribution of the software without specific, | ||
14 | * written prior permission. The copyright holders make no representations | ||
15 | * about the suitability of this software for any purpose. It is provided "as | ||
16 | * is" without express or implied warranty. | ||
17 | * | ||
18 | * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, | ||
19 | * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO | ||
20 | * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR | ||
21 | * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, | ||
22 | * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER | ||
23 | * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE | ||
24 | * OF THIS SOFTWARE. | ||
25 | * | ||
26 | * Authors: | ||
27 | * Dave Airlie <airlied@linux.ie> | ||
28 | * Jesse Barnes <jesse.barnes@intel.com> | ||
29 | */ | ||
30 | #ifndef DRM_FB_HELPER_H | ||
31 | #define DRM_FB_HELPER_H | ||
32 | |||
33 | struct drm_fb_helper_crtc { | ||
34 | uint32_t crtc_id; | ||
35 | struct drm_mode_set mode_set; | ||
36 | }; | ||
37 | |||
38 | struct drm_fb_helper_funcs { | ||
39 | void (*gamma_set)(struct drm_crtc *crtc, u16 red, u16 green, | ||
40 | u16 blue, int regno); | ||
41 | }; | ||
42 | |||
43 | struct drm_fb_helper { | ||
44 | struct drm_framebuffer *fb; | ||
45 | struct drm_device *dev; | ||
46 | struct drm_display_mode *mode; | ||
47 | int crtc_count; | ||
48 | struct drm_fb_helper_crtc *crtc_info; | ||
49 | struct drm_fb_helper_funcs *funcs; | ||
50 | int conn_limit; | ||
51 | struct list_head kernel_fb_list; | ||
52 | }; | ||
53 | |||
54 | int drm_fb_helper_single_fb_probe(struct drm_device *dev, | ||
55 | int (*fb_create)(struct drm_device *dev, | ||
56 | uint32_t fb_width, | ||
57 | uint32_t fb_height, | ||
58 | uint32_t surface_width, | ||
59 | uint32_t surface_height, | ||
60 | struct drm_framebuffer **fb_ptr)); | ||
61 | int drm_fb_helper_init_crtc_count(struct drm_fb_helper *helper, int crtc_count, | ||
62 | int max_conn); | ||
63 | void drm_fb_helper_free(struct drm_fb_helper *helper); | ||
64 | int drm_fb_helper_blank(int blank, struct fb_info *info); | ||
65 | int drm_fb_helper_pan_display(struct fb_var_screeninfo *var, | ||
66 | struct fb_info *info); | ||
67 | int drm_fb_helper_set_par(struct fb_info *info); | ||
68 | int drm_fb_helper_check_var(struct fb_var_screeninfo *var, | ||
69 | struct fb_info *info); | ||
70 | int drm_fb_helper_setcolreg(unsigned regno, | ||
71 | unsigned red, | ||
72 | unsigned green, | ||
73 | unsigned blue, | ||
74 | unsigned transp, | ||
75 | struct fb_info *info); | ||
76 | |||
77 | void drm_fb_helper_restore(void); | ||
78 | void drm_fb_helper_fill_var(struct fb_info *info, struct drm_framebuffer *fb, | ||
79 | uint32_t fb_width, uint32_t fb_height); | ||
80 | void drm_fb_helper_fill_fix(struct fb_info *info, uint32_t pitch); | ||
81 | |||
82 | #endif | ||
diff --git a/include/drm/drm_memory.h b/include/drm/drm_memory.h index 63e425b5ea82..15af9b32ae42 100644 --- a/include/drm/drm_memory.h +++ b/include/drm/drm_memory.h | |||
@@ -44,8 +44,6 @@ | |||
44 | 44 | ||
45 | #if __OS_HAS_AGP | 45 | #if __OS_HAS_AGP |
46 | 46 | ||
47 | #include <linux/vmalloc.h> | ||
48 | |||
49 | #ifdef HAVE_PAGE_AGP | 47 | #ifdef HAVE_PAGE_AGP |
50 | #include <asm/agp.h> | 48 | #include <asm/agp.h> |
51 | #else | 49 | #else |
diff --git a/include/drm/drm_mm.h b/include/drm/drm_mm.h index f8332073d277..62329f9a42cb 100644 --- a/include/drm/drm_mm.h +++ b/include/drm/drm_mm.h | |||
@@ -37,6 +37,9 @@ | |||
37 | * Generic range manager structs | 37 | * Generic range manager structs |
38 | */ | 38 | */ |
39 | #include <linux/list.h> | 39 | #include <linux/list.h> |
40 | #ifdef CONFIG_DEBUG_FS | ||
41 | #include <linux/seq_file.h> | ||
42 | #endif | ||
40 | 43 | ||
41 | struct drm_mm_node { | 44 | struct drm_mm_node { |
42 | struct list_head fl_entry; | 45 | struct list_head fl_entry; |
@@ -96,4 +99,8 @@ static inline struct drm_mm *drm_get_mm(struct drm_mm_node *block) | |||
96 | return block->mm; | 99 | return block->mm; |
97 | } | 100 | } |
98 | 101 | ||
102 | #ifdef CONFIG_DEBUG_FS | ||
103 | int drm_mm_dump_table(struct seq_file *m, struct drm_mm *mm); | ||
104 | #endif | ||
105 | |||
99 | #endif | 106 | #endif |
diff --git a/include/drm/drm_mode.h b/include/drm/drm_mode.h index ae304cc73c90..1f908416aedb 100644 --- a/include/drm/drm_mode.h +++ b/include/drm/drm_mode.h | |||
@@ -68,10 +68,11 @@ | |||
68 | #define DRM_MODE_DPMS_OFF 3 | 68 | #define DRM_MODE_DPMS_OFF 3 |
69 | 69 | ||
70 | /* Scaling mode options */ | 70 | /* Scaling mode options */ |
71 | #define DRM_MODE_SCALE_NON_GPU 0 | 71 | #define DRM_MODE_SCALE_NONE 0 /* Unmodified timing (display or |
72 | #define DRM_MODE_SCALE_FULLSCREEN 1 | 72 | software can still scale) */ |
73 | #define DRM_MODE_SCALE_NO_SCALE 2 | 73 | #define DRM_MODE_SCALE_FULLSCREEN 1 /* Full screen, ignore aspect */ |
74 | #define DRM_MODE_SCALE_ASPECT 3 | 74 | #define DRM_MODE_SCALE_CENTER 2 /* Centered, no scaling */ |
75 | #define DRM_MODE_SCALE_ASPECT 3 /* Full screen, preserve aspect */ | ||
75 | 76 | ||
76 | /* Dithering mode options */ | 77 | /* Dithering mode options */ |
77 | #define DRM_MODE_DITHERING_OFF 0 | 78 | #define DRM_MODE_DITHERING_OFF 0 |
@@ -141,6 +142,7 @@ struct drm_mode_get_encoder { | |||
141 | #define DRM_MODE_SUBCONNECTOR_Composite 5 | 142 | #define DRM_MODE_SUBCONNECTOR_Composite 5 |
142 | #define DRM_MODE_SUBCONNECTOR_SVIDEO 6 | 143 | #define DRM_MODE_SUBCONNECTOR_SVIDEO 6 |
143 | #define DRM_MODE_SUBCONNECTOR_Component 8 | 144 | #define DRM_MODE_SUBCONNECTOR_Component 8 |
145 | #define DRM_MODE_SUBCONNECTOR_SCART 9 | ||
144 | 146 | ||
145 | #define DRM_MODE_CONNECTOR_Unknown 0 | 147 | #define DRM_MODE_CONNECTOR_Unknown 0 |
146 | #define DRM_MODE_CONNECTOR_VGA 1 | 148 | #define DRM_MODE_CONNECTOR_VGA 1 |
@@ -155,6 +157,7 @@ struct drm_mode_get_encoder { | |||
155 | #define DRM_MODE_CONNECTOR_DisplayPort 10 | 157 | #define DRM_MODE_CONNECTOR_DisplayPort 10 |
156 | #define DRM_MODE_CONNECTOR_HDMIA 11 | 158 | #define DRM_MODE_CONNECTOR_HDMIA 11 |
157 | #define DRM_MODE_CONNECTOR_HDMIB 12 | 159 | #define DRM_MODE_CONNECTOR_HDMIB 12 |
160 | #define DRM_MODE_CONNECTOR_TV 13 | ||
158 | 161 | ||
159 | struct drm_mode_get_connector { | 162 | struct drm_mode_get_connector { |
160 | 163 | ||
diff --git a/include/drm/drm_pciids.h b/include/drm/drm_pciids.h index 45c18672b093..853508499d20 100644 --- a/include/drm/drm_pciids.h +++ b/include/drm/drm_pciids.h | |||
@@ -43,6 +43,7 @@ | |||
43 | {0x1002, 0x4A4F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | 43 | {0x1002, 0x4A4F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ |
44 | {0x1002, 0x4A50, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | 44 | {0x1002, 0x4A50, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ |
45 | {0x1002, 0x4A54, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | 45 | {0x1002, 0x4A54, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ |
46 | {0x1002, 0x4B48, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | ||
46 | {0x1002, 0x4B49, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | 47 | {0x1002, 0x4B49, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ |
47 | {0x1002, 0x4B4A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | 48 | {0x1002, 0x4B4A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ |
48 | {0x1002, 0x4B4B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | 49 | {0x1002, 0x4B4B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ |
@@ -256,12 +257,16 @@ | |||
256 | {0x1002, 0x940F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R600|RADEON_NEW_MEMMAP}, \ | 257 | {0x1002, 0x940F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R600|RADEON_NEW_MEMMAP}, \ |
257 | {0x1002, 0x94A0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV740|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | 258 | {0x1002, 0x94A0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV740|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ |
258 | {0x1002, 0x94A1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV740|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | 259 | {0x1002, 0x94A1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV740|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ |
260 | {0x1002, 0x94A3, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV740|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
259 | {0x1002, 0x94B1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV740|RADEON_NEW_MEMMAP}, \ | 261 | {0x1002, 0x94B1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV740|RADEON_NEW_MEMMAP}, \ |
260 | {0x1002, 0x94B3, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV740|RADEON_NEW_MEMMAP}, \ | 262 | {0x1002, 0x94B3, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV740|RADEON_NEW_MEMMAP}, \ |
263 | {0x1002, 0x94B4, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV740|RADEON_NEW_MEMMAP}, \ | ||
261 | {0x1002, 0x94B5, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV740|RADEON_NEW_MEMMAP}, \ | 264 | {0x1002, 0x94B5, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV740|RADEON_NEW_MEMMAP}, \ |
265 | {0x1002, 0x94B9, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV740|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
262 | {0x1002, 0x9440, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \ | 266 | {0x1002, 0x9440, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \ |
263 | {0x1002, 0x9441, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \ | 267 | {0x1002, 0x9441, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \ |
264 | {0x1002, 0x9442, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \ | 268 | {0x1002, 0x9442, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \ |
269 | {0x1002, 0x9443, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \ | ||
265 | {0x1002, 0x9444, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \ | 270 | {0x1002, 0x9444, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \ |
266 | {0x1002, 0x9446, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \ | 271 | {0x1002, 0x9446, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \ |
267 | {0x1002, 0x944A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | 272 | {0x1002, 0x944A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ |
@@ -286,6 +291,7 @@ | |||
286 | {0x1002, 0x948F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_NEW_MEMMAP}, \ | 291 | {0x1002, 0x948F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_NEW_MEMMAP}, \ |
287 | {0x1002, 0x9490, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_NEW_MEMMAP}, \ | 292 | {0x1002, 0x9490, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_NEW_MEMMAP}, \ |
288 | {0x1002, 0x9491, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | 293 | {0x1002, 0x9491, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ |
294 | {0x1002, 0x9495, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_NEW_MEMMAP}, \ | ||
289 | {0x1002, 0x9498, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_NEW_MEMMAP}, \ | 295 | {0x1002, 0x9498, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_NEW_MEMMAP}, \ |
290 | {0x1002, 0x949C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_NEW_MEMMAP}, \ | 296 | {0x1002, 0x949C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_NEW_MEMMAP}, \ |
291 | {0x1002, 0x949E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_NEW_MEMMAP}, \ | 297 | {0x1002, 0x949E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_NEW_MEMMAP}, \ |
@@ -323,6 +329,7 @@ | |||
323 | {0x1002, 0x9552, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV710|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | 329 | {0x1002, 0x9552, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV710|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ |
324 | {0x1002, 0x9553, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV710|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | 330 | {0x1002, 0x9553, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV710|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ |
325 | {0x1002, 0x9555, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV710|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | 331 | {0x1002, 0x9555, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV710|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ |
332 | {0x1002, 0x9557, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV710|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
326 | {0x1002, 0x9580, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_NEW_MEMMAP}, \ | 333 | {0x1002, 0x9580, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_NEW_MEMMAP}, \ |
327 | {0x1002, 0x9581, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | 334 | {0x1002, 0x9581, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ |
328 | {0x1002, 0x9583, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | 335 | {0x1002, 0x9583, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ |
@@ -346,12 +353,12 @@ | |||
346 | {0x1002, 0x9599, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV635|RADEON_NEW_MEMMAP}, \ | 353 | {0x1002, 0x9599, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV635|RADEON_NEW_MEMMAP}, \ |
347 | {0x1002, 0x959B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV635|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | 354 | {0x1002, 0x959B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV635|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ |
348 | {0x1002, 0x95C0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \ | 355 | {0x1002, 0x95C0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \ |
356 | {0x1002, 0x95C2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
357 | {0x1002, 0x95C4, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
349 | {0x1002, 0x95C5, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \ | 358 | {0x1002, 0x95C5, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \ |
350 | {0x1002, 0x95C6, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \ | 359 | {0x1002, 0x95C6, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \ |
351 | {0x1002, 0x95C7, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \ | 360 | {0x1002, 0x95C7, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \ |
352 | {0x1002, 0x95C9, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \ | 361 | {0x1002, 0x95C9, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \ |
353 | {0x1002, 0x95C2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
354 | {0x1002, 0x95C4, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
355 | {0x1002, 0x95CC, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \ | 362 | {0x1002, 0x95CC, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \ |
356 | {0x1002, 0x95CD, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \ | 363 | {0x1002, 0x95CD, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \ |
357 | {0x1002, 0x95CE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \ | 364 | {0x1002, 0x95CE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \ |
@@ -363,6 +370,11 @@ | |||
363 | {0x1002, 0x9614, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS780|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ | 370 | {0x1002, 0x9614, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS780|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ |
364 | {0x1002, 0x9615, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS780|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ | 371 | {0x1002, 0x9615, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS780|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ |
365 | {0x1002, 0x9616, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS780|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ | 372 | {0x1002, 0x9616, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS780|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ |
373 | {0x1002, 0x9710, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS880|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ | ||
374 | {0x1002, 0x9711, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS880|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ | ||
375 | {0x1002, 0x9712, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS880|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ | ||
376 | {0x1002, 0x9713, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS880|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ | ||
377 | {0x1002, 0x9714, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS880|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ | ||
366 | {0, 0, 0} | 378 | {0, 0, 0} |
367 | 379 | ||
368 | #define r128_PCI_IDS \ | 380 | #define r128_PCI_IDS \ |
diff --git a/include/drm/drm_sysfs.h b/include/drm/drm_sysfs.h new file mode 100644 index 000000000000..1d8e033fde67 --- /dev/null +++ b/include/drm/drm_sysfs.h | |||
@@ -0,0 +1,12 @@ | |||
1 | #ifndef _DRM_SYSFS_H_ | ||
2 | #define _DRM_SYSFS_H_ | ||
3 | |||
4 | /** | ||
5 | * This minimalistic include file is intended for users (read TTM) that | ||
6 | * don't want to include the full drmP.h file. | ||
7 | */ | ||
8 | |||
9 | extern int drm_class_device_register(struct device *dev); | ||
10 | extern void drm_class_device_unregister(struct device *dev); | ||
11 | |||
12 | #endif | ||
diff --git a/include/drm/radeon_drm.h b/include/drm/radeon_drm.h index 41862e9a4c20..3b9932ab1756 100644 --- a/include/drm/radeon_drm.h +++ b/include/drm/radeon_drm.h | |||
@@ -506,6 +506,9 @@ typedef struct { | |||
506 | #define DRM_RADEON_GEM_WAIT_IDLE 0x24 | 506 | #define DRM_RADEON_GEM_WAIT_IDLE 0x24 |
507 | #define DRM_RADEON_CS 0x26 | 507 | #define DRM_RADEON_CS 0x26 |
508 | #define DRM_RADEON_INFO 0x27 | 508 | #define DRM_RADEON_INFO 0x27 |
509 | #define DRM_RADEON_GEM_SET_TILING 0x28 | ||
510 | #define DRM_RADEON_GEM_GET_TILING 0x29 | ||
511 | #define DRM_RADEON_GEM_BUSY 0x2a | ||
509 | 512 | ||
510 | #define DRM_IOCTL_RADEON_CP_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_CP_INIT, drm_radeon_init_t) | 513 | #define DRM_IOCTL_RADEON_CP_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_CP_INIT, drm_radeon_init_t) |
511 | #define DRM_IOCTL_RADEON_CP_START DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_CP_START) | 514 | #define DRM_IOCTL_RADEON_CP_START DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_CP_START) |
@@ -544,7 +547,9 @@ typedef struct { | |||
544 | #define DRM_IOCTL_RADEON_GEM_WAIT_IDLE DRM_IOW(DRM_COMMAND_BASE + DRM_RADEON_GEM_WAIT_IDLE, struct drm_radeon_gem_wait_idle) | 547 | #define DRM_IOCTL_RADEON_GEM_WAIT_IDLE DRM_IOW(DRM_COMMAND_BASE + DRM_RADEON_GEM_WAIT_IDLE, struct drm_radeon_gem_wait_idle) |
545 | #define DRM_IOCTL_RADEON_CS DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_CS, struct drm_radeon_cs) | 548 | #define DRM_IOCTL_RADEON_CS DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_CS, struct drm_radeon_cs) |
546 | #define DRM_IOCTL_RADEON_INFO DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_INFO, struct drm_radeon_info) | 549 | #define DRM_IOCTL_RADEON_INFO DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_INFO, struct drm_radeon_info) |
547 | 550 | #define DRM_IOCTL_RADEON_SET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_SET_TILING, struct drm_radeon_gem_set_tiling) | |
551 | #define DRM_IOCTL_RADEON_GET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_GET_TILING, struct drm_radeon_gem_get_tiling) | ||
552 | #define DRM_IOCTL_RADEON_GEM_BUSY DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_BUSY, struct drm_radeon_gem_busy) | ||
548 | 553 | ||
549 | typedef struct drm_radeon_init { | 554 | typedef struct drm_radeon_init { |
550 | enum { | 555 | enum { |
@@ -704,6 +709,7 @@ typedef struct drm_radeon_indirect { | |||
704 | #define RADEON_PARAM_FB_LOCATION 14 /* FB location */ | 709 | #define RADEON_PARAM_FB_LOCATION 14 /* FB location */ |
705 | #define RADEON_PARAM_NUM_GB_PIPES 15 /* num GB pipes */ | 710 | #define RADEON_PARAM_NUM_GB_PIPES 15 /* num GB pipes */ |
706 | #define RADEON_PARAM_DEVICE_ID 16 | 711 | #define RADEON_PARAM_DEVICE_ID 16 |
712 | #define RADEON_PARAM_NUM_Z_PIPES 17 /* num Z pipes */ | ||
707 | 713 | ||
708 | typedef struct drm_radeon_getparam { | 714 | typedef struct drm_radeon_getparam { |
709 | int param; | 715 | int param; |
@@ -796,6 +802,25 @@ struct drm_radeon_gem_create { | |||
796 | uint32_t flags; | 802 | uint32_t flags; |
797 | }; | 803 | }; |
798 | 804 | ||
805 | #define RADEON_TILING_MACRO 0x1 | ||
806 | #define RADEON_TILING_MICRO 0x2 | ||
807 | #define RADEON_TILING_SWAP_16BIT 0x4 | ||
808 | #define RADEON_TILING_SWAP_32BIT 0x8 | ||
809 | #define RADEON_TILING_SURFACE 0x10 /* this object requires a surface | ||
810 | * when mapped - i.e. front buffer */ | ||
811 | |||
812 | struct drm_radeon_gem_set_tiling { | ||
813 | uint32_t handle; | ||
814 | uint32_t tiling_flags; | ||
815 | uint32_t pitch; | ||
816 | }; | ||
817 | |||
818 | struct drm_radeon_gem_get_tiling { | ||
819 | uint32_t handle; | ||
820 | uint32_t tiling_flags; | ||
821 | uint32_t pitch; | ||
822 | }; | ||
823 | |||
799 | struct drm_radeon_gem_mmap { | 824 | struct drm_radeon_gem_mmap { |
800 | uint32_t handle; | 825 | uint32_t handle; |
801 | uint32_t pad; | 826 | uint32_t pad; |
@@ -817,7 +842,7 @@ struct drm_radeon_gem_wait_idle { | |||
817 | 842 | ||
818 | struct drm_radeon_gem_busy { | 843 | struct drm_radeon_gem_busy { |
819 | uint32_t handle; | 844 | uint32_t handle; |
820 | uint32_t busy; | 845 | uint32_t domain; |
821 | }; | 846 | }; |
822 | 847 | ||
823 | struct drm_radeon_gem_pread { | 848 | struct drm_radeon_gem_pread { |
@@ -874,6 +899,8 @@ struct drm_radeon_cs { | |||
874 | 899 | ||
875 | #define RADEON_INFO_DEVICE_ID 0x00 | 900 | #define RADEON_INFO_DEVICE_ID 0x00 |
876 | #define RADEON_INFO_NUM_GB_PIPES 0x01 | 901 | #define RADEON_INFO_NUM_GB_PIPES 0x01 |
902 | #define RADEON_INFO_NUM_Z_PIPES 0x02 | ||
903 | #define RADEON_INFO_ACCEL_WORKING 0x03 | ||
877 | 904 | ||
878 | struct drm_radeon_info { | 905 | struct drm_radeon_info { |
879 | uint32_t request; | 906 | uint32_t request; |
diff --git a/include/drm/ttm/ttm_bo_api.h b/include/drm/ttm/ttm_bo_api.h index cd22ab4b495c..491146170522 100644 --- a/include/drm/ttm/ttm_bo_api.h +++ b/include/drm/ttm/ttm_bo_api.h | |||
@@ -155,6 +155,7 @@ struct ttm_buffer_object { | |||
155 | * Members constant at init. | 155 | * Members constant at init. |
156 | */ | 156 | */ |
157 | 157 | ||
158 | struct ttm_bo_global *glob; | ||
158 | struct ttm_bo_device *bdev; | 159 | struct ttm_bo_device *bdev; |
159 | unsigned long buffer_start; | 160 | unsigned long buffer_start; |
160 | enum ttm_bo_type type; | 161 | enum ttm_bo_type type; |
@@ -245,14 +246,15 @@ struct ttm_buffer_object { | |||
245 | * premapped region. | 246 | * premapped region. |
246 | */ | 247 | */ |
247 | 248 | ||
249 | #define TTM_BO_MAP_IOMEM_MASK 0x80 | ||
248 | struct ttm_bo_kmap_obj { | 250 | struct ttm_bo_kmap_obj { |
249 | void *virtual; | 251 | void *virtual; |
250 | struct page *page; | 252 | struct page *page; |
251 | enum { | 253 | enum { |
252 | ttm_bo_map_iomap, | 254 | ttm_bo_map_iomap = 1 | TTM_BO_MAP_IOMEM_MASK, |
253 | ttm_bo_map_vmap, | 255 | ttm_bo_map_vmap = 2, |
254 | ttm_bo_map_kmap, | 256 | ttm_bo_map_kmap = 3, |
255 | ttm_bo_map_premapped, | 257 | ttm_bo_map_premapped = 4 | TTM_BO_MAP_IOMEM_MASK, |
256 | } bo_kmap_type; | 258 | } bo_kmap_type; |
257 | }; | 259 | }; |
258 | 260 | ||
@@ -522,8 +524,7 @@ extern int ttm_bo_evict_mm(struct ttm_bo_device *bdev, unsigned mem_type); | |||
522 | static inline void *ttm_kmap_obj_virtual(struct ttm_bo_kmap_obj *map, | 524 | static inline void *ttm_kmap_obj_virtual(struct ttm_bo_kmap_obj *map, |
523 | bool *is_iomem) | 525 | bool *is_iomem) |
524 | { | 526 | { |
525 | *is_iomem = (map->bo_kmap_type == ttm_bo_map_iomap || | 527 | *is_iomem = !!(map->bo_kmap_type & TTM_BO_MAP_IOMEM_MASK); |
526 | map->bo_kmap_type == ttm_bo_map_premapped); | ||
527 | return map->virtual; | 528 | return map->virtual; |
528 | } | 529 | } |
529 | 530 | ||
diff --git a/include/drm/ttm/ttm_bo_driver.h b/include/drm/ttm/ttm_bo_driver.h index 62ed733c52a2..e8cd6d20aed2 100644 --- a/include/drm/ttm/ttm_bo_driver.h +++ b/include/drm/ttm/ttm_bo_driver.h | |||
@@ -32,6 +32,7 @@ | |||
32 | 32 | ||
33 | #include "ttm/ttm_bo_api.h" | 33 | #include "ttm/ttm_bo_api.h" |
34 | #include "ttm/ttm_memory.h" | 34 | #include "ttm/ttm_memory.h" |
35 | #include "ttm/ttm_module.h" | ||
35 | #include "drm_mm.h" | 36 | #include "drm_mm.h" |
36 | #include "linux/workqueue.h" | 37 | #include "linux/workqueue.h" |
37 | #include "linux/fs.h" | 38 | #include "linux/fs.h" |
@@ -121,6 +122,7 @@ struct ttm_backend { | |||
121 | #define TTM_PAGE_FLAG_SWAPPED (1 << 4) | 122 | #define TTM_PAGE_FLAG_SWAPPED (1 << 4) |
122 | #define TTM_PAGE_FLAG_PERSISTANT_SWAP (1 << 5) | 123 | #define TTM_PAGE_FLAG_PERSISTANT_SWAP (1 << 5) |
123 | #define TTM_PAGE_FLAG_ZERO_ALLOC (1 << 6) | 124 | #define TTM_PAGE_FLAG_ZERO_ALLOC (1 << 6) |
125 | #define TTM_PAGE_FLAG_DMA32 (1 << 7) | ||
124 | 126 | ||
125 | enum ttm_caching_state { | 127 | enum ttm_caching_state { |
126 | tt_uncached, | 128 | tt_uncached, |
@@ -160,7 +162,7 @@ struct ttm_tt { | |||
160 | long last_lomem_page; | 162 | long last_lomem_page; |
161 | uint32_t page_flags; | 163 | uint32_t page_flags; |
162 | unsigned long num_pages; | 164 | unsigned long num_pages; |
163 | struct ttm_bo_device *bdev; | 165 | struct ttm_bo_global *glob; |
164 | struct ttm_backend *be; | 166 | struct ttm_backend *be; |
165 | struct task_struct *tsk; | 167 | struct task_struct *tsk; |
166 | unsigned long start; | 168 | unsigned long start; |
@@ -353,26 +355,83 @@ struct ttm_bo_driver { | |||
353 | int (*sync_obj_flush) (void *sync_obj, void *sync_arg); | 355 | int (*sync_obj_flush) (void *sync_obj, void *sync_arg); |
354 | void (*sync_obj_unref) (void **sync_obj); | 356 | void (*sync_obj_unref) (void **sync_obj); |
355 | void *(*sync_obj_ref) (void *sync_obj); | 357 | void *(*sync_obj_ref) (void *sync_obj); |
358 | |||
359 | /* hook to notify driver about a driver move so it | ||
360 | * can do tiling things */ | ||
361 | void (*move_notify)(struct ttm_buffer_object *bo, | ||
362 | struct ttm_mem_reg *new_mem); | ||
363 | /* notify the driver we are taking a fault on this BO | ||
364 | * and have reserved it */ | ||
365 | void (*fault_reserve_notify)(struct ttm_buffer_object *bo); | ||
356 | }; | 366 | }; |
357 | 367 | ||
358 | #define TTM_NUM_MEM_TYPES 8 | 368 | /** |
369 | * struct ttm_bo_global_ref - Argument to initialize a struct ttm_bo_global. | ||
370 | */ | ||
371 | |||
372 | struct ttm_bo_global_ref { | ||
373 | struct ttm_global_reference ref; | ||
374 | struct ttm_mem_global *mem_glob; | ||
375 | }; | ||
359 | 376 | ||
360 | #define TTM_BO_PRIV_FLAG_MOVING 0 /* Buffer object is moving and needs | ||
361 | idling before CPU mapping */ | ||
362 | #define TTM_BO_PRIV_FLAG_MAX 1 | ||
363 | /** | 377 | /** |
364 | * struct ttm_bo_device - Buffer object driver device-specific data. | 378 | * struct ttm_bo_global - Buffer object driver global data. |
365 | * | 379 | * |
366 | * @mem_glob: Pointer to a struct ttm_mem_global object for accounting. | 380 | * @mem_glob: Pointer to a struct ttm_mem_global object for accounting. |
367 | * @driver: Pointer to a struct ttm_bo_driver struct setup by the driver. | ||
368 | * @count: Current number of buffer object. | ||
369 | * @pages: Current number of pinned pages. | ||
370 | * @dummy_read_page: Pointer to a dummy page used for mapping requests | 381 | * @dummy_read_page: Pointer to a dummy page used for mapping requests |
371 | * of unpopulated pages. | 382 | * of unpopulated pages. |
372 | * @shrink: A shrink callback object used for buffre object swap. | 383 | * @shrink: A shrink callback object used for buffer object swap. |
373 | * @ttm_bo_extra_size: Extra size (sizeof(struct ttm_buffer_object) excluded) | 384 | * @ttm_bo_extra_size: Extra size (sizeof(struct ttm_buffer_object) excluded) |
374 | * used by a buffer object. This is excluding page arrays and backing pages. | 385 | * used by a buffer object. This is excluding page arrays and backing pages. |
375 | * @ttm_bo_size: This is @ttm_bo_extra_size + sizeof(struct ttm_buffer_object). | 386 | * @ttm_bo_size: This is @ttm_bo_extra_size + sizeof(struct ttm_buffer_object). |
387 | * @device_list_mutex: Mutex protecting the device list. | ||
388 | * This mutex is held while traversing the device list for pm options. | ||
389 | * @lru_lock: Spinlock protecting the bo subsystem lru lists. | ||
390 | * @device_list: List of buffer object devices. | ||
391 | * @swap_lru: Lru list of buffer objects used for swapping. | ||
392 | */ | ||
393 | |||
394 | struct ttm_bo_global { | ||
395 | |||
396 | /** | ||
397 | * Constant after init. | ||
398 | */ | ||
399 | |||
400 | struct kobject kobj; | ||
401 | struct ttm_mem_global *mem_glob; | ||
402 | struct page *dummy_read_page; | ||
403 | struct ttm_mem_shrink shrink; | ||
404 | size_t ttm_bo_extra_size; | ||
405 | size_t ttm_bo_size; | ||
406 | struct mutex device_list_mutex; | ||
407 | spinlock_t lru_lock; | ||
408 | |||
409 | /** | ||
410 | * Protected by device_list_mutex. | ||
411 | */ | ||
412 | struct list_head device_list; | ||
413 | |||
414 | /** | ||
415 | * Protected by the lru_lock. | ||
416 | */ | ||
417 | struct list_head swap_lru; | ||
418 | |||
419 | /** | ||
420 | * Internal protection. | ||
421 | */ | ||
422 | atomic_t bo_count; | ||
423 | }; | ||
424 | |||
425 | |||
426 | #define TTM_NUM_MEM_TYPES 8 | ||
427 | |||
428 | #define TTM_BO_PRIV_FLAG_MOVING 0 /* Buffer object is moving and needs | ||
429 | idling before CPU mapping */ | ||
430 | #define TTM_BO_PRIV_FLAG_MAX 1 | ||
431 | /** | ||
432 | * struct ttm_bo_device - Buffer object driver device-specific data. | ||
433 | * | ||
434 | * @driver: Pointer to a struct ttm_bo_driver struct setup by the driver. | ||
376 | * @man: An array of mem_type_managers. | 435 | * @man: An array of mem_type_managers. |
377 | * @addr_space_mm: Range manager for the device address space. | 436 | * @addr_space_mm: Range manager for the device address space. |
378 | * lru_lock: Spinlock that protects the buffer+device lru lists and | 437 | * lru_lock: Spinlock that protects the buffer+device lru lists and |
@@ -390,32 +449,21 @@ struct ttm_bo_device { | |||
390 | /* | 449 | /* |
391 | * Constant after bo device init / atomic. | 450 | * Constant after bo device init / atomic. |
392 | */ | 451 | */ |
393 | 452 | struct list_head device_list; | |
394 | struct ttm_mem_global *mem_glob; | 453 | struct ttm_bo_global *glob; |
395 | struct ttm_bo_driver *driver; | 454 | struct ttm_bo_driver *driver; |
396 | struct page *dummy_read_page; | ||
397 | struct ttm_mem_shrink shrink; | ||
398 | |||
399 | size_t ttm_bo_extra_size; | ||
400 | size_t ttm_bo_size; | ||
401 | |||
402 | rwlock_t vm_lock; | 455 | rwlock_t vm_lock; |
456 | struct ttm_mem_type_manager man[TTM_NUM_MEM_TYPES]; | ||
403 | /* | 457 | /* |
404 | * Protected by the vm lock. | 458 | * Protected by the vm lock. |
405 | */ | 459 | */ |
406 | struct ttm_mem_type_manager man[TTM_NUM_MEM_TYPES]; | ||
407 | struct rb_root addr_space_rb; | 460 | struct rb_root addr_space_rb; |
408 | struct drm_mm addr_space_mm; | 461 | struct drm_mm addr_space_mm; |
409 | 462 | ||
410 | /* | 463 | /* |
411 | * Might want to change this to one lock per manager. | 464 | * Protected by the global:lru lock. |
412 | */ | ||
413 | spinlock_t lru_lock; | ||
414 | /* | ||
415 | * Protected by the lru lock. | ||
416 | */ | 465 | */ |
417 | struct list_head ddestroy; | 466 | struct list_head ddestroy; |
418 | struct list_head swap_lru; | ||
419 | 467 | ||
420 | /* | 468 | /* |
421 | * Protected by load / firstopen / lastclose /unload sync. | 469 | * Protected by load / firstopen / lastclose /unload sync. |
@@ -429,6 +477,8 @@ struct ttm_bo_device { | |||
429 | */ | 477 | */ |
430 | 478 | ||
431 | struct delayed_work wq; | 479 | struct delayed_work wq; |
480 | |||
481 | bool need_dma32; | ||
432 | }; | 482 | }; |
433 | 483 | ||
434 | /** | 484 | /** |
@@ -629,6 +679,9 @@ extern int ttm_bo_pci_offset(struct ttm_bo_device *bdev, | |||
629 | unsigned long *bus_offset, | 679 | unsigned long *bus_offset, |
630 | unsigned long *bus_size); | 680 | unsigned long *bus_size); |
631 | 681 | ||
682 | extern void ttm_bo_global_release(struct ttm_global_reference *ref); | ||
683 | extern int ttm_bo_global_init(struct ttm_global_reference *ref); | ||
684 | |||
632 | extern int ttm_bo_device_release(struct ttm_bo_device *bdev); | 685 | extern int ttm_bo_device_release(struct ttm_bo_device *bdev); |
633 | 686 | ||
634 | /** | 687 | /** |
@@ -646,9 +699,16 @@ extern int ttm_bo_device_release(struct ttm_bo_device *bdev); | |||
646 | * !0: Failure. | 699 | * !0: Failure. |
647 | */ | 700 | */ |
648 | extern int ttm_bo_device_init(struct ttm_bo_device *bdev, | 701 | extern int ttm_bo_device_init(struct ttm_bo_device *bdev, |
649 | struct ttm_mem_global *mem_glob, | 702 | struct ttm_bo_global *glob, |
650 | struct ttm_bo_driver *driver, | 703 | struct ttm_bo_driver *driver, |
651 | uint64_t file_page_offset); | 704 | uint64_t file_page_offset, bool need_dma32); |
705 | |||
706 | /** | ||
707 | * ttm_bo_unmap_virtual | ||
708 | * | ||
709 | * @bo: tear down the virtual mappings for this BO | ||
710 | */ | ||
711 | extern void ttm_bo_unmap_virtual(struct ttm_buffer_object *bo); | ||
652 | 712 | ||
653 | /** | 713 | /** |
654 | * ttm_bo_reserve: | 714 | * ttm_bo_reserve: |
diff --git a/include/drm/ttm/ttm_memory.h b/include/drm/ttm/ttm_memory.h index d8b8f042c4f1..6983a7cf4da4 100644 --- a/include/drm/ttm/ttm_memory.h +++ b/include/drm/ttm/ttm_memory.h | |||
@@ -32,6 +32,7 @@ | |||
32 | #include <linux/spinlock.h> | 32 | #include <linux/spinlock.h> |
33 | #include <linux/wait.h> | 33 | #include <linux/wait.h> |
34 | #include <linux/errno.h> | 34 | #include <linux/errno.h> |
35 | #include <linux/kobject.h> | ||
35 | 36 | ||
36 | /** | 37 | /** |
37 | * struct ttm_mem_shrink - callback to shrink TTM memory usage. | 38 | * struct ttm_mem_shrink - callback to shrink TTM memory usage. |
@@ -60,34 +61,33 @@ struct ttm_mem_shrink { | |||
60 | * @queue: Wait queue for processes suspended waiting for memory. | 61 | * @queue: Wait queue for processes suspended waiting for memory. |
61 | * @lock: Lock to protect the @shrink - and the memory accounting members, | 62 | * @lock: Lock to protect the @shrink - and the memory accounting members, |
62 | * that is, essentially the whole structure with some exceptions. | 63 | * that is, essentially the whole structure with some exceptions. |
63 | * @emer_memory: Lowmem memory limit available for root. | 64 | * @zones: Array of pointers to accounting zones. |
64 | * @max_memory: Lowmem memory limit available for non-root. | 65 | * @num_zones: Number of populated entries in the @zones array. |
65 | * @swap_limit: Lowmem memory limit where the shrink workqueue kicks in. | 66 | * @zone_kernel: Pointer to the kernel zone. |
66 | * @used_memory: Currently used lowmem memory. | 67 | * @zone_highmem: Pointer to the highmem zone if there is one. |
67 | * @used_total_memory: Currently used total (lowmem + highmem) memory. | 68 | * @zone_dma32: Pointer to the dma32 zone if there is one. |
68 | * @total_memory_swap_limit: Total memory limit where the shrink workqueue | ||
69 | * kicks in. | ||
70 | * @max_total_memory: Total memory available to non-root processes. | ||
71 | * @emer_total_memory: Total memory available to root processes. | ||
72 | * | 69 | * |
73 | * Note that this structure is not per device. It should be global for all | 70 | * Note that this structure is not per device. It should be global for all |
74 | * graphics devices. | 71 | * graphics devices. |
75 | */ | 72 | */ |
76 | 73 | ||
74 | #define TTM_MEM_MAX_ZONES 2 | ||
75 | struct ttm_mem_zone; | ||
77 | struct ttm_mem_global { | 76 | struct ttm_mem_global { |
77 | struct kobject kobj; | ||
78 | struct ttm_mem_shrink *shrink; | 78 | struct ttm_mem_shrink *shrink; |
79 | struct workqueue_struct *swap_queue; | 79 | struct workqueue_struct *swap_queue; |
80 | struct work_struct work; | 80 | struct work_struct work; |
81 | wait_queue_head_t queue; | 81 | wait_queue_head_t queue; |
82 | spinlock_t lock; | 82 | spinlock_t lock; |
83 | uint64_t emer_memory; | 83 | struct ttm_mem_zone *zones[TTM_MEM_MAX_ZONES]; |
84 | uint64_t max_memory; | 84 | unsigned int num_zones; |
85 | uint64_t swap_limit; | 85 | struct ttm_mem_zone *zone_kernel; |
86 | uint64_t used_memory; | 86 | #ifdef CONFIG_HIGHMEM |
87 | uint64_t used_total_memory; | 87 | struct ttm_mem_zone *zone_highmem; |
88 | uint64_t total_memory_swap_limit; | 88 | #else |
89 | uint64_t max_total_memory; | 89 | struct ttm_mem_zone *zone_dma32; |
90 | uint64_t emer_total_memory; | 90 | #endif |
91 | }; | 91 | }; |
92 | 92 | ||
93 | /** | 93 | /** |
@@ -146,8 +146,13 @@ static inline void ttm_mem_unregister_shrink(struct ttm_mem_global *glob, | |||
146 | extern int ttm_mem_global_init(struct ttm_mem_global *glob); | 146 | extern int ttm_mem_global_init(struct ttm_mem_global *glob); |
147 | extern void ttm_mem_global_release(struct ttm_mem_global *glob); | 147 | extern void ttm_mem_global_release(struct ttm_mem_global *glob); |
148 | extern int ttm_mem_global_alloc(struct ttm_mem_global *glob, uint64_t memory, | 148 | extern int ttm_mem_global_alloc(struct ttm_mem_global *glob, uint64_t memory, |
149 | bool no_wait, bool interruptible, bool himem); | 149 | bool no_wait, bool interruptible); |
150 | extern void ttm_mem_global_free(struct ttm_mem_global *glob, | 150 | extern void ttm_mem_global_free(struct ttm_mem_global *glob, |
151 | uint64_t amount, bool himem); | 151 | uint64_t amount); |
152 | extern int ttm_mem_global_alloc_page(struct ttm_mem_global *glob, | ||
153 | struct page *page, | ||
154 | bool no_wait, bool interruptible); | ||
155 | extern void ttm_mem_global_free_page(struct ttm_mem_global *glob, | ||
156 | struct page *page); | ||
152 | extern size_t ttm_round_pot(size_t size); | 157 | extern size_t ttm_round_pot(size_t size); |
153 | #endif | 158 | #endif |
diff --git a/include/drm/ttm/ttm_module.h b/include/drm/ttm/ttm_module.h index 889a4c7958ae..cf416aee19af 100644 --- a/include/drm/ttm/ttm_module.h +++ b/include/drm/ttm/ttm_module.h | |||
@@ -32,8 +32,9 @@ | |||
32 | #define _TTM_MODULE_H_ | 32 | #define _TTM_MODULE_H_ |
33 | 33 | ||
34 | #include <linux/kernel.h> | 34 | #include <linux/kernel.h> |
35 | struct kobject; | ||
35 | 36 | ||
36 | #define TTM_PFX "[TTM]" | 37 | #define TTM_PFX "[TTM] " |
37 | 38 | ||
38 | enum ttm_global_types { | 39 | enum ttm_global_types { |
39 | TTM_GLOBAL_TTM_MEM = 0, | 40 | TTM_GLOBAL_TTM_MEM = 0, |
@@ -54,5 +55,6 @@ extern void ttm_global_init(void); | |||
54 | extern void ttm_global_release(void); | 55 | extern void ttm_global_release(void); |
55 | extern int ttm_global_item_ref(struct ttm_global_reference *ref); | 56 | extern int ttm_global_item_ref(struct ttm_global_reference *ref); |
56 | extern void ttm_global_item_unref(struct ttm_global_reference *ref); | 57 | extern void ttm_global_item_unref(struct ttm_global_reference *ref); |
58 | extern struct kobject *ttm_get_kobj(void); | ||
57 | 59 | ||
58 | #endif /* _TTM_MODULE_H_ */ | 60 | #endif /* _TTM_MODULE_H_ */ |
diff --git a/include/keys/rxrpc-type.h b/include/keys/rxrpc-type.h index 7609365577f1..5cb86c307f5d 100644 --- a/include/keys/rxrpc-type.h +++ b/include/keys/rxrpc-type.h | |||
@@ -21,4 +21,111 @@ extern struct key_type key_type_rxrpc; | |||
21 | 21 | ||
22 | extern struct key *rxrpc_get_null_key(const char *); | 22 | extern struct key *rxrpc_get_null_key(const char *); |
23 | 23 | ||
24 | /* | ||
25 | * RxRPC key for Kerberos IV (type-2 security) | ||
26 | */ | ||
27 | struct rxkad_key { | ||
28 | u32 vice_id; | ||
29 | u32 start; /* time at which ticket starts */ | ||
30 | u32 expiry; /* time at which ticket expires */ | ||
31 | u32 kvno; /* key version number */ | ||
32 | u8 primary_flag; /* T if key for primary cell for this user */ | ||
33 | u16 ticket_len; /* length of ticket[] */ | ||
34 | u8 session_key[8]; /* DES session key */ | ||
35 | u8 ticket[0]; /* the encrypted ticket */ | ||
36 | }; | ||
37 | |||
38 | /* | ||
39 | * Kerberos 5 principal | ||
40 | * name/name/name@realm | ||
41 | */ | ||
42 | struct krb5_principal { | ||
43 | u8 n_name_parts; /* N of parts of the name part of the principal */ | ||
44 | char **name_parts; /* parts of the name part of the principal */ | ||
45 | char *realm; /* parts of the realm part of the principal */ | ||
46 | }; | ||
47 | |||
48 | /* | ||
49 | * Kerberos 5 tagged data | ||
50 | */ | ||
51 | struct krb5_tagged_data { | ||
52 | /* for tag value, see /usr/include/krb5/krb5.h | ||
53 | * - KRB5_AUTHDATA_* for auth data | ||
54 | * - | ||
55 | */ | ||
56 | s32 tag; | ||
57 | u32 data_len; | ||
58 | u8 *data; | ||
59 | }; | ||
60 | |||
61 | /* | ||
62 | * RxRPC key for Kerberos V (type-5 security) | ||
63 | */ | ||
64 | struct rxk5_key { | ||
65 | u64 authtime; /* time at which auth token generated */ | ||
66 | u64 starttime; /* time at which auth token starts */ | ||
67 | u64 endtime; /* time at which auth token expired */ | ||
68 | u64 renew_till; /* time to which auth token can be renewed */ | ||
69 | s32 is_skey; /* T if ticket is encrypted in another ticket's | ||
70 | * skey */ | ||
71 | s32 flags; /* mask of TKT_FLG_* bits (krb5/krb5.h) */ | ||
72 | struct krb5_principal client; /* client principal name */ | ||
73 | struct krb5_principal server; /* server principal name */ | ||
74 | u16 ticket_len; /* length of ticket */ | ||
75 | u16 ticket2_len; /* length of second ticket */ | ||
76 | u8 n_authdata; /* number of authorisation data elements */ | ||
77 | u8 n_addresses; /* number of addresses */ | ||
78 | struct krb5_tagged_data session; /* session data; tag is enctype */ | ||
79 | struct krb5_tagged_data *addresses; /* addresses */ | ||
80 | u8 *ticket; /* krb5 ticket */ | ||
81 | u8 *ticket2; /* second krb5 ticket, if related to ticket (via | ||
82 | * DUPLICATE-SKEY or ENC-TKT-IN-SKEY) */ | ||
83 | struct krb5_tagged_data *authdata; /* authorisation data */ | ||
84 | }; | ||
85 | |||
86 | /* | ||
87 | * list of tokens attached to an rxrpc key | ||
88 | */ | ||
89 | struct rxrpc_key_token { | ||
90 | u16 security_index; /* RxRPC header security index */ | ||
91 | struct rxrpc_key_token *next; /* the next token in the list */ | ||
92 | union { | ||
93 | struct rxkad_key *kad; | ||
94 | struct rxk5_key *k5; | ||
95 | }; | ||
96 | }; | ||
97 | |||
98 | /* | ||
99 | * structure of raw payloads passed to add_key() or instantiate key | ||
100 | */ | ||
101 | struct rxrpc_key_data_v1 { | ||
102 | u32 kif_version; /* 1 */ | ||
103 | u16 security_index; | ||
104 | u16 ticket_length; | ||
105 | u32 expiry; /* time_t */ | ||
106 | u32 kvno; | ||
107 | u8 session_key[8]; | ||
108 | u8 ticket[0]; | ||
109 | }; | ||
110 | |||
111 | /* | ||
112 | * AF_RXRPC key payload derived from XDR format | ||
113 | * - based on openafs-1.4.10/src/auth/afs_token.xg | ||
114 | */ | ||
115 | #define AFSTOKEN_LENGTH_MAX 16384 /* max payload size */ | ||
116 | #define AFSTOKEN_STRING_MAX 256 /* max small string length */ | ||
117 | #define AFSTOKEN_DATA_MAX 64 /* max small data length */ | ||
118 | #define AFSTOKEN_CELL_MAX 64 /* max cellname length */ | ||
119 | #define AFSTOKEN_MAX 8 /* max tokens per payload */ | ||
120 | #define AFSTOKEN_BDATALN_MAX 16384 /* max big data length */ | ||
121 | #define AFSTOKEN_RK_TIX_MAX 12000 /* max RxKAD ticket size */ | ||
122 | #define AFSTOKEN_GK_KEY_MAX 64 /* max GSSAPI key size */ | ||
123 | #define AFSTOKEN_GK_TOKEN_MAX 16384 /* max GSSAPI token size */ | ||
124 | #define AFSTOKEN_K5_COMPONENTS_MAX 16 /* max K5 components */ | ||
125 | #define AFSTOKEN_K5_NAME_MAX 128 /* max K5 name length */ | ||
126 | #define AFSTOKEN_K5_REALM_MAX 64 /* max K5 realm name length */ | ||
127 | #define AFSTOKEN_K5_TIX_MAX 16384 /* max K5 ticket size */ | ||
128 | #define AFSTOKEN_K5_ADDRESSES_MAX 16 /* max K5 addresses */ | ||
129 | #define AFSTOKEN_K5_AUTHDATA_MAX 16 /* max K5 pieces of auth data */ | ||
130 | |||
24 | #endif /* _KEYS_RXRPC_TYPE_H */ | 131 | #endif /* _KEYS_RXRPC_TYPE_H */ |
diff --git a/include/linux/Kbuild b/include/linux/Kbuild index 334a3593cdfd..cff4a101f266 100644 --- a/include/linux/Kbuild +++ b/include/linux/Kbuild | |||
@@ -268,6 +268,10 @@ ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/include/asm/kvm.h \ | |||
268 | $(srctree)/include/asm-$(SRCARCH)/kvm.h),) | 268 | $(srctree)/include/asm-$(SRCARCH)/kvm.h),) |
269 | unifdef-y += kvm.h | 269 | unifdef-y += kvm.h |
270 | endif | 270 | endif |
271 | ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/include/asm/kvm_para.h \ | ||
272 | $(srctree)/include/asm-$(SRCARCH)/kvm_para.h),) | ||
273 | unifdef-y += kvm_para.h | ||
274 | endif | ||
271 | unifdef-y += llc.h | 275 | unifdef-y += llc.h |
272 | unifdef-y += loop.h | 276 | unifdef-y += loop.h |
273 | unifdef-y += lp.h | 277 | unifdef-y += lp.h |
diff --git a/include/linux/agp_backend.h b/include/linux/agp_backend.h index 76fa794fdac0..880130f7311f 100644 --- a/include/linux/agp_backend.h +++ b/include/linux/agp_backend.h | |||
@@ -79,9 +79,12 @@ struct agp_memory { | |||
79 | u32 physical; | 79 | u32 physical; |
80 | bool is_bound; | 80 | bool is_bound; |
81 | bool is_flushed; | 81 | bool is_flushed; |
82 | bool vmalloc_flag; | 82 | bool vmalloc_flag; |
83 | /* list of agp_memory mapped to the aperture */ | 83 | /* list of agp_memory mapped to the aperture */ |
84 | struct list_head mapped_list; | 84 | struct list_head mapped_list; |
85 | /* DMA-mapped addresses */ | ||
86 | struct scatterlist *sg_list; | ||
87 | int num_sg; | ||
85 | }; | 88 | }; |
86 | 89 | ||
87 | #define AGP_NORMAL_MEMORY 0 | 90 | #define AGP_NORMAL_MEMORY 0 |
diff --git a/include/linux/aio.h b/include/linux/aio.h index b16a957030f8..aea219d7d8d1 100644 --- a/include/linux/aio.h +++ b/include/linux/aio.h | |||
@@ -121,9 +121,9 @@ struct kiocb { | |||
121 | 121 | ||
122 | /* | 122 | /* |
123 | * If the aio_resfd field of the userspace iocb is not zero, | 123 | * If the aio_resfd field of the userspace iocb is not zero, |
124 | * this is the underlying file* to deliver event to. | 124 | * this is the underlying eventfd context to deliver events to. |
125 | */ | 125 | */ |
126 | struct file *ki_eventfd; | 126 | struct eventfd_ctx *ki_eventfd; |
127 | }; | 127 | }; |
128 | 128 | ||
129 | #define is_sync_kiocb(iocb) ((iocb)->ki_key == KIOCB_SYNC_KEY) | 129 | #define is_sync_kiocb(iocb) ((iocb)->ki_key == KIOCB_SYNC_KEY) |
@@ -225,8 +225,6 @@ static inline void exit_aio(struct mm_struct *mm) { } | |||
225 | 225 | ||
226 | #define io_wait_to_kiocb(wait) container_of(wait, struct kiocb, ki_wait) | 226 | #define io_wait_to_kiocb(wait) container_of(wait, struct kiocb, ki_wait) |
227 | 227 | ||
228 | #include <linux/aio_abi.h> | ||
229 | |||
230 | static inline struct kiocb *list_kiocb(struct list_head *h) | 228 | static inline struct kiocb *list_kiocb(struct list_head *h) |
231 | { | 229 | { |
232 | return list_entry(h, struct kiocb, ki_list); | 230 | return list_entry(h, struct kiocb, ki_list); |
diff --git a/include/linux/amba/bus.h b/include/linux/amba/bus.h index 9b93cafa82a0..ab94335b4bb9 100644 --- a/include/linux/amba/bus.h +++ b/include/linux/amba/bus.h | |||
@@ -36,6 +36,11 @@ struct amba_driver { | |||
36 | struct amba_id *id_table; | 36 | struct amba_id *id_table; |
37 | }; | 37 | }; |
38 | 38 | ||
39 | enum amba_vendor { | ||
40 | AMBA_VENDOR_ARM = 0x41, | ||
41 | AMBA_VENDOR_ST = 0x80, | ||
42 | }; | ||
43 | |||
39 | #define amba_get_drvdata(d) dev_get_drvdata(&d->dev) | 44 | #define amba_get_drvdata(d) dev_get_drvdata(&d->dev) |
40 | #define amba_set_drvdata(d,p) dev_set_drvdata(&d->dev, p) | 45 | #define amba_set_drvdata(d,p) dev_set_drvdata(&d->dev, p) |
41 | 46 | ||
diff --git a/include/linux/amba/pl093.h b/include/linux/amba/pl093.h new file mode 100644 index 000000000000..2983e3671adb --- /dev/null +++ b/include/linux/amba/pl093.h | |||
@@ -0,0 +1,80 @@ | |||
1 | /* linux/amba/pl093.h | ||
2 | * | ||
3 | * Copyright (c) 2008 Simtec Electronics | ||
4 | * http://armlinux.simtec.co.uk/ | ||
5 | * Ben Dooks <ben@simtec.co.uk> | ||
6 | * | ||
7 | * AMBA PL093 SSMC (synchronous static memory controller) | ||
8 | * See DDI0236.pdf (r0p4) for more details | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify | ||
11 | * it under the terms of the GNU General Public License version 2 as | ||
12 | * published by the Free Software Foundation. | ||
13 | */ | ||
14 | |||
15 | #define SMB_BANK(x) ((x) * 0x20) /* each bank control set is 0x20 apart */ | ||
16 | |||
17 | /* Offsets for SMBxxxxRy registers */ | ||
18 | |||
19 | #define SMBIDCYR (0x00) | ||
20 | #define SMBWSTRDR (0x04) | ||
21 | #define SMBWSTWRR (0x08) | ||
22 | #define SMBWSTOENR (0x0C) | ||
23 | #define SMBWSTWENR (0x10) | ||
24 | #define SMBCR (0x14) | ||
25 | #define SMBSR (0x18) | ||
26 | #define SMBWSTBRDR (0x1C) | ||
27 | |||
28 | /* Masks for SMB registers */ | ||
29 | #define IDCY_MASK (0xf) | ||
30 | #define WSTRD_MASK (0xf) | ||
31 | #define WSTWR_MASK (0xf) | ||
32 | #define WSTOEN_MASK (0xf) | ||
33 | #define WSTWEN_MASK (0xf) | ||
34 | |||
35 | /* Notes from datasheet: | ||
36 | * WSTOEN <= WSTRD | ||
37 | * WSTWEN <= WSTWR | ||
38 | * | ||
39 | * WSTOEN is not used with nWAIT | ||
40 | */ | ||
41 | |||
42 | /* SMBCR bit definitions */ | ||
43 | #define SMBCR_BIWRITEEN (1 << 21) | ||
44 | #define SMBCR_ADDRVALIDWRITEEN (1 << 20) | ||
45 | #define SMBCR_SYNCWRITE (1 << 17) | ||
46 | #define SMBCR_BMWRITE (1 << 16) | ||
47 | #define SMBCR_WRAPREAD (1 << 14) | ||
48 | #define SMBCR_BIREADEN (1 << 13) | ||
49 | #define SMBCR_ADDRVALIDREADEN (1 << 12) | ||
50 | #define SMBCR_SYNCREAD (1 << 9) | ||
51 | #define SMBCR_BMREAD (1 << 8) | ||
52 | #define SMBCR_SMBLSPOL (1 << 6) | ||
53 | #define SMBCR_WP (1 << 3) | ||
54 | #define SMBCR_WAITEN (1 << 2) | ||
55 | #define SMBCR_WAITPOL (1 << 1) | ||
56 | #define SMBCR_RBLE (1 << 0) | ||
57 | |||
58 | #define SMBCR_BURSTLENWRITE_MASK (3 << 18) | ||
59 | #define SMBCR_BURSTLENWRITE_4 (0 << 18) | ||
60 | #define SMBCR_BURSTLENWRITE_8 (1 << 18) | ||
61 | #define SMBCR_BURSTLENWRITE_RESERVED (2 << 18) | ||
62 | #define SMBCR_BURSTLENWRITE_CONTINUOUS (3 << 18) | ||
63 | |||
64 | #define SMBCR_BURSTLENREAD_MASK (3 << 10) | ||
65 | #define SMBCR_BURSTLENREAD_4 (0 << 10) | ||
66 | #define SMBCR_BURSTLENREAD_8 (1 << 10) | ||
67 | #define SMBCR_BURSTLENREAD_16 (2 << 10) | ||
68 | #define SMBCR_BURSTLENREAD_CONTINUOUS (3 << 10) | ||
69 | |||
70 | #define SMBCR_MW_MASK (3 << 4) | ||
71 | #define SMBCR_MW_8BIT (0 << 4) | ||
72 | #define SMBCR_MW_16BIT (1 << 4) | ||
73 | #define SMBCR_MW_M32BIT (2 << 4) | ||
74 | |||
75 | /* SSMC status registers */ | ||
76 | #define SSMCCSR (0x200) | ||
77 | #define SSMCCR (0x204) | ||
78 | #define SSMCITCR (0x208) | ||
79 | #define SSMCITIP (0x20C) | ||
80 | #define SSMCITIOP (0x210) | ||
diff --git a/include/linux/arcdevice.h b/include/linux/arcdevice.h index cd4bcb6989ce..7d650a0e3d8f 100644 --- a/include/linux/arcdevice.h +++ b/include/linux/arcdevice.h | |||
@@ -337,7 +337,8 @@ struct net_device *alloc_arcdev(const char *name); | |||
337 | 337 | ||
338 | int arcnet_open(struct net_device *dev); | 338 | int arcnet_open(struct net_device *dev); |
339 | int arcnet_close(struct net_device *dev); | 339 | int arcnet_close(struct net_device *dev); |
340 | int arcnet_send_packet(struct sk_buff *skb, struct net_device *dev); | 340 | netdev_tx_t arcnet_send_packet(struct sk_buff *skb, |
341 | struct net_device *dev); | ||
341 | void arcnet_timeout(struct net_device *dev); | 342 | void arcnet_timeout(struct net_device *dev); |
342 | 343 | ||
343 | #endif /* __KERNEL__ */ | 344 | #endif /* __KERNEL__ */ |
diff --git a/include/linux/ata.h b/include/linux/ata.h index 9c75921f0c16..6299a259ed19 100644 --- a/include/linux/ata.h +++ b/include/linux/ata.h | |||
@@ -210,15 +210,25 @@ enum { | |||
210 | ATA_CMD_STANDBY = 0xE2, /* place in standby power mode */ | 210 | ATA_CMD_STANDBY = 0xE2, /* place in standby power mode */ |
211 | ATA_CMD_IDLE = 0xE3, /* place in idle power mode */ | 211 | ATA_CMD_IDLE = 0xE3, /* place in idle power mode */ |
212 | ATA_CMD_EDD = 0x90, /* execute device diagnostic */ | 212 | ATA_CMD_EDD = 0x90, /* execute device diagnostic */ |
213 | ATA_CMD_DOWNLOAD_MICRO = 0x92, | ||
214 | ATA_CMD_NOP = 0x00, | ||
213 | ATA_CMD_FLUSH = 0xE7, | 215 | ATA_CMD_FLUSH = 0xE7, |
214 | ATA_CMD_FLUSH_EXT = 0xEA, | 216 | ATA_CMD_FLUSH_EXT = 0xEA, |
215 | ATA_CMD_ID_ATA = 0xEC, | 217 | ATA_CMD_ID_ATA = 0xEC, |
216 | ATA_CMD_ID_ATAPI = 0xA1, | 218 | ATA_CMD_ID_ATAPI = 0xA1, |
219 | ATA_CMD_SERVICE = 0xA2, | ||
217 | ATA_CMD_READ = 0xC8, | 220 | ATA_CMD_READ = 0xC8, |
218 | ATA_CMD_READ_EXT = 0x25, | 221 | ATA_CMD_READ_EXT = 0x25, |
222 | ATA_CMD_READ_QUEUED = 0x26, | ||
223 | ATA_CMD_READ_STREAM_EXT = 0x2B, | ||
224 | ATA_CMD_READ_STREAM_DMA_EXT = 0x2A, | ||
219 | ATA_CMD_WRITE = 0xCA, | 225 | ATA_CMD_WRITE = 0xCA, |
220 | ATA_CMD_WRITE_EXT = 0x35, | 226 | ATA_CMD_WRITE_EXT = 0x35, |
227 | ATA_CMD_WRITE_QUEUED = 0x36, | ||
228 | ATA_CMD_WRITE_STREAM_EXT = 0x3B, | ||
229 | ATA_CMD_WRITE_STREAM_DMA_EXT = 0x3A, | ||
221 | ATA_CMD_WRITE_FUA_EXT = 0x3D, | 230 | ATA_CMD_WRITE_FUA_EXT = 0x3D, |
231 | ATA_CMD_WRITE_QUEUED_FUA_EXT = 0x3E, | ||
222 | ATA_CMD_FPDMA_READ = 0x60, | 232 | ATA_CMD_FPDMA_READ = 0x60, |
223 | ATA_CMD_FPDMA_WRITE = 0x61, | 233 | ATA_CMD_FPDMA_WRITE = 0x61, |
224 | ATA_CMD_PIO_READ = 0x20, | 234 | ATA_CMD_PIO_READ = 0x20, |
@@ -235,6 +245,7 @@ enum { | |||
235 | ATA_CMD_PACKET = 0xA0, | 245 | ATA_CMD_PACKET = 0xA0, |
236 | ATA_CMD_VERIFY = 0x40, | 246 | ATA_CMD_VERIFY = 0x40, |
237 | ATA_CMD_VERIFY_EXT = 0x42, | 247 | ATA_CMD_VERIFY_EXT = 0x42, |
248 | ATA_CMD_WRITE_UNCORR_EXT = 0x45, | ||
238 | ATA_CMD_STANDBYNOW1 = 0xE0, | 249 | ATA_CMD_STANDBYNOW1 = 0xE0, |
239 | ATA_CMD_IDLEIMMEDIATE = 0xE1, | 250 | ATA_CMD_IDLEIMMEDIATE = 0xE1, |
240 | ATA_CMD_SLEEP = 0xE6, | 251 | ATA_CMD_SLEEP = 0xE6, |
@@ -243,15 +254,34 @@ enum { | |||
243 | ATA_CMD_READ_NATIVE_MAX_EXT = 0x27, | 254 | ATA_CMD_READ_NATIVE_MAX_EXT = 0x27, |
244 | ATA_CMD_SET_MAX = 0xF9, | 255 | ATA_CMD_SET_MAX = 0xF9, |
245 | ATA_CMD_SET_MAX_EXT = 0x37, | 256 | ATA_CMD_SET_MAX_EXT = 0x37, |
246 | ATA_CMD_READ_LOG_EXT = 0x2f, | 257 | ATA_CMD_READ_LOG_EXT = 0x2F, |
258 | ATA_CMD_WRITE_LOG_EXT = 0x3F, | ||
259 | ATA_CMD_READ_LOG_DMA_EXT = 0x47, | ||
260 | ATA_CMD_WRITE_LOG_DMA_EXT = 0x57, | ||
261 | ATA_CMD_TRUSTED_RCV = 0x5C, | ||
262 | ATA_CMD_TRUSTED_RCV_DMA = 0x5D, | ||
263 | ATA_CMD_TRUSTED_SND = 0x5E, | ||
264 | ATA_CMD_TRUSTED_SND_DMA = 0x5F, | ||
247 | ATA_CMD_PMP_READ = 0xE4, | 265 | ATA_CMD_PMP_READ = 0xE4, |
248 | ATA_CMD_PMP_WRITE = 0xE8, | 266 | ATA_CMD_PMP_WRITE = 0xE8, |
249 | ATA_CMD_CONF_OVERLAY = 0xB1, | 267 | ATA_CMD_CONF_OVERLAY = 0xB1, |
268 | ATA_CMD_SEC_SET_PASS = 0xF1, | ||
269 | ATA_CMD_SEC_UNLOCK = 0xF2, | ||
270 | ATA_CMD_SEC_ERASE_PREP = 0xF3, | ||
271 | ATA_CMD_SEC_ERASE_UNIT = 0xF4, | ||
250 | ATA_CMD_SEC_FREEZE_LOCK = 0xF5, | 272 | ATA_CMD_SEC_FREEZE_LOCK = 0xF5, |
273 | ATA_CMD_SEC_DISABLE_PASS = 0xF6, | ||
274 | ATA_CMD_CONFIG_STREAM = 0x51, | ||
251 | ATA_CMD_SMART = 0xB0, | 275 | ATA_CMD_SMART = 0xB0, |
252 | ATA_CMD_MEDIA_LOCK = 0xDE, | 276 | ATA_CMD_MEDIA_LOCK = 0xDE, |
253 | ATA_CMD_MEDIA_UNLOCK = 0xDF, | 277 | ATA_CMD_MEDIA_UNLOCK = 0xDF, |
254 | ATA_CMD_DSM = 0x06, | 278 | ATA_CMD_DSM = 0x06, |
279 | ATA_CMD_CHK_MED_CRD_TYP = 0xD1, | ||
280 | ATA_CMD_CFA_REQ_EXT_ERR = 0x03, | ||
281 | ATA_CMD_CFA_WRITE_NE = 0x38, | ||
282 | ATA_CMD_CFA_TRANS_SECT = 0x87, | ||
283 | ATA_CMD_CFA_ERASE = 0xC0, | ||
284 | ATA_CMD_CFA_WRITE_MULT_NE = 0xCD, | ||
255 | /* marked obsolete in the ATA/ATAPI-7 spec */ | 285 | /* marked obsolete in the ATA/ATAPI-7 spec */ |
256 | ATA_CMD_RESTORE = 0x10, | 286 | ATA_CMD_RESTORE = 0x10, |
257 | 287 | ||
@@ -306,6 +336,7 @@ enum { | |||
306 | /* SETFEATURE Sector counts for SATA features */ | 336 | /* SETFEATURE Sector counts for SATA features */ |
307 | SATA_AN = 0x05, /* Asynchronous Notification */ | 337 | SATA_AN = 0x05, /* Asynchronous Notification */ |
308 | SATA_DIPM = 0x03, /* Device Initiated Power Management */ | 338 | SATA_DIPM = 0x03, /* Device Initiated Power Management */ |
339 | SATA_FPDMA_AA = 0x02, /* DMA Setup FIS Auto-Activate */ | ||
309 | 340 | ||
310 | /* feature values for SET_MAX */ | 341 | /* feature values for SET_MAX */ |
311 | ATA_SET_MAX_ADDR = 0x00, | 342 | ATA_SET_MAX_ADDR = 0x00, |
@@ -525,6 +556,9 @@ static inline int ata_is_data(u8 prot) | |||
525 | #define ata_id_has_atapi_AN(id) \ | 556 | #define ata_id_has_atapi_AN(id) \ |
526 | ( (((id)[76] != 0x0000) && ((id)[76] != 0xffff)) && \ | 557 | ( (((id)[76] != 0x0000) && ((id)[76] != 0xffff)) && \ |
527 | ((id)[78] & (1 << 5)) ) | 558 | ((id)[78] & (1 << 5)) ) |
559 | #define ata_id_has_fpdma_aa(id) \ | ||
560 | ( (((id)[76] != 0x0000) && ((id)[76] != 0xffff)) && \ | ||
561 | ((id)[78] & (1 << 2)) ) | ||
528 | #define ata_id_iordy_disable(id) ((id)[ATA_ID_CAPABILITY] & (1 << 10)) | 562 | #define ata_id_iordy_disable(id) ((id)[ATA_ID_CAPABILITY] & (1 << 10)) |
529 | #define ata_id_has_iordy(id) ((id)[ATA_ID_CAPABILITY] & (1 << 11)) | 563 | #define ata_id_has_iordy(id) ((id)[ATA_ID_CAPABILITY] & (1 << 11)) |
530 | #define ata_id_u32(id,n) \ | 564 | #define ata_id_u32(id,n) \ |
diff --git a/include/linux/attribute_container.h b/include/linux/attribute_container.h index 794ad74b1d61..c3ab81428c66 100644 --- a/include/linux/attribute_container.h +++ b/include/linux/attribute_container.h | |||
@@ -17,7 +17,7 @@ struct attribute_container { | |||
17 | struct list_head node; | 17 | struct list_head node; |
18 | struct klist containers; | 18 | struct klist containers; |
19 | struct class *class; | 19 | struct class *class; |
20 | struct attribute_group *grp; | 20 | const struct attribute_group *grp; |
21 | struct device_attribute **attrs; | 21 | struct device_attribute **attrs; |
22 | int (*match)(struct attribute_container *, struct device *); | 22 | int (*match)(struct attribute_container *, struct device *); |
23 | #define ATTRIBUTE_CONTAINER_NO_CLASSDEVS 0x01 | 23 | #define ATTRIBUTE_CONTAINER_NO_CLASSDEVS 0x01 |
diff --git a/include/linux/backing-dev.h b/include/linux/backing-dev.h index 0ec2c594868e..0ee33c2e6129 100644 --- a/include/linux/backing-dev.h +++ b/include/linux/backing-dev.h | |||
@@ -13,6 +13,8 @@ | |||
13 | #include <linux/proportions.h> | 13 | #include <linux/proportions.h> |
14 | #include <linux/kernel.h> | 14 | #include <linux/kernel.h> |
15 | #include <linux/fs.h> | 15 | #include <linux/fs.h> |
16 | #include <linux/sched.h> | ||
17 | #include <linux/writeback.h> | ||
16 | #include <asm/atomic.h> | 18 | #include <asm/atomic.h> |
17 | 19 | ||
18 | struct page; | 20 | struct page; |
@@ -23,9 +25,11 @@ struct dentry; | |||
23 | * Bits in backing_dev_info.state | 25 | * Bits in backing_dev_info.state |
24 | */ | 26 | */ |
25 | enum bdi_state { | 27 | enum bdi_state { |
26 | BDI_pdflush, /* A pdflush thread is working this device */ | 28 | BDI_pending, /* On its way to being activated */ |
29 | BDI_wb_alloc, /* Default embedded wb allocated */ | ||
27 | BDI_async_congested, /* The async (write) queue is getting full */ | 30 | BDI_async_congested, /* The async (write) queue is getting full */ |
28 | BDI_sync_congested, /* The sync queue is getting full */ | 31 | BDI_sync_congested, /* The sync queue is getting full */ |
32 | BDI_registered, /* bdi_register() was done */ | ||
29 | BDI_unused, /* Available bits start here */ | 33 | BDI_unused, /* Available bits start here */ |
30 | }; | 34 | }; |
31 | 35 | ||
@@ -39,7 +43,23 @@ enum bdi_stat_item { | |||
39 | 43 | ||
40 | #define BDI_STAT_BATCH (8*(1+ilog2(nr_cpu_ids))) | 44 | #define BDI_STAT_BATCH (8*(1+ilog2(nr_cpu_ids))) |
41 | 45 | ||
46 | struct bdi_writeback { | ||
47 | struct list_head list; /* hangs off the bdi */ | ||
48 | |||
49 | struct backing_dev_info *bdi; /* our parent bdi */ | ||
50 | unsigned int nr; | ||
51 | |||
52 | unsigned long last_old_flush; /* last old data flush */ | ||
53 | |||
54 | struct task_struct *task; /* writeback task */ | ||
55 | struct list_head b_dirty; /* dirty inodes */ | ||
56 | struct list_head b_io; /* parked for writeback */ | ||
57 | struct list_head b_more_io; /* parked for more writeback */ | ||
58 | }; | ||
59 | |||
42 | struct backing_dev_info { | 60 | struct backing_dev_info { |
61 | struct list_head bdi_list; | ||
62 | struct rcu_head rcu_head; | ||
43 | unsigned long ra_pages; /* max readahead in PAGE_CACHE_SIZE units */ | 63 | unsigned long ra_pages; /* max readahead in PAGE_CACHE_SIZE units */ |
44 | unsigned long state; /* Always use atomic bitops on this */ | 64 | unsigned long state; /* Always use atomic bitops on this */ |
45 | unsigned int capabilities; /* Device capabilities */ | 65 | unsigned int capabilities; /* Device capabilities */ |
@@ -48,6 +68,8 @@ struct backing_dev_info { | |||
48 | void (*unplug_io_fn)(struct backing_dev_info *, struct page *); | 68 | void (*unplug_io_fn)(struct backing_dev_info *, struct page *); |
49 | void *unplug_io_data; | 69 | void *unplug_io_data; |
50 | 70 | ||
71 | char *name; | ||
72 | |||
51 | struct percpu_counter bdi_stat[NR_BDI_STAT_ITEMS]; | 73 | struct percpu_counter bdi_stat[NR_BDI_STAT_ITEMS]; |
52 | 74 | ||
53 | struct prop_local_percpu completions; | 75 | struct prop_local_percpu completions; |
@@ -56,6 +78,14 @@ struct backing_dev_info { | |||
56 | unsigned int min_ratio; | 78 | unsigned int min_ratio; |
57 | unsigned int max_ratio, max_prop_frac; | 79 | unsigned int max_ratio, max_prop_frac; |
58 | 80 | ||
81 | struct bdi_writeback wb; /* default writeback info for this bdi */ | ||
82 | spinlock_t wb_lock; /* protects update side of wb_list */ | ||
83 | struct list_head wb_list; /* the flusher threads hanging off this bdi */ | ||
84 | unsigned long wb_mask; /* bitmask of registered tasks */ | ||
85 | unsigned int wb_cnt; /* number of registered tasks */ | ||
86 | |||
87 | struct list_head work_list; | ||
88 | |||
59 | struct device *dev; | 89 | struct device *dev; |
60 | 90 | ||
61 | #ifdef CONFIG_DEBUG_FS | 91 | #ifdef CONFIG_DEBUG_FS |
@@ -71,6 +101,19 @@ int bdi_register(struct backing_dev_info *bdi, struct device *parent, | |||
71 | const char *fmt, ...); | 101 | const char *fmt, ...); |
72 | int bdi_register_dev(struct backing_dev_info *bdi, dev_t dev); | 102 | int bdi_register_dev(struct backing_dev_info *bdi, dev_t dev); |
73 | void bdi_unregister(struct backing_dev_info *bdi); | 103 | void bdi_unregister(struct backing_dev_info *bdi); |
104 | void bdi_start_writeback(struct backing_dev_info *bdi, long nr_pages); | ||
105 | int bdi_writeback_task(struct bdi_writeback *wb); | ||
106 | int bdi_has_dirty_io(struct backing_dev_info *bdi); | ||
107 | |||
108 | extern spinlock_t bdi_lock; | ||
109 | extern struct list_head bdi_list; | ||
110 | |||
111 | static inline int wb_has_dirty_io(struct bdi_writeback *wb) | ||
112 | { | ||
113 | return !list_empty(&wb->b_dirty) || | ||
114 | !list_empty(&wb->b_io) || | ||
115 | !list_empty(&wb->b_more_io); | ||
116 | } | ||
74 | 117 | ||
75 | static inline void __add_bdi_stat(struct backing_dev_info *bdi, | 118 | static inline void __add_bdi_stat(struct backing_dev_info *bdi, |
76 | enum bdi_stat_item item, s64 amount) | 119 | enum bdi_stat_item item, s64 amount) |
@@ -229,9 +272,14 @@ static inline int bdi_rw_congested(struct backing_dev_info *bdi) | |||
229 | (1 << BDI_async_congested)); | 272 | (1 << BDI_async_congested)); |
230 | } | 273 | } |
231 | 274 | ||
232 | void clear_bdi_congested(struct backing_dev_info *bdi, int rw); | 275 | enum { |
233 | void set_bdi_congested(struct backing_dev_info *bdi, int rw); | 276 | BLK_RW_ASYNC = 0, |
234 | long congestion_wait(int rw, long timeout); | 277 | BLK_RW_SYNC = 1, |
278 | }; | ||
279 | |||
280 | void clear_bdi_congested(struct backing_dev_info *bdi, int sync); | ||
281 | void set_bdi_congested(struct backing_dev_info *bdi, int sync); | ||
282 | long congestion_wait(int sync, long timeout); | ||
235 | 283 | ||
236 | 284 | ||
237 | static inline bool bdi_cap_writeback_dirty(struct backing_dev_info *bdi) | 285 | static inline bool bdi_cap_writeback_dirty(struct backing_dev_info *bdi) |
@@ -256,6 +304,11 @@ static inline bool bdi_cap_swap_backed(struct backing_dev_info *bdi) | |||
256 | return bdi->capabilities & BDI_CAP_SWAP_BACKED; | 304 | return bdi->capabilities & BDI_CAP_SWAP_BACKED; |
257 | } | 305 | } |
258 | 306 | ||
307 | static inline bool bdi_cap_flush_forker(struct backing_dev_info *bdi) | ||
308 | { | ||
309 | return bdi == &default_backing_dev_info; | ||
310 | } | ||
311 | |||
259 | static inline bool mapping_cap_writeback_dirty(struct address_space *mapping) | 312 | static inline bool mapping_cap_writeback_dirty(struct address_space *mapping) |
260 | { | 313 | { |
261 | return bdi_cap_writeback_dirty(mapping->backing_dev_info); | 314 | return bdi_cap_writeback_dirty(mapping->backing_dev_info); |
@@ -271,4 +324,10 @@ static inline bool mapping_cap_swap_backed(struct address_space *mapping) | |||
271 | return bdi_cap_swap_backed(mapping->backing_dev_info); | 324 | return bdi_cap_swap_backed(mapping->backing_dev_info); |
272 | } | 325 | } |
273 | 326 | ||
327 | static inline int bdi_sched_wait(void *word) | ||
328 | { | ||
329 | schedule(); | ||
330 | return 0; | ||
331 | } | ||
332 | |||
274 | #endif /* _LINUX_BACKING_DEV_H */ | 333 | #endif /* _LINUX_BACKING_DEV_H */ |
diff --git a/include/linux/binfmts.h b/include/linux/binfmts.h index 61ee18c1bdb4..2046b5b8af48 100644 --- a/include/linux/binfmts.h +++ b/include/linux/binfmts.h | |||
@@ -117,6 +117,7 @@ extern int setup_arg_pages(struct linux_binprm * bprm, | |||
117 | int executable_stack); | 117 | int executable_stack); |
118 | extern int bprm_mm_init(struct linux_binprm *bprm); | 118 | extern int bprm_mm_init(struct linux_binprm *bprm); |
119 | extern int copy_strings_kernel(int argc,char ** argv,struct linux_binprm *bprm); | 119 | extern int copy_strings_kernel(int argc,char ** argv,struct linux_binprm *bprm); |
120 | extern int prepare_bprm_creds(struct linux_binprm *bprm); | ||
120 | extern void install_exec_creds(struct linux_binprm *bprm); | 121 | extern void install_exec_creds(struct linux_binprm *bprm); |
121 | extern void do_coredump(long signr, int exit_code, struct pt_regs *regs); | 122 | extern void do_coredump(long signr, int exit_code, struct pt_regs *regs); |
122 | extern int set_binfmt(struct linux_binfmt *new); | 123 | extern int set_binfmt(struct linux_binfmt *new); |
diff --git a/include/linux/bio.h b/include/linux/bio.h index 2a04eb54c0dd..5be93f18d842 100644 --- a/include/linux/bio.h +++ b/include/linux/bio.h | |||
@@ -142,56 +142,51 @@ struct bio { | |||
142 | * | 142 | * |
143 | * bit 0 -- data direction | 143 | * bit 0 -- data direction |
144 | * If not set, bio is a read from device. If set, it's a write to device. | 144 | * If not set, bio is a read from device. If set, it's a write to device. |
145 | * bit 1 -- rw-ahead when set | 145 | * bit 1 -- fail fast device errors |
146 | * bit 2 -- barrier | 146 | * bit 2 -- fail fast transport errors |
147 | * bit 3 -- fail fast driver errors | ||
148 | * bit 4 -- rw-ahead when set | ||
149 | * bit 5 -- barrier | ||
147 | * Insert a serialization point in the IO queue, forcing previously | 150 | * Insert a serialization point in the IO queue, forcing previously |
148 | * submitted IO to be completed before this one is issued. | 151 | * submitted IO to be completed before this one is issued. |
149 | * bit 3 -- synchronous I/O hint. | 152 | * bit 6 -- synchronous I/O hint. |
150 | * bit 4 -- Unplug the device immediately after submitting this bio. | 153 | * bit 7 -- Unplug the device immediately after submitting this bio. |
151 | * bit 5 -- metadata request | 154 | * bit 8 -- metadata request |
152 | * Used for tracing to differentiate metadata and data IO. May also | 155 | * Used for tracing to differentiate metadata and data IO. May also |
153 | * get some preferential treatment in the IO scheduler | 156 | * get some preferential treatment in the IO scheduler |
154 | * bit 6 -- discard sectors | 157 | * bit 9 -- discard sectors |
155 | * Informs the lower level device that this range of sectors is no longer | 158 | * Informs the lower level device that this range of sectors is no longer |
156 | * used by the file system and may thus be freed by the device. Used | 159 | * used by the file system and may thus be freed by the device. Used |
157 | * for flash based storage. | 160 | * for flash based storage. |
158 | * bit 7 -- fail fast device errors | ||
159 | * bit 8 -- fail fast transport errors | ||
160 | * bit 9 -- fail fast driver errors | ||
161 | * Don't want driver retries for any fast fail whatever the reason. | 161 | * Don't want driver retries for any fast fail whatever the reason. |
162 | * bit 10 -- Tell the IO scheduler not to wait for more requests after this | 162 | * bit 10 -- Tell the IO scheduler not to wait for more requests after this |
163 | one has been submitted, even if it is a SYNC request. | 163 | one has been submitted, even if it is a SYNC request. |
164 | */ | 164 | */ |
165 | #define BIO_RW 0 /* Must match RW in req flags (blkdev.h) */ | 165 | enum bio_rw_flags { |
166 | #define BIO_RW_AHEAD 1 /* Must match FAILFAST in req flags */ | 166 | BIO_RW, |
167 | #define BIO_RW_BARRIER 2 | 167 | BIO_RW_FAILFAST_DEV, |
168 | #define BIO_RW_SYNCIO 3 | 168 | BIO_RW_FAILFAST_TRANSPORT, |
169 | #define BIO_RW_UNPLUG 4 | 169 | BIO_RW_FAILFAST_DRIVER, |
170 | #define BIO_RW_META 5 | 170 | /* above flags must match REQ_* */ |
171 | #define BIO_RW_DISCARD 6 | 171 | BIO_RW_AHEAD, |
172 | #define BIO_RW_FAILFAST_DEV 7 | 172 | BIO_RW_BARRIER, |
173 | #define BIO_RW_FAILFAST_TRANSPORT 8 | 173 | BIO_RW_SYNCIO, |
174 | #define BIO_RW_FAILFAST_DRIVER 9 | 174 | BIO_RW_UNPLUG, |
175 | #define BIO_RW_NOIDLE 10 | 175 | BIO_RW_META, |
176 | 176 | BIO_RW_DISCARD, | |
177 | #define bio_rw_flagged(bio, flag) ((bio)->bi_rw & (1 << (flag))) | 177 | BIO_RW_NOIDLE, |
178 | }; | ||
178 | 179 | ||
179 | /* | 180 | /* |
180 | * Old defines, these should eventually be replaced by direct usage of | 181 | * First four bits must match between bio->bi_rw and rq->cmd_flags, make |
181 | * bio_rw_flagged() | 182 | * that explicit here. |
182 | */ | 183 | */ |
183 | #define bio_barrier(bio) bio_rw_flagged(bio, BIO_RW_BARRIER) | 184 | #define BIO_RW_RQ_MASK 0xf |
184 | #define bio_sync(bio) bio_rw_flagged(bio, BIO_RW_SYNCIO) | 185 | |
185 | #define bio_unplug(bio) bio_rw_flagged(bio, BIO_RW_UNPLUG) | 186 | static inline bool bio_rw_flagged(struct bio *bio, enum bio_rw_flags flag) |
186 | #define bio_failfast_dev(bio) bio_rw_flagged(bio, BIO_RW_FAILFAST_DEV) | 187 | { |
187 | #define bio_failfast_transport(bio) \ | 188 | return (bio->bi_rw & (1 << flag)) != 0; |
188 | bio_rw_flagged(bio, BIO_RW_FAILFAST_TRANSPORT) | 189 | } |
189 | #define bio_failfast_driver(bio) \ | ||
190 | bio_rw_flagged(bio, BIO_RW_FAILFAST_DRIVER) | ||
191 | #define bio_rw_ahead(bio) bio_rw_flagged(bio, BIO_RW_AHEAD) | ||
192 | #define bio_rw_meta(bio) bio_rw_flagged(bio, BIO_RW_META) | ||
193 | #define bio_discard(bio) bio_rw_flagged(bio, BIO_RW_DISCARD) | ||
194 | #define bio_noidle(bio) bio_rw_flagged(bio, BIO_RW_NOIDLE) | ||
195 | 190 | ||
196 | /* | 191 | /* |
197 | * upper 16 bits of bi_rw define the io priority of this bio | 192 | * upper 16 bits of bi_rw define the io priority of this bio |
@@ -216,7 +211,7 @@ struct bio { | |||
216 | #define bio_offset(bio) bio_iovec((bio))->bv_offset | 211 | #define bio_offset(bio) bio_iovec((bio))->bv_offset |
217 | #define bio_segments(bio) ((bio)->bi_vcnt - (bio)->bi_idx) | 212 | #define bio_segments(bio) ((bio)->bi_vcnt - (bio)->bi_idx) |
218 | #define bio_sectors(bio) ((bio)->bi_size >> 9) | 213 | #define bio_sectors(bio) ((bio)->bi_size >> 9) |
219 | #define bio_empty_barrier(bio) (bio_barrier(bio) && !bio_has_data(bio) && !bio_discard(bio)) | 214 | #define bio_empty_barrier(bio) (bio_rw_flagged(bio, BIO_RW_BARRIER) && !bio_has_data(bio) && !bio_rw_flagged(bio, BIO_RW_DISCARD)) |
220 | 215 | ||
221 | static inline unsigned int bio_cur_bytes(struct bio *bio) | 216 | static inline unsigned int bio_cur_bytes(struct bio *bio) |
222 | { | 217 | { |
@@ -319,7 +314,6 @@ static inline int bio_has_allocated_vec(struct bio *bio) | |||
319 | */ | 314 | */ |
320 | struct bio_integrity_payload { | 315 | struct bio_integrity_payload { |
321 | struct bio *bip_bio; /* parent bio */ | 316 | struct bio *bip_bio; /* parent bio */ |
322 | struct bio_vec *bip_vec; /* integrity data vector */ | ||
323 | 317 | ||
324 | sector_t bip_sector; /* virtual start sector */ | 318 | sector_t bip_sector; /* virtual start sector */ |
325 | 319 | ||
@@ -328,11 +322,12 @@ struct bio_integrity_payload { | |||
328 | 322 | ||
329 | unsigned int bip_size; | 323 | unsigned int bip_size; |
330 | 324 | ||
331 | unsigned short bip_pool; /* pool the ivec came from */ | 325 | unsigned short bip_slab; /* slab the bip came from */ |
332 | unsigned short bip_vcnt; /* # of integrity bio_vecs */ | 326 | unsigned short bip_vcnt; /* # of integrity bio_vecs */ |
333 | unsigned short bip_idx; /* current bip_vec index */ | 327 | unsigned short bip_idx; /* current bip_vec index */ |
334 | 328 | ||
335 | struct work_struct bip_work; /* I/O completion */ | 329 | struct work_struct bip_work; /* I/O completion */ |
330 | struct bio_vec bip_vec[0]; /* embedded bvec array */ | ||
336 | }; | 331 | }; |
337 | #endif /* CONFIG_BLK_DEV_INTEGRITY */ | 332 | #endif /* CONFIG_BLK_DEV_INTEGRITY */ |
338 | 333 | ||
@@ -430,6 +425,9 @@ struct bio_set { | |||
430 | unsigned int front_pad; | 425 | unsigned int front_pad; |
431 | 426 | ||
432 | mempool_t *bio_pool; | 427 | mempool_t *bio_pool; |
428 | #if defined(CONFIG_BLK_DEV_INTEGRITY) | ||
429 | mempool_t *bio_integrity_pool; | ||
430 | #endif | ||
433 | mempool_t *bvec_pool; | 431 | mempool_t *bvec_pool; |
434 | }; | 432 | }; |
435 | 433 | ||
@@ -634,8 +632,9 @@ static inline struct bio *bio_list_get(struct bio_list *bl) | |||
634 | 632 | ||
635 | #define bio_integrity(bio) (bio->bi_integrity != NULL) | 633 | #define bio_integrity(bio) (bio->bi_integrity != NULL) |
636 | 634 | ||
635 | extern struct bio_integrity_payload *bio_integrity_alloc_bioset(struct bio *, gfp_t, unsigned int, struct bio_set *); | ||
637 | extern struct bio_integrity_payload *bio_integrity_alloc(struct bio *, gfp_t, unsigned int); | 636 | extern struct bio_integrity_payload *bio_integrity_alloc(struct bio *, gfp_t, unsigned int); |
638 | extern void bio_integrity_free(struct bio *); | 637 | extern void bio_integrity_free(struct bio *, struct bio_set *); |
639 | extern int bio_integrity_add_page(struct bio *, struct page *, unsigned int, unsigned int); | 638 | extern int bio_integrity_add_page(struct bio *, struct page *, unsigned int, unsigned int); |
640 | extern int bio_integrity_enabled(struct bio *bio); | 639 | extern int bio_integrity_enabled(struct bio *bio); |
641 | extern int bio_integrity_set_tag(struct bio *, void *, unsigned int); | 640 | extern int bio_integrity_set_tag(struct bio *, void *, unsigned int); |
@@ -645,21 +644,27 @@ extern void bio_integrity_endio(struct bio *, int); | |||
645 | extern void bio_integrity_advance(struct bio *, unsigned int); | 644 | extern void bio_integrity_advance(struct bio *, unsigned int); |
646 | extern void bio_integrity_trim(struct bio *, unsigned int, unsigned int); | 645 | extern void bio_integrity_trim(struct bio *, unsigned int, unsigned int); |
647 | extern void bio_integrity_split(struct bio *, struct bio_pair *, int); | 646 | extern void bio_integrity_split(struct bio *, struct bio_pair *, int); |
648 | extern int bio_integrity_clone(struct bio *, struct bio *, gfp_t); | 647 | extern int bio_integrity_clone(struct bio *, struct bio *, gfp_t, struct bio_set *); |
648 | extern int bioset_integrity_create(struct bio_set *, int); | ||
649 | extern void bioset_integrity_free(struct bio_set *); | ||
650 | extern void bio_integrity_init(void); | ||
649 | 651 | ||
650 | #else /* CONFIG_BLK_DEV_INTEGRITY */ | 652 | #else /* CONFIG_BLK_DEV_INTEGRITY */ |
651 | 653 | ||
652 | #define bio_integrity(a) (0) | 654 | #define bio_integrity(a) (0) |
655 | #define bioset_integrity_create(a, b) (0) | ||
653 | #define bio_integrity_prep(a) (0) | 656 | #define bio_integrity_prep(a) (0) |
654 | #define bio_integrity_enabled(a) (0) | 657 | #define bio_integrity_enabled(a) (0) |
655 | #define bio_integrity_clone(a, b, c) (0) | 658 | #define bio_integrity_clone(a, b, c, d) (0) |
656 | #define bio_integrity_free(a) do { } while (0) | 659 | #define bioset_integrity_free(a) do { } while (0) |
660 | #define bio_integrity_free(a, b) do { } while (0) | ||
657 | #define bio_integrity_endio(a, b) do { } while (0) | 661 | #define bio_integrity_endio(a, b) do { } while (0) |
658 | #define bio_integrity_advance(a, b) do { } while (0) | 662 | #define bio_integrity_advance(a, b) do { } while (0) |
659 | #define bio_integrity_trim(a, b, c) do { } while (0) | 663 | #define bio_integrity_trim(a, b, c) do { } while (0) |
660 | #define bio_integrity_split(a, b, c) do { } while (0) | 664 | #define bio_integrity_split(a, b, c) do { } while (0) |
661 | #define bio_integrity_set_tag(a, b, c) do { } while (0) | 665 | #define bio_integrity_set_tag(a, b, c) do { } while (0) |
662 | #define bio_integrity_get_tag(a, b, c) do { } while (0) | 666 | #define bio_integrity_get_tag(a, b, c) do { } while (0) |
667 | #define bio_integrity_init(a) do { } while (0) | ||
663 | 668 | ||
664 | #endif /* CONFIG_BLK_DEV_INTEGRITY */ | 669 | #endif /* CONFIG_BLK_DEV_INTEGRITY */ |
665 | 670 | ||
diff --git a/include/linux/bitmap.h b/include/linux/bitmap.h index 2878811c6134..756d78b8c1c5 100644 --- a/include/linux/bitmap.h +++ b/include/linux/bitmap.h | |||
@@ -94,13 +94,13 @@ extern void __bitmap_shift_right(unsigned long *dst, | |||
94 | const unsigned long *src, int shift, int bits); | 94 | const unsigned long *src, int shift, int bits); |
95 | extern void __bitmap_shift_left(unsigned long *dst, | 95 | extern void __bitmap_shift_left(unsigned long *dst, |
96 | const unsigned long *src, int shift, int bits); | 96 | const unsigned long *src, int shift, int bits); |
97 | extern void __bitmap_and(unsigned long *dst, const unsigned long *bitmap1, | 97 | extern int __bitmap_and(unsigned long *dst, const unsigned long *bitmap1, |
98 | const unsigned long *bitmap2, int bits); | 98 | const unsigned long *bitmap2, int bits); |
99 | extern void __bitmap_or(unsigned long *dst, const unsigned long *bitmap1, | 99 | extern void __bitmap_or(unsigned long *dst, const unsigned long *bitmap1, |
100 | const unsigned long *bitmap2, int bits); | 100 | const unsigned long *bitmap2, int bits); |
101 | extern void __bitmap_xor(unsigned long *dst, const unsigned long *bitmap1, | 101 | extern void __bitmap_xor(unsigned long *dst, const unsigned long *bitmap1, |
102 | const unsigned long *bitmap2, int bits); | 102 | const unsigned long *bitmap2, int bits); |
103 | extern void __bitmap_andnot(unsigned long *dst, const unsigned long *bitmap1, | 103 | extern int __bitmap_andnot(unsigned long *dst, const unsigned long *bitmap1, |
104 | const unsigned long *bitmap2, int bits); | 104 | const unsigned long *bitmap2, int bits); |
105 | extern int __bitmap_intersects(const unsigned long *bitmap1, | 105 | extern int __bitmap_intersects(const unsigned long *bitmap1, |
106 | const unsigned long *bitmap2, int bits); | 106 | const unsigned long *bitmap2, int bits); |
@@ -171,13 +171,12 @@ static inline void bitmap_copy(unsigned long *dst, const unsigned long *src, | |||
171 | } | 171 | } |
172 | } | 172 | } |
173 | 173 | ||
174 | static inline void bitmap_and(unsigned long *dst, const unsigned long *src1, | 174 | static inline int bitmap_and(unsigned long *dst, const unsigned long *src1, |
175 | const unsigned long *src2, int nbits) | 175 | const unsigned long *src2, int nbits) |
176 | { | 176 | { |
177 | if (small_const_nbits(nbits)) | 177 | if (small_const_nbits(nbits)) |
178 | *dst = *src1 & *src2; | 178 | return (*dst = *src1 & *src2) != 0; |
179 | else | 179 | return __bitmap_and(dst, src1, src2, nbits); |
180 | __bitmap_and(dst, src1, src2, nbits); | ||
181 | } | 180 | } |
182 | 181 | ||
183 | static inline void bitmap_or(unsigned long *dst, const unsigned long *src1, | 182 | static inline void bitmap_or(unsigned long *dst, const unsigned long *src1, |
@@ -198,13 +197,12 @@ static inline void bitmap_xor(unsigned long *dst, const unsigned long *src1, | |||
198 | __bitmap_xor(dst, src1, src2, nbits); | 197 | __bitmap_xor(dst, src1, src2, nbits); |
199 | } | 198 | } |
200 | 199 | ||
201 | static inline void bitmap_andnot(unsigned long *dst, const unsigned long *src1, | 200 | static inline int bitmap_andnot(unsigned long *dst, const unsigned long *src1, |
202 | const unsigned long *src2, int nbits) | 201 | const unsigned long *src2, int nbits) |
203 | { | 202 | { |
204 | if (small_const_nbits(nbits)) | 203 | if (small_const_nbits(nbits)) |
205 | *dst = *src1 & ~(*src2); | 204 | return (*dst = *src1 & ~(*src2)) != 0; |
206 | else | 205 | return __bitmap_andnot(dst, src1, src2, nbits); |
207 | __bitmap_andnot(dst, src1, src2, nbits); | ||
208 | } | 206 | } |
209 | 207 | ||
210 | static inline void bitmap_complement(unsigned long *dst, const unsigned long *src, | 208 | static inline void bitmap_complement(unsigned long *dst, const unsigned long *src, |
diff --git a/include/linux/blk-iopoll.h b/include/linux/blk-iopoll.h new file mode 100644 index 000000000000..308734d3d4a2 --- /dev/null +++ b/include/linux/blk-iopoll.h | |||
@@ -0,0 +1,48 @@ | |||
1 | #ifndef BLK_IOPOLL_H | ||
2 | #define BLK_IOPOLL_H | ||
3 | |||
4 | struct blk_iopoll; | ||
5 | typedef int (blk_iopoll_fn)(struct blk_iopoll *, int); | ||
6 | |||
7 | struct blk_iopoll { | ||
8 | struct list_head list; | ||
9 | unsigned long state; | ||
10 | unsigned long data; | ||
11 | int weight; | ||
12 | int max; | ||
13 | blk_iopoll_fn *poll; | ||
14 | }; | ||
15 | |||
16 | enum { | ||
17 | IOPOLL_F_SCHED = 0, | ||
18 | IOPOLL_F_DISABLE = 1, | ||
19 | }; | ||
20 | |||
21 | /* | ||
22 | * Returns 0 if we successfully set the IOPOLL_F_SCHED bit, indicating | ||
23 | * that we were the first to acquire this iop for scheduling. If this iop | ||
24 | * is currently disabled, return "failure". | ||
25 | */ | ||
26 | static inline int blk_iopoll_sched_prep(struct blk_iopoll *iop) | ||
27 | { | ||
28 | if (!test_bit(IOPOLL_F_DISABLE, &iop->state)) | ||
29 | return test_and_set_bit(IOPOLL_F_SCHED, &iop->state); | ||
30 | |||
31 | return 1; | ||
32 | } | ||
33 | |||
34 | static inline int blk_iopoll_disable_pending(struct blk_iopoll *iop) | ||
35 | { | ||
36 | return test_bit(IOPOLL_F_DISABLE, &iop->state); | ||
37 | } | ||
38 | |||
39 | extern void blk_iopoll_sched(struct blk_iopoll *); | ||
40 | extern void blk_iopoll_init(struct blk_iopoll *, int, blk_iopoll_fn *); | ||
41 | extern void blk_iopoll_complete(struct blk_iopoll *); | ||
42 | extern void __blk_iopoll_complete(struct blk_iopoll *); | ||
43 | extern void blk_iopoll_enable(struct blk_iopoll *); | ||
44 | extern void blk_iopoll_disable(struct blk_iopoll *); | ||
45 | |||
46 | extern int blk_iopoll_enabled; | ||
47 | |||
48 | #endif | ||
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 8963d9149b5f..e23a86cae5ac 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
@@ -70,11 +70,6 @@ enum rq_cmd_type_bits { | |||
70 | REQ_TYPE_ATA_PC, | 70 | REQ_TYPE_ATA_PC, |
71 | }; | 71 | }; |
72 | 72 | ||
73 | enum { | ||
74 | BLK_RW_ASYNC = 0, | ||
75 | BLK_RW_SYNC = 1, | ||
76 | }; | ||
77 | |||
78 | /* | 73 | /* |
79 | * For request of type REQ_TYPE_LINUX_BLOCK, rq->cmd[0] is the opcode being | 74 | * For request of type REQ_TYPE_LINUX_BLOCK, rq->cmd[0] is the opcode being |
80 | * sent down (similar to how REQ_TYPE_BLOCK_PC means that ->cmd[] holds a | 75 | * sent down (similar to how REQ_TYPE_BLOCK_PC means that ->cmd[] holds a |
@@ -91,13 +86,14 @@ enum { | |||
91 | }; | 86 | }; |
92 | 87 | ||
93 | /* | 88 | /* |
94 | * request type modified bits. first two bits match BIO_RW* bits, important | 89 | * request type modified bits. first four bits match BIO_RW* bits, important |
95 | */ | 90 | */ |
96 | enum rq_flag_bits { | 91 | enum rq_flag_bits { |
97 | __REQ_RW, /* not set, read. set, write */ | 92 | __REQ_RW, /* not set, read. set, write */ |
98 | __REQ_FAILFAST_DEV, /* no driver retries of device errors */ | 93 | __REQ_FAILFAST_DEV, /* no driver retries of device errors */ |
99 | __REQ_FAILFAST_TRANSPORT, /* no driver retries of transport errors */ | 94 | __REQ_FAILFAST_TRANSPORT, /* no driver retries of transport errors */ |
100 | __REQ_FAILFAST_DRIVER, /* no driver retries of driver errors */ | 95 | __REQ_FAILFAST_DRIVER, /* no driver retries of driver errors */ |
96 | /* above flags must match BIO_RW_* */ | ||
101 | __REQ_DISCARD, /* request to discard sectors */ | 97 | __REQ_DISCARD, /* request to discard sectors */ |
102 | __REQ_SORTED, /* elevator knows about this request */ | 98 | __REQ_SORTED, /* elevator knows about this request */ |
103 | __REQ_SOFTBARRIER, /* may not be passed by ioscheduler */ | 99 | __REQ_SOFTBARRIER, /* may not be passed by ioscheduler */ |
@@ -119,6 +115,7 @@ enum rq_flag_bits { | |||
119 | __REQ_INTEGRITY, /* integrity metadata has been remapped */ | 115 | __REQ_INTEGRITY, /* integrity metadata has been remapped */ |
120 | __REQ_NOIDLE, /* Don't anticipate more IO after this one */ | 116 | __REQ_NOIDLE, /* Don't anticipate more IO after this one */ |
121 | __REQ_IO_STAT, /* account I/O stat */ | 117 | __REQ_IO_STAT, /* account I/O stat */ |
118 | __REQ_MIXED_MERGE, /* merge of different types, fail separately */ | ||
122 | __REQ_NR_BITS, /* stops here */ | 119 | __REQ_NR_BITS, /* stops here */ |
123 | }; | 120 | }; |
124 | 121 | ||
@@ -147,6 +144,10 @@ enum rq_flag_bits { | |||
147 | #define REQ_INTEGRITY (1 << __REQ_INTEGRITY) | 144 | #define REQ_INTEGRITY (1 << __REQ_INTEGRITY) |
148 | #define REQ_NOIDLE (1 << __REQ_NOIDLE) | 145 | #define REQ_NOIDLE (1 << __REQ_NOIDLE) |
149 | #define REQ_IO_STAT (1 << __REQ_IO_STAT) | 146 | #define REQ_IO_STAT (1 << __REQ_IO_STAT) |
147 | #define REQ_MIXED_MERGE (1 << __REQ_MIXED_MERGE) | ||
148 | |||
149 | #define REQ_FAILFAST_MASK (REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT | \ | ||
150 | REQ_FAILFAST_DRIVER) | ||
150 | 151 | ||
151 | #define BLK_MAX_CDB 16 | 152 | #define BLK_MAX_CDB 16 |
152 | 153 | ||
@@ -301,12 +302,6 @@ struct blk_queue_tag { | |||
301 | #define BLK_SCSI_MAX_CMDS (256) | 302 | #define BLK_SCSI_MAX_CMDS (256) |
302 | #define BLK_SCSI_CMD_PER_LONG (BLK_SCSI_MAX_CMDS / (sizeof(long) * 8)) | 303 | #define BLK_SCSI_CMD_PER_LONG (BLK_SCSI_MAX_CMDS / (sizeof(long) * 8)) |
303 | 304 | ||
304 | struct blk_cmd_filter { | ||
305 | unsigned long read_ok[BLK_SCSI_CMD_PER_LONG]; | ||
306 | unsigned long write_ok[BLK_SCSI_CMD_PER_LONG]; | ||
307 | struct kobject kobj; | ||
308 | }; | ||
309 | |||
310 | struct queue_limits { | 305 | struct queue_limits { |
311 | unsigned long bounce_pfn; | 306 | unsigned long bounce_pfn; |
312 | unsigned long seg_boundary_mask; | 307 | unsigned long seg_boundary_mask; |
@@ -445,7 +440,6 @@ struct request_queue | |||
445 | #if defined(CONFIG_BLK_DEV_BSG) | 440 | #if defined(CONFIG_BLK_DEV_BSG) |
446 | struct bsg_class_device bsg_dev; | 441 | struct bsg_class_device bsg_dev; |
447 | #endif | 442 | #endif |
448 | struct blk_cmd_filter cmd_filter; | ||
449 | }; | 443 | }; |
450 | 444 | ||
451 | #define QUEUE_FLAG_CLUSTER 0 /* cluster several segments into 1 */ | 445 | #define QUEUE_FLAG_CLUSTER 0 /* cluster several segments into 1 */ |
@@ -465,10 +459,12 @@ struct request_queue | |||
465 | #define QUEUE_FLAG_NONROT 14 /* non-rotational device (SSD) */ | 459 | #define QUEUE_FLAG_NONROT 14 /* non-rotational device (SSD) */ |
466 | #define QUEUE_FLAG_VIRT QUEUE_FLAG_NONROT /* paravirt device */ | 460 | #define QUEUE_FLAG_VIRT QUEUE_FLAG_NONROT /* paravirt device */ |
467 | #define QUEUE_FLAG_IO_STAT 15 /* do IO stats */ | 461 | #define QUEUE_FLAG_IO_STAT 15 /* do IO stats */ |
462 | #define QUEUE_FLAG_CQ 16 /* hardware does queuing */ | ||
468 | 463 | ||
469 | #define QUEUE_FLAG_DEFAULT ((1 << QUEUE_FLAG_IO_STAT) | \ | 464 | #define QUEUE_FLAG_DEFAULT ((1 << QUEUE_FLAG_IO_STAT) | \ |
470 | (1 << QUEUE_FLAG_CLUSTER) | \ | 465 | (1 << QUEUE_FLAG_CLUSTER) | \ |
471 | (1 << QUEUE_FLAG_STACKABLE)) | 466 | (1 << QUEUE_FLAG_STACKABLE) | \ |
467 | (1 << QUEUE_FLAG_SAME_COMP)) | ||
472 | 468 | ||
473 | static inline int queue_is_locked(struct request_queue *q) | 469 | static inline int queue_is_locked(struct request_queue *q) |
474 | { | 470 | { |
@@ -587,6 +583,7 @@ enum { | |||
587 | 583 | ||
588 | #define blk_queue_plugged(q) test_bit(QUEUE_FLAG_PLUGGED, &(q)->queue_flags) | 584 | #define blk_queue_plugged(q) test_bit(QUEUE_FLAG_PLUGGED, &(q)->queue_flags) |
589 | #define blk_queue_tagged(q) test_bit(QUEUE_FLAG_QUEUED, &(q)->queue_flags) | 585 | #define blk_queue_tagged(q) test_bit(QUEUE_FLAG_QUEUED, &(q)->queue_flags) |
586 | #define blk_queue_queuing(q) test_bit(QUEUE_FLAG_CQ, &(q)->queue_flags) | ||
590 | #define blk_queue_stopped(q) test_bit(QUEUE_FLAG_STOPPED, &(q)->queue_flags) | 587 | #define blk_queue_stopped(q) test_bit(QUEUE_FLAG_STOPPED, &(q)->queue_flags) |
591 | #define blk_queue_nomerges(q) test_bit(QUEUE_FLAG_NOMERGES, &(q)->queue_flags) | 588 | #define blk_queue_nomerges(q) test_bit(QUEUE_FLAG_NOMERGES, &(q)->queue_flags) |
592 | #define blk_queue_nonrot(q) test_bit(QUEUE_FLAG_NONROT, &(q)->queue_flags) | 589 | #define blk_queue_nonrot(q) test_bit(QUEUE_FLAG_NONROT, &(q)->queue_flags) |
@@ -730,6 +727,7 @@ struct rq_map_data { | |||
730 | int nr_entries; | 727 | int nr_entries; |
731 | unsigned long offset; | 728 | unsigned long offset; |
732 | int null_mapped; | 729 | int null_mapped; |
730 | int from_user; | ||
733 | }; | 731 | }; |
734 | 732 | ||
735 | struct req_iterator { | 733 | struct req_iterator { |
@@ -786,18 +784,18 @@ extern int sg_scsi_ioctl(struct request_queue *, struct gendisk *, fmode_t, | |||
786 | * congested queues, and wake up anyone who was waiting for requests to be | 784 | * congested queues, and wake up anyone who was waiting for requests to be |
787 | * put back. | 785 | * put back. |
788 | */ | 786 | */ |
789 | static inline void blk_clear_queue_congested(struct request_queue *q, int rw) | 787 | static inline void blk_clear_queue_congested(struct request_queue *q, int sync) |
790 | { | 788 | { |
791 | clear_bdi_congested(&q->backing_dev_info, rw); | 789 | clear_bdi_congested(&q->backing_dev_info, sync); |
792 | } | 790 | } |
793 | 791 | ||
794 | /* | 792 | /* |
795 | * A queue has just entered congestion. Flag that in the queue's VM-visible | 793 | * A queue has just entered congestion. Flag that in the queue's VM-visible |
796 | * state flags and increment the global gounter of congested queues. | 794 | * state flags and increment the global gounter of congested queues. |
797 | */ | 795 | */ |
798 | static inline void blk_set_queue_congested(struct request_queue *q, int rw) | 796 | static inline void blk_set_queue_congested(struct request_queue *q, int sync) |
799 | { | 797 | { |
800 | set_bdi_congested(&q->backing_dev_info, rw); | 798 | set_bdi_congested(&q->backing_dev_info, sync); |
801 | } | 799 | } |
802 | 800 | ||
803 | extern void blk_start_queue(struct request_queue *q); | 801 | extern void blk_start_queue(struct request_queue *q); |
@@ -839,11 +837,13 @@ static inline void blk_run_address_space(struct address_space *mapping) | |||
839 | } | 837 | } |
840 | 838 | ||
841 | /* | 839 | /* |
842 | * blk_rq_pos() : the current sector | 840 | * blk_rq_pos() : the current sector |
843 | * blk_rq_bytes() : bytes left in the entire request | 841 | * blk_rq_bytes() : bytes left in the entire request |
844 | * blk_rq_cur_bytes() : bytes left in the current segment | 842 | * blk_rq_cur_bytes() : bytes left in the current segment |
845 | * blk_rq_sectors() : sectors left in the entire request | 843 | * blk_rq_err_bytes() : bytes left till the next error boundary |
846 | * blk_rq_cur_sectors() : sectors left in the current segment | 844 | * blk_rq_sectors() : sectors left in the entire request |
845 | * blk_rq_cur_sectors() : sectors left in the current segment | ||
846 | * blk_rq_err_sectors() : sectors left till the next error boundary | ||
847 | */ | 847 | */ |
848 | static inline sector_t blk_rq_pos(const struct request *rq) | 848 | static inline sector_t blk_rq_pos(const struct request *rq) |
849 | { | 849 | { |
@@ -860,6 +860,8 @@ static inline int blk_rq_cur_bytes(const struct request *rq) | |||
860 | return rq->bio ? bio_cur_bytes(rq->bio) : 0; | 860 | return rq->bio ? bio_cur_bytes(rq->bio) : 0; |
861 | } | 861 | } |
862 | 862 | ||
863 | extern unsigned int blk_rq_err_bytes(const struct request *rq); | ||
864 | |||
863 | static inline unsigned int blk_rq_sectors(const struct request *rq) | 865 | static inline unsigned int blk_rq_sectors(const struct request *rq) |
864 | { | 866 | { |
865 | return blk_rq_bytes(rq) >> 9; | 867 | return blk_rq_bytes(rq) >> 9; |
@@ -870,6 +872,11 @@ static inline unsigned int blk_rq_cur_sectors(const struct request *rq) | |||
870 | return blk_rq_cur_bytes(rq) >> 9; | 872 | return blk_rq_cur_bytes(rq) >> 9; |
871 | } | 873 | } |
872 | 874 | ||
875 | static inline unsigned int blk_rq_err_sectors(const struct request *rq) | ||
876 | { | ||
877 | return blk_rq_err_bytes(rq) >> 9; | ||
878 | } | ||
879 | |||
873 | /* | 880 | /* |
874 | * Request issue related functions. | 881 | * Request issue related functions. |
875 | */ | 882 | */ |
@@ -896,10 +903,12 @@ extern bool blk_end_request(struct request *rq, int error, | |||
896 | unsigned int nr_bytes); | 903 | unsigned int nr_bytes); |
897 | extern void blk_end_request_all(struct request *rq, int error); | 904 | extern void blk_end_request_all(struct request *rq, int error); |
898 | extern bool blk_end_request_cur(struct request *rq, int error); | 905 | extern bool blk_end_request_cur(struct request *rq, int error); |
906 | extern bool blk_end_request_err(struct request *rq, int error); | ||
899 | extern bool __blk_end_request(struct request *rq, int error, | 907 | extern bool __blk_end_request(struct request *rq, int error, |
900 | unsigned int nr_bytes); | 908 | unsigned int nr_bytes); |
901 | extern void __blk_end_request_all(struct request *rq, int error); | 909 | extern void __blk_end_request_all(struct request *rq, int error); |
902 | extern bool __blk_end_request_cur(struct request *rq, int error); | 910 | extern bool __blk_end_request_cur(struct request *rq, int error); |
911 | extern bool __blk_end_request_err(struct request *rq, int error); | ||
903 | 912 | ||
904 | extern void blk_complete_request(struct request *); | 913 | extern void blk_complete_request(struct request *); |
905 | extern void __blk_complete_request(struct request *); | 914 | extern void __blk_complete_request(struct request *); |
@@ -924,7 +933,9 @@ extern void blk_queue_logical_block_size(struct request_queue *, unsigned short) | |||
924 | extern void blk_queue_physical_block_size(struct request_queue *, unsigned short); | 933 | extern void blk_queue_physical_block_size(struct request_queue *, unsigned short); |
925 | extern void blk_queue_alignment_offset(struct request_queue *q, | 934 | extern void blk_queue_alignment_offset(struct request_queue *q, |
926 | unsigned int alignment); | 935 | unsigned int alignment); |
936 | extern void blk_limits_io_min(struct queue_limits *limits, unsigned int min); | ||
927 | extern void blk_queue_io_min(struct request_queue *q, unsigned int min); | 937 | extern void blk_queue_io_min(struct request_queue *q, unsigned int min); |
938 | extern void blk_limits_io_opt(struct queue_limits *limits, unsigned int opt); | ||
928 | extern void blk_queue_io_opt(struct request_queue *q, unsigned int opt); | 939 | extern void blk_queue_io_opt(struct request_queue *q, unsigned int opt); |
929 | extern void blk_set_default_limits(struct queue_limits *lim); | 940 | extern void blk_set_default_limits(struct queue_limits *lim); |
930 | extern int blk_stack_limits(struct queue_limits *t, struct queue_limits *b, | 941 | extern int blk_stack_limits(struct queue_limits *t, struct queue_limits *b, |
@@ -987,24 +998,21 @@ static inline struct request *blk_map_queue_find_tag(struct blk_queue_tag *bqt, | |||
987 | } | 998 | } |
988 | 999 | ||
989 | extern int blkdev_issue_flush(struct block_device *, sector_t *); | 1000 | extern int blkdev_issue_flush(struct block_device *, sector_t *); |
990 | extern int blkdev_issue_discard(struct block_device *, | 1001 | #define DISCARD_FL_WAIT 0x01 /* wait for completion */ |
991 | sector_t sector, sector_t nr_sects, gfp_t); | 1002 | #define DISCARD_FL_BARRIER 0x02 /* issue DISCARD_BARRIER request */ |
1003 | extern int blkdev_issue_discard(struct block_device *, sector_t sector, | ||
1004 | sector_t nr_sects, gfp_t, int flags); | ||
992 | 1005 | ||
993 | static inline int sb_issue_discard(struct super_block *sb, | 1006 | static inline int sb_issue_discard(struct super_block *sb, |
994 | sector_t block, sector_t nr_blocks) | 1007 | sector_t block, sector_t nr_blocks) |
995 | { | 1008 | { |
996 | block <<= (sb->s_blocksize_bits - 9); | 1009 | block <<= (sb->s_blocksize_bits - 9); |
997 | nr_blocks <<= (sb->s_blocksize_bits - 9); | 1010 | nr_blocks <<= (sb->s_blocksize_bits - 9); |
998 | return blkdev_issue_discard(sb->s_bdev, block, nr_blocks, GFP_KERNEL); | 1011 | return blkdev_issue_discard(sb->s_bdev, block, nr_blocks, GFP_KERNEL, |
1012 | DISCARD_FL_BARRIER); | ||
999 | } | 1013 | } |
1000 | 1014 | ||
1001 | /* | 1015 | extern int blk_verify_command(unsigned char *cmd, fmode_t has_write_perm); |
1002 | * command filter functions | ||
1003 | */ | ||
1004 | extern int blk_verify_command(struct blk_cmd_filter *filter, | ||
1005 | unsigned char *cmd, fmode_t has_write_perm); | ||
1006 | extern void blk_unregister_filter(struct gendisk *disk); | ||
1007 | extern void blk_set_cmd_filter_defaults(struct blk_cmd_filter *filter); | ||
1008 | 1016 | ||
1009 | #define MAX_PHYS_SEGMENTS 128 | 1017 | #define MAX_PHYS_SEGMENTS 128 |
1010 | #define MAX_HW_SEGMENTS 128 | 1018 | #define MAX_HW_SEGMENTS 128 |
diff --git a/include/linux/bootmem.h b/include/linux/bootmem.h index bc3ab7073695..dd97fb8408a8 100644 --- a/include/linux/bootmem.h +++ b/include/linux/bootmem.h | |||
@@ -132,9 +132,6 @@ static inline void *alloc_remap(int nid, unsigned long size) | |||
132 | } | 132 | } |
133 | #endif /* CONFIG_HAVE_ARCH_ALLOC_REMAP */ | 133 | #endif /* CONFIG_HAVE_ARCH_ALLOC_REMAP */ |
134 | 134 | ||
135 | extern unsigned long __meminitdata nr_kernel_pages; | ||
136 | extern unsigned long __meminitdata nr_all_pages; | ||
137 | |||
138 | extern void *alloc_large_system_hash(const char *tablename, | 135 | extern void *alloc_large_system_hash(const char *tablename, |
139 | unsigned long bucketsize, | 136 | unsigned long bucketsize, |
140 | unsigned long numentries, | 137 | unsigned long numentries, |
@@ -145,6 +142,8 @@ extern void *alloc_large_system_hash(const char *tablename, | |||
145 | unsigned long limit); | 142 | unsigned long limit); |
146 | 143 | ||
147 | #define HASH_EARLY 0x00000001 /* Allocating during early boot? */ | 144 | #define HASH_EARLY 0x00000001 /* Allocating during early boot? */ |
145 | #define HASH_SMALL 0x00000002 /* sub-page allocation allowed, min | ||
146 | * shift passed via *_hash_shift */ | ||
148 | 147 | ||
149 | /* Only NUMA needs hash distribution. 64bit NUMA architectures have | 148 | /* Only NUMA needs hash distribution. 64bit NUMA architectures have |
150 | * sufficient vmalloc space. | 149 | * sufficient vmalloc space. |
diff --git a/include/linux/can/dev.h b/include/linux/can/dev.h index 4a37a56f6cdd..5824b20b5fcb 100644 --- a/include/linux/can/dev.h +++ b/include/linux/can/dev.h | |||
@@ -66,5 +66,6 @@ void can_bus_off(struct net_device *dev); | |||
66 | 66 | ||
67 | void can_put_echo_skb(struct sk_buff *skb, struct net_device *dev, int idx); | 67 | void can_put_echo_skb(struct sk_buff *skb, struct net_device *dev, int idx); |
68 | void can_get_echo_skb(struct net_device *dev, int idx); | 68 | void can_get_echo_skb(struct net_device *dev, int idx); |
69 | void can_free_echo_skb(struct net_device *dev, int idx); | ||
69 | 70 | ||
70 | #endif /* CAN_DEV_H */ | 71 | #endif /* CAN_DEV_H */ |
diff --git a/include/linux/capability.h b/include/linux/capability.h index c3021105edc0..c8f2a5f70ed5 100644 --- a/include/linux/capability.h +++ b/include/linux/capability.h | |||
@@ -7,7 +7,7 @@ | |||
7 | * | 7 | * |
8 | * See here for the libcap library ("POSIX draft" compliance): | 8 | * See here for the libcap library ("POSIX draft" compliance): |
9 | * | 9 | * |
10 | * ftp://linux.kernel.org/pub/linux/libs/security/linux-privs/kernel-2.6/ | 10 | * ftp://www.kernel.org/pub/linux/libs/security/linux-privs/kernel-2.6/ |
11 | */ | 11 | */ |
12 | 12 | ||
13 | #ifndef _LINUX_CAPABILITY_H | 13 | #ifndef _LINUX_CAPABILITY_H |
diff --git a/include/linux/cb710.h b/include/linux/cb710.h index 63bc9a4d2926..8cc10411bab2 100644 --- a/include/linux/cb710.h +++ b/include/linux/cb710.h | |||
@@ -140,29 +140,6 @@ void cb710_dump_regs(struct cb710_chip *chip, unsigned dump); | |||
140 | #include <linux/highmem.h> | 140 | #include <linux/highmem.h> |
141 | #include <linux/scatterlist.h> | 141 | #include <linux/scatterlist.h> |
142 | 142 | ||
143 | /** | ||
144 | * cb710_sg_miter_stop_writing - stop mapping iteration after writing | ||
145 | * @miter: sg mapping iter to be stopped | ||
146 | * | ||
147 | * Description: | ||
148 | * Stops mapping iterator @miter. @miter should have been started | ||
149 | * started using sg_miter_start(). A stopped iteration can be | ||
150 | * resumed by calling sg_miter_next() on it. This is useful when | ||
151 | * resources (kmap) need to be released during iteration. | ||
152 | * | ||
153 | * This is a convenience wrapper that will be optimized out for arches | ||
154 | * that don't need flush_kernel_dcache_page(). | ||
155 | * | ||
156 | * Context: | ||
157 | * IRQ disabled if the SG_MITER_ATOMIC is set. Don't care otherwise. | ||
158 | */ | ||
159 | static inline void cb710_sg_miter_stop_writing(struct sg_mapping_iter *miter) | ||
160 | { | ||
161 | if (miter->page) | ||
162 | flush_kernel_dcache_page(miter->page); | ||
163 | sg_miter_stop(miter); | ||
164 | } | ||
165 | |||
166 | /* | 143 | /* |
167 | * 32-bit PIO mapping sg iterator | 144 | * 32-bit PIO mapping sg iterator |
168 | * | 145 | * |
@@ -171,12 +148,12 @@ static inline void cb710_sg_miter_stop_writing(struct sg_mapping_iter *miter) | |||
171 | * without DMA support). | 148 | * without DMA support). |
172 | * | 149 | * |
173 | * Best-case reading (transfer from device): | 150 | * Best-case reading (transfer from device): |
174 | * sg_miter_start(); | 151 | * sg_miter_start(, SG_MITER_TO_SG); |
175 | * cb710_sg_dwiter_write_from_io(); | 152 | * cb710_sg_dwiter_write_from_io(); |
176 | * cb710_sg_miter_stop_writing(); | 153 | * sg_miter_stop(); |
177 | * | 154 | * |
178 | * Best-case writing (transfer to device): | 155 | * Best-case writing (transfer to device): |
179 | * sg_miter_start(); | 156 | * sg_miter_start(, SG_MITER_FROM_SG); |
180 | * cb710_sg_dwiter_read_to_io(); | 157 | * cb710_sg_dwiter_read_to_io(); |
181 | * sg_miter_stop(); | 158 | * sg_miter_stop(); |
182 | */ | 159 | */ |
diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h index 665fa70e4094..90bba9e62286 100644 --- a/include/linux/cgroup.h +++ b/include/linux/cgroup.h | |||
@@ -179,14 +179,11 @@ struct cgroup { | |||
179 | */ | 179 | */ |
180 | struct list_head release_list; | 180 | struct list_head release_list; |
181 | 181 | ||
182 | /* pids_mutex protects the fields below */ | 182 | /* pids_mutex protects pids_list and cached pid arrays. */ |
183 | struct rw_semaphore pids_mutex; | 183 | struct rw_semaphore pids_mutex; |
184 | /* Array of process ids in the cgroup */ | 184 | |
185 | pid_t *tasks_pids; | 185 | /* Linked list of struct cgroup_pids */ |
186 | /* How many files are using the current tasks_pids array */ | 186 | struct list_head pids_list; |
187 | int pids_use_count; | ||
188 | /* Length of the current tasks_pids array */ | ||
189 | int pids_length; | ||
190 | 187 | ||
191 | /* For RCU-protected deletion */ | 188 | /* For RCU-protected deletion */ |
192 | struct rcu_head rcu_head; | 189 | struct rcu_head rcu_head; |
@@ -366,6 +363,23 @@ int cgroup_task_count(const struct cgroup *cgrp); | |||
366 | int cgroup_is_descendant(const struct cgroup *cgrp, struct task_struct *task); | 363 | int cgroup_is_descendant(const struct cgroup *cgrp, struct task_struct *task); |
367 | 364 | ||
368 | /* | 365 | /* |
366 | * When the subsys has to access css and may add permanent refcnt to css, | ||
367 | * it should take care of racy conditions with rmdir(). Following set of | ||
368 | * functions, is for stop/restart rmdir if necessary. | ||
369 | * Because these will call css_get/put, "css" should be alive css. | ||
370 | * | ||
371 | * cgroup_exclude_rmdir(); | ||
372 | * ...do some jobs which may access arbitrary empty cgroup | ||
373 | * cgroup_release_and_wakeup_rmdir(); | ||
374 | * | ||
375 | * When someone removes a cgroup while cgroup_exclude_rmdir() holds it, | ||
376 | * it sleeps and cgroup_release_and_wakeup_rmdir() will wake him up. | ||
377 | */ | ||
378 | |||
379 | void cgroup_exclude_rmdir(struct cgroup_subsys_state *css); | ||
380 | void cgroup_release_and_wakeup_rmdir(struct cgroup_subsys_state *css); | ||
381 | |||
382 | /* | ||
369 | * Control Group subsystem type. | 383 | * Control Group subsystem type. |
370 | * See Documentation/cgroups/cgroups.txt for details | 384 | * See Documentation/cgroups/cgroups.txt for details |
371 | */ | 385 | */ |
diff --git a/include/linux/clockchips.h b/include/linux/clockchips.h index 20a100fe2b4f..3a1dbba4d3ae 100644 --- a/include/linux/clockchips.h +++ b/include/linux/clockchips.h | |||
@@ -143,12 +143,3 @@ extern void clockevents_notify(unsigned long reason, void *arg); | |||
143 | #endif | 143 | #endif |
144 | 144 | ||
145 | #endif | 145 | #endif |
146 | |||
147 | #ifdef CONFIG_GENERIC_CLOCKEVENTS | ||
148 | extern ktime_t clockevents_get_next_event(int cpu); | ||
149 | #else | ||
150 | static inline ktime_t clockevents_get_next_event(int cpu) | ||
151 | { | ||
152 | return (ktime_t) { .tv64 = KTIME_MAX }; | ||
153 | } | ||
154 | #endif | ||
diff --git a/include/linux/clocksource.h b/include/linux/clocksource.h index c56457c8334e..83d2fbd81b93 100644 --- a/include/linux/clocksource.h +++ b/include/linux/clocksource.h | |||
@@ -14,6 +14,7 @@ | |||
14 | #include <linux/list.h> | 14 | #include <linux/list.h> |
15 | #include <linux/cache.h> | 15 | #include <linux/cache.h> |
16 | #include <linux/timer.h> | 16 | #include <linux/timer.h> |
17 | #include <linux/init.h> | ||
17 | #include <asm/div64.h> | 18 | #include <asm/div64.h> |
18 | #include <asm/io.h> | 19 | #include <asm/io.h> |
19 | 20 | ||
@@ -148,14 +149,11 @@ extern u64 timecounter_cyc2time(struct timecounter *tc, | |||
148 | * @disable: optional function to disable the clocksource | 149 | * @disable: optional function to disable the clocksource |
149 | * @mask: bitmask for two's complement | 150 | * @mask: bitmask for two's complement |
150 | * subtraction of non 64 bit counters | 151 | * subtraction of non 64 bit counters |
151 | * @mult: cycle to nanosecond multiplier (adjusted by NTP) | 152 | * @mult: cycle to nanosecond multiplier |
152 | * @mult_orig: cycle to nanosecond multiplier (unadjusted by NTP) | ||
153 | * @shift: cycle to nanosecond divisor (power of two) | 153 | * @shift: cycle to nanosecond divisor (power of two) |
154 | * @flags: flags describing special properties | 154 | * @flags: flags describing special properties |
155 | * @vread: vsyscall based read | 155 | * @vread: vsyscall based read |
156 | * @resume: resume function for the clocksource, if necessary | 156 | * @resume: resume function for the clocksource, if necessary |
157 | * @cycle_interval: Used internally by timekeeping core, please ignore. | ||
158 | * @xtime_interval: Used internally by timekeeping core, please ignore. | ||
159 | */ | 157 | */ |
160 | struct clocksource { | 158 | struct clocksource { |
161 | /* | 159 | /* |
@@ -169,7 +167,6 @@ struct clocksource { | |||
169 | void (*disable)(struct clocksource *cs); | 167 | void (*disable)(struct clocksource *cs); |
170 | cycle_t mask; | 168 | cycle_t mask; |
171 | u32 mult; | 169 | u32 mult; |
172 | u32 mult_orig; | ||
173 | u32 shift; | 170 | u32 shift; |
174 | unsigned long flags; | 171 | unsigned long flags; |
175 | cycle_t (*vread)(void); | 172 | cycle_t (*vread)(void); |
@@ -181,19 +178,12 @@ struct clocksource { | |||
181 | #define CLKSRC_FSYS_MMIO_SET(mmio, addr) do { } while (0) | 178 | #define CLKSRC_FSYS_MMIO_SET(mmio, addr) do { } while (0) |
182 | #endif | 179 | #endif |
183 | 180 | ||
184 | /* timekeeping specific data, ignore */ | ||
185 | cycle_t cycle_interval; | ||
186 | u64 xtime_interval; | ||
187 | u32 raw_interval; | ||
188 | /* | 181 | /* |
189 | * Second part is written at each timer interrupt | 182 | * Second part is written at each timer interrupt |
190 | * Keep it in a different cache line to dirty no | 183 | * Keep it in a different cache line to dirty no |
191 | * more than one cache line. | 184 | * more than one cache line. |
192 | */ | 185 | */ |
193 | cycle_t cycle_last ____cacheline_aligned_in_smp; | 186 | cycle_t cycle_last ____cacheline_aligned_in_smp; |
194 | u64 xtime_nsec; | ||
195 | s64 error; | ||
196 | struct timespec raw_time; | ||
197 | 187 | ||
198 | #ifdef CONFIG_CLOCKSOURCE_WATCHDOG | 188 | #ifdef CONFIG_CLOCKSOURCE_WATCHDOG |
199 | /* Watchdog related data, used by the framework */ | 189 | /* Watchdog related data, used by the framework */ |
@@ -202,8 +192,6 @@ struct clocksource { | |||
202 | #endif | 192 | #endif |
203 | }; | 193 | }; |
204 | 194 | ||
205 | extern struct clocksource *clock; /* current clocksource */ | ||
206 | |||
207 | /* | 195 | /* |
208 | * Clock source flags bits:: | 196 | * Clock source flags bits:: |
209 | */ | 197 | */ |
@@ -212,6 +200,7 @@ extern struct clocksource *clock; /* current clocksource */ | |||
212 | 200 | ||
213 | #define CLOCK_SOURCE_WATCHDOG 0x10 | 201 | #define CLOCK_SOURCE_WATCHDOG 0x10 |
214 | #define CLOCK_SOURCE_VALID_FOR_HRES 0x20 | 202 | #define CLOCK_SOURCE_VALID_FOR_HRES 0x20 |
203 | #define CLOCK_SOURCE_UNSTABLE 0x40 | ||
215 | 204 | ||
216 | /* simplify initialization of mask field */ | 205 | /* simplify initialization of mask field */ |
217 | #define CLOCKSOURCE_MASK(bits) (cycle_t)((bits) < 64 ? ((1ULL<<(bits))-1) : -1) | 206 | #define CLOCKSOURCE_MASK(bits) (cycle_t)((bits) < 64 ? ((1ULL<<(bits))-1) : -1) |
@@ -268,96 +257,15 @@ static inline u32 clocksource_hz2mult(u32 hz, u32 shift_constant) | |||
268 | } | 257 | } |
269 | 258 | ||
270 | /** | 259 | /** |
271 | * clocksource_read: - Access the clocksource's current cycle value | 260 | * clocksource_cyc2ns - converts clocksource cycles to nanoseconds |
272 | * @cs: pointer to clocksource being read | ||
273 | * | ||
274 | * Uses the clocksource to return the current cycle_t value | ||
275 | */ | ||
276 | static inline cycle_t clocksource_read(struct clocksource *cs) | ||
277 | { | ||
278 | return cs->read(cs); | ||
279 | } | ||
280 | |||
281 | /** | ||
282 | * clocksource_enable: - enable clocksource | ||
283 | * @cs: pointer to clocksource | ||
284 | * | 261 | * |
285 | * Enables the specified clocksource. The clocksource callback | 262 | * Converts cycles to nanoseconds, using the given mult and shift. |
286 | * function should start up the hardware and setup mult and field | ||
287 | * members of struct clocksource to reflect hardware capabilities. | ||
288 | */ | ||
289 | static inline int clocksource_enable(struct clocksource *cs) | ||
290 | { | ||
291 | int ret = 0; | ||
292 | |||
293 | if (cs->enable) | ||
294 | ret = cs->enable(cs); | ||
295 | |||
296 | /* save mult_orig on enable */ | ||
297 | cs->mult_orig = cs->mult; | ||
298 | |||
299 | return ret; | ||
300 | } | ||
301 | |||
302 | /** | ||
303 | * clocksource_disable: - disable clocksource | ||
304 | * @cs: pointer to clocksource | ||
305 | * | ||
306 | * Disables the specified clocksource. The clocksource callback | ||
307 | * function should power down the now unused hardware block to | ||
308 | * save power. | ||
309 | */ | ||
310 | static inline void clocksource_disable(struct clocksource *cs) | ||
311 | { | ||
312 | if (cs->disable) | ||
313 | cs->disable(cs); | ||
314 | } | ||
315 | |||
316 | /** | ||
317 | * cyc2ns - converts clocksource cycles to nanoseconds | ||
318 | * @cs: Pointer to clocksource | ||
319 | * @cycles: Cycles | ||
320 | * | ||
321 | * Uses the clocksource and ntp ajdustment to convert cycle_ts to nanoseconds. | ||
322 | * | 263 | * |
323 | * XXX - This could use some mult_lxl_ll() asm optimization | 264 | * XXX - This could use some mult_lxl_ll() asm optimization |
324 | */ | 265 | */ |
325 | static inline s64 cyc2ns(struct clocksource *cs, cycle_t cycles) | 266 | static inline s64 clocksource_cyc2ns(cycle_t cycles, u32 mult, u32 shift) |
326 | { | 267 | { |
327 | u64 ret = (u64)cycles; | 268 | return ((u64) cycles * mult) >> shift; |
328 | ret = (ret * cs->mult) >> cs->shift; | ||
329 | return ret; | ||
330 | } | ||
331 | |||
332 | /** | ||
333 | * clocksource_calculate_interval - Calculates a clocksource interval struct | ||
334 | * | ||
335 | * @c: Pointer to clocksource. | ||
336 | * @length_nsec: Desired interval length in nanoseconds. | ||
337 | * | ||
338 | * Calculates a fixed cycle/nsec interval for a given clocksource/adjustment | ||
339 | * pair and interval request. | ||
340 | * | ||
341 | * Unless you're the timekeeping code, you should not be using this! | ||
342 | */ | ||
343 | static inline void clocksource_calculate_interval(struct clocksource *c, | ||
344 | unsigned long length_nsec) | ||
345 | { | ||
346 | u64 tmp; | ||
347 | |||
348 | /* Do the ns -> cycle conversion first, using original mult */ | ||
349 | tmp = length_nsec; | ||
350 | tmp <<= c->shift; | ||
351 | tmp += c->mult_orig/2; | ||
352 | do_div(tmp, c->mult_orig); | ||
353 | |||
354 | c->cycle_interval = (cycle_t)tmp; | ||
355 | if (c->cycle_interval == 0) | ||
356 | c->cycle_interval = 1; | ||
357 | |||
358 | /* Go back from cycles -> shifted ns, this time use ntp adjused mult */ | ||
359 | c->xtime_interval = (u64)c->cycle_interval * c->mult; | ||
360 | c->raw_interval = ((u64)c->cycle_interval * c->mult_orig) >> c->shift; | ||
361 | } | 269 | } |
362 | 270 | ||
363 | 271 | ||
@@ -368,6 +276,8 @@ extern void clocksource_touch_watchdog(void); | |||
368 | extern struct clocksource* clocksource_get_next(void); | 276 | extern struct clocksource* clocksource_get_next(void); |
369 | extern void clocksource_change_rating(struct clocksource *cs, int rating); | 277 | extern void clocksource_change_rating(struct clocksource *cs, int rating); |
370 | extern void clocksource_resume(void); | 278 | extern void clocksource_resume(void); |
279 | extern struct clocksource * __init __weak clocksource_default_clock(void); | ||
280 | extern void clocksource_mark_unstable(struct clocksource *cs); | ||
371 | 281 | ||
372 | #ifdef CONFIG_GENERIC_TIME_VSYSCALL | 282 | #ifdef CONFIG_GENERIC_TIME_VSYSCALL |
373 | extern void update_vsyscall(struct timespec *ts, struct clocksource *c); | 283 | extern void update_vsyscall(struct timespec *ts, struct clocksource *c); |
@@ -382,4 +292,6 @@ static inline void update_vsyscall_tz(void) | |||
382 | } | 292 | } |
383 | #endif | 293 | #endif |
384 | 294 | ||
295 | extern void timekeeping_notify(struct clocksource *clock); | ||
296 | |||
385 | #endif /* _LINUX_CLOCKSOURCE_H */ | 297 | #endif /* _LINUX_CLOCKSOURCE_H */ |
diff --git a/include/linux/connector.h b/include/linux/connector.h index b68d27850d51..47ebf416f512 100644 --- a/include/linux/connector.h +++ b/include/linux/connector.h | |||
@@ -136,7 +136,7 @@ struct cn_callback_data { | |||
136 | void *ddata; | 136 | void *ddata; |
137 | 137 | ||
138 | void *callback_priv; | 138 | void *callback_priv; |
139 | void (*callback) (void *); | 139 | void (*callback) (struct cn_msg *); |
140 | 140 | ||
141 | void *free; | 141 | void *free; |
142 | }; | 142 | }; |
@@ -167,11 +167,11 @@ struct cn_dev { | |||
167 | struct cn_queue_dev *cbdev; | 167 | struct cn_queue_dev *cbdev; |
168 | }; | 168 | }; |
169 | 169 | ||
170 | int cn_add_callback(struct cb_id *, char *, void (*callback) (void *)); | 170 | int cn_add_callback(struct cb_id *, char *, void (*callback) (struct cn_msg *)); |
171 | void cn_del_callback(struct cb_id *); | 171 | void cn_del_callback(struct cb_id *); |
172 | int cn_netlink_send(struct cn_msg *, u32, gfp_t); | 172 | int cn_netlink_send(struct cn_msg *, u32, gfp_t); |
173 | 173 | ||
174 | int cn_queue_add_callback(struct cn_queue_dev *dev, char *name, struct cb_id *id, void (*callback)(void *)); | 174 | int cn_queue_add_callback(struct cn_queue_dev *dev, char *name, struct cb_id *id, void (*callback)(struct cn_msg *)); |
175 | void cn_queue_del_callback(struct cn_queue_dev *dev, struct cb_id *id); | 175 | void cn_queue_del_callback(struct cn_queue_dev *dev, struct cb_id *id); |
176 | 176 | ||
177 | int queue_cn_work(struct cn_callback_entry *cbq, struct work_struct *work); | 177 | int queue_cn_work(struct cn_callback_entry *cbq, struct work_struct *work); |
diff --git a/include/linux/console_struct.h b/include/linux/console_struct.h index d71f7c0f931b..38fe59dc89ae 100644 --- a/include/linux/console_struct.h +++ b/include/linux/console_struct.h | |||
@@ -89,7 +89,6 @@ struct vc_data { | |||
89 | unsigned int vc_need_wrap : 1; | 89 | unsigned int vc_need_wrap : 1; |
90 | unsigned int vc_can_do_color : 1; | 90 | unsigned int vc_can_do_color : 1; |
91 | unsigned int vc_report_mouse : 2; | 91 | unsigned int vc_report_mouse : 2; |
92 | unsigned int vc_kmalloced : 1; | ||
93 | unsigned char vc_utf : 1; /* Unicode UTF-8 encoding */ | 92 | unsigned char vc_utf : 1; /* Unicode UTF-8 encoding */ |
94 | unsigned char vc_utf_count; | 93 | unsigned char vc_utf_count; |
95 | int vc_utf_char; | 94 | int vc_utf_char; |
diff --git a/include/linux/cpu.h b/include/linux/cpu.h index 4d668e05d458..47536197ffdd 100644 --- a/include/linux/cpu.h +++ b/include/linux/cpu.h | |||
@@ -48,6 +48,15 @@ struct notifier_block; | |||
48 | 48 | ||
49 | #ifdef CONFIG_SMP | 49 | #ifdef CONFIG_SMP |
50 | /* Need to know about CPUs going up/down? */ | 50 | /* Need to know about CPUs going up/down? */ |
51 | #if defined(CONFIG_HOTPLUG_CPU) || !defined(MODULE) | ||
52 | #define cpu_notifier(fn, pri) { \ | ||
53 | static struct notifier_block fn##_nb __cpuinitdata = \ | ||
54 | { .notifier_call = fn, .priority = pri }; \ | ||
55 | register_cpu_notifier(&fn##_nb); \ | ||
56 | } | ||
57 | #else /* #if defined(CONFIG_HOTPLUG_CPU) || !defined(MODULE) */ | ||
58 | #define cpu_notifier(fn, pri) do { (void)(fn); } while (0) | ||
59 | #endif /* #else #if defined(CONFIG_HOTPLUG_CPU) || !defined(MODULE) */ | ||
51 | #ifdef CONFIG_HOTPLUG_CPU | 60 | #ifdef CONFIG_HOTPLUG_CPU |
52 | extern int register_cpu_notifier(struct notifier_block *nb); | 61 | extern int register_cpu_notifier(struct notifier_block *nb); |
53 | extern void unregister_cpu_notifier(struct notifier_block *nb); | 62 | extern void unregister_cpu_notifier(struct notifier_block *nb); |
@@ -74,6 +83,8 @@ extern void cpu_maps_update_done(void); | |||
74 | 83 | ||
75 | #else /* CONFIG_SMP */ | 84 | #else /* CONFIG_SMP */ |
76 | 85 | ||
86 | #define cpu_notifier(fn, pri) do { (void)(fn); } while (0) | ||
87 | |||
77 | static inline int register_cpu_notifier(struct notifier_block *nb) | 88 | static inline int register_cpu_notifier(struct notifier_block *nb) |
78 | { | 89 | { |
79 | return 0; | 90 | return 0; |
@@ -99,11 +110,7 @@ extern struct sysdev_class cpu_sysdev_class; | |||
99 | 110 | ||
100 | extern void get_online_cpus(void); | 111 | extern void get_online_cpus(void); |
101 | extern void put_online_cpus(void); | 112 | extern void put_online_cpus(void); |
102 | #define hotcpu_notifier(fn, pri) { \ | 113 | #define hotcpu_notifier(fn, pri) cpu_notifier(fn, pri) |
103 | static struct notifier_block fn##_nb __cpuinitdata = \ | ||
104 | { .notifier_call = fn, .priority = pri }; \ | ||
105 | register_cpu_notifier(&fn##_nb); \ | ||
106 | } | ||
107 | #define register_hotcpu_notifier(nb) register_cpu_notifier(nb) | 114 | #define register_hotcpu_notifier(nb) register_cpu_notifier(nb) |
108 | #define unregister_hotcpu_notifier(nb) unregister_cpu_notifier(nb) | 115 | #define unregister_hotcpu_notifier(nb) unregister_cpu_notifier(nb) |
109 | int cpu_down(unsigned int cpu); | 116 | int cpu_down(unsigned int cpu); |
diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h index 161042746afc..44717eb47639 100644 --- a/include/linux/cpufreq.h +++ b/include/linux/cpufreq.h | |||
@@ -65,6 +65,9 @@ static inline int cpufreq_unregister_notifier(struct notifier_block *nb, | |||
65 | 65 | ||
66 | struct cpufreq_governor; | 66 | struct cpufreq_governor; |
67 | 67 | ||
68 | /* /sys/devices/system/cpu/cpufreq: entry point for global variables */ | ||
69 | extern struct kobject *cpufreq_global_kobject; | ||
70 | |||
68 | #define CPUFREQ_ETERNAL (-1) | 71 | #define CPUFREQ_ETERNAL (-1) |
69 | struct cpufreq_cpuinfo { | 72 | struct cpufreq_cpuinfo { |
70 | unsigned int max_freq; | 73 | unsigned int max_freq; |
@@ -274,6 +277,13 @@ struct freq_attr { | |||
274 | ssize_t (*store)(struct cpufreq_policy *, const char *, size_t count); | 277 | ssize_t (*store)(struct cpufreq_policy *, const char *, size_t count); |
275 | }; | 278 | }; |
276 | 279 | ||
280 | struct global_attr { | ||
281 | struct attribute attr; | ||
282 | ssize_t (*show)(struct kobject *kobj, | ||
283 | struct attribute *attr, char *buf); | ||
284 | ssize_t (*store)(struct kobject *a, struct attribute *b, | ||
285 | const char *c, size_t count); | ||
286 | }; | ||
277 | 287 | ||
278 | /********************************************************************* | 288 | /********************************************************************* |
279 | * CPUFREQ 2.6. INTERFACE * | 289 | * CPUFREQ 2.6. INTERFACE * |
diff --git a/include/linux/cpumask.h b/include/linux/cpumask.h index c5ac87ca7bc6..796df12091b7 100644 --- a/include/linux/cpumask.h +++ b/include/linux/cpumask.h | |||
@@ -43,10 +43,10 @@ | |||
43 | * int cpu_isset(cpu, mask) true iff bit 'cpu' set in mask | 43 | * int cpu_isset(cpu, mask) true iff bit 'cpu' set in mask |
44 | * int cpu_test_and_set(cpu, mask) test and set bit 'cpu' in mask | 44 | * int cpu_test_and_set(cpu, mask) test and set bit 'cpu' in mask |
45 | * | 45 | * |
46 | * void cpus_and(dst, src1, src2) dst = src1 & src2 [intersection] | 46 | * int cpus_and(dst, src1, src2) dst = src1 & src2 [intersection] |
47 | * void cpus_or(dst, src1, src2) dst = src1 | src2 [union] | 47 | * void cpus_or(dst, src1, src2) dst = src1 | src2 [union] |
48 | * void cpus_xor(dst, src1, src2) dst = src1 ^ src2 | 48 | * void cpus_xor(dst, src1, src2) dst = src1 ^ src2 |
49 | * void cpus_andnot(dst, src1, src2) dst = src1 & ~src2 | 49 | * int cpus_andnot(dst, src1, src2) dst = src1 & ~src2 |
50 | * void cpus_complement(dst, src) dst = ~src | 50 | * void cpus_complement(dst, src) dst = ~src |
51 | * | 51 | * |
52 | * int cpus_equal(mask1, mask2) Does mask1 == mask2? | 52 | * int cpus_equal(mask1, mask2) Does mask1 == mask2? |
@@ -179,10 +179,10 @@ static inline int __cpu_test_and_set(int cpu, cpumask_t *addr) | |||
179 | } | 179 | } |
180 | 180 | ||
181 | #define cpus_and(dst, src1, src2) __cpus_and(&(dst), &(src1), &(src2), NR_CPUS) | 181 | #define cpus_and(dst, src1, src2) __cpus_and(&(dst), &(src1), &(src2), NR_CPUS) |
182 | static inline void __cpus_and(cpumask_t *dstp, const cpumask_t *src1p, | 182 | static inline int __cpus_and(cpumask_t *dstp, const cpumask_t *src1p, |
183 | const cpumask_t *src2p, int nbits) | 183 | const cpumask_t *src2p, int nbits) |
184 | { | 184 | { |
185 | bitmap_and(dstp->bits, src1p->bits, src2p->bits, nbits); | 185 | return bitmap_and(dstp->bits, src1p->bits, src2p->bits, nbits); |
186 | } | 186 | } |
187 | 187 | ||
188 | #define cpus_or(dst, src1, src2) __cpus_or(&(dst), &(src1), &(src2), NR_CPUS) | 188 | #define cpus_or(dst, src1, src2) __cpus_or(&(dst), &(src1), &(src2), NR_CPUS) |
@@ -201,10 +201,10 @@ static inline void __cpus_xor(cpumask_t *dstp, const cpumask_t *src1p, | |||
201 | 201 | ||
202 | #define cpus_andnot(dst, src1, src2) \ | 202 | #define cpus_andnot(dst, src1, src2) \ |
203 | __cpus_andnot(&(dst), &(src1), &(src2), NR_CPUS) | 203 | __cpus_andnot(&(dst), &(src1), &(src2), NR_CPUS) |
204 | static inline void __cpus_andnot(cpumask_t *dstp, const cpumask_t *src1p, | 204 | static inline int __cpus_andnot(cpumask_t *dstp, const cpumask_t *src1p, |
205 | const cpumask_t *src2p, int nbits) | 205 | const cpumask_t *src2p, int nbits) |
206 | { | 206 | { |
207 | bitmap_andnot(dstp->bits, src1p->bits, src2p->bits, nbits); | 207 | return bitmap_andnot(dstp->bits, src1p->bits, src2p->bits, nbits); |
208 | } | 208 | } |
209 | 209 | ||
210 | #define cpus_complement(dst, src) __cpus_complement(&(dst), &(src), NR_CPUS) | 210 | #define cpus_complement(dst, src) __cpus_complement(&(dst), &(src), NR_CPUS) |
@@ -738,11 +738,11 @@ static inline void cpumask_clear(struct cpumask *dstp) | |||
738 | * @src1p: the first input | 738 | * @src1p: the first input |
739 | * @src2p: the second input | 739 | * @src2p: the second input |
740 | */ | 740 | */ |
741 | static inline void cpumask_and(struct cpumask *dstp, | 741 | static inline int cpumask_and(struct cpumask *dstp, |
742 | const struct cpumask *src1p, | 742 | const struct cpumask *src1p, |
743 | const struct cpumask *src2p) | 743 | const struct cpumask *src2p) |
744 | { | 744 | { |
745 | bitmap_and(cpumask_bits(dstp), cpumask_bits(src1p), | 745 | return bitmap_and(cpumask_bits(dstp), cpumask_bits(src1p), |
746 | cpumask_bits(src2p), nr_cpumask_bits); | 746 | cpumask_bits(src2p), nr_cpumask_bits); |
747 | } | 747 | } |
748 | 748 | ||
@@ -779,11 +779,11 @@ static inline void cpumask_xor(struct cpumask *dstp, | |||
779 | * @src1p: the first input | 779 | * @src1p: the first input |
780 | * @src2p: the second input | 780 | * @src2p: the second input |
781 | */ | 781 | */ |
782 | static inline void cpumask_andnot(struct cpumask *dstp, | 782 | static inline int cpumask_andnot(struct cpumask *dstp, |
783 | const struct cpumask *src1p, | 783 | const struct cpumask *src1p, |
784 | const struct cpumask *src2p) | 784 | const struct cpumask *src2p) |
785 | { | 785 | { |
786 | bitmap_andnot(cpumask_bits(dstp), cpumask_bits(src1p), | 786 | return bitmap_andnot(cpumask_bits(dstp), cpumask_bits(src1p), |
787 | cpumask_bits(src2p), nr_cpumask_bits); | 787 | cpumask_bits(src2p), nr_cpumask_bits); |
788 | } | 788 | } |
789 | 789 | ||
diff --git a/include/linux/crash_dump.h b/include/linux/crash_dump.h index 2dac064d8359..0026f267da20 100644 --- a/include/linux/crash_dump.h +++ b/include/linux/crash_dump.h | |||
@@ -3,7 +3,6 @@ | |||
3 | 3 | ||
4 | #ifdef CONFIG_CRASH_DUMP | 4 | #ifdef CONFIG_CRASH_DUMP |
5 | #include <linux/kexec.h> | 5 | #include <linux/kexec.h> |
6 | #include <linux/smp_lock.h> | ||
7 | #include <linux/device.h> | 6 | #include <linux/device.h> |
8 | #include <linux/proc_fs.h> | 7 | #include <linux/proc_fs.h> |
9 | 8 | ||
diff --git a/include/linux/cred.h b/include/linux/cred.h index 4fa999696310..fb371601a3b4 100644 --- a/include/linux/cred.h +++ b/include/linux/cred.h | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <linux/capability.h> | 15 | #include <linux/capability.h> |
16 | #include <linux/init.h> | 16 | #include <linux/init.h> |
17 | #include <linux/key.h> | 17 | #include <linux/key.h> |
18 | #include <linux/selinux.h> | ||
18 | #include <asm/atomic.h> | 19 | #include <asm/atomic.h> |
19 | 20 | ||
20 | struct user_struct; | 21 | struct user_struct; |
@@ -114,6 +115,13 @@ struct thread_group_cred { | |||
114 | */ | 115 | */ |
115 | struct cred { | 116 | struct cred { |
116 | atomic_t usage; | 117 | atomic_t usage; |
118 | #ifdef CONFIG_DEBUG_CREDENTIALS | ||
119 | atomic_t subscribers; /* number of processes subscribed */ | ||
120 | void *put_addr; | ||
121 | unsigned magic; | ||
122 | #define CRED_MAGIC 0x43736564 | ||
123 | #define CRED_MAGIC_DEAD 0x44656144 | ||
124 | #endif | ||
117 | uid_t uid; /* real UID of the task */ | 125 | uid_t uid; /* real UID of the task */ |
118 | gid_t gid; /* real GID of the task */ | 126 | gid_t gid; /* real GID of the task */ |
119 | uid_t suid; /* saved UID of the task */ | 127 | uid_t suid; /* saved UID of the task */ |
@@ -143,7 +151,9 @@ struct cred { | |||
143 | }; | 151 | }; |
144 | 152 | ||
145 | extern void __put_cred(struct cred *); | 153 | extern void __put_cred(struct cred *); |
154 | extern void exit_creds(struct task_struct *); | ||
146 | extern int copy_creds(struct task_struct *, unsigned long); | 155 | extern int copy_creds(struct task_struct *, unsigned long); |
156 | extern struct cred *cred_alloc_blank(void); | ||
147 | extern struct cred *prepare_creds(void); | 157 | extern struct cred *prepare_creds(void); |
148 | extern struct cred *prepare_exec_creds(void); | 158 | extern struct cred *prepare_exec_creds(void); |
149 | extern struct cred *prepare_usermodehelper_creds(void); | 159 | extern struct cred *prepare_usermodehelper_creds(void); |
@@ -158,6 +168,62 @@ extern int set_security_override_from_ctx(struct cred *, const char *); | |||
158 | extern int set_create_files_as(struct cred *, struct inode *); | 168 | extern int set_create_files_as(struct cred *, struct inode *); |
159 | extern void __init cred_init(void); | 169 | extern void __init cred_init(void); |
160 | 170 | ||
171 | /* | ||
172 | * check for validity of credentials | ||
173 | */ | ||
174 | #ifdef CONFIG_DEBUG_CREDENTIALS | ||
175 | extern void __invalid_creds(const struct cred *, const char *, unsigned); | ||
176 | extern void __validate_process_creds(struct task_struct *, | ||
177 | const char *, unsigned); | ||
178 | |||
179 | static inline bool creds_are_invalid(const struct cred *cred) | ||
180 | { | ||
181 | if (cred->magic != CRED_MAGIC) | ||
182 | return true; | ||
183 | if (atomic_read(&cred->usage) < atomic_read(&cred->subscribers)) | ||
184 | return true; | ||
185 | #ifdef CONFIG_SECURITY_SELINUX | ||
186 | if (selinux_is_enabled()) { | ||
187 | if ((unsigned long) cred->security < PAGE_SIZE) | ||
188 | return true; | ||
189 | if ((*(u32 *)cred->security & 0xffffff00) == | ||
190 | (POISON_FREE << 24 | POISON_FREE << 16 | POISON_FREE << 8)) | ||
191 | return true; | ||
192 | } | ||
193 | #endif | ||
194 | return false; | ||
195 | } | ||
196 | |||
197 | static inline void __validate_creds(const struct cred *cred, | ||
198 | const char *file, unsigned line) | ||
199 | { | ||
200 | if (unlikely(creds_are_invalid(cred))) | ||
201 | __invalid_creds(cred, file, line); | ||
202 | } | ||
203 | |||
204 | #define validate_creds(cred) \ | ||
205 | do { \ | ||
206 | __validate_creds((cred), __FILE__, __LINE__); \ | ||
207 | } while(0) | ||
208 | |||
209 | #define validate_process_creds() \ | ||
210 | do { \ | ||
211 | __validate_process_creds(current, __FILE__, __LINE__); \ | ||
212 | } while(0) | ||
213 | |||
214 | extern void validate_creds_for_do_exit(struct task_struct *); | ||
215 | #else | ||
216 | static inline void validate_creds(const struct cred *cred) | ||
217 | { | ||
218 | } | ||
219 | static inline void validate_creds_for_do_exit(struct task_struct *tsk) | ||
220 | { | ||
221 | } | ||
222 | static inline void validate_process_creds(void) | ||
223 | { | ||
224 | } | ||
225 | #endif | ||
226 | |||
161 | /** | 227 | /** |
162 | * get_new_cred - Get a reference on a new set of credentials | 228 | * get_new_cred - Get a reference on a new set of credentials |
163 | * @cred: The new credentials to reference | 229 | * @cred: The new credentials to reference |
@@ -186,7 +252,9 @@ static inline struct cred *get_new_cred(struct cred *cred) | |||
186 | */ | 252 | */ |
187 | static inline const struct cred *get_cred(const struct cred *cred) | 253 | static inline const struct cred *get_cred(const struct cred *cred) |
188 | { | 254 | { |
189 | return get_new_cred((struct cred *) cred); | 255 | struct cred *nonconst_cred = (struct cred *) cred; |
256 | validate_creds(cred); | ||
257 | return get_new_cred(nonconst_cred); | ||
190 | } | 258 | } |
191 | 259 | ||
192 | /** | 260 | /** |
@@ -204,7 +272,7 @@ static inline void put_cred(const struct cred *_cred) | |||
204 | { | 272 | { |
205 | struct cred *cred = (struct cred *) _cred; | 273 | struct cred *cred = (struct cred *) _cred; |
206 | 274 | ||
207 | BUG_ON(atomic_read(&(cred)->usage) <= 0); | 275 | validate_creds(cred); |
208 | if (atomic_dec_and_test(&(cred)->usage)) | 276 | if (atomic_dec_and_test(&(cred)->usage)) |
209 | __put_cred(cred); | 277 | __put_cred(cred); |
210 | } | 278 | } |
diff --git a/include/linux/crypto.h b/include/linux/crypto.h index ec29fa268b94..fd929889e8dc 100644 --- a/include/linux/crypto.h +++ b/include/linux/crypto.h | |||
@@ -115,7 +115,6 @@ struct crypto_async_request; | |||
115 | struct crypto_aead; | 115 | struct crypto_aead; |
116 | struct crypto_blkcipher; | 116 | struct crypto_blkcipher; |
117 | struct crypto_hash; | 117 | struct crypto_hash; |
118 | struct crypto_ahash; | ||
119 | struct crypto_rng; | 118 | struct crypto_rng; |
120 | struct crypto_tfm; | 119 | struct crypto_tfm; |
121 | struct crypto_type; | 120 | struct crypto_type; |
@@ -146,16 +145,6 @@ struct ablkcipher_request { | |||
146 | void *__ctx[] CRYPTO_MINALIGN_ATTR; | 145 | void *__ctx[] CRYPTO_MINALIGN_ATTR; |
147 | }; | 146 | }; |
148 | 147 | ||
149 | struct ahash_request { | ||
150 | struct crypto_async_request base; | ||
151 | |||
152 | unsigned int nbytes; | ||
153 | struct scatterlist *src; | ||
154 | u8 *result; | ||
155 | |||
156 | void *__ctx[] CRYPTO_MINALIGN_ATTR; | ||
157 | }; | ||
158 | |||
159 | /** | 148 | /** |
160 | * struct aead_request - AEAD request | 149 | * struct aead_request - AEAD request |
161 | * @base: Common attributes for async crypto requests | 150 | * @base: Common attributes for async crypto requests |
@@ -220,18 +209,6 @@ struct ablkcipher_alg { | |||
220 | unsigned int ivsize; | 209 | unsigned int ivsize; |
221 | }; | 210 | }; |
222 | 211 | ||
223 | struct ahash_alg { | ||
224 | int (*init)(struct ahash_request *req); | ||
225 | int (*reinit)(struct ahash_request *req); | ||
226 | int (*update)(struct ahash_request *req); | ||
227 | int (*final)(struct ahash_request *req); | ||
228 | int (*digest)(struct ahash_request *req); | ||
229 | int (*setkey)(struct crypto_ahash *tfm, const u8 *key, | ||
230 | unsigned int keylen); | ||
231 | |||
232 | unsigned int digestsize; | ||
233 | }; | ||
234 | |||
235 | struct aead_alg { | 212 | struct aead_alg { |
236 | int (*setkey)(struct crypto_aead *tfm, const u8 *key, | 213 | int (*setkey)(struct crypto_aead *tfm, const u8 *key, |
237 | unsigned int keylen); | 214 | unsigned int keylen); |
@@ -318,7 +295,6 @@ struct rng_alg { | |||
318 | #define cra_cipher cra_u.cipher | 295 | #define cra_cipher cra_u.cipher |
319 | #define cra_digest cra_u.digest | 296 | #define cra_digest cra_u.digest |
320 | #define cra_hash cra_u.hash | 297 | #define cra_hash cra_u.hash |
321 | #define cra_ahash cra_u.ahash | ||
322 | #define cra_compress cra_u.compress | 298 | #define cra_compress cra_u.compress |
323 | #define cra_rng cra_u.rng | 299 | #define cra_rng cra_u.rng |
324 | 300 | ||
@@ -346,7 +322,6 @@ struct crypto_alg { | |||
346 | struct cipher_alg cipher; | 322 | struct cipher_alg cipher; |
347 | struct digest_alg digest; | 323 | struct digest_alg digest; |
348 | struct hash_alg hash; | 324 | struct hash_alg hash; |
349 | struct ahash_alg ahash; | ||
350 | struct compress_alg compress; | 325 | struct compress_alg compress; |
351 | struct rng_alg rng; | 326 | struct rng_alg rng; |
352 | } cra_u; | 327 | } cra_u; |
@@ -433,18 +408,6 @@ struct hash_tfm { | |||
433 | unsigned int digestsize; | 408 | unsigned int digestsize; |
434 | }; | 409 | }; |
435 | 410 | ||
436 | struct ahash_tfm { | ||
437 | int (*init)(struct ahash_request *req); | ||
438 | int (*update)(struct ahash_request *req); | ||
439 | int (*final)(struct ahash_request *req); | ||
440 | int (*digest)(struct ahash_request *req); | ||
441 | int (*setkey)(struct crypto_ahash *tfm, const u8 *key, | ||
442 | unsigned int keylen); | ||
443 | |||
444 | unsigned int digestsize; | ||
445 | unsigned int reqsize; | ||
446 | }; | ||
447 | |||
448 | struct compress_tfm { | 411 | struct compress_tfm { |
449 | int (*cot_compress)(struct crypto_tfm *tfm, | 412 | int (*cot_compress)(struct crypto_tfm *tfm, |
450 | const u8 *src, unsigned int slen, | 413 | const u8 *src, unsigned int slen, |
@@ -465,7 +428,6 @@ struct rng_tfm { | |||
465 | #define crt_blkcipher crt_u.blkcipher | 428 | #define crt_blkcipher crt_u.blkcipher |
466 | #define crt_cipher crt_u.cipher | 429 | #define crt_cipher crt_u.cipher |
467 | #define crt_hash crt_u.hash | 430 | #define crt_hash crt_u.hash |
468 | #define crt_ahash crt_u.ahash | ||
469 | #define crt_compress crt_u.compress | 431 | #define crt_compress crt_u.compress |
470 | #define crt_rng crt_u.rng | 432 | #define crt_rng crt_u.rng |
471 | 433 | ||
@@ -479,7 +441,6 @@ struct crypto_tfm { | |||
479 | struct blkcipher_tfm blkcipher; | 441 | struct blkcipher_tfm blkcipher; |
480 | struct cipher_tfm cipher; | 442 | struct cipher_tfm cipher; |
481 | struct hash_tfm hash; | 443 | struct hash_tfm hash; |
482 | struct ahash_tfm ahash; | ||
483 | struct compress_tfm compress; | 444 | struct compress_tfm compress; |
484 | struct rng_tfm rng; | 445 | struct rng_tfm rng; |
485 | } crt_u; | 446 | } crt_u; |
@@ -770,7 +731,7 @@ static inline struct ablkcipher_request *ablkcipher_request_alloc( | |||
770 | 731 | ||
771 | static inline void ablkcipher_request_free(struct ablkcipher_request *req) | 732 | static inline void ablkcipher_request_free(struct ablkcipher_request *req) |
772 | { | 733 | { |
773 | kfree(req); | 734 | kzfree(req); |
774 | } | 735 | } |
775 | 736 | ||
776 | static inline void ablkcipher_request_set_callback( | 737 | static inline void ablkcipher_request_set_callback( |
@@ -901,7 +862,7 @@ static inline struct aead_request *aead_request_alloc(struct crypto_aead *tfm, | |||
901 | 862 | ||
902 | static inline void aead_request_free(struct aead_request *req) | 863 | static inline void aead_request_free(struct aead_request *req) |
903 | { | 864 | { |
904 | kfree(req); | 865 | kzfree(req); |
905 | } | 866 | } |
906 | 867 | ||
907 | static inline void aead_request_set_callback(struct aead_request *req, | 868 | static inline void aead_request_set_callback(struct aead_request *req, |
diff --git a/include/linux/cyclades.h b/include/linux/cyclades.h index 1fbdea4f08eb..a5049eaf782d 100644 --- a/include/linux/cyclades.h +++ b/include/linux/cyclades.h | |||
@@ -499,6 +499,7 @@ struct cyclades_card { | |||
499 | void __iomem *p9050; | 499 | void __iomem *p9050; |
500 | struct RUNTIME_9060 __iomem *p9060; | 500 | struct RUNTIME_9060 __iomem *p9060; |
501 | } ctl_addr; | 501 | } ctl_addr; |
502 | struct BOARD_CTRL __iomem *board_ctrl; /* cyz specific */ | ||
502 | int irq; | 503 | int irq; |
503 | unsigned int num_chips; /* 0 if card absent, -1 if Z/PCI, else Y */ | 504 | unsigned int num_chips; /* 0 if card absent, -1 if Z/PCI, else Y */ |
504 | unsigned int first_line; /* minor number of first channel on card */ | 505 | unsigned int first_line; /* minor number of first channel on card */ |
@@ -541,6 +542,15 @@ struct cyclades_port { | |||
541 | int magic; | 542 | int magic; |
542 | struct tty_port port; | 543 | struct tty_port port; |
543 | struct cyclades_card *card; | 544 | struct cyclades_card *card; |
545 | union { | ||
546 | struct { | ||
547 | void __iomem *base_addr; | ||
548 | } cyy; | ||
549 | struct { | ||
550 | struct CH_CTRL __iomem *ch_ctrl; | ||
551 | struct BUF_CTRL __iomem *buf_ctrl; | ||
552 | } cyz; | ||
553 | } u; | ||
544 | int line; | 554 | int line; |
545 | int flags; /* defined in tty.h */ | 555 | int flags; /* defined in tty.h */ |
546 | int type; /* UART type */ | 556 | int type; /* UART type */ |
@@ -568,7 +578,6 @@ struct cyclades_port { | |||
568 | struct cyclades_idle_stats idle_stats; | 578 | struct cyclades_idle_stats idle_stats; |
569 | struct cyclades_icount icount; | 579 | struct cyclades_icount icount; |
570 | struct completion shutdown_wait; | 580 | struct completion shutdown_wait; |
571 | wait_queue_head_t delta_msr_wait; | ||
572 | int throttle; | 581 | int throttle; |
573 | }; | 582 | }; |
574 | 583 | ||
diff --git a/include/linux/dcbnl.h b/include/linux/dcbnl.h index 7d2e10006188..b7cdbb4373df 100644 --- a/include/linux/dcbnl.h +++ b/include/linux/dcbnl.h | |||
@@ -50,6 +50,8 @@ struct dcbmsg { | |||
50 | * @DCB_CMD_SNUMTCS: set the number of traffic classes | 50 | * @DCB_CMD_SNUMTCS: set the number of traffic classes |
51 | * @DCB_CMD_GBCN: set backward congestion notification configuration | 51 | * @DCB_CMD_GBCN: set backward congestion notification configuration |
52 | * @DCB_CMD_SBCN: get backward congestion notification configration. | 52 | * @DCB_CMD_SBCN: get backward congestion notification configration. |
53 | * @DCB_CMD_GAPP: get application protocol configuration | ||
54 | * @DCB_CMD_SAPP: set application protocol configuration | ||
53 | */ | 55 | */ |
54 | enum dcbnl_commands { | 56 | enum dcbnl_commands { |
55 | DCB_CMD_UNDEFINED, | 57 | DCB_CMD_UNDEFINED, |
@@ -80,6 +82,9 @@ enum dcbnl_commands { | |||
80 | DCB_CMD_BCN_GCFG, | 82 | DCB_CMD_BCN_GCFG, |
81 | DCB_CMD_BCN_SCFG, | 83 | DCB_CMD_BCN_SCFG, |
82 | 84 | ||
85 | DCB_CMD_GAPP, | ||
86 | DCB_CMD_SAPP, | ||
87 | |||
83 | __DCB_CMD_ENUM_MAX, | 88 | __DCB_CMD_ENUM_MAX, |
84 | DCB_CMD_MAX = __DCB_CMD_ENUM_MAX - 1, | 89 | DCB_CMD_MAX = __DCB_CMD_ENUM_MAX - 1, |
85 | }; | 90 | }; |
@@ -114,6 +119,7 @@ enum dcbnl_attrs { | |||
114 | DCB_ATTR_CAP, | 119 | DCB_ATTR_CAP, |
115 | DCB_ATTR_NUMTCS, | 120 | DCB_ATTR_NUMTCS, |
116 | DCB_ATTR_BCN, | 121 | DCB_ATTR_BCN, |
122 | DCB_ATTR_APP, | ||
117 | 123 | ||
118 | __DCB_ATTR_ENUM_MAX, | 124 | __DCB_ATTR_ENUM_MAX, |
119 | DCB_ATTR_MAX = __DCB_ATTR_ENUM_MAX - 1, | 125 | DCB_ATTR_MAX = __DCB_ATTR_ENUM_MAX - 1, |
@@ -338,5 +344,17 @@ enum dcb_general_attr_values { | |||
338 | DCB_ATTR_VALUE_UNDEFINED = 0xff | 344 | DCB_ATTR_VALUE_UNDEFINED = 0xff |
339 | }; | 345 | }; |
340 | 346 | ||
347 | #define DCB_APP_IDTYPE_ETHTYPE 0x00 | ||
348 | #define DCB_APP_IDTYPE_PORTNUM 0x01 | ||
349 | enum dcbnl_app_attrs { | ||
350 | DCB_APP_ATTR_UNDEFINED, | ||
351 | |||
352 | DCB_APP_ATTR_IDTYPE, | ||
353 | DCB_APP_ATTR_ID, | ||
354 | DCB_APP_ATTR_PRIORITY, | ||
355 | |||
356 | __DCB_APP_ATTR_ENUM_MAX, | ||
357 | DCB_APP_ATTR_MAX = __DCB_APP_ATTR_ENUM_MAX - 1, | ||
358 | }; | ||
341 | 359 | ||
342 | #endif /* __LINUX_DCBNL_H__ */ | 360 | #endif /* __LINUX_DCBNL_H__ */ |
diff --git a/include/linux/decompress/generic.h b/include/linux/decompress/generic.h index 6dfb856327bb..0c7111a55a1a 100644 --- a/include/linux/decompress/generic.h +++ b/include/linux/decompress/generic.h | |||
@@ -1,31 +1,37 @@ | |||
1 | #ifndef DECOMPRESS_GENERIC_H | 1 | #ifndef DECOMPRESS_GENERIC_H |
2 | #define DECOMPRESS_GENERIC_H | 2 | #define DECOMPRESS_GENERIC_H |
3 | 3 | ||
4 | /* Minimal chunksize to be read. | ||
5 | *Bzip2 prefers at least 4096 | ||
6 | *Lzma prefers 0x10000 */ | ||
7 | #define COMPR_IOBUF_SIZE 4096 | ||
8 | |||
9 | typedef int (*decompress_fn) (unsigned char *inbuf, int len, | 4 | typedef int (*decompress_fn) (unsigned char *inbuf, int len, |
10 | int(*fill)(void*, unsigned int), | 5 | int(*fill)(void*, unsigned int), |
11 | int(*writebb)(void*, unsigned int), | 6 | int(*flush)(void*, unsigned int), |
12 | unsigned char *output, | 7 | unsigned char *outbuf, |
13 | int *posp, | 8 | int *posp, |
14 | void(*error)(char *x)); | 9 | void(*error)(char *x)); |
15 | 10 | ||
16 | /* inbuf - input buffer | 11 | /* inbuf - input buffer |
17 | *len - len of pre-read data in inbuf | 12 | *len - len of pre-read data in inbuf |
18 | *fill - function to fill inbuf if empty | 13 | *fill - function to fill inbuf when empty |
19 | *writebb - function to write out outbug | 14 | *flush - function to write out outbuf |
15 | *outbuf - output buffer | ||
20 | *posp - if non-null, input position (number of bytes read) will be | 16 | *posp - if non-null, input position (number of bytes read) will be |
21 | * returned here | 17 | * returned here |
22 | * | 18 | * |
23 | *If len != 0, the inbuf is initialized (with as much data), and fill | 19 | *If len != 0, inbuf should contain all the necessary input data, and fill |
24 | *should not be called | 20 | *should be NULL |
25 | *If len = 0, the inbuf is allocated, but empty. Its size is IOBUF_SIZE | 21 | *If len = 0, inbuf can be NULL, in which case the decompressor will allocate |
26 | *fill should be called (repeatedly...) to read data, at most IOBUF_SIZE | 22 | *the input buffer. If inbuf != NULL it must be at least XXX_IOBUF_SIZE bytes. |
23 | *fill will be called (repeatedly...) to read data, at most XXX_IOBUF_SIZE | ||
24 | *bytes should be read per call. Replace XXX with the appropriate decompressor | ||
25 | *name, i.e. LZMA_IOBUF_SIZE. | ||
26 | * | ||
27 | *If flush = NULL, outbuf must be large enough to buffer all the expected | ||
28 | *output. If flush != NULL, the output buffer will be allocated by the | ||
29 | *decompressor (outbuf = NULL), and the flush function will be called to | ||
30 | *flush the output buffer at the appropriate time (decompressor and stream | ||
31 | *dependent). | ||
27 | */ | 32 | */ |
28 | 33 | ||
34 | |||
29 | /* Utility routine to detect the decompression method */ | 35 | /* Utility routine to detect the decompression method */ |
30 | decompress_fn decompress_method(const unsigned char *inbuf, int len, | 36 | decompress_fn decompress_method(const unsigned char *inbuf, int len, |
31 | const char **name); | 37 | const char **name); |
diff --git a/include/linux/delayacct.h b/include/linux/delayacct.h index f352f06fa063..5076fe0c8a96 100644 --- a/include/linux/delayacct.h +++ b/include/linux/delayacct.h | |||
@@ -18,7 +18,6 @@ | |||
18 | #define _LINUX_DELAYACCT_H | 18 | #define _LINUX_DELAYACCT_H |
19 | 19 | ||
20 | #include <linux/sched.h> | 20 | #include <linux/sched.h> |
21 | #include <linux/taskstats_kern.h> | ||
22 | 21 | ||
23 | /* | 22 | /* |
24 | * Per-task flags relevant to delay accounting | 23 | * Per-task flags relevant to delay accounting |
diff --git a/include/linux/device-mapper.h b/include/linux/device-mapper.h index 0d6310657f32..df7607e6dce8 100644 --- a/include/linux/device-mapper.h +++ b/include/linux/device-mapper.h | |||
@@ -84,13 +84,16 @@ typedef int (*dm_merge_fn) (struct dm_target *ti, struct bvec_merge_data *bvm, | |||
84 | 84 | ||
85 | typedef int (*iterate_devices_callout_fn) (struct dm_target *ti, | 85 | typedef int (*iterate_devices_callout_fn) (struct dm_target *ti, |
86 | struct dm_dev *dev, | 86 | struct dm_dev *dev, |
87 | sector_t physical_start, | 87 | sector_t start, sector_t len, |
88 | void *data); | 88 | void *data); |
89 | 89 | ||
90 | typedef int (*dm_iterate_devices_fn) (struct dm_target *ti, | 90 | typedef int (*dm_iterate_devices_fn) (struct dm_target *ti, |
91 | iterate_devices_callout_fn fn, | 91 | iterate_devices_callout_fn fn, |
92 | void *data); | 92 | void *data); |
93 | 93 | ||
94 | typedef void (*dm_io_hints_fn) (struct dm_target *ti, | ||
95 | struct queue_limits *limits); | ||
96 | |||
94 | /* | 97 | /* |
95 | * Returns: | 98 | * Returns: |
96 | * 0: The target can handle the next I/O immediately. | 99 | * 0: The target can handle the next I/O immediately. |
@@ -104,7 +107,7 @@ void dm_error(const char *message); | |||
104 | * Combine device limits. | 107 | * Combine device limits. |
105 | */ | 108 | */ |
106 | int dm_set_device_limits(struct dm_target *ti, struct dm_dev *dev, | 109 | int dm_set_device_limits(struct dm_target *ti, struct dm_dev *dev, |
107 | sector_t start, void *data); | 110 | sector_t start, sector_t len, void *data); |
108 | 111 | ||
109 | struct dm_dev { | 112 | struct dm_dev { |
110 | struct block_device *bdev; | 113 | struct block_device *bdev; |
@@ -151,6 +154,7 @@ struct target_type { | |||
151 | dm_merge_fn merge; | 154 | dm_merge_fn merge; |
152 | dm_busy_fn busy; | 155 | dm_busy_fn busy; |
153 | dm_iterate_devices_fn iterate_devices; | 156 | dm_iterate_devices_fn iterate_devices; |
157 | dm_io_hints_fn io_hints; | ||
154 | 158 | ||
155 | /* For internal device-mapper use. */ | 159 | /* For internal device-mapper use. */ |
156 | struct list_head list; | 160 | struct list_head list; |
diff --git a/include/linux/device.h b/include/linux/device.h index ed4e39f2c423..aca31bf7d8ed 100644 --- a/include/linux/device.h +++ b/include/linux/device.h | |||
@@ -2,7 +2,8 @@ | |||
2 | * device.h - generic, centralized driver model | 2 | * device.h - generic, centralized driver model |
3 | * | 3 | * |
4 | * Copyright (c) 2001-2003 Patrick Mochel <mochel@osdl.org> | 4 | * Copyright (c) 2001-2003 Patrick Mochel <mochel@osdl.org> |
5 | * Copyright (c) 2004-2007 Greg Kroah-Hartman <gregkh@suse.de> | 5 | * Copyright (c) 2004-2009 Greg Kroah-Hartman <gregkh@suse.de> |
6 | * Copyright (c) 2008-2009 Novell Inc. | ||
6 | * | 7 | * |
7 | * This file is released under the GPLv2 | 8 | * This file is released under the GPLv2 |
8 | * | 9 | * |
@@ -25,8 +26,6 @@ | |||
25 | #include <asm/atomic.h> | 26 | #include <asm/atomic.h> |
26 | #include <asm/device.h> | 27 | #include <asm/device.h> |
27 | 28 | ||
28 | #define BUS_ID_SIZE 20 | ||
29 | |||
30 | struct device; | 29 | struct device; |
31 | struct device_private; | 30 | struct device_private; |
32 | struct device_driver; | 31 | struct device_driver; |
@@ -64,7 +63,7 @@ struct bus_type { | |||
64 | int (*suspend)(struct device *dev, pm_message_t state); | 63 | int (*suspend)(struct device *dev, pm_message_t state); |
65 | int (*resume)(struct device *dev); | 64 | int (*resume)(struct device *dev); |
66 | 65 | ||
67 | struct dev_pm_ops *pm; | 66 | const struct dev_pm_ops *pm; |
68 | 67 | ||
69 | struct bus_type_private *p; | 68 | struct bus_type_private *p; |
70 | }; | 69 | }; |
@@ -132,9 +131,9 @@ struct device_driver { | |||
132 | void (*shutdown) (struct device *dev); | 131 | void (*shutdown) (struct device *dev); |
133 | int (*suspend) (struct device *dev, pm_message_t state); | 132 | int (*suspend) (struct device *dev, pm_message_t state); |
134 | int (*resume) (struct device *dev); | 133 | int (*resume) (struct device *dev); |
135 | struct attribute_group **groups; | 134 | const struct attribute_group **groups; |
136 | 135 | ||
137 | struct dev_pm_ops *pm; | 136 | const struct dev_pm_ops *pm; |
138 | 137 | ||
139 | struct driver_private *p; | 138 | struct driver_private *p; |
140 | }; | 139 | }; |
@@ -194,7 +193,7 @@ struct class { | |||
194 | struct kobject *dev_kobj; | 193 | struct kobject *dev_kobj; |
195 | 194 | ||
196 | int (*dev_uevent)(struct device *dev, struct kobj_uevent_env *env); | 195 | int (*dev_uevent)(struct device *dev, struct kobj_uevent_env *env); |
197 | char *(*nodename)(struct device *dev); | 196 | char *(*devnode)(struct device *dev, mode_t *mode); |
198 | 197 | ||
199 | void (*class_release)(struct class *class); | 198 | void (*class_release)(struct class *class); |
200 | void (*dev_release)(struct device *dev); | 199 | void (*dev_release)(struct device *dev); |
@@ -202,7 +201,8 @@ struct class { | |||
202 | int (*suspend)(struct device *dev, pm_message_t state); | 201 | int (*suspend)(struct device *dev, pm_message_t state); |
203 | int (*resume)(struct device *dev); | 202 | int (*resume)(struct device *dev); |
204 | 203 | ||
205 | struct dev_pm_ops *pm; | 204 | const struct dev_pm_ops *pm; |
205 | |||
206 | struct class_private *p; | 206 | struct class_private *p; |
207 | }; | 207 | }; |
208 | 208 | ||
@@ -225,6 +225,14 @@ extern void class_unregister(struct class *class); | |||
225 | __class_register(class, &__key); \ | 225 | __class_register(class, &__key); \ |
226 | }) | 226 | }) |
227 | 227 | ||
228 | struct class_compat; | ||
229 | struct class_compat *class_compat_register(const char *name); | ||
230 | void class_compat_unregister(struct class_compat *cls); | ||
231 | int class_compat_create_link(struct class_compat *cls, struct device *dev, | ||
232 | struct device *device_link); | ||
233 | void class_compat_remove_link(struct class_compat *cls, struct device *dev, | ||
234 | struct device *device_link); | ||
235 | |||
228 | extern void class_dev_iter_init(struct class_dev_iter *iter, | 236 | extern void class_dev_iter_init(struct class_dev_iter *iter, |
229 | struct class *class, | 237 | struct class *class, |
230 | struct device *start, | 238 | struct device *start, |
@@ -288,12 +296,12 @@ extern void class_destroy(struct class *cls); | |||
288 | */ | 296 | */ |
289 | struct device_type { | 297 | struct device_type { |
290 | const char *name; | 298 | const char *name; |
291 | struct attribute_group **groups; | 299 | const struct attribute_group **groups; |
292 | int (*uevent)(struct device *dev, struct kobj_uevent_env *env); | 300 | int (*uevent)(struct device *dev, struct kobj_uevent_env *env); |
293 | char *(*nodename)(struct device *dev); | 301 | char *(*devnode)(struct device *dev, mode_t *mode); |
294 | void (*release)(struct device *dev); | 302 | void (*release)(struct device *dev); |
295 | 303 | ||
296 | struct dev_pm_ops *pm; | 304 | const struct dev_pm_ops *pm; |
297 | }; | 305 | }; |
298 | 306 | ||
299 | /* interface for exporting device attributes */ | 307 | /* interface for exporting device attributes */ |
@@ -382,7 +390,6 @@ struct device { | |||
382 | struct bus_type *bus; /* type of bus device is on */ | 390 | struct bus_type *bus; /* type of bus device is on */ |
383 | struct device_driver *driver; /* which driver has allocated this | 391 | struct device_driver *driver; /* which driver has allocated this |
384 | device */ | 392 | device */ |
385 | void *driver_data; /* data private to the driver */ | ||
386 | void *platform_data; /* Platform specific data, device | 393 | void *platform_data; /* Platform specific data, device |
387 | core doesn't touch it */ | 394 | core doesn't touch it */ |
388 | struct dev_pm_info power; | 395 | struct dev_pm_info power; |
@@ -413,7 +420,7 @@ struct device { | |||
413 | 420 | ||
414 | struct klist_node knode_class; | 421 | struct klist_node knode_class; |
415 | struct class *class; | 422 | struct class *class; |
416 | struct attribute_group **groups; /* optional groups */ | 423 | const struct attribute_group **groups; /* optional groups */ |
417 | 424 | ||
418 | void (*release)(struct device *dev); | 425 | void (*release)(struct device *dev); |
419 | }; | 426 | }; |
@@ -448,16 +455,6 @@ static inline void set_dev_node(struct device *dev, int node) | |||
448 | } | 455 | } |
449 | #endif | 456 | #endif |
450 | 457 | ||
451 | static inline void *dev_get_drvdata(const struct device *dev) | ||
452 | { | ||
453 | return dev->driver_data; | ||
454 | } | ||
455 | |||
456 | static inline void dev_set_drvdata(struct device *dev, void *data) | ||
457 | { | ||
458 | dev->driver_data = data; | ||
459 | } | ||
460 | |||
461 | static inline unsigned int dev_get_uevent_suppress(const struct device *dev) | 458 | static inline unsigned int dev_get_uevent_suppress(const struct device *dev) |
462 | { | 459 | { |
463 | return dev->kobj.uevent_suppress; | 460 | return dev->kobj.uevent_suppress; |
@@ -490,7 +487,10 @@ extern struct device *device_find_child(struct device *dev, void *data, | |||
490 | extern int device_rename(struct device *dev, char *new_name); | 487 | extern int device_rename(struct device *dev, char *new_name); |
491 | extern int device_move(struct device *dev, struct device *new_parent, | 488 | extern int device_move(struct device *dev, struct device *new_parent, |
492 | enum dpm_order dpm_order); | 489 | enum dpm_order dpm_order); |
493 | extern const char *device_get_nodename(struct device *dev, const char **tmp); | 490 | extern const char *device_get_devnode(struct device *dev, |
491 | mode_t *mode, const char **tmp); | ||
492 | extern void *dev_get_drvdata(const struct device *dev); | ||
493 | extern void dev_set_drvdata(struct device *dev, void *data); | ||
494 | 494 | ||
495 | /* | 495 | /* |
496 | * Root device objects for grouping under /sys/devices | 496 | * Root device objects for grouping under /sys/devices |
@@ -503,6 +503,11 @@ static inline struct device *root_device_register(const char *name) | |||
503 | } | 503 | } |
504 | extern void root_device_unregister(struct device *root); | 504 | extern void root_device_unregister(struct device *root); |
505 | 505 | ||
506 | static inline void *dev_get_platdata(const struct device *dev) | ||
507 | { | ||
508 | return dev->platform_data; | ||
509 | } | ||
510 | |||
506 | /* | 511 | /* |
507 | * Manual binding of a device to driver. See drivers/base/bus.c | 512 | * Manual binding of a device to driver. See drivers/base/bus.c |
508 | * for information on use. | 513 | * for information on use. |
@@ -548,6 +553,16 @@ extern void put_device(struct device *dev); | |||
548 | 553 | ||
549 | extern void wait_for_device_probe(void); | 554 | extern void wait_for_device_probe(void); |
550 | 555 | ||
556 | #ifdef CONFIG_DEVTMPFS | ||
557 | extern int devtmpfs_create_node(struct device *dev); | ||
558 | extern int devtmpfs_delete_node(struct device *dev); | ||
559 | extern int devtmpfs_mount(const char *mountpoint); | ||
560 | #else | ||
561 | static inline int devtmpfs_create_node(struct device *dev) { return 0; } | ||
562 | static inline int devtmpfs_delete_node(struct device *dev) { return 0; } | ||
563 | static inline int devtmpfs_mount(const char *mountpoint) { return 0; } | ||
564 | #endif | ||
565 | |||
551 | /* drivers/base/power/shutdown.c */ | 566 | /* drivers/base/power/shutdown.c */ |
552 | extern void device_shutdown(void); | 567 | extern void device_shutdown(void); |
553 | 568 | ||
diff --git a/include/linux/dm-log-userspace.h b/include/linux/dm-log-userspace.h index 642e3017b51f..8a1f972c0fe9 100644 --- a/include/linux/dm-log-userspace.h +++ b/include/linux/dm-log-userspace.h | |||
@@ -371,7 +371,18 @@ | |||
371 | (DM_ULOG_REQUEST_MASK & (request_type)) | 371 | (DM_ULOG_REQUEST_MASK & (request_type)) |
372 | 372 | ||
373 | struct dm_ulog_request { | 373 | struct dm_ulog_request { |
374 | char uuid[DM_UUID_LEN]; /* Ties a request to a specific mirror log */ | 374 | /* |
375 | * The local unique identifier (luid) and the universally unique | ||
376 | * identifier (uuid) are used to tie a request to a specific | ||
377 | * mirror log. A single machine log could probably make due with | ||
378 | * just the 'luid', but a cluster-aware log must use the 'uuid' and | ||
379 | * the 'luid'. The uuid is what is required for node to node | ||
380 | * communication concerning a particular log, but the 'luid' helps | ||
381 | * differentiate between logs that are being swapped and have the | ||
382 | * same 'uuid'. (Think "live" and "inactive" device-mapper tables.) | ||
383 | */ | ||
384 | uint64_t luid; | ||
385 | char uuid[DM_UUID_LEN]; | ||
375 | char padding[7]; /* Padding because DM_UUID_LEN = 129 */ | 386 | char padding[7]; /* Padding because DM_UUID_LEN = 129 */ |
376 | 387 | ||
377 | int32_t error; /* Used to report back processing errors */ | 388 | int32_t error; /* Used to report back processing errors */ |
diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h index 07dfd460d286..91b761846061 100644 --- a/include/linux/dma-mapping.h +++ b/include/linux/dma-mapping.h | |||
@@ -58,6 +58,7 @@ struct dma_map_ops { | |||
58 | enum dma_data_direction dir); | 58 | enum dma_data_direction dir); |
59 | int (*mapping_error)(struct device *dev, dma_addr_t dma_addr); | 59 | int (*mapping_error)(struct device *dev, dma_addr_t dma_addr); |
60 | int (*dma_supported)(struct device *dev, u64 mask); | 60 | int (*dma_supported)(struct device *dev, u64 mask); |
61 | int (*set_dma_mask)(struct device *dev, u64 mask); | ||
61 | int is_phys; | 62 | int is_phys; |
62 | }; | 63 | }; |
63 | 64 | ||
@@ -98,11 +99,6 @@ static inline int is_device_dma_capable(struct device *dev) | |||
98 | return dev->dma_mask != NULL && *dev->dma_mask != DMA_MASK_NONE; | 99 | return dev->dma_mask != NULL && *dev->dma_mask != DMA_MASK_NONE; |
99 | } | 100 | } |
100 | 101 | ||
101 | static inline int is_buffer_dma_capable(u64 mask, dma_addr_t addr, size_t size) | ||
102 | { | ||
103 | return addr + size <= mask; | ||
104 | } | ||
105 | |||
106 | #ifdef CONFIG_HAS_DMA | 102 | #ifdef CONFIG_HAS_DMA |
107 | #include <asm/dma-mapping.h> | 103 | #include <asm/dma-mapping.h> |
108 | #else | 104 | #else |
diff --git a/include/linux/dmi.h b/include/linux/dmi.h index bb5489c82c99..a8a3e1ac281d 100644 --- a/include/linux/dmi.h +++ b/include/linux/dmi.h | |||
@@ -43,7 +43,7 @@ extern const char * dmi_get_system_info(int field); | |||
43 | extern const struct dmi_device * dmi_find_device(int type, const char *name, | 43 | extern const struct dmi_device * dmi_find_device(int type, const char *name, |
44 | const struct dmi_device *from); | 44 | const struct dmi_device *from); |
45 | extern void dmi_scan_machine(void); | 45 | extern void dmi_scan_machine(void); |
46 | extern int dmi_get_year(int field); | 46 | extern bool dmi_get_date(int field, int *yearp, int *monthp, int *dayp); |
47 | extern int dmi_name_in_vendors(const char *str); | 47 | extern int dmi_name_in_vendors(const char *str); |
48 | extern int dmi_name_in_serial(const char *str); | 48 | extern int dmi_name_in_serial(const char *str); |
49 | extern int dmi_available; | 49 | extern int dmi_available; |
@@ -58,7 +58,16 @@ static inline const char * dmi_get_system_info(int field) { return NULL; } | |||
58 | static inline const struct dmi_device * dmi_find_device(int type, const char *name, | 58 | static inline const struct dmi_device * dmi_find_device(int type, const char *name, |
59 | const struct dmi_device *from) { return NULL; } | 59 | const struct dmi_device *from) { return NULL; } |
60 | static inline void dmi_scan_machine(void) { return; } | 60 | static inline void dmi_scan_machine(void) { return; } |
61 | static inline int dmi_get_year(int year) { return 0; } | 61 | static inline bool dmi_get_date(int field, int *yearp, int *monthp, int *dayp) |
62 | { | ||
63 | if (yearp) | ||
64 | *yearp = 0; | ||
65 | if (monthp) | ||
66 | *monthp = 0; | ||
67 | if (dayp) | ||
68 | *dayp = 0; | ||
69 | return false; | ||
70 | } | ||
62 | static inline int dmi_name_in_vendors(const char *s) { return 0; } | 71 | static inline int dmi_name_in_vendors(const char *s) { return 0; } |
63 | static inline int dmi_name_in_serial(const char *s) { return 0; } | 72 | static inline int dmi_name_in_serial(const char *s) { return 0; } |
64 | #define dmi_available 0 | 73 | #define dmi_available 0 |
diff --git a/include/linux/dtlk.h b/include/linux/dtlk.h index 2896d90118a9..22a7b9a5f5d1 100644 --- a/include/linux/dtlk.h +++ b/include/linux/dtlk.h | |||
@@ -1,22 +1,3 @@ | |||
1 | #if 0 | ||
2 | |||
3 | #define TRACE_TXT(text) \ | ||
4 | { \ | ||
5 | if(dtlk_trace) \ | ||
6 | { \ | ||
7 | console_print(text); \ | ||
8 | console_print("\n"); \ | ||
9 | } \ | ||
10 | } | ||
11 | |||
12 | #define TRACE_CHR(chr) \ | ||
13 | { \ | ||
14 | if(dtlk_trace) \ | ||
15 | console_print(chr); \ | ||
16 | } \ | ||
17 | |||
18 | #endif | ||
19 | |||
20 | #define DTLK_MINOR 0 | 1 | #define DTLK_MINOR 0 |
21 | #define DTLK_IO_EXTENT 0x02 | 2 | #define DTLK_IO_EXTENT 0x02 |
22 | 3 | ||
diff --git a/include/linux/dvb/dmx.h b/include/linux/dvb/dmx.h index fef943738a24..f078f3ac82d4 100644 --- a/include/linux/dvb/dmx.h +++ b/include/linux/dvb/dmx.h | |||
@@ -151,5 +151,7 @@ struct dmx_stc { | |||
151 | #define DMX_GET_CAPS _IOR('o', 48, dmx_caps_t) | 151 | #define DMX_GET_CAPS _IOR('o', 48, dmx_caps_t) |
152 | #define DMX_SET_SOURCE _IOW('o', 49, dmx_source_t) | 152 | #define DMX_SET_SOURCE _IOW('o', 49, dmx_source_t) |
153 | #define DMX_GET_STC _IOWR('o', 50, struct dmx_stc) | 153 | #define DMX_GET_STC _IOWR('o', 50, struct dmx_stc) |
154 | #define DMX_ADD_PID _IOW('o', 51, __u16) | ||
155 | #define DMX_REMOVE_PID _IOW('o', 52, __u16) | ||
154 | 156 | ||
155 | #endif /*_DVBDMX_H_*/ | 157 | #endif /*_DVBDMX_H_*/ |
diff --git a/include/linux/dvb/frontend.h b/include/linux/dvb/frontend.h index 51c8d2d49e42..b6cb5425cde3 100644 --- a/include/linux/dvb/frontend.h +++ b/include/linux/dvb/frontend.h | |||
@@ -173,7 +173,8 @@ typedef enum fe_modulation { | |||
173 | typedef enum fe_transmit_mode { | 173 | typedef enum fe_transmit_mode { |
174 | TRANSMISSION_MODE_2K, | 174 | TRANSMISSION_MODE_2K, |
175 | TRANSMISSION_MODE_8K, | 175 | TRANSMISSION_MODE_8K, |
176 | TRANSMISSION_MODE_AUTO | 176 | TRANSMISSION_MODE_AUTO, |
177 | TRANSMISSION_MODE_4K | ||
177 | } fe_transmit_mode_t; | 178 | } fe_transmit_mode_t; |
178 | 179 | ||
179 | typedef enum fe_bandwidth { | 180 | typedef enum fe_bandwidth { |
@@ -268,15 +269,42 @@ struct dvb_frontend_event { | |||
268 | #define DTV_FE_CAPABILITY 16 | 269 | #define DTV_FE_CAPABILITY 16 |
269 | #define DTV_DELIVERY_SYSTEM 17 | 270 | #define DTV_DELIVERY_SYSTEM 17 |
270 | 271 | ||
271 | #define DTV_API_VERSION 35 | 272 | /* ISDB-T and ISDB-Tsb */ |
272 | #define DTV_API_VERSION 35 | 273 | #define DTV_ISDBT_PARTIAL_RECEPTION 18 |
273 | #define DTV_CODE_RATE_HP 36 | 274 | #define DTV_ISDBT_SOUND_BROADCASTING 19 |
274 | #define DTV_CODE_RATE_LP 37 | ||
275 | #define DTV_GUARD_INTERVAL 38 | ||
276 | #define DTV_TRANSMISSION_MODE 39 | ||
277 | #define DTV_HIERARCHY 40 | ||
278 | 275 | ||
279 | #define DTV_MAX_COMMAND DTV_HIERARCHY | 276 | #define DTV_ISDBT_SB_SUBCHANNEL_ID 20 |
277 | #define DTV_ISDBT_SB_SEGMENT_IDX 21 | ||
278 | #define DTV_ISDBT_SB_SEGMENT_COUNT 22 | ||
279 | |||
280 | #define DTV_ISDBT_LAYERA_FEC 23 | ||
281 | #define DTV_ISDBT_LAYERA_MODULATION 24 | ||
282 | #define DTV_ISDBT_LAYERA_SEGMENT_COUNT 25 | ||
283 | #define DTV_ISDBT_LAYERA_TIME_INTERLEAVING 26 | ||
284 | |||
285 | #define DTV_ISDBT_LAYERB_FEC 27 | ||
286 | #define DTV_ISDBT_LAYERB_MODULATION 28 | ||
287 | #define DTV_ISDBT_LAYERB_SEGMENT_COUNT 29 | ||
288 | #define DTV_ISDBT_LAYERB_TIME_INTERLEAVING 30 | ||
289 | |||
290 | #define DTV_ISDBT_LAYERC_FEC 31 | ||
291 | #define DTV_ISDBT_LAYERC_MODULATION 32 | ||
292 | #define DTV_ISDBT_LAYERC_SEGMENT_COUNT 33 | ||
293 | #define DTV_ISDBT_LAYERC_TIME_INTERLEAVING 34 | ||
294 | |||
295 | #define DTV_API_VERSION 35 | ||
296 | |||
297 | #define DTV_CODE_RATE_HP 36 | ||
298 | #define DTV_CODE_RATE_LP 37 | ||
299 | #define DTV_GUARD_INTERVAL 38 | ||
300 | #define DTV_TRANSMISSION_MODE 39 | ||
301 | #define DTV_HIERARCHY 40 | ||
302 | |||
303 | #define DTV_ISDBT_LAYER_ENABLED 41 | ||
304 | |||
305 | #define DTV_ISDBS_TS_ID 42 | ||
306 | |||
307 | #define DTV_MAX_COMMAND DTV_ISDBS_TS_ID | ||
280 | 308 | ||
281 | typedef enum fe_pilot { | 309 | typedef enum fe_pilot { |
282 | PILOT_ON, | 310 | PILOT_ON, |
diff --git a/include/linux/dvb/version.h b/include/linux/dvb/version.h index 25b823b81734..540b0583d9fb 100644 --- a/include/linux/dvb/version.h +++ b/include/linux/dvb/version.h | |||
@@ -24,6 +24,6 @@ | |||
24 | #define _DVBVERSION_H_ | 24 | #define _DVBVERSION_H_ |
25 | 25 | ||
26 | #define DVB_API_VERSION 5 | 26 | #define DVB_API_VERSION 5 |
27 | #define DVB_API_VERSION_MINOR 0 | 27 | #define DVB_API_VERSION_MINOR 1 |
28 | 28 | ||
29 | #endif /*_DVBVERSION_H_*/ | 29 | #endif /*_DVBVERSION_H_*/ |
diff --git a/include/linux/elfcore.h b/include/linux/elfcore.h index 7605c5e9589f..00d6a68d0421 100644 --- a/include/linux/elfcore.h +++ b/include/linux/elfcore.h | |||
@@ -122,9 +122,10 @@ static inline void elf_core_copy_kernel_regs(elf_gregset_t *elfregs, struct pt_r | |||
122 | 122 | ||
123 | static inline int elf_core_copy_task_regs(struct task_struct *t, elf_gregset_t* elfregs) | 123 | static inline int elf_core_copy_task_regs(struct task_struct *t, elf_gregset_t* elfregs) |
124 | { | 124 | { |
125 | #ifdef ELF_CORE_COPY_TASK_REGS | 125 | #if defined (ELF_CORE_COPY_TASK_REGS) |
126 | |||
127 | return ELF_CORE_COPY_TASK_REGS(t, elfregs); | 126 | return ELF_CORE_COPY_TASK_REGS(t, elfregs); |
127 | #elif defined (task_pt_regs) | ||
128 | elf_core_copy_regs(elfregs, task_pt_regs(t)); | ||
128 | #endif | 129 | #endif |
129 | return 0; | 130 | return 0; |
130 | } | 131 | } |
diff --git a/include/linux/enclosure.h b/include/linux/enclosure.h index 4332442b1b57..90d1c2184112 100644 --- a/include/linux/enclosure.h +++ b/include/linux/enclosure.h | |||
@@ -122,8 +122,9 @@ enclosure_component_register(struct enclosure_device *, unsigned int, | |||
122 | enum enclosure_component_type, const char *); | 122 | enum enclosure_component_type, const char *); |
123 | int enclosure_add_device(struct enclosure_device *enclosure, int component, | 123 | int enclosure_add_device(struct enclosure_device *enclosure, int component, |
124 | struct device *dev); | 124 | struct device *dev); |
125 | int enclosure_remove_device(struct enclosure_device *enclosure, int component); | 125 | int enclosure_remove_device(struct enclosure_device *, struct device *); |
126 | struct enclosure_device *enclosure_find(struct device *dev); | 126 | struct enclosure_device *enclosure_find(struct device *dev, |
127 | struct enclosure_device *start); | ||
127 | int enclosure_for_each_device(int (*fn)(struct enclosure_device *, void *), | 128 | int enclosure_for_each_device(int (*fn)(struct enclosure_device *, void *), |
128 | void *data); | 129 | void *data); |
129 | 130 | ||
diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h index 9b660bd2e2b3..15e4eb713694 100644 --- a/include/linux/ethtool.h +++ b/include/linux/ethtool.h | |||
@@ -362,12 +362,25 @@ struct ethtool_rxnfc { | |||
362 | __u32 rule_locs[0]; | 362 | __u32 rule_locs[0]; |
363 | }; | 363 | }; |
364 | 364 | ||
365 | #define ETHTOOL_FLASH_MAX_FILENAME 128 | ||
366 | enum ethtool_flash_op_type { | ||
367 | ETHTOOL_FLASH_ALL_REGIONS = 0, | ||
368 | }; | ||
369 | |||
370 | /* for passing firmware flashing related parameters */ | ||
371 | struct ethtool_flash { | ||
372 | __u32 cmd; | ||
373 | __u32 region; | ||
374 | char data[ETHTOOL_FLASH_MAX_FILENAME]; | ||
375 | }; | ||
376 | |||
365 | #ifdef __KERNEL__ | 377 | #ifdef __KERNEL__ |
366 | 378 | ||
367 | struct net_device; | 379 | struct net_device; |
368 | 380 | ||
369 | /* Some generic methods drivers may use in their ethtool_ops */ | 381 | /* Some generic methods drivers may use in their ethtool_ops */ |
370 | u32 ethtool_op_get_link(struct net_device *dev); | 382 | u32 ethtool_op_get_link(struct net_device *dev); |
383 | u32 ethtool_op_get_rx_csum(struct net_device *dev); | ||
371 | u32 ethtool_op_get_tx_csum(struct net_device *dev); | 384 | u32 ethtool_op_get_tx_csum(struct net_device *dev); |
372 | int ethtool_op_set_tx_csum(struct net_device *dev, u32 data); | 385 | int ethtool_op_set_tx_csum(struct net_device *dev, u32 data); |
373 | int ethtool_op_set_tx_hw_csum(struct net_device *dev, u32 data); | 386 | int ethtool_op_set_tx_hw_csum(struct net_device *dev, u32 data); |
@@ -488,6 +501,7 @@ struct ethtool_ops { | |||
488 | int (*get_stats_count)(struct net_device *);/* use get_sset_count */ | 501 | int (*get_stats_count)(struct net_device *);/* use get_sset_count */ |
489 | int (*get_rxnfc)(struct net_device *, struct ethtool_rxnfc *, void *); | 502 | int (*get_rxnfc)(struct net_device *, struct ethtool_rxnfc *, void *); |
490 | int (*set_rxnfc)(struct net_device *, struct ethtool_rxnfc *); | 503 | int (*set_rxnfc)(struct net_device *, struct ethtool_rxnfc *); |
504 | int (*flash_device)(struct net_device *, struct ethtool_flash *); | ||
491 | }; | 505 | }; |
492 | #endif /* __KERNEL__ */ | 506 | #endif /* __KERNEL__ */ |
493 | 507 | ||
@@ -544,6 +558,7 @@ struct ethtool_ops { | |||
544 | #define ETHTOOL_GRXCLSRLALL 0x00000030 /* Get all RX classification rule */ | 558 | #define ETHTOOL_GRXCLSRLALL 0x00000030 /* Get all RX classification rule */ |
545 | #define ETHTOOL_SRXCLSRLDEL 0x00000031 /* Delete RX classification rule */ | 559 | #define ETHTOOL_SRXCLSRLDEL 0x00000031 /* Delete RX classification rule */ |
546 | #define ETHTOOL_SRXCLSRLINS 0x00000032 /* Insert RX classification rule */ | 560 | #define ETHTOOL_SRXCLSRLINS 0x00000032 /* Insert RX classification rule */ |
561 | #define ETHTOOL_FLASHDEV 0x00000033 /* Flash firmware to device */ | ||
547 | 562 | ||
548 | /* compatibility with older code */ | 563 | /* compatibility with older code */ |
549 | #define SPARC_ETH_GSET ETHTOOL_GSET | 564 | #define SPARC_ETH_GSET ETHTOOL_GSET |
diff --git a/include/linux/eventfd.h b/include/linux/eventfd.h index f45a8ae5f828..3b85ba6479f4 100644 --- a/include/linux/eventfd.h +++ b/include/linux/eventfd.h | |||
@@ -8,10 +8,8 @@ | |||
8 | #ifndef _LINUX_EVENTFD_H | 8 | #ifndef _LINUX_EVENTFD_H |
9 | #define _LINUX_EVENTFD_H | 9 | #define _LINUX_EVENTFD_H |
10 | 10 | ||
11 | #ifdef CONFIG_EVENTFD | ||
12 | |||
13 | /* For O_CLOEXEC and O_NONBLOCK */ | ||
14 | #include <linux/fcntl.h> | 11 | #include <linux/fcntl.h> |
12 | #include <linux/file.h> | ||
15 | 13 | ||
16 | /* | 14 | /* |
17 | * CAREFUL: Check include/asm-generic/fcntl.h when defining | 15 | * CAREFUL: Check include/asm-generic/fcntl.h when defining |
@@ -27,16 +25,37 @@ | |||
27 | #define EFD_SHARED_FCNTL_FLAGS (O_CLOEXEC | O_NONBLOCK) | 25 | #define EFD_SHARED_FCNTL_FLAGS (O_CLOEXEC | O_NONBLOCK) |
28 | #define EFD_FLAGS_SET (EFD_SHARED_FCNTL_FLAGS | EFD_SEMAPHORE) | 26 | #define EFD_FLAGS_SET (EFD_SHARED_FCNTL_FLAGS | EFD_SEMAPHORE) |
29 | 27 | ||
28 | #ifdef CONFIG_EVENTFD | ||
29 | |||
30 | struct eventfd_ctx *eventfd_ctx_get(struct eventfd_ctx *ctx); | ||
31 | void eventfd_ctx_put(struct eventfd_ctx *ctx); | ||
30 | struct file *eventfd_fget(int fd); | 32 | struct file *eventfd_fget(int fd); |
31 | int eventfd_signal(struct file *file, int n); | 33 | struct eventfd_ctx *eventfd_ctx_fdget(int fd); |
34 | struct eventfd_ctx *eventfd_ctx_fileget(struct file *file); | ||
35 | int eventfd_signal(struct eventfd_ctx *ctx, int n); | ||
32 | 36 | ||
33 | #else /* CONFIG_EVENTFD */ | 37 | #else /* CONFIG_EVENTFD */ |
34 | 38 | ||
35 | #define eventfd_fget(fd) ERR_PTR(-ENOSYS) | 39 | /* |
36 | static inline int eventfd_signal(struct file *file, int n) | 40 | * Ugly ugly ugly error layer to support modules that uses eventfd but |
37 | { return 0; } | 41 | * pretend to work in !CONFIG_EVENTFD configurations. Namely, AIO. |
42 | */ | ||
43 | static inline struct eventfd_ctx *eventfd_ctx_fdget(int fd) | ||
44 | { | ||
45 | return ERR_PTR(-ENOSYS); | ||
46 | } | ||
47 | |||
48 | static inline int eventfd_signal(struct eventfd_ctx *ctx, int n) | ||
49 | { | ||
50 | return -ENOSYS; | ||
51 | } | ||
52 | |||
53 | static inline void eventfd_ctx_put(struct eventfd_ctx *ctx) | ||
54 | { | ||
55 | |||
56 | } | ||
38 | 57 | ||
39 | #endif /* CONFIG_EVENTFD */ | 58 | #endif |
40 | 59 | ||
41 | #endif /* _LINUX_EVENTFD_H */ | 60 | #endif /* _LINUX_EVENTFD_H */ |
42 | 61 | ||
diff --git a/include/linux/ext3_fs.h b/include/linux/ext3_fs.h index 634a5e5aba3e..7499b3667798 100644 --- a/include/linux/ext3_fs.h +++ b/include/linux/ext3_fs.h | |||
@@ -874,7 +874,7 @@ struct buffer_head * ext3_getblk (handle_t *, struct inode *, long, int, int *); | |||
874 | struct buffer_head * ext3_bread (handle_t *, struct inode *, int, int, int *); | 874 | struct buffer_head * ext3_bread (handle_t *, struct inode *, int, int, int *); |
875 | int ext3_get_blocks_handle(handle_t *handle, struct inode *inode, | 875 | int ext3_get_blocks_handle(handle_t *handle, struct inode *inode, |
876 | sector_t iblock, unsigned long maxblocks, struct buffer_head *bh_result, | 876 | sector_t iblock, unsigned long maxblocks, struct buffer_head *bh_result, |
877 | int create, int extend_disksize); | 877 | int create); |
878 | 878 | ||
879 | extern struct inode *ext3_iget(struct super_block *, unsigned long); | 879 | extern struct inode *ext3_iget(struct super_block *, unsigned long); |
880 | extern int ext3_write_inode (struct inode *, int); | 880 | extern int ext3_write_inode (struct inode *, int); |
diff --git a/include/linux/fb.h b/include/linux/fb.h index dd68358996b7..f847df9e99b6 100644 --- a/include/linux/fb.h +++ b/include/linux/fb.h | |||
@@ -819,6 +819,7 @@ struct fb_info { | |||
819 | int node; | 819 | int node; |
820 | int flags; | 820 | int flags; |
821 | struct mutex lock; /* Lock for open/release/ioctl funcs */ | 821 | struct mutex lock; /* Lock for open/release/ioctl funcs */ |
822 | struct mutex mm_lock; /* Lock for fb_mmap and smem_* fields */ | ||
822 | struct fb_var_screeninfo var; /* Current var */ | 823 | struct fb_var_screeninfo var; /* Current var */ |
823 | struct fb_fix_screeninfo fix; /* Current fix */ | 824 | struct fb_fix_screeninfo fix; /* Current fix */ |
824 | struct fb_monspecs monspecs; /* Current Monitor specs */ | 825 | struct fb_monspecs monspecs; /* Current Monitor specs */ |
diff --git a/include/linux/fips.h b/include/linux/fips.h new file mode 100644 index 000000000000..f8fb07b0b6b8 --- /dev/null +++ b/include/linux/fips.h | |||
@@ -0,0 +1,10 @@ | |||
1 | #ifndef _FIPS_H | ||
2 | #define _FIPS_H | ||
3 | |||
4 | #ifdef CONFIG_CRYPTO_FIPS | ||
5 | extern int fips_enabled; | ||
6 | #else | ||
7 | #define fips_enabled 0 | ||
8 | #endif | ||
9 | |||
10 | #endif | ||
diff --git a/include/linux/firewire.h b/include/linux/firewire.h index 9823946adbc5..192d1e43c43c 100644 --- a/include/linux/firewire.h +++ b/include/linux/firewire.h | |||
@@ -127,6 +127,7 @@ struct fw_card { | |||
127 | struct delayed_work work; | 127 | struct delayed_work work; |
128 | int bm_retries; | 128 | int bm_retries; |
129 | int bm_generation; | 129 | int bm_generation; |
130 | __be32 bm_transaction_data[2]; | ||
130 | 131 | ||
131 | bool broadcast_channel_allocated; | 132 | bool broadcast_channel_allocated; |
132 | u32 broadcast_channel; | 133 | u32 broadcast_channel; |
diff --git a/include/linux/flex_array.h b/include/linux/flex_array.h new file mode 100644 index 000000000000..1d747f72298b --- /dev/null +++ b/include/linux/flex_array.h | |||
@@ -0,0 +1,73 @@ | |||
1 | #ifndef _FLEX_ARRAY_H | ||
2 | #define _FLEX_ARRAY_H | ||
3 | |||
4 | #include <linux/types.h> | ||
5 | #include <asm/page.h> | ||
6 | |||
7 | #define FLEX_ARRAY_PART_SIZE PAGE_SIZE | ||
8 | #define FLEX_ARRAY_BASE_SIZE PAGE_SIZE | ||
9 | |||
10 | struct flex_array_part; | ||
11 | |||
12 | /* | ||
13 | * This is meant to replace cases where an array-like | ||
14 | * structure has gotten too big to fit into kmalloc() | ||
15 | * and the developer is getting tempted to use | ||
16 | * vmalloc(). | ||
17 | */ | ||
18 | |||
19 | struct flex_array { | ||
20 | union { | ||
21 | struct { | ||
22 | int element_size; | ||
23 | int total_nr_elements; | ||
24 | struct flex_array_part *parts[]; | ||
25 | }; | ||
26 | /* | ||
27 | * This little trick makes sure that | ||
28 | * sizeof(flex_array) == PAGE_SIZE | ||
29 | */ | ||
30 | char padding[FLEX_ARRAY_BASE_SIZE]; | ||
31 | }; | ||
32 | }; | ||
33 | |||
34 | /* Number of bytes left in base struct flex_array, excluding metadata */ | ||
35 | #define FLEX_ARRAY_BASE_BYTES_LEFT \ | ||
36 | (FLEX_ARRAY_BASE_SIZE - offsetof(struct flex_array, parts)) | ||
37 | |||
38 | /* Number of pointers in base to struct flex_array_part pages */ | ||
39 | #define FLEX_ARRAY_NR_BASE_PTRS \ | ||
40 | (FLEX_ARRAY_BASE_BYTES_LEFT / sizeof(struct flex_array_part *)) | ||
41 | |||
42 | /* Number of elements of size that fit in struct flex_array_part */ | ||
43 | #define FLEX_ARRAY_ELEMENTS_PER_PART(size) \ | ||
44 | (FLEX_ARRAY_PART_SIZE / size) | ||
45 | |||
46 | /* | ||
47 | * Defines a statically allocated flex array and ensures its parameters are | ||
48 | * valid. | ||
49 | */ | ||
50 | #define DEFINE_FLEX_ARRAY(__arrayname, __element_size, __total) \ | ||
51 | struct flex_array __arrayname = { { { \ | ||
52 | .element_size = (__element_size), \ | ||
53 | .total_nr_elements = (__total), \ | ||
54 | } } }; \ | ||
55 | static inline void __arrayname##_invalid_parameter(void) \ | ||
56 | { \ | ||
57 | BUILD_BUG_ON((__total) > FLEX_ARRAY_NR_BASE_PTRS * \ | ||
58 | FLEX_ARRAY_ELEMENTS_PER_PART(__element_size)); \ | ||
59 | } | ||
60 | |||
61 | struct flex_array *flex_array_alloc(int element_size, unsigned int total, | ||
62 | gfp_t flags); | ||
63 | int flex_array_prealloc(struct flex_array *fa, unsigned int start, | ||
64 | unsigned int end, gfp_t flags); | ||
65 | void flex_array_free(struct flex_array *fa); | ||
66 | void flex_array_free_parts(struct flex_array *fa); | ||
67 | int flex_array_put(struct flex_array *fa, unsigned int element_nr, void *src, | ||
68 | gfp_t flags); | ||
69 | int flex_array_clear(struct flex_array *fa, unsigned int element_nr); | ||
70 | void *flex_array_get(struct flex_array *fa, unsigned int element_nr); | ||
71 | int flex_array_shrink(struct flex_array *fa); | ||
72 | |||
73 | #endif /* _FLEX_ARRAY_H */ | ||
diff --git a/include/linux/fs.h b/include/linux/fs.h index 0872372184fe..51803528b095 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
@@ -161,8 +161,8 @@ struct inodes_stat_t { | |||
161 | * These aren't really reads or writes, they pass down information about | 161 | * These aren't really reads or writes, they pass down information about |
162 | * parts of device that are now unused by the file system. | 162 | * parts of device that are now unused by the file system. |
163 | */ | 163 | */ |
164 | #define DISCARD_NOBARRIER (1 << BIO_RW_DISCARD) | 164 | #define DISCARD_NOBARRIER (WRITE | (1 << BIO_RW_DISCARD)) |
165 | #define DISCARD_BARRIER ((1 << BIO_RW_DISCARD) | (1 << BIO_RW_BARRIER)) | 165 | #define DISCARD_BARRIER (DISCARD_NOBARRIER | (1 << BIO_RW_BARRIER)) |
166 | 166 | ||
167 | #define SEL_IN 1 | 167 | #define SEL_IN 1 |
168 | #define SEL_OUT 2 | 168 | #define SEL_OUT 2 |
@@ -655,7 +655,6 @@ struct block_device { | |||
655 | int bd_invalidated; | 655 | int bd_invalidated; |
656 | struct gendisk * bd_disk; | 656 | struct gendisk * bd_disk; |
657 | struct list_head bd_list; | 657 | struct list_head bd_list; |
658 | struct backing_dev_info *bd_inode_backing_dev_info; | ||
659 | /* | 658 | /* |
660 | * Private data. You must have bd_claim'ed the block_device | 659 | * Private data. You must have bd_claim'ed the block_device |
661 | * to use this. NOTE: bd_claim allows an owner to claim | 660 | * to use this. NOTE: bd_claim allows an owner to claim |
@@ -715,7 +714,7 @@ struct posix_acl; | |||
715 | 714 | ||
716 | struct inode { | 715 | struct inode { |
717 | struct hlist_node i_hash; | 716 | struct hlist_node i_hash; |
718 | struct list_head i_list; | 717 | struct list_head i_list; /* backing dev IO list */ |
719 | struct list_head i_sb_list; | 718 | struct list_head i_sb_list; |
720 | struct list_head i_dentry; | 719 | struct list_head i_dentry; |
721 | unsigned long i_ino; | 720 | unsigned long i_ino; |
@@ -1067,8 +1066,8 @@ struct file_lock { | |||
1067 | struct fasync_struct * fl_fasync; /* for lease break notifications */ | 1066 | struct fasync_struct * fl_fasync; /* for lease break notifications */ |
1068 | unsigned long fl_break_time; /* for nonblocking lease breaks */ | 1067 | unsigned long fl_break_time; /* for nonblocking lease breaks */ |
1069 | 1068 | ||
1070 | struct file_lock_operations *fl_ops; /* Callbacks for filesystems */ | 1069 | const struct file_lock_operations *fl_ops; /* Callbacks for filesystems */ |
1071 | struct lock_manager_operations *fl_lmops; /* Callbacks for lockmanagers */ | 1070 | const struct lock_manager_operations *fl_lmops; /* Callbacks for lockmanagers */ |
1072 | union { | 1071 | union { |
1073 | struct nfs_lock_info nfs_fl; | 1072 | struct nfs_lock_info nfs_fl; |
1074 | struct nfs4_lock_info nfs4_fl; | 1073 | struct nfs4_lock_info nfs4_fl; |
@@ -1319,8 +1318,8 @@ struct super_block { | |||
1319 | unsigned long long s_maxbytes; /* Max file size */ | 1318 | unsigned long long s_maxbytes; /* Max file size */ |
1320 | struct file_system_type *s_type; | 1319 | struct file_system_type *s_type; |
1321 | const struct super_operations *s_op; | 1320 | const struct super_operations *s_op; |
1322 | struct dquot_operations *dq_op; | 1321 | const struct dquot_operations *dq_op; |
1323 | struct quotactl_ops *s_qcop; | 1322 | const struct quotactl_ops *s_qcop; |
1324 | const struct export_operations *s_export_op; | 1323 | const struct export_operations *s_export_op; |
1325 | unsigned long s_flags; | 1324 | unsigned long s_flags; |
1326 | unsigned long s_magic; | 1325 | unsigned long s_magic; |
@@ -1336,9 +1335,6 @@ struct super_block { | |||
1336 | struct xattr_handler **s_xattr; | 1335 | struct xattr_handler **s_xattr; |
1337 | 1336 | ||
1338 | struct list_head s_inodes; /* all inodes */ | 1337 | struct list_head s_inodes; /* all inodes */ |
1339 | struct list_head s_dirty; /* dirty inodes */ | ||
1340 | struct list_head s_io; /* parked for writeback */ | ||
1341 | struct list_head s_more_io; /* parked for more writeback */ | ||
1342 | struct hlist_head s_anon; /* anonymous dentries for (nfs) exporting */ | 1338 | struct hlist_head s_anon; /* anonymous dentries for (nfs) exporting */ |
1343 | struct list_head s_files; | 1339 | struct list_head s_files; |
1344 | /* s_dentry_lru and s_nr_dentry_unused are protected by dcache_lock */ | 1340 | /* s_dentry_lru and s_nr_dentry_unused are protected by dcache_lock */ |
@@ -1346,6 +1342,7 @@ struct super_block { | |||
1346 | int s_nr_dentry_unused; /* # of dentry on lru */ | 1342 | int s_nr_dentry_unused; /* # of dentry on lru */ |
1347 | 1343 | ||
1348 | struct block_device *s_bdev; | 1344 | struct block_device *s_bdev; |
1345 | struct backing_dev_info *s_bdi; | ||
1349 | struct mtd_info *s_mtd; | 1346 | struct mtd_info *s_mtd; |
1350 | struct list_head s_instances; | 1347 | struct list_head s_instances; |
1351 | struct quota_info s_dquot; /* Diskquota specific options */ | 1348 | struct quota_info s_dquot; /* Diskquota specific options */ |
@@ -1458,11 +1455,6 @@ int fiemap_check_flags(struct fiemap_extent_info *fieinfo, u32 fs_flags); | |||
1458 | #define DT_SOCK 12 | 1455 | #define DT_SOCK 12 |
1459 | #define DT_WHT 14 | 1456 | #define DT_WHT 14 |
1460 | 1457 | ||
1461 | #define OSYNC_METADATA (1<<0) | ||
1462 | #define OSYNC_DATA (1<<1) | ||
1463 | #define OSYNC_INODE (1<<2) | ||
1464 | int generic_osync_inode(struct inode *, struct address_space *, int); | ||
1465 | |||
1466 | /* | 1458 | /* |
1467 | * This is the "filldir" function type, used by readdir() to let | 1459 | * This is the "filldir" function type, used by readdir() to let |
1468 | * the kernel specify what kind of dirent layout it wants to have. | 1460 | * the kernel specify what kind of dirent layout it wants to have. |
@@ -1528,6 +1520,7 @@ struct inode_operations { | |||
1528 | void (*put_link) (struct dentry *, struct nameidata *, void *); | 1520 | void (*put_link) (struct dentry *, struct nameidata *, void *); |
1529 | void (*truncate) (struct inode *); | 1521 | void (*truncate) (struct inode *); |
1530 | int (*permission) (struct inode *, int); | 1522 | int (*permission) (struct inode *, int); |
1523 | int (*check_acl)(struct inode *, int); | ||
1531 | int (*setattr) (struct dentry *, struct iattr *); | 1524 | int (*setattr) (struct dentry *, struct iattr *); |
1532 | int (*getattr) (struct vfsmount *mnt, struct dentry *, struct kstat *); | 1525 | int (*getattr) (struct vfsmount *mnt, struct dentry *, struct kstat *); |
1533 | int (*setxattr) (struct dentry *, const char *,const void *,size_t,int); | 1526 | int (*setxattr) (struct dentry *, const char *,const void *,size_t,int); |
@@ -1788,6 +1781,7 @@ extern int get_sb_pseudo(struct file_system_type *, char *, | |||
1788 | struct vfsmount *mnt); | 1781 | struct vfsmount *mnt); |
1789 | extern void simple_set_mnt(struct vfsmount *mnt, struct super_block *sb); | 1782 | extern void simple_set_mnt(struct vfsmount *mnt, struct super_block *sb); |
1790 | int __put_super_and_need_restart(struct super_block *sb); | 1783 | int __put_super_and_need_restart(struct super_block *sb); |
1784 | void put_super(struct super_block *sb); | ||
1791 | 1785 | ||
1792 | /* Alas, no aliases. Too much hassle with bringing module.h everywhere */ | 1786 | /* Alas, no aliases. Too much hassle with bringing module.h everywhere */ |
1793 | #define fops_get(fops) \ | 1787 | #define fops_get(fops) \ |
@@ -1946,6 +1940,7 @@ extern void putname(const char *name); | |||
1946 | extern int register_blkdev(unsigned int, const char *); | 1940 | extern int register_blkdev(unsigned int, const char *); |
1947 | extern void unregister_blkdev(unsigned int, const char *); | 1941 | extern void unregister_blkdev(unsigned int, const char *); |
1948 | extern struct block_device *bdget(dev_t); | 1942 | extern struct block_device *bdget(dev_t); |
1943 | extern struct block_device *bdgrab(struct block_device *bdev); | ||
1949 | extern void bd_set_size(struct block_device *, loff_t size); | 1944 | extern void bd_set_size(struct block_device *, loff_t size); |
1950 | extern void bd_forget(struct inode *inode); | 1945 | extern void bd_forget(struct inode *inode); |
1951 | extern void bdput(struct block_device *); | 1946 | extern void bdput(struct block_device *); |
@@ -1997,12 +1992,25 @@ extern void bd_release_from_disk(struct block_device *, struct gendisk *); | |||
1997 | #define CHRDEV_MAJOR_HASH_SIZE 255 | 1992 | #define CHRDEV_MAJOR_HASH_SIZE 255 |
1998 | extern int alloc_chrdev_region(dev_t *, unsigned, unsigned, const char *); | 1993 | extern int alloc_chrdev_region(dev_t *, unsigned, unsigned, const char *); |
1999 | extern int register_chrdev_region(dev_t, unsigned, const char *); | 1994 | extern int register_chrdev_region(dev_t, unsigned, const char *); |
2000 | extern int register_chrdev(unsigned int, const char *, | 1995 | extern int __register_chrdev(unsigned int major, unsigned int baseminor, |
2001 | const struct file_operations *); | 1996 | unsigned int count, const char *name, |
2002 | extern void unregister_chrdev(unsigned int, const char *); | 1997 | const struct file_operations *fops); |
1998 | extern void __unregister_chrdev(unsigned int major, unsigned int baseminor, | ||
1999 | unsigned int count, const char *name); | ||
2003 | extern void unregister_chrdev_region(dev_t, unsigned); | 2000 | extern void unregister_chrdev_region(dev_t, unsigned); |
2004 | extern void chrdev_show(struct seq_file *,off_t); | 2001 | extern void chrdev_show(struct seq_file *,off_t); |
2005 | 2002 | ||
2003 | static inline int register_chrdev(unsigned int major, const char *name, | ||
2004 | const struct file_operations *fops) | ||
2005 | { | ||
2006 | return __register_chrdev(major, 0, 256, name, fops); | ||
2007 | } | ||
2008 | |||
2009 | static inline void unregister_chrdev(unsigned int major, const char *name) | ||
2010 | { | ||
2011 | __unregister_chrdev(major, 0, 256, name); | ||
2012 | } | ||
2013 | |||
2006 | /* fs/block_dev.c */ | 2014 | /* fs/block_dev.c */ |
2007 | #define BDEVNAME_SIZE 32 /* Largest string for a blockdev identifier */ | 2015 | #define BDEVNAME_SIZE 32 /* Largest string for a blockdev identifier */ |
2008 | #define BDEVT_SIZE 10 /* Largest string for MAJ:MIN for blkdev */ | 2016 | #define BDEVT_SIZE 10 /* Largest string for MAJ:MIN for blkdev */ |
@@ -2069,12 +2077,12 @@ static inline void invalidate_remote_inode(struct inode *inode) | |||
2069 | extern int invalidate_inode_pages2(struct address_space *mapping); | 2077 | extern int invalidate_inode_pages2(struct address_space *mapping); |
2070 | extern int invalidate_inode_pages2_range(struct address_space *mapping, | 2078 | extern int invalidate_inode_pages2_range(struct address_space *mapping, |
2071 | pgoff_t start, pgoff_t end); | 2079 | pgoff_t start, pgoff_t end); |
2072 | extern void generic_sync_sb_inodes(struct super_block *sb, | ||
2073 | struct writeback_control *wbc); | ||
2074 | extern int write_inode_now(struct inode *, int); | 2080 | extern int write_inode_now(struct inode *, int); |
2075 | extern int filemap_fdatawrite(struct address_space *); | 2081 | extern int filemap_fdatawrite(struct address_space *); |
2076 | extern int filemap_flush(struct address_space *); | 2082 | extern int filemap_flush(struct address_space *); |
2077 | extern int filemap_fdatawait(struct address_space *); | 2083 | extern int filemap_fdatawait(struct address_space *); |
2084 | extern int filemap_fdatawait_range(struct address_space *, loff_t lstart, | ||
2085 | loff_t lend); | ||
2078 | extern int filemap_write_and_wait(struct address_space *mapping); | 2086 | extern int filemap_write_and_wait(struct address_space *mapping); |
2079 | extern int filemap_write_and_wait_range(struct address_space *mapping, | 2087 | extern int filemap_write_and_wait_range(struct address_space *mapping, |
2080 | loff_t lstart, loff_t lend); | 2088 | loff_t lstart, loff_t lend); |
@@ -2085,7 +2093,10 @@ extern int __filemap_fdatawrite_range(struct address_space *mapping, | |||
2085 | extern int filemap_fdatawrite_range(struct address_space *mapping, | 2093 | extern int filemap_fdatawrite_range(struct address_space *mapping, |
2086 | loff_t start, loff_t end); | 2094 | loff_t start, loff_t end); |
2087 | 2095 | ||
2096 | extern int vfs_fsync_range(struct file *file, struct dentry *dentry, | ||
2097 | loff_t start, loff_t end, int datasync); | ||
2088 | extern int vfs_fsync(struct file *file, struct dentry *dentry, int datasync); | 2098 | extern int vfs_fsync(struct file *file, struct dentry *dentry, int datasync); |
2099 | extern int generic_write_sync(struct file *file, loff_t pos, loff_t count); | ||
2089 | extern void sync_supers(void); | 2100 | extern void sync_supers(void); |
2090 | extern void emergency_sync(void); | 2101 | extern void emergency_sync(void); |
2091 | extern void emergency_remount(void); | 2102 | extern void emergency_remount(void); |
@@ -2122,7 +2133,7 @@ extern struct file *do_filp_open(int dfd, const char *pathname, | |||
2122 | int open_flag, int mode, int acc_mode); | 2133 | int open_flag, int mode, int acc_mode); |
2123 | extern int may_open(struct path *, int, int); | 2134 | extern int may_open(struct path *, int, int); |
2124 | 2135 | ||
2125 | extern int kernel_read(struct file *, unsigned long, char *, unsigned long); | 2136 | extern int kernel_read(struct file *, loff_t, char *, unsigned long); |
2126 | extern struct file * open_exec(const char *); | 2137 | extern struct file * open_exec(const char *); |
2127 | 2138 | ||
2128 | /* fs/dcache.c -- generic fs support functions */ | 2139 | /* fs/dcache.c -- generic fs support functions */ |
@@ -2136,7 +2147,7 @@ extern loff_t default_llseek(struct file *file, loff_t offset, int origin); | |||
2136 | 2147 | ||
2137 | extern loff_t vfs_llseek(struct file *file, loff_t offset, int origin); | 2148 | extern loff_t vfs_llseek(struct file *file, loff_t offset, int origin); |
2138 | 2149 | ||
2139 | extern struct inode * inode_init_always(struct super_block *, struct inode *); | 2150 | extern int inode_init_always(struct super_block *, struct inode *); |
2140 | extern void inode_init_once(struct inode *); | 2151 | extern void inode_init_once(struct inode *); |
2141 | extern void inode_add_to_lists(struct super_block *, struct inode *); | 2152 | extern void inode_add_to_lists(struct super_block *, struct inode *); |
2142 | extern void iput(struct inode *); | 2153 | extern void iput(struct inode *); |
@@ -2163,6 +2174,7 @@ extern void __iget(struct inode * inode); | |||
2163 | extern void iget_failed(struct inode *); | 2174 | extern void iget_failed(struct inode *); |
2164 | extern void clear_inode(struct inode *); | 2175 | extern void clear_inode(struct inode *); |
2165 | extern void destroy_inode(struct inode *); | 2176 | extern void destroy_inode(struct inode *); |
2177 | extern void __destroy_inode(struct inode *); | ||
2166 | extern struct inode *new_inode(struct super_block *); | 2178 | extern struct inode *new_inode(struct super_block *); |
2167 | extern int should_remove_suid(struct dentry *); | 2179 | extern int should_remove_suid(struct dentry *); |
2168 | extern int file_remove_suid(struct file *); | 2180 | extern int file_remove_suid(struct file *); |
@@ -2184,16 +2196,15 @@ extern int bdev_read_only(struct block_device *); | |||
2184 | extern int set_blocksize(struct block_device *, int); | 2196 | extern int set_blocksize(struct block_device *, int); |
2185 | extern int sb_set_blocksize(struct super_block *, int); | 2197 | extern int sb_set_blocksize(struct super_block *, int); |
2186 | extern int sb_min_blocksize(struct super_block *, int); | 2198 | extern int sb_min_blocksize(struct super_block *, int); |
2187 | extern int sb_has_dirty_inodes(struct super_block *); | ||
2188 | 2199 | ||
2189 | extern int generic_file_mmap(struct file *, struct vm_area_struct *); | 2200 | extern int generic_file_mmap(struct file *, struct vm_area_struct *); |
2190 | extern int generic_file_readonly_mmap(struct file *, struct vm_area_struct *); | 2201 | extern int generic_file_readonly_mmap(struct file *, struct vm_area_struct *); |
2191 | extern int file_read_actor(read_descriptor_t * desc, struct page *page, unsigned long offset, unsigned long size); | 2202 | extern int file_read_actor(read_descriptor_t * desc, struct page *page, unsigned long offset, unsigned long size); |
2192 | int generic_write_checks(struct file *file, loff_t *pos, size_t *count, int isblk); | 2203 | int generic_write_checks(struct file *file, loff_t *pos, size_t *count, int isblk); |
2193 | extern ssize_t generic_file_aio_read(struct kiocb *, const struct iovec *, unsigned long, loff_t); | 2204 | extern ssize_t generic_file_aio_read(struct kiocb *, const struct iovec *, unsigned long, loff_t); |
2205 | extern ssize_t __generic_file_aio_write(struct kiocb *, const struct iovec *, unsigned long, | ||
2206 | loff_t *); | ||
2194 | extern ssize_t generic_file_aio_write(struct kiocb *, const struct iovec *, unsigned long, loff_t); | 2207 | extern ssize_t generic_file_aio_write(struct kiocb *, const struct iovec *, unsigned long, loff_t); |
2195 | extern ssize_t generic_file_aio_write_nolock(struct kiocb *, const struct iovec *, | ||
2196 | unsigned long, loff_t); | ||
2197 | extern ssize_t generic_file_direct_write(struct kiocb *, const struct iovec *, | 2208 | extern ssize_t generic_file_direct_write(struct kiocb *, const struct iovec *, |
2198 | unsigned long *, loff_t, loff_t *, size_t, size_t); | 2209 | unsigned long *, loff_t, loff_t *, size_t, size_t); |
2199 | extern ssize_t generic_file_buffered_write(struct kiocb *, const struct iovec *, | 2210 | extern ssize_t generic_file_buffered_write(struct kiocb *, const struct iovec *, |
@@ -2203,6 +2214,10 @@ extern ssize_t do_sync_write(struct file *filp, const char __user *buf, size_t l | |||
2203 | extern int generic_segment_checks(const struct iovec *iov, | 2214 | extern int generic_segment_checks(const struct iovec *iov, |
2204 | unsigned long *nr_segs, size_t *count, int access_flags); | 2215 | unsigned long *nr_segs, size_t *count, int access_flags); |
2205 | 2216 | ||
2217 | /* fs/block_dev.c */ | ||
2218 | extern ssize_t blkdev_aio_write(struct kiocb *iocb, const struct iovec *iov, | ||
2219 | unsigned long nr_segs, loff_t pos); | ||
2220 | |||
2206 | /* fs/splice.c */ | 2221 | /* fs/splice.c */ |
2207 | extern ssize_t generic_file_splice_read(struct file *, loff_t *, | 2222 | extern ssize_t generic_file_splice_read(struct file *, loff_t *, |
2208 | struct pipe_inode_info *, size_t, unsigned int); | 2223 | struct pipe_inode_info *, size_t, unsigned int); |
diff --git a/include/linux/fsnotify_backend.h b/include/linux/fsnotify_backend.h index 6c3de999fb34..4d6f47b51189 100644 --- a/include/linux/fsnotify_backend.h +++ b/include/linux/fsnotify_backend.h | |||
@@ -352,7 +352,7 @@ extern void fsnotify_unmount_inodes(struct list_head *list); | |||
352 | /* put here because inotify does some weird stuff when destroying watches */ | 352 | /* put here because inotify does some weird stuff when destroying watches */ |
353 | extern struct fsnotify_event *fsnotify_create_event(struct inode *to_tell, __u32 mask, | 353 | extern struct fsnotify_event *fsnotify_create_event(struct inode *to_tell, __u32 mask, |
354 | void *data, int data_is, const char *name, | 354 | void *data, int data_is, const char *name, |
355 | u32 cookie); | 355 | u32 cookie, gfp_t gfp); |
356 | 356 | ||
357 | #else | 357 | #else |
358 | 358 | ||
diff --git a/include/linux/ftrace.h b/include/linux/ftrace.h index dc3b1328aaeb..3c0924a18daf 100644 --- a/include/linux/ftrace.h +++ b/include/linux/ftrace.h | |||
@@ -446,7 +446,6 @@ static inline void unpause_graph_tracing(void) { } | |||
446 | #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ | 446 | #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ |
447 | 447 | ||
448 | #ifdef CONFIG_TRACING | 448 | #ifdef CONFIG_TRACING |
449 | #include <linux/sched.h> | ||
450 | 449 | ||
451 | /* flags for current->trace */ | 450 | /* flags for current->trace */ |
452 | enum { | 451 | enum { |
diff --git a/include/linux/ftrace_event.h b/include/linux/ftrace_event.h index 5c093ffc655b..4ec5e67e18cf 100644 --- a/include/linux/ftrace_event.h +++ b/include/linux/ftrace_event.h | |||
@@ -1,9 +1,10 @@ | |||
1 | #ifndef _LINUX_FTRACE_EVENT_H | 1 | #ifndef _LINUX_FTRACE_EVENT_H |
2 | #define _LINUX_FTRACE_EVENT_H | 2 | #define _LINUX_FTRACE_EVENT_H |
3 | 3 | ||
4 | #include <linux/trace_seq.h> | ||
5 | #include <linux/ring_buffer.h> | 4 | #include <linux/ring_buffer.h> |
5 | #include <linux/trace_seq.h> | ||
6 | #include <linux/percpu.h> | 6 | #include <linux/percpu.h> |
7 | #include <linux/hardirq.h> | ||
7 | 8 | ||
8 | struct trace_array; | 9 | struct trace_array; |
9 | struct tracer; | 10 | struct tracer; |
@@ -34,7 +35,7 @@ struct trace_entry { | |||
34 | unsigned char flags; | 35 | unsigned char flags; |
35 | unsigned char preempt_count; | 36 | unsigned char preempt_count; |
36 | int pid; | 37 | int pid; |
37 | int tgid; | 38 | int lock_depth; |
38 | }; | 39 | }; |
39 | 40 | ||
40 | #define FTRACE_MAX_EVENT \ | 41 | #define FTRACE_MAX_EVENT \ |
@@ -89,18 +90,26 @@ enum print_line_t { | |||
89 | TRACE_TYPE_NO_CONSUME = 3 /* Handled but ask to not consume */ | 90 | TRACE_TYPE_NO_CONSUME = 3 /* Handled but ask to not consume */ |
90 | }; | 91 | }; |
91 | 92 | ||
92 | 93 | void tracing_generic_entry_update(struct trace_entry *entry, | |
94 | unsigned long flags, | ||
95 | int pc); | ||
93 | struct ring_buffer_event * | 96 | struct ring_buffer_event * |
94 | trace_current_buffer_lock_reserve(int type, unsigned long len, | 97 | trace_current_buffer_lock_reserve(struct ring_buffer **current_buffer, |
98 | int type, unsigned long len, | ||
95 | unsigned long flags, int pc); | 99 | unsigned long flags, int pc); |
96 | void trace_current_buffer_unlock_commit(struct ring_buffer_event *event, | 100 | void trace_current_buffer_unlock_commit(struct ring_buffer *buffer, |
101 | struct ring_buffer_event *event, | ||
97 | unsigned long flags, int pc); | 102 | unsigned long flags, int pc); |
98 | void trace_nowake_buffer_unlock_commit(struct ring_buffer_event *event, | 103 | void trace_nowake_buffer_unlock_commit(struct ring_buffer *buffer, |
104 | struct ring_buffer_event *event, | ||
99 | unsigned long flags, int pc); | 105 | unsigned long flags, int pc); |
100 | void trace_current_buffer_discard_commit(struct ring_buffer_event *event); | 106 | void trace_current_buffer_discard_commit(struct ring_buffer *buffer, |
107 | struct ring_buffer_event *event); | ||
101 | 108 | ||
102 | void tracing_record_cmdline(struct task_struct *tsk); | 109 | void tracing_record_cmdline(struct task_struct *tsk); |
103 | 110 | ||
111 | struct event_filter; | ||
112 | |||
104 | struct ftrace_event_call { | 113 | struct ftrace_event_call { |
105 | struct list_head list; | 114 | struct list_head list; |
106 | char *name; | 115 | char *name; |
@@ -108,36 +117,51 @@ struct ftrace_event_call { | |||
108 | struct dentry *dir; | 117 | struct dentry *dir; |
109 | struct trace_event *event; | 118 | struct trace_event *event; |
110 | int enabled; | 119 | int enabled; |
111 | int (*regfunc)(void); | 120 | int (*regfunc)(void *); |
112 | void (*unregfunc)(void); | 121 | void (*unregfunc)(void *); |
113 | int id; | 122 | int id; |
114 | int (*raw_init)(void); | 123 | int (*raw_init)(void); |
115 | int (*show_format)(struct trace_seq *s); | 124 | int (*show_format)(struct ftrace_event_call *call, |
116 | int (*define_fields)(void); | 125 | struct trace_seq *s); |
126 | int (*define_fields)(struct ftrace_event_call *); | ||
117 | struct list_head fields; | 127 | struct list_head fields; |
118 | int filter_active; | 128 | int filter_active; |
119 | void *filter; | 129 | struct event_filter *filter; |
120 | void *mod; | 130 | void *mod; |
131 | void *data; | ||
121 | 132 | ||
122 | #ifdef CONFIG_EVENT_PROFILE | 133 | atomic_t profile_count; |
123 | atomic_t profile_count; | 134 | int (*profile_enable)(void); |
124 | int (*profile_enable)(struct ftrace_event_call *); | 135 | void (*profile_disable)(void); |
125 | void (*profile_disable)(struct ftrace_event_call *); | ||
126 | #endif | ||
127 | }; | 136 | }; |
128 | 137 | ||
138 | #define FTRACE_MAX_PROFILE_SIZE 2048 | ||
139 | |||
140 | extern char *trace_profile_buf; | ||
141 | extern char *trace_profile_buf_nmi; | ||
142 | |||
129 | #define MAX_FILTER_PRED 32 | 143 | #define MAX_FILTER_PRED 32 |
130 | #define MAX_FILTER_STR_VAL 128 | 144 | #define MAX_FILTER_STR_VAL 256 /* Should handle KSYM_SYMBOL_LEN */ |
131 | 145 | ||
132 | extern int init_preds(struct ftrace_event_call *call); | ||
133 | extern void destroy_preds(struct ftrace_event_call *call); | 146 | extern void destroy_preds(struct ftrace_event_call *call); |
134 | extern int filter_match_preds(struct ftrace_event_call *call, void *rec); | 147 | extern int filter_match_preds(struct ftrace_event_call *call, void *rec); |
135 | extern int filter_current_check_discard(struct ftrace_event_call *call, | 148 | extern int filter_current_check_discard(struct ring_buffer *buffer, |
149 | struct ftrace_event_call *call, | ||
136 | void *rec, | 150 | void *rec, |
137 | struct ring_buffer_event *event); | 151 | struct ring_buffer_event *event); |
138 | 152 | ||
139 | extern int trace_define_field(struct ftrace_event_call *call, char *type, | 153 | enum { |
140 | char *name, int offset, int size, int is_signed); | 154 | FILTER_OTHER = 0, |
155 | FILTER_STATIC_STRING, | ||
156 | FILTER_DYN_STRING, | ||
157 | FILTER_PTR_STRING, | ||
158 | }; | ||
159 | |||
160 | extern int trace_define_field(struct ftrace_event_call *call, | ||
161 | const char *type, const char *name, | ||
162 | int offset, int size, int is_signed, | ||
163 | int filter_type); | ||
164 | extern int trace_define_common_fields(struct ftrace_event_call *call); | ||
141 | 165 | ||
142 | #define is_signed_type(type) (((type)(-1)) < 0) | 166 | #define is_signed_type(type) (((type)(-1)) < 0) |
143 | 167 | ||
@@ -162,11 +186,4 @@ do { \ | |||
162 | __trace_printk(ip, fmt, ##args); \ | 186 | __trace_printk(ip, fmt, ##args); \ |
163 | } while (0) | 187 | } while (0) |
164 | 188 | ||
165 | #define __common_field(type, item, is_signed) \ | ||
166 | ret = trace_define_field(event_call, #type, "common_" #item, \ | ||
167 | offsetof(typeof(field.ent), item), \ | ||
168 | sizeof(field.ent.item), is_signed); \ | ||
169 | if (ret) \ | ||
170 | return ret; | ||
171 | |||
172 | #endif /* _LINUX_FTRACE_EVENT_H */ | 189 | #endif /* _LINUX_FTRACE_EVENT_H */ |
diff --git a/include/linux/fuse.h b/include/linux/fuse.h index d41ed593f79f..3e2925a34bf0 100644 --- a/include/linux/fuse.h +++ b/include/linux/fuse.h | |||
@@ -25,6 +25,15 @@ | |||
25 | * - add IOCTL message | 25 | * - add IOCTL message |
26 | * - add unsolicited notification support | 26 | * - add unsolicited notification support |
27 | * - add POLL message and NOTIFY_POLL notification | 27 | * - add POLL message and NOTIFY_POLL notification |
28 | * | ||
29 | * 7.12 | ||
30 | * - add umask flag to input argument of open, mknod and mkdir | ||
31 | * - add notification messages for invalidation of inodes and | ||
32 | * directory entries | ||
33 | * | ||
34 | * 7.13 | ||
35 | * - make max number of background requests and congestion threshold | ||
36 | * tunables | ||
28 | */ | 37 | */ |
29 | 38 | ||
30 | #ifndef _LINUX_FUSE_H | 39 | #ifndef _LINUX_FUSE_H |
@@ -32,11 +41,31 @@ | |||
32 | 41 | ||
33 | #include <linux/types.h> | 42 | #include <linux/types.h> |
34 | 43 | ||
44 | /* | ||
45 | * Version negotiation: | ||
46 | * | ||
47 | * Both the kernel and userspace send the version they support in the | ||
48 | * INIT request and reply respectively. | ||
49 | * | ||
50 | * If the major versions match then both shall use the smallest | ||
51 | * of the two minor versions for communication. | ||
52 | * | ||
53 | * If the kernel supports a larger major version, then userspace shall | ||
54 | * reply with the major version it supports, ignore the rest of the | ||
55 | * INIT message and expect a new INIT message from the kernel with a | ||
56 | * matching major version. | ||
57 | * | ||
58 | * If the library supports a larger major version, then it shall fall | ||
59 | * back to the major protocol version sent by the kernel for | ||
60 | * communication and reply with that major version (and an arbitrary | ||
61 | * supported minor version). | ||
62 | */ | ||
63 | |||
35 | /** Version number of this interface */ | 64 | /** Version number of this interface */ |
36 | #define FUSE_KERNEL_VERSION 7 | 65 | #define FUSE_KERNEL_VERSION 7 |
37 | 66 | ||
38 | /** Minor version number of this interface */ | 67 | /** Minor version number of this interface */ |
39 | #define FUSE_KERNEL_MINOR_VERSION 11 | 68 | #define FUSE_KERNEL_MINOR_VERSION 13 |
40 | 69 | ||
41 | /** The node ID of the root inode */ | 70 | /** The node ID of the root inode */ |
42 | #define FUSE_ROOT_ID 1 | 71 | #define FUSE_ROOT_ID 1 |
@@ -112,6 +141,7 @@ struct fuse_file_lock { | |||
112 | * INIT request/reply flags | 141 | * INIT request/reply flags |
113 | * | 142 | * |
114 | * FUSE_EXPORT_SUPPORT: filesystem handles lookups of "." and ".." | 143 | * FUSE_EXPORT_SUPPORT: filesystem handles lookups of "." and ".." |
144 | * FUSE_DONT_MASK: don't apply umask to file mode on create operations | ||
115 | */ | 145 | */ |
116 | #define FUSE_ASYNC_READ (1 << 0) | 146 | #define FUSE_ASYNC_READ (1 << 0) |
117 | #define FUSE_POSIX_LOCKS (1 << 1) | 147 | #define FUSE_POSIX_LOCKS (1 << 1) |
@@ -119,6 +149,7 @@ struct fuse_file_lock { | |||
119 | #define FUSE_ATOMIC_O_TRUNC (1 << 3) | 149 | #define FUSE_ATOMIC_O_TRUNC (1 << 3) |
120 | #define FUSE_EXPORT_SUPPORT (1 << 4) | 150 | #define FUSE_EXPORT_SUPPORT (1 << 4) |
121 | #define FUSE_BIG_WRITES (1 << 5) | 151 | #define FUSE_BIG_WRITES (1 << 5) |
152 | #define FUSE_DONT_MASK (1 << 6) | ||
122 | 153 | ||
123 | /** | 154 | /** |
124 | * CUSE INIT request/reply flags | 155 | * CUSE INIT request/reply flags |
@@ -224,6 +255,8 @@ enum fuse_opcode { | |||
224 | 255 | ||
225 | enum fuse_notify_code { | 256 | enum fuse_notify_code { |
226 | FUSE_NOTIFY_POLL = 1, | 257 | FUSE_NOTIFY_POLL = 1, |
258 | FUSE_NOTIFY_INVAL_INODE = 2, | ||
259 | FUSE_NOTIFY_INVAL_ENTRY = 3, | ||
227 | FUSE_NOTIFY_CODE_MAX, | 260 | FUSE_NOTIFY_CODE_MAX, |
228 | }; | 261 | }; |
229 | 262 | ||
@@ -262,14 +295,18 @@ struct fuse_attr_out { | |||
262 | struct fuse_attr attr; | 295 | struct fuse_attr attr; |
263 | }; | 296 | }; |
264 | 297 | ||
298 | #define FUSE_COMPAT_MKNOD_IN_SIZE 8 | ||
299 | |||
265 | struct fuse_mknod_in { | 300 | struct fuse_mknod_in { |
266 | __u32 mode; | 301 | __u32 mode; |
267 | __u32 rdev; | 302 | __u32 rdev; |
303 | __u32 umask; | ||
304 | __u32 padding; | ||
268 | }; | 305 | }; |
269 | 306 | ||
270 | struct fuse_mkdir_in { | 307 | struct fuse_mkdir_in { |
271 | __u32 mode; | 308 | __u32 mode; |
272 | __u32 padding; | 309 | __u32 umask; |
273 | }; | 310 | }; |
274 | 311 | ||
275 | struct fuse_rename_in { | 312 | struct fuse_rename_in { |
@@ -301,7 +338,14 @@ struct fuse_setattr_in { | |||
301 | 338 | ||
302 | struct fuse_open_in { | 339 | struct fuse_open_in { |
303 | __u32 flags; | 340 | __u32 flags; |
341 | __u32 unused; | ||
342 | }; | ||
343 | |||
344 | struct fuse_create_in { | ||
345 | __u32 flags; | ||
304 | __u32 mode; | 346 | __u32 mode; |
347 | __u32 umask; | ||
348 | __u32 padding; | ||
305 | }; | 349 | }; |
306 | 350 | ||
307 | struct fuse_open_out { | 351 | struct fuse_open_out { |
@@ -407,7 +451,8 @@ struct fuse_init_out { | |||
407 | __u32 minor; | 451 | __u32 minor; |
408 | __u32 max_readahead; | 452 | __u32 max_readahead; |
409 | __u32 flags; | 453 | __u32 flags; |
410 | __u32 unused; | 454 | __u16 max_background; |
455 | __u16 congestion_threshold; | ||
411 | __u32 max_write; | 456 | __u32 max_write; |
412 | }; | 457 | }; |
413 | 458 | ||
@@ -508,4 +553,16 @@ struct fuse_dirent { | |||
508 | #define FUSE_DIRENT_SIZE(d) \ | 553 | #define FUSE_DIRENT_SIZE(d) \ |
509 | FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET + (d)->namelen) | 554 | FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET + (d)->namelen) |
510 | 555 | ||
556 | struct fuse_notify_inval_inode_out { | ||
557 | __u64 ino; | ||
558 | __s64 off; | ||
559 | __s64 len; | ||
560 | }; | ||
561 | |||
562 | struct fuse_notify_inval_entry_out { | ||
563 | __u64 parent; | ||
564 | __u32 namelen; | ||
565 | __u32 padding; | ||
566 | }; | ||
567 | |||
511 | #endif /* _LINUX_FUSE_H */ | 568 | #endif /* _LINUX_FUSE_H */ |
diff --git a/include/linux/gen_stats.h b/include/linux/gen_stats.h index 0ffa41df0ee8..710e901085d0 100644 --- a/include/linux/gen_stats.h +++ b/include/linux/gen_stats.h | |||
@@ -22,6 +22,11 @@ struct gnet_stats_basic | |||
22 | { | 22 | { |
23 | __u64 bytes; | 23 | __u64 bytes; |
24 | __u32 packets; | 24 | __u32 packets; |
25 | }; | ||
26 | struct gnet_stats_basic_packed | ||
27 | { | ||
28 | __u64 bytes; | ||
29 | __u32 packets; | ||
25 | } __attribute__ ((packed)); | 30 | } __attribute__ ((packed)); |
26 | 31 | ||
27 | /** | 32 | /** |
diff --git a/include/linux/genhd.h b/include/linux/genhd.h index 45fc320a53c6..297df45ffd0a 100644 --- a/include/linux/genhd.h +++ b/include/linux/genhd.h | |||
@@ -98,7 +98,7 @@ struct hd_struct { | |||
98 | int make_it_fail; | 98 | int make_it_fail; |
99 | #endif | 99 | #endif |
100 | unsigned long stamp; | 100 | unsigned long stamp; |
101 | int in_flight; | 101 | int in_flight[2]; |
102 | #ifdef CONFIG_SMP | 102 | #ifdef CONFIG_SMP |
103 | struct disk_stats *dkstats; | 103 | struct disk_stats *dkstats; |
104 | #else | 104 | #else |
@@ -142,7 +142,7 @@ struct gendisk { | |||
142 | * disks that can't be partitioned. */ | 142 | * disks that can't be partitioned. */ |
143 | 143 | ||
144 | char disk_name[DISK_NAME_LEN]; /* name of major driver */ | 144 | char disk_name[DISK_NAME_LEN]; /* name of major driver */ |
145 | char *(*nodename)(struct gendisk *gd); | 145 | char *(*devnode)(struct gendisk *gd, mode_t *mode); |
146 | /* Array of pointers to partitions indexed by partno. | 146 | /* Array of pointers to partitions indexed by partno. |
147 | * Protected with matching bdev lock but stat and other | 147 | * Protected with matching bdev lock but stat and other |
148 | * non-critical accesses use RCU. Always access through | 148 | * non-critical accesses use RCU. Always access through |
@@ -151,7 +151,7 @@ struct gendisk { | |||
151 | struct disk_part_tbl *part_tbl; | 151 | struct disk_part_tbl *part_tbl; |
152 | struct hd_struct part0; | 152 | struct hd_struct part0; |
153 | 153 | ||
154 | struct block_device_operations *fops; | 154 | const struct block_device_operations *fops; |
155 | struct request_queue *queue; | 155 | struct request_queue *queue; |
156 | void *private_data; | 156 | void *private_data; |
157 | 157 | ||
@@ -322,18 +322,23 @@ static inline void free_part_stats(struct hd_struct *part) | |||
322 | #define part_stat_sub(cpu, gendiskp, field, subnd) \ | 322 | #define part_stat_sub(cpu, gendiskp, field, subnd) \ |
323 | part_stat_add(cpu, gendiskp, field, -subnd) | 323 | part_stat_add(cpu, gendiskp, field, -subnd) |
324 | 324 | ||
325 | static inline void part_inc_in_flight(struct hd_struct *part) | 325 | static inline void part_inc_in_flight(struct hd_struct *part, int rw) |
326 | { | 326 | { |
327 | part->in_flight++; | 327 | part->in_flight[rw]++; |
328 | if (part->partno) | 328 | if (part->partno) |
329 | part_to_disk(part)->part0.in_flight++; | 329 | part_to_disk(part)->part0.in_flight[rw]++; |
330 | } | 330 | } |
331 | 331 | ||
332 | static inline void part_dec_in_flight(struct hd_struct *part) | 332 | static inline void part_dec_in_flight(struct hd_struct *part, int rw) |
333 | { | 333 | { |
334 | part->in_flight--; | 334 | part->in_flight[rw]--; |
335 | if (part->partno) | 335 | if (part->partno) |
336 | part_to_disk(part)->part0.in_flight--; | 336 | part_to_disk(part)->part0.in_flight[rw]--; |
337 | } | ||
338 | |||
339 | static inline int part_in_flight(struct hd_struct *part) | ||
340 | { | ||
341 | return part->in_flight[0] + part->in_flight[1]; | ||
337 | } | 342 | } |
338 | 343 | ||
339 | /* block/blk-core.c */ | 344 | /* block/blk-core.c */ |
@@ -546,6 +551,8 @@ extern ssize_t part_size_show(struct device *dev, | |||
546 | struct device_attribute *attr, char *buf); | 551 | struct device_attribute *attr, char *buf); |
547 | extern ssize_t part_stat_show(struct device *dev, | 552 | extern ssize_t part_stat_show(struct device *dev, |
548 | struct device_attribute *attr, char *buf); | 553 | struct device_attribute *attr, char *buf); |
554 | extern ssize_t part_inflight_show(struct device *dev, | ||
555 | struct device_attribute *attr, char *buf); | ||
549 | #ifdef CONFIG_FAIL_MAKE_REQUEST | 556 | #ifdef CONFIG_FAIL_MAKE_REQUEST |
550 | extern ssize_t part_fail_show(struct device *dev, | 557 | extern ssize_t part_fail_show(struct device *dev, |
551 | struct device_attribute *attr, char *buf); | 558 | struct device_attribute *attr, char *buf); |
diff --git a/include/linux/gfp.h b/include/linux/gfp.h index 7c777a0da17a..f53e9b868c26 100644 --- a/include/linux/gfp.h +++ b/include/linux/gfp.h | |||
@@ -326,7 +326,6 @@ void free_pages_exact(void *virt, size_t size); | |||
326 | extern void __free_pages(struct page *page, unsigned int order); | 326 | extern void __free_pages(struct page *page, unsigned int order); |
327 | extern void free_pages(unsigned long addr, unsigned int order); | 327 | extern void free_pages(unsigned long addr, unsigned int order); |
328 | extern void free_hot_page(struct page *page); | 328 | extern void free_hot_page(struct page *page); |
329 | extern void free_cold_page(struct page *page); | ||
330 | 329 | ||
331 | #define __free_page(page) __free_pages((page), 0) | 330 | #define __free_page(page) __free_pages((page), 0) |
332 | #define free_page(addr) free_pages((addr),0) | 331 | #define free_page(addr) free_pages((addr),0) |
@@ -336,18 +335,6 @@ void drain_zone_pages(struct zone *zone, struct per_cpu_pages *pcp); | |||
336 | void drain_all_pages(void); | 335 | void drain_all_pages(void); |
337 | void drain_local_pages(void *dummy); | 336 | void drain_local_pages(void *dummy); |
338 | 337 | ||
339 | extern bool oom_killer_disabled; | ||
340 | |||
341 | static inline void oom_killer_disable(void) | ||
342 | { | ||
343 | oom_killer_disabled = true; | ||
344 | } | ||
345 | |||
346 | static inline void oom_killer_enable(void) | ||
347 | { | ||
348 | oom_killer_disabled = false; | ||
349 | } | ||
350 | |||
351 | extern gfp_t gfp_allowed_mask; | 338 | extern gfp_t gfp_allowed_mask; |
352 | 339 | ||
353 | static inline void set_gfp_allowed_mask(gfp_t mask) | 340 | static inline void set_gfp_allowed_mask(gfp_t mask) |
diff --git a/include/linux/gfs2_ondisk.h b/include/linux/gfs2_ondisk.h index c56b4bce56d0..b80c88dedbbb 100644 --- a/include/linux/gfs2_ondisk.h +++ b/include/linux/gfs2_ondisk.h | |||
@@ -333,6 +333,28 @@ struct gfs2_leaf { | |||
333 | 333 | ||
334 | /* | 334 | /* |
335 | * Extended attribute header format | 335 | * Extended attribute header format |
336 | * | ||
337 | * This works in a similar way to dirents. There is a fixed size header | ||
338 | * followed by a variable length section made up of the name and the | ||
339 | * associated data. In the case of a "stuffed" entry, the value is | ||
340 | * inline directly after the name, the ea_num_ptrs entry will be | ||
341 | * zero in that case. For non-"stuffed" entries, there will be | ||
342 | * a set of pointers (aligned to 8 byte boundary) to the block(s) | ||
343 | * containing the value. | ||
344 | * | ||
345 | * The blocks containing the values and the blocks containing the | ||
346 | * extended attribute headers themselves all start with the common | ||
347 | * metadata header. Each inode, if it has extended attributes, will | ||
348 | * have either a single block containing the extended attribute headers | ||
349 | * or a single indirect block pointing to blocks containing the | ||
350 | * extended attribure headers. | ||
351 | * | ||
352 | * The maximim size of the data part of an extended attribute is 64k | ||
353 | * so the number of blocks required depends upon block size. Since the | ||
354 | * block size also determines the number of pointers in an indirect | ||
355 | * block, its a fairly complicated calculation to work out the maximum | ||
356 | * number of blocks that an inode may have relating to extended attributes. | ||
357 | * | ||
336 | */ | 358 | */ |
337 | 359 | ||
338 | #define GFS2_EA_MAX_NAME_LEN 255 | 360 | #define GFS2_EA_MAX_NAME_LEN 255 |
diff --git a/include/linux/hardirq.h b/include/linux/hardirq.h index 45257475623c..6d527ee82b2b 100644 --- a/include/linux/hardirq.h +++ b/include/linux/hardirq.h | |||
@@ -2,7 +2,9 @@ | |||
2 | #define LINUX_HARDIRQ_H | 2 | #define LINUX_HARDIRQ_H |
3 | 3 | ||
4 | #include <linux/preempt.h> | 4 | #include <linux/preempt.h> |
5 | #ifdef CONFIG_PREEMPT | ||
5 | #include <linux/smp_lock.h> | 6 | #include <linux/smp_lock.h> |
7 | #endif | ||
6 | #include <linux/lockdep.h> | 8 | #include <linux/lockdep.h> |
7 | #include <linux/ftrace_irq.h> | 9 | #include <linux/ftrace_irq.h> |
8 | #include <asm/hardirq.h> | 10 | #include <asm/hardirq.h> |
@@ -62,6 +64,12 @@ | |||
62 | #define HARDIRQ_OFFSET (1UL << HARDIRQ_SHIFT) | 64 | #define HARDIRQ_OFFSET (1UL << HARDIRQ_SHIFT) |
63 | #define NMI_OFFSET (1UL << NMI_SHIFT) | 65 | #define NMI_OFFSET (1UL << NMI_SHIFT) |
64 | 66 | ||
67 | #ifndef PREEMPT_ACTIVE | ||
68 | #define PREEMPT_ACTIVE_BITS 1 | ||
69 | #define PREEMPT_ACTIVE_SHIFT (NMI_SHIFT + NMI_BITS) | ||
70 | #define PREEMPT_ACTIVE (__IRQ_MASK(PREEMPT_ACTIVE_BITS) << PREEMPT_ACTIVE_SHIFT) | ||
71 | #endif | ||
72 | |||
65 | #if PREEMPT_ACTIVE < (1 << (NMI_SHIFT + NMI_BITS)) | 73 | #if PREEMPT_ACTIVE < (1 << (NMI_SHIFT + NMI_BITS)) |
66 | #error PREEMPT_ACTIVE is too low! | 74 | #error PREEMPT_ACTIVE is too low! |
67 | #endif | 75 | #endif |
@@ -130,7 +138,7 @@ static inline void account_system_vtime(struct task_struct *tsk) | |||
130 | } | 138 | } |
131 | #endif | 139 | #endif |
132 | 140 | ||
133 | #if defined(CONFIG_NO_HZ) && !defined(CONFIG_CLASSIC_RCU) | 141 | #if defined(CONFIG_NO_HZ) |
134 | extern void rcu_irq_enter(void); | 142 | extern void rcu_irq_enter(void); |
135 | extern void rcu_irq_exit(void); | 143 | extern void rcu_irq_exit(void); |
136 | extern void rcu_nmi_enter(void); | 144 | extern void rcu_nmi_enter(void); |
@@ -140,7 +148,7 @@ extern void rcu_nmi_exit(void); | |||
140 | # define rcu_irq_exit() do { } while (0) | 148 | # define rcu_irq_exit() do { } while (0) |
141 | # define rcu_nmi_enter() do { } while (0) | 149 | # define rcu_nmi_enter() do { } while (0) |
142 | # define rcu_nmi_exit() do { } while (0) | 150 | # define rcu_nmi_exit() do { } while (0) |
143 | #endif /* #if defined(CONFIG_NO_HZ) && !defined(CONFIG_CLASSIC_RCU) */ | 151 | #endif /* #if defined(CONFIG_NO_HZ) */ |
144 | 152 | ||
145 | /* | 153 | /* |
146 | * It is safe to do non-atomic ops on ->hardirq_context, | 154 | * It is safe to do non-atomic ops on ->hardirq_context, |
diff --git a/include/linux/hayesesp.h b/include/linux/hayesesp.h index 940aeb51d53f..92b08cfe4a75 100644 --- a/include/linux/hayesesp.h +++ b/include/linux/hayesesp.h | |||
@@ -96,7 +96,6 @@ struct esp_struct { | |||
96 | int xmit_head; | 96 | int xmit_head; |
97 | int xmit_tail; | 97 | int xmit_tail; |
98 | int xmit_cnt; | 98 | int xmit_cnt; |
99 | wait_queue_head_t delta_msr_wait; | ||
100 | wait_queue_head_t break_wait; | 99 | wait_queue_head_t break_wait; |
101 | struct async_icount icount; /* kernel counters for the 4 input interrupts */ | 100 | struct async_icount icount; /* kernel counters for the 4 input interrupts */ |
102 | struct hayes_esp_config config; /* port configuration */ | 101 | struct hayes_esp_config config; /* port configuration */ |
diff --git a/include/linux/hdlc.h b/include/linux/hdlc.h index 6a6e701f1631..ee275c8b3df1 100644 --- a/include/linux/hdlc.h +++ b/include/linux/hdlc.h | |||
@@ -38,7 +38,7 @@ struct hdlc_proto { | |||
38 | int (*ioctl)(struct net_device *dev, struct ifreq *ifr); | 38 | int (*ioctl)(struct net_device *dev, struct ifreq *ifr); |
39 | __be16 (*type_trans)(struct sk_buff *skb, struct net_device *dev); | 39 | __be16 (*type_trans)(struct sk_buff *skb, struct net_device *dev); |
40 | int (*netif_rx)(struct sk_buff *skb); | 40 | int (*netif_rx)(struct sk_buff *skb); |
41 | int (*xmit)(struct sk_buff *skb, struct net_device *dev); | 41 | netdev_tx_t (*xmit)(struct sk_buff *skb, struct net_device *dev); |
42 | struct module *module; | 42 | struct module *module; |
43 | struct hdlc_proto *next; /* next protocol in the list */ | 43 | struct hdlc_proto *next; /* next protocol in the list */ |
44 | }; | 44 | }; |
@@ -51,7 +51,7 @@ typedef struct hdlc_device { | |||
51 | unsigned short encoding, unsigned short parity); | 51 | unsigned short encoding, unsigned short parity); |
52 | 52 | ||
53 | /* hardware driver must handle this instead of dev->hard_start_xmit */ | 53 | /* hardware driver must handle this instead of dev->hard_start_xmit */ |
54 | int (*xmit)(struct sk_buff *skb, struct net_device *dev); | 54 | netdev_tx_t (*xmit)(struct sk_buff *skb, struct net_device *dev); |
55 | 55 | ||
56 | /* Things below are for HDLC layer internal use only */ | 56 | /* Things below are for HDLC layer internal use only */ |
57 | const struct hdlc_proto *proto; | 57 | const struct hdlc_proto *proto; |
@@ -60,7 +60,7 @@ typedef struct hdlc_device { | |||
60 | spinlock_t state_lock; | 60 | spinlock_t state_lock; |
61 | void *state; | 61 | void *state; |
62 | void *priv; | 62 | void *priv; |
63 | }hdlc_device; | 63 | } hdlc_device; |
64 | 64 | ||
65 | 65 | ||
66 | 66 | ||
@@ -106,7 +106,7 @@ void hdlc_close(struct net_device *dev); | |||
106 | /* May be used by hardware driver */ | 106 | /* May be used by hardware driver */ |
107 | int hdlc_change_mtu(struct net_device *dev, int new_mtu); | 107 | int hdlc_change_mtu(struct net_device *dev, int new_mtu); |
108 | /* Must be pointed to by hw driver's dev->netdev_ops->ndo_start_xmit */ | 108 | /* Must be pointed to by hw driver's dev->netdev_ops->ndo_start_xmit */ |
109 | int hdlc_start_xmit(struct sk_buff *skb, struct net_device *dev); | 109 | netdev_tx_t hdlc_start_xmit(struct sk_buff *skb, struct net_device *dev); |
110 | 110 | ||
111 | int attach_hdlc_protocol(struct net_device *dev, struct hdlc_proto *proto, | 111 | int attach_hdlc_protocol(struct net_device *dev, struct hdlc_proto *proto, |
112 | size_t size); | 112 | size_t size); |
diff --git a/include/linux/hid-debug.h b/include/linux/hid-debug.h index 50d568ec178a..53744fa1c8b7 100644 --- a/include/linux/hid-debug.h +++ b/include/linux/hid-debug.h | |||
@@ -2,7 +2,7 @@ | |||
2 | #define __HID_DEBUG_H | 2 | #define __HID_DEBUG_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * Copyright (c) 2007 Jiri Kosina | 5 | * Copyright (c) 2007-2009 Jiri Kosina |
6 | */ | 6 | */ |
7 | 7 | ||
8 | /* | 8 | /* |
@@ -22,24 +22,44 @@ | |||
22 | * | 22 | * |
23 | */ | 23 | */ |
24 | 24 | ||
25 | #ifdef CONFIG_HID_DEBUG | 25 | #define HID_DEBUG_BUFSIZE 512 |
26 | 26 | ||
27 | void hid_dump_input(struct hid_usage *, __s32); | 27 | #ifdef CONFIG_DEBUG_FS |
28 | void hid_dump_device(struct hid_device *); | 28 | |
29 | void hid_dump_field(struct hid_field *, int); | 29 | void hid_dump_input(struct hid_device *, struct hid_usage *, __s32); |
30 | void hid_resolv_usage(unsigned); | 30 | void hid_dump_device(struct hid_device *, struct seq_file *); |
31 | void hid_resolv_event(__u8, __u16); | 31 | void hid_dump_field(struct hid_field *, int, struct seq_file *); |
32 | char *hid_resolv_usage(unsigned, struct seq_file *); | ||
33 | void hid_debug_register(struct hid_device *, const char *); | ||
34 | void hid_debug_unregister(struct hid_device *); | ||
35 | void hid_debug_init(void); | ||
36 | void hid_debug_exit(void); | ||
37 | void hid_debug_event(struct hid_device *, char *); | ||
32 | 38 | ||
33 | #else | ||
34 | 39 | ||
35 | #define hid_dump_input(a,b) do { } while (0) | 40 | struct hid_debug_list { |
36 | #define hid_dump_device(c) do { } while (0) | 41 | char *hid_debug_buf; |
37 | #define hid_dump_field(a,b) do { } while (0) | 42 | int head; |
38 | #define hid_resolv_usage(a) do { } while (0) | 43 | int tail; |
39 | #define hid_resolv_event(a,b) do { } while (0) | 44 | struct fasync_struct *fasync; |
45 | struct hid_device *hdev; | ||
46 | struct list_head node; | ||
47 | struct mutex read_mutex; | ||
48 | }; | ||
40 | 49 | ||
41 | #endif /* CONFIG_HID_DEBUG */ | 50 | #else |
42 | 51 | ||
52 | #define hid_dump_input(a,b,c) do { } while (0) | ||
53 | #define hid_dump_device(a,b) do { } while (0) | ||
54 | #define hid_dump_field(a,b,c) do { } while (0) | ||
55 | #define hid_resolv_usage(a,b) do { } while (0) | ||
56 | #define hid_debug_register(a, b) do { } while (0) | ||
57 | #define hid_debug_unregister(a) do { } while (0) | ||
58 | #define hid_debug_init() do { } while (0) | ||
59 | #define hid_debug_exit() do { } while (0) | ||
60 | #define hid_debug_event(a,b) do { } while (0) | ||
61 | |||
62 | #endif | ||
43 | 63 | ||
44 | #endif | 64 | #endif |
45 | 65 | ||
diff --git a/include/linux/hid.h b/include/linux/hid.h index 53489fd4d700..10f628416740 100644 --- a/include/linux/hid.h +++ b/include/linux/hid.h | |||
@@ -494,12 +494,21 @@ struct hid_device { /* device report descriptor */ | |||
494 | 494 | ||
495 | /* hiddev event handler */ | 495 | /* hiddev event handler */ |
496 | int (*hiddev_connect)(struct hid_device *, unsigned int); | 496 | int (*hiddev_connect)(struct hid_device *, unsigned int); |
497 | void (*hiddev_disconnect)(struct hid_device *); | ||
497 | void (*hiddev_hid_event) (struct hid_device *, struct hid_field *field, | 498 | void (*hiddev_hid_event) (struct hid_device *, struct hid_field *field, |
498 | struct hid_usage *, __s32); | 499 | struct hid_usage *, __s32); |
499 | void (*hiddev_report_event) (struct hid_device *, struct hid_report *); | 500 | void (*hiddev_report_event) (struct hid_device *, struct hid_report *); |
500 | 501 | ||
501 | /* handler for raw output data, used by hidraw */ | 502 | /* handler for raw output data, used by hidraw */ |
502 | int (*hid_output_raw_report) (struct hid_device *, __u8 *, size_t); | 503 | int (*hid_output_raw_report) (struct hid_device *, __u8 *, size_t); |
504 | |||
505 | /* debugging support via debugfs */ | ||
506 | unsigned short debug; | ||
507 | struct dentry *debug_dir; | ||
508 | struct dentry *debug_rdesc; | ||
509 | struct dentry *debug_events; | ||
510 | struct list_head debug_list; | ||
511 | wait_queue_head_t debug_wait; | ||
503 | }; | 512 | }; |
504 | 513 | ||
505 | static inline void *hid_get_drvdata(struct hid_device *hdev) | 514 | static inline void *hid_get_drvdata(struct hid_device *hdev) |
@@ -657,9 +666,7 @@ struct hid_ll_driver { | |||
657 | 666 | ||
658 | /* HID core API */ | 667 | /* HID core API */ |
659 | 668 | ||
660 | #ifdef CONFIG_HID_DEBUG | ||
661 | extern int hid_debug; | 669 | extern int hid_debug; |
662 | #endif | ||
663 | 670 | ||
664 | extern int hid_add_device(struct hid_device *); | 671 | extern int hid_add_device(struct hid_device *); |
665 | extern void hid_destroy_device(struct hid_device *); | 672 | extern void hid_destroy_device(struct hid_device *); |
@@ -685,6 +692,7 @@ struct hid_device *hid_allocate_device(void); | |||
685 | int hid_parse_report(struct hid_device *hid, __u8 *start, unsigned size); | 692 | int hid_parse_report(struct hid_device *hid, __u8 *start, unsigned size); |
686 | int hid_check_keys_pressed(struct hid_device *hid); | 693 | int hid_check_keys_pressed(struct hid_device *hid); |
687 | int hid_connect(struct hid_device *hid, unsigned int connect_mask); | 694 | int hid_connect(struct hid_device *hid, unsigned int connect_mask); |
695 | void hid_disconnect(struct hid_device *hid); | ||
688 | 696 | ||
689 | /** | 697 | /** |
690 | * hid_map_usage - map usage input bits | 698 | * hid_map_usage - map usage input bits |
@@ -794,6 +802,7 @@ static inline int __must_check hid_hw_start(struct hid_device *hdev, | |||
794 | */ | 802 | */ |
795 | static inline void hid_hw_stop(struct hid_device *hdev) | 803 | static inline void hid_hw_stop(struct hid_device *hdev) |
796 | { | 804 | { |
805 | hid_disconnect(hdev); | ||
797 | hdev->ll_driver->stop(hdev); | 806 | hdev->ll_driver->stop(hdev); |
798 | } | 807 | } |
799 | 808 | ||
@@ -815,21 +824,9 @@ int hid_pidff_init(struct hid_device *hid); | |||
815 | #define hid_pidff_init NULL | 824 | #define hid_pidff_init NULL |
816 | #endif | 825 | #endif |
817 | 826 | ||
818 | #ifdef CONFIG_HID_DEBUG | ||
819 | #define dbg_hid(format, arg...) if (hid_debug) \ | 827 | #define dbg_hid(format, arg...) if (hid_debug) \ |
820 | printk(KERN_DEBUG "%s: " format ,\ | 828 | printk(KERN_DEBUG "%s: " format ,\ |
821 | __FILE__ , ## arg) | 829 | __FILE__ , ## arg) |
822 | #define dbg_hid_line(format, arg...) if (hid_debug) \ | ||
823 | printk(format, ## arg) | ||
824 | #else | ||
825 | static inline int __attribute__((format(printf, 1, 2))) | ||
826 | dbg_hid(const char *fmt, ...) | ||
827 | { | ||
828 | return 0; | ||
829 | } | ||
830 | #define dbg_hid_line dbg_hid | ||
831 | #endif /* HID_DEBUG */ | ||
832 | |||
833 | #define err_hid(format, arg...) printk(KERN_ERR "%s: " format "\n" , \ | 830 | #define err_hid(format, arg...) printk(KERN_ERR "%s: " format "\n" , \ |
834 | __FILE__ , ## arg) | 831 | __FILE__ , ## arg) |
835 | #endif /* HID_FF */ | 832 | #endif /* HID_FF */ |
diff --git a/include/linux/hrtimer.h b/include/linux/hrtimer.h index 54648e625efd..ff037f0b1b4e 100644 --- a/include/linux/hrtimer.h +++ b/include/linux/hrtimer.h | |||
@@ -91,7 +91,6 @@ enum hrtimer_restart { | |||
91 | * @function: timer expiry callback function | 91 | * @function: timer expiry callback function |
92 | * @base: pointer to the timer base (per cpu and per clock) | 92 | * @base: pointer to the timer base (per cpu and per clock) |
93 | * @state: state information (See bit values above) | 93 | * @state: state information (See bit values above) |
94 | * @cb_entry: list head to enqueue an expired timer into the callback list | ||
95 | * @start_site: timer statistics field to store the site where the timer | 94 | * @start_site: timer statistics field to store the site where the timer |
96 | * was started | 95 | * was started |
97 | * @start_comm: timer statistics field to store the name of the process which | 96 | * @start_comm: timer statistics field to store the name of the process which |
@@ -108,7 +107,6 @@ struct hrtimer { | |||
108 | enum hrtimer_restart (*function)(struct hrtimer *); | 107 | enum hrtimer_restart (*function)(struct hrtimer *); |
109 | struct hrtimer_clock_base *base; | 108 | struct hrtimer_clock_base *base; |
110 | unsigned long state; | 109 | unsigned long state; |
111 | struct list_head cb_entry; | ||
112 | #ifdef CONFIG_TIMER_STATS | 110 | #ifdef CONFIG_TIMER_STATS |
113 | int start_pid; | 111 | int start_pid; |
114 | void *start_site; | 112 | void *start_site; |
@@ -448,7 +446,7 @@ extern void timer_stats_update_stats(void *timer, pid_t pid, void *startf, | |||
448 | 446 | ||
449 | static inline void timer_stats_account_hrtimer(struct hrtimer *timer) | 447 | static inline void timer_stats_account_hrtimer(struct hrtimer *timer) |
450 | { | 448 | { |
451 | if (likely(!timer->start_pid)) | 449 | if (likely(!timer->start_site)) |
452 | return; | 450 | return; |
453 | timer_stats_update_stats(timer, timer->start_pid, timer->start_site, | 451 | timer_stats_update_stats(timer, timer->start_pid, timer->start_site, |
454 | timer->function, timer->start_comm, 0); | 452 | timer->function, timer->start_comm, 0); |
diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h index 2723513a5651..176e7ee73eff 100644 --- a/include/linux/hugetlb.h +++ b/include/linux/hugetlb.h | |||
@@ -10,6 +10,7 @@ | |||
10 | #include <asm/tlbflush.h> | 10 | #include <asm/tlbflush.h> |
11 | 11 | ||
12 | struct ctl_table; | 12 | struct ctl_table; |
13 | struct user_struct; | ||
13 | 14 | ||
14 | int PageHuge(struct page *page); | 15 | int PageHuge(struct page *page); |
15 | 16 | ||
@@ -23,7 +24,9 @@ int hugetlb_sysctl_handler(struct ctl_table *, int, struct file *, void __user * | |||
23 | int hugetlb_overcommit_handler(struct ctl_table *, int, struct file *, void __user *, size_t *, loff_t *); | 24 | int hugetlb_overcommit_handler(struct ctl_table *, int, struct file *, void __user *, size_t *, loff_t *); |
24 | int hugetlb_treat_movable_handler(struct ctl_table *, int, struct file *, void __user *, size_t *, loff_t *); | 25 | int hugetlb_treat_movable_handler(struct ctl_table *, int, struct file *, void __user *, size_t *, loff_t *); |
25 | int copy_hugetlb_page_range(struct mm_struct *, struct mm_struct *, struct vm_area_struct *); | 26 | int copy_hugetlb_page_range(struct mm_struct *, struct mm_struct *, struct vm_area_struct *); |
26 | int follow_hugetlb_page(struct mm_struct *, struct vm_area_struct *, struct page **, struct vm_area_struct **, unsigned long *, int *, int, int); | 27 | int follow_hugetlb_page(struct mm_struct *, struct vm_area_struct *, |
28 | struct page **, struct vm_area_struct **, | ||
29 | unsigned long *, int *, int, unsigned int flags); | ||
27 | void unmap_hugepage_range(struct vm_area_struct *, | 30 | void unmap_hugepage_range(struct vm_area_struct *, |
28 | unsigned long, unsigned long, struct page *); | 31 | unsigned long, unsigned long, struct page *); |
29 | void __unmap_hugepage_range(struct vm_area_struct *, | 32 | void __unmap_hugepage_range(struct vm_area_struct *, |
@@ -109,6 +112,21 @@ static inline void hugetlb_report_meminfo(struct seq_file *m) | |||
109 | 112 | ||
110 | #endif /* !CONFIG_HUGETLB_PAGE */ | 113 | #endif /* !CONFIG_HUGETLB_PAGE */ |
111 | 114 | ||
115 | #define HUGETLB_ANON_FILE "anon_hugepage" | ||
116 | |||
117 | enum { | ||
118 | /* | ||
119 | * The file will be used as an shm file so shmfs accounting rules | ||
120 | * apply | ||
121 | */ | ||
122 | HUGETLB_SHMFS_INODE = 1, | ||
123 | /* | ||
124 | * The file is being created on the internal vfs mount and shmfs | ||
125 | * accounting rules do not apply | ||
126 | */ | ||
127 | HUGETLB_ANONHUGE_INODE = 2, | ||
128 | }; | ||
129 | |||
112 | #ifdef CONFIG_HUGETLBFS | 130 | #ifdef CONFIG_HUGETLBFS |
113 | struct hugetlbfs_config { | 131 | struct hugetlbfs_config { |
114 | uid_t uid; | 132 | uid_t uid; |
@@ -146,7 +164,8 @@ static inline struct hugetlbfs_sb_info *HUGETLBFS_SB(struct super_block *sb) | |||
146 | 164 | ||
147 | extern const struct file_operations hugetlbfs_file_operations; | 165 | extern const struct file_operations hugetlbfs_file_operations; |
148 | extern struct vm_operations_struct hugetlb_vm_ops; | 166 | extern struct vm_operations_struct hugetlb_vm_ops; |
149 | struct file *hugetlb_file_setup(const char *name, size_t, int); | 167 | struct file *hugetlb_file_setup(const char *name, size_t size, int acct, |
168 | struct user_struct **user, int creat_flags); | ||
150 | int hugetlb_get_quota(struct address_space *mapping, long delta); | 169 | int hugetlb_get_quota(struct address_space *mapping, long delta); |
151 | void hugetlb_put_quota(struct address_space *mapping, long delta); | 170 | void hugetlb_put_quota(struct address_space *mapping, long delta); |
152 | 171 | ||
@@ -168,7 +187,7 @@ static inline void set_file_hugepages(struct file *file) | |||
168 | 187 | ||
169 | #define is_file_hugepages(file) 0 | 188 | #define is_file_hugepages(file) 0 |
170 | #define set_file_hugepages(file) BUG() | 189 | #define set_file_hugepages(file) BUG() |
171 | #define hugetlb_file_setup(name,size,acctflag) ERR_PTR(-ENOSYS) | 190 | #define hugetlb_file_setup(name,size,acct,user,creat) ERR_PTR(-ENOSYS) |
172 | 191 | ||
173 | #endif /* !CONFIG_HUGETLBFS */ | 192 | #endif /* !CONFIG_HUGETLBFS */ |
174 | 193 | ||
@@ -183,7 +202,8 @@ unsigned long hugetlb_get_unmapped_area(struct file *file, unsigned long addr, | |||
183 | #define HSTATE_NAME_LEN 32 | 202 | #define HSTATE_NAME_LEN 32 |
184 | /* Defines one hugetlb page size */ | 203 | /* Defines one hugetlb page size */ |
185 | struct hstate { | 204 | struct hstate { |
186 | int hugetlb_next_nid; | 205 | int next_nid_to_alloc; |
206 | int next_nid_to_free; | ||
187 | unsigned int order; | 207 | unsigned int order; |
188 | unsigned long mask; | 208 | unsigned long mask; |
189 | unsigned long max_huge_pages; | 209 | unsigned long max_huge_pages; |
diff --git a/include/linux/i2c/twl4030.h b/include/linux/i2c/twl4030.h index 0dc80ef24975..2d02dfd7076c 100644 --- a/include/linux/i2c/twl4030.h +++ b/include/linux/i2c/twl4030.h | |||
@@ -25,6 +25,9 @@ | |||
25 | #ifndef __TWL4030_H_ | 25 | #ifndef __TWL4030_H_ |
26 | #define __TWL4030_H_ | 26 | #define __TWL4030_H_ |
27 | 27 | ||
28 | #include <linux/types.h> | ||
29 | #include <linux/input/matrix_keypad.h> | ||
30 | |||
28 | /* | 31 | /* |
29 | * Using the twl4030 core we address registers using a pair | 32 | * Using the twl4030 core we address registers using a pair |
30 | * { module id, relative register offset } | 33 | * { module id, relative register offset } |
@@ -220,19 +223,28 @@ int twl4030_i2c_read(u8 mod_no, u8 *value, u8 reg, unsigned num_bytes); | |||
220 | 223 | ||
221 | /* Power bus message definitions */ | 224 | /* Power bus message definitions */ |
222 | 225 | ||
223 | #define DEV_GRP_NULL 0x0 | 226 | /* The TWL4030/5030 splits its power-management resources (the various |
224 | #define DEV_GRP_P1 0x1 | 227 | * regulators, clock and reset lines) into 3 processor groups - P1, P2 and |
225 | #define DEV_GRP_P2 0x2 | 228 | * P3. These groups can then be configured to transition between sleep, wait-on |
226 | #define DEV_GRP_P3 0x4 | 229 | * and active states by sending messages to the power bus. See Section 5.4.2 |
230 | * Power Resources of TWL4030 TRM | ||
231 | */ | ||
227 | 232 | ||
228 | #define RES_GRP_RES 0x0 | 233 | /* Processor groups */ |
229 | #define RES_GRP_PP 0x1 | 234 | #define DEV_GRP_NULL 0x0 |
230 | #define RES_GRP_RC 0x2 | 235 | #define DEV_GRP_P1 0x1 /* P1: all OMAP devices */ |
236 | #define DEV_GRP_P2 0x2 /* P2: all Modem devices */ | ||
237 | #define DEV_GRP_P3 0x4 /* P3: all peripheral devices */ | ||
238 | |||
239 | /* Resource groups */ | ||
240 | #define RES_GRP_RES 0x0 /* Reserved */ | ||
241 | #define RES_GRP_PP 0x1 /* Power providers */ | ||
242 | #define RES_GRP_RC 0x2 /* Reset and control */ | ||
231 | #define RES_GRP_PP_RC 0x3 | 243 | #define RES_GRP_PP_RC 0x3 |
232 | #define RES_GRP_PR 0x4 | 244 | #define RES_GRP_PR 0x4 /* Power references */ |
233 | #define RES_GRP_PP_PR 0x5 | 245 | #define RES_GRP_PP_PR 0x5 |
234 | #define RES_GRP_RC_PR 0x6 | 246 | #define RES_GRP_RC_PR 0x6 |
235 | #define RES_GRP_ALL 0x7 | 247 | #define RES_GRP_ALL 0x7 /* All resource groups */ |
236 | 248 | ||
237 | #define RES_TYPE2_R0 0x0 | 249 | #define RES_TYPE2_R0 0x0 |
238 | 250 | ||
@@ -243,6 +255,41 @@ int twl4030_i2c_read(u8 mod_no, u8 *value, u8 reg, unsigned num_bytes); | |||
243 | #define RES_STATE_SLEEP 0x8 | 255 | #define RES_STATE_SLEEP 0x8 |
244 | #define RES_STATE_OFF 0x0 | 256 | #define RES_STATE_OFF 0x0 |
245 | 257 | ||
258 | /* Power resources */ | ||
259 | |||
260 | /* Power providers */ | ||
261 | #define RES_VAUX1 1 | ||
262 | #define RES_VAUX2 2 | ||
263 | #define RES_VAUX3 3 | ||
264 | #define RES_VAUX4 4 | ||
265 | #define RES_VMMC1 5 | ||
266 | #define RES_VMMC2 6 | ||
267 | #define RES_VPLL1 7 | ||
268 | #define RES_VPLL2 8 | ||
269 | #define RES_VSIM 9 | ||
270 | #define RES_VDAC 10 | ||
271 | #define RES_VINTANA1 11 | ||
272 | #define RES_VINTANA2 12 | ||
273 | #define RES_VINTDIG 13 | ||
274 | #define RES_VIO 14 | ||
275 | #define RES_VDD1 15 | ||
276 | #define RES_VDD2 16 | ||
277 | #define RES_VUSB_1V5 17 | ||
278 | #define RES_VUSB_1V8 18 | ||
279 | #define RES_VUSB_3V1 19 | ||
280 | #define RES_VUSBCP 20 | ||
281 | #define RES_REGEN 21 | ||
282 | /* Reset and control */ | ||
283 | #define RES_NRES_PWRON 22 | ||
284 | #define RES_CLKEN 23 | ||
285 | #define RES_SYSEN 24 | ||
286 | #define RES_HFCLKOUT 25 | ||
287 | #define RES_32KCLKOUT 26 | ||
288 | #define RES_RESET 27 | ||
289 | /* Power Reference */ | ||
290 | #define RES_Main_Ref 28 | ||
291 | |||
292 | #define TOTAL_RESOURCES 28 | ||
246 | /* | 293 | /* |
247 | * Power Bus Message Format ... these can be sent individually by Linux, | 294 | * Power Bus Message Format ... these can be sent individually by Linux, |
248 | * but are usually part of downloaded scripts that are run when various | 295 | * but are usually part of downloaded scripts that are run when various |
@@ -302,13 +349,17 @@ struct twl4030_madc_platform_data { | |||
302 | int irq_line; | 349 | int irq_line; |
303 | }; | 350 | }; |
304 | 351 | ||
352 | /* Boards have uniqe mappings of {col, row} --> keycode. | ||
353 | * Column and row are 4 bits, but range only from 0..7. | ||
354 | * a PERSISTENT_KEY is "always on" and never reported. | ||
355 | */ | ||
356 | #define PERSISTENT_KEY(c, r) KEY((c), (r), KEY_RESERVED) | ||
357 | |||
305 | struct twl4030_keypad_data { | 358 | struct twl4030_keypad_data { |
306 | int rows; | 359 | const struct matrix_keymap_data *keymap_data; |
307 | int cols; | 360 | unsigned rows; |
308 | int *keymap; | 361 | unsigned cols; |
309 | int irq; | 362 | bool rep; |
310 | unsigned int keymapsize; | ||
311 | unsigned int rep:1; | ||
312 | }; | 363 | }; |
313 | 364 | ||
314 | enum twl4030_usb_mode { | 365 | enum twl4030_usb_mode { |
@@ -320,6 +371,36 @@ struct twl4030_usb_data { | |||
320 | enum twl4030_usb_mode usb_mode; | 371 | enum twl4030_usb_mode usb_mode; |
321 | }; | 372 | }; |
322 | 373 | ||
374 | struct twl4030_ins { | ||
375 | u16 pmb_message; | ||
376 | u8 delay; | ||
377 | }; | ||
378 | |||
379 | struct twl4030_script { | ||
380 | struct twl4030_ins *script; | ||
381 | unsigned size; | ||
382 | u8 flags; | ||
383 | #define TWL4030_WRST_SCRIPT (1<<0) | ||
384 | #define TWL4030_WAKEUP12_SCRIPT (1<<1) | ||
385 | #define TWL4030_WAKEUP3_SCRIPT (1<<2) | ||
386 | #define TWL4030_SLEEP_SCRIPT (1<<3) | ||
387 | }; | ||
388 | |||
389 | struct twl4030_resconfig { | ||
390 | u8 resource; | ||
391 | u8 devgroup; /* Processor group that Power resource belongs to */ | ||
392 | u8 type; /* Power resource addressed, 6 / broadcast message */ | ||
393 | u8 type2; /* Power resource addressed, 3 / broadcast message */ | ||
394 | }; | ||
395 | |||
396 | struct twl4030_power_data { | ||
397 | struct twl4030_script **scripts; | ||
398 | unsigned num; | ||
399 | struct twl4030_resconfig *resource_config; | ||
400 | }; | ||
401 | |||
402 | extern void twl4030_power_init(struct twl4030_power_data *triton2_scripts); | ||
403 | |||
323 | struct twl4030_platform_data { | 404 | struct twl4030_platform_data { |
324 | unsigned irq_base, irq_end; | 405 | unsigned irq_base, irq_end; |
325 | struct twl4030_bci_platform_data *bci; | 406 | struct twl4030_bci_platform_data *bci; |
@@ -327,6 +408,7 @@ struct twl4030_platform_data { | |||
327 | struct twl4030_madc_platform_data *madc; | 408 | struct twl4030_madc_platform_data *madc; |
328 | struct twl4030_keypad_data *keypad; | 409 | struct twl4030_keypad_data *keypad; |
329 | struct twl4030_usb_data *usb; | 410 | struct twl4030_usb_data *usb; |
411 | struct twl4030_power_data *power; | ||
330 | 412 | ||
331 | /* LDO regulators */ | 413 | /* LDO regulators */ |
332 | struct regulator_init_data *vdac; | 414 | struct regulator_init_data *vdac; |
@@ -357,7 +439,6 @@ int twl4030_sih_setup(int module); | |||
357 | #define TWL4030_VAUX3_DEV_GRP 0x1F | 439 | #define TWL4030_VAUX3_DEV_GRP 0x1F |
358 | #define TWL4030_VAUX3_DEDICATED 0x22 | 440 | #define TWL4030_VAUX3_DEDICATED 0x22 |
359 | 441 | ||
360 | |||
361 | #if defined(CONFIG_TWL4030_BCI_BATTERY) || \ | 442 | #if defined(CONFIG_TWL4030_BCI_BATTERY) || \ |
362 | defined(CONFIG_TWL4030_BCI_BATTERY_MODULE) | 443 | defined(CONFIG_TWL4030_BCI_BATTERY_MODULE) |
363 | extern int twl4030charger_usb_en(int enable); | 444 | extern int twl4030charger_usb_en(int enable); |
diff --git a/include/linux/icmpv6.h b/include/linux/icmpv6.h index b6a85183c333..c0d8357917e2 100644 --- a/include/linux/icmpv6.h +++ b/include/linux/icmpv6.h | |||
@@ -171,8 +171,6 @@ struct icmp6_filter { | |||
171 | #ifdef __KERNEL__ | 171 | #ifdef __KERNEL__ |
172 | 172 | ||
173 | #include <linux/netdevice.h> | 173 | #include <linux/netdevice.h> |
174 | #include <linux/skbuff.h> | ||
175 | |||
176 | 174 | ||
177 | extern void icmpv6_send(struct sk_buff *skb, | 175 | extern void icmpv6_send(struct sk_buff *skb, |
178 | u8 type, u8 code, | 176 | u8 type, u8 code, |
diff --git a/include/linux/ide.h b/include/linux/ide.h index edc93a6d931d..e4135d6e0556 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h | |||
@@ -258,6 +258,7 @@ enum { | |||
258 | IDE_TFLAG_DYN = (1 << 5), | 258 | IDE_TFLAG_DYN = (1 << 5), |
259 | IDE_TFLAG_FS = (1 << 6), | 259 | IDE_TFLAG_FS = (1 << 6), |
260 | IDE_TFLAG_MULTI_PIO = (1 << 7), | 260 | IDE_TFLAG_MULTI_PIO = (1 << 7), |
261 | IDE_TFLAG_SET_XFER = (1 << 8), | ||
261 | }; | 262 | }; |
262 | 263 | ||
263 | enum { | 264 | enum { |
@@ -294,7 +295,7 @@ struct ide_cmd { | |||
294 | } out, in; | 295 | } out, in; |
295 | } valid; | 296 | } valid; |
296 | 297 | ||
297 | u8 tf_flags; | 298 | u16 tf_flags; |
298 | u8 ftf_flags; /* for TASKFILE ioctl */ | 299 | u8 ftf_flags; /* for TASKFILE ioctl */ |
299 | int protocol; | 300 | int protocol; |
300 | 301 | ||
@@ -918,8 +919,7 @@ __IDE_PROC_DEVSET(_name, _min, _max, NULL, NULL) | |||
918 | typedef struct { | 919 | typedef struct { |
919 | const char *name; | 920 | const char *name; |
920 | mode_t mode; | 921 | mode_t mode; |
921 | read_proc_t *read_proc; | 922 | const struct file_operations *proc_fops; |
922 | write_proc_t *write_proc; | ||
923 | } ide_proc_entry_t; | 923 | } ide_proc_entry_t; |
924 | 924 | ||
925 | void proc_ide_create(void); | 925 | void proc_ide_create(void); |
@@ -931,24 +931,8 @@ void ide_proc_unregister_port(ide_hwif_t *); | |||
931 | void ide_proc_register_driver(ide_drive_t *, struct ide_driver *); | 931 | void ide_proc_register_driver(ide_drive_t *, struct ide_driver *); |
932 | void ide_proc_unregister_driver(ide_drive_t *, struct ide_driver *); | 932 | void ide_proc_unregister_driver(ide_drive_t *, struct ide_driver *); |
933 | 933 | ||
934 | read_proc_t proc_ide_read_capacity; | 934 | extern const struct file_operations ide_capacity_proc_fops; |
935 | read_proc_t proc_ide_read_geometry; | 935 | extern const struct file_operations ide_geometry_proc_fops; |
936 | |||
937 | /* | ||
938 | * Standard exit stuff: | ||
939 | */ | ||
940 | #define PROC_IDE_READ_RETURN(page,start,off,count,eof,len) \ | ||
941 | { \ | ||
942 | len -= off; \ | ||
943 | if (len < count) { \ | ||
944 | *eof = 1; \ | ||
945 | if (len <= 0) \ | ||
946 | return 0; \ | ||
947 | } else \ | ||
948 | len = count; \ | ||
949 | *start = page + off; \ | ||
950 | return len; \ | ||
951 | } | ||
952 | #else | 936 | #else |
953 | static inline void proc_ide_create(void) { ; } | 937 | static inline void proc_ide_create(void) { ; } |
954 | static inline void proc_ide_destroy(void) { ; } | 938 | static inline void proc_ide_destroy(void) { ; } |
@@ -960,7 +944,6 @@ static inline void ide_proc_register_driver(ide_drive_t *drive, | |||
960 | struct ide_driver *driver) { ; } | 944 | struct ide_driver *driver) { ; } |
961 | static inline void ide_proc_unregister_driver(ide_drive_t *drive, | 945 | static inline void ide_proc_unregister_driver(ide_drive_t *drive, |
962 | struct ide_driver *driver) { ; } | 946 | struct ide_driver *driver) { ; } |
963 | #define PROC_IDE_READ_RETURN(page,start,off,count,eof,len) return 0; | ||
964 | #endif | 947 | #endif |
965 | 948 | ||
966 | enum { | 949 | enum { |
@@ -1081,6 +1064,7 @@ extern void ide_fixstring(u8 *, const int, const int); | |||
1081 | 1064 | ||
1082 | int ide_busy_sleep(ide_drive_t *, unsigned long, int); | 1065 | int ide_busy_sleep(ide_drive_t *, unsigned long, int); |
1083 | 1066 | ||
1067 | int __ide_wait_stat(ide_drive_t *, u8, u8, unsigned long, u8 *); | ||
1084 | int ide_wait_stat(ide_startstop_t *, ide_drive_t *, u8, u8, unsigned long); | 1068 | int ide_wait_stat(ide_startstop_t *, ide_drive_t *, u8, u8, unsigned long); |
1085 | 1069 | ||
1086 | ide_startstop_t ide_do_park_unpark(ide_drive_t *, struct request *); | 1070 | ide_startstop_t ide_do_park_unpark(ide_drive_t *, struct request *); |
@@ -1169,7 +1153,7 @@ int ide_no_data_taskfile(ide_drive_t *, struct ide_cmd *); | |||
1169 | 1153 | ||
1170 | int ide_taskfile_ioctl(ide_drive_t *, unsigned long); | 1154 | int ide_taskfile_ioctl(ide_drive_t *, unsigned long); |
1171 | 1155 | ||
1172 | int ide_dev_read_id(ide_drive_t *, u8, u16 *); | 1156 | int ide_dev_read_id(ide_drive_t *, u8, u16 *, int); |
1173 | 1157 | ||
1174 | extern int ide_driveid_update(ide_drive_t *); | 1158 | extern int ide_driveid_update(ide_drive_t *); |
1175 | extern int ide_config_drive_speed(ide_drive_t *, u8); | 1159 | extern int ide_config_drive_speed(ide_drive_t *, u8); |
diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h index a9173d5434d1..52e15e079c61 100644 --- a/include/linux/ieee80211.h +++ b/include/linux/ieee80211.h | |||
@@ -115,7 +115,7 @@ | |||
115 | #define IEEE80211_MAX_SSID_LEN 32 | 115 | #define IEEE80211_MAX_SSID_LEN 32 |
116 | 116 | ||
117 | #define IEEE80211_MAX_MESH_ID_LEN 32 | 117 | #define IEEE80211_MAX_MESH_ID_LEN 32 |
118 | #define IEEE80211_MESH_CONFIG_LEN 19 | 118 | #define IEEE80211_MESH_CONFIG_LEN 24 |
119 | 119 | ||
120 | #define IEEE80211_QOS_CTL_LEN 2 | 120 | #define IEEE80211_QOS_CTL_LEN 2 |
121 | #define IEEE80211_QOS_CTL_TID_MASK 0x000F | 121 | #define IEEE80211_QOS_CTL_TID_MASK 0x000F |
@@ -802,6 +802,31 @@ struct ieee80211_ht_cap { | |||
802 | #define IEEE80211_HT_AMPDU_PARM_FACTOR 0x03 | 802 | #define IEEE80211_HT_AMPDU_PARM_FACTOR 0x03 |
803 | #define IEEE80211_HT_AMPDU_PARM_DENSITY 0x1C | 803 | #define IEEE80211_HT_AMPDU_PARM_DENSITY 0x1C |
804 | 804 | ||
805 | /* | ||
806 | * Maximum length of AMPDU that the STA can receive. | ||
807 | * Length = 2 ^ (13 + max_ampdu_length_exp) - 1 (octets) | ||
808 | */ | ||
809 | enum ieee80211_max_ampdu_length_exp { | ||
810 | IEEE80211_HT_MAX_AMPDU_8K = 0, | ||
811 | IEEE80211_HT_MAX_AMPDU_16K = 1, | ||
812 | IEEE80211_HT_MAX_AMPDU_32K = 2, | ||
813 | IEEE80211_HT_MAX_AMPDU_64K = 3 | ||
814 | }; | ||
815 | |||
816 | #define IEEE80211_HT_MAX_AMPDU_FACTOR 13 | ||
817 | |||
818 | /* Minimum MPDU start spacing */ | ||
819 | enum ieee80211_min_mpdu_spacing { | ||
820 | IEEE80211_HT_MPDU_DENSITY_NONE = 0, /* No restriction */ | ||
821 | IEEE80211_HT_MPDU_DENSITY_0_25 = 1, /* 1/4 usec */ | ||
822 | IEEE80211_HT_MPDU_DENSITY_0_5 = 2, /* 1/2 usec */ | ||
823 | IEEE80211_HT_MPDU_DENSITY_1 = 3, /* 1 usec */ | ||
824 | IEEE80211_HT_MPDU_DENSITY_2 = 4, /* 2 usec */ | ||
825 | IEEE80211_HT_MPDU_DENSITY_4 = 5, /* 4 usec */ | ||
826 | IEEE80211_HT_MPDU_DENSITY_8 = 6, /* 8 usec */ | ||
827 | IEEE80211_HT_MPDU_DENSITY_16 = 7 /* 16 usec */ | ||
828 | }; | ||
829 | |||
805 | /** | 830 | /** |
806 | * struct ieee80211_ht_info - HT information | 831 | * struct ieee80211_ht_info - HT information |
807 | * | 832 | * |
@@ -1196,6 +1221,10 @@ enum ieee80211_sa_query_action { | |||
1196 | #define WLAN_CIPHER_SUITE_WEP104 0x000FAC05 | 1221 | #define WLAN_CIPHER_SUITE_WEP104 0x000FAC05 |
1197 | #define WLAN_CIPHER_SUITE_AES_CMAC 0x000FAC06 | 1222 | #define WLAN_CIPHER_SUITE_AES_CMAC 0x000FAC06 |
1198 | 1223 | ||
1224 | /* AKM suite selectors */ | ||
1225 | #define WLAN_AKM_SUITE_8021X 0x000FAC01 | ||
1226 | #define WLAN_AKM_SUITE_PSK 0x000FAC02 | ||
1227 | |||
1199 | #define WLAN_MAX_KEY_LEN 32 | 1228 | #define WLAN_MAX_KEY_LEN 32 |
1200 | 1229 | ||
1201 | /** | 1230 | /** |
diff --git a/include/linux/if_addr.h b/include/linux/if_addr.h index a60c821be44c..fd9740466757 100644 --- a/include/linux/if_addr.h +++ b/include/linux/if_addr.h | |||
@@ -41,6 +41,7 @@ enum | |||
41 | 41 | ||
42 | #define IFA_F_NODAD 0x02 | 42 | #define IFA_F_NODAD 0x02 |
43 | #define IFA_F_OPTIMISTIC 0x04 | 43 | #define IFA_F_OPTIMISTIC 0x04 |
44 | #define IFA_F_DADFAILED 0x08 | ||
44 | #define IFA_F_HOMEADDRESS 0x10 | 45 | #define IFA_F_HOMEADDRESS 0x10 |
45 | #define IFA_F_DEPRECATED 0x20 | 46 | #define IFA_F_DEPRECATED 0x20 |
46 | #define IFA_F_TENTATIVE 0x40 | 47 | #define IFA_F_TENTATIVE 0x40 |
diff --git a/include/linux/if_arp.h b/include/linux/if_arp.h index b554300ef8bf..282eb37e2dec 100644 --- a/include/linux/if_arp.h +++ b/include/linux/if_arp.h | |||
@@ -87,7 +87,6 @@ | |||
87 | #define ARPHRD_IEEE80211_PRISM 802 /* IEEE 802.11 + Prism2 header */ | 87 | #define ARPHRD_IEEE80211_PRISM 802 /* IEEE 802.11 + Prism2 header */ |
88 | #define ARPHRD_IEEE80211_RADIOTAP 803 /* IEEE 802.11 + radiotap header */ | 88 | #define ARPHRD_IEEE80211_RADIOTAP 803 /* IEEE 802.11 + radiotap header */ |
89 | #define ARPHRD_IEEE802154 804 | 89 | #define ARPHRD_IEEE802154 804 |
90 | #define ARPHRD_IEEE802154_PHY 805 | ||
91 | 90 | ||
92 | #define ARPHRD_PHONET 820 /* PhoNet media type */ | 91 | #define ARPHRD_PHONET 820 /* PhoNet media type */ |
93 | #define ARPHRD_PHONET_PIPE 821 /* PhoNet pipe header */ | 92 | #define ARPHRD_PHONET_PIPE 821 /* PhoNet pipe header */ |
diff --git a/include/linux/if_ether.h b/include/linux/if_ether.h index ae3a1871413d..580b6004d00e 100644 --- a/include/linux/if_ether.h +++ b/include/linux/if_ether.h | |||
@@ -78,6 +78,7 @@ | |||
78 | #define ETH_P_PAE 0x888E /* Port Access Entity (IEEE 802.1X) */ | 78 | #define ETH_P_PAE 0x888E /* Port Access Entity (IEEE 802.1X) */ |
79 | #define ETH_P_AOE 0x88A2 /* ATA over Ethernet */ | 79 | #define ETH_P_AOE 0x88A2 /* ATA over Ethernet */ |
80 | #define ETH_P_TIPC 0x88CA /* TIPC */ | 80 | #define ETH_P_TIPC 0x88CA /* TIPC */ |
81 | #define ETH_P_1588 0x88F7 /* IEEE 1588 Timesync */ | ||
81 | #define ETH_P_FCOE 0x8906 /* Fibre Channel over Ethernet */ | 82 | #define ETH_P_FCOE 0x8906 /* Fibre Channel over Ethernet */ |
82 | #define ETH_P_FIP 0x8914 /* FCoE Initialization Protocol */ | 83 | #define ETH_P_FIP 0x8914 /* FCoE Initialization Protocol */ |
83 | #define ETH_P_EDSA 0xDADA /* Ethertype DSA [ NOT AN OFFICIALLY REGISTERED ID ] */ | 84 | #define ETH_P_EDSA 0xDADA /* Ethertype DSA [ NOT AN OFFICIALLY REGISTERED ID ] */ |
@@ -138,10 +139,10 @@ extern ssize_t sysfs_format_mac(char *buf, const unsigned char *addr, int len); | |||
138 | /* | 139 | /* |
139 | * Display a 6 byte device address (MAC) in a readable format. | 140 | * Display a 6 byte device address (MAC) in a readable format. |
140 | */ | 141 | */ |
141 | extern char *print_mac(char *buf, const unsigned char *addr); | 142 | extern char *print_mac(char *buf, const unsigned char *addr) __deprecated; |
142 | #define MAC_FMT "%02x:%02x:%02x:%02x:%02x:%02x" | 143 | #define MAC_FMT "%02x:%02x:%02x:%02x:%02x:%02x" |
143 | #define MAC_BUF_SIZE 18 | 144 | #define MAC_BUF_SIZE 18 |
144 | #define DECLARE_MAC_BUF(var) char var[MAC_BUF_SIZE] __maybe_unused | 145 | #define DECLARE_MAC_BUF(var) char var[MAC_BUF_SIZE] |
145 | 146 | ||
146 | #endif | 147 | #endif |
147 | 148 | ||
diff --git a/include/linux/if_frad.h b/include/linux/if_frad.h index 673f2209453d..80b3a1056a5f 100644 --- a/include/linux/if_frad.h +++ b/include/linux/if_frad.h | |||
@@ -69,11 +69,6 @@ struct dlci_conf { | |||
69 | 69 | ||
70 | #define DLCI_VALID_FLAGS 0x000B | 70 | #define DLCI_VALID_FLAGS 0x000B |
71 | 71 | ||
72 | /* FRAD driver uses these to indicate what it did with packet */ | ||
73 | #define DLCI_RET_OK 0x00 | ||
74 | #define DLCI_RET_ERR 0x01 | ||
75 | #define DLCI_RET_DROP 0x02 | ||
76 | |||
77 | /* defines for the actual Frame Relay hardware */ | 72 | /* defines for the actual Frame Relay hardware */ |
78 | #define FRAD_GET_CONF (SIOCDEVPRIVATE) | 73 | #define FRAD_GET_CONF (SIOCDEVPRIVATE) |
79 | #define FRAD_SET_CONF (SIOCDEVPRIVATE + 1) | 74 | #define FRAD_SET_CONF (SIOCDEVPRIVATE + 1) |
diff --git a/include/linux/if_tun.h b/include/linux/if_tun.h index 915ba5789f0e..3f5fd523b49d 100644 --- a/include/linux/if_tun.h +++ b/include/linux/if_tun.h | |||
@@ -62,6 +62,7 @@ | |||
62 | #define TUN_F_TSO4 0x02 /* I can handle TSO for IPv4 packets */ | 62 | #define TUN_F_TSO4 0x02 /* I can handle TSO for IPv4 packets */ |
63 | #define TUN_F_TSO6 0x04 /* I can handle TSO for IPv6 packets */ | 63 | #define TUN_F_TSO6 0x04 /* I can handle TSO for IPv6 packets */ |
64 | #define TUN_F_TSO_ECN 0x08 /* I can handle TSO with ECN bits. */ | 64 | #define TUN_F_TSO_ECN 0x08 /* I can handle TSO with ECN bits. */ |
65 | #define TUN_F_UFO 0x10 /* I can handle UFO packets */ | ||
65 | 66 | ||
66 | /* Protocol info prepended to the packets (when IFF_NO_PI is not set) */ | 67 | /* Protocol info prepended to the packets (when IFF_NO_PI is not set) */ |
67 | #define TUN_PKT_STRIP 0x0001 | 68 | #define TUN_PKT_STRIP 0x0001 |
diff --git a/include/linux/igmp.h b/include/linux/igmp.h index 92fbd8cbd68f..fe158e0e20e6 100644 --- a/include/linux/igmp.h +++ b/include/linux/igmp.h | |||
@@ -233,6 +233,8 @@ extern void ip_mc_init_dev(struct in_device *); | |||
233 | extern void ip_mc_destroy_dev(struct in_device *); | 233 | extern void ip_mc_destroy_dev(struct in_device *); |
234 | extern void ip_mc_up(struct in_device *); | 234 | extern void ip_mc_up(struct in_device *); |
235 | extern void ip_mc_down(struct in_device *); | 235 | extern void ip_mc_down(struct in_device *); |
236 | extern void ip_mc_unmap(struct in_device *); | ||
237 | extern void ip_mc_remap(struct in_device *); | ||
236 | extern void ip_mc_dec_group(struct in_device *in_dev, __be32 addr); | 238 | extern void ip_mc_dec_group(struct in_device *in_dev, __be32 addr); |
237 | extern void ip_mc_inc_group(struct in_device *in_dev, __be32 addr); | 239 | extern void ip_mc_inc_group(struct in_device *in_dev, __be32 addr); |
238 | extern void ip_mc_rejoin_group(struct ip_mc_list *im); | 240 | extern void ip_mc_rejoin_group(struct ip_mc_list *im); |
diff --git a/include/linux/inetdevice.h b/include/linux/inetdevice.h index acef2a770b6b..ad27c7da8798 100644 --- a/include/linux/inetdevice.h +++ b/include/linux/inetdevice.h | |||
@@ -82,7 +82,7 @@ static inline void ipv4_devconf_setall(struct in_device *in_dev) | |||
82 | 82 | ||
83 | #define IN_DEV_FORWARD(in_dev) IN_DEV_CONF_GET((in_dev), FORWARDING) | 83 | #define IN_DEV_FORWARD(in_dev) IN_DEV_CONF_GET((in_dev), FORWARDING) |
84 | #define IN_DEV_MFORWARD(in_dev) IN_DEV_ANDCONF((in_dev), MC_FORWARDING) | 84 | #define IN_DEV_MFORWARD(in_dev) IN_DEV_ANDCONF((in_dev), MC_FORWARDING) |
85 | #define IN_DEV_RPFILTER(in_dev) IN_DEV_ANDCONF((in_dev), RP_FILTER) | 85 | #define IN_DEV_RPFILTER(in_dev) IN_DEV_MAXCONF((in_dev), RP_FILTER) |
86 | #define IN_DEV_SOURCE_ROUTE(in_dev) IN_DEV_ANDCONF((in_dev), \ | 86 | #define IN_DEV_SOURCE_ROUTE(in_dev) IN_DEV_ANDCONF((in_dev), \ |
87 | ACCEPT_SOURCE_ROUTE) | 87 | ACCEPT_SOURCE_ROUTE) |
88 | #define IN_DEV_BOOTP_RELAY(in_dev) IN_DEV_ANDCONF((in_dev), BOOTP_RELAY) | 88 | #define IN_DEV_BOOTP_RELAY(in_dev) IN_DEV_ANDCONF((in_dev), BOOTP_RELAY) |
diff --git a/include/linux/init.h b/include/linux/init.h index 13b633ed695e..400adbb45414 100644 --- a/include/linux/init.h +++ b/include/linux/init.h | |||
@@ -103,8 +103,8 @@ | |||
103 | #define __INIT .section ".init.text","ax" | 103 | #define __INIT .section ".init.text","ax" |
104 | #define __FINIT .previous | 104 | #define __FINIT .previous |
105 | 105 | ||
106 | #define __INITDATA .section ".init.data","aw" | 106 | #define __INITDATA .section ".init.data","aw",%progbits |
107 | #define __INITRODATA .section ".init.rodata","a" | 107 | #define __INITRODATA .section ".init.rodata","a",%progbits |
108 | #define __FINITDATA .previous | 108 | #define __FINITDATA .previous |
109 | 109 | ||
110 | #define __DEVINIT .section ".devinit.text", "ax" | 110 | #define __DEVINIT .section ".devinit.text", "ax" |
@@ -305,9 +305,17 @@ void __init parse_early_options(char *cmdline); | |||
305 | #ifdef CONFIG_MODULES | 305 | #ifdef CONFIG_MODULES |
306 | #define __init_or_module | 306 | #define __init_or_module |
307 | #define __initdata_or_module | 307 | #define __initdata_or_module |
308 | #define __initconst_or_module | ||
309 | #define __INIT_OR_MODULE .text | ||
310 | #define __INITDATA_OR_MODULE .data | ||
311 | #define __INITRODATA_OR_MODULE .section ".rodata","a",%progbits | ||
308 | #else | 312 | #else |
309 | #define __init_or_module __init | 313 | #define __init_or_module __init |
310 | #define __initdata_or_module __initdata | 314 | #define __initdata_or_module __initdata |
315 | #define __initconst_or_module __initconst | ||
316 | #define __INIT_OR_MODULE __INIT | ||
317 | #define __INITDATA_OR_MODULE __INITDATA | ||
318 | #define __INITRODATA_OR_MODULE __INITRODATA | ||
311 | #endif /*CONFIG_MODULES*/ | 319 | #endif /*CONFIG_MODULES*/ |
312 | 320 | ||
313 | /* Functions marked as __devexit may be discarded at kernel link time, depending | 321 | /* Functions marked as __devexit may be discarded at kernel link time, depending |
diff --git a/include/linux/init_task.h b/include/linux/init_task.h index 5368fbdc7801..21a6f5d9af22 100644 --- a/include/linux/init_task.h +++ b/include/linux/init_task.h | |||
@@ -94,15 +94,25 @@ extern struct group_info init_groups; | |||
94 | # define CAP_INIT_BSET CAP_INIT_EFF_SET | 94 | # define CAP_INIT_BSET CAP_INIT_EFF_SET |
95 | #endif | 95 | #endif |
96 | 96 | ||
97 | #ifdef CONFIG_TREE_PREEMPT_RCU | ||
98 | #define INIT_TASK_RCU_PREEMPT(tsk) \ | ||
99 | .rcu_read_lock_nesting = 0, \ | ||
100 | .rcu_read_unlock_special = 0, \ | ||
101 | .rcu_blocked_node = NULL, \ | ||
102 | .rcu_node_entry = LIST_HEAD_INIT(tsk.rcu_node_entry), | ||
103 | #else | ||
104 | #define INIT_TASK_RCU_PREEMPT(tsk) | ||
105 | #endif | ||
106 | |||
97 | extern struct cred init_cred; | 107 | extern struct cred init_cred; |
98 | 108 | ||
99 | #ifdef CONFIG_PERF_COUNTERS | 109 | #ifdef CONFIG_PERF_EVENTS |
100 | # define INIT_PERF_COUNTERS(tsk) \ | 110 | # define INIT_PERF_EVENTS(tsk) \ |
101 | .perf_counter_mutex = \ | 111 | .perf_event_mutex = \ |
102 | __MUTEX_INITIALIZER(tsk.perf_counter_mutex), \ | 112 | __MUTEX_INITIALIZER(tsk.perf_event_mutex), \ |
103 | .perf_counter_list = LIST_HEAD_INIT(tsk.perf_counter_list), | 113 | .perf_event_list = LIST_HEAD_INIT(tsk.perf_event_list), |
104 | #else | 114 | #else |
105 | # define INIT_PERF_COUNTERS(tsk) | 115 | # define INIT_PERF_EVENTS(tsk) |
106 | #endif | 116 | #endif |
107 | 117 | ||
108 | /* | 118 | /* |
@@ -168,11 +178,12 @@ extern struct cred init_cred; | |||
168 | }, \ | 178 | }, \ |
169 | .dirties = INIT_PROP_LOCAL_SINGLE(dirties), \ | 179 | .dirties = INIT_PROP_LOCAL_SINGLE(dirties), \ |
170 | INIT_IDS \ | 180 | INIT_IDS \ |
171 | INIT_PERF_COUNTERS(tsk) \ | 181 | INIT_PERF_EVENTS(tsk) \ |
172 | INIT_TRACE_IRQFLAGS \ | 182 | INIT_TRACE_IRQFLAGS \ |
173 | INIT_LOCKDEP \ | 183 | INIT_LOCKDEP \ |
174 | INIT_FTRACE_GRAPH \ | 184 | INIT_FTRACE_GRAPH \ |
175 | INIT_TRACE_RECURSION \ | 185 | INIT_TRACE_RECURSION \ |
186 | INIT_TASK_RCU_PREEMPT(tsk) \ | ||
176 | } | 187 | } |
177 | 188 | ||
178 | 189 | ||
@@ -183,5 +194,8 @@ extern struct cred init_cred; | |||
183 | LIST_HEAD_INIT(cpu_timers[2]), \ | 194 | LIST_HEAD_INIT(cpu_timers[2]), \ |
184 | } | 195 | } |
185 | 196 | ||
197 | /* Attach to the init_task data structure for proper alignment */ | ||
198 | #define __init_task_data __attribute__((__section__(".data.init_task"))) | ||
199 | |||
186 | 200 | ||
187 | #endif | 201 | #endif |
diff --git a/include/linux/input/eeti_ts.h b/include/linux/input/eeti_ts.h new file mode 100644 index 000000000000..f875b316249d --- /dev/null +++ b/include/linux/input/eeti_ts.h | |||
@@ -0,0 +1,9 @@ | |||
1 | #ifndef LINUX_INPUT_EETI_TS_H | ||
2 | #define LINUX_INPUT_EETI_TS_H | ||
3 | |||
4 | struct eeti_ts_platform_data { | ||
5 | unsigned int irq_active_high; | ||
6 | }; | ||
7 | |||
8 | #endif /* LINUX_INPUT_EETI_TS_H */ | ||
9 | |||
diff --git a/include/linux/input/matrix_keypad.h b/include/linux/input/matrix_keypad.h new file mode 100644 index 000000000000..b3cd42d50e16 --- /dev/null +++ b/include/linux/input/matrix_keypad.h | |||
@@ -0,0 +1,98 @@ | |||
1 | #ifndef _MATRIX_KEYPAD_H | ||
2 | #define _MATRIX_KEYPAD_H | ||
3 | |||
4 | #include <linux/types.h> | ||
5 | #include <linux/input.h> | ||
6 | |||
7 | #define MATRIX_MAX_ROWS 16 | ||
8 | #define MATRIX_MAX_COLS 16 | ||
9 | |||
10 | #define KEY(row, col, val) ((((row) & (MATRIX_MAX_ROWS - 1)) << 24) |\ | ||
11 | (((col) & (MATRIX_MAX_COLS - 1)) << 16) |\ | ||
12 | (val & 0xffff)) | ||
13 | |||
14 | #define KEY_ROW(k) (((k) >> 24) & 0xff) | ||
15 | #define KEY_COL(k) (((k) >> 16) & 0xff) | ||
16 | #define KEY_VAL(k) ((k) & 0xffff) | ||
17 | |||
18 | #define MATRIX_SCAN_CODE(row, col, row_shift) (((row) << (row_shift)) + (col)) | ||
19 | |||
20 | /** | ||
21 | * struct matrix_keymap_data - keymap for matrix keyboards | ||
22 | * @keymap: pointer to array of uint32 values encoded with KEY() macro | ||
23 | * representing keymap | ||
24 | * @keymap_size: number of entries (initialized) in this keymap | ||
25 | * | ||
26 | * This structure is supposed to be used by platform code to supply | ||
27 | * keymaps to drivers that implement matrix-like keypads/keyboards. | ||
28 | */ | ||
29 | struct matrix_keymap_data { | ||
30 | const uint32_t *keymap; | ||
31 | unsigned int keymap_size; | ||
32 | }; | ||
33 | |||
34 | /** | ||
35 | * struct matrix_keypad_platform_data - platform-dependent keypad data | ||
36 | * @keymap_data: pointer to &matrix_keymap_data | ||
37 | * @row_gpios: pointer to array of gpio numbers representing rows | ||
38 | * @col_gpios: pointer to array of gpio numbers reporesenting colums | ||
39 | * @num_row_gpios: actual number of row gpios used by device | ||
40 | * @num_col_gpios: actual number of col gpios used by device | ||
41 | * @col_scan_delay_us: delay, measured in microseconds, that is | ||
42 | * needed before we can keypad after activating column gpio | ||
43 | * @debounce_ms: debounce interval in milliseconds | ||
44 | * | ||
45 | * This structure represents platform-specific data that use used by | ||
46 | * matrix_keypad driver to perform proper initialization. | ||
47 | */ | ||
48 | struct matrix_keypad_platform_data { | ||
49 | const struct matrix_keymap_data *keymap_data; | ||
50 | |||
51 | const unsigned int *row_gpios; | ||
52 | const unsigned int *col_gpios; | ||
53 | |||
54 | unsigned int num_row_gpios; | ||
55 | unsigned int num_col_gpios; | ||
56 | |||
57 | unsigned int col_scan_delay_us; | ||
58 | |||
59 | /* key debounce interval in milli-second */ | ||
60 | unsigned int debounce_ms; | ||
61 | |||
62 | bool active_low; | ||
63 | bool wakeup; | ||
64 | }; | ||
65 | |||
66 | /** | ||
67 | * matrix_keypad_build_keymap - convert platform keymap into matrix keymap | ||
68 | * @keymap_data: keymap supplied by the platform code | ||
69 | * @row_shift: number of bits to shift row value by to advance to the next | ||
70 | * line in the keymap | ||
71 | * @keymap: expanded version of keymap that is suitable for use by | ||
72 | * matrix keyboad driver | ||
73 | * @keybit: pointer to bitmap of keys supported by input device | ||
74 | * | ||
75 | * This function converts platform keymap (encoded with KEY() macro) into | ||
76 | * an array of keycodes that is suitable for using in a standard matrix | ||
77 | * keyboard driver that uses row and col as indices. | ||
78 | */ | ||
79 | static inline void | ||
80 | matrix_keypad_build_keymap(const struct matrix_keymap_data *keymap_data, | ||
81 | unsigned int row_shift, | ||
82 | unsigned short *keymap, unsigned long *keybit) | ||
83 | { | ||
84 | int i; | ||
85 | |||
86 | for (i = 0; i < keymap_data->keymap_size; i++) { | ||
87 | unsigned int key = keymap_data->keymap[i]; | ||
88 | unsigned int row = KEY_ROW(key); | ||
89 | unsigned int col = KEY_COL(key); | ||
90 | unsigned short code = KEY_VAL(key); | ||
91 | |||
92 | keymap[MATRIX_SCAN_CODE(row, col, row_shift)] = code; | ||
93 | __set_bit(code, keybit); | ||
94 | } | ||
95 | __clear_bit(KEY_RESERVED, keybit); | ||
96 | } | ||
97 | |||
98 | #endif /* _MATRIX_KEYPAD_H */ | ||
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index 2721f07e9354..8e9e151f811e 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h | |||
@@ -14,6 +14,7 @@ | |||
14 | #include <linux/irqflags.h> | 14 | #include <linux/irqflags.h> |
15 | #include <linux/smp.h> | 15 | #include <linux/smp.h> |
16 | #include <linux/percpu.h> | 16 | #include <linux/percpu.h> |
17 | #include <linux/hrtimer.h> | ||
17 | 18 | ||
18 | #include <asm/atomic.h> | 19 | #include <asm/atomic.h> |
19 | #include <asm/ptrace.h> | 20 | #include <asm/ptrace.h> |
@@ -49,6 +50,9 @@ | |||
49 | * IRQF_IRQPOLL - Interrupt is used for polling (only the interrupt that is | 50 | * IRQF_IRQPOLL - Interrupt is used for polling (only the interrupt that is |
50 | * registered first in an shared interrupt is considered for | 51 | * registered first in an shared interrupt is considered for |
51 | * performance reasons) | 52 | * performance reasons) |
53 | * IRQF_ONESHOT - Interrupt is not reenabled after the hardirq handler finished. | ||
54 | * Used by threaded interrupts which need to keep the | ||
55 | * irq line disabled until the threaded handler has been run. | ||
52 | */ | 56 | */ |
53 | #define IRQF_DISABLED 0x00000020 | 57 | #define IRQF_DISABLED 0x00000020 |
54 | #define IRQF_SAMPLE_RANDOM 0x00000040 | 58 | #define IRQF_SAMPLE_RANDOM 0x00000040 |
@@ -58,17 +62,20 @@ | |||
58 | #define IRQF_PERCPU 0x00000400 | 62 | #define IRQF_PERCPU 0x00000400 |
59 | #define IRQF_NOBALANCING 0x00000800 | 63 | #define IRQF_NOBALANCING 0x00000800 |
60 | #define IRQF_IRQPOLL 0x00001000 | 64 | #define IRQF_IRQPOLL 0x00001000 |
65 | #define IRQF_ONESHOT 0x00002000 | ||
61 | 66 | ||
62 | /* | 67 | /* |
63 | * Bits used by threaded handlers: | 68 | * Bits used by threaded handlers: |
64 | * IRQTF_RUNTHREAD - signals that the interrupt handler thread should run | 69 | * IRQTF_RUNTHREAD - signals that the interrupt handler thread should run |
65 | * IRQTF_DIED - handler thread died | 70 | * IRQTF_DIED - handler thread died |
66 | * IRQTF_WARNED - warning "IRQ_WAKE_THREAD w/o thread_fn" has been printed | 71 | * IRQTF_WARNED - warning "IRQ_WAKE_THREAD w/o thread_fn" has been printed |
72 | * IRQTF_AFFINITY - irq thread is requested to adjust affinity | ||
67 | */ | 73 | */ |
68 | enum { | 74 | enum { |
69 | IRQTF_RUNTHREAD, | 75 | IRQTF_RUNTHREAD, |
70 | IRQTF_DIED, | 76 | IRQTF_DIED, |
71 | IRQTF_WARNED, | 77 | IRQTF_WARNED, |
78 | IRQTF_AFFINITY, | ||
72 | }; | 79 | }; |
73 | 80 | ||
74 | typedef irqreturn_t (*irq_handler_t)(int, void *); | 81 | typedef irqreturn_t (*irq_handler_t)(int, void *); |
@@ -341,6 +348,7 @@ enum | |||
341 | NET_TX_SOFTIRQ, | 348 | NET_TX_SOFTIRQ, |
342 | NET_RX_SOFTIRQ, | 349 | NET_RX_SOFTIRQ, |
343 | BLOCK_SOFTIRQ, | 350 | BLOCK_SOFTIRQ, |
351 | BLOCK_IOPOLL_SOFTIRQ, | ||
344 | TASKLET_SOFTIRQ, | 352 | TASKLET_SOFTIRQ, |
345 | SCHED_SOFTIRQ, | 353 | SCHED_SOFTIRQ, |
346 | HRTIMER_SOFTIRQ, | 354 | HRTIMER_SOFTIRQ, |
@@ -517,6 +525,31 @@ extern void tasklet_kill_immediate(struct tasklet_struct *t, unsigned int cpu); | |||
517 | extern void tasklet_init(struct tasklet_struct *t, | 525 | extern void tasklet_init(struct tasklet_struct *t, |
518 | void (*func)(unsigned long), unsigned long data); | 526 | void (*func)(unsigned long), unsigned long data); |
519 | 527 | ||
528 | struct tasklet_hrtimer { | ||
529 | struct hrtimer timer; | ||
530 | struct tasklet_struct tasklet; | ||
531 | enum hrtimer_restart (*function)(struct hrtimer *); | ||
532 | }; | ||
533 | |||
534 | extern void | ||
535 | tasklet_hrtimer_init(struct tasklet_hrtimer *ttimer, | ||
536 | enum hrtimer_restart (*function)(struct hrtimer *), | ||
537 | clockid_t which_clock, enum hrtimer_mode mode); | ||
538 | |||
539 | static inline | ||
540 | int tasklet_hrtimer_start(struct tasklet_hrtimer *ttimer, ktime_t time, | ||
541 | const enum hrtimer_mode mode) | ||
542 | { | ||
543 | return hrtimer_start(&ttimer->timer, time, mode); | ||
544 | } | ||
545 | |||
546 | static inline | ||
547 | void tasklet_hrtimer_cancel(struct tasklet_hrtimer *ttimer) | ||
548 | { | ||
549 | hrtimer_cancel(&ttimer->timer); | ||
550 | tasklet_kill(&ttimer->tasklet); | ||
551 | } | ||
552 | |||
520 | /* | 553 | /* |
521 | * Autoprobing for irqs: | 554 | * Autoprobing for irqs: |
522 | * | 555 | * |
diff --git a/include/linux/io-mapping.h b/include/linux/io-mapping.h index 0adb0f91568c..97eb928b4924 100644 --- a/include/linux/io-mapping.h +++ b/include/linux/io-mapping.h | |||
@@ -49,23 +49,30 @@ static inline struct io_mapping * | |||
49 | io_mapping_create_wc(resource_size_t base, unsigned long size) | 49 | io_mapping_create_wc(resource_size_t base, unsigned long size) |
50 | { | 50 | { |
51 | struct io_mapping *iomap; | 51 | struct io_mapping *iomap; |
52 | 52 | pgprot_t prot; | |
53 | if (!is_io_mapping_possible(base, size)) | ||
54 | return NULL; | ||
55 | 53 | ||
56 | iomap = kmalloc(sizeof(*iomap), GFP_KERNEL); | 54 | iomap = kmalloc(sizeof(*iomap), GFP_KERNEL); |
57 | if (!iomap) | 55 | if (!iomap) |
58 | return NULL; | 56 | goto out_err; |
57 | |||
58 | if (iomap_create_wc(base, size, &prot)) | ||
59 | goto out_free; | ||
59 | 60 | ||
60 | iomap->base = base; | 61 | iomap->base = base; |
61 | iomap->size = size; | 62 | iomap->size = size; |
62 | iomap->prot = pgprot_writecombine(__pgprot(__PAGE_KERNEL)); | 63 | iomap->prot = prot; |
63 | return iomap; | 64 | return iomap; |
65 | |||
66 | out_free: | ||
67 | kfree(iomap); | ||
68 | out_err: | ||
69 | return NULL; | ||
64 | } | 70 | } |
65 | 71 | ||
66 | static inline void | 72 | static inline void |
67 | io_mapping_free(struct io_mapping *mapping) | 73 | io_mapping_free(struct io_mapping *mapping) |
68 | { | 74 | { |
75 | iomap_free(mapping->base, mapping->size); | ||
69 | kfree(mapping); | 76 | kfree(mapping); |
70 | } | 77 | } |
71 | 78 | ||
diff --git a/include/linux/iocontext.h b/include/linux/iocontext.h index dd05434fa45f..4da4a75c3f1e 100644 --- a/include/linux/iocontext.h +++ b/include/linux/iocontext.h | |||
@@ -92,7 +92,7 @@ static inline struct io_context *ioc_task_link(struct io_context *ioc) | |||
92 | * a race). | 92 | * a race). |
93 | */ | 93 | */ |
94 | if (ioc && atomic_long_inc_not_zero(&ioc->refcount)) { | 94 | if (ioc && atomic_long_inc_not_zero(&ioc->refcount)) { |
95 | atomic_long_inc(&ioc->refcount); | 95 | atomic_inc(&ioc->nr_tasks); |
96 | return ioc; | 96 | return ioc; |
97 | } | 97 | } |
98 | 98 | ||
diff --git a/include/linux/irq.h b/include/linux/irq.h index cb2e77a3f7f7..ae9653dbcd78 100644 --- a/include/linux/irq.h +++ b/include/linux/irq.h | |||
@@ -69,6 +69,8 @@ typedef void (*irq_flow_handler_t)(unsigned int irq, | |||
69 | #define IRQ_MOVE_PCNTXT 0x01000000 /* IRQ migration from process context */ | 69 | #define IRQ_MOVE_PCNTXT 0x01000000 /* IRQ migration from process context */ |
70 | #define IRQ_AFFINITY_SET 0x02000000 /* IRQ affinity was set from userspace*/ | 70 | #define IRQ_AFFINITY_SET 0x02000000 /* IRQ affinity was set from userspace*/ |
71 | #define IRQ_SUSPENDED 0x04000000 /* IRQ has gone through suspend sequence */ | 71 | #define IRQ_SUSPENDED 0x04000000 /* IRQ has gone through suspend sequence */ |
72 | #define IRQ_ONESHOT 0x08000000 /* IRQ is not unmasked after hardirq */ | ||
73 | #define IRQ_NESTED_THREAD 0x10000000 /* IRQ is nested into another, no own handler thread */ | ||
72 | 74 | ||
73 | #ifdef CONFIG_IRQ_PER_CPU | 75 | #ifdef CONFIG_IRQ_PER_CPU |
74 | # define CHECK_IRQ_PER_CPU(var) ((var) & IRQ_PER_CPU) | 76 | # define CHECK_IRQ_PER_CPU(var) ((var) & IRQ_PER_CPU) |
@@ -100,6 +102,9 @@ struct msi_desc; | |||
100 | * @set_type: set the flow type (IRQ_TYPE_LEVEL/etc.) of an IRQ | 102 | * @set_type: set the flow type (IRQ_TYPE_LEVEL/etc.) of an IRQ |
101 | * @set_wake: enable/disable power-management wake-on of an IRQ | 103 | * @set_wake: enable/disable power-management wake-on of an IRQ |
102 | * | 104 | * |
105 | * @bus_lock: function to lock access to slow bus (i2c) chips | ||
106 | * @bus_sync_unlock: function to sync and unlock slow bus (i2c) chips | ||
107 | * | ||
103 | * @release: release function solely used by UML | 108 | * @release: release function solely used by UML |
104 | * @typename: obsoleted by name, kept as migration helper | 109 | * @typename: obsoleted by name, kept as migration helper |
105 | */ | 110 | */ |
@@ -123,6 +128,9 @@ struct irq_chip { | |||
123 | int (*set_type)(unsigned int irq, unsigned int flow_type); | 128 | int (*set_type)(unsigned int irq, unsigned int flow_type); |
124 | int (*set_wake)(unsigned int irq, unsigned int on); | 129 | int (*set_wake)(unsigned int irq, unsigned int on); |
125 | 130 | ||
131 | void (*bus_lock)(unsigned int irq); | ||
132 | void (*bus_sync_unlock)(unsigned int irq); | ||
133 | |||
126 | /* Currently used only by UML, might disappear one day.*/ | 134 | /* Currently used only by UML, might disappear one day.*/ |
127 | #ifdef CONFIG_IRQ_RELEASE_METHOD | 135 | #ifdef CONFIG_IRQ_RELEASE_METHOD |
128 | void (*release)(unsigned int irq, void *dev_id); | 136 | void (*release)(unsigned int irq, void *dev_id); |
@@ -220,13 +228,6 @@ static inline struct irq_desc *move_irq_desc(struct irq_desc *desc, int node) | |||
220 | extern struct irq_desc *irq_to_desc_alloc_node(unsigned int irq, int node); | 228 | extern struct irq_desc *irq_to_desc_alloc_node(unsigned int irq, int node); |
221 | 229 | ||
222 | /* | 230 | /* |
223 | * Migration helpers for obsolete names, they will go away: | ||
224 | */ | ||
225 | #define hw_interrupt_type irq_chip | ||
226 | #define no_irq_type no_irq_chip | ||
227 | typedef struct irq_desc irq_desc_t; | ||
228 | |||
229 | /* | ||
230 | * Pick up the arch-dependent methods: | 231 | * Pick up the arch-dependent methods: |
231 | */ | 232 | */ |
232 | #include <asm/hw_irq.h> | 233 | #include <asm/hw_irq.h> |
@@ -289,6 +290,7 @@ extern void handle_edge_irq(unsigned int irq, struct irq_desc *desc); | |||
289 | extern void handle_simple_irq(unsigned int irq, struct irq_desc *desc); | 290 | extern void handle_simple_irq(unsigned int irq, struct irq_desc *desc); |
290 | extern void handle_percpu_irq(unsigned int irq, struct irq_desc *desc); | 291 | extern void handle_percpu_irq(unsigned int irq, struct irq_desc *desc); |
291 | extern void handle_bad_irq(unsigned int irq, struct irq_desc *desc); | 292 | extern void handle_bad_irq(unsigned int irq, struct irq_desc *desc); |
293 | extern void handle_nested_irq(unsigned int irq); | ||
292 | 294 | ||
293 | /* | 295 | /* |
294 | * Monolithic do_IRQ implementation. | 296 | * Monolithic do_IRQ implementation. |
@@ -379,6 +381,8 @@ set_irq_chained_handler(unsigned int irq, | |||
379 | __set_irq_handler(irq, handle, 1, NULL); | 381 | __set_irq_handler(irq, handle, 1, NULL); |
380 | } | 382 | } |
381 | 383 | ||
384 | extern void set_irq_nested_thread(unsigned int irq, int nest); | ||
385 | |||
382 | extern void set_irq_noprobe(unsigned int irq); | 386 | extern void set_irq_noprobe(unsigned int irq); |
383 | extern void set_irq_probe(unsigned int irq); | 387 | extern void set_irq_probe(unsigned int irq); |
384 | 388 | ||
diff --git a/include/linux/irqnr.h b/include/linux/irqnr.h index ec87b212ff7d..7bf89bc8cbca 100644 --- a/include/linux/irqnr.h +++ b/include/linux/irqnr.h | |||
@@ -41,6 +41,12 @@ extern struct irq_desc *irq_to_desc(unsigned int irq); | |||
41 | ; \ | 41 | ; \ |
42 | else | 42 | else |
43 | 43 | ||
44 | #ifdef CONFIG_SMP | ||
45 | #define irq_node(irq) (irq_to_desc(irq)->node) | ||
46 | #else | ||
47 | #define irq_node(irq) 0 | ||
48 | #endif | ||
49 | |||
44 | #endif /* CONFIG_GENERIC_HARDIRQS */ | 50 | #endif /* CONFIG_GENERIC_HARDIRQS */ |
45 | 51 | ||
46 | #define for_each_irq_nr(irq) \ | 52 | #define for_each_irq_nr(irq) \ |
diff --git a/include/linux/isdn/hdlc.h b/include/linux/isdn/hdlc.h new file mode 100644 index 000000000000..4b3ecc40889a --- /dev/null +++ b/include/linux/isdn/hdlc.h | |||
@@ -0,0 +1,82 @@ | |||
1 | /* | ||
2 | * hdlc.h -- General purpose ISDN HDLC decoder. | ||
3 | * | ||
4 | * Implementation of a HDLC decoder/encoder in software. | ||
5 | * Neccessary because some ISDN devices don't have HDLC | ||
6 | * controllers. | ||
7 | * | ||
8 | * Copyright (C) | ||
9 | * 2009 Karsten Keil <keil@b1-systems.de> | ||
10 | * 2002 Wolfgang Mües <wolfgang@iksw-muees.de> | ||
11 | * 2001 Frode Isaksen <fisaksen@bewan.com> | ||
12 | * 2001 Kai Germaschewski <kai.germaschewski@gmx.de> | ||
13 | * | ||
14 | * This program is free software; you can redistribute it and/or modify | ||
15 | * it under the terms of the GNU General Public License as published by | ||
16 | * the Free Software Foundation; either version 2 of the License, or | ||
17 | * (at your option) any later version. | ||
18 | * | ||
19 | * This program is distributed in the hope that it will be useful, | ||
20 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
21 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
22 | * GNU General Public License for more details. | ||
23 | * | ||
24 | * You should have received a copy of the GNU General Public License | ||
25 | * along with this program; if not, write to the Free Software | ||
26 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
27 | */ | ||
28 | |||
29 | #ifndef __ISDNHDLC_H__ | ||
30 | #define __ISDNHDLC_H__ | ||
31 | |||
32 | struct isdnhdlc_vars { | ||
33 | int bit_shift; | ||
34 | int hdlc_bits1; | ||
35 | int data_bits; | ||
36 | int ffbit_shift; /* encoding only */ | ||
37 | int state; | ||
38 | int dstpos; | ||
39 | |||
40 | u16 crc; | ||
41 | |||
42 | u8 cbin; | ||
43 | u8 shift_reg; | ||
44 | u8 ffvalue; | ||
45 | |||
46 | /* set if transferring data */ | ||
47 | u32 data_received:1; | ||
48 | /* set if D channel (send idle instead of flags) */ | ||
49 | u32 dchannel:1; | ||
50 | /* set if 56K adaptation */ | ||
51 | u32 do_adapt56:1; | ||
52 | /* set if in closing phase (need to send CRC + flag) */ | ||
53 | u32 do_closing:1; | ||
54 | /* set if data is bitreverse */ | ||
55 | u32 do_bitreverse:1; | ||
56 | }; | ||
57 | |||
58 | /* Feature Flags */ | ||
59 | #define HDLC_56KBIT 0x01 | ||
60 | #define HDLC_DCHANNEL 0x02 | ||
61 | #define HDLC_BITREVERSE 0x04 | ||
62 | |||
63 | /* | ||
64 | The return value from isdnhdlc_decode is | ||
65 | the frame length, 0 if no complete frame was decoded, | ||
66 | or a negative error number | ||
67 | */ | ||
68 | #define HDLC_FRAMING_ERROR 1 | ||
69 | #define HDLC_CRC_ERROR 2 | ||
70 | #define HDLC_LENGTH_ERROR 3 | ||
71 | |||
72 | extern void isdnhdlc_rcv_init(struct isdnhdlc_vars *hdlc, u32 features); | ||
73 | |||
74 | extern int isdnhdlc_decode(struct isdnhdlc_vars *hdlc, const u8 *src, | ||
75 | int slen, int *count, u8 *dst, int dsize); | ||
76 | |||
77 | extern void isdnhdlc_out_init(struct isdnhdlc_vars *hdlc, u32 features); | ||
78 | |||
79 | extern int isdnhdlc_encode(struct isdnhdlc_vars *hdlc, const u8 *src, | ||
80 | u16 slen, int *count, u8 *dst, int dsize); | ||
81 | |||
82 | #endif /* __ISDNHDLC_H__ */ | ||
diff --git a/include/linux/jbd.h b/include/linux/jbd.h index c2049a04fa0b..a1187a0c99b4 100644 --- a/include/linux/jbd.h +++ b/include/linux/jbd.h | |||
@@ -446,7 +446,7 @@ struct transaction_s | |||
446 | /* | 446 | /* |
447 | * Where in the log does this transaction's commit start? [no locking] | 447 | * Where in the log does this transaction's commit start? [no locking] |
448 | */ | 448 | */ |
449 | unsigned long t_log_start; | 449 | unsigned int t_log_start; |
450 | 450 | ||
451 | /* Number of buffers on the t_buffers list [j_list_lock] */ | 451 | /* Number of buffers on the t_buffers list [j_list_lock] */ |
452 | int t_nr_buffers; | 452 | int t_nr_buffers; |
@@ -701,26 +701,26 @@ struct journal_s | |||
701 | * Journal head: identifies the first unused block in the journal. | 701 | * Journal head: identifies the first unused block in the journal. |
702 | * [j_state_lock] | 702 | * [j_state_lock] |
703 | */ | 703 | */ |
704 | unsigned long j_head; | 704 | unsigned int j_head; |
705 | 705 | ||
706 | /* | 706 | /* |
707 | * Journal tail: identifies the oldest still-used block in the journal. | 707 | * Journal tail: identifies the oldest still-used block in the journal. |
708 | * [j_state_lock] | 708 | * [j_state_lock] |
709 | */ | 709 | */ |
710 | unsigned long j_tail; | 710 | unsigned int j_tail; |
711 | 711 | ||
712 | /* | 712 | /* |
713 | * Journal free: how many free blocks are there in the journal? | 713 | * Journal free: how many free blocks are there in the journal? |
714 | * [j_state_lock] | 714 | * [j_state_lock] |
715 | */ | 715 | */ |
716 | unsigned long j_free; | 716 | unsigned int j_free; |
717 | 717 | ||
718 | /* | 718 | /* |
719 | * Journal start and end: the block numbers of the first usable block | 719 | * Journal start and end: the block numbers of the first usable block |
720 | * and one beyond the last usable block in the journal. [j_state_lock] | 720 | * and one beyond the last usable block in the journal. [j_state_lock] |
721 | */ | 721 | */ |
722 | unsigned long j_first; | 722 | unsigned int j_first; |
723 | unsigned long j_last; | 723 | unsigned int j_last; |
724 | 724 | ||
725 | /* | 725 | /* |
726 | * Device, blocksize and starting block offset for the location where we | 726 | * Device, blocksize and starting block offset for the location where we |
@@ -728,7 +728,7 @@ struct journal_s | |||
728 | */ | 728 | */ |
729 | struct block_device *j_dev; | 729 | struct block_device *j_dev; |
730 | int j_blocksize; | 730 | int j_blocksize; |
731 | unsigned long j_blk_offset; | 731 | unsigned int j_blk_offset; |
732 | 732 | ||
733 | /* | 733 | /* |
734 | * Device which holds the client fs. For internal journal this will be | 734 | * Device which holds the client fs. For internal journal this will be |
@@ -859,7 +859,7 @@ extern void __journal_clean_data_list(transaction_t *transaction); | |||
859 | 859 | ||
860 | /* Log buffer allocation */ | 860 | /* Log buffer allocation */ |
861 | extern struct journal_head * journal_get_descriptor_buffer(journal_t *); | 861 | extern struct journal_head * journal_get_descriptor_buffer(journal_t *); |
862 | int journal_next_log_block(journal_t *, unsigned long *); | 862 | int journal_next_log_block(journal_t *, unsigned int *); |
863 | 863 | ||
864 | /* Commit management */ | 864 | /* Commit management */ |
865 | extern void journal_commit_transaction(journal_t *); | 865 | extern void journal_commit_transaction(journal_t *); |
@@ -874,7 +874,7 @@ extern int | |||
874 | journal_write_metadata_buffer(transaction_t *transaction, | 874 | journal_write_metadata_buffer(transaction_t *transaction, |
875 | struct journal_head *jh_in, | 875 | struct journal_head *jh_in, |
876 | struct journal_head **jh_out, | 876 | struct journal_head **jh_out, |
877 | unsigned long blocknr); | 877 | unsigned int blocknr); |
878 | 878 | ||
879 | /* Transaction locking */ | 879 | /* Transaction locking */ |
880 | extern void __wait_on_journal (journal_t *); | 880 | extern void __wait_on_journal (journal_t *); |
@@ -942,7 +942,7 @@ extern void journal_abort (journal_t *, int); | |||
942 | extern int journal_errno (journal_t *); | 942 | extern int journal_errno (journal_t *); |
943 | extern void journal_ack_err (journal_t *); | 943 | extern void journal_ack_err (journal_t *); |
944 | extern int journal_clear_err (journal_t *); | 944 | extern int journal_clear_err (journal_t *); |
945 | extern int journal_bmap(journal_t *, unsigned long, unsigned long *); | 945 | extern int journal_bmap(journal_t *, unsigned int, unsigned int *); |
946 | extern int journal_force_commit(journal_t *); | 946 | extern int journal_force_commit(journal_t *); |
947 | 947 | ||
948 | /* | 948 | /* |
@@ -976,14 +976,14 @@ extern int journal_init_revoke_caches(void); | |||
976 | 976 | ||
977 | extern void journal_destroy_revoke(journal_t *); | 977 | extern void journal_destroy_revoke(journal_t *); |
978 | extern int journal_revoke (handle_t *, | 978 | extern int journal_revoke (handle_t *, |
979 | unsigned long, struct buffer_head *); | 979 | unsigned int, struct buffer_head *); |
980 | extern int journal_cancel_revoke(handle_t *, struct journal_head *); | 980 | extern int journal_cancel_revoke(handle_t *, struct journal_head *); |
981 | extern void journal_write_revoke_records(journal_t *, | 981 | extern void journal_write_revoke_records(journal_t *, |
982 | transaction_t *, int); | 982 | transaction_t *, int); |
983 | 983 | ||
984 | /* Recovery revoke support */ | 984 | /* Recovery revoke support */ |
985 | extern int journal_set_revoke(journal_t *, unsigned long, tid_t); | 985 | extern int journal_set_revoke(journal_t *, unsigned int, tid_t); |
986 | extern int journal_test_revoke(journal_t *, unsigned long, tid_t); | 986 | extern int journal_test_revoke(journal_t *, unsigned int, tid_t); |
987 | extern void journal_clear_revoke(journal_t *); | 987 | extern void journal_clear_revoke(journal_t *); |
988 | extern void journal_switch_revoke_table(journal_t *journal); | 988 | extern void journal_switch_revoke_table(journal_t *journal); |
989 | 989 | ||
diff --git a/include/linux/jbd2.h b/include/linux/jbd2.h index d97eb652d6ca..52695d3dfd0b 100644 --- a/include/linux/jbd2.h +++ b/include/linux/jbd2.h | |||
@@ -652,7 +652,7 @@ struct transaction_s | |||
652 | * This transaction is being forced and some process is | 652 | * This transaction is being forced and some process is |
653 | * waiting for it to finish. | 653 | * waiting for it to finish. |
654 | */ | 654 | */ |
655 | int t_synchronous_commit:1; | 655 | unsigned int t_synchronous_commit:1; |
656 | 656 | ||
657 | /* | 657 | /* |
658 | * For use by the filesystem to store fs-specific data | 658 | * For use by the filesystem to store fs-specific data |
diff --git a/include/linux/kernel.h b/include/linux/kernel.h index d6320a3e8def..2b5b1e0899a8 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h | |||
@@ -125,7 +125,7 @@ extern int _cond_resched(void); | |||
125 | #endif | 125 | #endif |
126 | 126 | ||
127 | #ifdef CONFIG_DEBUG_SPINLOCK_SLEEP | 127 | #ifdef CONFIG_DEBUG_SPINLOCK_SLEEP |
128 | void __might_sleep(char *file, int line); | 128 | void __might_sleep(char *file, int line, int preempt_offset); |
129 | /** | 129 | /** |
130 | * might_sleep - annotation for functions that can sleep | 130 | * might_sleep - annotation for functions that can sleep |
131 | * | 131 | * |
@@ -137,8 +137,9 @@ extern int _cond_resched(void); | |||
137 | * supposed to. | 137 | * supposed to. |
138 | */ | 138 | */ |
139 | # define might_sleep() \ | 139 | # define might_sleep() \ |
140 | do { __might_sleep(__FILE__, __LINE__); might_resched(); } while (0) | 140 | do { __might_sleep(__FILE__, __LINE__, 0); might_resched(); } while (0) |
141 | #else | 141 | #else |
142 | static inline void __might_sleep(char *file, int line, int preempt_offset) { } | ||
142 | # define might_sleep() do { might_resched(); } while (0) | 143 | # define might_sleep() do { might_resched(); } while (0) |
143 | #endif | 144 | #endif |
144 | 145 | ||
diff --git a/include/linux/key.h b/include/linux/key.h index e544f466d69a..cd50dfa1d4c2 100644 --- a/include/linux/key.h +++ b/include/linux/key.h | |||
@@ -129,7 +129,10 @@ struct key { | |||
129 | struct rw_semaphore sem; /* change vs change sem */ | 129 | struct rw_semaphore sem; /* change vs change sem */ |
130 | struct key_user *user; /* owner of this key */ | 130 | struct key_user *user; /* owner of this key */ |
131 | void *security; /* security data for this key */ | 131 | void *security; /* security data for this key */ |
132 | time_t expiry; /* time at which key expires (or 0) */ | 132 | union { |
133 | time_t expiry; /* time at which key expires (or 0) */ | ||
134 | time_t revoked_at; /* time at which key was revoked */ | ||
135 | }; | ||
133 | uid_t uid; | 136 | uid_t uid; |
134 | gid_t gid; | 137 | gid_t gid; |
135 | key_perm_t perm; /* access permissions */ | 138 | key_perm_t perm; /* access permissions */ |
@@ -275,6 +278,8 @@ static inline key_serial_t key_serial(struct key *key) | |||
275 | extern ctl_table key_sysctls[]; | 278 | extern ctl_table key_sysctls[]; |
276 | #endif | 279 | #endif |
277 | 280 | ||
281 | extern void key_replace_session_keyring(void); | ||
282 | |||
278 | /* | 283 | /* |
279 | * the userspace interface | 284 | * the userspace interface |
280 | */ | 285 | */ |
@@ -297,6 +302,7 @@ extern void key_init(void); | |||
297 | #define key_fsuid_changed(t) do { } while(0) | 302 | #define key_fsuid_changed(t) do { } while(0) |
298 | #define key_fsgid_changed(t) do { } while(0) | 303 | #define key_fsgid_changed(t) do { } while(0) |
299 | #define key_init() do { } while(0) | 304 | #define key_init() do { } while(0) |
305 | #define key_replace_session_keyring() do { } while(0) | ||
300 | 306 | ||
301 | #endif /* CONFIG_KEYS */ | 307 | #endif /* CONFIG_KEYS */ |
302 | #endif /* __KERNEL__ */ | 308 | #endif /* __KERNEL__ */ |
diff --git a/include/linux/keyctl.h b/include/linux/keyctl.h index c0688eb72093..bd383f1944fb 100644 --- a/include/linux/keyctl.h +++ b/include/linux/keyctl.h | |||
@@ -52,5 +52,6 @@ | |||
52 | #define KEYCTL_SET_TIMEOUT 15 /* set key timeout */ | 52 | #define KEYCTL_SET_TIMEOUT 15 /* set key timeout */ |
53 | #define KEYCTL_ASSUME_AUTHORITY 16 /* assume request_key() authorisation */ | 53 | #define KEYCTL_ASSUME_AUTHORITY 16 /* assume request_key() authorisation */ |
54 | #define KEYCTL_GET_SECURITY 17 /* get key security label */ | 54 | #define KEYCTL_GET_SECURITY 17 /* get key security label */ |
55 | #define KEYCTL_SESSION_TO_PARENT 18 /* apply session keyring to parent process */ | ||
55 | 56 | ||
56 | #endif /* _LINUX_KEYCTL_H */ | 57 | #endif /* _LINUX_KEYCTL_H */ |
diff --git a/include/linux/kfifo.h b/include/linux/kfifo.h index 29f62e1733ff..ad6bdf5a5970 100644 --- a/include/linux/kfifo.h +++ b/include/linux/kfifo.h | |||
@@ -38,7 +38,7 @@ extern struct kfifo *kfifo_alloc(unsigned int size, gfp_t gfp_mask, | |||
38 | spinlock_t *lock); | 38 | spinlock_t *lock); |
39 | extern void kfifo_free(struct kfifo *fifo); | 39 | extern void kfifo_free(struct kfifo *fifo); |
40 | extern unsigned int __kfifo_put(struct kfifo *fifo, | 40 | extern unsigned int __kfifo_put(struct kfifo *fifo, |
41 | unsigned char *buffer, unsigned int len); | 41 | const unsigned char *buffer, unsigned int len); |
42 | extern unsigned int __kfifo_get(struct kfifo *fifo, | 42 | extern unsigned int __kfifo_get(struct kfifo *fifo, |
43 | unsigned char *buffer, unsigned int len); | 43 | unsigned char *buffer, unsigned int len); |
44 | 44 | ||
@@ -77,7 +77,7 @@ static inline void kfifo_reset(struct kfifo *fifo) | |||
77 | * bytes copied. | 77 | * bytes copied. |
78 | */ | 78 | */ |
79 | static inline unsigned int kfifo_put(struct kfifo *fifo, | 79 | static inline unsigned int kfifo_put(struct kfifo *fifo, |
80 | unsigned char *buffer, unsigned int len) | 80 | const unsigned char *buffer, unsigned int len) |
81 | { | 81 | { |
82 | unsigned long flags; | 82 | unsigned long flags; |
83 | unsigned int ret; | 83 | unsigned int ret; |
diff --git a/include/linux/kmemcheck.h b/include/linux/kmemcheck.h index 47b39b7c7e84..c8006607f947 100644 --- a/include/linux/kmemcheck.h +++ b/include/linux/kmemcheck.h | |||
@@ -34,6 +34,8 @@ void kmemcheck_mark_initialized_pages(struct page *p, unsigned int n); | |||
34 | int kmemcheck_show_addr(unsigned long address); | 34 | int kmemcheck_show_addr(unsigned long address); |
35 | int kmemcheck_hide_addr(unsigned long address); | 35 | int kmemcheck_hide_addr(unsigned long address); |
36 | 36 | ||
37 | bool kmemcheck_is_obj_initialized(unsigned long addr, size_t size); | ||
38 | |||
37 | #else | 39 | #else |
38 | #define kmemcheck_enabled 0 | 40 | #define kmemcheck_enabled 0 |
39 | 41 | ||
@@ -99,6 +101,11 @@ static inline void kmemcheck_mark_initialized_pages(struct page *p, | |||
99 | { | 101 | { |
100 | } | 102 | } |
101 | 103 | ||
104 | static inline bool kmemcheck_is_obj_initialized(unsigned long addr, size_t size) | ||
105 | { | ||
106 | return true; | ||
107 | } | ||
108 | |||
102 | #endif /* CONFIG_KMEMCHECK */ | 109 | #endif /* CONFIG_KMEMCHECK */ |
103 | 110 | ||
104 | /* | 111 | /* |
@@ -137,7 +144,10 @@ static inline void kmemcheck_mark_initialized_pages(struct page *p, | |||
137 | int name##_end[0]; | 144 | int name##_end[0]; |
138 | 145 | ||
139 | #define kmemcheck_annotate_bitfield(ptr, name) \ | 146 | #define kmemcheck_annotate_bitfield(ptr, name) \ |
140 | do if (ptr) { \ | 147 | do { \ |
148 | if (!ptr) \ | ||
149 | break; \ | ||
150 | \ | ||
141 | int _n = (long) &((ptr)->name##_end) \ | 151 | int _n = (long) &((ptr)->name##_end) \ |
142 | - (long) &((ptr)->name##_begin); \ | 152 | - (long) &((ptr)->name##_begin); \ |
143 | BUILD_BUG_ON(_n < 0); \ | 153 | BUILD_BUG_ON(_n < 0); \ |
diff --git a/include/linux/kmemleak.h b/include/linux/kmemleak.h index 7796aed6cdd5..3c7497d46ee9 100644 --- a/include/linux/kmemleak.h +++ b/include/linux/kmemleak.h | |||
@@ -23,17 +23,18 @@ | |||
23 | 23 | ||
24 | #ifdef CONFIG_DEBUG_KMEMLEAK | 24 | #ifdef CONFIG_DEBUG_KMEMLEAK |
25 | 25 | ||
26 | extern void kmemleak_init(void); | 26 | extern void kmemleak_init(void) __ref; |
27 | extern void kmemleak_alloc(const void *ptr, size_t size, int min_count, | 27 | extern void kmemleak_alloc(const void *ptr, size_t size, int min_count, |
28 | gfp_t gfp); | 28 | gfp_t gfp) __ref; |
29 | extern void kmemleak_free(const void *ptr); | 29 | extern void kmemleak_free(const void *ptr) __ref; |
30 | extern void kmemleak_free_part(const void *ptr, size_t size) __ref; | ||
30 | extern void kmemleak_padding(const void *ptr, unsigned long offset, | 31 | extern void kmemleak_padding(const void *ptr, unsigned long offset, |
31 | size_t size); | 32 | size_t size) __ref; |
32 | extern void kmemleak_not_leak(const void *ptr); | 33 | extern void kmemleak_not_leak(const void *ptr) __ref; |
33 | extern void kmemleak_ignore(const void *ptr); | 34 | extern void kmemleak_ignore(const void *ptr) __ref; |
34 | extern void kmemleak_scan_area(const void *ptr, unsigned long offset, | 35 | extern void kmemleak_scan_area(const void *ptr, unsigned long offset, |
35 | size_t length, gfp_t gfp); | 36 | size_t length, gfp_t gfp) __ref; |
36 | extern void kmemleak_no_scan(const void *ptr); | 37 | extern void kmemleak_no_scan(const void *ptr) __ref; |
37 | 38 | ||
38 | static inline void kmemleak_alloc_recursive(const void *ptr, size_t size, | 39 | static inline void kmemleak_alloc_recursive(const void *ptr, size_t size, |
39 | int min_count, unsigned long flags, | 40 | int min_count, unsigned long flags, |
@@ -71,6 +72,9 @@ static inline void kmemleak_alloc_recursive(const void *ptr, size_t size, | |||
71 | static inline void kmemleak_free(const void *ptr) | 72 | static inline void kmemleak_free(const void *ptr) |
72 | { | 73 | { |
73 | } | 74 | } |
75 | static inline void kmemleak_free_part(const void *ptr, size_t size) | ||
76 | { | ||
77 | } | ||
74 | static inline void kmemleak_free_recursive(const void *ptr, unsigned long flags) | 78 | static inline void kmemleak_free_recursive(const void *ptr, unsigned long flags) |
75 | { | 79 | { |
76 | } | 80 | } |
diff --git a/include/linux/kprobes.h b/include/linux/kprobes.h index bcd9c07848be..3a46b7b7abb2 100644 --- a/include/linux/kprobes.h +++ b/include/linux/kprobes.h | |||
@@ -48,13 +48,13 @@ | |||
48 | #define KPROBE_HIT_SSDONE 0x00000008 | 48 | #define KPROBE_HIT_SSDONE 0x00000008 |
49 | 49 | ||
50 | /* Attach to insert probes on any functions which should be ignored*/ | 50 | /* Attach to insert probes on any functions which should be ignored*/ |
51 | #define __kprobes __attribute__((__section__(".kprobes.text"))) notrace | 51 | #define __kprobes __attribute__((__section__(".kprobes.text"))) |
52 | #else /* CONFIG_KPROBES */ | 52 | #else /* CONFIG_KPROBES */ |
53 | typedef int kprobe_opcode_t; | 53 | typedef int kprobe_opcode_t; |
54 | struct arch_specific_insn { | 54 | struct arch_specific_insn { |
55 | int dummy; | 55 | int dummy; |
56 | }; | 56 | }; |
57 | #define __kprobes notrace | 57 | #define __kprobes |
58 | #endif /* CONFIG_KPROBES */ | 58 | #endif /* CONFIG_KPROBES */ |
59 | 59 | ||
60 | struct kprobe; | 60 | struct kprobe; |
diff --git a/include/linux/ksm.h b/include/linux/ksm.h new file mode 100644 index 000000000000..a485c14ecd5d --- /dev/null +++ b/include/linux/ksm.h | |||
@@ -0,0 +1,79 @@ | |||
1 | #ifndef __LINUX_KSM_H | ||
2 | #define __LINUX_KSM_H | ||
3 | /* | ||
4 | * Memory merging support. | ||
5 | * | ||
6 | * This code enables dynamic sharing of identical pages found in different | ||
7 | * memory areas, even if they are not shared by fork(). | ||
8 | */ | ||
9 | |||
10 | #include <linux/bitops.h> | ||
11 | #include <linux/mm.h> | ||
12 | #include <linux/sched.h> | ||
13 | #include <linux/vmstat.h> | ||
14 | |||
15 | #ifdef CONFIG_KSM | ||
16 | int ksm_madvise(struct vm_area_struct *vma, unsigned long start, | ||
17 | unsigned long end, int advice, unsigned long *vm_flags); | ||
18 | int __ksm_enter(struct mm_struct *mm); | ||
19 | void __ksm_exit(struct mm_struct *mm); | ||
20 | |||
21 | static inline int ksm_fork(struct mm_struct *mm, struct mm_struct *oldmm) | ||
22 | { | ||
23 | if (test_bit(MMF_VM_MERGEABLE, &oldmm->flags)) | ||
24 | return __ksm_enter(mm); | ||
25 | return 0; | ||
26 | } | ||
27 | |||
28 | static inline void ksm_exit(struct mm_struct *mm) | ||
29 | { | ||
30 | if (test_bit(MMF_VM_MERGEABLE, &mm->flags)) | ||
31 | __ksm_exit(mm); | ||
32 | } | ||
33 | |||
34 | /* | ||
35 | * A KSM page is one of those write-protected "shared pages" or "merged pages" | ||
36 | * which KSM maps into multiple mms, wherever identical anonymous page content | ||
37 | * is found in VM_MERGEABLE vmas. It's a PageAnon page, with NULL anon_vma. | ||
38 | */ | ||
39 | static inline int PageKsm(struct page *page) | ||
40 | { | ||
41 | return ((unsigned long)page->mapping == PAGE_MAPPING_ANON); | ||
42 | } | ||
43 | |||
44 | /* | ||
45 | * But we have to avoid the checking which page_add_anon_rmap() performs. | ||
46 | */ | ||
47 | static inline void page_add_ksm_rmap(struct page *page) | ||
48 | { | ||
49 | if (atomic_inc_and_test(&page->_mapcount)) { | ||
50 | page->mapping = (void *) PAGE_MAPPING_ANON; | ||
51 | __inc_zone_page_state(page, NR_ANON_PAGES); | ||
52 | } | ||
53 | } | ||
54 | #else /* !CONFIG_KSM */ | ||
55 | |||
56 | static inline int ksm_madvise(struct vm_area_struct *vma, unsigned long start, | ||
57 | unsigned long end, int advice, unsigned long *vm_flags) | ||
58 | { | ||
59 | return 0; | ||
60 | } | ||
61 | |||
62 | static inline int ksm_fork(struct mm_struct *mm, struct mm_struct *oldmm) | ||
63 | { | ||
64 | return 0; | ||
65 | } | ||
66 | |||
67 | static inline void ksm_exit(struct mm_struct *mm) | ||
68 | { | ||
69 | } | ||
70 | |||
71 | static inline int PageKsm(struct page *page) | ||
72 | { | ||
73 | return 0; | ||
74 | } | ||
75 | |||
76 | /* No stub required for page_add_ksm_rmap(page) */ | ||
77 | #endif /* !CONFIG_KSM */ | ||
78 | |||
79 | #endif | ||
diff --git a/include/linux/kvm.h b/include/linux/kvm.h index 3db5d8d37485..f8f8900fc5ec 100644 --- a/include/linux/kvm.h +++ b/include/linux/kvm.h | |||
@@ -14,7 +14,7 @@ | |||
14 | 14 | ||
15 | #define KVM_API_VERSION 12 | 15 | #define KVM_API_VERSION 12 |
16 | 16 | ||
17 | /* for KVM_TRACE_ENABLE */ | 17 | /* for KVM_TRACE_ENABLE, deprecated */ |
18 | struct kvm_user_trace_setup { | 18 | struct kvm_user_trace_setup { |
19 | __u32 buf_size; /* sub_buffer size of each per-cpu */ | 19 | __u32 buf_size; /* sub_buffer size of each per-cpu */ |
20 | __u32 buf_nr; /* the number of sub_buffers of each per-cpu */ | 20 | __u32 buf_nr; /* the number of sub_buffers of each per-cpu */ |
@@ -70,6 +70,14 @@ struct kvm_irqchip { | |||
70 | } chip; | 70 | } chip; |
71 | }; | 71 | }; |
72 | 72 | ||
73 | /* for KVM_CREATE_PIT2 */ | ||
74 | struct kvm_pit_config { | ||
75 | __u32 flags; | ||
76 | __u32 pad[15]; | ||
77 | }; | ||
78 | |||
79 | #define KVM_PIT_SPEAKER_DUMMY 1 | ||
80 | |||
73 | #define KVM_EXIT_UNKNOWN 0 | 81 | #define KVM_EXIT_UNKNOWN 0 |
74 | #define KVM_EXIT_EXCEPTION 1 | 82 | #define KVM_EXIT_EXCEPTION 1 |
75 | #define KVM_EXIT_IO 2 | 83 | #define KVM_EXIT_IO 2 |
@@ -87,6 +95,10 @@ struct kvm_irqchip { | |||
87 | #define KVM_EXIT_S390_RESET 14 | 95 | #define KVM_EXIT_S390_RESET 14 |
88 | #define KVM_EXIT_DCR 15 | 96 | #define KVM_EXIT_DCR 15 |
89 | #define KVM_EXIT_NMI 16 | 97 | #define KVM_EXIT_NMI 16 |
98 | #define KVM_EXIT_INTERNAL_ERROR 17 | ||
99 | |||
100 | /* For KVM_EXIT_INTERNAL_ERROR */ | ||
101 | #define KVM_INTERNAL_ERROR_EMULATION 1 | ||
90 | 102 | ||
91 | /* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */ | 103 | /* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */ |
92 | struct kvm_run { | 104 | struct kvm_run { |
@@ -173,6 +185,9 @@ struct kvm_run { | |||
173 | __u32 data; | 185 | __u32 data; |
174 | __u8 is_write; | 186 | __u8 is_write; |
175 | } dcr; | 187 | } dcr; |
188 | struct { | ||
189 | __u32 suberror; | ||
190 | } internal; | ||
176 | /* Fix the size of the union. */ | 191 | /* Fix the size of the union. */ |
177 | char padding[256]; | 192 | char padding[256]; |
178 | }; | 193 | }; |
@@ -292,6 +307,28 @@ struct kvm_guest_debug { | |||
292 | struct kvm_guest_debug_arch arch; | 307 | struct kvm_guest_debug_arch arch; |
293 | }; | 308 | }; |
294 | 309 | ||
310 | enum { | ||
311 | kvm_ioeventfd_flag_nr_datamatch, | ||
312 | kvm_ioeventfd_flag_nr_pio, | ||
313 | kvm_ioeventfd_flag_nr_deassign, | ||
314 | kvm_ioeventfd_flag_nr_max, | ||
315 | }; | ||
316 | |||
317 | #define KVM_IOEVENTFD_FLAG_DATAMATCH (1 << kvm_ioeventfd_flag_nr_datamatch) | ||
318 | #define KVM_IOEVENTFD_FLAG_PIO (1 << kvm_ioeventfd_flag_nr_pio) | ||
319 | #define KVM_IOEVENTFD_FLAG_DEASSIGN (1 << kvm_ioeventfd_flag_nr_deassign) | ||
320 | |||
321 | #define KVM_IOEVENTFD_VALID_FLAG_MASK ((1 << kvm_ioeventfd_flag_nr_max) - 1) | ||
322 | |||
323 | struct kvm_ioeventfd { | ||
324 | __u64 datamatch; | ||
325 | __u64 addr; /* legal pio/mmio address */ | ||
326 | __u32 len; /* 1, 2, 4, or 8 bytes */ | ||
327 | __s32 fd; | ||
328 | __u32 flags; | ||
329 | __u8 pad[36]; | ||
330 | }; | ||
331 | |||
295 | #define KVM_TRC_SHIFT 16 | 332 | #define KVM_TRC_SHIFT 16 |
296 | /* | 333 | /* |
297 | * kvm trace categories | 334 | * kvm trace categories |
@@ -310,35 +347,6 @@ struct kvm_guest_debug { | |||
310 | #define KVM_TRC_CYCLE_SIZE 8 | 347 | #define KVM_TRC_CYCLE_SIZE 8 |
311 | #define KVM_TRC_EXTRA_MAX 7 | 348 | #define KVM_TRC_EXTRA_MAX 7 |
312 | 349 | ||
313 | /* This structure represents a single trace buffer record. */ | ||
314 | struct kvm_trace_rec { | ||
315 | /* variable rec_val | ||
316 | * is split into: | ||
317 | * bits 0 - 27 -> event id | ||
318 | * bits 28 -30 -> number of extra data args of size u32 | ||
319 | * bits 31 -> binary indicator for if tsc is in record | ||
320 | */ | ||
321 | __u32 rec_val; | ||
322 | __u32 pid; | ||
323 | __u32 vcpu_id; | ||
324 | union { | ||
325 | struct { | ||
326 | __u64 timestamp; | ||
327 | __u32 extra_u32[KVM_TRC_EXTRA_MAX]; | ||
328 | } __attribute__((packed)) timestamp; | ||
329 | struct { | ||
330 | __u32 extra_u32[KVM_TRC_EXTRA_MAX]; | ||
331 | } notimestamp; | ||
332 | } u; | ||
333 | }; | ||
334 | |||
335 | #define TRACE_REC_EVENT_ID(val) \ | ||
336 | (0x0fffffff & (val)) | ||
337 | #define TRACE_REC_NUM_DATA_ARGS(val) \ | ||
338 | (0x70000000 & ((val) << 28)) | ||
339 | #define TRACE_REC_TCS(val) \ | ||
340 | (0x80000000 & ((val) << 31)) | ||
341 | |||
342 | #define KVMIO 0xAE | 350 | #define KVMIO 0xAE |
343 | 351 | ||
344 | /* | 352 | /* |
@@ -415,6 +423,19 @@ struct kvm_trace_rec { | |||
415 | #define KVM_CAP_ASSIGN_DEV_IRQ 29 | 423 | #define KVM_CAP_ASSIGN_DEV_IRQ 29 |
416 | /* Another bug in KVM_SET_USER_MEMORY_REGION fixed: */ | 424 | /* Another bug in KVM_SET_USER_MEMORY_REGION fixed: */ |
417 | #define KVM_CAP_JOIN_MEMORY_REGIONS_WORKS 30 | 425 | #define KVM_CAP_JOIN_MEMORY_REGIONS_WORKS 30 |
426 | #ifdef __KVM_HAVE_MCE | ||
427 | #define KVM_CAP_MCE 31 | ||
428 | #endif | ||
429 | #define KVM_CAP_IRQFD 32 | ||
430 | #ifdef __KVM_HAVE_PIT | ||
431 | #define KVM_CAP_PIT2 33 | ||
432 | #endif | ||
433 | #define KVM_CAP_SET_BOOT_CPU_ID 34 | ||
434 | #ifdef __KVM_HAVE_PIT_STATE2 | ||
435 | #define KVM_CAP_PIT_STATE2 35 | ||
436 | #endif | ||
437 | #define KVM_CAP_IOEVENTFD 36 | ||
438 | #define KVM_CAP_SET_IDENTITY_MAP_ADDR 37 | ||
418 | 439 | ||
419 | #ifdef KVM_CAP_IRQ_ROUTING | 440 | #ifdef KVM_CAP_IRQ_ROUTING |
420 | 441 | ||
@@ -454,15 +475,32 @@ struct kvm_irq_routing { | |||
454 | 475 | ||
455 | #endif | 476 | #endif |
456 | 477 | ||
478 | #ifdef KVM_CAP_MCE | ||
479 | /* x86 MCE */ | ||
480 | struct kvm_x86_mce { | ||
481 | __u64 status; | ||
482 | __u64 addr; | ||
483 | __u64 misc; | ||
484 | __u64 mcg_status; | ||
485 | __u8 bank; | ||
486 | __u8 pad1[7]; | ||
487 | __u64 pad2[3]; | ||
488 | }; | ||
489 | #endif | ||
490 | |||
491 | #define KVM_IRQFD_FLAG_DEASSIGN (1 << 0) | ||
492 | |||
493 | struct kvm_irqfd { | ||
494 | __u32 fd; | ||
495 | __u32 gsi; | ||
496 | __u32 flags; | ||
497 | __u8 pad[20]; | ||
498 | }; | ||
499 | |||
457 | /* | 500 | /* |
458 | * ioctls for VM fds | 501 | * ioctls for VM fds |
459 | */ | 502 | */ |
460 | #define KVM_SET_MEMORY_REGION _IOW(KVMIO, 0x40, struct kvm_memory_region) | 503 | #define KVM_SET_MEMORY_REGION _IOW(KVMIO, 0x40, struct kvm_memory_region) |
461 | #define KVM_SET_NR_MMU_PAGES _IO(KVMIO, 0x44) | ||
462 | #define KVM_GET_NR_MMU_PAGES _IO(KVMIO, 0x45) | ||
463 | #define KVM_SET_USER_MEMORY_REGION _IOW(KVMIO, 0x46,\ | ||
464 | struct kvm_userspace_memory_region) | ||
465 | #define KVM_SET_TSS_ADDR _IO(KVMIO, 0x47) | ||
466 | /* | 504 | /* |
467 | * KVM_CREATE_VCPU receives as a parameter the vcpu slot, and returns | 505 | * KVM_CREATE_VCPU receives as a parameter the vcpu slot, and returns |
468 | * a vcpu fd. | 506 | * a vcpu fd. |
@@ -470,6 +508,12 @@ struct kvm_irq_routing { | |||
470 | #define KVM_CREATE_VCPU _IO(KVMIO, 0x41) | 508 | #define KVM_CREATE_VCPU _IO(KVMIO, 0x41) |
471 | #define KVM_GET_DIRTY_LOG _IOW(KVMIO, 0x42, struct kvm_dirty_log) | 509 | #define KVM_GET_DIRTY_LOG _IOW(KVMIO, 0x42, struct kvm_dirty_log) |
472 | #define KVM_SET_MEMORY_ALIAS _IOW(KVMIO, 0x43, struct kvm_memory_alias) | 510 | #define KVM_SET_MEMORY_ALIAS _IOW(KVMIO, 0x43, struct kvm_memory_alias) |
511 | #define KVM_SET_NR_MMU_PAGES _IO(KVMIO, 0x44) | ||
512 | #define KVM_GET_NR_MMU_PAGES _IO(KVMIO, 0x45) | ||
513 | #define KVM_SET_USER_MEMORY_REGION _IOW(KVMIO, 0x46,\ | ||
514 | struct kvm_userspace_memory_region) | ||
515 | #define KVM_SET_TSS_ADDR _IO(KVMIO, 0x47) | ||
516 | #define KVM_SET_IDENTITY_MAP_ADDR _IOW(KVMIO, 0x48, __u64) | ||
473 | /* Device model IOC */ | 517 | /* Device model IOC */ |
474 | #define KVM_CREATE_IRQCHIP _IO(KVMIO, 0x60) | 518 | #define KVM_CREATE_IRQCHIP _IO(KVMIO, 0x60) |
475 | #define KVM_IRQ_LINE _IOW(KVMIO, 0x61, struct kvm_irq_level) | 519 | #define KVM_IRQ_LINE _IOW(KVMIO, 0x61, struct kvm_irq_level) |
@@ -498,6 +542,10 @@ struct kvm_irq_routing { | |||
498 | #define KVM_ASSIGN_SET_MSIX_ENTRY \ | 542 | #define KVM_ASSIGN_SET_MSIX_ENTRY \ |
499 | _IOW(KVMIO, 0x74, struct kvm_assigned_msix_entry) | 543 | _IOW(KVMIO, 0x74, struct kvm_assigned_msix_entry) |
500 | #define KVM_DEASSIGN_DEV_IRQ _IOW(KVMIO, 0x75, struct kvm_assigned_irq) | 544 | #define KVM_DEASSIGN_DEV_IRQ _IOW(KVMIO, 0x75, struct kvm_assigned_irq) |
545 | #define KVM_IRQFD _IOW(KVMIO, 0x76, struct kvm_irqfd) | ||
546 | #define KVM_CREATE_PIT2 _IOW(KVMIO, 0x77, struct kvm_pit_config) | ||
547 | #define KVM_SET_BOOT_CPU_ID _IO(KVMIO, 0x78) | ||
548 | #define KVM_IOEVENTFD _IOW(KVMIO, 0x79, struct kvm_ioeventfd) | ||
501 | 549 | ||
502 | /* | 550 | /* |
503 | * ioctls for vcpu fds | 551 | * ioctls for vcpu fds |
@@ -541,6 +589,10 @@ struct kvm_irq_routing { | |||
541 | #define KVM_NMI _IO(KVMIO, 0x9a) | 589 | #define KVM_NMI _IO(KVMIO, 0x9a) |
542 | /* Available with KVM_CAP_SET_GUEST_DEBUG */ | 590 | /* Available with KVM_CAP_SET_GUEST_DEBUG */ |
543 | #define KVM_SET_GUEST_DEBUG _IOW(KVMIO, 0x9b, struct kvm_guest_debug) | 591 | #define KVM_SET_GUEST_DEBUG _IOW(KVMIO, 0x9b, struct kvm_guest_debug) |
592 | /* MCE for x86 */ | ||
593 | #define KVM_X86_SETUP_MCE _IOW(KVMIO, 0x9c, __u64) | ||
594 | #define KVM_X86_GET_MCE_CAP_SUPPORTED _IOR(KVMIO, 0x9d, __u64) | ||
595 | #define KVM_X86_SET_MCE _IOW(KVMIO, 0x9e, struct kvm_x86_mce) | ||
544 | 596 | ||
545 | /* | 597 | /* |
546 | * Deprecated interfaces | 598 | * Deprecated interfaces |
@@ -563,6 +615,9 @@ struct kvm_debug_guest { | |||
563 | #define KVM_IA64_VCPU_GET_STACK _IOR(KVMIO, 0x9a, void *) | 615 | #define KVM_IA64_VCPU_GET_STACK _IOR(KVMIO, 0x9a, void *) |
564 | #define KVM_IA64_VCPU_SET_STACK _IOW(KVMIO, 0x9b, void *) | 616 | #define KVM_IA64_VCPU_SET_STACK _IOW(KVMIO, 0x9b, void *) |
565 | 617 | ||
618 | #define KVM_GET_PIT2 _IOR(KVMIO, 0x9f, struct kvm_pit_state2) | ||
619 | #define KVM_SET_PIT2 _IOW(KVMIO, 0xa0, struct kvm_pit_state2) | ||
620 | |||
566 | #define KVM_TRC_INJ_VIRQ (KVM_TRC_HANDLER + 0x02) | 621 | #define KVM_TRC_INJ_VIRQ (KVM_TRC_HANDLER + 0x02) |
567 | #define KVM_TRC_REDELIVER_EVT (KVM_TRC_HANDLER + 0x03) | 622 | #define KVM_TRC_REDELIVER_EVT (KVM_TRC_HANDLER + 0x03) |
568 | #define KVM_TRC_PEND_INTR (KVM_TRC_HANDLER + 0x04) | 623 | #define KVM_TRC_PEND_INTR (KVM_TRC_HANDLER + 0x04) |
@@ -633,7 +688,7 @@ struct kvm_assigned_msix_nr { | |||
633 | __u16 padding; | 688 | __u16 padding; |
634 | }; | 689 | }; |
635 | 690 | ||
636 | #define KVM_MAX_MSIX_PER_DEV 512 | 691 | #define KVM_MAX_MSIX_PER_DEV 256 |
637 | struct kvm_assigned_msix_entry { | 692 | struct kvm_assigned_msix_entry { |
638 | __u32 assigned_dev_id; | 693 | __u32 assigned_dev_id; |
639 | __u32 gsi; | 694 | __u32 gsi; |
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 16713dc672e4..b7bbb5ddd7ae 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h | |||
@@ -15,7 +15,6 @@ | |||
15 | #include <linux/sched.h> | 15 | #include <linux/sched.h> |
16 | #include <linux/mm.h> | 16 | #include <linux/mm.h> |
17 | #include <linux/preempt.h> | 17 | #include <linux/preempt.h> |
18 | #include <linux/marker.h> | ||
19 | #include <linux/msi.h> | 18 | #include <linux/msi.h> |
20 | #include <asm/signal.h> | 19 | #include <asm/signal.h> |
21 | 20 | ||
@@ -42,6 +41,7 @@ | |||
42 | 41 | ||
43 | #define KVM_USERSPACE_IRQ_SOURCE_ID 0 | 42 | #define KVM_USERSPACE_IRQ_SOURCE_ID 0 |
44 | 43 | ||
44 | struct kvm; | ||
45 | struct kvm_vcpu; | 45 | struct kvm_vcpu; |
46 | extern struct kmem_cache *kvm_vcpu_cache; | 46 | extern struct kmem_cache *kvm_vcpu_cache; |
47 | 47 | ||
@@ -59,10 +59,18 @@ struct kvm_io_bus { | |||
59 | 59 | ||
60 | void kvm_io_bus_init(struct kvm_io_bus *bus); | 60 | void kvm_io_bus_init(struct kvm_io_bus *bus); |
61 | void kvm_io_bus_destroy(struct kvm_io_bus *bus); | 61 | void kvm_io_bus_destroy(struct kvm_io_bus *bus); |
62 | struct kvm_io_device *kvm_io_bus_find_dev(struct kvm_io_bus *bus, | 62 | int kvm_io_bus_write(struct kvm_io_bus *bus, gpa_t addr, int len, |
63 | gpa_t addr, int len, int is_write); | 63 | const void *val); |
64 | void kvm_io_bus_register_dev(struct kvm_io_bus *bus, | 64 | int kvm_io_bus_read(struct kvm_io_bus *bus, gpa_t addr, int len, |
65 | struct kvm_io_device *dev); | 65 | void *val); |
66 | int __kvm_io_bus_register_dev(struct kvm_io_bus *bus, | ||
67 | struct kvm_io_device *dev); | ||
68 | int kvm_io_bus_register_dev(struct kvm *kvm, struct kvm_io_bus *bus, | ||
69 | struct kvm_io_device *dev); | ||
70 | void __kvm_io_bus_unregister_dev(struct kvm_io_bus *bus, | ||
71 | struct kvm_io_device *dev); | ||
72 | void kvm_io_bus_unregister_dev(struct kvm *kvm, struct kvm_io_bus *bus, | ||
73 | struct kvm_io_device *dev); | ||
66 | 74 | ||
67 | struct kvm_vcpu { | 75 | struct kvm_vcpu { |
68 | struct kvm *kvm; | 76 | struct kvm *kvm; |
@@ -103,13 +111,14 @@ struct kvm_memory_slot { | |||
103 | struct { | 111 | struct { |
104 | unsigned long rmap_pde; | 112 | unsigned long rmap_pde; |
105 | int write_count; | 113 | int write_count; |
106 | } *lpage_info; | 114 | } *lpage_info[KVM_NR_PAGE_SIZES - 1]; |
107 | unsigned long userspace_addr; | 115 | unsigned long userspace_addr; |
108 | int user_alloc; | 116 | int user_alloc; |
109 | }; | 117 | }; |
110 | 118 | ||
111 | struct kvm_kernel_irq_routing_entry { | 119 | struct kvm_kernel_irq_routing_entry { |
112 | u32 gsi; | 120 | u32 gsi; |
121 | u32 type; | ||
113 | int (*set)(struct kvm_kernel_irq_routing_entry *e, | 122 | int (*set)(struct kvm_kernel_irq_routing_entry *e, |
114 | struct kvm *kvm, int level); | 123 | struct kvm *kvm, int level); |
115 | union { | 124 | union { |
@@ -123,7 +132,6 @@ struct kvm_kernel_irq_routing_entry { | |||
123 | }; | 132 | }; |
124 | 133 | ||
125 | struct kvm { | 134 | struct kvm { |
126 | struct mutex lock; /* protects the vcpus array and APIC accesses */ | ||
127 | spinlock_t mmu_lock; | 135 | spinlock_t mmu_lock; |
128 | spinlock_t requests_lock; | 136 | spinlock_t requests_lock; |
129 | struct rw_semaphore slots_lock; | 137 | struct rw_semaphore slots_lock; |
@@ -131,10 +139,23 @@ struct kvm { | |||
131 | int nmemslots; | 139 | int nmemslots; |
132 | struct kvm_memory_slot memslots[KVM_MEMORY_SLOTS + | 140 | struct kvm_memory_slot memslots[KVM_MEMORY_SLOTS + |
133 | KVM_PRIVATE_MEM_SLOTS]; | 141 | KVM_PRIVATE_MEM_SLOTS]; |
142 | #ifdef CONFIG_KVM_APIC_ARCHITECTURE | ||
143 | u32 bsp_vcpu_id; | ||
144 | struct kvm_vcpu *bsp_vcpu; | ||
145 | #endif | ||
134 | struct kvm_vcpu *vcpus[KVM_MAX_VCPUS]; | 146 | struct kvm_vcpu *vcpus[KVM_MAX_VCPUS]; |
147 | atomic_t online_vcpus; | ||
135 | struct list_head vm_list; | 148 | struct list_head vm_list; |
149 | struct mutex lock; | ||
136 | struct kvm_io_bus mmio_bus; | 150 | struct kvm_io_bus mmio_bus; |
137 | struct kvm_io_bus pio_bus; | 151 | struct kvm_io_bus pio_bus; |
152 | #ifdef CONFIG_HAVE_KVM_EVENTFD | ||
153 | struct { | ||
154 | spinlock_t lock; | ||
155 | struct list_head items; | ||
156 | } irqfds; | ||
157 | struct list_head ioeventfds; | ||
158 | #endif | ||
138 | struct kvm_vm_stat stat; | 159 | struct kvm_vm_stat stat; |
139 | struct kvm_arch arch; | 160 | struct kvm_arch arch; |
140 | atomic_t users_count; | 161 | atomic_t users_count; |
@@ -143,6 +164,7 @@ struct kvm { | |||
143 | struct kvm_coalesced_mmio_ring *coalesced_mmio_ring; | 164 | struct kvm_coalesced_mmio_ring *coalesced_mmio_ring; |
144 | #endif | 165 | #endif |
145 | 166 | ||
167 | struct mutex irq_lock; | ||
146 | #ifdef CONFIG_HAVE_KVM_IRQCHIP | 168 | #ifdef CONFIG_HAVE_KVM_IRQCHIP |
147 | struct list_head irq_routing; /* of kvm_kernel_irq_routing_entry */ | 169 | struct list_head irq_routing; /* of kvm_kernel_irq_routing_entry */ |
148 | struct hlist_head mask_notifier_list; | 170 | struct hlist_head mask_notifier_list; |
@@ -166,6 +188,17 @@ struct kvm { | |||
166 | #define kvm_printf(kvm, fmt ...) printk(KERN_DEBUG fmt) | 188 | #define kvm_printf(kvm, fmt ...) printk(KERN_DEBUG fmt) |
167 | #define vcpu_printf(vcpu, fmt...) kvm_printf(vcpu->kvm, fmt) | 189 | #define vcpu_printf(vcpu, fmt...) kvm_printf(vcpu->kvm, fmt) |
168 | 190 | ||
191 | static inline struct kvm_vcpu *kvm_get_vcpu(struct kvm *kvm, int i) | ||
192 | { | ||
193 | smp_rmb(); | ||
194 | return kvm->vcpus[i]; | ||
195 | } | ||
196 | |||
197 | #define kvm_for_each_vcpu(idx, vcpup, kvm) \ | ||
198 | for (idx = 0, vcpup = kvm_get_vcpu(kvm, idx); \ | ||
199 | idx < atomic_read(&kvm->online_vcpus) && vcpup; \ | ||
200 | vcpup = kvm_get_vcpu(kvm, ++idx)) | ||
201 | |||
169 | int kvm_vcpu_init(struct kvm_vcpu *vcpu, struct kvm *kvm, unsigned id); | 202 | int kvm_vcpu_init(struct kvm_vcpu *vcpu, struct kvm *kvm, unsigned id); |
170 | void kvm_vcpu_uninit(struct kvm_vcpu *vcpu); | 203 | void kvm_vcpu_uninit(struct kvm_vcpu *vcpu); |
171 | 204 | ||
@@ -200,6 +233,7 @@ int kvm_arch_set_memory_region(struct kvm *kvm, | |||
200 | struct kvm_userspace_memory_region *mem, | 233 | struct kvm_userspace_memory_region *mem, |
201 | struct kvm_memory_slot old, | 234 | struct kvm_memory_slot old, |
202 | int user_alloc); | 235 | int user_alloc); |
236 | void kvm_disable_largepages(void); | ||
203 | void kvm_arch_flush_shadow(struct kvm *kvm); | 237 | void kvm_arch_flush_shadow(struct kvm *kvm); |
204 | gfn_t unalias_gfn(struct kvm *kvm, gfn_t gfn); | 238 | gfn_t unalias_gfn(struct kvm *kvm, gfn_t gfn); |
205 | struct page *gfn_to_page(struct kvm *kvm, gfn_t gfn); | 239 | struct page *gfn_to_page(struct kvm *kvm, gfn_t gfn); |
@@ -242,8 +276,6 @@ long kvm_arch_dev_ioctl(struct file *filp, | |||
242 | unsigned int ioctl, unsigned long arg); | 276 | unsigned int ioctl, unsigned long arg); |
243 | long kvm_arch_vcpu_ioctl(struct file *filp, | 277 | long kvm_arch_vcpu_ioctl(struct file *filp, |
244 | unsigned int ioctl, unsigned long arg); | 278 | unsigned int ioctl, unsigned long arg); |
245 | void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu); | ||
246 | void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu); | ||
247 | 279 | ||
248 | int kvm_dev_ioctl_check_extension(long ext); | 280 | int kvm_dev_ioctl_check_extension(long ext); |
249 | 281 | ||
@@ -299,7 +331,6 @@ int kvm_arch_hardware_setup(void); | |||
299 | void kvm_arch_hardware_unsetup(void); | 331 | void kvm_arch_hardware_unsetup(void); |
300 | void kvm_arch_check_processor_compat(void *rtn); | 332 | void kvm_arch_check_processor_compat(void *rtn); |
301 | int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu); | 333 | int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu); |
302 | int kvm_arch_interrupt_allowed(struct kvm_vcpu *vcpu); | ||
303 | 334 | ||
304 | void kvm_free_physmem(struct kvm *kvm); | 335 | void kvm_free_physmem(struct kvm *kvm); |
305 | 336 | ||
@@ -308,8 +339,6 @@ void kvm_arch_destroy_vm(struct kvm *kvm); | |||
308 | void kvm_free_all_assigned_devices(struct kvm *kvm); | 339 | void kvm_free_all_assigned_devices(struct kvm *kvm); |
309 | void kvm_arch_sync_events(struct kvm *kvm); | 340 | void kvm_arch_sync_events(struct kvm *kvm); |
310 | 341 | ||
311 | int kvm_cpu_get_interrupt(struct kvm_vcpu *v); | ||
312 | int kvm_cpu_has_interrupt(struct kvm_vcpu *v); | ||
313 | int kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu); | 342 | int kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu); |
314 | void kvm_vcpu_kick(struct kvm_vcpu *vcpu); | 343 | void kvm_vcpu_kick(struct kvm_vcpu *vcpu); |
315 | 344 | ||
@@ -365,7 +394,8 @@ int kvm_set_irq(struct kvm *kvm, int irq_source_id, int irq, int level); | |||
365 | void kvm_notify_acked_irq(struct kvm *kvm, unsigned irqchip, unsigned pin); | 394 | void kvm_notify_acked_irq(struct kvm *kvm, unsigned irqchip, unsigned pin); |
366 | void kvm_register_irq_ack_notifier(struct kvm *kvm, | 395 | void kvm_register_irq_ack_notifier(struct kvm *kvm, |
367 | struct kvm_irq_ack_notifier *kian); | 396 | struct kvm_irq_ack_notifier *kian); |
368 | void kvm_unregister_irq_ack_notifier(struct kvm_irq_ack_notifier *kian); | 397 | void kvm_unregister_irq_ack_notifier(struct kvm *kvm, |
398 | struct kvm_irq_ack_notifier *kian); | ||
369 | int kvm_request_irq_source_id(struct kvm *kvm); | 399 | int kvm_request_irq_source_id(struct kvm *kvm); |
370 | void kvm_free_irq_source_id(struct kvm *kvm, int irq_source_id); | 400 | void kvm_free_irq_source_id(struct kvm *kvm, int irq_source_id); |
371 | 401 | ||
@@ -458,37 +488,6 @@ struct kvm_stats_debugfs_item { | |||
458 | extern struct kvm_stats_debugfs_item debugfs_entries[]; | 488 | extern struct kvm_stats_debugfs_item debugfs_entries[]; |
459 | extern struct dentry *kvm_debugfs_dir; | 489 | extern struct dentry *kvm_debugfs_dir; |
460 | 490 | ||
461 | #define KVMTRACE_5D(evt, vcpu, d1, d2, d3, d4, d5, name) \ | ||
462 | trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ | ||
463 | vcpu, 5, d1, d2, d3, d4, d5) | ||
464 | #define KVMTRACE_4D(evt, vcpu, d1, d2, d3, d4, name) \ | ||
465 | trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ | ||
466 | vcpu, 4, d1, d2, d3, d4, 0) | ||
467 | #define KVMTRACE_3D(evt, vcpu, d1, d2, d3, name) \ | ||
468 | trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ | ||
469 | vcpu, 3, d1, d2, d3, 0, 0) | ||
470 | #define KVMTRACE_2D(evt, vcpu, d1, d2, name) \ | ||
471 | trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ | ||
472 | vcpu, 2, d1, d2, 0, 0, 0) | ||
473 | #define KVMTRACE_1D(evt, vcpu, d1, name) \ | ||
474 | trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ | ||
475 | vcpu, 1, d1, 0, 0, 0, 0) | ||
476 | #define KVMTRACE_0D(evt, vcpu, name) \ | ||
477 | trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ | ||
478 | vcpu, 0, 0, 0, 0, 0, 0) | ||
479 | |||
480 | #ifdef CONFIG_KVM_TRACE | ||
481 | int kvm_trace_ioctl(unsigned int ioctl, unsigned long arg); | ||
482 | void kvm_trace_cleanup(void); | ||
483 | #else | ||
484 | static inline | ||
485 | int kvm_trace_ioctl(unsigned int ioctl, unsigned long arg) | ||
486 | { | ||
487 | return -EINVAL; | ||
488 | } | ||
489 | #define kvm_trace_cleanup() ((void)0) | ||
490 | #endif | ||
491 | |||
492 | #ifdef KVM_ARCH_WANT_MMU_NOTIFIER | 491 | #ifdef KVM_ARCH_WANT_MMU_NOTIFIER |
493 | static inline int mmu_notifier_retry(struct kvm_vcpu *vcpu, unsigned long mmu_seq) | 492 | static inline int mmu_notifier_retry(struct kvm_vcpu *vcpu, unsigned long mmu_seq) |
494 | { | 493 | { |
@@ -524,4 +523,33 @@ static inline void kvm_free_irq_routing(struct kvm *kvm) {} | |||
524 | 523 | ||
525 | #endif | 524 | #endif |
526 | 525 | ||
526 | #ifdef CONFIG_HAVE_KVM_EVENTFD | ||
527 | |||
528 | void kvm_eventfd_init(struct kvm *kvm); | ||
529 | int kvm_irqfd(struct kvm *kvm, int fd, int gsi, int flags); | ||
530 | void kvm_irqfd_release(struct kvm *kvm); | ||
531 | int kvm_ioeventfd(struct kvm *kvm, struct kvm_ioeventfd *args); | ||
532 | |||
533 | #else | ||
534 | |||
535 | static inline void kvm_eventfd_init(struct kvm *kvm) {} | ||
536 | static inline int kvm_irqfd(struct kvm *kvm, int fd, int gsi, int flags) | ||
537 | { | ||
538 | return -EINVAL; | ||
539 | } | ||
540 | |||
541 | static inline void kvm_irqfd_release(struct kvm *kvm) {} | ||
542 | static inline int kvm_ioeventfd(struct kvm *kvm, struct kvm_ioeventfd *args) | ||
543 | { | ||
544 | return -ENOSYS; | ||
545 | } | ||
546 | |||
547 | #endif /* CONFIG_HAVE_KVM_EVENTFD */ | ||
548 | |||
549 | #ifdef CONFIG_KVM_APIC_ARCHITECTURE | ||
550 | static inline bool kvm_vcpu_is_bsp(struct kvm_vcpu *vcpu) | ||
551 | { | ||
552 | return vcpu->kvm->bsp_vcpu_id == vcpu->vcpu_id; | ||
553 | } | ||
554 | #endif | ||
527 | #endif | 555 | #endif |
diff --git a/include/linux/kvm_para.h b/include/linux/kvm_para.h index 3ddce03766ca..d73109243fda 100644 --- a/include/linux/kvm_para.h +++ b/include/linux/kvm_para.h | |||
@@ -13,6 +13,7 @@ | |||
13 | #define KVM_ENOSYS 1000 | 13 | #define KVM_ENOSYS 1000 |
14 | #define KVM_EFAULT EFAULT | 14 | #define KVM_EFAULT EFAULT |
15 | #define KVM_E2BIG E2BIG | 15 | #define KVM_E2BIG E2BIG |
16 | #define KVM_EPERM EPERM | ||
16 | 17 | ||
17 | #define KVM_HC_VAPIC_POLL_IRQ 1 | 18 | #define KVM_HC_VAPIC_POLL_IRQ 1 |
18 | #define KVM_HC_MMU_OP 2 | 19 | #define KVM_HC_MMU_OP 2 |
diff --git a/include/linux/lguest.h b/include/linux/lguest.h index 7bc1440fc473..2fb1dcbcb5aa 100644 --- a/include/linux/lguest.h +++ b/include/linux/lguest.h | |||
@@ -1,5 +1,7 @@ | |||
1 | /* Things the lguest guest needs to know. Note: like all lguest interfaces, | 1 | /* |
2 | * this is subject to wild and random change between versions. */ | 2 | * Things the lguest guest needs to know. Note: like all lguest interfaces, |
3 | * this is subject to wild and random change between versions. | ||
4 | */ | ||
3 | #ifndef _LINUX_LGUEST_H | 5 | #ifndef _LINUX_LGUEST_H |
4 | #define _LINUX_LGUEST_H | 6 | #define _LINUX_LGUEST_H |
5 | 7 | ||
@@ -11,32 +13,41 @@ | |||
11 | #define LG_CLOCK_MIN_DELTA 100UL | 13 | #define LG_CLOCK_MIN_DELTA 100UL |
12 | #define LG_CLOCK_MAX_DELTA ULONG_MAX | 14 | #define LG_CLOCK_MAX_DELTA ULONG_MAX |
13 | 15 | ||
14 | /*G:032 The second method of communicating with the Host is to via "struct | 16 | /*G:031 |
17 | * The second method of communicating with the Host is to via "struct | ||
15 | * lguest_data". Once the Guest's initialization hypercall tells the Host where | 18 | * lguest_data". Once the Guest's initialization hypercall tells the Host where |
16 | * this is, the Guest and Host both publish information in it. :*/ | 19 | * this is, the Guest and Host both publish information in it. |
17 | struct lguest_data | 20 | :*/ |
18 | { | 21 | struct lguest_data { |
19 | /* 512 == enabled (same as eflags in normal hardware). The Guest | 22 | /* |
20 | * changes interrupts so often that a hypercall is too slow. */ | 23 | * 512 == enabled (same as eflags in normal hardware). The Guest |
24 | * changes interrupts so often that a hypercall is too slow. | ||
25 | */ | ||
21 | unsigned int irq_enabled; | 26 | unsigned int irq_enabled; |
22 | /* Fine-grained interrupt disabling by the Guest */ | 27 | /* Fine-grained interrupt disabling by the Guest */ |
23 | DECLARE_BITMAP(blocked_interrupts, LGUEST_IRQS); | 28 | DECLARE_BITMAP(blocked_interrupts, LGUEST_IRQS); |
24 | 29 | ||
25 | /* The Host writes the virtual address of the last page fault here, | 30 | /* |
31 | * The Host writes the virtual address of the last page fault here, | ||
26 | * which saves the Guest a hypercall. CR2 is the native register where | 32 | * which saves the Guest a hypercall. CR2 is the native register where |
27 | * this address would normally be found. */ | 33 | * this address would normally be found. |
34 | */ | ||
28 | unsigned long cr2; | 35 | unsigned long cr2; |
29 | 36 | ||
30 | /* Wallclock time set by the Host. */ | 37 | /* Wallclock time set by the Host. */ |
31 | struct timespec time; | 38 | struct timespec time; |
32 | 39 | ||
33 | /* Interrupt pending set by the Host. The Guest should do a hypercall | 40 | /* |
34 | * if it re-enables interrupts and sees this set (to X86_EFLAGS_IF). */ | 41 | * Interrupt pending set by the Host. The Guest should do a hypercall |
42 | * if it re-enables interrupts and sees this set (to X86_EFLAGS_IF). | ||
43 | */ | ||
35 | int irq_pending; | 44 | int irq_pending; |
36 | 45 | ||
37 | /* Async hypercall ring. Instead of directly making hypercalls, we can | 46 | /* |
47 | * Async hypercall ring. Instead of directly making hypercalls, we can | ||
38 | * place them in here for processing the next time the Host wants. | 48 | * place them in here for processing the next time the Host wants. |
39 | * This batching can be quite efficient. */ | 49 | * This batching can be quite efficient. |
50 | */ | ||
40 | 51 | ||
41 | /* 0xFF == done (set by Host), 0 == pending (set by Guest). */ | 52 | /* 0xFF == done (set by Host), 0 == pending (set by Guest). */ |
42 | u8 hcall_status[LHCALL_RING_SIZE]; | 53 | u8 hcall_status[LHCALL_RING_SIZE]; |
diff --git a/include/linux/lguest_launcher.h b/include/linux/lguest_launcher.h index bfefbdf7498a..495203ff221c 100644 --- a/include/linux/lguest_launcher.h +++ b/include/linux/lguest_launcher.h | |||
@@ -29,8 +29,10 @@ struct lguest_device_desc { | |||
29 | __u8 type; | 29 | __u8 type; |
30 | /* The number of virtqueues (first in config array) */ | 30 | /* The number of virtqueues (first in config array) */ |
31 | __u8 num_vq; | 31 | __u8 num_vq; |
32 | /* The number of bytes of feature bits. Multiply by 2: one for host | 32 | /* |
33 | * features and one for Guest acknowledgements. */ | 33 | * The number of bytes of feature bits. Multiply by 2: one for host |
34 | * features and one for Guest acknowledgements. | ||
35 | */ | ||
34 | __u8 feature_len; | 36 | __u8 feature_len; |
35 | /* The number of bytes of the config array after virtqueues. */ | 37 | /* The number of bytes of the config array after virtqueues. */ |
36 | __u8 config_len; | 38 | __u8 config_len; |
@@ -39,8 +41,10 @@ struct lguest_device_desc { | |||
39 | __u8 config[0]; | 41 | __u8 config[0]; |
40 | }; | 42 | }; |
41 | 43 | ||
42 | /*D:135 This is how we expect the device configuration field for a virtqueue | 44 | /*D:135 |
43 | * to be laid out in config space. */ | 45 | * This is how we expect the device configuration field for a virtqueue |
46 | * to be laid out in config space. | ||
47 | */ | ||
44 | struct lguest_vqconfig { | 48 | struct lguest_vqconfig { |
45 | /* The number of entries in the virtio_ring */ | 49 | /* The number of entries in the virtio_ring */ |
46 | __u16 num; | 50 | __u16 num; |
@@ -61,7 +65,9 @@ enum lguest_req | |||
61 | LHREQ_EVENTFD, /* + address, fd. */ | 65 | LHREQ_EVENTFD, /* + address, fd. */ |
62 | }; | 66 | }; |
63 | 67 | ||
64 | /* The alignment to use between consumer and producer parts of vring. | 68 | /* |
65 | * x86 pagesize for historical reasons. */ | 69 | * The alignment to use between consumer and producer parts of vring. |
70 | * x86 pagesize for historical reasons. | ||
71 | */ | ||
66 | #define LGUEST_VRING_ALIGN 4096 | 72 | #define LGUEST_VRING_ALIGN 4096 |
67 | #endif /* _LINUX_LGUEST_LAUNCHER */ | 73 | #endif /* _LINUX_LGUEST_LAUNCHER */ |
diff --git a/include/linux/libata.h b/include/linux/libata.h index 3d501db36a26..76319bf03e37 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h | |||
@@ -143,7 +143,6 @@ enum { | |||
143 | 143 | ||
144 | ATA_DFLAG_PIO = (1 << 12), /* device limited to PIO mode */ | 144 | ATA_DFLAG_PIO = (1 << 12), /* device limited to PIO mode */ |
145 | ATA_DFLAG_NCQ_OFF = (1 << 13), /* device limited to non-NCQ mode */ | 145 | ATA_DFLAG_NCQ_OFF = (1 << 13), /* device limited to non-NCQ mode */ |
146 | ATA_DFLAG_SPUNDOWN = (1 << 14), /* XXX: for spindown_compat */ | ||
147 | ATA_DFLAG_SLEEPING = (1 << 15), /* device is sleeping */ | 146 | ATA_DFLAG_SLEEPING = (1 << 15), /* device is sleeping */ |
148 | ATA_DFLAG_DUBIOUS_XFER = (1 << 16), /* data transfer not verified */ | 147 | ATA_DFLAG_DUBIOUS_XFER = (1 << 16), /* data transfer not verified */ |
149 | ATA_DFLAG_NO_UNLOAD = (1 << 17), /* device doesn't support unload */ | 148 | ATA_DFLAG_NO_UNLOAD = (1 << 17), /* device doesn't support unload */ |
@@ -190,6 +189,7 @@ enum { | |||
190 | ATA_FLAG_NO_POWEROFF_SPINDOWN = (1 << 11), /* don't spindown before poweroff */ | 189 | ATA_FLAG_NO_POWEROFF_SPINDOWN = (1 << 11), /* don't spindown before poweroff */ |
191 | ATA_FLAG_NO_HIBERNATE_SPINDOWN = (1 << 12), /* don't spindown before hibernation */ | 190 | ATA_FLAG_NO_HIBERNATE_SPINDOWN = (1 << 12), /* don't spindown before hibernation */ |
192 | ATA_FLAG_DEBUGMSG = (1 << 13), | 191 | ATA_FLAG_DEBUGMSG = (1 << 13), |
192 | ATA_FLAG_FPDMA_AA = (1 << 14), /* driver supports Auto-Activate */ | ||
193 | ATA_FLAG_IGN_SIMPLEX = (1 << 15), /* ignore SIMPLEX */ | 193 | ATA_FLAG_IGN_SIMPLEX = (1 << 15), /* ignore SIMPLEX */ |
194 | ATA_FLAG_NO_IORDY = (1 << 16), /* controller lacks iordy */ | 194 | ATA_FLAG_NO_IORDY = (1 << 16), /* controller lacks iordy */ |
195 | ATA_FLAG_ACPI_SATA = (1 << 17), /* need native SATA ACPI layout */ | 195 | ATA_FLAG_ACPI_SATA = (1 << 17), /* need native SATA ACPI layout */ |
@@ -385,6 +385,8 @@ enum { | |||
385 | not multiple of 16 bytes */ | 385 | not multiple of 16 bytes */ |
386 | ATA_HORKAGE_FIRMWARE_WARN = (1 << 12), /* firmware update warning */ | 386 | ATA_HORKAGE_FIRMWARE_WARN = (1 << 12), /* firmware update warning */ |
387 | ATA_HORKAGE_1_5_GBPS = (1 << 13), /* force 1.5 Gbps */ | 387 | ATA_HORKAGE_1_5_GBPS = (1 << 13), /* force 1.5 Gbps */ |
388 | ATA_HORKAGE_NOSETXFER = (1 << 14), /* skip SETXFER, SATA only */ | ||
389 | ATA_HORKAGE_BROKEN_FPDMA_AA = (1 << 15), /* skip AA */ | ||
388 | 390 | ||
389 | /* DMA mask for user DMA control: User visible values; DO NOT | 391 | /* DMA mask for user DMA control: User visible values; DO NOT |
390 | renumber */ | 392 | renumber */ |
@@ -588,6 +590,7 @@ struct ata_device { | |||
588 | #endif | 590 | #endif |
589 | /* n_sector is CLEAR_BEGIN, read comment above CLEAR_BEGIN */ | 591 | /* n_sector is CLEAR_BEGIN, read comment above CLEAR_BEGIN */ |
590 | u64 n_sectors; /* size of device, if ATA */ | 592 | u64 n_sectors; /* size of device, if ATA */ |
593 | u64 n_native_sectors; /* native size, if ATA */ | ||
591 | unsigned int class; /* ATA_DEV_xxx */ | 594 | unsigned int class; /* ATA_DEV_xxx */ |
592 | unsigned long unpark_deadline; | 595 | unsigned long unpark_deadline; |
593 | 596 | ||
diff --git a/include/linux/libps2.h b/include/linux/libps2.h index b94534b7e266..fcf5fbe6a50c 100644 --- a/include/linux/libps2.h +++ b/include/linux/libps2.h | |||
@@ -44,6 +44,7 @@ struct ps2dev { | |||
44 | void ps2_init(struct ps2dev *ps2dev, struct serio *serio); | 44 | void ps2_init(struct ps2dev *ps2dev, struct serio *serio); |
45 | int ps2_sendbyte(struct ps2dev *ps2dev, unsigned char byte, int timeout); | 45 | int ps2_sendbyte(struct ps2dev *ps2dev, unsigned char byte, int timeout); |
46 | void ps2_drain(struct ps2dev *ps2dev, int maxbytes, int timeout); | 46 | void ps2_drain(struct ps2dev *ps2dev, int maxbytes, int timeout); |
47 | int __ps2_command(struct ps2dev *ps2dev, unsigned char *param, int command); | ||
47 | int ps2_command(struct ps2dev *ps2dev, unsigned char *param, int command); | 48 | int ps2_command(struct ps2dev *ps2dev, unsigned char *param, int command); |
48 | int ps2_handle_ack(struct ps2dev *ps2dev, unsigned char data); | 49 | int ps2_handle_ack(struct ps2dev *ps2dev, unsigned char data); |
49 | int ps2_handle_response(struct ps2dev *ps2dev, unsigned char data); | 50 | int ps2_handle_response(struct ps2dev *ps2dev, unsigned char data); |
diff --git a/include/linux/linkage.h b/include/linux/linkage.h index fee9e59649c1..691f59171c6c 100644 --- a/include/linux/linkage.h +++ b/include/linux/linkage.h | |||
@@ -22,6 +22,15 @@ | |||
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. | ||
26 | * | ||
27 | * Note when using these that you must specify the appropriate | ||
28 | * alignment directives yourself | ||
29 | */ | ||
30 | #define __PAGE_ALIGNED_DATA .section ".data.page_aligned", "aw" | ||
31 | #define __PAGE_ALIGNED_BSS .section ".bss.page_aligned", "aw" | ||
32 | |||
33 | /* | ||
25 | * This is used by architectures to keep arguments on the stack | 34 | * This is used by architectures to keep arguments on the stack |
26 | * untouched by the compiler by keeping them live until the end. | 35 | * untouched by the compiler by keeping them live until the end. |
27 | * The argument stack may be owned by the assembly-language | 36 | * The argument stack may be owned by the assembly-language |
diff --git a/include/linux/lis3lv02d.h b/include/linux/lis3lv02d.h index ad651f4e45ac..3cc2f2c53e4c 100644 --- a/include/linux/lis3lv02d.h +++ b/include/linux/lis3lv02d.h | |||
@@ -32,8 +32,17 @@ struct lis3lv02d_platform_data { | |||
32 | #define LIS3_IRQ2_DATA_READY (4 << 3) | 32 | #define LIS3_IRQ2_DATA_READY (4 << 3) |
33 | #define LIS3_IRQ2_CLICK (7 << 3) | 33 | #define LIS3_IRQ2_CLICK (7 << 3) |
34 | #define LIS3_IRQ_OPEN_DRAIN (1 << 6) | 34 | #define LIS3_IRQ_OPEN_DRAIN (1 << 6) |
35 | #define LIS3_IRQ_ACTIVE_HIGH (1 << 7) | 35 | #define LIS3_IRQ_ACTIVE_LOW (1 << 7) |
36 | unsigned char irq_cfg; | 36 | unsigned char irq_cfg; |
37 | |||
38 | #define LIS3_WAKEUP_X_LO (1 << 0) | ||
39 | #define LIS3_WAKEUP_X_HI (1 << 1) | ||
40 | #define LIS3_WAKEUP_Y_LO (1 << 2) | ||
41 | #define LIS3_WAKEUP_Y_HI (1 << 3) | ||
42 | #define LIS3_WAKEUP_Z_LO (1 << 4) | ||
43 | #define LIS3_WAKEUP_Z_HI (1 << 5) | ||
44 | unsigned char wakeup_flags; | ||
45 | unsigned char wakeup_thresh; | ||
37 | }; | 46 | }; |
38 | 47 | ||
39 | #endif /* __LIS3LV02D_H_ */ | 48 | #endif /* __LIS3LV02D_H_ */ |
diff --git a/include/linux/lmb.h b/include/linux/lmb.h index c46c89505dac..2442e3f3d033 100644 --- a/include/linux/lmb.h +++ b/include/linux/lmb.h | |||
@@ -51,7 +51,7 @@ extern u64 __init lmb_alloc_base(u64 size, | |||
51 | extern u64 __init __lmb_alloc_base(u64 size, | 51 | extern u64 __init __lmb_alloc_base(u64 size, |
52 | u64 align, u64 max_addr); | 52 | u64 align, u64 max_addr); |
53 | extern u64 __init lmb_phys_mem_size(void); | 53 | extern u64 __init lmb_phys_mem_size(void); |
54 | extern u64 __init lmb_end_of_DRAM(void); | 54 | extern u64 lmb_end_of_DRAM(void); |
55 | extern void __init lmb_enforce_memory_limit(u64 memory_limit); | 55 | extern void __init lmb_enforce_memory_limit(u64 memory_limit); |
56 | extern int __init lmb_is_reserved(u64 addr); | 56 | extern int __init lmb_is_reserved(u64 addr); |
57 | extern int lmb_find(struct lmb_property *res); | 57 | extern int lmb_find(struct lmb_property *res); |
diff --git a/include/linux/lockd/lockd.h b/include/linux/lockd/lockd.h index c325b187966b..a34dea46b629 100644 --- a/include/linux/lockd/lockd.h +++ b/include/linux/lockd/lockd.h | |||
@@ -338,49 +338,6 @@ static inline int nlm_privileged_requester(const struct svc_rqst *rqstp) | |||
338 | } | 338 | } |
339 | } | 339 | } |
340 | 340 | ||
341 | static inline int __nlm_cmp_addr4(const struct sockaddr *sap1, | ||
342 | const struct sockaddr *sap2) | ||
343 | { | ||
344 | const struct sockaddr_in *sin1 = (const struct sockaddr_in *)sap1; | ||
345 | const struct sockaddr_in *sin2 = (const struct sockaddr_in *)sap2; | ||
346 | return sin1->sin_addr.s_addr == sin2->sin_addr.s_addr; | ||
347 | } | ||
348 | |||
349 | #if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) | ||
350 | static inline int __nlm_cmp_addr6(const struct sockaddr *sap1, | ||
351 | const struct sockaddr *sap2) | ||
352 | { | ||
353 | const struct sockaddr_in6 *sin1 = (const struct sockaddr_in6 *)sap1; | ||
354 | const struct sockaddr_in6 *sin2 = (const struct sockaddr_in6 *)sap2; | ||
355 | return ipv6_addr_equal(&sin1->sin6_addr, &sin2->sin6_addr); | ||
356 | } | ||
357 | #else /* !(CONFIG_IPV6 || CONFIG_IPV6_MODULE) */ | ||
358 | static inline int __nlm_cmp_addr6(const struct sockaddr *sap1, | ||
359 | const struct sockaddr *sap2) | ||
360 | { | ||
361 | return 0; | ||
362 | } | ||
363 | #endif /* !(CONFIG_IPV6 || CONFIG_IPV6_MODULE) */ | ||
364 | |||
365 | /* | ||
366 | * Compare two host addresses | ||
367 | * | ||
368 | * Return TRUE if the addresses are the same; otherwise FALSE. | ||
369 | */ | ||
370 | static inline int nlm_cmp_addr(const struct sockaddr *sap1, | ||
371 | const struct sockaddr *sap2) | ||
372 | { | ||
373 | if (sap1->sa_family == sap2->sa_family) { | ||
374 | switch (sap1->sa_family) { | ||
375 | case AF_INET: | ||
376 | return __nlm_cmp_addr4(sap1, sap2); | ||
377 | case AF_INET6: | ||
378 | return __nlm_cmp_addr6(sap1, sap2); | ||
379 | } | ||
380 | } | ||
381 | return 0; | ||
382 | } | ||
383 | |||
384 | /* | 341 | /* |
385 | * Compare two NLM locks. | 342 | * Compare two NLM locks. |
386 | * When the second lock is of type F_UNLCK, this acts like a wildcard. | 343 | * When the second lock is of type F_UNLCK, this acts like a wildcard. |
@@ -395,7 +352,7 @@ static inline int nlm_compare_locks(const struct file_lock *fl1, | |||
395 | &&(fl1->fl_type == fl2->fl_type || fl2->fl_type == F_UNLCK); | 352 | &&(fl1->fl_type == fl2->fl_type || fl2->fl_type == F_UNLCK); |
396 | } | 353 | } |
397 | 354 | ||
398 | extern struct lock_manager_operations nlmsvc_lock_operations; | 355 | extern const struct lock_manager_operations nlmsvc_lock_operations; |
399 | 356 | ||
400 | #endif /* __KERNEL__ */ | 357 | #endif /* __KERNEL__ */ |
401 | 358 | ||
diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h index b25d1b53df0d..9ccf0e286b2a 100644 --- a/include/linux/lockdep.h +++ b/include/linux/lockdep.h | |||
@@ -149,6 +149,12 @@ struct lock_list { | |||
149 | struct lock_class *class; | 149 | struct lock_class *class; |
150 | struct stack_trace trace; | 150 | struct stack_trace trace; |
151 | int distance; | 151 | int distance; |
152 | |||
153 | /* | ||
154 | * The parent field is used to implement breadth-first search, and the | ||
155 | * bit 0 is reused to indicate if the lock has been accessed in BFS. | ||
156 | */ | ||
157 | struct lock_list *parent; | ||
152 | }; | 158 | }; |
153 | 159 | ||
154 | /* | 160 | /* |
@@ -208,10 +214,12 @@ struct held_lock { | |||
208 | * interrupt context: | 214 | * interrupt context: |
209 | */ | 215 | */ |
210 | unsigned int irq_context:2; /* bit 0 - soft, bit 1 - hard */ | 216 | unsigned int irq_context:2; /* bit 0 - soft, bit 1 - hard */ |
211 | unsigned int trylock:1; | 217 | unsigned int trylock:1; /* 16 bits */ |
218 | |||
212 | unsigned int read:2; /* see lock_acquire() comment */ | 219 | unsigned int read:2; /* see lock_acquire() comment */ |
213 | unsigned int check:2; /* see lock_acquire() comment */ | 220 | unsigned int check:2; /* see lock_acquire() comment */ |
214 | unsigned int hardirqs_off:1; | 221 | unsigned int hardirqs_off:1; |
222 | unsigned int references:11; /* 32 bits */ | ||
215 | }; | 223 | }; |
216 | 224 | ||
217 | /* | 225 | /* |
@@ -291,6 +299,10 @@ extern void lock_acquire(struct lockdep_map *lock, unsigned int subclass, | |||
291 | extern void lock_release(struct lockdep_map *lock, int nested, | 299 | extern void lock_release(struct lockdep_map *lock, int nested, |
292 | unsigned long ip); | 300 | unsigned long ip); |
293 | 301 | ||
302 | #define lockdep_is_held(lock) lock_is_held(&(lock)->dep_map) | ||
303 | |||
304 | extern int lock_is_held(struct lockdep_map *lock); | ||
305 | |||
294 | extern void lock_set_class(struct lockdep_map *lock, const char *name, | 306 | extern void lock_set_class(struct lockdep_map *lock, const char *name, |
295 | struct lock_class_key *key, unsigned int subclass, | 307 | struct lock_class_key *key, unsigned int subclass, |
296 | unsigned long ip); | 308 | unsigned long ip); |
@@ -309,6 +321,8 @@ extern void lockdep_trace_alloc(gfp_t mask); | |||
309 | 321 | ||
310 | #define lockdep_depth(tsk) (debug_locks ? (tsk)->lockdep_depth : 0) | 322 | #define lockdep_depth(tsk) (debug_locks ? (tsk)->lockdep_depth : 0) |
311 | 323 | ||
324 | #define lockdep_assert_held(l) WARN_ON(debug_locks && !lockdep_is_held(l)) | ||
325 | |||
312 | #else /* !LOCKDEP */ | 326 | #else /* !LOCKDEP */ |
313 | 327 | ||
314 | static inline void lockdep_off(void) | 328 | static inline void lockdep_off(void) |
@@ -353,6 +367,8 @@ struct lock_class_key { }; | |||
353 | 367 | ||
354 | #define lockdep_depth(tsk) (0) | 368 | #define lockdep_depth(tsk) (0) |
355 | 369 | ||
370 | #define lockdep_assert_held(l) do { } while (0) | ||
371 | |||
356 | #endif /* !LOCKDEP */ | 372 | #endif /* !LOCKDEP */ |
357 | 373 | ||
358 | #ifdef CONFIG_LOCK_STAT | 374 | #ifdef CONFIG_LOCK_STAT |
diff --git a/include/linux/lsm_audit.h b/include/linux/lsm_audit.h index e461b2c3d711..190c37854870 100644 --- a/include/linux/lsm_audit.h +++ b/include/linux/lsm_audit.h | |||
@@ -33,6 +33,7 @@ struct common_audit_data { | |||
33 | #define LSM_AUDIT_DATA_IPC 4 | 33 | #define LSM_AUDIT_DATA_IPC 4 |
34 | #define LSM_AUDIT_DATA_TASK 5 | 34 | #define LSM_AUDIT_DATA_TASK 5 |
35 | #define LSM_AUDIT_DATA_KEY 6 | 35 | #define LSM_AUDIT_DATA_KEY 6 |
36 | #define LSM_AUDIT_NO_AUDIT 7 | ||
36 | struct task_struct *tsk; | 37 | struct task_struct *tsk; |
37 | union { | 38 | union { |
38 | struct { | 39 | struct { |
@@ -66,16 +67,19 @@ struct common_audit_data { | |||
66 | } key_struct; | 67 | } key_struct; |
67 | #endif | 68 | #endif |
68 | } u; | 69 | } u; |
69 | const char *function; | ||
70 | /* this union contains LSM specific data */ | 70 | /* this union contains LSM specific data */ |
71 | union { | 71 | union { |
72 | #ifdef CONFIG_SECURITY_SMACK | ||
72 | /* SMACK data */ | 73 | /* SMACK data */ |
73 | struct smack_audit_data { | 74 | struct smack_audit_data { |
75 | const char *function; | ||
74 | char *subject; | 76 | char *subject; |
75 | char *object; | 77 | char *object; |
76 | char *request; | 78 | char *request; |
77 | int result; | 79 | int result; |
78 | } smack_audit_data; | 80 | } smack_audit_data; |
81 | #endif | ||
82 | #ifdef CONFIG_SECURITY_SELINUX | ||
79 | /* SELinux data */ | 83 | /* SELinux data */ |
80 | struct { | 84 | struct { |
81 | u32 ssid; | 85 | u32 ssid; |
@@ -83,10 +87,12 @@ struct common_audit_data { | |||
83 | u16 tclass; | 87 | u16 tclass; |
84 | u32 requested; | 88 | u32 requested; |
85 | u32 audited; | 89 | u32 audited; |
90 | u32 denied; | ||
86 | struct av_decision *avd; | 91 | struct av_decision *avd; |
87 | int result; | 92 | int result; |
88 | } selinux_audit_data; | 93 | } selinux_audit_data; |
89 | } lsm_priv; | 94 | #endif |
95 | }; | ||
90 | /* these callback will be implemented by a specific LSM */ | 96 | /* these callback will be implemented by a specific LSM */ |
91 | void (*lsm_pre_audit)(struct audit_buffer *, void *); | 97 | void (*lsm_pre_audit)(struct audit_buffer *, void *); |
92 | void (*lsm_post_audit)(struct audit_buffer *, void *); | 98 | void (*lsm_post_audit)(struct audit_buffer *, void *); |
@@ -104,7 +110,7 @@ int ipv6_skb_to_auditdata(struct sk_buff *skb, | |||
104 | /* Initialize an LSM audit data structure. */ | 110 | /* Initialize an LSM audit data structure. */ |
105 | #define COMMON_AUDIT_DATA_INIT(_d, _t) \ | 111 | #define COMMON_AUDIT_DATA_INIT(_d, _t) \ |
106 | { memset((_d), 0, sizeof(struct common_audit_data)); \ | 112 | { memset((_d), 0, sizeof(struct common_audit_data)); \ |
107 | (_d)->type = LSM_AUDIT_DATA_##_t; (_d)->function = __func__; } | 113 | (_d)->type = LSM_AUDIT_DATA_##_t; } |
108 | 114 | ||
109 | void common_lsm_audit(struct common_audit_data *a); | 115 | void common_lsm_audit(struct common_audit_data *a); |
110 | 116 | ||
diff --git a/include/linux/mISDNhw.h b/include/linux/mISDNhw.h index 7f9831da847f..4af841408fb5 100644 --- a/include/linux/mISDNhw.h +++ b/include/linux/mISDNhw.h | |||
@@ -168,6 +168,7 @@ struct bchannel { | |||
168 | extern int mISDN_initdchannel(struct dchannel *, int, void *); | 168 | extern int mISDN_initdchannel(struct dchannel *, int, void *); |
169 | extern int mISDN_initbchannel(struct bchannel *, int); | 169 | extern int mISDN_initbchannel(struct bchannel *, int); |
170 | extern int mISDN_freedchannel(struct dchannel *); | 170 | extern int mISDN_freedchannel(struct dchannel *); |
171 | extern void mISDN_clear_bchannel(struct bchannel *); | ||
171 | extern int mISDN_freebchannel(struct bchannel *); | 172 | extern int mISDN_freebchannel(struct bchannel *); |
172 | extern void queue_ch_frame(struct mISDNchannel *, u_int, | 173 | extern void queue_ch_frame(struct mISDNchannel *, u_int, |
173 | int, struct sk_buff *); | 174 | int, struct sk_buff *); |
diff --git a/include/linux/mISDNif.h b/include/linux/mISDNif.h index 45100b39a7cf..78c3bed1c3f5 100644 --- a/include/linux/mISDNif.h +++ b/include/linux/mISDNif.h | |||
@@ -37,7 +37,7 @@ | |||
37 | */ | 37 | */ |
38 | #define MISDN_MAJOR_VERSION 1 | 38 | #define MISDN_MAJOR_VERSION 1 |
39 | #define MISDN_MINOR_VERSION 1 | 39 | #define MISDN_MINOR_VERSION 1 |
40 | #define MISDN_RELEASE 20 | 40 | #define MISDN_RELEASE 21 |
41 | 41 | ||
42 | /* primitives for information exchange | 42 | /* primitives for information exchange |
43 | * generell format | 43 | * generell format |
@@ -104,7 +104,7 @@ | |||
104 | #define DL_UNITDATA_IND 0x3108 | 104 | #define DL_UNITDATA_IND 0x3108 |
105 | #define DL_INFORMATION_IND 0x0008 | 105 | #define DL_INFORMATION_IND 0x0008 |
106 | 106 | ||
107 | /* intern layer 2 managment */ | 107 | /* intern layer 2 management */ |
108 | #define MDL_ASSIGN_REQ 0x1804 | 108 | #define MDL_ASSIGN_REQ 0x1804 |
109 | #define MDL_ASSIGN_IND 0x1904 | 109 | #define MDL_ASSIGN_IND 0x1904 |
110 | #define MDL_REMOVE_REQ 0x1A04 | 110 | #define MDL_REMOVE_REQ 0x1A04 |
@@ -153,6 +153,18 @@ | |||
153 | #define HFC_VOL_CHANGE_RX 0x2602 | 153 | #define HFC_VOL_CHANGE_RX 0x2602 |
154 | #define HFC_SPL_LOOP_ON 0x2603 | 154 | #define HFC_SPL_LOOP_ON 0x2603 |
155 | #define HFC_SPL_LOOP_OFF 0x2604 | 155 | #define HFC_SPL_LOOP_OFF 0x2604 |
156 | /* for T30 FAX and analog modem */ | ||
157 | #define HW_MOD_FRM 0x4000 | ||
158 | #define HW_MOD_FRH 0x4001 | ||
159 | #define HW_MOD_FTM 0x4002 | ||
160 | #define HW_MOD_FTH 0x4003 | ||
161 | #define HW_MOD_FTS 0x4004 | ||
162 | #define HW_MOD_CONNECT 0x4010 | ||
163 | #define HW_MOD_OK 0x4011 | ||
164 | #define HW_MOD_NOCARR 0x4012 | ||
165 | #define HW_MOD_FCERROR 0x4013 | ||
166 | #define HW_MOD_READY 0x4014 | ||
167 | #define HW_MOD_LASTDATA 0x4015 | ||
156 | 168 | ||
157 | /* DSP_TONE_PATT_ON parameter */ | 169 | /* DSP_TONE_PATT_ON parameter */ |
158 | #define TONE_OFF 0x0000 | 170 | #define TONE_OFF 0x0000 |
@@ -224,6 +236,8 @@ | |||
224 | #define ISDN_P_B_L2DTMF 0x24 | 236 | #define ISDN_P_B_L2DTMF 0x24 |
225 | #define ISDN_P_B_L2DSP 0x25 | 237 | #define ISDN_P_B_L2DSP 0x25 |
226 | #define ISDN_P_B_L2DSPHDLC 0x26 | 238 | #define ISDN_P_B_L2DSPHDLC 0x26 |
239 | #define ISDN_P_B_T30_FAX 0x27 | ||
240 | #define ISDN_P_B_MODEM_ASYNC 0x28 | ||
227 | 241 | ||
228 | #define OPTION_L2_PMX 1 | 242 | #define OPTION_L2_PMX 1 |
229 | #define OPTION_L2_PTP 2 | 243 | #define OPTION_L2_PTP 2 |
diff --git a/include/linux/marker.h b/include/linux/marker.h deleted file mode 100644 index b85e74ca782f..000000000000 --- a/include/linux/marker.h +++ /dev/null | |||
@@ -1,221 +0,0 @@ | |||
1 | #ifndef _LINUX_MARKER_H | ||
2 | #define _LINUX_MARKER_H | ||
3 | |||
4 | /* | ||
5 | * Code markup for dynamic and static tracing. | ||
6 | * | ||
7 | * See Documentation/marker.txt. | ||
8 | * | ||
9 | * (C) Copyright 2006 Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca> | ||
10 | * | ||
11 | * This file is released under the GPLv2. | ||
12 | * See the file COPYING for more details. | ||
13 | */ | ||
14 | |||
15 | #include <stdarg.h> | ||
16 | #include <linux/types.h> | ||
17 | |||
18 | struct module; | ||
19 | struct marker; | ||
20 | |||
21 | /** | ||
22 | * marker_probe_func - Type of a marker probe function | ||
23 | * @probe_private: probe private data | ||
24 | * @call_private: call site private data | ||
25 | * @fmt: format string | ||
26 | * @args: variable argument list pointer. Use a pointer to overcome C's | ||
27 | * inability to pass this around as a pointer in a portable manner in | ||
28 | * the callee otherwise. | ||
29 | * | ||
30 | * Type of marker probe functions. They receive the mdata and need to parse the | ||
31 | * format string to recover the variable argument list. | ||
32 | */ | ||
33 | typedef void marker_probe_func(void *probe_private, void *call_private, | ||
34 | const char *fmt, va_list *args); | ||
35 | |||
36 | struct marker_probe_closure { | ||
37 | marker_probe_func *func; /* Callback */ | ||
38 | void *probe_private; /* Private probe data */ | ||
39 | }; | ||
40 | |||
41 | struct marker { | ||
42 | const char *name; /* Marker name */ | ||
43 | const char *format; /* Marker format string, describing the | ||
44 | * variable argument list. | ||
45 | */ | ||
46 | char state; /* Marker state. */ | ||
47 | char ptype; /* probe type : 0 : single, 1 : multi */ | ||
48 | /* Probe wrapper */ | ||
49 | void (*call)(const struct marker *mdata, void *call_private, ...); | ||
50 | struct marker_probe_closure single; | ||
51 | struct marker_probe_closure *multi; | ||
52 | const char *tp_name; /* Optional tracepoint name */ | ||
53 | void *tp_cb; /* Optional tracepoint callback */ | ||
54 | } __attribute__((aligned(8))); | ||
55 | |||
56 | #ifdef CONFIG_MARKERS | ||
57 | |||
58 | #define _DEFINE_MARKER(name, tp_name_str, tp_cb, format) \ | ||
59 | static const char __mstrtab_##name[] \ | ||
60 | __attribute__((section("__markers_strings"))) \ | ||
61 | = #name "\0" format; \ | ||
62 | static struct marker __mark_##name \ | ||
63 | __attribute__((section("__markers"), aligned(8))) = \ | ||
64 | { __mstrtab_##name, &__mstrtab_##name[sizeof(#name)], \ | ||
65 | 0, 0, marker_probe_cb, { __mark_empty_function, NULL},\ | ||
66 | NULL, tp_name_str, tp_cb } | ||
67 | |||
68 | #define DEFINE_MARKER(name, format) \ | ||
69 | _DEFINE_MARKER(name, NULL, NULL, format) | ||
70 | |||
71 | #define DEFINE_MARKER_TP(name, tp_name, tp_cb, format) \ | ||
72 | _DEFINE_MARKER(name, #tp_name, tp_cb, format) | ||
73 | |||
74 | /* | ||
75 | * Note : the empty asm volatile with read constraint is used here instead of a | ||
76 | * "used" attribute to fix a gcc 4.1.x bug. | ||
77 | * Make sure the alignment of the structure in the __markers section will | ||
78 | * not add unwanted padding between the beginning of the section and the | ||
79 | * structure. Force alignment to the same alignment as the section start. | ||
80 | * | ||
81 | * The "generic" argument controls which marker enabling mechanism must be used. | ||
82 | * If generic is true, a variable read is used. | ||
83 | * If generic is false, immediate values are used. | ||
84 | */ | ||
85 | #define __trace_mark(generic, name, call_private, format, args...) \ | ||
86 | do { \ | ||
87 | DEFINE_MARKER(name, format); \ | ||
88 | __mark_check_format(format, ## args); \ | ||
89 | if (unlikely(__mark_##name.state)) { \ | ||
90 | (*__mark_##name.call) \ | ||
91 | (&__mark_##name, call_private, ## args);\ | ||
92 | } \ | ||
93 | } while (0) | ||
94 | |||
95 | #define __trace_mark_tp(name, call_private, tp_name, tp_cb, format, args...) \ | ||
96 | do { \ | ||
97 | void __check_tp_type(void) \ | ||
98 | { \ | ||
99 | register_trace_##tp_name(tp_cb); \ | ||
100 | } \ | ||
101 | DEFINE_MARKER_TP(name, tp_name, tp_cb, format); \ | ||
102 | __mark_check_format(format, ## args); \ | ||
103 | (*__mark_##name.call)(&__mark_##name, call_private, \ | ||
104 | ## args); \ | ||
105 | } while (0) | ||
106 | |||
107 | extern void marker_update_probe_range(struct marker *begin, | ||
108 | struct marker *end); | ||
109 | |||
110 | #define GET_MARKER(name) (__mark_##name) | ||
111 | |||
112 | #else /* !CONFIG_MARKERS */ | ||
113 | #define DEFINE_MARKER(name, tp_name, tp_cb, format) | ||
114 | #define __trace_mark(generic, name, call_private, format, args...) \ | ||
115 | __mark_check_format(format, ## args) | ||
116 | #define __trace_mark_tp(name, call_private, tp_name, tp_cb, format, args...) \ | ||
117 | do { \ | ||
118 | void __check_tp_type(void) \ | ||
119 | { \ | ||
120 | register_trace_##tp_name(tp_cb); \ | ||
121 | } \ | ||
122 | __mark_check_format(format, ## args); \ | ||
123 | } while (0) | ||
124 | static inline void marker_update_probe_range(struct marker *begin, | ||
125 | struct marker *end) | ||
126 | { } | ||
127 | #define GET_MARKER(name) | ||
128 | #endif /* CONFIG_MARKERS */ | ||
129 | |||
130 | /** | ||
131 | * trace_mark - Marker using code patching | ||
132 | * @name: marker name, not quoted. | ||
133 | * @format: format string | ||
134 | * @args...: variable argument list | ||
135 | * | ||
136 | * Places a marker using optimized code patching technique (imv_read()) | ||
137 | * to be enabled when immediate values are present. | ||
138 | */ | ||
139 | #define trace_mark(name, format, args...) \ | ||
140 | __trace_mark(0, name, NULL, format, ## args) | ||
141 | |||
142 | /** | ||
143 | * _trace_mark - Marker using variable read | ||
144 | * @name: marker name, not quoted. | ||
145 | * @format: format string | ||
146 | * @args...: variable argument list | ||
147 | * | ||
148 | * Places a marker using a standard memory read (_imv_read()) to be | ||
149 | * enabled. Should be used for markers in code paths where instruction | ||
150 | * modification based enabling is not welcome. (__init and __exit functions, | ||
151 | * lockdep, some traps, printk). | ||
152 | */ | ||
153 | #define _trace_mark(name, format, args...) \ | ||
154 | __trace_mark(1, name, NULL, format, ## args) | ||
155 | |||
156 | /** | ||
157 | * trace_mark_tp - Marker in a tracepoint callback | ||
158 | * @name: marker name, not quoted. | ||
159 | * @tp_name: tracepoint name, not quoted. | ||
160 | * @tp_cb: tracepoint callback. Should have an associated global symbol so it | ||
161 | * is not optimized away by the compiler (should not be static). | ||
162 | * @format: format string | ||
163 | * @args...: variable argument list | ||
164 | * | ||
165 | * Places a marker in a tracepoint callback. | ||
166 | */ | ||
167 | #define trace_mark_tp(name, tp_name, tp_cb, format, args...) \ | ||
168 | __trace_mark_tp(name, NULL, tp_name, tp_cb, format, ## args) | ||
169 | |||
170 | /** | ||
171 | * MARK_NOARGS - Format string for a marker with no argument. | ||
172 | */ | ||
173 | #define MARK_NOARGS " " | ||
174 | |||
175 | /* To be used for string format validity checking with gcc */ | ||
176 | static inline void __printf(1, 2) ___mark_check_format(const char *fmt, ...) | ||
177 | { | ||
178 | } | ||
179 | |||
180 | #define __mark_check_format(format, args...) \ | ||
181 | do { \ | ||
182 | if (0) \ | ||
183 | ___mark_check_format(format, ## args); \ | ||
184 | } while (0) | ||
185 | |||
186 | extern marker_probe_func __mark_empty_function; | ||
187 | |||
188 | extern void marker_probe_cb(const struct marker *mdata, | ||
189 | void *call_private, ...); | ||
190 | |||
191 | /* | ||
192 | * Connect a probe to a marker. | ||
193 | * private data pointer must be a valid allocated memory address, or NULL. | ||
194 | */ | ||
195 | extern int marker_probe_register(const char *name, const char *format, | ||
196 | marker_probe_func *probe, void *probe_private); | ||
197 | |||
198 | /* | ||
199 | * Returns the private data given to marker_probe_register. | ||
200 | */ | ||
201 | extern int marker_probe_unregister(const char *name, | ||
202 | marker_probe_func *probe, void *probe_private); | ||
203 | /* | ||
204 | * Unregister a marker by providing the registered private data. | ||
205 | */ | ||
206 | extern int marker_probe_unregister_private_data(marker_probe_func *probe, | ||
207 | void *probe_private); | ||
208 | |||
209 | extern void *marker_get_private_data(const char *name, marker_probe_func *probe, | ||
210 | int num); | ||
211 | |||
212 | /* | ||
213 | * marker_synchronize_unregister must be called between the last marker probe | ||
214 | * unregistration and the first one of | ||
215 | * - the end of module exit function | ||
216 | * - the free of any resource used by the probes | ||
217 | * to ensure the code and data are valid for any possibly running probes. | ||
218 | */ | ||
219 | #define marker_synchronize_unregister() synchronize_sched() | ||
220 | |||
221 | #endif | ||
diff --git a/include/linux/mdio.h b/include/linux/mdio.h index cfdf1df2875e..c779b49a1fda 100644 --- a/include/linux/mdio.h +++ b/include/linux/mdio.h | |||
@@ -304,7 +304,7 @@ static inline __u16 mdio_phy_id_devad(int phy_id) | |||
304 | */ | 304 | */ |
305 | struct mdio_if_info { | 305 | struct mdio_if_info { |
306 | int prtad; | 306 | int prtad; |
307 | u32 __bitwise mmds; | 307 | u32 mmds; |
308 | unsigned mode_support; | 308 | unsigned mode_support; |
309 | 309 | ||
310 | struct net_device *dev; | 310 | struct net_device *dev; |
diff --git a/include/linux/mempool.h b/include/linux/mempool.h index 9be484d11283..7c08052e3321 100644 --- a/include/linux/mempool.h +++ b/include/linux/mempool.h | |||
@@ -47,22 +47,16 @@ mempool_create_slab_pool(int min_nr, struct kmem_cache *kc) | |||
47 | } | 47 | } |
48 | 48 | ||
49 | /* | 49 | /* |
50 | * 2 mempool_alloc_t's and a mempool_free_t to kmalloc/kzalloc and kfree | 50 | * a mempool_alloc_t and a mempool_free_t to kmalloc and kfree the |
51 | * the amount of memory specified by pool_data | 51 | * amount of memory specified by pool_data |
52 | */ | 52 | */ |
53 | void *mempool_kmalloc(gfp_t gfp_mask, void *pool_data); | 53 | void *mempool_kmalloc(gfp_t gfp_mask, void *pool_data); |
54 | void *mempool_kzalloc(gfp_t gfp_mask, void *pool_data); | ||
55 | void mempool_kfree(void *element, void *pool_data); | 54 | void mempool_kfree(void *element, void *pool_data); |
56 | static inline mempool_t *mempool_create_kmalloc_pool(int min_nr, size_t size) | 55 | static inline mempool_t *mempool_create_kmalloc_pool(int min_nr, size_t size) |
57 | { | 56 | { |
58 | return mempool_create(min_nr, mempool_kmalloc, mempool_kfree, | 57 | return mempool_create(min_nr, mempool_kmalloc, mempool_kfree, |
59 | (void *) size); | 58 | (void *) size); |
60 | } | 59 | } |
61 | static inline mempool_t *mempool_create_kzalloc_pool(int min_nr, size_t size) | ||
62 | { | ||
63 | return mempool_create(min_nr, mempool_kzalloc, mempool_kfree, | ||
64 | (void *) size); | ||
65 | } | ||
66 | 60 | ||
67 | /* | 61 | /* |
68 | * A mempool_alloc_t and mempool_free_t for a simple page allocator that | 62 | * A mempool_alloc_t and mempool_free_t for a simple page allocator that |
diff --git a/include/linux/mfd/ab3100.h b/include/linux/mfd/ab3100.h index 7a3f316e3848..e9aa4c9d749d 100644 --- a/include/linux/mfd/ab3100.h +++ b/include/linux/mfd/ab3100.h | |||
@@ -6,6 +6,8 @@ | |||
6 | */ | 6 | */ |
7 | 7 | ||
8 | #include <linux/device.h> | 8 | #include <linux/device.h> |
9 | #include <linux/workqueue.h> | ||
10 | #include <linux/regulator/machine.h> | ||
9 | 11 | ||
10 | #ifndef MFD_AB3100_H | 12 | #ifndef MFD_AB3100_H |
11 | #define MFD_AB3100_H | 13 | #define MFD_AB3100_H |
@@ -56,6 +58,14 @@ | |||
56 | #define AB3100_STR_BATT_REMOVAL (0x40) | 58 | #define AB3100_STR_BATT_REMOVAL (0x40) |
57 | #define AB3100_STR_VBUS (0x80) | 59 | #define AB3100_STR_VBUS (0x80) |
58 | 60 | ||
61 | /* | ||
62 | * AB3100 contains 8 regulators, one external regulator controller | ||
63 | * and a buck converter, further the LDO E and buck converter can | ||
64 | * have separate settings if they are in sleep mode, this is | ||
65 | * modeled as a separate regulator. | ||
66 | */ | ||
67 | #define AB3100_NUM_REGULATORS 10 | ||
68 | |||
59 | /** | 69 | /** |
60 | * struct ab3100 | 70 | * struct ab3100 |
61 | * @access_mutex: lock out concurrent accesses to the AB3100 registers | 71 | * @access_mutex: lock out concurrent accesses to the AB3100 registers |
@@ -86,11 +96,30 @@ struct ab3100 { | |||
86 | bool startup_events_read; | 96 | bool startup_events_read; |
87 | }; | 97 | }; |
88 | 98 | ||
89 | int ab3100_set_register(struct ab3100 *ab3100, u8 reg, u8 regval); | 99 | /** |
90 | int ab3100_get_register(struct ab3100 *ab3100, u8 reg, u8 *regval); | 100 | * struct ab3100_platform_data |
91 | int ab3100_get_register_page(struct ab3100 *ab3100, | 101 | * Data supplied to initialize board connections to the AB3100 |
102 | * @reg_constraints: regulator constraints for target board | ||
103 | * the order of these constraints are: LDO A, C, D, E, | ||
104 | * F, G, H, K, EXT and BUCK. | ||
105 | * @reg_initvals: initial values for the regulator registers | ||
106 | * plus two sleep settings for LDO E and the BUCK converter. | ||
107 | * exactly AB3100_NUM_REGULATORS+2 values must be sent in. | ||
108 | * Order: LDO A, C, E, E sleep, F, G, H, K, EXT, BUCK, | ||
109 | * BUCK sleep, LDO D. (LDO D need to be initialized last.) | ||
110 | * @external_voltage: voltage level of the external regulator. | ||
111 | */ | ||
112 | struct ab3100_platform_data { | ||
113 | struct regulator_init_data reg_constraints[AB3100_NUM_REGULATORS]; | ||
114 | u8 reg_initvals[AB3100_NUM_REGULATORS+2]; | ||
115 | int external_voltage; | ||
116 | }; | ||
117 | |||
118 | int ab3100_set_register_interruptible(struct ab3100 *ab3100, u8 reg, u8 regval); | ||
119 | int ab3100_get_register_interruptible(struct ab3100 *ab3100, u8 reg, u8 *regval); | ||
120 | int ab3100_get_register_page_interruptible(struct ab3100 *ab3100, | ||
92 | u8 first_reg, u8 *regvals, u8 numregs); | 121 | u8 first_reg, u8 *regvals, u8 numregs); |
93 | int ab3100_mask_and_set_register(struct ab3100 *ab3100, | 122 | int ab3100_mask_and_set_register_interruptible(struct ab3100 *ab3100, |
94 | u8 reg, u8 andmask, u8 ormask); | 123 | u8 reg, u8 andmask, u8 ormask); |
95 | u8 ab3100_get_chip_type(struct ab3100 *ab3100); | 124 | u8 ab3100_get_chip_type(struct ab3100 *ab3100); |
96 | int ab3100_event_register(struct ab3100 *ab3100, | 125 | int ab3100_event_register(struct ab3100 *ab3100, |
diff --git a/include/linux/mfd/core.h b/include/linux/mfd/core.h index 49ef857cdb2d..11d740b8831d 100644 --- a/include/linux/mfd/core.h +++ b/include/linux/mfd/core.h | |||
@@ -23,6 +23,7 @@ | |||
23 | */ | 23 | */ |
24 | struct mfd_cell { | 24 | struct mfd_cell { |
25 | const char *name; | 25 | const char *name; |
26 | int id; | ||
26 | 27 | ||
27 | int (*enable)(struct platform_device *dev); | 28 | int (*enable)(struct platform_device *dev); |
28 | int (*disable)(struct platform_device *dev); | 29 | int (*disable)(struct platform_device *dev); |
diff --git a/include/linux/mfd/ezx-pcap.h b/include/linux/mfd/ezx-pcap.h index c12c3c0932bf..e5124ceea769 100644 --- a/include/linux/mfd/ezx-pcap.h +++ b/include/linux/mfd/ezx-pcap.h | |||
@@ -25,9 +25,12 @@ struct pcap_chip; | |||
25 | 25 | ||
26 | int ezx_pcap_write(struct pcap_chip *, u8, u32); | 26 | int ezx_pcap_write(struct pcap_chip *, u8, u32); |
27 | int ezx_pcap_read(struct pcap_chip *, u8, u32 *); | 27 | int ezx_pcap_read(struct pcap_chip *, u8, u32 *); |
28 | int ezx_pcap_set_bits(struct pcap_chip *, u8, u32, u32); | ||
28 | int pcap_to_irq(struct pcap_chip *, int); | 29 | int pcap_to_irq(struct pcap_chip *, int); |
30 | int irq_to_pcap(struct pcap_chip *, int); | ||
29 | int pcap_adc_async(struct pcap_chip *, u8, u32, u8[], void *, void *); | 31 | int pcap_adc_async(struct pcap_chip *, u8, u32, u8[], void *, void *); |
30 | int pcap_adc_sync(struct pcap_chip *, u8, u32, u8[], u16[]); | 32 | int pcap_adc_sync(struct pcap_chip *, u8, u32, u8[], u16[]); |
33 | void pcap_set_ts_bits(struct pcap_chip *, u32); | ||
31 | 34 | ||
32 | #define PCAP_SECOND_PORT 1 | 35 | #define PCAP_SECOND_PORT 1 |
33 | #define PCAP_CS_AH 2 | 36 | #define PCAP_CS_AH 2 |
@@ -224,7 +227,6 @@ int pcap_adc_sync(struct pcap_chip *, u8, u32, u8[], u16[]); | |||
224 | #define PCAP_LED1 1 | 227 | #define PCAP_LED1 1 |
225 | #define PCAP_BL0 2 | 228 | #define PCAP_BL0 2 |
226 | #define PCAP_BL1 3 | 229 | #define PCAP_BL1 3 |
227 | #define PCAP_VIB 4 | ||
228 | #define PCAP_LED_3MA 0 | 230 | #define PCAP_LED_3MA 0 |
229 | #define PCAP_LED_4MA 1 | 231 | #define PCAP_LED_4MA 1 |
230 | #define PCAP_LED_5MA 2 | 232 | #define PCAP_LED_5MA 2 |
@@ -243,9 +245,6 @@ int pcap_adc_sync(struct pcap_chip *, u8, u32, u8[], u16[]); | |||
243 | #define PCAP_LED0_C_SHIFT 15 | 245 | #define PCAP_LED0_C_SHIFT 15 |
244 | #define PCAP_LED1_C_SHIFT 17 | 246 | #define PCAP_LED1_C_SHIFT 17 |
245 | #define PCAP_BL1_SHIFT 20 | 247 | #define PCAP_BL1_SHIFT 20 |
246 | #define PCAP_VIB_MASK 0x3 | ||
247 | #define PCAP_VIB_SHIFT 20 | ||
248 | #define PCAP_VIB_EN (1 << 19) | ||
249 | 248 | ||
250 | /* RTC */ | 249 | /* RTC */ |
251 | #define PCAP_RTC_DAY_MASK 0x3fff | 250 | #define PCAP_RTC_DAY_MASK 0x3fff |
diff --git a/include/linux/mfd/mc13783-private.h b/include/linux/mfd/mc13783-private.h new file mode 100644 index 000000000000..47e698cb0f16 --- /dev/null +++ b/include/linux/mfd/mc13783-private.h | |||
@@ -0,0 +1,396 @@ | |||
1 | /* | ||
2 | * Copyright 2009 Pengutronix, Sascha Hauer <s.hauer@pengutronix.de> | ||
3 | * | ||
4 | * Initial development of this code was funded by | ||
5 | * Phytec Messtechnik GmbH, http://www.phytec.de | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License as published by | ||
9 | * the Free Software Foundation; either version 2 of the License, or | ||
10 | * (at your option) any later version. | ||
11 | * | ||
12 | * This program is distributed in the hope that it will be useful, | ||
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
15 | * GNU General Public License for more details. | ||
16 | * | ||
17 | * You should have received a copy of the GNU General Public License | ||
18 | * along with this program; if not, write to the Free Software | ||
19 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
20 | */ | ||
21 | |||
22 | #ifndef __LINUX_MFD_MC13783_PRIV_H | ||
23 | #define __LINUX_MFD_MC13783_PRIV_H | ||
24 | |||
25 | #include <linux/platform_device.h> | ||
26 | #include <linux/mfd/mc13783.h> | ||
27 | #include <linux/workqueue.h> | ||
28 | #include <linux/mutex.h> | ||
29 | |||
30 | struct mc13783_irq { | ||
31 | void (*handler)(int, void *); | ||
32 | void *data; | ||
33 | }; | ||
34 | |||
35 | #define MC13783_NUM_IRQ 2 | ||
36 | #define MC13783_IRQ_TS 0 | ||
37 | #define MC13783_IRQ_REGULATOR 1 | ||
38 | |||
39 | #define MC13783_ADC_MODE_TS 1 | ||
40 | #define MC13783_ADC_MODE_SINGLE_CHAN 2 | ||
41 | #define MC13783_ADC_MODE_MULT_CHAN 3 | ||
42 | |||
43 | struct mc13783 { | ||
44 | int revision; | ||
45 | struct device *dev; | ||
46 | struct spi_device *spi_device; | ||
47 | |||
48 | int (*read_dev)(void *data, char reg, int count, u32 *dst); | ||
49 | int (*write_dev)(void *data, char reg, int count, const u32 *src); | ||
50 | |||
51 | struct mutex io_lock; | ||
52 | void *io_data; | ||
53 | int irq; | ||
54 | unsigned int flags; | ||
55 | |||
56 | struct mc13783_irq irq_handler[MC13783_NUM_IRQ]; | ||
57 | struct work_struct work; | ||
58 | struct completion adc_done; | ||
59 | unsigned int ts_active; | ||
60 | struct mutex adc_conv_lock; | ||
61 | |||
62 | struct mc13783_regulator_init_data *regulators; | ||
63 | int num_regulators; | ||
64 | }; | ||
65 | |||
66 | int mc13783_reg_read(struct mc13783 *, int reg_num, u32 *); | ||
67 | int mc13783_reg_write(struct mc13783 *, int, u32); | ||
68 | int mc13783_set_bits(struct mc13783 *, int, u32, u32); | ||
69 | int mc13783_free_irq(struct mc13783 *mc13783, int irq); | ||
70 | int mc13783_register_irq(struct mc13783 *mc13783, int irq, | ||
71 | void (*handler) (int, void *), void *data); | ||
72 | |||
73 | #define MC13783_REG_INTERRUPT_STATUS_0 0 | ||
74 | #define MC13783_REG_INTERRUPT_MASK_0 1 | ||
75 | #define MC13783_REG_INTERRUPT_SENSE_0 2 | ||
76 | #define MC13783_REG_INTERRUPT_STATUS_1 3 | ||
77 | #define MC13783_REG_INTERRUPT_MASK_1 4 | ||
78 | #define MC13783_REG_INTERRUPT_SENSE_1 5 | ||
79 | #define MC13783_REG_POWER_UP_MODE_SENSE 6 | ||
80 | #define MC13783_REG_REVISION 7 | ||
81 | #define MC13783_REG_SEMAPHORE 8 | ||
82 | #define MC13783_REG_ARBITRATION_PERIPHERAL_AUDIO 9 | ||
83 | #define MC13783_REG_ARBITRATION_SWITCHERS 10 | ||
84 | #define MC13783_REG_ARBITRATION_REGULATORS_0 11 | ||
85 | #define MC13783_REG_ARBITRATION_REGULATORS_1 12 | ||
86 | #define MC13783_REG_POWER_CONTROL_0 13 | ||
87 | #define MC13783_REG_POWER_CONTROL_1 14 | ||
88 | #define MC13783_REG_POWER_CONTROL_2 15 | ||
89 | #define MC13783_REG_REGEN_ASSIGNMENT 16 | ||
90 | #define MC13783_REG_CONTROL_SPARE 17 | ||
91 | #define MC13783_REG_MEMORY_A 18 | ||
92 | #define MC13783_REG_MEMORY_B 19 | ||
93 | #define MC13783_REG_RTC_TIME 20 | ||
94 | #define MC13783_REG_RTC_ALARM 21 | ||
95 | #define MC13783_REG_RTC_DAY 22 | ||
96 | #define MC13783_REG_RTC_DAY_ALARM 23 | ||
97 | #define MC13783_REG_SWITCHERS_0 24 | ||
98 | #define MC13783_REG_SWITCHERS_1 25 | ||
99 | #define MC13783_REG_SWITCHERS_2 26 | ||
100 | #define MC13783_REG_SWITCHERS_3 27 | ||
101 | #define MC13783_REG_SWITCHERS_4 28 | ||
102 | #define MC13783_REG_SWITCHERS_5 29 | ||
103 | #define MC13783_REG_REGULATOR_SETTING_0 30 | ||
104 | #define MC13783_REG_REGULATOR_SETTING_1 31 | ||
105 | #define MC13783_REG_REGULATOR_MODE_0 32 | ||
106 | #define MC13783_REG_REGULATOR_MODE_1 33 | ||
107 | #define MC13783_REG_POWER_MISCELLANEOUS 34 | ||
108 | #define MC13783_REG_POWER_SPARE 35 | ||
109 | #define MC13783_REG_AUDIO_RX_0 36 | ||
110 | #define MC13783_REG_AUDIO_RX_1 37 | ||
111 | #define MC13783_REG_AUDIO_TX 38 | ||
112 | #define MC13783_REG_AUDIO_SSI_NETWORK 39 | ||
113 | #define MC13783_REG_AUDIO_CODEC 40 | ||
114 | #define MC13783_REG_AUDIO_STEREO_DAC 41 | ||
115 | #define MC13783_REG_AUDIO_SPARE 42 | ||
116 | #define MC13783_REG_ADC_0 43 | ||
117 | #define MC13783_REG_ADC_1 44 | ||
118 | #define MC13783_REG_ADC_2 45 | ||
119 | #define MC13783_REG_ADC_3 46 | ||
120 | #define MC13783_REG_ADC_4 47 | ||
121 | #define MC13783_REG_CHARGER 48 | ||
122 | #define MC13783_REG_USB 49 | ||
123 | #define MC13783_REG_CHARGE_USB_SPARE 50 | ||
124 | #define MC13783_REG_LED_CONTROL_0 51 | ||
125 | #define MC13783_REG_LED_CONTROL_1 52 | ||
126 | #define MC13783_REG_LED_CONTROL_2 53 | ||
127 | #define MC13783_REG_LED_CONTROL_3 54 | ||
128 | #define MC13783_REG_LED_CONTROL_4 55 | ||
129 | #define MC13783_REG_LED_CONTROL_5 56 | ||
130 | #define MC13783_REG_SPARE 57 | ||
131 | #define MC13783_REG_TRIM_0 58 | ||
132 | #define MC13783_REG_TRIM_1 59 | ||
133 | #define MC13783_REG_TEST_0 60 | ||
134 | #define MC13783_REG_TEST_1 61 | ||
135 | #define MC13783_REG_TEST_2 62 | ||
136 | #define MC13783_REG_TEST_3 63 | ||
137 | #define MC13783_REG_NB 64 | ||
138 | |||
139 | |||
140 | /* | ||
141 | * Interrupt Status | ||
142 | */ | ||
143 | #define MC13783_INT_STAT_ADCDONEI (1 << 0) | ||
144 | #define MC13783_INT_STAT_ADCBISDONEI (1 << 1) | ||
145 | #define MC13783_INT_STAT_TSI (1 << 2) | ||
146 | #define MC13783_INT_STAT_WHIGHI (1 << 3) | ||
147 | #define MC13783_INT_STAT_WLOWI (1 << 4) | ||
148 | #define MC13783_INT_STAT_CHGDETI (1 << 6) | ||
149 | #define MC13783_INT_STAT_CHGOVI (1 << 7) | ||
150 | #define MC13783_INT_STAT_CHGREVI (1 << 8) | ||
151 | #define MC13783_INT_STAT_CHGSHORTI (1 << 9) | ||
152 | #define MC13783_INT_STAT_CCCVI (1 << 10) | ||
153 | #define MC13783_INT_STAT_CHGCURRI (1 << 11) | ||
154 | #define MC13783_INT_STAT_BPONI (1 << 12) | ||
155 | #define MC13783_INT_STAT_LOBATLI (1 << 13) | ||
156 | #define MC13783_INT_STAT_LOBATHI (1 << 14) | ||
157 | #define MC13783_INT_STAT_UDPI (1 << 15) | ||
158 | #define MC13783_INT_STAT_USBI (1 << 16) | ||
159 | #define MC13783_INT_STAT_IDI (1 << 19) | ||
160 | #define MC13783_INT_STAT_Unused (1 << 20) | ||
161 | #define MC13783_INT_STAT_SE1I (1 << 21) | ||
162 | #define MC13783_INT_STAT_CKDETI (1 << 22) | ||
163 | #define MC13783_INT_STAT_UDMI (1 << 23) | ||
164 | |||
165 | /* | ||
166 | * Interrupt Mask | ||
167 | */ | ||
168 | #define MC13783_INT_MASK_ADCDONEM (1 << 0) | ||
169 | #define MC13783_INT_MASK_ADCBISDONEM (1 << 1) | ||
170 | #define MC13783_INT_MASK_TSM (1 << 2) | ||
171 | #define MC13783_INT_MASK_WHIGHM (1 << 3) | ||
172 | #define MC13783_INT_MASK_WLOWM (1 << 4) | ||
173 | #define MC13783_INT_MASK_CHGDETM (1 << 6) | ||
174 | #define MC13783_INT_MASK_CHGOVM (1 << 7) | ||
175 | #define MC13783_INT_MASK_CHGREVM (1 << 8) | ||
176 | #define MC13783_INT_MASK_CHGSHORTM (1 << 9) | ||
177 | #define MC13783_INT_MASK_CCCVM (1 << 10) | ||
178 | #define MC13783_INT_MASK_CHGCURRM (1 << 11) | ||
179 | #define MC13783_INT_MASK_BPONM (1 << 12) | ||
180 | #define MC13783_INT_MASK_LOBATLM (1 << 13) | ||
181 | #define MC13783_INT_MASK_LOBATHM (1 << 14) | ||
182 | #define MC13783_INT_MASK_UDPM (1 << 15) | ||
183 | #define MC13783_INT_MASK_USBM (1 << 16) | ||
184 | #define MC13783_INT_MASK_IDM (1 << 19) | ||
185 | #define MC13783_INT_MASK_SE1M (1 << 21) | ||
186 | #define MC13783_INT_MASK_CKDETM (1 << 22) | ||
187 | |||
188 | /* | ||
189 | * Reg Regulator Mode 0 | ||
190 | */ | ||
191 | #define MC13783_REGCTRL_VAUDIO_EN (1 << 0) | ||
192 | #define MC13783_REGCTRL_VAUDIO_STBY (1 << 1) | ||
193 | #define MC13783_REGCTRL_VAUDIO_MODE (1 << 2) | ||
194 | #define MC13783_REGCTRL_VIOHI_EN (1 << 3) | ||
195 | #define MC13783_REGCTRL_VIOHI_STBY (1 << 4) | ||
196 | #define MC13783_REGCTRL_VIOHI_MODE (1 << 5) | ||
197 | #define MC13783_REGCTRL_VIOLO_EN (1 << 6) | ||
198 | #define MC13783_REGCTRL_VIOLO_STBY (1 << 7) | ||
199 | #define MC13783_REGCTRL_VIOLO_MODE (1 << 8) | ||
200 | #define MC13783_REGCTRL_VDIG_EN (1 << 9) | ||
201 | #define MC13783_REGCTRL_VDIG_STBY (1 << 10) | ||
202 | #define MC13783_REGCTRL_VDIG_MODE (1 << 11) | ||
203 | #define MC13783_REGCTRL_VGEN_EN (1 << 12) | ||
204 | #define MC13783_REGCTRL_VGEN_STBY (1 << 13) | ||
205 | #define MC13783_REGCTRL_VGEN_MODE (1 << 14) | ||
206 | #define MC13783_REGCTRL_VRFDIG_EN (1 << 15) | ||
207 | #define MC13783_REGCTRL_VRFDIG_STBY (1 << 16) | ||
208 | #define MC13783_REGCTRL_VRFDIG_MODE (1 << 17) | ||
209 | #define MC13783_REGCTRL_VRFREF_EN (1 << 18) | ||
210 | #define MC13783_REGCTRL_VRFREF_STBY (1 << 19) | ||
211 | #define MC13783_REGCTRL_VRFREF_MODE (1 << 20) | ||
212 | #define MC13783_REGCTRL_VRFCP_EN (1 << 21) | ||
213 | #define MC13783_REGCTRL_VRFCP_STBY (1 << 22) | ||
214 | #define MC13783_REGCTRL_VRFCP_MODE (1 << 23) | ||
215 | |||
216 | /* | ||
217 | * Reg Regulator Mode 1 | ||
218 | */ | ||
219 | #define MC13783_REGCTRL_VSIM_EN (1 << 0) | ||
220 | #define MC13783_REGCTRL_VSIM_STBY (1 << 1) | ||
221 | #define MC13783_REGCTRL_VSIM_MODE (1 << 2) | ||
222 | #define MC13783_REGCTRL_VESIM_EN (1 << 3) | ||
223 | #define MC13783_REGCTRL_VESIM_STBY (1 << 4) | ||
224 | #define MC13783_REGCTRL_VESIM_MODE (1 << 5) | ||
225 | #define MC13783_REGCTRL_VCAM_EN (1 << 6) | ||
226 | #define MC13783_REGCTRL_VCAM_STBY (1 << 7) | ||
227 | #define MC13783_REGCTRL_VCAM_MODE (1 << 8) | ||
228 | #define MC13783_REGCTRL_VRFBG_EN (1 << 9) | ||
229 | #define MC13783_REGCTRL_VRFBG_STBY (1 << 10) | ||
230 | #define MC13783_REGCTRL_VVIB_EN (1 << 11) | ||
231 | #define MC13783_REGCTRL_VRF1_EN (1 << 12) | ||
232 | #define MC13783_REGCTRL_VRF1_STBY (1 << 13) | ||
233 | #define MC13783_REGCTRL_VRF1_MODE (1 << 14) | ||
234 | #define MC13783_REGCTRL_VRF2_EN (1 << 15) | ||
235 | #define MC13783_REGCTRL_VRF2_STBY (1 << 16) | ||
236 | #define MC13783_REGCTRL_VRF2_MODE (1 << 17) | ||
237 | #define MC13783_REGCTRL_VMMC1_EN (1 << 18) | ||
238 | #define MC13783_REGCTRL_VMMC1_STBY (1 << 19) | ||
239 | #define MC13783_REGCTRL_VMMC1_MODE (1 << 20) | ||
240 | #define MC13783_REGCTRL_VMMC2_EN (1 << 21) | ||
241 | #define MC13783_REGCTRL_VMMC2_STBY (1 << 22) | ||
242 | #define MC13783_REGCTRL_VMMC2_MODE (1 << 23) | ||
243 | |||
244 | /* | ||
245 | * Reg Regulator Misc. | ||
246 | */ | ||
247 | #define MC13783_REGCTRL_GPO1_EN (1 << 6) | ||
248 | #define MC13783_REGCTRL_GPO2_EN (1 << 8) | ||
249 | #define MC13783_REGCTRL_GPO3_EN (1 << 10) | ||
250 | #define MC13783_REGCTRL_GPO4_EN (1 << 12) | ||
251 | #define MC13783_REGCTRL_VIBPINCTRL (1 << 14) | ||
252 | |||
253 | /* | ||
254 | * Reg Switcher 4 | ||
255 | */ | ||
256 | #define MC13783_SWCTRL_SW1A_MODE (1 << 0) | ||
257 | #define MC13783_SWCTRL_SW1A_STBY_MODE (1 << 2) | ||
258 | #define MC13783_SWCTRL_SW1A_DVS_SPEED (1 << 6) | ||
259 | #define MC13783_SWCTRL_SW1A_PANIC_MODE (1 << 8) | ||
260 | #define MC13783_SWCTRL_SW1A_SOFTSTART (1 << 9) | ||
261 | #define MC13783_SWCTRL_SW1B_MODE (1 << 10) | ||
262 | #define MC13783_SWCTRL_SW1B_STBY_MODE (1 << 12) | ||
263 | #define MC13783_SWCTRL_SW1B_DVS_SPEED (1 << 14) | ||
264 | #define MC13783_SWCTRL_SW1B_PANIC_MODE (1 << 16) | ||
265 | #define MC13783_SWCTRL_SW1B_SOFTSTART (1 << 17) | ||
266 | #define MC13783_SWCTRL_PLL_EN (1 << 18) | ||
267 | #define MC13783_SWCTRL_PLL_FACTOR (1 << 19) | ||
268 | |||
269 | /* | ||
270 | * Reg Switcher 5 | ||
271 | */ | ||
272 | #define MC13783_SWCTRL_SW2A_MODE (1 << 0) | ||
273 | #define MC13783_SWCTRL_SW2A_STBY_MODE (1 << 2) | ||
274 | #define MC13783_SWCTRL_SW2A_DVS_SPEED (1 << 6) | ||
275 | #define MC13783_SWCTRL_SW2A_PANIC_MODE (1 << 8) | ||
276 | #define MC13783_SWCTRL_SW2A_SOFTSTART (1 << 9) | ||
277 | #define MC13783_SWCTRL_SW2B_MODE (1 << 10) | ||
278 | #define MC13783_SWCTRL_SW2B_STBY_MODE (1 << 12) | ||
279 | #define MC13783_SWCTRL_SW2B_DVS_SPEED (1 << 14) | ||
280 | #define MC13783_SWCTRL_SW2B_PANIC_MODE (1 << 16) | ||
281 | #define MC13783_SWCTRL_SW2B_SOFTSTART (1 << 17) | ||
282 | #define MC13783_SWSET_SW3 (1 << 18) | ||
283 | #define MC13783_SWCTRL_SW3_EN (1 << 20) | ||
284 | #define MC13783_SWCTRL_SW3_STBY (1 << 21) | ||
285 | #define MC13783_SWCTRL_SW3_MODE (1 << 22) | ||
286 | |||
287 | /* | ||
288 | * ADC/Touch | ||
289 | */ | ||
290 | #define MC13783_ADC0_LICELLCON (1 << 0) | ||
291 | #define MC13783_ADC0_CHRGICON (1 << 1) | ||
292 | #define MC13783_ADC0_BATICON (1 << 2) | ||
293 | #define MC13783_ADC0_RTHEN (1 << 3) | ||
294 | #define MC13783_ADC0_DTHEN (1 << 4) | ||
295 | #define MC13783_ADC0_UIDEN (1 << 5) | ||
296 | #define MC13783_ADC0_ADOUTEN (1 << 6) | ||
297 | #define MC13783_ADC0_ADOUTPER (1 << 7) | ||
298 | #define MC13783_ADC0_ADREFEN (1 << 10) | ||
299 | #define MC13783_ADC0_ADREFMODE (1 << 11) | ||
300 | #define MC13783_ADC0_TSMOD0 (1 << 12) | ||
301 | #define MC13783_ADC0_TSMOD1 (1 << 13) | ||
302 | #define MC13783_ADC0_TSMOD2 (1 << 14) | ||
303 | #define MC13783_ADC0_CHRGRAWDIV (1 << 15) | ||
304 | #define MC13783_ADC0_ADINC1 (1 << 16) | ||
305 | #define MC13783_ADC0_ADINC2 (1 << 17) | ||
306 | #define MC13783_ADC0_WCOMP (1 << 18) | ||
307 | #define MC13783_ADC0_ADCBIS0 (1 << 23) | ||
308 | |||
309 | #define MC13783_ADC1_ADEN (1 << 0) | ||
310 | #define MC13783_ADC1_RAND (1 << 1) | ||
311 | #define MC13783_ADC1_ADSEL (1 << 3) | ||
312 | #define MC13783_ADC1_TRIGMASK (1 << 4) | ||
313 | #define MC13783_ADC1_ADA10 (1 << 5) | ||
314 | #define MC13783_ADC1_ADA11 (1 << 6) | ||
315 | #define MC13783_ADC1_ADA12 (1 << 7) | ||
316 | #define MC13783_ADC1_ADA20 (1 << 8) | ||
317 | #define MC13783_ADC1_ADA21 (1 << 9) | ||
318 | #define MC13783_ADC1_ADA22 (1 << 10) | ||
319 | #define MC13783_ADC1_ATO0 (1 << 11) | ||
320 | #define MC13783_ADC1_ATO1 (1 << 12) | ||
321 | #define MC13783_ADC1_ATO2 (1 << 13) | ||
322 | #define MC13783_ADC1_ATO3 (1 << 14) | ||
323 | #define MC13783_ADC1_ATO4 (1 << 15) | ||
324 | #define MC13783_ADC1_ATO5 (1 << 16) | ||
325 | #define MC13783_ADC1_ATO6 (1 << 17) | ||
326 | #define MC13783_ADC1_ATO7 (1 << 18) | ||
327 | #define MC13783_ADC1_ATOX (1 << 19) | ||
328 | #define MC13783_ADC1_ASC (1 << 20) | ||
329 | #define MC13783_ADC1_ADTRIGIGN (1 << 21) | ||
330 | #define MC13783_ADC1_ADONESHOT (1 << 22) | ||
331 | #define MC13783_ADC1_ADCBIS1 (1 << 23) | ||
332 | |||
333 | #define MC13783_ADC1_CHAN0_SHIFT 5 | ||
334 | #define MC13783_ADC1_CHAN1_SHIFT 8 | ||
335 | |||
336 | #define MC13783_ADC2_ADD10 (1 << 2) | ||
337 | #define MC13783_ADC2_ADD11 (1 << 3) | ||
338 | #define MC13783_ADC2_ADD12 (1 << 4) | ||
339 | #define MC13783_ADC2_ADD13 (1 << 5) | ||
340 | #define MC13783_ADC2_ADD14 (1 << 6) | ||
341 | #define MC13783_ADC2_ADD15 (1 << 7) | ||
342 | #define MC13783_ADC2_ADD16 (1 << 8) | ||
343 | #define MC13783_ADC2_ADD17 (1 << 9) | ||
344 | #define MC13783_ADC2_ADD18 (1 << 10) | ||
345 | #define MC13783_ADC2_ADD19 (1 << 11) | ||
346 | #define MC13783_ADC2_ADD20 (1 << 14) | ||
347 | #define MC13783_ADC2_ADD21 (1 << 15) | ||
348 | #define MC13783_ADC2_ADD22 (1 << 16) | ||
349 | #define MC13783_ADC2_ADD23 (1 << 17) | ||
350 | #define MC13783_ADC2_ADD24 (1 << 18) | ||
351 | #define MC13783_ADC2_ADD25 (1 << 19) | ||
352 | #define MC13783_ADC2_ADD26 (1 << 20) | ||
353 | #define MC13783_ADC2_ADD27 (1 << 21) | ||
354 | #define MC13783_ADC2_ADD28 (1 << 22) | ||
355 | #define MC13783_ADC2_ADD29 (1 << 23) | ||
356 | |||
357 | #define MC13783_ADC3_WHIGH0 (1 << 0) | ||
358 | #define MC13783_ADC3_WHIGH1 (1 << 1) | ||
359 | #define MC13783_ADC3_WHIGH2 (1 << 2) | ||
360 | #define MC13783_ADC3_WHIGH3 (1 << 3) | ||
361 | #define MC13783_ADC3_WHIGH4 (1 << 4) | ||
362 | #define MC13783_ADC3_WHIGH5 (1 << 5) | ||
363 | #define MC13783_ADC3_ICID0 (1 << 6) | ||
364 | #define MC13783_ADC3_ICID1 (1 << 7) | ||
365 | #define MC13783_ADC3_ICID2 (1 << 8) | ||
366 | #define MC13783_ADC3_WLOW0 (1 << 9) | ||
367 | #define MC13783_ADC3_WLOW1 (1 << 10) | ||
368 | #define MC13783_ADC3_WLOW2 (1 << 11) | ||
369 | #define MC13783_ADC3_WLOW3 (1 << 12) | ||
370 | #define MC13783_ADC3_WLOW4 (1 << 13) | ||
371 | #define MC13783_ADC3_WLOW5 (1 << 14) | ||
372 | #define MC13783_ADC3_ADCBIS2 (1 << 23) | ||
373 | |||
374 | #define MC13783_ADC4_ADDBIS10 (1 << 2) | ||
375 | #define MC13783_ADC4_ADDBIS11 (1 << 3) | ||
376 | #define MC13783_ADC4_ADDBIS12 (1 << 4) | ||
377 | #define MC13783_ADC4_ADDBIS13 (1 << 5) | ||
378 | #define MC13783_ADC4_ADDBIS14 (1 << 6) | ||
379 | #define MC13783_ADC4_ADDBIS15 (1 << 7) | ||
380 | #define MC13783_ADC4_ADDBIS16 (1 << 8) | ||
381 | #define MC13783_ADC4_ADDBIS17 (1 << 9) | ||
382 | #define MC13783_ADC4_ADDBIS18 (1 << 10) | ||
383 | #define MC13783_ADC4_ADDBIS19 (1 << 11) | ||
384 | #define MC13783_ADC4_ADDBIS20 (1 << 14) | ||
385 | #define MC13783_ADC4_ADDBIS21 (1 << 15) | ||
386 | #define MC13783_ADC4_ADDBIS22 (1 << 16) | ||
387 | #define MC13783_ADC4_ADDBIS23 (1 << 17) | ||
388 | #define MC13783_ADC4_ADDBIS24 (1 << 18) | ||
389 | #define MC13783_ADC4_ADDBIS25 (1 << 19) | ||
390 | #define MC13783_ADC4_ADDBIS26 (1 << 20) | ||
391 | #define MC13783_ADC4_ADDBIS27 (1 << 21) | ||
392 | #define MC13783_ADC4_ADDBIS28 (1 << 22) | ||
393 | #define MC13783_ADC4_ADDBIS29 (1 << 23) | ||
394 | |||
395 | #endif /* __LINUX_MFD_MC13783_PRIV_H */ | ||
396 | |||
diff --git a/include/linux/mfd/mc13783.h b/include/linux/mfd/mc13783.h new file mode 100644 index 000000000000..b3a2a7243573 --- /dev/null +++ b/include/linux/mfd/mc13783.h | |||
@@ -0,0 +1,84 @@ | |||
1 | /* | ||
2 | * Copyright 2009 Pengutronix, Sascha Hauer <s.hauer@pengutronix.de> | ||
3 | * | ||
4 | * Initial development of this code was funded by | ||
5 | * Phytec Messtechnik GmbH, http://www.phytec.de | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License as published by | ||
9 | * the Free Software Foundation; either version 2 of the License, or | ||
10 | * (at your option) any later version. | ||
11 | * | ||
12 | * This program is distributed in the hope that it will be useful, | ||
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
15 | * GNU General Public License for more details. | ||
16 | * | ||
17 | * You should have received a copy of the GNU General Public License | ||
18 | * along with this program; if not, write to the Free Software | ||
19 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
20 | */ | ||
21 | |||
22 | #ifndef __INCLUDE_LINUX_MFD_MC13783_H | ||
23 | #define __INCLUDE_LINUX_MFD_MC13783_H | ||
24 | |||
25 | struct mc13783; | ||
26 | struct regulator_init_data; | ||
27 | |||
28 | struct mc13783_regulator_init_data { | ||
29 | int id; | ||
30 | struct regulator_init_data *init_data; | ||
31 | }; | ||
32 | |||
33 | struct mc13783_platform_data { | ||
34 | struct mc13783_regulator_init_data *regulators; | ||
35 | int num_regulators; | ||
36 | unsigned int flags; | ||
37 | }; | ||
38 | |||
39 | /* mc13783_platform_data flags */ | ||
40 | #define MC13783_USE_TOUCHSCREEN (1 << 0) | ||
41 | #define MC13783_USE_CODEC (1 << 1) | ||
42 | #define MC13783_USE_ADC (1 << 2) | ||
43 | #define MC13783_USE_RTC (1 << 3) | ||
44 | #define MC13783_USE_REGULATOR (1 << 4) | ||
45 | |||
46 | int mc13783_adc_do_conversion(struct mc13783 *mc13783, unsigned int mode, | ||
47 | unsigned int channel, unsigned int *sample); | ||
48 | |||
49 | void mc13783_adc_set_ts_status(struct mc13783 *mc13783, unsigned int status); | ||
50 | |||
51 | #define MC13783_SW_SW1A 0 | ||
52 | #define MC13783_SW_SW1B 1 | ||
53 | #define MC13783_SW_SW2A 2 | ||
54 | #define MC13783_SW_SW2B 3 | ||
55 | #define MC13783_SW_SW3 4 | ||
56 | #define MC13783_SW_PLL 5 | ||
57 | #define MC13783_REGU_VAUDIO 6 | ||
58 | #define MC13783_REGU_VIOHI 7 | ||
59 | #define MC13783_REGU_VIOLO 8 | ||
60 | #define MC13783_REGU_VDIG 9 | ||
61 | #define MC13783_REGU_VGEN 10 | ||
62 | #define MC13783_REGU_VRFDIG 11 | ||
63 | #define MC13783_REGU_VRFREF 12 | ||
64 | #define MC13783_REGU_VRFCP 13 | ||
65 | #define MC13783_REGU_VSIM 14 | ||
66 | #define MC13783_REGU_VESIM 15 | ||
67 | #define MC13783_REGU_VCAM 16 | ||
68 | #define MC13783_REGU_VRFBG 17 | ||
69 | #define MC13783_REGU_VVIB 18 | ||
70 | #define MC13783_REGU_VRF1 19 | ||
71 | #define MC13783_REGU_VRF2 20 | ||
72 | #define MC13783_REGU_VMMC1 21 | ||
73 | #define MC13783_REGU_VMMC2 22 | ||
74 | #define MC13783_REGU_GPO1 23 | ||
75 | #define MC13783_REGU_GPO2 24 | ||
76 | #define MC13783_REGU_GPO3 25 | ||
77 | #define MC13783_REGU_GPO4 26 | ||
78 | #define MC13783_REGU_V1 27 | ||
79 | #define MC13783_REGU_V2 28 | ||
80 | #define MC13783_REGU_V3 29 | ||
81 | #define MC13783_REGU_V4 30 | ||
82 | |||
83 | #endif /* __INCLUDE_LINUX_MFD_MC13783_H */ | ||
84 | |||
diff --git a/include/linux/mfd/pcf50633/adc.h b/include/linux/mfd/pcf50633/adc.h index 56669b4183ad..b35e62801ffa 100644 --- a/include/linux/mfd/pcf50633/adc.h +++ b/include/linux/mfd/pcf50633/adc.h | |||
@@ -25,7 +25,8 @@ | |||
25 | #define PCF50633_REG_ADCS3 0x57 | 25 | #define PCF50633_REG_ADCS3 0x57 |
26 | 26 | ||
27 | #define PCF50633_ADCC1_ADCSTART 0x01 | 27 | #define PCF50633_ADCC1_ADCSTART 0x01 |
28 | #define PCF50633_ADCC1_RES_10BIT 0x02 | 28 | #define PCF50633_ADCC1_RES_8BIT 0x02 |
29 | #define PCF50633_ADCC1_RES_10BIT 0x00 | ||
29 | #define PCF50633_ADCC1_AVERAGE_NO 0x00 | 30 | #define PCF50633_ADCC1_AVERAGE_NO 0x00 |
30 | #define PCF50633_ADCC1_AVERAGE_4 0x04 | 31 | #define PCF50633_ADCC1_AVERAGE_4 0x04 |
31 | #define PCF50633_ADCC1_AVERAGE_8 0x08 | 32 | #define PCF50633_ADCC1_AVERAGE_8 0x08 |
diff --git a/include/linux/mfd/pcf50633/core.h b/include/linux/mfd/pcf50633/core.h index c8f51c3c0a72..9aba7b779fbc 100644 --- a/include/linux/mfd/pcf50633/core.h +++ b/include/linux/mfd/pcf50633/core.h | |||
@@ -136,6 +136,7 @@ struct pcf50633 { | |||
136 | int irq; | 136 | int irq; |
137 | struct pcf50633_irq irq_handler[PCF50633_NUM_IRQ]; | 137 | struct pcf50633_irq irq_handler[PCF50633_NUM_IRQ]; |
138 | struct work_struct irq_work; | 138 | struct work_struct irq_work; |
139 | struct workqueue_struct *work_queue; | ||
139 | struct mutex lock; | 140 | struct mutex lock; |
140 | 141 | ||
141 | u8 mask_regs[5]; | 142 | u8 mask_regs[5]; |
diff --git a/include/linux/mfd/wm831x/auxadc.h b/include/linux/mfd/wm831x/auxadc.h new file mode 100644 index 000000000000..b132067e9e99 --- /dev/null +++ b/include/linux/mfd/wm831x/auxadc.h | |||
@@ -0,0 +1,216 @@ | |||
1 | /* | ||
2 | * include/linux/mfd/wm831x/auxadc.h -- Auxiliary ADC interface for WM831x | ||
3 | * | ||
4 | * Copyright 2009 Wolfson Microelectronics PLC. | ||
5 | * | ||
6 | * Author: Mark Brown <broonie@opensource.wolfsonmicro.com> | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify it | ||
9 | * under the terms of the GNU General Public License as published by the | ||
10 | * Free Software Foundation; either version 2 of the License, or (at your | ||
11 | * option) any later version. | ||
12 | * | ||
13 | */ | ||
14 | |||
15 | #ifndef __MFD_WM831X_AUXADC_H__ | ||
16 | #define __MFD_WM831X_AUXADC_H__ | ||
17 | |||
18 | /* | ||
19 | * R16429 (0x402D) - AuxADC Data | ||
20 | */ | ||
21 | #define WM831X_AUX_DATA_SRC_MASK 0xF000 /* AUX_DATA_SRC - [15:12] */ | ||
22 | #define WM831X_AUX_DATA_SRC_SHIFT 12 /* AUX_DATA_SRC - [15:12] */ | ||
23 | #define WM831X_AUX_DATA_SRC_WIDTH 4 /* AUX_DATA_SRC - [15:12] */ | ||
24 | #define WM831X_AUX_DATA_MASK 0x0FFF /* AUX_DATA - [11:0] */ | ||
25 | #define WM831X_AUX_DATA_SHIFT 0 /* AUX_DATA - [11:0] */ | ||
26 | #define WM831X_AUX_DATA_WIDTH 12 /* AUX_DATA - [11:0] */ | ||
27 | |||
28 | /* | ||
29 | * R16430 (0x402E) - AuxADC Control | ||
30 | */ | ||
31 | #define WM831X_AUX_ENA 0x8000 /* AUX_ENA */ | ||
32 | #define WM831X_AUX_ENA_MASK 0x8000 /* AUX_ENA */ | ||
33 | #define WM831X_AUX_ENA_SHIFT 15 /* AUX_ENA */ | ||
34 | #define WM831X_AUX_ENA_WIDTH 1 /* AUX_ENA */ | ||
35 | #define WM831X_AUX_CVT_ENA 0x4000 /* AUX_CVT_ENA */ | ||
36 | #define WM831X_AUX_CVT_ENA_MASK 0x4000 /* AUX_CVT_ENA */ | ||
37 | #define WM831X_AUX_CVT_ENA_SHIFT 14 /* AUX_CVT_ENA */ | ||
38 | #define WM831X_AUX_CVT_ENA_WIDTH 1 /* AUX_CVT_ENA */ | ||
39 | #define WM831X_AUX_SLPENA 0x1000 /* AUX_SLPENA */ | ||
40 | #define WM831X_AUX_SLPENA_MASK 0x1000 /* AUX_SLPENA */ | ||
41 | #define WM831X_AUX_SLPENA_SHIFT 12 /* AUX_SLPENA */ | ||
42 | #define WM831X_AUX_SLPENA_WIDTH 1 /* AUX_SLPENA */ | ||
43 | #define WM831X_AUX_FRC_ENA 0x0800 /* AUX_FRC_ENA */ | ||
44 | #define WM831X_AUX_FRC_ENA_MASK 0x0800 /* AUX_FRC_ENA */ | ||
45 | #define WM831X_AUX_FRC_ENA_SHIFT 11 /* AUX_FRC_ENA */ | ||
46 | #define WM831X_AUX_FRC_ENA_WIDTH 1 /* AUX_FRC_ENA */ | ||
47 | #define WM831X_AUX_RATE_MASK 0x003F /* AUX_RATE - [5:0] */ | ||
48 | #define WM831X_AUX_RATE_SHIFT 0 /* AUX_RATE - [5:0] */ | ||
49 | #define WM831X_AUX_RATE_WIDTH 6 /* AUX_RATE - [5:0] */ | ||
50 | |||
51 | /* | ||
52 | * R16431 (0x402F) - AuxADC Source | ||
53 | */ | ||
54 | #define WM831X_AUX_CAL_SEL 0x8000 /* AUX_CAL_SEL */ | ||
55 | #define WM831X_AUX_CAL_SEL_MASK 0x8000 /* AUX_CAL_SEL */ | ||
56 | #define WM831X_AUX_CAL_SEL_SHIFT 15 /* AUX_CAL_SEL */ | ||
57 | #define WM831X_AUX_CAL_SEL_WIDTH 1 /* AUX_CAL_SEL */ | ||
58 | #define WM831X_AUX_BKUP_BATT_SEL 0x0400 /* AUX_BKUP_BATT_SEL */ | ||
59 | #define WM831X_AUX_BKUP_BATT_SEL_MASK 0x0400 /* AUX_BKUP_BATT_SEL */ | ||
60 | #define WM831X_AUX_BKUP_BATT_SEL_SHIFT 10 /* AUX_BKUP_BATT_SEL */ | ||
61 | #define WM831X_AUX_BKUP_BATT_SEL_WIDTH 1 /* AUX_BKUP_BATT_SEL */ | ||
62 | #define WM831X_AUX_WALL_SEL 0x0200 /* AUX_WALL_SEL */ | ||
63 | #define WM831X_AUX_WALL_SEL_MASK 0x0200 /* AUX_WALL_SEL */ | ||
64 | #define WM831X_AUX_WALL_SEL_SHIFT 9 /* AUX_WALL_SEL */ | ||
65 | #define WM831X_AUX_WALL_SEL_WIDTH 1 /* AUX_WALL_SEL */ | ||
66 | #define WM831X_AUX_BATT_SEL 0x0100 /* AUX_BATT_SEL */ | ||
67 | #define WM831X_AUX_BATT_SEL_MASK 0x0100 /* AUX_BATT_SEL */ | ||
68 | #define WM831X_AUX_BATT_SEL_SHIFT 8 /* AUX_BATT_SEL */ | ||
69 | #define WM831X_AUX_BATT_SEL_WIDTH 1 /* AUX_BATT_SEL */ | ||
70 | #define WM831X_AUX_USB_SEL 0x0080 /* AUX_USB_SEL */ | ||
71 | #define WM831X_AUX_USB_SEL_MASK 0x0080 /* AUX_USB_SEL */ | ||
72 | #define WM831X_AUX_USB_SEL_SHIFT 7 /* AUX_USB_SEL */ | ||
73 | #define WM831X_AUX_USB_SEL_WIDTH 1 /* AUX_USB_SEL */ | ||
74 | #define WM831X_AUX_SYSVDD_SEL 0x0040 /* AUX_SYSVDD_SEL */ | ||
75 | #define WM831X_AUX_SYSVDD_SEL_MASK 0x0040 /* AUX_SYSVDD_SEL */ | ||
76 | #define WM831X_AUX_SYSVDD_SEL_SHIFT 6 /* AUX_SYSVDD_SEL */ | ||
77 | #define WM831X_AUX_SYSVDD_SEL_WIDTH 1 /* AUX_SYSVDD_SEL */ | ||
78 | #define WM831X_AUX_BATT_TEMP_SEL 0x0020 /* AUX_BATT_TEMP_SEL */ | ||
79 | #define WM831X_AUX_BATT_TEMP_SEL_MASK 0x0020 /* AUX_BATT_TEMP_SEL */ | ||
80 | #define WM831X_AUX_BATT_TEMP_SEL_SHIFT 5 /* AUX_BATT_TEMP_SEL */ | ||
81 | #define WM831X_AUX_BATT_TEMP_SEL_WIDTH 1 /* AUX_BATT_TEMP_SEL */ | ||
82 | #define WM831X_AUX_CHIP_TEMP_SEL 0x0010 /* AUX_CHIP_TEMP_SEL */ | ||
83 | #define WM831X_AUX_CHIP_TEMP_SEL_MASK 0x0010 /* AUX_CHIP_TEMP_SEL */ | ||
84 | #define WM831X_AUX_CHIP_TEMP_SEL_SHIFT 4 /* AUX_CHIP_TEMP_SEL */ | ||
85 | #define WM831X_AUX_CHIP_TEMP_SEL_WIDTH 1 /* AUX_CHIP_TEMP_SEL */ | ||
86 | #define WM831X_AUX_AUX4_SEL 0x0008 /* AUX_AUX4_SEL */ | ||
87 | #define WM831X_AUX_AUX4_SEL_MASK 0x0008 /* AUX_AUX4_SEL */ | ||
88 | #define WM831X_AUX_AUX4_SEL_SHIFT 3 /* AUX_AUX4_SEL */ | ||
89 | #define WM831X_AUX_AUX4_SEL_WIDTH 1 /* AUX_AUX4_SEL */ | ||
90 | #define WM831X_AUX_AUX3_SEL 0x0004 /* AUX_AUX3_SEL */ | ||
91 | #define WM831X_AUX_AUX3_SEL_MASK 0x0004 /* AUX_AUX3_SEL */ | ||
92 | #define WM831X_AUX_AUX3_SEL_SHIFT 2 /* AUX_AUX3_SEL */ | ||
93 | #define WM831X_AUX_AUX3_SEL_WIDTH 1 /* AUX_AUX3_SEL */ | ||
94 | #define WM831X_AUX_AUX2_SEL 0x0002 /* AUX_AUX2_SEL */ | ||
95 | #define WM831X_AUX_AUX2_SEL_MASK 0x0002 /* AUX_AUX2_SEL */ | ||
96 | #define WM831X_AUX_AUX2_SEL_SHIFT 1 /* AUX_AUX2_SEL */ | ||
97 | #define WM831X_AUX_AUX2_SEL_WIDTH 1 /* AUX_AUX2_SEL */ | ||
98 | #define WM831X_AUX_AUX1_SEL 0x0001 /* AUX_AUX1_SEL */ | ||
99 | #define WM831X_AUX_AUX1_SEL_MASK 0x0001 /* AUX_AUX1_SEL */ | ||
100 | #define WM831X_AUX_AUX1_SEL_SHIFT 0 /* AUX_AUX1_SEL */ | ||
101 | #define WM831X_AUX_AUX1_SEL_WIDTH 1 /* AUX_AUX1_SEL */ | ||
102 | |||
103 | /* | ||
104 | * R16432 (0x4030) - Comparator Control | ||
105 | */ | ||
106 | #define WM831X_DCOMP4_STS 0x0800 /* DCOMP4_STS */ | ||
107 | #define WM831X_DCOMP4_STS_MASK 0x0800 /* DCOMP4_STS */ | ||
108 | #define WM831X_DCOMP4_STS_SHIFT 11 /* DCOMP4_STS */ | ||
109 | #define WM831X_DCOMP4_STS_WIDTH 1 /* DCOMP4_STS */ | ||
110 | #define WM831X_DCOMP3_STS 0x0400 /* DCOMP3_STS */ | ||
111 | #define WM831X_DCOMP3_STS_MASK 0x0400 /* DCOMP3_STS */ | ||
112 | #define WM831X_DCOMP3_STS_SHIFT 10 /* DCOMP3_STS */ | ||
113 | #define WM831X_DCOMP3_STS_WIDTH 1 /* DCOMP3_STS */ | ||
114 | #define WM831X_DCOMP2_STS 0x0200 /* DCOMP2_STS */ | ||
115 | #define WM831X_DCOMP2_STS_MASK 0x0200 /* DCOMP2_STS */ | ||
116 | #define WM831X_DCOMP2_STS_SHIFT 9 /* DCOMP2_STS */ | ||
117 | #define WM831X_DCOMP2_STS_WIDTH 1 /* DCOMP2_STS */ | ||
118 | #define WM831X_DCOMP1_STS 0x0100 /* DCOMP1_STS */ | ||
119 | #define WM831X_DCOMP1_STS_MASK 0x0100 /* DCOMP1_STS */ | ||
120 | #define WM831X_DCOMP1_STS_SHIFT 8 /* DCOMP1_STS */ | ||
121 | #define WM831X_DCOMP1_STS_WIDTH 1 /* DCOMP1_STS */ | ||
122 | #define WM831X_DCMP4_ENA 0x0008 /* DCMP4_ENA */ | ||
123 | #define WM831X_DCMP4_ENA_MASK 0x0008 /* DCMP4_ENA */ | ||
124 | #define WM831X_DCMP4_ENA_SHIFT 3 /* DCMP4_ENA */ | ||
125 | #define WM831X_DCMP4_ENA_WIDTH 1 /* DCMP4_ENA */ | ||
126 | #define WM831X_DCMP3_ENA 0x0004 /* DCMP3_ENA */ | ||
127 | #define WM831X_DCMP3_ENA_MASK 0x0004 /* DCMP3_ENA */ | ||
128 | #define WM831X_DCMP3_ENA_SHIFT 2 /* DCMP3_ENA */ | ||
129 | #define WM831X_DCMP3_ENA_WIDTH 1 /* DCMP3_ENA */ | ||
130 | #define WM831X_DCMP2_ENA 0x0002 /* DCMP2_ENA */ | ||
131 | #define WM831X_DCMP2_ENA_MASK 0x0002 /* DCMP2_ENA */ | ||
132 | #define WM831X_DCMP2_ENA_SHIFT 1 /* DCMP2_ENA */ | ||
133 | #define WM831X_DCMP2_ENA_WIDTH 1 /* DCMP2_ENA */ | ||
134 | #define WM831X_DCMP1_ENA 0x0001 /* DCMP1_ENA */ | ||
135 | #define WM831X_DCMP1_ENA_MASK 0x0001 /* DCMP1_ENA */ | ||
136 | #define WM831X_DCMP1_ENA_SHIFT 0 /* DCMP1_ENA */ | ||
137 | #define WM831X_DCMP1_ENA_WIDTH 1 /* DCMP1_ENA */ | ||
138 | |||
139 | /* | ||
140 | * R16433 (0x4031) - Comparator 1 | ||
141 | */ | ||
142 | #define WM831X_DCMP1_SRC_MASK 0xE000 /* DCMP1_SRC - [15:13] */ | ||
143 | #define WM831X_DCMP1_SRC_SHIFT 13 /* DCMP1_SRC - [15:13] */ | ||
144 | #define WM831X_DCMP1_SRC_WIDTH 3 /* DCMP1_SRC - [15:13] */ | ||
145 | #define WM831X_DCMP1_GT 0x1000 /* DCMP1_GT */ | ||
146 | #define WM831X_DCMP1_GT_MASK 0x1000 /* DCMP1_GT */ | ||
147 | #define WM831X_DCMP1_GT_SHIFT 12 /* DCMP1_GT */ | ||
148 | #define WM831X_DCMP1_GT_WIDTH 1 /* DCMP1_GT */ | ||
149 | #define WM831X_DCMP1_THR_MASK 0x0FFF /* DCMP1_THR - [11:0] */ | ||
150 | #define WM831X_DCMP1_THR_SHIFT 0 /* DCMP1_THR - [11:0] */ | ||
151 | #define WM831X_DCMP1_THR_WIDTH 12 /* DCMP1_THR - [11:0] */ | ||
152 | |||
153 | /* | ||
154 | * R16434 (0x4032) - Comparator 2 | ||
155 | */ | ||
156 | #define WM831X_DCMP2_SRC_MASK 0xE000 /* DCMP2_SRC - [15:13] */ | ||
157 | #define WM831X_DCMP2_SRC_SHIFT 13 /* DCMP2_SRC - [15:13] */ | ||
158 | #define WM831X_DCMP2_SRC_WIDTH 3 /* DCMP2_SRC - [15:13] */ | ||
159 | #define WM831X_DCMP2_GT 0x1000 /* DCMP2_GT */ | ||
160 | #define WM831X_DCMP2_GT_MASK 0x1000 /* DCMP2_GT */ | ||
161 | #define WM831X_DCMP2_GT_SHIFT 12 /* DCMP2_GT */ | ||
162 | #define WM831X_DCMP2_GT_WIDTH 1 /* DCMP2_GT */ | ||
163 | #define WM831X_DCMP2_THR_MASK 0x0FFF /* DCMP2_THR - [11:0] */ | ||
164 | #define WM831X_DCMP2_THR_SHIFT 0 /* DCMP2_THR - [11:0] */ | ||
165 | #define WM831X_DCMP2_THR_WIDTH 12 /* DCMP2_THR - [11:0] */ | ||
166 | |||
167 | /* | ||
168 | * R16435 (0x4033) - Comparator 3 | ||
169 | */ | ||
170 | #define WM831X_DCMP3_SRC_MASK 0xE000 /* DCMP3_SRC - [15:13] */ | ||
171 | #define WM831X_DCMP3_SRC_SHIFT 13 /* DCMP3_SRC - [15:13] */ | ||
172 | #define WM831X_DCMP3_SRC_WIDTH 3 /* DCMP3_SRC - [15:13] */ | ||
173 | #define WM831X_DCMP3_GT 0x1000 /* DCMP3_GT */ | ||
174 | #define WM831X_DCMP3_GT_MASK 0x1000 /* DCMP3_GT */ | ||
175 | #define WM831X_DCMP3_GT_SHIFT 12 /* DCMP3_GT */ | ||
176 | #define WM831X_DCMP3_GT_WIDTH 1 /* DCMP3_GT */ | ||
177 | #define WM831X_DCMP3_THR_MASK 0x0FFF /* DCMP3_THR - [11:0] */ | ||
178 | #define WM831X_DCMP3_THR_SHIFT 0 /* DCMP3_THR - [11:0] */ | ||
179 | #define WM831X_DCMP3_THR_WIDTH 12 /* DCMP3_THR - [11:0] */ | ||
180 | |||
181 | /* | ||
182 | * R16436 (0x4034) - Comparator 4 | ||
183 | */ | ||
184 | #define WM831X_DCMP4_SRC_MASK 0xE000 /* DCMP4_SRC - [15:13] */ | ||
185 | #define WM831X_DCMP4_SRC_SHIFT 13 /* DCMP4_SRC - [15:13] */ | ||
186 | #define WM831X_DCMP4_SRC_WIDTH 3 /* DCMP4_SRC - [15:13] */ | ||
187 | #define WM831X_DCMP4_GT 0x1000 /* DCMP4_GT */ | ||
188 | #define WM831X_DCMP4_GT_MASK 0x1000 /* DCMP4_GT */ | ||
189 | #define WM831X_DCMP4_GT_SHIFT 12 /* DCMP4_GT */ | ||
190 | #define WM831X_DCMP4_GT_WIDTH 1 /* DCMP4_GT */ | ||
191 | #define WM831X_DCMP4_THR_MASK 0x0FFF /* DCMP4_THR - [11:0] */ | ||
192 | #define WM831X_DCMP4_THR_SHIFT 0 /* DCMP4_THR - [11:0] */ | ||
193 | #define WM831X_DCMP4_THR_WIDTH 12 /* DCMP4_THR - [11:0] */ | ||
194 | |||
195 | #define WM831X_AUX_CAL_FACTOR 0xfff | ||
196 | #define WM831X_AUX_CAL_NOMINAL 0x222 | ||
197 | |||
198 | enum wm831x_auxadc { | ||
199 | WM831X_AUX_CAL = 15, | ||
200 | WM831X_AUX_BKUP_BATT = 10, | ||
201 | WM831X_AUX_WALL = 9, | ||
202 | WM831X_AUX_BATT = 8, | ||
203 | WM831X_AUX_USB = 7, | ||
204 | WM831X_AUX_SYSVDD = 6, | ||
205 | WM831X_AUX_BATT_TEMP = 5, | ||
206 | WM831X_AUX_CHIP_TEMP = 4, | ||
207 | WM831X_AUX_AUX4 = 3, | ||
208 | WM831X_AUX_AUX3 = 2, | ||
209 | WM831X_AUX_AUX2 = 1, | ||
210 | WM831X_AUX_AUX1 = 0, | ||
211 | }; | ||
212 | |||
213 | int wm831x_auxadc_read(struct wm831x *wm831x, enum wm831x_auxadc input); | ||
214 | int wm831x_auxadc_read_uv(struct wm831x *wm831x, enum wm831x_auxadc input); | ||
215 | |||
216 | #endif | ||
diff --git a/include/linux/mfd/wm831x/core.h b/include/linux/mfd/wm831x/core.h new file mode 100644 index 000000000000..91eb493bf14c --- /dev/null +++ b/include/linux/mfd/wm831x/core.h | |||
@@ -0,0 +1,289 @@ | |||
1 | /* | ||
2 | * include/linux/mfd/wm831x/core.h -- Core interface for WM831x | ||
3 | * | ||
4 | * Copyright 2009 Wolfson Microelectronics PLC. | ||
5 | * | ||
6 | * Author: Mark Brown <broonie@opensource.wolfsonmicro.com> | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify it | ||
9 | * under the terms of the GNU General Public License as published by the | ||
10 | * Free Software Foundation; either version 2 of the License, or (at your | ||
11 | * option) any later version. | ||
12 | * | ||
13 | */ | ||
14 | |||
15 | #ifndef __MFD_WM831X_CORE_H__ | ||
16 | #define __MFD_WM831X_CORE_H__ | ||
17 | |||
18 | #include <linux/interrupt.h> | ||
19 | #include <linux/workqueue.h> | ||
20 | |||
21 | /* | ||
22 | * Register values. | ||
23 | */ | ||
24 | #define WM831X_RESET_ID 0x00 | ||
25 | #define WM831X_REVISION 0x01 | ||
26 | #define WM831X_PARENT_ID 0x4000 | ||
27 | #define WM831X_SYSVDD_CONTROL 0x4001 | ||
28 | #define WM831X_THERMAL_MONITORING 0x4002 | ||
29 | #define WM831X_POWER_STATE 0x4003 | ||
30 | #define WM831X_WATCHDOG 0x4004 | ||
31 | #define WM831X_ON_PIN_CONTROL 0x4005 | ||
32 | #define WM831X_RESET_CONTROL 0x4006 | ||
33 | #define WM831X_CONTROL_INTERFACE 0x4007 | ||
34 | #define WM831X_SECURITY_KEY 0x4008 | ||
35 | #define WM831X_SOFTWARE_SCRATCH 0x4009 | ||
36 | #define WM831X_OTP_CONTROL 0x400A | ||
37 | #define WM831X_GPIO_LEVEL 0x400C | ||
38 | #define WM831X_SYSTEM_STATUS 0x400D | ||
39 | #define WM831X_ON_SOURCE 0x400E | ||
40 | #define WM831X_OFF_SOURCE 0x400F | ||
41 | #define WM831X_SYSTEM_INTERRUPTS 0x4010 | ||
42 | #define WM831X_INTERRUPT_STATUS_1 0x4011 | ||
43 | #define WM831X_INTERRUPT_STATUS_2 0x4012 | ||
44 | #define WM831X_INTERRUPT_STATUS_3 0x4013 | ||
45 | #define WM831X_INTERRUPT_STATUS_4 0x4014 | ||
46 | #define WM831X_INTERRUPT_STATUS_5 0x4015 | ||
47 | #define WM831X_IRQ_CONFIG 0x4017 | ||
48 | #define WM831X_SYSTEM_INTERRUPTS_MASK 0x4018 | ||
49 | #define WM831X_INTERRUPT_STATUS_1_MASK 0x4019 | ||
50 | #define WM831X_INTERRUPT_STATUS_2_MASK 0x401A | ||
51 | #define WM831X_INTERRUPT_STATUS_3_MASK 0x401B | ||
52 | #define WM831X_INTERRUPT_STATUS_4_MASK 0x401C | ||
53 | #define WM831X_INTERRUPT_STATUS_5_MASK 0x401D | ||
54 | #define WM831X_RTC_WRITE_COUNTER 0x4020 | ||
55 | #define WM831X_RTC_TIME_1 0x4021 | ||
56 | #define WM831X_RTC_TIME_2 0x4022 | ||
57 | #define WM831X_RTC_ALARM_1 0x4023 | ||
58 | #define WM831X_RTC_ALARM_2 0x4024 | ||
59 | #define WM831X_RTC_CONTROL 0x4025 | ||
60 | #define WM831X_RTC_TRIM 0x4026 | ||
61 | #define WM831X_TOUCH_CONTROL_1 0x4028 | ||
62 | #define WM831X_TOUCH_CONTROL_2 0x4029 | ||
63 | #define WM831X_TOUCH_DATA_X 0x402A | ||
64 | #define WM831X_TOUCH_DATA_Y 0x402B | ||
65 | #define WM831X_TOUCH_DATA_Z 0x402C | ||
66 | #define WM831X_AUXADC_DATA 0x402D | ||
67 | #define WM831X_AUXADC_CONTROL 0x402E | ||
68 | #define WM831X_AUXADC_SOURCE 0x402F | ||
69 | #define WM831X_COMPARATOR_CONTROL 0x4030 | ||
70 | #define WM831X_COMPARATOR_1 0x4031 | ||
71 | #define WM831X_COMPARATOR_2 0x4032 | ||
72 | #define WM831X_COMPARATOR_3 0x4033 | ||
73 | #define WM831X_COMPARATOR_4 0x4034 | ||
74 | #define WM831X_GPIO1_CONTROL 0x4038 | ||
75 | #define WM831X_GPIO2_CONTROL 0x4039 | ||
76 | #define WM831X_GPIO3_CONTROL 0x403A | ||
77 | #define WM831X_GPIO4_CONTROL 0x403B | ||
78 | #define WM831X_GPIO5_CONTROL 0x403C | ||
79 | #define WM831X_GPIO6_CONTROL 0x403D | ||
80 | #define WM831X_GPIO7_CONTROL 0x403E | ||
81 | #define WM831X_GPIO8_CONTROL 0x403F | ||
82 | #define WM831X_GPIO9_CONTROL 0x4040 | ||
83 | #define WM831X_GPIO10_CONTROL 0x4041 | ||
84 | #define WM831X_GPIO11_CONTROL 0x4042 | ||
85 | #define WM831X_GPIO12_CONTROL 0x4043 | ||
86 | #define WM831X_GPIO13_CONTROL 0x4044 | ||
87 | #define WM831X_GPIO14_CONTROL 0x4045 | ||
88 | #define WM831X_GPIO15_CONTROL 0x4046 | ||
89 | #define WM831X_GPIO16_CONTROL 0x4047 | ||
90 | #define WM831X_CHARGER_CONTROL_1 0x4048 | ||
91 | #define WM831X_CHARGER_CONTROL_2 0x4049 | ||
92 | #define WM831X_CHARGER_STATUS 0x404A | ||
93 | #define WM831X_BACKUP_CHARGER_CONTROL 0x404B | ||
94 | #define WM831X_STATUS_LED_1 0x404C | ||
95 | #define WM831X_STATUS_LED_2 0x404D | ||
96 | #define WM831X_CURRENT_SINK_1 0x404E | ||
97 | #define WM831X_CURRENT_SINK_2 0x404F | ||
98 | #define WM831X_DCDC_ENABLE 0x4050 | ||
99 | #define WM831X_LDO_ENABLE 0x4051 | ||
100 | #define WM831X_DCDC_STATUS 0x4052 | ||
101 | #define WM831X_LDO_STATUS 0x4053 | ||
102 | #define WM831X_DCDC_UV_STATUS 0x4054 | ||
103 | #define WM831X_LDO_UV_STATUS 0x4055 | ||
104 | #define WM831X_DC1_CONTROL_1 0x4056 | ||
105 | #define WM831X_DC1_CONTROL_2 0x4057 | ||
106 | #define WM831X_DC1_ON_CONFIG 0x4058 | ||
107 | #define WM831X_DC1_SLEEP_CONTROL 0x4059 | ||
108 | #define WM831X_DC1_DVS_CONTROL 0x405A | ||
109 | #define WM831X_DC2_CONTROL_1 0x405B | ||
110 | #define WM831X_DC2_CONTROL_2 0x405C | ||
111 | #define WM831X_DC2_ON_CONFIG 0x405D | ||
112 | #define WM831X_DC2_SLEEP_CONTROL 0x405E | ||
113 | #define WM831X_DC2_DVS_CONTROL 0x405F | ||
114 | #define WM831X_DC3_CONTROL_1 0x4060 | ||
115 | #define WM831X_DC3_CONTROL_2 0x4061 | ||
116 | #define WM831X_DC3_ON_CONFIG 0x4062 | ||
117 | #define WM831X_DC3_SLEEP_CONTROL 0x4063 | ||
118 | #define WM831X_DC4_CONTROL 0x4064 | ||
119 | #define WM831X_DC4_SLEEP_CONTROL 0x4065 | ||
120 | #define WM831X_EPE1_CONTROL 0x4066 | ||
121 | #define WM831X_EPE2_CONTROL 0x4067 | ||
122 | #define WM831X_LDO1_CONTROL 0x4068 | ||
123 | #define WM831X_LDO1_ON_CONTROL 0x4069 | ||
124 | #define WM831X_LDO1_SLEEP_CONTROL 0x406A | ||
125 | #define WM831X_LDO2_CONTROL 0x406B | ||
126 | #define WM831X_LDO2_ON_CONTROL 0x406C | ||
127 | #define WM831X_LDO2_SLEEP_CONTROL 0x406D | ||
128 | #define WM831X_LDO3_CONTROL 0x406E | ||
129 | #define WM831X_LDO3_ON_CONTROL 0x406F | ||
130 | #define WM831X_LDO3_SLEEP_CONTROL 0x4070 | ||
131 | #define WM831X_LDO4_CONTROL 0x4071 | ||
132 | #define WM831X_LDO4_ON_CONTROL 0x4072 | ||
133 | #define WM831X_LDO4_SLEEP_CONTROL 0x4073 | ||
134 | #define WM831X_LDO5_CONTROL 0x4074 | ||
135 | #define WM831X_LDO5_ON_CONTROL 0x4075 | ||
136 | #define WM831X_LDO5_SLEEP_CONTROL 0x4076 | ||
137 | #define WM831X_LDO6_CONTROL 0x4077 | ||
138 | #define WM831X_LDO6_ON_CONTROL 0x4078 | ||
139 | #define WM831X_LDO6_SLEEP_CONTROL 0x4079 | ||
140 | #define WM831X_LDO7_CONTROL 0x407A | ||
141 | #define WM831X_LDO7_ON_CONTROL 0x407B | ||
142 | #define WM831X_LDO7_SLEEP_CONTROL 0x407C | ||
143 | #define WM831X_LDO8_CONTROL 0x407D | ||
144 | #define WM831X_LDO8_ON_CONTROL 0x407E | ||
145 | #define WM831X_LDO8_SLEEP_CONTROL 0x407F | ||
146 | #define WM831X_LDO9_CONTROL 0x4080 | ||
147 | #define WM831X_LDO9_ON_CONTROL 0x4081 | ||
148 | #define WM831X_LDO9_SLEEP_CONTROL 0x4082 | ||
149 | #define WM831X_LDO10_CONTROL 0x4083 | ||
150 | #define WM831X_LDO10_ON_CONTROL 0x4084 | ||
151 | #define WM831X_LDO10_SLEEP_CONTROL 0x4085 | ||
152 | #define WM831X_LDO11_ON_CONTROL 0x4087 | ||
153 | #define WM831X_LDO11_SLEEP_CONTROL 0x4088 | ||
154 | #define WM831X_POWER_GOOD_SOURCE_1 0x408E | ||
155 | #define WM831X_POWER_GOOD_SOURCE_2 0x408F | ||
156 | #define WM831X_CLOCK_CONTROL_1 0x4090 | ||
157 | #define WM831X_CLOCK_CONTROL_2 0x4091 | ||
158 | #define WM831X_FLL_CONTROL_1 0x4092 | ||
159 | #define WM831X_FLL_CONTROL_2 0x4093 | ||
160 | #define WM831X_FLL_CONTROL_3 0x4094 | ||
161 | #define WM831X_FLL_CONTROL_4 0x4095 | ||
162 | #define WM831X_FLL_CONTROL_5 0x4096 | ||
163 | #define WM831X_UNIQUE_ID_1 0x7800 | ||
164 | #define WM831X_UNIQUE_ID_2 0x7801 | ||
165 | #define WM831X_UNIQUE_ID_3 0x7802 | ||
166 | #define WM831X_UNIQUE_ID_4 0x7803 | ||
167 | #define WM831X_UNIQUE_ID_5 0x7804 | ||
168 | #define WM831X_UNIQUE_ID_6 0x7805 | ||
169 | #define WM831X_UNIQUE_ID_7 0x7806 | ||
170 | #define WM831X_UNIQUE_ID_8 0x7807 | ||
171 | #define WM831X_FACTORY_OTP_ID 0x7808 | ||
172 | #define WM831X_FACTORY_OTP_1 0x7809 | ||
173 | #define WM831X_FACTORY_OTP_2 0x780A | ||
174 | #define WM831X_FACTORY_OTP_3 0x780B | ||
175 | #define WM831X_FACTORY_OTP_4 0x780C | ||
176 | #define WM831X_FACTORY_OTP_5 0x780D | ||
177 | #define WM831X_CUSTOMER_OTP_ID 0x7810 | ||
178 | #define WM831X_DC1_OTP_CONTROL 0x7811 | ||
179 | #define WM831X_DC2_OTP_CONTROL 0x7812 | ||
180 | #define WM831X_DC3_OTP_CONTROL 0x7813 | ||
181 | #define WM831X_LDO1_2_OTP_CONTROL 0x7814 | ||
182 | #define WM831X_LDO3_4_OTP_CONTROL 0x7815 | ||
183 | #define WM831X_LDO5_6_OTP_CONTROL 0x7816 | ||
184 | #define WM831X_LDO7_8_OTP_CONTROL 0x7817 | ||
185 | #define WM831X_LDO9_10_OTP_CONTROL 0x7818 | ||
186 | #define WM831X_LDO11_EPE_CONTROL 0x7819 | ||
187 | #define WM831X_GPIO1_OTP_CONTROL 0x781A | ||
188 | #define WM831X_GPIO2_OTP_CONTROL 0x781B | ||
189 | #define WM831X_GPIO3_OTP_CONTROL 0x781C | ||
190 | #define WM831X_GPIO4_OTP_CONTROL 0x781D | ||
191 | #define WM831X_GPIO5_OTP_CONTROL 0x781E | ||
192 | #define WM831X_GPIO6_OTP_CONTROL 0x781F | ||
193 | #define WM831X_DBE_CHECK_DATA 0x7827 | ||
194 | |||
195 | /* | ||
196 | * R0 (0x00) - Reset ID | ||
197 | */ | ||
198 | #define WM831X_CHIP_ID_MASK 0xFFFF /* CHIP_ID - [15:0] */ | ||
199 | #define WM831X_CHIP_ID_SHIFT 0 /* CHIP_ID - [15:0] */ | ||
200 | #define WM831X_CHIP_ID_WIDTH 16 /* CHIP_ID - [15:0] */ | ||
201 | |||
202 | /* | ||
203 | * R1 (0x01) - Revision | ||
204 | */ | ||
205 | #define WM831X_PARENT_REV_MASK 0xFF00 /* PARENT_REV - [15:8] */ | ||
206 | #define WM831X_PARENT_REV_SHIFT 8 /* PARENT_REV - [15:8] */ | ||
207 | #define WM831X_PARENT_REV_WIDTH 8 /* PARENT_REV - [15:8] */ | ||
208 | #define WM831X_CHILD_REV_MASK 0x00FF /* CHILD_REV - [7:0] */ | ||
209 | #define WM831X_CHILD_REV_SHIFT 0 /* CHILD_REV - [7:0] */ | ||
210 | #define WM831X_CHILD_REV_WIDTH 8 /* CHILD_REV - [7:0] */ | ||
211 | |||
212 | /* | ||
213 | * R16384 (0x4000) - Parent ID | ||
214 | */ | ||
215 | #define WM831X_PARENT_ID_MASK 0xFFFF /* PARENT_ID - [15:0] */ | ||
216 | #define WM831X_PARENT_ID_SHIFT 0 /* PARENT_ID - [15:0] */ | ||
217 | #define WM831X_PARENT_ID_WIDTH 16 /* PARENT_ID - [15:0] */ | ||
218 | |||
219 | /* | ||
220 | * R16389 (0x4005) - ON Pin Control | ||
221 | */ | ||
222 | #define WM831X_ON_PIN_SECACT_MASK 0x0300 /* ON_PIN_SECACT - [9:8] */ | ||
223 | #define WM831X_ON_PIN_SECACT_SHIFT 8 /* ON_PIN_SECACT - [9:8] */ | ||
224 | #define WM831X_ON_PIN_SECACT_WIDTH 2 /* ON_PIN_SECACT - [9:8] */ | ||
225 | #define WM831X_ON_PIN_PRIMACT_MASK 0x0030 /* ON_PIN_PRIMACT - [5:4] */ | ||
226 | #define WM831X_ON_PIN_PRIMACT_SHIFT 4 /* ON_PIN_PRIMACT - [5:4] */ | ||
227 | #define WM831X_ON_PIN_PRIMACT_WIDTH 2 /* ON_PIN_PRIMACT - [5:4] */ | ||
228 | #define WM831X_ON_PIN_STS 0x0008 /* ON_PIN_STS */ | ||
229 | #define WM831X_ON_PIN_STS_MASK 0x0008 /* ON_PIN_STS */ | ||
230 | #define WM831X_ON_PIN_STS_SHIFT 3 /* ON_PIN_STS */ | ||
231 | #define WM831X_ON_PIN_STS_WIDTH 1 /* ON_PIN_STS */ | ||
232 | #define WM831X_ON_PIN_TO_MASK 0x0003 /* ON_PIN_TO - [1:0] */ | ||
233 | #define WM831X_ON_PIN_TO_SHIFT 0 /* ON_PIN_TO - [1:0] */ | ||
234 | #define WM831X_ON_PIN_TO_WIDTH 2 /* ON_PIN_TO - [1:0] */ | ||
235 | |||
236 | struct regulator_dev; | ||
237 | |||
238 | struct wm831x { | ||
239 | struct mutex io_lock; | ||
240 | |||
241 | struct device *dev; | ||
242 | int (*read_dev)(struct wm831x *wm831x, unsigned short reg, | ||
243 | int bytes, void *dest); | ||
244 | int (*write_dev)(struct wm831x *wm831x, unsigned short reg, | ||
245 | int bytes, void *src); | ||
246 | |||
247 | void *control_data; | ||
248 | |||
249 | int irq; /* Our chip IRQ */ | ||
250 | struct mutex irq_lock; | ||
251 | struct workqueue_struct *irq_wq; | ||
252 | struct work_struct irq_work; | ||
253 | unsigned int irq_base; | ||
254 | int irq_masks[5]; | ||
255 | |||
256 | struct mutex auxadc_lock; | ||
257 | |||
258 | /* The WM831x has a security key blocking access to certain | ||
259 | * registers. The mutex is taken by the accessors for locking | ||
260 | * and unlocking the security key, locked is used to fail | ||
261 | * writes if the lock is held. | ||
262 | */ | ||
263 | struct mutex key_lock; | ||
264 | unsigned int locked:1; | ||
265 | }; | ||
266 | |||
267 | /* Device I/O API */ | ||
268 | int wm831x_reg_read(struct wm831x *wm831x, unsigned short reg); | ||
269 | int wm831x_reg_write(struct wm831x *wm831x, unsigned short reg, | ||
270 | unsigned short val); | ||
271 | void wm831x_reg_lock(struct wm831x *wm831x); | ||
272 | int wm831x_reg_unlock(struct wm831x *wm831x); | ||
273 | int wm831x_set_bits(struct wm831x *wm831x, unsigned short reg, | ||
274 | unsigned short mask, unsigned short val); | ||
275 | int wm831x_bulk_read(struct wm831x *wm831x, unsigned short reg, | ||
276 | int count, u16 *buf); | ||
277 | |||
278 | int wm831x_irq_init(struct wm831x *wm831x, int irq); | ||
279 | void wm831x_irq_exit(struct wm831x *wm831x); | ||
280 | |||
281 | int __must_check wm831x_request_irq(struct wm831x *wm831x, | ||
282 | unsigned int irq, irq_handler_t handler, | ||
283 | unsigned long flags, const char *name, | ||
284 | void *dev); | ||
285 | void wm831x_free_irq(struct wm831x *wm831x, unsigned int, void *); | ||
286 | void wm831x_disable_irq(struct wm831x *wm831x, int irq); | ||
287 | void wm831x_enable_irq(struct wm831x *wm831x, int irq); | ||
288 | |||
289 | #endif | ||
diff --git a/include/linux/mfd/wm831x/gpio.h b/include/linux/mfd/wm831x/gpio.h new file mode 100644 index 000000000000..2835614af0e3 --- /dev/null +++ b/include/linux/mfd/wm831x/gpio.h | |||
@@ -0,0 +1,55 @@ | |||
1 | /* | ||
2 | * include/linux/mfd/wm831x/gpio.h -- GPIO for WM831x | ||
3 | * | ||
4 | * Copyright 2009 Wolfson Microelectronics PLC. | ||
5 | * | ||
6 | * Author: Mark Brown <broonie@opensource.wolfsonmicro.com> | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify it | ||
9 | * under the terms of the GNU General Public License as published by the | ||
10 | * Free Software Foundation; either version 2 of the License, or (at your | ||
11 | * option) any later version. | ||
12 | * | ||
13 | */ | ||
14 | |||
15 | #ifndef __MFD_WM831X_GPIO_H__ | ||
16 | #define __MFD_WM831X_GPIO_H__ | ||
17 | |||
18 | /* | ||
19 | * R16440-16455 (0x4038-0x4047) - GPIOx Control | ||
20 | */ | ||
21 | #define WM831X_GPN_DIR 0x8000 /* GPN_DIR */ | ||
22 | #define WM831X_GPN_DIR_MASK 0x8000 /* GPN_DIR */ | ||
23 | #define WM831X_GPN_DIR_SHIFT 15 /* GPN_DIR */ | ||
24 | #define WM831X_GPN_DIR_WIDTH 1 /* GPN_DIR */ | ||
25 | #define WM831X_GPN_PULL_MASK 0x6000 /* GPN_PULL - [14:13] */ | ||
26 | #define WM831X_GPN_PULL_SHIFT 13 /* GPN_PULL - [14:13] */ | ||
27 | #define WM831X_GPN_PULL_WIDTH 2 /* GPN_PULL - [14:13] */ | ||
28 | #define WM831X_GPN_INT_MODE 0x1000 /* GPN_INT_MODE */ | ||
29 | #define WM831X_GPN_INT_MODE_MASK 0x1000 /* GPN_INT_MODE */ | ||
30 | #define WM831X_GPN_INT_MODE_SHIFT 12 /* GPN_INT_MODE */ | ||
31 | #define WM831X_GPN_INT_MODE_WIDTH 1 /* GPN_INT_MODE */ | ||
32 | #define WM831X_GPN_PWR_DOM 0x0800 /* GPN_PWR_DOM */ | ||
33 | #define WM831X_GPN_PWR_DOM_MASK 0x0800 /* GPN_PWR_DOM */ | ||
34 | #define WM831X_GPN_PWR_DOM_SHIFT 11 /* GPN_PWR_DOM */ | ||
35 | #define WM831X_GPN_PWR_DOM_WIDTH 1 /* GPN_PWR_DOM */ | ||
36 | #define WM831X_GPN_POL 0x0400 /* GPN_POL */ | ||
37 | #define WM831X_GPN_POL_MASK 0x0400 /* GPN_POL */ | ||
38 | #define WM831X_GPN_POL_SHIFT 10 /* GPN_POL */ | ||
39 | #define WM831X_GPN_POL_WIDTH 1 /* GPN_POL */ | ||
40 | #define WM831X_GPN_OD 0x0200 /* GPN_OD */ | ||
41 | #define WM831X_GPN_OD_MASK 0x0200 /* GPN_OD */ | ||
42 | #define WM831X_GPN_OD_SHIFT 9 /* GPN_OD */ | ||
43 | #define WM831X_GPN_OD_WIDTH 1 /* GPN_OD */ | ||
44 | #define WM831X_GPN_TRI 0x0080 /* GPN_TRI */ | ||
45 | #define WM831X_GPN_TRI_MASK 0x0080 /* GPN_TRI */ | ||
46 | #define WM831X_GPN_TRI_SHIFT 7 /* GPN_TRI */ | ||
47 | #define WM831X_GPN_TRI_WIDTH 1 /* GPN_TRI */ | ||
48 | #define WM831X_GPN_FN_MASK 0x000F /* GPN_FN - [3:0] */ | ||
49 | #define WM831X_GPN_FN_SHIFT 0 /* GPN_FN - [3:0] */ | ||
50 | #define WM831X_GPN_FN_WIDTH 4 /* GPN_FN - [3:0] */ | ||
51 | |||
52 | #define WM831X_GPIO_PULL_NONE (0 << WM831X_GPN_PULL_SHIFT) | ||
53 | #define WM831X_GPIO_PULL_DOWN (1 << WM831X_GPN_PULL_SHIFT) | ||
54 | #define WM831X_GPIO_PULL_UP (2 << WM831X_GPN_PULL_SHIFT) | ||
55 | #endif | ||
diff --git a/include/linux/mfd/wm831x/irq.h b/include/linux/mfd/wm831x/irq.h new file mode 100644 index 000000000000..3a8c97656fda --- /dev/null +++ b/include/linux/mfd/wm831x/irq.h | |||
@@ -0,0 +1,764 @@ | |||
1 | /* | ||
2 | * include/linux/mfd/wm831x/irq.h -- Interrupt controller for WM831x | ||
3 | * | ||
4 | * Copyright 2009 Wolfson Microelectronics PLC. | ||
5 | * | ||
6 | * Author: Mark Brown <broonie@opensource.wolfsonmicro.com> | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify it | ||
9 | * under the terms of the GNU General Public License as published by the | ||
10 | * Free Software Foundation; either version 2 of the License, or (at your | ||
11 | * option) any later version. | ||
12 | * | ||
13 | */ | ||
14 | |||
15 | #ifndef __MFD_WM831X_IRQ_H__ | ||
16 | #define __MFD_WM831X_IRQ_H__ | ||
17 | |||
18 | /* Interrupt number assignments within Linux */ | ||
19 | #define WM831X_IRQ_TEMP_THW 0 | ||
20 | #define WM831X_IRQ_GPIO_1 1 | ||
21 | #define WM831X_IRQ_GPIO_2 2 | ||
22 | #define WM831X_IRQ_GPIO_3 3 | ||
23 | #define WM831X_IRQ_GPIO_4 4 | ||
24 | #define WM831X_IRQ_GPIO_5 5 | ||
25 | #define WM831X_IRQ_GPIO_6 6 | ||
26 | #define WM831X_IRQ_GPIO_7 7 | ||
27 | #define WM831X_IRQ_GPIO_8 8 | ||
28 | #define WM831X_IRQ_GPIO_9 9 | ||
29 | #define WM831X_IRQ_GPIO_10 10 | ||
30 | #define WM831X_IRQ_GPIO_11 11 | ||
31 | #define WM831X_IRQ_GPIO_12 12 | ||
32 | #define WM831X_IRQ_GPIO_13 13 | ||
33 | #define WM831X_IRQ_GPIO_14 14 | ||
34 | #define WM831X_IRQ_GPIO_15 15 | ||
35 | #define WM831X_IRQ_GPIO_16 16 | ||
36 | #define WM831X_IRQ_ON 17 | ||
37 | #define WM831X_IRQ_PPM_SYSLO 18 | ||
38 | #define WM831X_IRQ_PPM_PWR_SRC 19 | ||
39 | #define WM831X_IRQ_PPM_USB_CURR 20 | ||
40 | #define WM831X_IRQ_WDOG_TO 21 | ||
41 | #define WM831X_IRQ_RTC_PER 22 | ||
42 | #define WM831X_IRQ_RTC_ALM 23 | ||
43 | #define WM831X_IRQ_CHG_BATT_HOT 24 | ||
44 | #define WM831X_IRQ_CHG_BATT_COLD 25 | ||
45 | #define WM831X_IRQ_CHG_BATT_FAIL 26 | ||
46 | #define WM831X_IRQ_CHG_OV 27 | ||
47 | #define WM831X_IRQ_CHG_END 29 | ||
48 | #define WM831X_IRQ_CHG_TO 30 | ||
49 | #define WM831X_IRQ_CHG_MODE 31 | ||
50 | #define WM831X_IRQ_CHG_START 32 | ||
51 | #define WM831X_IRQ_TCHDATA 33 | ||
52 | #define WM831X_IRQ_TCHPD 34 | ||
53 | #define WM831X_IRQ_AUXADC_DATA 35 | ||
54 | #define WM831X_IRQ_AUXADC_DCOMP1 36 | ||
55 | #define WM831X_IRQ_AUXADC_DCOMP2 37 | ||
56 | #define WM831X_IRQ_AUXADC_DCOMP3 38 | ||
57 | #define WM831X_IRQ_AUXADC_DCOMP4 39 | ||
58 | #define WM831X_IRQ_CS1 40 | ||
59 | #define WM831X_IRQ_CS2 41 | ||
60 | #define WM831X_IRQ_HC_DC1 42 | ||
61 | #define WM831X_IRQ_HC_DC2 43 | ||
62 | #define WM831X_IRQ_UV_LDO1 44 | ||
63 | #define WM831X_IRQ_UV_LDO2 45 | ||
64 | #define WM831X_IRQ_UV_LDO3 46 | ||
65 | #define WM831X_IRQ_UV_LDO4 47 | ||
66 | #define WM831X_IRQ_UV_LDO5 48 | ||
67 | #define WM831X_IRQ_UV_LDO6 49 | ||
68 | #define WM831X_IRQ_UV_LDO7 50 | ||
69 | #define WM831X_IRQ_UV_LDO8 51 | ||
70 | #define WM831X_IRQ_UV_LDO9 52 | ||
71 | #define WM831X_IRQ_UV_LDO10 53 | ||
72 | #define WM831X_IRQ_UV_DC1 54 | ||
73 | #define WM831X_IRQ_UV_DC2 55 | ||
74 | #define WM831X_IRQ_UV_DC3 56 | ||
75 | #define WM831X_IRQ_UV_DC4 57 | ||
76 | |||
77 | #define WM831X_NUM_IRQS 58 | ||
78 | |||
79 | /* | ||
80 | * R16400 (0x4010) - System Interrupts | ||
81 | */ | ||
82 | #define WM831X_PS_INT 0x8000 /* PS_INT */ | ||
83 | #define WM831X_PS_INT_MASK 0x8000 /* PS_INT */ | ||
84 | #define WM831X_PS_INT_SHIFT 15 /* PS_INT */ | ||
85 | #define WM831X_PS_INT_WIDTH 1 /* PS_INT */ | ||
86 | #define WM831X_TEMP_INT 0x4000 /* TEMP_INT */ | ||
87 | #define WM831X_TEMP_INT_MASK 0x4000 /* TEMP_INT */ | ||
88 | #define WM831X_TEMP_INT_SHIFT 14 /* TEMP_INT */ | ||
89 | #define WM831X_TEMP_INT_WIDTH 1 /* TEMP_INT */ | ||
90 | #define WM831X_GP_INT 0x2000 /* GP_INT */ | ||
91 | #define WM831X_GP_INT_MASK 0x2000 /* GP_INT */ | ||
92 | #define WM831X_GP_INT_SHIFT 13 /* GP_INT */ | ||
93 | #define WM831X_GP_INT_WIDTH 1 /* GP_INT */ | ||
94 | #define WM831X_ON_PIN_INT 0x1000 /* ON_PIN_INT */ | ||
95 | #define WM831X_ON_PIN_INT_MASK 0x1000 /* ON_PIN_INT */ | ||
96 | #define WM831X_ON_PIN_INT_SHIFT 12 /* ON_PIN_INT */ | ||
97 | #define WM831X_ON_PIN_INT_WIDTH 1 /* ON_PIN_INT */ | ||
98 | #define WM831X_WDOG_INT 0x0800 /* WDOG_INT */ | ||
99 | #define WM831X_WDOG_INT_MASK 0x0800 /* WDOG_INT */ | ||
100 | #define WM831X_WDOG_INT_SHIFT 11 /* WDOG_INT */ | ||
101 | #define WM831X_WDOG_INT_WIDTH 1 /* WDOG_INT */ | ||
102 | #define WM831X_TCHDATA_INT 0x0400 /* TCHDATA_INT */ | ||
103 | #define WM831X_TCHDATA_INT_MASK 0x0400 /* TCHDATA_INT */ | ||
104 | #define WM831X_TCHDATA_INT_SHIFT 10 /* TCHDATA_INT */ | ||
105 | #define WM831X_TCHDATA_INT_WIDTH 1 /* TCHDATA_INT */ | ||
106 | #define WM831X_TCHPD_INT 0x0200 /* TCHPD_INT */ | ||
107 | #define WM831X_TCHPD_INT_MASK 0x0200 /* TCHPD_INT */ | ||
108 | #define WM831X_TCHPD_INT_SHIFT 9 /* TCHPD_INT */ | ||
109 | #define WM831X_TCHPD_INT_WIDTH 1 /* TCHPD_INT */ | ||
110 | #define WM831X_AUXADC_INT 0x0100 /* AUXADC_INT */ | ||
111 | #define WM831X_AUXADC_INT_MASK 0x0100 /* AUXADC_INT */ | ||
112 | #define WM831X_AUXADC_INT_SHIFT 8 /* AUXADC_INT */ | ||
113 | #define WM831X_AUXADC_INT_WIDTH 1 /* AUXADC_INT */ | ||
114 | #define WM831X_PPM_INT 0x0080 /* PPM_INT */ | ||
115 | #define WM831X_PPM_INT_MASK 0x0080 /* PPM_INT */ | ||
116 | #define WM831X_PPM_INT_SHIFT 7 /* PPM_INT */ | ||
117 | #define WM831X_PPM_INT_WIDTH 1 /* PPM_INT */ | ||
118 | #define WM831X_CS_INT 0x0040 /* CS_INT */ | ||
119 | #define WM831X_CS_INT_MASK 0x0040 /* CS_INT */ | ||
120 | #define WM831X_CS_INT_SHIFT 6 /* CS_INT */ | ||
121 | #define WM831X_CS_INT_WIDTH 1 /* CS_INT */ | ||
122 | #define WM831X_RTC_INT 0x0020 /* RTC_INT */ | ||
123 | #define WM831X_RTC_INT_MASK 0x0020 /* RTC_INT */ | ||
124 | #define WM831X_RTC_INT_SHIFT 5 /* RTC_INT */ | ||
125 | #define WM831X_RTC_INT_WIDTH 1 /* RTC_INT */ | ||
126 | #define WM831X_OTP_INT 0x0010 /* OTP_INT */ | ||
127 | #define WM831X_OTP_INT_MASK 0x0010 /* OTP_INT */ | ||
128 | #define WM831X_OTP_INT_SHIFT 4 /* OTP_INT */ | ||
129 | #define WM831X_OTP_INT_WIDTH 1 /* OTP_INT */ | ||
130 | #define WM831X_CHILD_INT 0x0008 /* CHILD_INT */ | ||
131 | #define WM831X_CHILD_INT_MASK 0x0008 /* CHILD_INT */ | ||
132 | #define WM831X_CHILD_INT_SHIFT 3 /* CHILD_INT */ | ||
133 | #define WM831X_CHILD_INT_WIDTH 1 /* CHILD_INT */ | ||
134 | #define WM831X_CHG_INT 0x0004 /* CHG_INT */ | ||
135 | #define WM831X_CHG_INT_MASK 0x0004 /* CHG_INT */ | ||
136 | #define WM831X_CHG_INT_SHIFT 2 /* CHG_INT */ | ||
137 | #define WM831X_CHG_INT_WIDTH 1 /* CHG_INT */ | ||
138 | #define WM831X_HC_INT 0x0002 /* HC_INT */ | ||
139 | #define WM831X_HC_INT_MASK 0x0002 /* HC_INT */ | ||
140 | #define WM831X_HC_INT_SHIFT 1 /* HC_INT */ | ||
141 | #define WM831X_HC_INT_WIDTH 1 /* HC_INT */ | ||
142 | #define WM831X_UV_INT 0x0001 /* UV_INT */ | ||
143 | #define WM831X_UV_INT_MASK 0x0001 /* UV_INT */ | ||
144 | #define WM831X_UV_INT_SHIFT 0 /* UV_INT */ | ||
145 | #define WM831X_UV_INT_WIDTH 1 /* UV_INT */ | ||
146 | |||
147 | /* | ||
148 | * R16401 (0x4011) - Interrupt Status 1 | ||
149 | */ | ||
150 | #define WM831X_PPM_SYSLO_EINT 0x8000 /* PPM_SYSLO_EINT */ | ||
151 | #define WM831X_PPM_SYSLO_EINT_MASK 0x8000 /* PPM_SYSLO_EINT */ | ||
152 | #define WM831X_PPM_SYSLO_EINT_SHIFT 15 /* PPM_SYSLO_EINT */ | ||
153 | #define WM831X_PPM_SYSLO_EINT_WIDTH 1 /* PPM_SYSLO_EINT */ | ||
154 | #define WM831X_PPM_PWR_SRC_EINT 0x4000 /* PPM_PWR_SRC_EINT */ | ||
155 | #define WM831X_PPM_PWR_SRC_EINT_MASK 0x4000 /* PPM_PWR_SRC_EINT */ | ||
156 | #define WM831X_PPM_PWR_SRC_EINT_SHIFT 14 /* PPM_PWR_SRC_EINT */ | ||
157 | #define WM831X_PPM_PWR_SRC_EINT_WIDTH 1 /* PPM_PWR_SRC_EINT */ | ||
158 | #define WM831X_PPM_USB_CURR_EINT 0x2000 /* PPM_USB_CURR_EINT */ | ||
159 | #define WM831X_PPM_USB_CURR_EINT_MASK 0x2000 /* PPM_USB_CURR_EINT */ | ||
160 | #define WM831X_PPM_USB_CURR_EINT_SHIFT 13 /* PPM_USB_CURR_EINT */ | ||
161 | #define WM831X_PPM_USB_CURR_EINT_WIDTH 1 /* PPM_USB_CURR_EINT */ | ||
162 | #define WM831X_ON_PIN_EINT 0x1000 /* ON_PIN_EINT */ | ||
163 | #define WM831X_ON_PIN_EINT_MASK 0x1000 /* ON_PIN_EINT */ | ||
164 | #define WM831X_ON_PIN_EINT_SHIFT 12 /* ON_PIN_EINT */ | ||
165 | #define WM831X_ON_PIN_EINT_WIDTH 1 /* ON_PIN_EINT */ | ||
166 | #define WM831X_WDOG_TO_EINT 0x0800 /* WDOG_TO_EINT */ | ||
167 | #define WM831X_WDOG_TO_EINT_MASK 0x0800 /* WDOG_TO_EINT */ | ||
168 | #define WM831X_WDOG_TO_EINT_SHIFT 11 /* WDOG_TO_EINT */ | ||
169 | #define WM831X_WDOG_TO_EINT_WIDTH 1 /* WDOG_TO_EINT */ | ||
170 | #define WM831X_TCHDATA_EINT 0x0400 /* TCHDATA_EINT */ | ||
171 | #define WM831X_TCHDATA_EINT_MASK 0x0400 /* TCHDATA_EINT */ | ||
172 | #define WM831X_TCHDATA_EINT_SHIFT 10 /* TCHDATA_EINT */ | ||
173 | #define WM831X_TCHDATA_EINT_WIDTH 1 /* TCHDATA_EINT */ | ||
174 | #define WM831X_TCHPD_EINT 0x0200 /* TCHPD_EINT */ | ||
175 | #define WM831X_TCHPD_EINT_MASK 0x0200 /* TCHPD_EINT */ | ||
176 | #define WM831X_TCHPD_EINT_SHIFT 9 /* TCHPD_EINT */ | ||
177 | #define WM831X_TCHPD_EINT_WIDTH 1 /* TCHPD_EINT */ | ||
178 | #define WM831X_AUXADC_DATA_EINT 0x0100 /* AUXADC_DATA_EINT */ | ||
179 | #define WM831X_AUXADC_DATA_EINT_MASK 0x0100 /* AUXADC_DATA_EINT */ | ||
180 | #define WM831X_AUXADC_DATA_EINT_SHIFT 8 /* AUXADC_DATA_EINT */ | ||
181 | #define WM831X_AUXADC_DATA_EINT_WIDTH 1 /* AUXADC_DATA_EINT */ | ||
182 | #define WM831X_AUXADC_DCOMP4_EINT 0x0080 /* AUXADC_DCOMP4_EINT */ | ||
183 | #define WM831X_AUXADC_DCOMP4_EINT_MASK 0x0080 /* AUXADC_DCOMP4_EINT */ | ||
184 | #define WM831X_AUXADC_DCOMP4_EINT_SHIFT 7 /* AUXADC_DCOMP4_EINT */ | ||
185 | #define WM831X_AUXADC_DCOMP4_EINT_WIDTH 1 /* AUXADC_DCOMP4_EINT */ | ||
186 | #define WM831X_AUXADC_DCOMP3_EINT 0x0040 /* AUXADC_DCOMP3_EINT */ | ||
187 | #define WM831X_AUXADC_DCOMP3_EINT_MASK 0x0040 /* AUXADC_DCOMP3_EINT */ | ||
188 | #define WM831X_AUXADC_DCOMP3_EINT_SHIFT 6 /* AUXADC_DCOMP3_EINT */ | ||
189 | #define WM831X_AUXADC_DCOMP3_EINT_WIDTH 1 /* AUXADC_DCOMP3_EINT */ | ||
190 | #define WM831X_AUXADC_DCOMP2_EINT 0x0020 /* AUXADC_DCOMP2_EINT */ | ||
191 | #define WM831X_AUXADC_DCOMP2_EINT_MASK 0x0020 /* AUXADC_DCOMP2_EINT */ | ||
192 | #define WM831X_AUXADC_DCOMP2_EINT_SHIFT 5 /* AUXADC_DCOMP2_EINT */ | ||
193 | #define WM831X_AUXADC_DCOMP2_EINT_WIDTH 1 /* AUXADC_DCOMP2_EINT */ | ||
194 | #define WM831X_AUXADC_DCOMP1_EINT 0x0010 /* AUXADC_DCOMP1_EINT */ | ||
195 | #define WM831X_AUXADC_DCOMP1_EINT_MASK 0x0010 /* AUXADC_DCOMP1_EINT */ | ||
196 | #define WM831X_AUXADC_DCOMP1_EINT_SHIFT 4 /* AUXADC_DCOMP1_EINT */ | ||
197 | #define WM831X_AUXADC_DCOMP1_EINT_WIDTH 1 /* AUXADC_DCOMP1_EINT */ | ||
198 | #define WM831X_RTC_PER_EINT 0x0008 /* RTC_PER_EINT */ | ||
199 | #define WM831X_RTC_PER_EINT_MASK 0x0008 /* RTC_PER_EINT */ | ||
200 | #define WM831X_RTC_PER_EINT_SHIFT 3 /* RTC_PER_EINT */ | ||
201 | #define WM831X_RTC_PER_EINT_WIDTH 1 /* RTC_PER_EINT */ | ||
202 | #define WM831X_RTC_ALM_EINT 0x0004 /* RTC_ALM_EINT */ | ||
203 | #define WM831X_RTC_ALM_EINT_MASK 0x0004 /* RTC_ALM_EINT */ | ||
204 | #define WM831X_RTC_ALM_EINT_SHIFT 2 /* RTC_ALM_EINT */ | ||
205 | #define WM831X_RTC_ALM_EINT_WIDTH 1 /* RTC_ALM_EINT */ | ||
206 | #define WM831X_TEMP_THW_EINT 0x0002 /* TEMP_THW_EINT */ | ||
207 | #define WM831X_TEMP_THW_EINT_MASK 0x0002 /* TEMP_THW_EINT */ | ||
208 | #define WM831X_TEMP_THW_EINT_SHIFT 1 /* TEMP_THW_EINT */ | ||
209 | #define WM831X_TEMP_THW_EINT_WIDTH 1 /* TEMP_THW_EINT */ | ||
210 | |||
211 | /* | ||
212 | * R16402 (0x4012) - Interrupt Status 2 | ||
213 | */ | ||
214 | #define WM831X_CHG_BATT_HOT_EINT 0x8000 /* CHG_BATT_HOT_EINT */ | ||
215 | #define WM831X_CHG_BATT_HOT_EINT_MASK 0x8000 /* CHG_BATT_HOT_EINT */ | ||
216 | #define WM831X_CHG_BATT_HOT_EINT_SHIFT 15 /* CHG_BATT_HOT_EINT */ | ||
217 | #define WM831X_CHG_BATT_HOT_EINT_WIDTH 1 /* CHG_BATT_HOT_EINT */ | ||
218 | #define WM831X_CHG_BATT_COLD_EINT 0x4000 /* CHG_BATT_COLD_EINT */ | ||
219 | #define WM831X_CHG_BATT_COLD_EINT_MASK 0x4000 /* CHG_BATT_COLD_EINT */ | ||
220 | #define WM831X_CHG_BATT_COLD_EINT_SHIFT 14 /* CHG_BATT_COLD_EINT */ | ||
221 | #define WM831X_CHG_BATT_COLD_EINT_WIDTH 1 /* CHG_BATT_COLD_EINT */ | ||
222 | #define WM831X_CHG_BATT_FAIL_EINT 0x2000 /* CHG_BATT_FAIL_EINT */ | ||
223 | #define WM831X_CHG_BATT_FAIL_EINT_MASK 0x2000 /* CHG_BATT_FAIL_EINT */ | ||
224 | #define WM831X_CHG_BATT_FAIL_EINT_SHIFT 13 /* CHG_BATT_FAIL_EINT */ | ||
225 | #define WM831X_CHG_BATT_FAIL_EINT_WIDTH 1 /* CHG_BATT_FAIL_EINT */ | ||
226 | #define WM831X_CHG_OV_EINT 0x1000 /* CHG_OV_EINT */ | ||
227 | #define WM831X_CHG_OV_EINT_MASK 0x1000 /* CHG_OV_EINT */ | ||
228 | #define WM831X_CHG_OV_EINT_SHIFT 12 /* CHG_OV_EINT */ | ||
229 | #define WM831X_CHG_OV_EINT_WIDTH 1 /* CHG_OV_EINT */ | ||
230 | #define WM831X_CHG_END_EINT 0x0800 /* CHG_END_EINT */ | ||
231 | #define WM831X_CHG_END_EINT_MASK 0x0800 /* CHG_END_EINT */ | ||
232 | #define WM831X_CHG_END_EINT_SHIFT 11 /* CHG_END_EINT */ | ||
233 | #define WM831X_CHG_END_EINT_WIDTH 1 /* CHG_END_EINT */ | ||
234 | #define WM831X_CHG_TO_EINT 0x0400 /* CHG_TO_EINT */ | ||
235 | #define WM831X_CHG_TO_EINT_MASK 0x0400 /* CHG_TO_EINT */ | ||
236 | #define WM831X_CHG_TO_EINT_SHIFT 10 /* CHG_TO_EINT */ | ||
237 | #define WM831X_CHG_TO_EINT_WIDTH 1 /* CHG_TO_EINT */ | ||
238 | #define WM831X_CHG_MODE_EINT 0x0200 /* CHG_MODE_EINT */ | ||
239 | #define WM831X_CHG_MODE_EINT_MASK 0x0200 /* CHG_MODE_EINT */ | ||
240 | #define WM831X_CHG_MODE_EINT_SHIFT 9 /* CHG_MODE_EINT */ | ||
241 | #define WM831X_CHG_MODE_EINT_WIDTH 1 /* CHG_MODE_EINT */ | ||
242 | #define WM831X_CHG_START_EINT 0x0100 /* CHG_START_EINT */ | ||
243 | #define WM831X_CHG_START_EINT_MASK 0x0100 /* CHG_START_EINT */ | ||
244 | #define WM831X_CHG_START_EINT_SHIFT 8 /* CHG_START_EINT */ | ||
245 | #define WM831X_CHG_START_EINT_WIDTH 1 /* CHG_START_EINT */ | ||
246 | #define WM831X_CS2_EINT 0x0080 /* CS2_EINT */ | ||
247 | #define WM831X_CS2_EINT_MASK 0x0080 /* CS2_EINT */ | ||
248 | #define WM831X_CS2_EINT_SHIFT 7 /* CS2_EINT */ | ||
249 | #define WM831X_CS2_EINT_WIDTH 1 /* CS2_EINT */ | ||
250 | #define WM831X_CS1_EINT 0x0040 /* CS1_EINT */ | ||
251 | #define WM831X_CS1_EINT_MASK 0x0040 /* CS1_EINT */ | ||
252 | #define WM831X_CS1_EINT_SHIFT 6 /* CS1_EINT */ | ||
253 | #define WM831X_CS1_EINT_WIDTH 1 /* CS1_EINT */ | ||
254 | #define WM831X_OTP_CMD_END_EINT 0x0020 /* OTP_CMD_END_EINT */ | ||
255 | #define WM831X_OTP_CMD_END_EINT_MASK 0x0020 /* OTP_CMD_END_EINT */ | ||
256 | #define WM831X_OTP_CMD_END_EINT_SHIFT 5 /* OTP_CMD_END_EINT */ | ||
257 | #define WM831X_OTP_CMD_END_EINT_WIDTH 1 /* OTP_CMD_END_EINT */ | ||
258 | #define WM831X_OTP_ERR_EINT 0x0010 /* OTP_ERR_EINT */ | ||
259 | #define WM831X_OTP_ERR_EINT_MASK 0x0010 /* OTP_ERR_EINT */ | ||
260 | #define WM831X_OTP_ERR_EINT_SHIFT 4 /* OTP_ERR_EINT */ | ||
261 | #define WM831X_OTP_ERR_EINT_WIDTH 1 /* OTP_ERR_EINT */ | ||
262 | #define WM831X_PS_POR_EINT 0x0004 /* PS_POR_EINT */ | ||
263 | #define WM831X_PS_POR_EINT_MASK 0x0004 /* PS_POR_EINT */ | ||
264 | #define WM831X_PS_POR_EINT_SHIFT 2 /* PS_POR_EINT */ | ||
265 | #define WM831X_PS_POR_EINT_WIDTH 1 /* PS_POR_EINT */ | ||
266 | #define WM831X_PS_SLEEP_OFF_EINT 0x0002 /* PS_SLEEP_OFF_EINT */ | ||
267 | #define WM831X_PS_SLEEP_OFF_EINT_MASK 0x0002 /* PS_SLEEP_OFF_EINT */ | ||
268 | #define WM831X_PS_SLEEP_OFF_EINT_SHIFT 1 /* PS_SLEEP_OFF_EINT */ | ||
269 | #define WM831X_PS_SLEEP_OFF_EINT_WIDTH 1 /* PS_SLEEP_OFF_EINT */ | ||
270 | #define WM831X_PS_ON_WAKE_EINT 0x0001 /* PS_ON_WAKE_EINT */ | ||
271 | #define WM831X_PS_ON_WAKE_EINT_MASK 0x0001 /* PS_ON_WAKE_EINT */ | ||
272 | #define WM831X_PS_ON_WAKE_EINT_SHIFT 0 /* PS_ON_WAKE_EINT */ | ||
273 | #define WM831X_PS_ON_WAKE_EINT_WIDTH 1 /* PS_ON_WAKE_EINT */ | ||
274 | |||
275 | /* | ||
276 | * R16403 (0x4013) - Interrupt Status 3 | ||
277 | */ | ||
278 | #define WM831X_UV_LDO10_EINT 0x0200 /* UV_LDO10_EINT */ | ||
279 | #define WM831X_UV_LDO10_EINT_MASK 0x0200 /* UV_LDO10_EINT */ | ||
280 | #define WM831X_UV_LDO10_EINT_SHIFT 9 /* UV_LDO10_EINT */ | ||
281 | #define WM831X_UV_LDO10_EINT_WIDTH 1 /* UV_LDO10_EINT */ | ||
282 | #define WM831X_UV_LDO9_EINT 0x0100 /* UV_LDO9_EINT */ | ||
283 | #define WM831X_UV_LDO9_EINT_MASK 0x0100 /* UV_LDO9_EINT */ | ||
284 | #define WM831X_UV_LDO9_EINT_SHIFT 8 /* UV_LDO9_EINT */ | ||
285 | #define WM831X_UV_LDO9_EINT_WIDTH 1 /* UV_LDO9_EINT */ | ||
286 | #define WM831X_UV_LDO8_EINT 0x0080 /* UV_LDO8_EINT */ | ||
287 | #define WM831X_UV_LDO8_EINT_MASK 0x0080 /* UV_LDO8_EINT */ | ||
288 | #define WM831X_UV_LDO8_EINT_SHIFT 7 /* UV_LDO8_EINT */ | ||
289 | #define WM831X_UV_LDO8_EINT_WIDTH 1 /* UV_LDO8_EINT */ | ||
290 | #define WM831X_UV_LDO7_EINT 0x0040 /* UV_LDO7_EINT */ | ||
291 | #define WM831X_UV_LDO7_EINT_MASK 0x0040 /* UV_LDO7_EINT */ | ||
292 | #define WM831X_UV_LDO7_EINT_SHIFT 6 /* UV_LDO7_EINT */ | ||
293 | #define WM831X_UV_LDO7_EINT_WIDTH 1 /* UV_LDO7_EINT */ | ||
294 | #define WM831X_UV_LDO6_EINT 0x0020 /* UV_LDO6_EINT */ | ||
295 | #define WM831X_UV_LDO6_EINT_MASK 0x0020 /* UV_LDO6_EINT */ | ||
296 | #define WM831X_UV_LDO6_EINT_SHIFT 5 /* UV_LDO6_EINT */ | ||
297 | #define WM831X_UV_LDO6_EINT_WIDTH 1 /* UV_LDO6_EINT */ | ||
298 | #define WM831X_UV_LDO5_EINT 0x0010 /* UV_LDO5_EINT */ | ||
299 | #define WM831X_UV_LDO5_EINT_MASK 0x0010 /* UV_LDO5_EINT */ | ||
300 | #define WM831X_UV_LDO5_EINT_SHIFT 4 /* UV_LDO5_EINT */ | ||
301 | #define WM831X_UV_LDO5_EINT_WIDTH 1 /* UV_LDO5_EINT */ | ||
302 | #define WM831X_UV_LDO4_EINT 0x0008 /* UV_LDO4_EINT */ | ||
303 | #define WM831X_UV_LDO4_EINT_MASK 0x0008 /* UV_LDO4_EINT */ | ||
304 | #define WM831X_UV_LDO4_EINT_SHIFT 3 /* UV_LDO4_EINT */ | ||
305 | #define WM831X_UV_LDO4_EINT_WIDTH 1 /* UV_LDO4_EINT */ | ||
306 | #define WM831X_UV_LDO3_EINT 0x0004 /* UV_LDO3_EINT */ | ||
307 | #define WM831X_UV_LDO3_EINT_MASK 0x0004 /* UV_LDO3_EINT */ | ||
308 | #define WM831X_UV_LDO3_EINT_SHIFT 2 /* UV_LDO3_EINT */ | ||
309 | #define WM831X_UV_LDO3_EINT_WIDTH 1 /* UV_LDO3_EINT */ | ||
310 | #define WM831X_UV_LDO2_EINT 0x0002 /* UV_LDO2_EINT */ | ||
311 | #define WM831X_UV_LDO2_EINT_MASK 0x0002 /* UV_LDO2_EINT */ | ||
312 | #define WM831X_UV_LDO2_EINT_SHIFT 1 /* UV_LDO2_EINT */ | ||
313 | #define WM831X_UV_LDO2_EINT_WIDTH 1 /* UV_LDO2_EINT */ | ||
314 | #define WM831X_UV_LDO1_EINT 0x0001 /* UV_LDO1_EINT */ | ||
315 | #define WM831X_UV_LDO1_EINT_MASK 0x0001 /* UV_LDO1_EINT */ | ||
316 | #define WM831X_UV_LDO1_EINT_SHIFT 0 /* UV_LDO1_EINT */ | ||
317 | #define WM831X_UV_LDO1_EINT_WIDTH 1 /* UV_LDO1_EINT */ | ||
318 | |||
319 | /* | ||
320 | * R16404 (0x4014) - Interrupt Status 4 | ||
321 | */ | ||
322 | #define WM831X_HC_DC2_EINT 0x0200 /* HC_DC2_EINT */ | ||
323 | #define WM831X_HC_DC2_EINT_MASK 0x0200 /* HC_DC2_EINT */ | ||
324 | #define WM831X_HC_DC2_EINT_SHIFT 9 /* HC_DC2_EINT */ | ||
325 | #define WM831X_HC_DC2_EINT_WIDTH 1 /* HC_DC2_EINT */ | ||
326 | #define WM831X_HC_DC1_EINT 0x0100 /* HC_DC1_EINT */ | ||
327 | #define WM831X_HC_DC1_EINT_MASK 0x0100 /* HC_DC1_EINT */ | ||
328 | #define WM831X_HC_DC1_EINT_SHIFT 8 /* HC_DC1_EINT */ | ||
329 | #define WM831X_HC_DC1_EINT_WIDTH 1 /* HC_DC1_EINT */ | ||
330 | #define WM831X_UV_DC4_EINT 0x0008 /* UV_DC4_EINT */ | ||
331 | #define WM831X_UV_DC4_EINT_MASK 0x0008 /* UV_DC4_EINT */ | ||
332 | #define WM831X_UV_DC4_EINT_SHIFT 3 /* UV_DC4_EINT */ | ||
333 | #define WM831X_UV_DC4_EINT_WIDTH 1 /* UV_DC4_EINT */ | ||
334 | #define WM831X_UV_DC3_EINT 0x0004 /* UV_DC3_EINT */ | ||
335 | #define WM831X_UV_DC3_EINT_MASK 0x0004 /* UV_DC3_EINT */ | ||
336 | #define WM831X_UV_DC3_EINT_SHIFT 2 /* UV_DC3_EINT */ | ||
337 | #define WM831X_UV_DC3_EINT_WIDTH 1 /* UV_DC3_EINT */ | ||
338 | #define WM831X_UV_DC2_EINT 0x0002 /* UV_DC2_EINT */ | ||
339 | #define WM831X_UV_DC2_EINT_MASK 0x0002 /* UV_DC2_EINT */ | ||
340 | #define WM831X_UV_DC2_EINT_SHIFT 1 /* UV_DC2_EINT */ | ||
341 | #define WM831X_UV_DC2_EINT_WIDTH 1 /* UV_DC2_EINT */ | ||
342 | #define WM831X_UV_DC1_EINT 0x0001 /* UV_DC1_EINT */ | ||
343 | #define WM831X_UV_DC1_EINT_MASK 0x0001 /* UV_DC1_EINT */ | ||
344 | #define WM831X_UV_DC1_EINT_SHIFT 0 /* UV_DC1_EINT */ | ||
345 | #define WM831X_UV_DC1_EINT_WIDTH 1 /* UV_DC1_EINT */ | ||
346 | |||
347 | /* | ||
348 | * R16405 (0x4015) - Interrupt Status 5 | ||
349 | */ | ||
350 | #define WM831X_GP16_EINT 0x8000 /* GP16_EINT */ | ||
351 | #define WM831X_GP16_EINT_MASK 0x8000 /* GP16_EINT */ | ||
352 | #define WM831X_GP16_EINT_SHIFT 15 /* GP16_EINT */ | ||
353 | #define WM831X_GP16_EINT_WIDTH 1 /* GP16_EINT */ | ||
354 | #define WM831X_GP15_EINT 0x4000 /* GP15_EINT */ | ||
355 | #define WM831X_GP15_EINT_MASK 0x4000 /* GP15_EINT */ | ||
356 | #define WM831X_GP15_EINT_SHIFT 14 /* GP15_EINT */ | ||
357 | #define WM831X_GP15_EINT_WIDTH 1 /* GP15_EINT */ | ||
358 | #define WM831X_GP14_EINT 0x2000 /* GP14_EINT */ | ||
359 | #define WM831X_GP14_EINT_MASK 0x2000 /* GP14_EINT */ | ||
360 | #define WM831X_GP14_EINT_SHIFT 13 /* GP14_EINT */ | ||
361 | #define WM831X_GP14_EINT_WIDTH 1 /* GP14_EINT */ | ||
362 | #define WM831X_GP13_EINT 0x1000 /* GP13_EINT */ | ||
363 | #define WM831X_GP13_EINT_MASK 0x1000 /* GP13_EINT */ | ||
364 | #define WM831X_GP13_EINT_SHIFT 12 /* GP13_EINT */ | ||
365 | #define WM831X_GP13_EINT_WIDTH 1 /* GP13_EINT */ | ||
366 | #define WM831X_GP12_EINT 0x0800 /* GP12_EINT */ | ||
367 | #define WM831X_GP12_EINT_MASK 0x0800 /* GP12_EINT */ | ||
368 | #define WM831X_GP12_EINT_SHIFT 11 /* GP12_EINT */ | ||
369 | #define WM831X_GP12_EINT_WIDTH 1 /* GP12_EINT */ | ||
370 | #define WM831X_GP11_EINT 0x0400 /* GP11_EINT */ | ||
371 | #define WM831X_GP11_EINT_MASK 0x0400 /* GP11_EINT */ | ||
372 | #define WM831X_GP11_EINT_SHIFT 10 /* GP11_EINT */ | ||
373 | #define WM831X_GP11_EINT_WIDTH 1 /* GP11_EINT */ | ||
374 | #define WM831X_GP10_EINT 0x0200 /* GP10_EINT */ | ||
375 | #define WM831X_GP10_EINT_MASK 0x0200 /* GP10_EINT */ | ||
376 | #define WM831X_GP10_EINT_SHIFT 9 /* GP10_EINT */ | ||
377 | #define WM831X_GP10_EINT_WIDTH 1 /* GP10_EINT */ | ||
378 | #define WM831X_GP9_EINT 0x0100 /* GP9_EINT */ | ||
379 | #define WM831X_GP9_EINT_MASK 0x0100 /* GP9_EINT */ | ||
380 | #define WM831X_GP9_EINT_SHIFT 8 /* GP9_EINT */ | ||
381 | #define WM831X_GP9_EINT_WIDTH 1 /* GP9_EINT */ | ||
382 | #define WM831X_GP8_EINT 0x0080 /* GP8_EINT */ | ||
383 | #define WM831X_GP8_EINT_MASK 0x0080 /* GP8_EINT */ | ||
384 | #define WM831X_GP8_EINT_SHIFT 7 /* GP8_EINT */ | ||
385 | #define WM831X_GP8_EINT_WIDTH 1 /* GP8_EINT */ | ||
386 | #define WM831X_GP7_EINT 0x0040 /* GP7_EINT */ | ||
387 | #define WM831X_GP7_EINT_MASK 0x0040 /* GP7_EINT */ | ||
388 | #define WM831X_GP7_EINT_SHIFT 6 /* GP7_EINT */ | ||
389 | #define WM831X_GP7_EINT_WIDTH 1 /* GP7_EINT */ | ||
390 | #define WM831X_GP6_EINT 0x0020 /* GP6_EINT */ | ||
391 | #define WM831X_GP6_EINT_MASK 0x0020 /* GP6_EINT */ | ||
392 | #define WM831X_GP6_EINT_SHIFT 5 /* GP6_EINT */ | ||
393 | #define WM831X_GP6_EINT_WIDTH 1 /* GP6_EINT */ | ||
394 | #define WM831X_GP5_EINT 0x0010 /* GP5_EINT */ | ||
395 | #define WM831X_GP5_EINT_MASK 0x0010 /* GP5_EINT */ | ||
396 | #define WM831X_GP5_EINT_SHIFT 4 /* GP5_EINT */ | ||
397 | #define WM831X_GP5_EINT_WIDTH 1 /* GP5_EINT */ | ||
398 | #define WM831X_GP4_EINT 0x0008 /* GP4_EINT */ | ||
399 | #define WM831X_GP4_EINT_MASK 0x0008 /* GP4_EINT */ | ||
400 | #define WM831X_GP4_EINT_SHIFT 3 /* GP4_EINT */ | ||
401 | #define WM831X_GP4_EINT_WIDTH 1 /* GP4_EINT */ | ||
402 | #define WM831X_GP3_EINT 0x0004 /* GP3_EINT */ | ||
403 | #define WM831X_GP3_EINT_MASK 0x0004 /* GP3_EINT */ | ||
404 | #define WM831X_GP3_EINT_SHIFT 2 /* GP3_EINT */ | ||
405 | #define WM831X_GP3_EINT_WIDTH 1 /* GP3_EINT */ | ||
406 | #define WM831X_GP2_EINT 0x0002 /* GP2_EINT */ | ||
407 | #define WM831X_GP2_EINT_MASK 0x0002 /* GP2_EINT */ | ||
408 | #define WM831X_GP2_EINT_SHIFT 1 /* GP2_EINT */ | ||
409 | #define WM831X_GP2_EINT_WIDTH 1 /* GP2_EINT */ | ||
410 | #define WM831X_GP1_EINT 0x0001 /* GP1_EINT */ | ||
411 | #define WM831X_GP1_EINT_MASK 0x0001 /* GP1_EINT */ | ||
412 | #define WM831X_GP1_EINT_SHIFT 0 /* GP1_EINT */ | ||
413 | #define WM831X_GP1_EINT_WIDTH 1 /* GP1_EINT */ | ||
414 | |||
415 | /* | ||
416 | * R16407 (0x4017) - IRQ Config | ||
417 | */ | ||
418 | #define WM831X_IRQ_OD 0x0002 /* IRQ_OD */ | ||
419 | #define WM831X_IRQ_OD_MASK 0x0002 /* IRQ_OD */ | ||
420 | #define WM831X_IRQ_OD_SHIFT 1 /* IRQ_OD */ | ||
421 | #define WM831X_IRQ_OD_WIDTH 1 /* IRQ_OD */ | ||
422 | #define WM831X_IM_IRQ 0x0001 /* IM_IRQ */ | ||
423 | #define WM831X_IM_IRQ_MASK 0x0001 /* IM_IRQ */ | ||
424 | #define WM831X_IM_IRQ_SHIFT 0 /* IM_IRQ */ | ||
425 | #define WM831X_IM_IRQ_WIDTH 1 /* IM_IRQ */ | ||
426 | |||
427 | /* | ||
428 | * R16408 (0x4018) - System Interrupts Mask | ||
429 | */ | ||
430 | #define WM831X_IM_PS_INT 0x8000 /* IM_PS_INT */ | ||
431 | #define WM831X_IM_PS_INT_MASK 0x8000 /* IM_PS_INT */ | ||
432 | #define WM831X_IM_PS_INT_SHIFT 15 /* IM_PS_INT */ | ||
433 | #define WM831X_IM_PS_INT_WIDTH 1 /* IM_PS_INT */ | ||
434 | #define WM831X_IM_TEMP_INT 0x4000 /* IM_TEMP_INT */ | ||
435 | #define WM831X_IM_TEMP_INT_MASK 0x4000 /* IM_TEMP_INT */ | ||
436 | #define WM831X_IM_TEMP_INT_SHIFT 14 /* IM_TEMP_INT */ | ||
437 | #define WM831X_IM_TEMP_INT_WIDTH 1 /* IM_TEMP_INT */ | ||
438 | #define WM831X_IM_GP_INT 0x2000 /* IM_GP_INT */ | ||
439 | #define WM831X_IM_GP_INT_MASK 0x2000 /* IM_GP_INT */ | ||
440 | #define WM831X_IM_GP_INT_SHIFT 13 /* IM_GP_INT */ | ||
441 | #define WM831X_IM_GP_INT_WIDTH 1 /* IM_GP_INT */ | ||
442 | #define WM831X_IM_ON_PIN_INT 0x1000 /* IM_ON_PIN_INT */ | ||
443 | #define WM831X_IM_ON_PIN_INT_MASK 0x1000 /* IM_ON_PIN_INT */ | ||
444 | #define WM831X_IM_ON_PIN_INT_SHIFT 12 /* IM_ON_PIN_INT */ | ||
445 | #define WM831X_IM_ON_PIN_INT_WIDTH 1 /* IM_ON_PIN_INT */ | ||
446 | #define WM831X_IM_WDOG_INT 0x0800 /* IM_WDOG_INT */ | ||
447 | #define WM831X_IM_WDOG_INT_MASK 0x0800 /* IM_WDOG_INT */ | ||
448 | #define WM831X_IM_WDOG_INT_SHIFT 11 /* IM_WDOG_INT */ | ||
449 | #define WM831X_IM_WDOG_INT_WIDTH 1 /* IM_WDOG_INT */ | ||
450 | #define WM831X_IM_TCHDATA_INT 0x0400 /* IM_TCHDATA_INT */ | ||
451 | #define WM831X_IM_TCHDATA_INT_MASK 0x0400 /* IM_TCHDATA_INT */ | ||
452 | #define WM831X_IM_TCHDATA_INT_SHIFT 10 /* IM_TCHDATA_INT */ | ||
453 | #define WM831X_IM_TCHDATA_INT_WIDTH 1 /* IM_TCHDATA_INT */ | ||
454 | #define WM831X_IM_TCHPD_INT 0x0200 /* IM_TCHPD_INT */ | ||
455 | #define WM831X_IM_TCHPD_INT_MASK 0x0200 /* IM_TCHPD_INT */ | ||
456 | #define WM831X_IM_TCHPD_INT_SHIFT 9 /* IM_TCHPD_INT */ | ||
457 | #define WM831X_IM_TCHPD_INT_WIDTH 1 /* IM_TCHPD_INT */ | ||
458 | #define WM831X_IM_AUXADC_INT 0x0100 /* IM_AUXADC_INT */ | ||
459 | #define WM831X_IM_AUXADC_INT_MASK 0x0100 /* IM_AUXADC_INT */ | ||
460 | #define WM831X_IM_AUXADC_INT_SHIFT 8 /* IM_AUXADC_INT */ | ||
461 | #define WM831X_IM_AUXADC_INT_WIDTH 1 /* IM_AUXADC_INT */ | ||
462 | #define WM831X_IM_PPM_INT 0x0080 /* IM_PPM_INT */ | ||
463 | #define WM831X_IM_PPM_INT_MASK 0x0080 /* IM_PPM_INT */ | ||
464 | #define WM831X_IM_PPM_INT_SHIFT 7 /* IM_PPM_INT */ | ||
465 | #define WM831X_IM_PPM_INT_WIDTH 1 /* IM_PPM_INT */ | ||
466 | #define WM831X_IM_CS_INT 0x0040 /* IM_CS_INT */ | ||
467 | #define WM831X_IM_CS_INT_MASK 0x0040 /* IM_CS_INT */ | ||
468 | #define WM831X_IM_CS_INT_SHIFT 6 /* IM_CS_INT */ | ||
469 | #define WM831X_IM_CS_INT_WIDTH 1 /* IM_CS_INT */ | ||
470 | #define WM831X_IM_RTC_INT 0x0020 /* IM_RTC_INT */ | ||
471 | #define WM831X_IM_RTC_INT_MASK 0x0020 /* IM_RTC_INT */ | ||
472 | #define WM831X_IM_RTC_INT_SHIFT 5 /* IM_RTC_INT */ | ||
473 | #define WM831X_IM_RTC_INT_WIDTH 1 /* IM_RTC_INT */ | ||
474 | #define WM831X_IM_OTP_INT 0x0010 /* IM_OTP_INT */ | ||
475 | #define WM831X_IM_OTP_INT_MASK 0x0010 /* IM_OTP_INT */ | ||
476 | #define WM831X_IM_OTP_INT_SHIFT 4 /* IM_OTP_INT */ | ||
477 | #define WM831X_IM_OTP_INT_WIDTH 1 /* IM_OTP_INT */ | ||
478 | #define WM831X_IM_CHILD_INT 0x0008 /* IM_CHILD_INT */ | ||
479 | #define WM831X_IM_CHILD_INT_MASK 0x0008 /* IM_CHILD_INT */ | ||
480 | #define WM831X_IM_CHILD_INT_SHIFT 3 /* IM_CHILD_INT */ | ||
481 | #define WM831X_IM_CHILD_INT_WIDTH 1 /* IM_CHILD_INT */ | ||
482 | #define WM831X_IM_CHG_INT 0x0004 /* IM_CHG_INT */ | ||
483 | #define WM831X_IM_CHG_INT_MASK 0x0004 /* IM_CHG_INT */ | ||
484 | #define WM831X_IM_CHG_INT_SHIFT 2 /* IM_CHG_INT */ | ||
485 | #define WM831X_IM_CHG_INT_WIDTH 1 /* IM_CHG_INT */ | ||
486 | #define WM831X_IM_HC_INT 0x0002 /* IM_HC_INT */ | ||
487 | #define WM831X_IM_HC_INT_MASK 0x0002 /* IM_HC_INT */ | ||
488 | #define WM831X_IM_HC_INT_SHIFT 1 /* IM_HC_INT */ | ||
489 | #define WM831X_IM_HC_INT_WIDTH 1 /* IM_HC_INT */ | ||
490 | #define WM831X_IM_UV_INT 0x0001 /* IM_UV_INT */ | ||
491 | #define WM831X_IM_UV_INT_MASK 0x0001 /* IM_UV_INT */ | ||
492 | #define WM831X_IM_UV_INT_SHIFT 0 /* IM_UV_INT */ | ||
493 | #define WM831X_IM_UV_INT_WIDTH 1 /* IM_UV_INT */ | ||
494 | |||
495 | /* | ||
496 | * R16409 (0x4019) - Interrupt Status 1 Mask | ||
497 | */ | ||
498 | #define WM831X_IM_PPM_SYSLO_EINT 0x8000 /* IM_PPM_SYSLO_EINT */ | ||
499 | #define WM831X_IM_PPM_SYSLO_EINT_MASK 0x8000 /* IM_PPM_SYSLO_EINT */ | ||
500 | #define WM831X_IM_PPM_SYSLO_EINT_SHIFT 15 /* IM_PPM_SYSLO_EINT */ | ||
501 | #define WM831X_IM_PPM_SYSLO_EINT_WIDTH 1 /* IM_PPM_SYSLO_EINT */ | ||
502 | #define WM831X_IM_PPM_PWR_SRC_EINT 0x4000 /* IM_PPM_PWR_SRC_EINT */ | ||
503 | #define WM831X_IM_PPM_PWR_SRC_EINT_MASK 0x4000 /* IM_PPM_PWR_SRC_EINT */ | ||
504 | #define WM831X_IM_PPM_PWR_SRC_EINT_SHIFT 14 /* IM_PPM_PWR_SRC_EINT */ | ||
505 | #define WM831X_IM_PPM_PWR_SRC_EINT_WIDTH 1 /* IM_PPM_PWR_SRC_EINT */ | ||
506 | #define WM831X_IM_PPM_USB_CURR_EINT 0x2000 /* IM_PPM_USB_CURR_EINT */ | ||
507 | #define WM831X_IM_PPM_USB_CURR_EINT_MASK 0x2000 /* IM_PPM_USB_CURR_EINT */ | ||
508 | #define WM831X_IM_PPM_USB_CURR_EINT_SHIFT 13 /* IM_PPM_USB_CURR_EINT */ | ||
509 | #define WM831X_IM_PPM_USB_CURR_EINT_WIDTH 1 /* IM_PPM_USB_CURR_EINT */ | ||
510 | #define WM831X_IM_ON_PIN_EINT 0x1000 /* IM_ON_PIN_EINT */ | ||
511 | #define WM831X_IM_ON_PIN_EINT_MASK 0x1000 /* IM_ON_PIN_EINT */ | ||
512 | #define WM831X_IM_ON_PIN_EINT_SHIFT 12 /* IM_ON_PIN_EINT */ | ||
513 | #define WM831X_IM_ON_PIN_EINT_WIDTH 1 /* IM_ON_PIN_EINT */ | ||
514 | #define WM831X_IM_WDOG_TO_EINT 0x0800 /* IM_WDOG_TO_EINT */ | ||
515 | #define WM831X_IM_WDOG_TO_EINT_MASK 0x0800 /* IM_WDOG_TO_EINT */ | ||
516 | #define WM831X_IM_WDOG_TO_EINT_SHIFT 11 /* IM_WDOG_TO_EINT */ | ||
517 | #define WM831X_IM_WDOG_TO_EINT_WIDTH 1 /* IM_WDOG_TO_EINT */ | ||
518 | #define WM831X_IM_TCHDATA_EINT 0x0400 /* IM_TCHDATA_EINT */ | ||
519 | #define WM831X_IM_TCHDATA_EINT_MASK 0x0400 /* IM_TCHDATA_EINT */ | ||
520 | #define WM831X_IM_TCHDATA_EINT_SHIFT 10 /* IM_TCHDATA_EINT */ | ||
521 | #define WM831X_IM_TCHDATA_EINT_WIDTH 1 /* IM_TCHDATA_EINT */ | ||
522 | #define WM831X_IM_TCHPD_EINT 0x0200 /* IM_TCHPD_EINT */ | ||
523 | #define WM831X_IM_TCHPD_EINT_MASK 0x0200 /* IM_TCHPD_EINT */ | ||
524 | #define WM831X_IM_TCHPD_EINT_SHIFT 9 /* IM_TCHPD_EINT */ | ||
525 | #define WM831X_IM_TCHPD_EINT_WIDTH 1 /* IM_TCHPD_EINT */ | ||
526 | #define WM831X_IM_AUXADC_DATA_EINT 0x0100 /* IM_AUXADC_DATA_EINT */ | ||
527 | #define WM831X_IM_AUXADC_DATA_EINT_MASK 0x0100 /* IM_AUXADC_DATA_EINT */ | ||
528 | #define WM831X_IM_AUXADC_DATA_EINT_SHIFT 8 /* IM_AUXADC_DATA_EINT */ | ||
529 | #define WM831X_IM_AUXADC_DATA_EINT_WIDTH 1 /* IM_AUXADC_DATA_EINT */ | ||
530 | #define WM831X_IM_AUXADC_DCOMP4_EINT 0x0080 /* IM_AUXADC_DCOMP4_EINT */ | ||
531 | #define WM831X_IM_AUXADC_DCOMP4_EINT_MASK 0x0080 /* IM_AUXADC_DCOMP4_EINT */ | ||
532 | #define WM831X_IM_AUXADC_DCOMP4_EINT_SHIFT 7 /* IM_AUXADC_DCOMP4_EINT */ | ||
533 | #define WM831X_IM_AUXADC_DCOMP4_EINT_WIDTH 1 /* IM_AUXADC_DCOMP4_EINT */ | ||
534 | #define WM831X_IM_AUXADC_DCOMP3_EINT 0x0040 /* IM_AUXADC_DCOMP3_EINT */ | ||
535 | #define WM831X_IM_AUXADC_DCOMP3_EINT_MASK 0x0040 /* IM_AUXADC_DCOMP3_EINT */ | ||
536 | #define WM831X_IM_AUXADC_DCOMP3_EINT_SHIFT 6 /* IM_AUXADC_DCOMP3_EINT */ | ||
537 | #define WM831X_IM_AUXADC_DCOMP3_EINT_WIDTH 1 /* IM_AUXADC_DCOMP3_EINT */ | ||
538 | #define WM831X_IM_AUXADC_DCOMP2_EINT 0x0020 /* IM_AUXADC_DCOMP2_EINT */ | ||
539 | #define WM831X_IM_AUXADC_DCOMP2_EINT_MASK 0x0020 /* IM_AUXADC_DCOMP2_EINT */ | ||
540 | #define WM831X_IM_AUXADC_DCOMP2_EINT_SHIFT 5 /* IM_AUXADC_DCOMP2_EINT */ | ||
541 | #define WM831X_IM_AUXADC_DCOMP2_EINT_WIDTH 1 /* IM_AUXADC_DCOMP2_EINT */ | ||
542 | #define WM831X_IM_AUXADC_DCOMP1_EINT 0x0010 /* IM_AUXADC_DCOMP1_EINT */ | ||
543 | #define WM831X_IM_AUXADC_DCOMP1_EINT_MASK 0x0010 /* IM_AUXADC_DCOMP1_EINT */ | ||
544 | #define WM831X_IM_AUXADC_DCOMP1_EINT_SHIFT 4 /* IM_AUXADC_DCOMP1_EINT */ | ||
545 | #define WM831X_IM_AUXADC_DCOMP1_EINT_WIDTH 1 /* IM_AUXADC_DCOMP1_EINT */ | ||
546 | #define WM831X_IM_RTC_PER_EINT 0x0008 /* IM_RTC_PER_EINT */ | ||
547 | #define WM831X_IM_RTC_PER_EINT_MASK 0x0008 /* IM_RTC_PER_EINT */ | ||
548 | #define WM831X_IM_RTC_PER_EINT_SHIFT 3 /* IM_RTC_PER_EINT */ | ||
549 | #define WM831X_IM_RTC_PER_EINT_WIDTH 1 /* IM_RTC_PER_EINT */ | ||
550 | #define WM831X_IM_RTC_ALM_EINT 0x0004 /* IM_RTC_ALM_EINT */ | ||
551 | #define WM831X_IM_RTC_ALM_EINT_MASK 0x0004 /* IM_RTC_ALM_EINT */ | ||
552 | #define WM831X_IM_RTC_ALM_EINT_SHIFT 2 /* IM_RTC_ALM_EINT */ | ||
553 | #define WM831X_IM_RTC_ALM_EINT_WIDTH 1 /* IM_RTC_ALM_EINT */ | ||
554 | #define WM831X_IM_TEMP_THW_EINT 0x0002 /* IM_TEMP_THW_EINT */ | ||
555 | #define WM831X_IM_TEMP_THW_EINT_MASK 0x0002 /* IM_TEMP_THW_EINT */ | ||
556 | #define WM831X_IM_TEMP_THW_EINT_SHIFT 1 /* IM_TEMP_THW_EINT */ | ||
557 | #define WM831X_IM_TEMP_THW_EINT_WIDTH 1 /* IM_TEMP_THW_EINT */ | ||
558 | |||
559 | /* | ||
560 | * R16410 (0x401A) - Interrupt Status 2 Mask | ||
561 | */ | ||
562 | #define WM831X_IM_CHG_BATT_HOT_EINT 0x8000 /* IM_CHG_BATT_HOT_EINT */ | ||
563 | #define WM831X_IM_CHG_BATT_HOT_EINT_MASK 0x8000 /* IM_CHG_BATT_HOT_EINT */ | ||
564 | #define WM831X_IM_CHG_BATT_HOT_EINT_SHIFT 15 /* IM_CHG_BATT_HOT_EINT */ | ||
565 | #define WM831X_IM_CHG_BATT_HOT_EINT_WIDTH 1 /* IM_CHG_BATT_HOT_EINT */ | ||
566 | #define WM831X_IM_CHG_BATT_COLD_EINT 0x4000 /* IM_CHG_BATT_COLD_EINT */ | ||
567 | #define WM831X_IM_CHG_BATT_COLD_EINT_MASK 0x4000 /* IM_CHG_BATT_COLD_EINT */ | ||
568 | #define WM831X_IM_CHG_BATT_COLD_EINT_SHIFT 14 /* IM_CHG_BATT_COLD_EINT */ | ||
569 | #define WM831X_IM_CHG_BATT_COLD_EINT_WIDTH 1 /* IM_CHG_BATT_COLD_EINT */ | ||
570 | #define WM831X_IM_CHG_BATT_FAIL_EINT 0x2000 /* IM_CHG_BATT_FAIL_EINT */ | ||
571 | #define WM831X_IM_CHG_BATT_FAIL_EINT_MASK 0x2000 /* IM_CHG_BATT_FAIL_EINT */ | ||
572 | #define WM831X_IM_CHG_BATT_FAIL_EINT_SHIFT 13 /* IM_CHG_BATT_FAIL_EINT */ | ||
573 | #define WM831X_IM_CHG_BATT_FAIL_EINT_WIDTH 1 /* IM_CHG_BATT_FAIL_EINT */ | ||
574 | #define WM831X_IM_CHG_OV_EINT 0x1000 /* IM_CHG_OV_EINT */ | ||
575 | #define WM831X_IM_CHG_OV_EINT_MASK 0x1000 /* IM_CHG_OV_EINT */ | ||
576 | #define WM831X_IM_CHG_OV_EINT_SHIFT 12 /* IM_CHG_OV_EINT */ | ||
577 | #define WM831X_IM_CHG_OV_EINT_WIDTH 1 /* IM_CHG_OV_EINT */ | ||
578 | #define WM831X_IM_CHG_END_EINT 0x0800 /* IM_CHG_END_EINT */ | ||
579 | #define WM831X_IM_CHG_END_EINT_MASK 0x0800 /* IM_CHG_END_EINT */ | ||
580 | #define WM831X_IM_CHG_END_EINT_SHIFT 11 /* IM_CHG_END_EINT */ | ||
581 | #define WM831X_IM_CHG_END_EINT_WIDTH 1 /* IM_CHG_END_EINT */ | ||
582 | #define WM831X_IM_CHG_TO_EINT 0x0400 /* IM_CHG_TO_EINT */ | ||
583 | #define WM831X_IM_CHG_TO_EINT_MASK 0x0400 /* IM_CHG_TO_EINT */ | ||
584 | #define WM831X_IM_CHG_TO_EINT_SHIFT 10 /* IM_CHG_TO_EINT */ | ||
585 | #define WM831X_IM_CHG_TO_EINT_WIDTH 1 /* IM_CHG_TO_EINT */ | ||
586 | #define WM831X_IM_CHG_MODE_EINT 0x0200 /* IM_CHG_MODE_EINT */ | ||
587 | #define WM831X_IM_CHG_MODE_EINT_MASK 0x0200 /* IM_CHG_MODE_EINT */ | ||
588 | #define WM831X_IM_CHG_MODE_EINT_SHIFT 9 /* IM_CHG_MODE_EINT */ | ||
589 | #define WM831X_IM_CHG_MODE_EINT_WIDTH 1 /* IM_CHG_MODE_EINT */ | ||
590 | #define WM831X_IM_CHG_START_EINT 0x0100 /* IM_CHG_START_EINT */ | ||
591 | #define WM831X_IM_CHG_START_EINT_MASK 0x0100 /* IM_CHG_START_EINT */ | ||
592 | #define WM831X_IM_CHG_START_EINT_SHIFT 8 /* IM_CHG_START_EINT */ | ||
593 | #define WM831X_IM_CHG_START_EINT_WIDTH 1 /* IM_CHG_START_EINT */ | ||
594 | #define WM831X_IM_CS2_EINT 0x0080 /* IM_CS2_EINT */ | ||
595 | #define WM831X_IM_CS2_EINT_MASK 0x0080 /* IM_CS2_EINT */ | ||
596 | #define WM831X_IM_CS2_EINT_SHIFT 7 /* IM_CS2_EINT */ | ||
597 | #define WM831X_IM_CS2_EINT_WIDTH 1 /* IM_CS2_EINT */ | ||
598 | #define WM831X_IM_CS1_EINT 0x0040 /* IM_CS1_EINT */ | ||
599 | #define WM831X_IM_CS1_EINT_MASK 0x0040 /* IM_CS1_EINT */ | ||
600 | #define WM831X_IM_CS1_EINT_SHIFT 6 /* IM_CS1_EINT */ | ||
601 | #define WM831X_IM_CS1_EINT_WIDTH 1 /* IM_CS1_EINT */ | ||
602 | #define WM831X_IM_OTP_CMD_END_EINT 0x0020 /* IM_OTP_CMD_END_EINT */ | ||
603 | #define WM831X_IM_OTP_CMD_END_EINT_MASK 0x0020 /* IM_OTP_CMD_END_EINT */ | ||
604 | #define WM831X_IM_OTP_CMD_END_EINT_SHIFT 5 /* IM_OTP_CMD_END_EINT */ | ||
605 | #define WM831X_IM_OTP_CMD_END_EINT_WIDTH 1 /* IM_OTP_CMD_END_EINT */ | ||
606 | #define WM831X_IM_OTP_ERR_EINT 0x0010 /* IM_OTP_ERR_EINT */ | ||
607 | #define WM831X_IM_OTP_ERR_EINT_MASK 0x0010 /* IM_OTP_ERR_EINT */ | ||
608 | #define WM831X_IM_OTP_ERR_EINT_SHIFT 4 /* IM_OTP_ERR_EINT */ | ||
609 | #define WM831X_IM_OTP_ERR_EINT_WIDTH 1 /* IM_OTP_ERR_EINT */ | ||
610 | #define WM831X_IM_PS_POR_EINT 0x0004 /* IM_PS_POR_EINT */ | ||
611 | #define WM831X_IM_PS_POR_EINT_MASK 0x0004 /* IM_PS_POR_EINT */ | ||
612 | #define WM831X_IM_PS_POR_EINT_SHIFT 2 /* IM_PS_POR_EINT */ | ||
613 | #define WM831X_IM_PS_POR_EINT_WIDTH 1 /* IM_PS_POR_EINT */ | ||
614 | #define WM831X_IM_PS_SLEEP_OFF_EINT 0x0002 /* IM_PS_SLEEP_OFF_EINT */ | ||
615 | #define WM831X_IM_PS_SLEEP_OFF_EINT_MASK 0x0002 /* IM_PS_SLEEP_OFF_EINT */ | ||
616 | #define WM831X_IM_PS_SLEEP_OFF_EINT_SHIFT 1 /* IM_PS_SLEEP_OFF_EINT */ | ||
617 | #define WM831X_IM_PS_SLEEP_OFF_EINT_WIDTH 1 /* IM_PS_SLEEP_OFF_EINT */ | ||
618 | #define WM831X_IM_PS_ON_WAKE_EINT 0x0001 /* IM_PS_ON_WAKE_EINT */ | ||
619 | #define WM831X_IM_PS_ON_WAKE_EINT_MASK 0x0001 /* IM_PS_ON_WAKE_EINT */ | ||
620 | #define WM831X_IM_PS_ON_WAKE_EINT_SHIFT 0 /* IM_PS_ON_WAKE_EINT */ | ||
621 | #define WM831X_IM_PS_ON_WAKE_EINT_WIDTH 1 /* IM_PS_ON_WAKE_EINT */ | ||
622 | |||
623 | /* | ||
624 | * R16411 (0x401B) - Interrupt Status 3 Mask | ||
625 | */ | ||
626 | #define WM831X_IM_UV_LDO10_EINT 0x0200 /* IM_UV_LDO10_EINT */ | ||
627 | #define WM831X_IM_UV_LDO10_EINT_MASK 0x0200 /* IM_UV_LDO10_EINT */ | ||
628 | #define WM831X_IM_UV_LDO10_EINT_SHIFT 9 /* IM_UV_LDO10_EINT */ | ||
629 | #define WM831X_IM_UV_LDO10_EINT_WIDTH 1 /* IM_UV_LDO10_EINT */ | ||
630 | #define WM831X_IM_UV_LDO9_EINT 0x0100 /* IM_UV_LDO9_EINT */ | ||
631 | #define WM831X_IM_UV_LDO9_EINT_MASK 0x0100 /* IM_UV_LDO9_EINT */ | ||
632 | #define WM831X_IM_UV_LDO9_EINT_SHIFT 8 /* IM_UV_LDO9_EINT */ | ||
633 | #define WM831X_IM_UV_LDO9_EINT_WIDTH 1 /* IM_UV_LDO9_EINT */ | ||
634 | #define WM831X_IM_UV_LDO8_EINT 0x0080 /* IM_UV_LDO8_EINT */ | ||
635 | #define WM831X_IM_UV_LDO8_EINT_MASK 0x0080 /* IM_UV_LDO8_EINT */ | ||
636 | #define WM831X_IM_UV_LDO8_EINT_SHIFT 7 /* IM_UV_LDO8_EINT */ | ||
637 | #define WM831X_IM_UV_LDO8_EINT_WIDTH 1 /* IM_UV_LDO8_EINT */ | ||
638 | #define WM831X_IM_UV_LDO7_EINT 0x0040 /* IM_UV_LDO7_EINT */ | ||
639 | #define WM831X_IM_UV_LDO7_EINT_MASK 0x0040 /* IM_UV_LDO7_EINT */ | ||
640 | #define WM831X_IM_UV_LDO7_EINT_SHIFT 6 /* IM_UV_LDO7_EINT */ | ||
641 | #define WM831X_IM_UV_LDO7_EINT_WIDTH 1 /* IM_UV_LDO7_EINT */ | ||
642 | #define WM831X_IM_UV_LDO6_EINT 0x0020 /* IM_UV_LDO6_EINT */ | ||
643 | #define WM831X_IM_UV_LDO6_EINT_MASK 0x0020 /* IM_UV_LDO6_EINT */ | ||
644 | #define WM831X_IM_UV_LDO6_EINT_SHIFT 5 /* IM_UV_LDO6_EINT */ | ||
645 | #define WM831X_IM_UV_LDO6_EINT_WIDTH 1 /* IM_UV_LDO6_EINT */ | ||
646 | #define WM831X_IM_UV_LDO5_EINT 0x0010 /* IM_UV_LDO5_EINT */ | ||
647 | #define WM831X_IM_UV_LDO5_EINT_MASK 0x0010 /* IM_UV_LDO5_EINT */ | ||
648 | #define WM831X_IM_UV_LDO5_EINT_SHIFT 4 /* IM_UV_LDO5_EINT */ | ||
649 | #define WM831X_IM_UV_LDO5_EINT_WIDTH 1 /* IM_UV_LDO5_EINT */ | ||
650 | #define WM831X_IM_UV_LDO4_EINT 0x0008 /* IM_UV_LDO4_EINT */ | ||
651 | #define WM831X_IM_UV_LDO4_EINT_MASK 0x0008 /* IM_UV_LDO4_EINT */ | ||
652 | #define WM831X_IM_UV_LDO4_EINT_SHIFT 3 /* IM_UV_LDO4_EINT */ | ||
653 | #define WM831X_IM_UV_LDO4_EINT_WIDTH 1 /* IM_UV_LDO4_EINT */ | ||
654 | #define WM831X_IM_UV_LDO3_EINT 0x0004 /* IM_UV_LDO3_EINT */ | ||
655 | #define WM831X_IM_UV_LDO3_EINT_MASK 0x0004 /* IM_UV_LDO3_EINT */ | ||
656 | #define WM831X_IM_UV_LDO3_EINT_SHIFT 2 /* IM_UV_LDO3_EINT */ | ||
657 | #define WM831X_IM_UV_LDO3_EINT_WIDTH 1 /* IM_UV_LDO3_EINT */ | ||
658 | #define WM831X_IM_UV_LDO2_EINT 0x0002 /* IM_UV_LDO2_EINT */ | ||
659 | #define WM831X_IM_UV_LDO2_EINT_MASK 0x0002 /* IM_UV_LDO2_EINT */ | ||
660 | #define WM831X_IM_UV_LDO2_EINT_SHIFT 1 /* IM_UV_LDO2_EINT */ | ||
661 | #define WM831X_IM_UV_LDO2_EINT_WIDTH 1 /* IM_UV_LDO2_EINT */ | ||
662 | #define WM831X_IM_UV_LDO1_EINT 0x0001 /* IM_UV_LDO1_EINT */ | ||
663 | #define WM831X_IM_UV_LDO1_EINT_MASK 0x0001 /* IM_UV_LDO1_EINT */ | ||
664 | #define WM831X_IM_UV_LDO1_EINT_SHIFT 0 /* IM_UV_LDO1_EINT */ | ||
665 | #define WM831X_IM_UV_LDO1_EINT_WIDTH 1 /* IM_UV_LDO1_EINT */ | ||
666 | |||
667 | /* | ||
668 | * R16412 (0x401C) - Interrupt Status 4 Mask | ||
669 | */ | ||
670 | #define WM831X_IM_HC_DC2_EINT 0x0200 /* IM_HC_DC2_EINT */ | ||
671 | #define WM831X_IM_HC_DC2_EINT_MASK 0x0200 /* IM_HC_DC2_EINT */ | ||
672 | #define WM831X_IM_HC_DC2_EINT_SHIFT 9 /* IM_HC_DC2_EINT */ | ||
673 | #define WM831X_IM_HC_DC2_EINT_WIDTH 1 /* IM_HC_DC2_EINT */ | ||
674 | #define WM831X_IM_HC_DC1_EINT 0x0100 /* IM_HC_DC1_EINT */ | ||
675 | #define WM831X_IM_HC_DC1_EINT_MASK 0x0100 /* IM_HC_DC1_EINT */ | ||
676 | #define WM831X_IM_HC_DC1_EINT_SHIFT 8 /* IM_HC_DC1_EINT */ | ||
677 | #define WM831X_IM_HC_DC1_EINT_WIDTH 1 /* IM_HC_DC1_EINT */ | ||
678 | #define WM831X_IM_UV_DC4_EINT 0x0008 /* IM_UV_DC4_EINT */ | ||
679 | #define WM831X_IM_UV_DC4_EINT_MASK 0x0008 /* IM_UV_DC4_EINT */ | ||
680 | #define WM831X_IM_UV_DC4_EINT_SHIFT 3 /* IM_UV_DC4_EINT */ | ||
681 | #define WM831X_IM_UV_DC4_EINT_WIDTH 1 /* IM_UV_DC4_EINT */ | ||
682 | #define WM831X_IM_UV_DC3_EINT 0x0004 /* IM_UV_DC3_EINT */ | ||
683 | #define WM831X_IM_UV_DC3_EINT_MASK 0x0004 /* IM_UV_DC3_EINT */ | ||
684 | #define WM831X_IM_UV_DC3_EINT_SHIFT 2 /* IM_UV_DC3_EINT */ | ||
685 | #define WM831X_IM_UV_DC3_EINT_WIDTH 1 /* IM_UV_DC3_EINT */ | ||
686 | #define WM831X_IM_UV_DC2_EINT 0x0002 /* IM_UV_DC2_EINT */ | ||
687 | #define WM831X_IM_UV_DC2_EINT_MASK 0x0002 /* IM_UV_DC2_EINT */ | ||
688 | #define WM831X_IM_UV_DC2_EINT_SHIFT 1 /* IM_UV_DC2_EINT */ | ||
689 | #define WM831X_IM_UV_DC2_EINT_WIDTH 1 /* IM_UV_DC2_EINT */ | ||
690 | #define WM831X_IM_UV_DC1_EINT 0x0001 /* IM_UV_DC1_EINT */ | ||
691 | #define WM831X_IM_UV_DC1_EINT_MASK 0x0001 /* IM_UV_DC1_EINT */ | ||
692 | #define WM831X_IM_UV_DC1_EINT_SHIFT 0 /* IM_UV_DC1_EINT */ | ||
693 | #define WM831X_IM_UV_DC1_EINT_WIDTH 1 /* IM_UV_DC1_EINT */ | ||
694 | |||
695 | /* | ||
696 | * R16413 (0x401D) - Interrupt Status 5 Mask | ||
697 | */ | ||
698 | #define WM831X_IM_GP16_EINT 0x8000 /* IM_GP16_EINT */ | ||
699 | #define WM831X_IM_GP16_EINT_MASK 0x8000 /* IM_GP16_EINT */ | ||
700 | #define WM831X_IM_GP16_EINT_SHIFT 15 /* IM_GP16_EINT */ | ||
701 | #define WM831X_IM_GP16_EINT_WIDTH 1 /* IM_GP16_EINT */ | ||
702 | #define WM831X_IM_GP15_EINT 0x4000 /* IM_GP15_EINT */ | ||
703 | #define WM831X_IM_GP15_EINT_MASK 0x4000 /* IM_GP15_EINT */ | ||
704 | #define WM831X_IM_GP15_EINT_SHIFT 14 /* IM_GP15_EINT */ | ||
705 | #define WM831X_IM_GP15_EINT_WIDTH 1 /* IM_GP15_EINT */ | ||
706 | #define WM831X_IM_GP14_EINT 0x2000 /* IM_GP14_EINT */ | ||
707 | #define WM831X_IM_GP14_EINT_MASK 0x2000 /* IM_GP14_EINT */ | ||
708 | #define WM831X_IM_GP14_EINT_SHIFT 13 /* IM_GP14_EINT */ | ||
709 | #define WM831X_IM_GP14_EINT_WIDTH 1 /* IM_GP14_EINT */ | ||
710 | #define WM831X_IM_GP13_EINT 0x1000 /* IM_GP13_EINT */ | ||
711 | #define WM831X_IM_GP13_EINT_MASK 0x1000 /* IM_GP13_EINT */ | ||
712 | #define WM831X_IM_GP13_EINT_SHIFT 12 /* IM_GP13_EINT */ | ||
713 | #define WM831X_IM_GP13_EINT_WIDTH 1 /* IM_GP13_EINT */ | ||
714 | #define WM831X_IM_GP12_EINT 0x0800 /* IM_GP12_EINT */ | ||
715 | #define WM831X_IM_GP12_EINT_MASK 0x0800 /* IM_GP12_EINT */ | ||
716 | #define WM831X_IM_GP12_EINT_SHIFT 11 /* IM_GP12_EINT */ | ||
717 | #define WM831X_IM_GP12_EINT_WIDTH 1 /* IM_GP12_EINT */ | ||
718 | #define WM831X_IM_GP11_EINT 0x0400 /* IM_GP11_EINT */ | ||
719 | #define WM831X_IM_GP11_EINT_MASK 0x0400 /* IM_GP11_EINT */ | ||
720 | #define WM831X_IM_GP11_EINT_SHIFT 10 /* IM_GP11_EINT */ | ||
721 | #define WM831X_IM_GP11_EINT_WIDTH 1 /* IM_GP11_EINT */ | ||
722 | #define WM831X_IM_GP10_EINT 0x0200 /* IM_GP10_EINT */ | ||
723 | #define WM831X_IM_GP10_EINT_MASK 0x0200 /* IM_GP10_EINT */ | ||
724 | #define WM831X_IM_GP10_EINT_SHIFT 9 /* IM_GP10_EINT */ | ||
725 | #define WM831X_IM_GP10_EINT_WIDTH 1 /* IM_GP10_EINT */ | ||
726 | #define WM831X_IM_GP9_EINT 0x0100 /* IM_GP9_EINT */ | ||
727 | #define WM831X_IM_GP9_EINT_MASK 0x0100 /* IM_GP9_EINT */ | ||
728 | #define WM831X_IM_GP9_EINT_SHIFT 8 /* IM_GP9_EINT */ | ||
729 | #define WM831X_IM_GP9_EINT_WIDTH 1 /* IM_GP9_EINT */ | ||
730 | #define WM831X_IM_GP8_EINT 0x0080 /* IM_GP8_EINT */ | ||
731 | #define WM831X_IM_GP8_EINT_MASK 0x0080 /* IM_GP8_EINT */ | ||
732 | #define WM831X_IM_GP8_EINT_SHIFT 7 /* IM_GP8_EINT */ | ||
733 | #define WM831X_IM_GP8_EINT_WIDTH 1 /* IM_GP8_EINT */ | ||
734 | #define WM831X_IM_GP7_EINT 0x0040 /* IM_GP7_EINT */ | ||
735 | #define WM831X_IM_GP7_EINT_MASK 0x0040 /* IM_GP7_EINT */ | ||
736 | #define WM831X_IM_GP7_EINT_SHIFT 6 /* IM_GP7_EINT */ | ||
737 | #define WM831X_IM_GP7_EINT_WIDTH 1 /* IM_GP7_EINT */ | ||
738 | #define WM831X_IM_GP6_EINT 0x0020 /* IM_GP6_EINT */ | ||
739 | #define WM831X_IM_GP6_EINT_MASK 0x0020 /* IM_GP6_EINT */ | ||
740 | #define WM831X_IM_GP6_EINT_SHIFT 5 /* IM_GP6_EINT */ | ||
741 | #define WM831X_IM_GP6_EINT_WIDTH 1 /* IM_GP6_EINT */ | ||
742 | #define WM831X_IM_GP5_EINT 0x0010 /* IM_GP5_EINT */ | ||
743 | #define WM831X_IM_GP5_EINT_MASK 0x0010 /* IM_GP5_EINT */ | ||
744 | #define WM831X_IM_GP5_EINT_SHIFT 4 /* IM_GP5_EINT */ | ||
745 | #define WM831X_IM_GP5_EINT_WIDTH 1 /* IM_GP5_EINT */ | ||
746 | #define WM831X_IM_GP4_EINT 0x0008 /* IM_GP4_EINT */ | ||
747 | #define WM831X_IM_GP4_EINT_MASK 0x0008 /* IM_GP4_EINT */ | ||
748 | #define WM831X_IM_GP4_EINT_SHIFT 3 /* IM_GP4_EINT */ | ||
749 | #define WM831X_IM_GP4_EINT_WIDTH 1 /* IM_GP4_EINT */ | ||
750 | #define WM831X_IM_GP3_EINT 0x0004 /* IM_GP3_EINT */ | ||
751 | #define WM831X_IM_GP3_EINT_MASK 0x0004 /* IM_GP3_EINT */ | ||
752 | #define WM831X_IM_GP3_EINT_SHIFT 2 /* IM_GP3_EINT */ | ||
753 | #define WM831X_IM_GP3_EINT_WIDTH 1 /* IM_GP3_EINT */ | ||
754 | #define WM831X_IM_GP2_EINT 0x0002 /* IM_GP2_EINT */ | ||
755 | #define WM831X_IM_GP2_EINT_MASK 0x0002 /* IM_GP2_EINT */ | ||
756 | #define WM831X_IM_GP2_EINT_SHIFT 1 /* IM_GP2_EINT */ | ||
757 | #define WM831X_IM_GP2_EINT_WIDTH 1 /* IM_GP2_EINT */ | ||
758 | #define WM831X_IM_GP1_EINT 0x0001 /* IM_GP1_EINT */ | ||
759 | #define WM831X_IM_GP1_EINT_MASK 0x0001 /* IM_GP1_EINT */ | ||
760 | #define WM831X_IM_GP1_EINT_SHIFT 0 /* IM_GP1_EINT */ | ||
761 | #define WM831X_IM_GP1_EINT_WIDTH 1 /* IM_GP1_EINT */ | ||
762 | |||
763 | |||
764 | #endif | ||
diff --git a/include/linux/mfd/wm831x/otp.h b/include/linux/mfd/wm831x/otp.h new file mode 100644 index 000000000000..ce1f81a39bfc --- /dev/null +++ b/include/linux/mfd/wm831x/otp.h | |||
@@ -0,0 +1,162 @@ | |||
1 | /* | ||
2 | * include/linux/mfd/wm831x/otp.h -- OTP interface for WM831x | ||
3 | * | ||
4 | * Copyright 2009 Wolfson Microelectronics PLC. | ||
5 | * | ||
6 | * Author: Mark Brown <broonie@opensource.wolfsonmicro.com> | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify it | ||
9 | * under the terms of the GNU General Public License as published by the | ||
10 | * Free Software Foundation; either version 2 of the License, or (at your | ||
11 | * option) any later version. | ||
12 | * | ||
13 | */ | ||
14 | |||
15 | #ifndef __MFD_WM831X_OTP_H__ | ||
16 | #define __MFD_WM831X_OTP_H__ | ||
17 | |||
18 | int wm831x_otp_init(struct wm831x *wm831x); | ||
19 | void wm831x_otp_exit(struct wm831x *wm831x); | ||
20 | |||
21 | /* | ||
22 | * R30720 (0x7800) - Unique ID 1 | ||
23 | */ | ||
24 | #define WM831X_UNIQUE_ID_MASK 0xFFFF /* UNIQUE_ID - [15:0] */ | ||
25 | #define WM831X_UNIQUE_ID_SHIFT 0 /* UNIQUE_ID - [15:0] */ | ||
26 | #define WM831X_UNIQUE_ID_WIDTH 16 /* UNIQUE_ID - [15:0] */ | ||
27 | |||
28 | /* | ||
29 | * R30721 (0x7801) - Unique ID 2 | ||
30 | */ | ||
31 | #define WM831X_UNIQUE_ID_MASK 0xFFFF /* UNIQUE_ID - [15:0] */ | ||
32 | #define WM831X_UNIQUE_ID_SHIFT 0 /* UNIQUE_ID - [15:0] */ | ||
33 | #define WM831X_UNIQUE_ID_WIDTH 16 /* UNIQUE_ID - [15:0] */ | ||
34 | |||
35 | /* | ||
36 | * R30722 (0x7802) - Unique ID 3 | ||
37 | */ | ||
38 | #define WM831X_UNIQUE_ID_MASK 0xFFFF /* UNIQUE_ID - [15:0] */ | ||
39 | #define WM831X_UNIQUE_ID_SHIFT 0 /* UNIQUE_ID - [15:0] */ | ||
40 | #define WM831X_UNIQUE_ID_WIDTH 16 /* UNIQUE_ID - [15:0] */ | ||
41 | |||
42 | /* | ||
43 | * R30723 (0x7803) - Unique ID 4 | ||
44 | */ | ||
45 | #define WM831X_UNIQUE_ID_MASK 0xFFFF /* UNIQUE_ID - [15:0] */ | ||
46 | #define WM831X_UNIQUE_ID_SHIFT 0 /* UNIQUE_ID - [15:0] */ | ||
47 | #define WM831X_UNIQUE_ID_WIDTH 16 /* UNIQUE_ID - [15:0] */ | ||
48 | |||
49 | /* | ||
50 | * R30724 (0x7804) - Unique ID 5 | ||
51 | */ | ||
52 | #define WM831X_UNIQUE_ID_MASK 0xFFFF /* UNIQUE_ID - [15:0] */ | ||
53 | #define WM831X_UNIQUE_ID_SHIFT 0 /* UNIQUE_ID - [15:0] */ | ||
54 | #define WM831X_UNIQUE_ID_WIDTH 16 /* UNIQUE_ID - [15:0] */ | ||
55 | |||
56 | /* | ||
57 | * R30725 (0x7805) - Unique ID 6 | ||
58 | */ | ||
59 | #define WM831X_UNIQUE_ID_MASK 0xFFFF /* UNIQUE_ID - [15:0] */ | ||
60 | #define WM831X_UNIQUE_ID_SHIFT 0 /* UNIQUE_ID - [15:0] */ | ||
61 | #define WM831X_UNIQUE_ID_WIDTH 16 /* UNIQUE_ID - [15:0] */ | ||
62 | |||
63 | /* | ||
64 | * R30726 (0x7806) - Unique ID 7 | ||
65 | */ | ||
66 | #define WM831X_UNIQUE_ID_MASK 0xFFFF /* UNIQUE_ID - [15:0] */ | ||
67 | #define WM831X_UNIQUE_ID_SHIFT 0 /* UNIQUE_ID - [15:0] */ | ||
68 | #define WM831X_UNIQUE_ID_WIDTH 16 /* UNIQUE_ID - [15:0] */ | ||
69 | |||
70 | /* | ||
71 | * R30727 (0x7807) - Unique ID 8 | ||
72 | */ | ||
73 | #define WM831X_UNIQUE_ID_MASK 0xFFFF /* UNIQUE_ID - [15:0] */ | ||
74 | #define WM831X_UNIQUE_ID_SHIFT 0 /* UNIQUE_ID - [15:0] */ | ||
75 | #define WM831X_UNIQUE_ID_WIDTH 16 /* UNIQUE_ID - [15:0] */ | ||
76 | |||
77 | /* | ||
78 | * R30728 (0x7808) - Factory OTP ID | ||
79 | */ | ||
80 | #define WM831X_OTP_FACT_ID_MASK 0xFFFE /* OTP_FACT_ID - [15:1] */ | ||
81 | #define WM831X_OTP_FACT_ID_SHIFT 1 /* OTP_FACT_ID - [15:1] */ | ||
82 | #define WM831X_OTP_FACT_ID_WIDTH 15 /* OTP_FACT_ID - [15:1] */ | ||
83 | #define WM831X_OTP_FACT_FINAL 0x0001 /* OTP_FACT_FINAL */ | ||
84 | #define WM831X_OTP_FACT_FINAL_MASK 0x0001 /* OTP_FACT_FINAL */ | ||
85 | #define WM831X_OTP_FACT_FINAL_SHIFT 0 /* OTP_FACT_FINAL */ | ||
86 | #define WM831X_OTP_FACT_FINAL_WIDTH 1 /* OTP_FACT_FINAL */ | ||
87 | |||
88 | /* | ||
89 | * R30729 (0x7809) - Factory OTP 1 | ||
90 | */ | ||
91 | #define WM831X_DC3_TRIM_MASK 0xF000 /* DC3_TRIM - [15:12] */ | ||
92 | #define WM831X_DC3_TRIM_SHIFT 12 /* DC3_TRIM - [15:12] */ | ||
93 | #define WM831X_DC3_TRIM_WIDTH 4 /* DC3_TRIM - [15:12] */ | ||
94 | #define WM831X_DC2_TRIM_MASK 0x0FC0 /* DC2_TRIM - [11:6] */ | ||
95 | #define WM831X_DC2_TRIM_SHIFT 6 /* DC2_TRIM - [11:6] */ | ||
96 | #define WM831X_DC2_TRIM_WIDTH 6 /* DC2_TRIM - [11:6] */ | ||
97 | #define WM831X_DC1_TRIM_MASK 0x003F /* DC1_TRIM - [5:0] */ | ||
98 | #define WM831X_DC1_TRIM_SHIFT 0 /* DC1_TRIM - [5:0] */ | ||
99 | #define WM831X_DC1_TRIM_WIDTH 6 /* DC1_TRIM - [5:0] */ | ||
100 | |||
101 | /* | ||
102 | * R30730 (0x780A) - Factory OTP 2 | ||
103 | */ | ||
104 | #define WM831X_CHIP_ID_MASK 0xFFFF /* CHIP_ID - [15:0] */ | ||
105 | #define WM831X_CHIP_ID_SHIFT 0 /* CHIP_ID - [15:0] */ | ||
106 | #define WM831X_CHIP_ID_WIDTH 16 /* CHIP_ID - [15:0] */ | ||
107 | |||
108 | /* | ||
109 | * R30731 (0x780B) - Factory OTP 3 | ||
110 | */ | ||
111 | #define WM831X_OSC_TRIM_MASK 0x0780 /* OSC_TRIM - [10:7] */ | ||
112 | #define WM831X_OSC_TRIM_SHIFT 7 /* OSC_TRIM - [10:7] */ | ||
113 | #define WM831X_OSC_TRIM_WIDTH 4 /* OSC_TRIM - [10:7] */ | ||
114 | #define WM831X_BG_TRIM_MASK 0x0078 /* BG_TRIM - [6:3] */ | ||
115 | #define WM831X_BG_TRIM_SHIFT 3 /* BG_TRIM - [6:3] */ | ||
116 | #define WM831X_BG_TRIM_WIDTH 4 /* BG_TRIM - [6:3] */ | ||
117 | #define WM831X_LPBG_TRIM_MASK 0x0007 /* LPBG_TRIM - [2:0] */ | ||
118 | #define WM831X_LPBG_TRIM_SHIFT 0 /* LPBG_TRIM - [2:0] */ | ||
119 | #define WM831X_LPBG_TRIM_WIDTH 3 /* LPBG_TRIM - [2:0] */ | ||
120 | |||
121 | /* | ||
122 | * R30732 (0x780C) - Factory OTP 4 | ||
123 | */ | ||
124 | #define WM831X_CHILD_I2C_ADDR_MASK 0x00FE /* CHILD_I2C_ADDR - [7:1] */ | ||
125 | #define WM831X_CHILD_I2C_ADDR_SHIFT 1 /* CHILD_I2C_ADDR - [7:1] */ | ||
126 | #define WM831X_CHILD_I2C_ADDR_WIDTH 7 /* CHILD_I2C_ADDR - [7:1] */ | ||
127 | #define WM831X_CH_AW 0x0001 /* CH_AW */ | ||
128 | #define WM831X_CH_AW_MASK 0x0001 /* CH_AW */ | ||
129 | #define WM831X_CH_AW_SHIFT 0 /* CH_AW */ | ||
130 | #define WM831X_CH_AW_WIDTH 1 /* CH_AW */ | ||
131 | |||
132 | /* | ||
133 | * R30733 (0x780D) - Factory OTP 5 | ||
134 | */ | ||
135 | #define WM831X_CHARGE_TRIM_MASK 0x003F /* CHARGE_TRIM - [5:0] */ | ||
136 | #define WM831X_CHARGE_TRIM_SHIFT 0 /* CHARGE_TRIM - [5:0] */ | ||
137 | #define WM831X_CHARGE_TRIM_WIDTH 6 /* CHARGE_TRIM - [5:0] */ | ||
138 | |||
139 | /* | ||
140 | * R30736 (0x7810) - Customer OTP ID | ||
141 | */ | ||
142 | #define WM831X_OTP_AUTO_PROG 0x8000 /* OTP_AUTO_PROG */ | ||
143 | #define WM831X_OTP_AUTO_PROG_MASK 0x8000 /* OTP_AUTO_PROG */ | ||
144 | #define WM831X_OTP_AUTO_PROG_SHIFT 15 /* OTP_AUTO_PROG */ | ||
145 | #define WM831X_OTP_AUTO_PROG_WIDTH 1 /* OTP_AUTO_PROG */ | ||
146 | #define WM831X_OTP_CUST_ID_MASK 0x7FFE /* OTP_CUST_ID - [14:1] */ | ||
147 | #define WM831X_OTP_CUST_ID_SHIFT 1 /* OTP_CUST_ID - [14:1] */ | ||
148 | #define WM831X_OTP_CUST_ID_WIDTH 14 /* OTP_CUST_ID - [14:1] */ | ||
149 | #define WM831X_OTP_CUST_FINAL 0x0001 /* OTP_CUST_FINAL */ | ||
150 | #define WM831X_OTP_CUST_FINAL_MASK 0x0001 /* OTP_CUST_FINAL */ | ||
151 | #define WM831X_OTP_CUST_FINAL_SHIFT 0 /* OTP_CUST_FINAL */ | ||
152 | #define WM831X_OTP_CUST_FINAL_WIDTH 1 /* OTP_CUST_FINAL */ | ||
153 | |||
154 | /* | ||
155 | * R30759 (0x7827) - DBE CHECK DATA | ||
156 | */ | ||
157 | #define WM831X_DBE_VALID_DATA_MASK 0xFFFF /* DBE_VALID_DATA - [15:0] */ | ||
158 | #define WM831X_DBE_VALID_DATA_SHIFT 0 /* DBE_VALID_DATA - [15:0] */ | ||
159 | #define WM831X_DBE_VALID_DATA_WIDTH 16 /* DBE_VALID_DATA - [15:0] */ | ||
160 | |||
161 | |||
162 | #endif | ||
diff --git a/include/linux/mfd/wm831x/pdata.h b/include/linux/mfd/wm831x/pdata.h new file mode 100644 index 000000000000..90d820260aad --- /dev/null +++ b/include/linux/mfd/wm831x/pdata.h | |||
@@ -0,0 +1,113 @@ | |||
1 | /* | ||
2 | * include/linux/mfd/wm831x/pdata.h -- Platform data for WM831x | ||
3 | * | ||
4 | * Copyright 2009 Wolfson Microelectronics PLC. | ||
5 | * | ||
6 | * Author: Mark Brown <broonie@opensource.wolfsonmicro.com> | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify it | ||
9 | * under the terms of the GNU General Public License as published by the | ||
10 | * Free Software Foundation; either version 2 of the License, or (at your | ||
11 | * option) any later version. | ||
12 | * | ||
13 | */ | ||
14 | |||
15 | #ifndef __MFD_WM831X_PDATA_H__ | ||
16 | #define __MFD_WM831X_PDATA_H__ | ||
17 | |||
18 | struct wm831x; | ||
19 | struct regulator_init_data; | ||
20 | |||
21 | struct wm831x_backlight_pdata { | ||
22 | int isink; /** ISINK to use, 1 or 2 */ | ||
23 | int max_uA; /** Maximum current to allow */ | ||
24 | }; | ||
25 | |||
26 | struct wm831x_backup_pdata { | ||
27 | int charger_enable; | ||
28 | int no_constant_voltage; /** Disable constant voltage charging */ | ||
29 | int vlim; /** Voltage limit in milivolts */ | ||
30 | int ilim; /** Current limit in microamps */ | ||
31 | }; | ||
32 | |||
33 | struct wm831x_battery_pdata { | ||
34 | int enable; /** Enable charging */ | ||
35 | int fast_enable; /** Enable fast charging */ | ||
36 | int off_mask; /** Mask OFF while charging */ | ||
37 | int trickle_ilim; /** Trickle charge current limit, in mA */ | ||
38 | int vsel; /** Target voltage, in mV */ | ||
39 | int eoc_iterm; /** End of trickle charge current, in mA */ | ||
40 | int fast_ilim; /** Fast charge current limit, in mA */ | ||
41 | int timeout; /** Charge cycle timeout, in minutes */ | ||
42 | }; | ||
43 | |||
44 | /* Sources for status LED configuration. Values are register values | ||
45 | * plus 1 to allow for a zero default for preserve. | ||
46 | */ | ||
47 | enum wm831x_status_src { | ||
48 | WM831X_STATUS_PRESERVE = 0, /* Keep the current hardware setting */ | ||
49 | WM831X_STATUS_OTP = 1, | ||
50 | WM831X_STATUS_POWER = 2, | ||
51 | WM831X_STATUS_CHARGER = 3, | ||
52 | WM831X_STATUS_MANUAL = 4, | ||
53 | }; | ||
54 | |||
55 | struct wm831x_status_pdata { | ||
56 | enum wm831x_status_src default_src; | ||
57 | const char *name; | ||
58 | const char *default_trigger; | ||
59 | }; | ||
60 | |||
61 | struct wm831x_touch_pdata { | ||
62 | int fivewire; /** 1 for five wire mode, 0 for 4 wire */ | ||
63 | int isel; /** Current for pen down (uA) */ | ||
64 | int rpu; /** Pen down sensitivity resistor divider */ | ||
65 | int pressure; /** Report pressure (boolean) */ | ||
66 | int data_irq; /** Touch data ready IRQ */ | ||
67 | }; | ||
68 | |||
69 | enum wm831x_watchdog_action { | ||
70 | WM831X_WDOG_NONE = 0, | ||
71 | WM831X_WDOG_INTERRUPT = 1, | ||
72 | WM831X_WDOG_RESET = 2, | ||
73 | WM831X_WDOG_WAKE = 3, | ||
74 | }; | ||
75 | |||
76 | struct wm831x_watchdog_pdata { | ||
77 | enum wm831x_watchdog_action primary, secondary; | ||
78 | int update_gpio; | ||
79 | unsigned int software:1; | ||
80 | }; | ||
81 | |||
82 | #define WM831X_MAX_STATUS 2 | ||
83 | #define WM831X_MAX_DCDC 4 | ||
84 | #define WM831X_MAX_EPE 2 | ||
85 | #define WM831X_MAX_LDO 11 | ||
86 | #define WM831X_MAX_ISINK 2 | ||
87 | |||
88 | struct wm831x_pdata { | ||
89 | /** Called before subdevices are set up */ | ||
90 | int (*pre_init)(struct wm831x *wm831x); | ||
91 | /** Called after subdevices are set up */ | ||
92 | int (*post_init)(struct wm831x *wm831x); | ||
93 | |||
94 | int gpio_base; | ||
95 | struct wm831x_backlight_pdata *backlight; | ||
96 | struct wm831x_backup_pdata *backup; | ||
97 | struct wm831x_battery_pdata *battery; | ||
98 | struct wm831x_touch_pdata *touch; | ||
99 | struct wm831x_watchdog_pdata *watchdog; | ||
100 | |||
101 | /** LED1 = 0 and so on */ | ||
102 | struct wm831x_status_pdata *status[WM831X_MAX_STATUS]; | ||
103 | /** DCDC1 = 0 and so on */ | ||
104 | struct regulator_init_data *dcdc[WM831X_MAX_DCDC]; | ||
105 | /** EPE1 = 0 and so on */ | ||
106 | struct regulator_init_data *epe[WM831X_MAX_EPE]; | ||
107 | /** LDO1 = 0 and so on */ | ||
108 | struct regulator_init_data *ldo[WM831X_MAX_LDO]; | ||
109 | /** ISINK1 = 0 and so on*/ | ||
110 | struct regulator_init_data *isink[WM831X_MAX_ISINK]; | ||
111 | }; | ||
112 | |||
113 | #endif | ||
diff --git a/include/linux/mfd/wm831x/regulator.h b/include/linux/mfd/wm831x/regulator.h new file mode 100644 index 000000000000..f95466343fb2 --- /dev/null +++ b/include/linux/mfd/wm831x/regulator.h | |||
@@ -0,0 +1,1218 @@ | |||
1 | /* | ||
2 | * linux/mfd/wm831x/regulator.h -- Regulator definitons for wm831x | ||
3 | * | ||
4 | * Copyright 2009 Wolfson Microelectronics PLC. | ||
5 | * | ||
6 | * Author: Mark Brown <broonie@opensource.wolfsonmicro.com> | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify it | ||
9 | * under the terms of the GNU General Public License as published by the | ||
10 | * Free Software Foundation; either version 2 of the License, or (at your | ||
11 | * option) any later version. | ||
12 | * | ||
13 | */ | ||
14 | |||
15 | #ifndef __MFD_WM831X_REGULATOR_H__ | ||
16 | #define __MFD_WM831X_REGULATOR_H__ | ||
17 | |||
18 | /* | ||
19 | * R16462 (0x404E) - Current Sink 1 | ||
20 | */ | ||
21 | #define WM831X_CS1_ENA 0x8000 /* CS1_ENA */ | ||
22 | #define WM831X_CS1_ENA_MASK 0x8000 /* CS1_ENA */ | ||
23 | #define WM831X_CS1_ENA_SHIFT 15 /* CS1_ENA */ | ||
24 | #define WM831X_CS1_ENA_WIDTH 1 /* CS1_ENA */ | ||
25 | #define WM831X_CS1_DRIVE 0x4000 /* CS1_DRIVE */ | ||
26 | #define WM831X_CS1_DRIVE_MASK 0x4000 /* CS1_DRIVE */ | ||
27 | #define WM831X_CS1_DRIVE_SHIFT 14 /* CS1_DRIVE */ | ||
28 | #define WM831X_CS1_DRIVE_WIDTH 1 /* CS1_DRIVE */ | ||
29 | #define WM831X_CS1_SLPENA 0x1000 /* CS1_SLPENA */ | ||
30 | #define WM831X_CS1_SLPENA_MASK 0x1000 /* CS1_SLPENA */ | ||
31 | #define WM831X_CS1_SLPENA_SHIFT 12 /* CS1_SLPENA */ | ||
32 | #define WM831X_CS1_SLPENA_WIDTH 1 /* CS1_SLPENA */ | ||
33 | #define WM831X_CS1_OFF_RAMP_MASK 0x0C00 /* CS1_OFF_RAMP - [11:10] */ | ||
34 | #define WM831X_CS1_OFF_RAMP_SHIFT 10 /* CS1_OFF_RAMP - [11:10] */ | ||
35 | #define WM831X_CS1_OFF_RAMP_WIDTH 2 /* CS1_OFF_RAMP - [11:10] */ | ||
36 | #define WM831X_CS1_ON_RAMP_MASK 0x0300 /* CS1_ON_RAMP - [9:8] */ | ||
37 | #define WM831X_CS1_ON_RAMP_SHIFT 8 /* CS1_ON_RAMP - [9:8] */ | ||
38 | #define WM831X_CS1_ON_RAMP_WIDTH 2 /* CS1_ON_RAMP - [9:8] */ | ||
39 | #define WM831X_CS1_ISEL_MASK 0x003F /* CS1_ISEL - [5:0] */ | ||
40 | #define WM831X_CS1_ISEL_SHIFT 0 /* CS1_ISEL - [5:0] */ | ||
41 | #define WM831X_CS1_ISEL_WIDTH 6 /* CS1_ISEL - [5:0] */ | ||
42 | |||
43 | /* | ||
44 | * R16463 (0x404F) - Current Sink 2 | ||
45 | */ | ||
46 | #define WM831X_CS2_ENA 0x8000 /* CS2_ENA */ | ||
47 | #define WM831X_CS2_ENA_MASK 0x8000 /* CS2_ENA */ | ||
48 | #define WM831X_CS2_ENA_SHIFT 15 /* CS2_ENA */ | ||
49 | #define WM831X_CS2_ENA_WIDTH 1 /* CS2_ENA */ | ||
50 | #define WM831X_CS2_DRIVE 0x4000 /* CS2_DRIVE */ | ||
51 | #define WM831X_CS2_DRIVE_MASK 0x4000 /* CS2_DRIVE */ | ||
52 | #define WM831X_CS2_DRIVE_SHIFT 14 /* CS2_DRIVE */ | ||
53 | #define WM831X_CS2_DRIVE_WIDTH 1 /* CS2_DRIVE */ | ||
54 | #define WM831X_CS2_SLPENA 0x1000 /* CS2_SLPENA */ | ||
55 | #define WM831X_CS2_SLPENA_MASK 0x1000 /* CS2_SLPENA */ | ||
56 | #define WM831X_CS2_SLPENA_SHIFT 12 /* CS2_SLPENA */ | ||
57 | #define WM831X_CS2_SLPENA_WIDTH 1 /* CS2_SLPENA */ | ||
58 | #define WM831X_CS2_OFF_RAMP_MASK 0x0C00 /* CS2_OFF_RAMP - [11:10] */ | ||
59 | #define WM831X_CS2_OFF_RAMP_SHIFT 10 /* CS2_OFF_RAMP - [11:10] */ | ||
60 | #define WM831X_CS2_OFF_RAMP_WIDTH 2 /* CS2_OFF_RAMP - [11:10] */ | ||
61 | #define WM831X_CS2_ON_RAMP_MASK 0x0300 /* CS2_ON_RAMP - [9:8] */ | ||
62 | #define WM831X_CS2_ON_RAMP_SHIFT 8 /* CS2_ON_RAMP - [9:8] */ | ||
63 | #define WM831X_CS2_ON_RAMP_WIDTH 2 /* CS2_ON_RAMP - [9:8] */ | ||
64 | #define WM831X_CS2_ISEL_MASK 0x003F /* CS2_ISEL - [5:0] */ | ||
65 | #define WM831X_CS2_ISEL_SHIFT 0 /* CS2_ISEL - [5:0] */ | ||
66 | #define WM831X_CS2_ISEL_WIDTH 6 /* CS2_ISEL - [5:0] */ | ||
67 | |||
68 | /* | ||
69 | * R16464 (0x4050) - DCDC Enable | ||
70 | */ | ||
71 | #define WM831X_EPE2_ENA 0x0080 /* EPE2_ENA */ | ||
72 | #define WM831X_EPE2_ENA_MASK 0x0080 /* EPE2_ENA */ | ||
73 | #define WM831X_EPE2_ENA_SHIFT 7 /* EPE2_ENA */ | ||
74 | #define WM831X_EPE2_ENA_WIDTH 1 /* EPE2_ENA */ | ||
75 | #define WM831X_EPE1_ENA 0x0040 /* EPE1_ENA */ | ||
76 | #define WM831X_EPE1_ENA_MASK 0x0040 /* EPE1_ENA */ | ||
77 | #define WM831X_EPE1_ENA_SHIFT 6 /* EPE1_ENA */ | ||
78 | #define WM831X_EPE1_ENA_WIDTH 1 /* EPE1_ENA */ | ||
79 | #define WM831X_DC4_ENA 0x0008 /* DC4_ENA */ | ||
80 | #define WM831X_DC4_ENA_MASK 0x0008 /* DC4_ENA */ | ||
81 | #define WM831X_DC4_ENA_SHIFT 3 /* DC4_ENA */ | ||
82 | #define WM831X_DC4_ENA_WIDTH 1 /* DC4_ENA */ | ||
83 | #define WM831X_DC3_ENA 0x0004 /* DC3_ENA */ | ||
84 | #define WM831X_DC3_ENA_MASK 0x0004 /* DC3_ENA */ | ||
85 | #define WM831X_DC3_ENA_SHIFT 2 /* DC3_ENA */ | ||
86 | #define WM831X_DC3_ENA_WIDTH 1 /* DC3_ENA */ | ||
87 | #define WM831X_DC2_ENA 0x0002 /* DC2_ENA */ | ||
88 | #define WM831X_DC2_ENA_MASK 0x0002 /* DC2_ENA */ | ||
89 | #define WM831X_DC2_ENA_SHIFT 1 /* DC2_ENA */ | ||
90 | #define WM831X_DC2_ENA_WIDTH 1 /* DC2_ENA */ | ||
91 | #define WM831X_DC1_ENA 0x0001 /* DC1_ENA */ | ||
92 | #define WM831X_DC1_ENA_MASK 0x0001 /* DC1_ENA */ | ||
93 | #define WM831X_DC1_ENA_SHIFT 0 /* DC1_ENA */ | ||
94 | #define WM831X_DC1_ENA_WIDTH 1 /* DC1_ENA */ | ||
95 | |||
96 | /* | ||
97 | * R16465 (0x4051) - LDO Enable | ||
98 | */ | ||
99 | #define WM831X_LDO11_ENA 0x0400 /* LDO11_ENA */ | ||
100 | #define WM831X_LDO11_ENA_MASK 0x0400 /* LDO11_ENA */ | ||
101 | #define WM831X_LDO11_ENA_SHIFT 10 /* LDO11_ENA */ | ||
102 | #define WM831X_LDO11_ENA_WIDTH 1 /* LDO11_ENA */ | ||
103 | #define WM831X_LDO10_ENA 0x0200 /* LDO10_ENA */ | ||
104 | #define WM831X_LDO10_ENA_MASK 0x0200 /* LDO10_ENA */ | ||
105 | #define WM831X_LDO10_ENA_SHIFT 9 /* LDO10_ENA */ | ||
106 | #define WM831X_LDO10_ENA_WIDTH 1 /* LDO10_ENA */ | ||
107 | #define WM831X_LDO9_ENA 0x0100 /* LDO9_ENA */ | ||
108 | #define WM831X_LDO9_ENA_MASK 0x0100 /* LDO9_ENA */ | ||
109 | #define WM831X_LDO9_ENA_SHIFT 8 /* LDO9_ENA */ | ||
110 | #define WM831X_LDO9_ENA_WIDTH 1 /* LDO9_ENA */ | ||
111 | #define WM831X_LDO8_ENA 0x0080 /* LDO8_ENA */ | ||
112 | #define WM831X_LDO8_ENA_MASK 0x0080 /* LDO8_ENA */ | ||
113 | #define WM831X_LDO8_ENA_SHIFT 7 /* LDO8_ENA */ | ||
114 | #define WM831X_LDO8_ENA_WIDTH 1 /* LDO8_ENA */ | ||
115 | #define WM831X_LDO7_ENA 0x0040 /* LDO7_ENA */ | ||
116 | #define WM831X_LDO7_ENA_MASK 0x0040 /* LDO7_ENA */ | ||
117 | #define WM831X_LDO7_ENA_SHIFT 6 /* LDO7_ENA */ | ||
118 | #define WM831X_LDO7_ENA_WIDTH 1 /* LDO7_ENA */ | ||
119 | #define WM831X_LDO6_ENA 0x0020 /* LDO6_ENA */ | ||
120 | #define WM831X_LDO6_ENA_MASK 0x0020 /* LDO6_ENA */ | ||
121 | #define WM831X_LDO6_ENA_SHIFT 5 /* LDO6_ENA */ | ||
122 | #define WM831X_LDO6_ENA_WIDTH 1 /* LDO6_ENA */ | ||
123 | #define WM831X_LDO5_ENA 0x0010 /* LDO5_ENA */ | ||
124 | #define WM831X_LDO5_ENA_MASK 0x0010 /* LDO5_ENA */ | ||
125 | #define WM831X_LDO5_ENA_SHIFT 4 /* LDO5_ENA */ | ||
126 | #define WM831X_LDO5_ENA_WIDTH 1 /* LDO5_ENA */ | ||
127 | #define WM831X_LDO4_ENA 0x0008 /* LDO4_ENA */ | ||
128 | #define WM831X_LDO4_ENA_MASK 0x0008 /* LDO4_ENA */ | ||
129 | #define WM831X_LDO4_ENA_SHIFT 3 /* LDO4_ENA */ | ||
130 | #define WM831X_LDO4_ENA_WIDTH 1 /* LDO4_ENA */ | ||
131 | #define WM831X_LDO3_ENA 0x0004 /* LDO3_ENA */ | ||
132 | #define WM831X_LDO3_ENA_MASK 0x0004 /* LDO3_ENA */ | ||
133 | #define WM831X_LDO3_ENA_SHIFT 2 /* LDO3_ENA */ | ||
134 | #define WM831X_LDO3_ENA_WIDTH 1 /* LDO3_ENA */ | ||
135 | #define WM831X_LDO2_ENA 0x0002 /* LDO2_ENA */ | ||
136 | #define WM831X_LDO2_ENA_MASK 0x0002 /* LDO2_ENA */ | ||
137 | #define WM831X_LDO2_ENA_SHIFT 1 /* LDO2_ENA */ | ||
138 | #define WM831X_LDO2_ENA_WIDTH 1 /* LDO2_ENA */ | ||
139 | #define WM831X_LDO1_ENA 0x0001 /* LDO1_ENA */ | ||
140 | #define WM831X_LDO1_ENA_MASK 0x0001 /* LDO1_ENA */ | ||
141 | #define WM831X_LDO1_ENA_SHIFT 0 /* LDO1_ENA */ | ||
142 | #define WM831X_LDO1_ENA_WIDTH 1 /* LDO1_ENA */ | ||
143 | |||
144 | /* | ||
145 | * R16466 (0x4052) - DCDC Status | ||
146 | */ | ||
147 | #define WM831X_EPE2_STS 0x0080 /* EPE2_STS */ | ||
148 | #define WM831X_EPE2_STS_MASK 0x0080 /* EPE2_STS */ | ||
149 | #define WM831X_EPE2_STS_SHIFT 7 /* EPE2_STS */ | ||
150 | #define WM831X_EPE2_STS_WIDTH 1 /* EPE2_STS */ | ||
151 | #define WM831X_EPE1_STS 0x0040 /* EPE1_STS */ | ||
152 | #define WM831X_EPE1_STS_MASK 0x0040 /* EPE1_STS */ | ||
153 | #define WM831X_EPE1_STS_SHIFT 6 /* EPE1_STS */ | ||
154 | #define WM831X_EPE1_STS_WIDTH 1 /* EPE1_STS */ | ||
155 | #define WM831X_DC4_STS 0x0008 /* DC4_STS */ | ||
156 | #define WM831X_DC4_STS_MASK 0x0008 /* DC4_STS */ | ||
157 | #define WM831X_DC4_STS_SHIFT 3 /* DC4_STS */ | ||
158 | #define WM831X_DC4_STS_WIDTH 1 /* DC4_STS */ | ||
159 | #define WM831X_DC3_STS 0x0004 /* DC3_STS */ | ||
160 | #define WM831X_DC3_STS_MASK 0x0004 /* DC3_STS */ | ||
161 | #define WM831X_DC3_STS_SHIFT 2 /* DC3_STS */ | ||
162 | #define WM831X_DC3_STS_WIDTH 1 /* DC3_STS */ | ||
163 | #define WM831X_DC2_STS 0x0002 /* DC2_STS */ | ||
164 | #define WM831X_DC2_STS_MASK 0x0002 /* DC2_STS */ | ||
165 | #define WM831X_DC2_STS_SHIFT 1 /* DC2_STS */ | ||
166 | #define WM831X_DC2_STS_WIDTH 1 /* DC2_STS */ | ||
167 | #define WM831X_DC1_STS 0x0001 /* DC1_STS */ | ||
168 | #define WM831X_DC1_STS_MASK 0x0001 /* DC1_STS */ | ||
169 | #define WM831X_DC1_STS_SHIFT 0 /* DC1_STS */ | ||
170 | #define WM831X_DC1_STS_WIDTH 1 /* DC1_STS */ | ||
171 | |||
172 | /* | ||
173 | * R16467 (0x4053) - LDO Status | ||
174 | */ | ||
175 | #define WM831X_LDO11_STS 0x0400 /* LDO11_STS */ | ||
176 | #define WM831X_LDO11_STS_MASK 0x0400 /* LDO11_STS */ | ||
177 | #define WM831X_LDO11_STS_SHIFT 10 /* LDO11_STS */ | ||
178 | #define WM831X_LDO11_STS_WIDTH 1 /* LDO11_STS */ | ||
179 | #define WM831X_LDO10_STS 0x0200 /* LDO10_STS */ | ||
180 | #define WM831X_LDO10_STS_MASK 0x0200 /* LDO10_STS */ | ||
181 | #define WM831X_LDO10_STS_SHIFT 9 /* LDO10_STS */ | ||
182 | #define WM831X_LDO10_STS_WIDTH 1 /* LDO10_STS */ | ||
183 | #define WM831X_LDO9_STS 0x0100 /* LDO9_STS */ | ||
184 | #define WM831X_LDO9_STS_MASK 0x0100 /* LDO9_STS */ | ||
185 | #define WM831X_LDO9_STS_SHIFT 8 /* LDO9_STS */ | ||
186 | #define WM831X_LDO9_STS_WIDTH 1 /* LDO9_STS */ | ||
187 | #define WM831X_LDO8_STS 0x0080 /* LDO8_STS */ | ||
188 | #define WM831X_LDO8_STS_MASK 0x0080 /* LDO8_STS */ | ||
189 | #define WM831X_LDO8_STS_SHIFT 7 /* LDO8_STS */ | ||
190 | #define WM831X_LDO8_STS_WIDTH 1 /* LDO8_STS */ | ||
191 | #define WM831X_LDO7_STS 0x0040 /* LDO7_STS */ | ||
192 | #define WM831X_LDO7_STS_MASK 0x0040 /* LDO7_STS */ | ||
193 | #define WM831X_LDO7_STS_SHIFT 6 /* LDO7_STS */ | ||
194 | #define WM831X_LDO7_STS_WIDTH 1 /* LDO7_STS */ | ||
195 | #define WM831X_LDO6_STS 0x0020 /* LDO6_STS */ | ||
196 | #define WM831X_LDO6_STS_MASK 0x0020 /* LDO6_STS */ | ||
197 | #define WM831X_LDO6_STS_SHIFT 5 /* LDO6_STS */ | ||
198 | #define WM831X_LDO6_STS_WIDTH 1 /* LDO6_STS */ | ||
199 | #define WM831X_LDO5_STS 0x0010 /* LDO5_STS */ | ||
200 | #define WM831X_LDO5_STS_MASK 0x0010 /* LDO5_STS */ | ||
201 | #define WM831X_LDO5_STS_SHIFT 4 /* LDO5_STS */ | ||
202 | #define WM831X_LDO5_STS_WIDTH 1 /* LDO5_STS */ | ||
203 | #define WM831X_LDO4_STS 0x0008 /* LDO4_STS */ | ||
204 | #define WM831X_LDO4_STS_MASK 0x0008 /* LDO4_STS */ | ||
205 | #define WM831X_LDO4_STS_SHIFT 3 /* LDO4_STS */ | ||
206 | #define WM831X_LDO4_STS_WIDTH 1 /* LDO4_STS */ | ||
207 | #define WM831X_LDO3_STS 0x0004 /* LDO3_STS */ | ||
208 | #define WM831X_LDO3_STS_MASK 0x0004 /* LDO3_STS */ | ||
209 | #define WM831X_LDO3_STS_SHIFT 2 /* LDO3_STS */ | ||
210 | #define WM831X_LDO3_STS_WIDTH 1 /* LDO3_STS */ | ||
211 | #define WM831X_LDO2_STS 0x0002 /* LDO2_STS */ | ||
212 | #define WM831X_LDO2_STS_MASK 0x0002 /* LDO2_STS */ | ||
213 | #define WM831X_LDO2_STS_SHIFT 1 /* LDO2_STS */ | ||
214 | #define WM831X_LDO2_STS_WIDTH 1 /* LDO2_STS */ | ||
215 | #define WM831X_LDO1_STS 0x0001 /* LDO1_STS */ | ||
216 | #define WM831X_LDO1_STS_MASK 0x0001 /* LDO1_STS */ | ||
217 | #define WM831X_LDO1_STS_SHIFT 0 /* LDO1_STS */ | ||
218 | #define WM831X_LDO1_STS_WIDTH 1 /* LDO1_STS */ | ||
219 | |||
220 | /* | ||
221 | * R16468 (0x4054) - DCDC UV Status | ||
222 | */ | ||
223 | #define WM831X_DC2_OV_STS 0x2000 /* DC2_OV_STS */ | ||
224 | #define WM831X_DC2_OV_STS_MASK 0x2000 /* DC2_OV_STS */ | ||
225 | #define WM831X_DC2_OV_STS_SHIFT 13 /* DC2_OV_STS */ | ||
226 | #define WM831X_DC2_OV_STS_WIDTH 1 /* DC2_OV_STS */ | ||
227 | #define WM831X_DC1_OV_STS 0x1000 /* DC1_OV_STS */ | ||
228 | #define WM831X_DC1_OV_STS_MASK 0x1000 /* DC1_OV_STS */ | ||
229 | #define WM831X_DC1_OV_STS_SHIFT 12 /* DC1_OV_STS */ | ||
230 | #define WM831X_DC1_OV_STS_WIDTH 1 /* DC1_OV_STS */ | ||
231 | #define WM831X_DC2_HC_STS 0x0200 /* DC2_HC_STS */ | ||
232 | #define WM831X_DC2_HC_STS_MASK 0x0200 /* DC2_HC_STS */ | ||
233 | #define WM831X_DC2_HC_STS_SHIFT 9 /* DC2_HC_STS */ | ||
234 | #define WM831X_DC2_HC_STS_WIDTH 1 /* DC2_HC_STS */ | ||
235 | #define WM831X_DC1_HC_STS 0x0100 /* DC1_HC_STS */ | ||
236 | #define WM831X_DC1_HC_STS_MASK 0x0100 /* DC1_HC_STS */ | ||
237 | #define WM831X_DC1_HC_STS_SHIFT 8 /* DC1_HC_STS */ | ||
238 | #define WM831X_DC1_HC_STS_WIDTH 1 /* DC1_HC_STS */ | ||
239 | #define WM831X_DC4_UV_STS 0x0008 /* DC4_UV_STS */ | ||
240 | #define WM831X_DC4_UV_STS_MASK 0x0008 /* DC4_UV_STS */ | ||
241 | #define WM831X_DC4_UV_STS_SHIFT 3 /* DC4_UV_STS */ | ||
242 | #define WM831X_DC4_UV_STS_WIDTH 1 /* DC4_UV_STS */ | ||
243 | #define WM831X_DC3_UV_STS 0x0004 /* DC3_UV_STS */ | ||
244 | #define WM831X_DC3_UV_STS_MASK 0x0004 /* DC3_UV_STS */ | ||
245 | #define WM831X_DC3_UV_STS_SHIFT 2 /* DC3_UV_STS */ | ||
246 | #define WM831X_DC3_UV_STS_WIDTH 1 /* DC3_UV_STS */ | ||
247 | #define WM831X_DC2_UV_STS 0x0002 /* DC2_UV_STS */ | ||
248 | #define WM831X_DC2_UV_STS_MASK 0x0002 /* DC2_UV_STS */ | ||
249 | #define WM831X_DC2_UV_STS_SHIFT 1 /* DC2_UV_STS */ | ||
250 | #define WM831X_DC2_UV_STS_WIDTH 1 /* DC2_UV_STS */ | ||
251 | #define WM831X_DC1_UV_STS 0x0001 /* DC1_UV_STS */ | ||
252 | #define WM831X_DC1_UV_STS_MASK 0x0001 /* DC1_UV_STS */ | ||
253 | #define WM831X_DC1_UV_STS_SHIFT 0 /* DC1_UV_STS */ | ||
254 | #define WM831X_DC1_UV_STS_WIDTH 1 /* DC1_UV_STS */ | ||
255 | |||
256 | /* | ||
257 | * R16469 (0x4055) - LDO UV Status | ||
258 | */ | ||
259 | #define WM831X_INTLDO_UV_STS 0x8000 /* INTLDO_UV_STS */ | ||
260 | #define WM831X_INTLDO_UV_STS_MASK 0x8000 /* INTLDO_UV_STS */ | ||
261 | #define WM831X_INTLDO_UV_STS_SHIFT 15 /* INTLDO_UV_STS */ | ||
262 | #define WM831X_INTLDO_UV_STS_WIDTH 1 /* INTLDO_UV_STS */ | ||
263 | #define WM831X_LDO10_UV_STS 0x0200 /* LDO10_UV_STS */ | ||
264 | #define WM831X_LDO10_UV_STS_MASK 0x0200 /* LDO10_UV_STS */ | ||
265 | #define WM831X_LDO10_UV_STS_SHIFT 9 /* LDO10_UV_STS */ | ||
266 | #define WM831X_LDO10_UV_STS_WIDTH 1 /* LDO10_UV_STS */ | ||
267 | #define WM831X_LDO9_UV_STS 0x0100 /* LDO9_UV_STS */ | ||
268 | #define WM831X_LDO9_UV_STS_MASK 0x0100 /* LDO9_UV_STS */ | ||
269 | #define WM831X_LDO9_UV_STS_SHIFT 8 /* LDO9_UV_STS */ | ||
270 | #define WM831X_LDO9_UV_STS_WIDTH 1 /* LDO9_UV_STS */ | ||
271 | #define WM831X_LDO8_UV_STS 0x0080 /* LDO8_UV_STS */ | ||
272 | #define WM831X_LDO8_UV_STS_MASK 0x0080 /* LDO8_UV_STS */ | ||
273 | #define WM831X_LDO8_UV_STS_SHIFT 7 /* LDO8_UV_STS */ | ||
274 | #define WM831X_LDO8_UV_STS_WIDTH 1 /* LDO8_UV_STS */ | ||
275 | #define WM831X_LDO7_UV_STS 0x0040 /* LDO7_UV_STS */ | ||
276 | #define WM831X_LDO7_UV_STS_MASK 0x0040 /* LDO7_UV_STS */ | ||
277 | #define WM831X_LDO7_UV_STS_SHIFT 6 /* LDO7_UV_STS */ | ||
278 | #define WM831X_LDO7_UV_STS_WIDTH 1 /* LDO7_UV_STS */ | ||
279 | #define WM831X_LDO6_UV_STS 0x0020 /* LDO6_UV_STS */ | ||
280 | #define WM831X_LDO6_UV_STS_MASK 0x0020 /* LDO6_UV_STS */ | ||
281 | #define WM831X_LDO6_UV_STS_SHIFT 5 /* LDO6_UV_STS */ | ||
282 | #define WM831X_LDO6_UV_STS_WIDTH 1 /* LDO6_UV_STS */ | ||
283 | #define WM831X_LDO5_UV_STS 0x0010 /* LDO5_UV_STS */ | ||
284 | #define WM831X_LDO5_UV_STS_MASK 0x0010 /* LDO5_UV_STS */ | ||
285 | #define WM831X_LDO5_UV_STS_SHIFT 4 /* LDO5_UV_STS */ | ||
286 | #define WM831X_LDO5_UV_STS_WIDTH 1 /* LDO5_UV_STS */ | ||
287 | #define WM831X_LDO4_UV_STS 0x0008 /* LDO4_UV_STS */ | ||
288 | #define WM831X_LDO4_UV_STS_MASK 0x0008 /* LDO4_UV_STS */ | ||
289 | #define WM831X_LDO4_UV_STS_SHIFT 3 /* LDO4_UV_STS */ | ||
290 | #define WM831X_LDO4_UV_STS_WIDTH 1 /* LDO4_UV_STS */ | ||
291 | #define WM831X_LDO3_UV_STS 0x0004 /* LDO3_UV_STS */ | ||
292 | #define WM831X_LDO3_UV_STS_MASK 0x0004 /* LDO3_UV_STS */ | ||
293 | #define WM831X_LDO3_UV_STS_SHIFT 2 /* LDO3_UV_STS */ | ||
294 | #define WM831X_LDO3_UV_STS_WIDTH 1 /* LDO3_UV_STS */ | ||
295 | #define WM831X_LDO2_UV_STS 0x0002 /* LDO2_UV_STS */ | ||
296 | #define WM831X_LDO2_UV_STS_MASK 0x0002 /* LDO2_UV_STS */ | ||
297 | #define WM831X_LDO2_UV_STS_SHIFT 1 /* LDO2_UV_STS */ | ||
298 | #define WM831X_LDO2_UV_STS_WIDTH 1 /* LDO2_UV_STS */ | ||
299 | #define WM831X_LDO1_UV_STS 0x0001 /* LDO1_UV_STS */ | ||
300 | #define WM831X_LDO1_UV_STS_MASK 0x0001 /* LDO1_UV_STS */ | ||
301 | #define WM831X_LDO1_UV_STS_SHIFT 0 /* LDO1_UV_STS */ | ||
302 | #define WM831X_LDO1_UV_STS_WIDTH 1 /* LDO1_UV_STS */ | ||
303 | |||
304 | /* | ||
305 | * R16470 (0x4056) - DC1 Control 1 | ||
306 | */ | ||
307 | #define WM831X_DC1_RATE_MASK 0xC000 /* DC1_RATE - [15:14] */ | ||
308 | #define WM831X_DC1_RATE_SHIFT 14 /* DC1_RATE - [15:14] */ | ||
309 | #define WM831X_DC1_RATE_WIDTH 2 /* DC1_RATE - [15:14] */ | ||
310 | #define WM831X_DC1_PHASE 0x1000 /* DC1_PHASE */ | ||
311 | #define WM831X_DC1_PHASE_MASK 0x1000 /* DC1_PHASE */ | ||
312 | #define WM831X_DC1_PHASE_SHIFT 12 /* DC1_PHASE */ | ||
313 | #define WM831X_DC1_PHASE_WIDTH 1 /* DC1_PHASE */ | ||
314 | #define WM831X_DC1_FREQ_MASK 0x0300 /* DC1_FREQ - [9:8] */ | ||
315 | #define WM831X_DC1_FREQ_SHIFT 8 /* DC1_FREQ - [9:8] */ | ||
316 | #define WM831X_DC1_FREQ_WIDTH 2 /* DC1_FREQ - [9:8] */ | ||
317 | #define WM831X_DC1_FLT 0x0080 /* DC1_FLT */ | ||
318 | #define WM831X_DC1_FLT_MASK 0x0080 /* DC1_FLT */ | ||
319 | #define WM831X_DC1_FLT_SHIFT 7 /* DC1_FLT */ | ||
320 | #define WM831X_DC1_FLT_WIDTH 1 /* DC1_FLT */ | ||
321 | #define WM831X_DC1_SOFT_START_MASK 0x0030 /* DC1_SOFT_START - [5:4] */ | ||
322 | #define WM831X_DC1_SOFT_START_SHIFT 4 /* DC1_SOFT_START - [5:4] */ | ||
323 | #define WM831X_DC1_SOFT_START_WIDTH 2 /* DC1_SOFT_START - [5:4] */ | ||
324 | #define WM831X_DC1_CAP_MASK 0x0003 /* DC1_CAP - [1:0] */ | ||
325 | #define WM831X_DC1_CAP_SHIFT 0 /* DC1_CAP - [1:0] */ | ||
326 | #define WM831X_DC1_CAP_WIDTH 2 /* DC1_CAP - [1:0] */ | ||
327 | |||
328 | /* | ||
329 | * R16471 (0x4057) - DC1 Control 2 | ||
330 | */ | ||
331 | #define WM831X_DC1_ERR_ACT_MASK 0xC000 /* DC1_ERR_ACT - [15:14] */ | ||
332 | #define WM831X_DC1_ERR_ACT_SHIFT 14 /* DC1_ERR_ACT - [15:14] */ | ||
333 | #define WM831X_DC1_ERR_ACT_WIDTH 2 /* DC1_ERR_ACT - [15:14] */ | ||
334 | #define WM831X_DC1_HWC_SRC_MASK 0x1800 /* DC1_HWC_SRC - [12:11] */ | ||
335 | #define WM831X_DC1_HWC_SRC_SHIFT 11 /* DC1_HWC_SRC - [12:11] */ | ||
336 | #define WM831X_DC1_HWC_SRC_WIDTH 2 /* DC1_HWC_SRC - [12:11] */ | ||
337 | #define WM831X_DC1_HWC_VSEL 0x0400 /* DC1_HWC_VSEL */ | ||
338 | #define WM831X_DC1_HWC_VSEL_MASK 0x0400 /* DC1_HWC_VSEL */ | ||
339 | #define WM831X_DC1_HWC_VSEL_SHIFT 10 /* DC1_HWC_VSEL */ | ||
340 | #define WM831X_DC1_HWC_VSEL_WIDTH 1 /* DC1_HWC_VSEL */ | ||
341 | #define WM831X_DC1_HWC_MODE_MASK 0x0300 /* DC1_HWC_MODE - [9:8] */ | ||
342 | #define WM831X_DC1_HWC_MODE_SHIFT 8 /* DC1_HWC_MODE - [9:8] */ | ||
343 | #define WM831X_DC1_HWC_MODE_WIDTH 2 /* DC1_HWC_MODE - [9:8] */ | ||
344 | #define WM831X_DC1_HC_THR_MASK 0x0070 /* DC1_HC_THR - [6:4] */ | ||
345 | #define WM831X_DC1_HC_THR_SHIFT 4 /* DC1_HC_THR - [6:4] */ | ||
346 | #define WM831X_DC1_HC_THR_WIDTH 3 /* DC1_HC_THR - [6:4] */ | ||
347 | #define WM831X_DC1_HC_IND_ENA 0x0001 /* DC1_HC_IND_ENA */ | ||
348 | #define WM831X_DC1_HC_IND_ENA_MASK 0x0001 /* DC1_HC_IND_ENA */ | ||
349 | #define WM831X_DC1_HC_IND_ENA_SHIFT 0 /* DC1_HC_IND_ENA */ | ||
350 | #define WM831X_DC1_HC_IND_ENA_WIDTH 1 /* DC1_HC_IND_ENA */ | ||
351 | |||
352 | /* | ||
353 | * R16472 (0x4058) - DC1 ON Config | ||
354 | */ | ||
355 | #define WM831X_DC1_ON_SLOT_MASK 0xE000 /* DC1_ON_SLOT - [15:13] */ | ||
356 | #define WM831X_DC1_ON_SLOT_SHIFT 13 /* DC1_ON_SLOT - [15:13] */ | ||
357 | #define WM831X_DC1_ON_SLOT_WIDTH 3 /* DC1_ON_SLOT - [15:13] */ | ||
358 | #define WM831X_DC1_ON_MODE_MASK 0x0300 /* DC1_ON_MODE - [9:8] */ | ||
359 | #define WM831X_DC1_ON_MODE_SHIFT 8 /* DC1_ON_MODE - [9:8] */ | ||
360 | #define WM831X_DC1_ON_MODE_WIDTH 2 /* DC1_ON_MODE - [9:8] */ | ||
361 | #define WM831X_DC1_ON_VSEL_MASK 0x007F /* DC1_ON_VSEL - [6:0] */ | ||
362 | #define WM831X_DC1_ON_VSEL_SHIFT 0 /* DC1_ON_VSEL - [6:0] */ | ||
363 | #define WM831X_DC1_ON_VSEL_WIDTH 7 /* DC1_ON_VSEL - [6:0] */ | ||
364 | |||
365 | /* | ||
366 | * R16473 (0x4059) - DC1 SLEEP Control | ||
367 | */ | ||
368 | #define WM831X_DC1_SLP_SLOT_MASK 0xE000 /* DC1_SLP_SLOT - [15:13] */ | ||
369 | #define WM831X_DC1_SLP_SLOT_SHIFT 13 /* DC1_SLP_SLOT - [15:13] */ | ||
370 | #define WM831X_DC1_SLP_SLOT_WIDTH 3 /* DC1_SLP_SLOT - [15:13] */ | ||
371 | #define WM831X_DC1_SLP_MODE_MASK 0x0300 /* DC1_SLP_MODE - [9:8] */ | ||
372 | #define WM831X_DC1_SLP_MODE_SHIFT 8 /* DC1_SLP_MODE - [9:8] */ | ||
373 | #define WM831X_DC1_SLP_MODE_WIDTH 2 /* DC1_SLP_MODE - [9:8] */ | ||
374 | #define WM831X_DC1_SLP_VSEL_MASK 0x007F /* DC1_SLP_VSEL - [6:0] */ | ||
375 | #define WM831X_DC1_SLP_VSEL_SHIFT 0 /* DC1_SLP_VSEL - [6:0] */ | ||
376 | #define WM831X_DC1_SLP_VSEL_WIDTH 7 /* DC1_SLP_VSEL - [6:0] */ | ||
377 | |||
378 | /* | ||
379 | * R16474 (0x405A) - DC1 DVS Control | ||
380 | */ | ||
381 | #define WM831X_DC1_DVS_SRC_MASK 0x1800 /* DC1_DVS_SRC - [12:11] */ | ||
382 | #define WM831X_DC1_DVS_SRC_SHIFT 11 /* DC1_DVS_SRC - [12:11] */ | ||
383 | #define WM831X_DC1_DVS_SRC_WIDTH 2 /* DC1_DVS_SRC - [12:11] */ | ||
384 | #define WM831X_DC1_DVS_VSEL_MASK 0x007F /* DC1_DVS_VSEL - [6:0] */ | ||
385 | #define WM831X_DC1_DVS_VSEL_SHIFT 0 /* DC1_DVS_VSEL - [6:0] */ | ||
386 | #define WM831X_DC1_DVS_VSEL_WIDTH 7 /* DC1_DVS_VSEL - [6:0] */ | ||
387 | |||
388 | /* | ||
389 | * R16475 (0x405B) - DC2 Control 1 | ||
390 | */ | ||
391 | #define WM831X_DC2_RATE_MASK 0xC000 /* DC2_RATE - [15:14] */ | ||
392 | #define WM831X_DC2_RATE_SHIFT 14 /* DC2_RATE - [15:14] */ | ||
393 | #define WM831X_DC2_RATE_WIDTH 2 /* DC2_RATE - [15:14] */ | ||
394 | #define WM831X_DC2_PHASE 0x1000 /* DC2_PHASE */ | ||
395 | #define WM831X_DC2_PHASE_MASK 0x1000 /* DC2_PHASE */ | ||
396 | #define WM831X_DC2_PHASE_SHIFT 12 /* DC2_PHASE */ | ||
397 | #define WM831X_DC2_PHASE_WIDTH 1 /* DC2_PHASE */ | ||
398 | #define WM831X_DC2_FREQ_MASK 0x0300 /* DC2_FREQ - [9:8] */ | ||
399 | #define WM831X_DC2_FREQ_SHIFT 8 /* DC2_FREQ - [9:8] */ | ||
400 | #define WM831X_DC2_FREQ_WIDTH 2 /* DC2_FREQ - [9:8] */ | ||
401 | #define WM831X_DC2_FLT 0x0080 /* DC2_FLT */ | ||
402 | #define WM831X_DC2_FLT_MASK 0x0080 /* DC2_FLT */ | ||
403 | #define WM831X_DC2_FLT_SHIFT 7 /* DC2_FLT */ | ||
404 | #define WM831X_DC2_FLT_WIDTH 1 /* DC2_FLT */ | ||
405 | #define WM831X_DC2_SOFT_START_MASK 0x0030 /* DC2_SOFT_START - [5:4] */ | ||
406 | #define WM831X_DC2_SOFT_START_SHIFT 4 /* DC2_SOFT_START - [5:4] */ | ||
407 | #define WM831X_DC2_SOFT_START_WIDTH 2 /* DC2_SOFT_START - [5:4] */ | ||
408 | #define WM831X_DC2_CAP_MASK 0x0003 /* DC2_CAP - [1:0] */ | ||
409 | #define WM831X_DC2_CAP_SHIFT 0 /* DC2_CAP - [1:0] */ | ||
410 | #define WM831X_DC2_CAP_WIDTH 2 /* DC2_CAP - [1:0] */ | ||
411 | |||
412 | /* | ||
413 | * R16476 (0x405C) - DC2 Control 2 | ||
414 | */ | ||
415 | #define WM831X_DC2_ERR_ACT_MASK 0xC000 /* DC2_ERR_ACT - [15:14] */ | ||
416 | #define WM831X_DC2_ERR_ACT_SHIFT 14 /* DC2_ERR_ACT - [15:14] */ | ||
417 | #define WM831X_DC2_ERR_ACT_WIDTH 2 /* DC2_ERR_ACT - [15:14] */ | ||
418 | #define WM831X_DC2_HWC_SRC_MASK 0x1800 /* DC2_HWC_SRC - [12:11] */ | ||
419 | #define WM831X_DC2_HWC_SRC_SHIFT 11 /* DC2_HWC_SRC - [12:11] */ | ||
420 | #define WM831X_DC2_HWC_SRC_WIDTH 2 /* DC2_HWC_SRC - [12:11] */ | ||
421 | #define WM831X_DC2_HWC_VSEL 0x0400 /* DC2_HWC_VSEL */ | ||
422 | #define WM831X_DC2_HWC_VSEL_MASK 0x0400 /* DC2_HWC_VSEL */ | ||
423 | #define WM831X_DC2_HWC_VSEL_SHIFT 10 /* DC2_HWC_VSEL */ | ||
424 | #define WM831X_DC2_HWC_VSEL_WIDTH 1 /* DC2_HWC_VSEL */ | ||
425 | #define WM831X_DC2_HWC_MODE_MASK 0x0300 /* DC2_HWC_MODE - [9:8] */ | ||
426 | #define WM831X_DC2_HWC_MODE_SHIFT 8 /* DC2_HWC_MODE - [9:8] */ | ||
427 | #define WM831X_DC2_HWC_MODE_WIDTH 2 /* DC2_HWC_MODE - [9:8] */ | ||
428 | #define WM831X_DC2_HC_THR_MASK 0x0070 /* DC2_HC_THR - [6:4] */ | ||
429 | #define WM831X_DC2_HC_THR_SHIFT 4 /* DC2_HC_THR - [6:4] */ | ||
430 | #define WM831X_DC2_HC_THR_WIDTH 3 /* DC2_HC_THR - [6:4] */ | ||
431 | #define WM831X_DC2_HC_IND_ENA 0x0001 /* DC2_HC_IND_ENA */ | ||
432 | #define WM831X_DC2_HC_IND_ENA_MASK 0x0001 /* DC2_HC_IND_ENA */ | ||
433 | #define WM831X_DC2_HC_IND_ENA_SHIFT 0 /* DC2_HC_IND_ENA */ | ||
434 | #define WM831X_DC2_HC_IND_ENA_WIDTH 1 /* DC2_HC_IND_ENA */ | ||
435 | |||
436 | /* | ||
437 | * R16477 (0x405D) - DC2 ON Config | ||
438 | */ | ||
439 | #define WM831X_DC2_ON_SLOT_MASK 0xE000 /* DC2_ON_SLOT - [15:13] */ | ||
440 | #define WM831X_DC2_ON_SLOT_SHIFT 13 /* DC2_ON_SLOT - [15:13] */ | ||
441 | #define WM831X_DC2_ON_SLOT_WIDTH 3 /* DC2_ON_SLOT - [15:13] */ | ||
442 | #define WM831X_DC2_ON_MODE_MASK 0x0300 /* DC2_ON_MODE - [9:8] */ | ||
443 | #define WM831X_DC2_ON_MODE_SHIFT 8 /* DC2_ON_MODE - [9:8] */ | ||
444 | #define WM831X_DC2_ON_MODE_WIDTH 2 /* DC2_ON_MODE - [9:8] */ | ||
445 | #define WM831X_DC2_ON_VSEL_MASK 0x007F /* DC2_ON_VSEL - [6:0] */ | ||
446 | #define WM831X_DC2_ON_VSEL_SHIFT 0 /* DC2_ON_VSEL - [6:0] */ | ||
447 | #define WM831X_DC2_ON_VSEL_WIDTH 7 /* DC2_ON_VSEL - [6:0] */ | ||
448 | |||
449 | /* | ||
450 | * R16478 (0x405E) - DC2 SLEEP Control | ||
451 | */ | ||
452 | #define WM831X_DC2_SLP_SLOT_MASK 0xE000 /* DC2_SLP_SLOT - [15:13] */ | ||
453 | #define WM831X_DC2_SLP_SLOT_SHIFT 13 /* DC2_SLP_SLOT - [15:13] */ | ||
454 | #define WM831X_DC2_SLP_SLOT_WIDTH 3 /* DC2_SLP_SLOT - [15:13] */ | ||
455 | #define WM831X_DC2_SLP_MODE_MASK 0x0300 /* DC2_SLP_MODE - [9:8] */ | ||
456 | #define WM831X_DC2_SLP_MODE_SHIFT 8 /* DC2_SLP_MODE - [9:8] */ | ||
457 | #define WM831X_DC2_SLP_MODE_WIDTH 2 /* DC2_SLP_MODE - [9:8] */ | ||
458 | #define WM831X_DC2_SLP_VSEL_MASK 0x007F /* DC2_SLP_VSEL - [6:0] */ | ||
459 | #define WM831X_DC2_SLP_VSEL_SHIFT 0 /* DC2_SLP_VSEL - [6:0] */ | ||
460 | #define WM831X_DC2_SLP_VSEL_WIDTH 7 /* DC2_SLP_VSEL - [6:0] */ | ||
461 | |||
462 | /* | ||
463 | * R16479 (0x405F) - DC2 DVS Control | ||
464 | */ | ||
465 | #define WM831X_DC2_DVS_SRC_MASK 0x1800 /* DC2_DVS_SRC - [12:11] */ | ||
466 | #define WM831X_DC2_DVS_SRC_SHIFT 11 /* DC2_DVS_SRC - [12:11] */ | ||
467 | #define WM831X_DC2_DVS_SRC_WIDTH 2 /* DC2_DVS_SRC - [12:11] */ | ||
468 | #define WM831X_DC2_DVS_VSEL_MASK 0x007F /* DC2_DVS_VSEL - [6:0] */ | ||
469 | #define WM831X_DC2_DVS_VSEL_SHIFT 0 /* DC2_DVS_VSEL - [6:0] */ | ||
470 | #define WM831X_DC2_DVS_VSEL_WIDTH 7 /* DC2_DVS_VSEL - [6:0] */ | ||
471 | |||
472 | /* | ||
473 | * R16480 (0x4060) - DC3 Control 1 | ||
474 | */ | ||
475 | #define WM831X_DC3_PHASE 0x1000 /* DC3_PHASE */ | ||
476 | #define WM831X_DC3_PHASE_MASK 0x1000 /* DC3_PHASE */ | ||
477 | #define WM831X_DC3_PHASE_SHIFT 12 /* DC3_PHASE */ | ||
478 | #define WM831X_DC3_PHASE_WIDTH 1 /* DC3_PHASE */ | ||
479 | #define WM831X_DC3_FLT 0x0080 /* DC3_FLT */ | ||
480 | #define WM831X_DC3_FLT_MASK 0x0080 /* DC3_FLT */ | ||
481 | #define WM831X_DC3_FLT_SHIFT 7 /* DC3_FLT */ | ||
482 | #define WM831X_DC3_FLT_WIDTH 1 /* DC3_FLT */ | ||
483 | #define WM831X_DC3_SOFT_START_MASK 0x0030 /* DC3_SOFT_START - [5:4] */ | ||
484 | #define WM831X_DC3_SOFT_START_SHIFT 4 /* DC3_SOFT_START - [5:4] */ | ||
485 | #define WM831X_DC3_SOFT_START_WIDTH 2 /* DC3_SOFT_START - [5:4] */ | ||
486 | #define WM831X_DC3_STNBY_LIM_MASK 0x000C /* DC3_STNBY_LIM - [3:2] */ | ||
487 | #define WM831X_DC3_STNBY_LIM_SHIFT 2 /* DC3_STNBY_LIM - [3:2] */ | ||
488 | #define WM831X_DC3_STNBY_LIM_WIDTH 2 /* DC3_STNBY_LIM - [3:2] */ | ||
489 | #define WM831X_DC3_CAP_MASK 0x0003 /* DC3_CAP - [1:0] */ | ||
490 | #define WM831X_DC3_CAP_SHIFT 0 /* DC3_CAP - [1:0] */ | ||
491 | #define WM831X_DC3_CAP_WIDTH 2 /* DC3_CAP - [1:0] */ | ||
492 | |||
493 | /* | ||
494 | * R16481 (0x4061) - DC3 Control 2 | ||
495 | */ | ||
496 | #define WM831X_DC3_ERR_ACT_MASK 0xC000 /* DC3_ERR_ACT - [15:14] */ | ||
497 | #define WM831X_DC3_ERR_ACT_SHIFT 14 /* DC3_ERR_ACT - [15:14] */ | ||
498 | #define WM831X_DC3_ERR_ACT_WIDTH 2 /* DC3_ERR_ACT - [15:14] */ | ||
499 | #define WM831X_DC3_HWC_SRC_MASK 0x1800 /* DC3_HWC_SRC - [12:11] */ | ||
500 | #define WM831X_DC3_HWC_SRC_SHIFT 11 /* DC3_HWC_SRC - [12:11] */ | ||
501 | #define WM831X_DC3_HWC_SRC_WIDTH 2 /* DC3_HWC_SRC - [12:11] */ | ||
502 | #define WM831X_DC3_HWC_VSEL 0x0400 /* DC3_HWC_VSEL */ | ||
503 | #define WM831X_DC3_HWC_VSEL_MASK 0x0400 /* DC3_HWC_VSEL */ | ||
504 | #define WM831X_DC3_HWC_VSEL_SHIFT 10 /* DC3_HWC_VSEL */ | ||
505 | #define WM831X_DC3_HWC_VSEL_WIDTH 1 /* DC3_HWC_VSEL */ | ||
506 | #define WM831X_DC3_HWC_MODE_MASK 0x0300 /* DC3_HWC_MODE - [9:8] */ | ||
507 | #define WM831X_DC3_HWC_MODE_SHIFT 8 /* DC3_HWC_MODE - [9:8] */ | ||
508 | #define WM831X_DC3_HWC_MODE_WIDTH 2 /* DC3_HWC_MODE - [9:8] */ | ||
509 | #define WM831X_DC3_OVP 0x0080 /* DC3_OVP */ | ||
510 | #define WM831X_DC3_OVP_MASK 0x0080 /* DC3_OVP */ | ||
511 | #define WM831X_DC3_OVP_SHIFT 7 /* DC3_OVP */ | ||
512 | #define WM831X_DC3_OVP_WIDTH 1 /* DC3_OVP */ | ||
513 | |||
514 | /* | ||
515 | * R16482 (0x4062) - DC3 ON Config | ||
516 | */ | ||
517 | #define WM831X_DC3_ON_SLOT_MASK 0xE000 /* DC3_ON_SLOT - [15:13] */ | ||
518 | #define WM831X_DC3_ON_SLOT_SHIFT 13 /* DC3_ON_SLOT - [15:13] */ | ||
519 | #define WM831X_DC3_ON_SLOT_WIDTH 3 /* DC3_ON_SLOT - [15:13] */ | ||
520 | #define WM831X_DC3_ON_MODE_MASK 0x0300 /* DC3_ON_MODE - [9:8] */ | ||
521 | #define WM831X_DC3_ON_MODE_SHIFT 8 /* DC3_ON_MODE - [9:8] */ | ||
522 | #define WM831X_DC3_ON_MODE_WIDTH 2 /* DC3_ON_MODE - [9:8] */ | ||
523 | #define WM831X_DC3_ON_VSEL_MASK 0x007F /* DC3_ON_VSEL - [6:0] */ | ||
524 | #define WM831X_DC3_ON_VSEL_SHIFT 0 /* DC3_ON_VSEL - [6:0] */ | ||
525 | #define WM831X_DC3_ON_VSEL_WIDTH 7 /* DC3_ON_VSEL - [6:0] */ | ||
526 | |||
527 | /* | ||
528 | * R16483 (0x4063) - DC3 SLEEP Control | ||
529 | */ | ||
530 | #define WM831X_DC3_SLP_SLOT_MASK 0xE000 /* DC3_SLP_SLOT - [15:13] */ | ||
531 | #define WM831X_DC3_SLP_SLOT_SHIFT 13 /* DC3_SLP_SLOT - [15:13] */ | ||
532 | #define WM831X_DC3_SLP_SLOT_WIDTH 3 /* DC3_SLP_SLOT - [15:13] */ | ||
533 | #define WM831X_DC3_SLP_MODE_MASK 0x0300 /* DC3_SLP_MODE - [9:8] */ | ||
534 | #define WM831X_DC3_SLP_MODE_SHIFT 8 /* DC3_SLP_MODE - [9:8] */ | ||
535 | #define WM831X_DC3_SLP_MODE_WIDTH 2 /* DC3_SLP_MODE - [9:8] */ | ||
536 | #define WM831X_DC3_SLP_VSEL_MASK 0x007F /* DC3_SLP_VSEL - [6:0] */ | ||
537 | #define WM831X_DC3_SLP_VSEL_SHIFT 0 /* DC3_SLP_VSEL - [6:0] */ | ||
538 | #define WM831X_DC3_SLP_VSEL_WIDTH 7 /* DC3_SLP_VSEL - [6:0] */ | ||
539 | |||
540 | /* | ||
541 | * R16484 (0x4064) - DC4 Control | ||
542 | */ | ||
543 | #define WM831X_DC4_ERR_ACT_MASK 0xC000 /* DC4_ERR_ACT - [15:14] */ | ||
544 | #define WM831X_DC4_ERR_ACT_SHIFT 14 /* DC4_ERR_ACT - [15:14] */ | ||
545 | #define WM831X_DC4_ERR_ACT_WIDTH 2 /* DC4_ERR_ACT - [15:14] */ | ||
546 | #define WM831X_DC4_HWC_SRC_MASK 0x1800 /* DC4_HWC_SRC - [12:11] */ | ||
547 | #define WM831X_DC4_HWC_SRC_SHIFT 11 /* DC4_HWC_SRC - [12:11] */ | ||
548 | #define WM831X_DC4_HWC_SRC_WIDTH 2 /* DC4_HWC_SRC - [12:11] */ | ||
549 | #define WM831X_DC4_HWC_MODE 0x0100 /* DC4_HWC_MODE */ | ||
550 | #define WM831X_DC4_HWC_MODE_MASK 0x0100 /* DC4_HWC_MODE */ | ||
551 | #define WM831X_DC4_HWC_MODE_SHIFT 8 /* DC4_HWC_MODE */ | ||
552 | #define WM831X_DC4_HWC_MODE_WIDTH 1 /* DC4_HWC_MODE */ | ||
553 | #define WM831X_DC4_RANGE_MASK 0x000C /* DC4_RANGE - [3:2] */ | ||
554 | #define WM831X_DC4_RANGE_SHIFT 2 /* DC4_RANGE - [3:2] */ | ||
555 | #define WM831X_DC4_RANGE_WIDTH 2 /* DC4_RANGE - [3:2] */ | ||
556 | #define WM831X_DC4_FBSRC 0x0001 /* DC4_FBSRC */ | ||
557 | #define WM831X_DC4_FBSRC_MASK 0x0001 /* DC4_FBSRC */ | ||
558 | #define WM831X_DC4_FBSRC_SHIFT 0 /* DC4_FBSRC */ | ||
559 | #define WM831X_DC4_FBSRC_WIDTH 1 /* DC4_FBSRC */ | ||
560 | |||
561 | /* | ||
562 | * R16485 (0x4065) - DC4 SLEEP Control | ||
563 | */ | ||
564 | #define WM831X_DC4_SLPENA 0x0100 /* DC4_SLPENA */ | ||
565 | #define WM831X_DC4_SLPENA_MASK 0x0100 /* DC4_SLPENA */ | ||
566 | #define WM831X_DC4_SLPENA_SHIFT 8 /* DC4_SLPENA */ | ||
567 | #define WM831X_DC4_SLPENA_WIDTH 1 /* DC4_SLPENA */ | ||
568 | |||
569 | /* | ||
570 | * R16488 (0x4068) - LDO1 Control | ||
571 | */ | ||
572 | #define WM831X_LDO1_ERR_ACT_MASK 0xC000 /* LDO1_ERR_ACT - [15:14] */ | ||
573 | #define WM831X_LDO1_ERR_ACT_SHIFT 14 /* LDO1_ERR_ACT - [15:14] */ | ||
574 | #define WM831X_LDO1_ERR_ACT_WIDTH 2 /* LDO1_ERR_ACT - [15:14] */ | ||
575 | #define WM831X_LDO1_HWC_SRC_MASK 0x1800 /* LDO1_HWC_SRC - [12:11] */ | ||
576 | #define WM831X_LDO1_HWC_SRC_SHIFT 11 /* LDO1_HWC_SRC - [12:11] */ | ||
577 | #define WM831X_LDO1_HWC_SRC_WIDTH 2 /* LDO1_HWC_SRC - [12:11] */ | ||
578 | #define WM831X_LDO1_HWC_VSEL 0x0400 /* LDO1_HWC_VSEL */ | ||
579 | #define WM831X_LDO1_HWC_VSEL_MASK 0x0400 /* LDO1_HWC_VSEL */ | ||
580 | #define WM831X_LDO1_HWC_VSEL_SHIFT 10 /* LDO1_HWC_VSEL */ | ||
581 | #define WM831X_LDO1_HWC_VSEL_WIDTH 1 /* LDO1_HWC_VSEL */ | ||
582 | #define WM831X_LDO1_HWC_MODE_MASK 0x0300 /* LDO1_HWC_MODE - [9:8] */ | ||
583 | #define WM831X_LDO1_HWC_MODE_SHIFT 8 /* LDO1_HWC_MODE - [9:8] */ | ||
584 | #define WM831X_LDO1_HWC_MODE_WIDTH 2 /* LDO1_HWC_MODE - [9:8] */ | ||
585 | #define WM831X_LDO1_FLT 0x0080 /* LDO1_FLT */ | ||
586 | #define WM831X_LDO1_FLT_MASK 0x0080 /* LDO1_FLT */ | ||
587 | #define WM831X_LDO1_FLT_SHIFT 7 /* LDO1_FLT */ | ||
588 | #define WM831X_LDO1_FLT_WIDTH 1 /* LDO1_FLT */ | ||
589 | #define WM831X_LDO1_SWI 0x0040 /* LDO1_SWI */ | ||
590 | #define WM831X_LDO1_SWI_MASK 0x0040 /* LDO1_SWI */ | ||
591 | #define WM831X_LDO1_SWI_SHIFT 6 /* LDO1_SWI */ | ||
592 | #define WM831X_LDO1_SWI_WIDTH 1 /* LDO1_SWI */ | ||
593 | #define WM831X_LDO1_LP_MODE 0x0001 /* LDO1_LP_MODE */ | ||
594 | #define WM831X_LDO1_LP_MODE_MASK 0x0001 /* LDO1_LP_MODE */ | ||
595 | #define WM831X_LDO1_LP_MODE_SHIFT 0 /* LDO1_LP_MODE */ | ||
596 | #define WM831X_LDO1_LP_MODE_WIDTH 1 /* LDO1_LP_MODE */ | ||
597 | |||
598 | /* | ||
599 | * R16489 (0x4069) - LDO1 ON Control | ||
600 | */ | ||
601 | #define WM831X_LDO1_ON_SLOT_MASK 0xE000 /* LDO1_ON_SLOT - [15:13] */ | ||
602 | #define WM831X_LDO1_ON_SLOT_SHIFT 13 /* LDO1_ON_SLOT - [15:13] */ | ||
603 | #define WM831X_LDO1_ON_SLOT_WIDTH 3 /* LDO1_ON_SLOT - [15:13] */ | ||
604 | #define WM831X_LDO1_ON_MODE 0x0100 /* LDO1_ON_MODE */ | ||
605 | #define WM831X_LDO1_ON_MODE_MASK 0x0100 /* LDO1_ON_MODE */ | ||
606 | #define WM831X_LDO1_ON_MODE_SHIFT 8 /* LDO1_ON_MODE */ | ||
607 | #define WM831X_LDO1_ON_MODE_WIDTH 1 /* LDO1_ON_MODE */ | ||
608 | #define WM831X_LDO1_ON_VSEL_MASK 0x001F /* LDO1_ON_VSEL - [4:0] */ | ||
609 | #define WM831X_LDO1_ON_VSEL_SHIFT 0 /* LDO1_ON_VSEL - [4:0] */ | ||
610 | #define WM831X_LDO1_ON_VSEL_WIDTH 5 /* LDO1_ON_VSEL - [4:0] */ | ||
611 | |||
612 | /* | ||
613 | * R16490 (0x406A) - LDO1 SLEEP Control | ||
614 | */ | ||
615 | #define WM831X_LDO1_SLP_SLOT_MASK 0xE000 /* LDO1_SLP_SLOT - [15:13] */ | ||
616 | #define WM831X_LDO1_SLP_SLOT_SHIFT 13 /* LDO1_SLP_SLOT - [15:13] */ | ||
617 | #define WM831X_LDO1_SLP_SLOT_WIDTH 3 /* LDO1_SLP_SLOT - [15:13] */ | ||
618 | #define WM831X_LDO1_SLP_MODE 0x0100 /* LDO1_SLP_MODE */ | ||
619 | #define WM831X_LDO1_SLP_MODE_MASK 0x0100 /* LDO1_SLP_MODE */ | ||
620 | #define WM831X_LDO1_SLP_MODE_SHIFT 8 /* LDO1_SLP_MODE */ | ||
621 | #define WM831X_LDO1_SLP_MODE_WIDTH 1 /* LDO1_SLP_MODE */ | ||
622 | #define WM831X_LDO1_SLP_VSEL_MASK 0x001F /* LDO1_SLP_VSEL - [4:0] */ | ||
623 | #define WM831X_LDO1_SLP_VSEL_SHIFT 0 /* LDO1_SLP_VSEL - [4:0] */ | ||
624 | #define WM831X_LDO1_SLP_VSEL_WIDTH 5 /* LDO1_SLP_VSEL - [4:0] */ | ||
625 | |||
626 | /* | ||
627 | * R16491 (0x406B) - LDO2 Control | ||
628 | */ | ||
629 | #define WM831X_LDO2_ERR_ACT_MASK 0xC000 /* LDO2_ERR_ACT - [15:14] */ | ||
630 | #define WM831X_LDO2_ERR_ACT_SHIFT 14 /* LDO2_ERR_ACT - [15:14] */ | ||
631 | #define WM831X_LDO2_ERR_ACT_WIDTH 2 /* LDO2_ERR_ACT - [15:14] */ | ||
632 | #define WM831X_LDO2_HWC_SRC_MASK 0x1800 /* LDO2_HWC_SRC - [12:11] */ | ||
633 | #define WM831X_LDO2_HWC_SRC_SHIFT 11 /* LDO2_HWC_SRC - [12:11] */ | ||
634 | #define WM831X_LDO2_HWC_SRC_WIDTH 2 /* LDO2_HWC_SRC - [12:11] */ | ||
635 | #define WM831X_LDO2_HWC_VSEL 0x0400 /* LDO2_HWC_VSEL */ | ||
636 | #define WM831X_LDO2_HWC_VSEL_MASK 0x0400 /* LDO2_HWC_VSEL */ | ||
637 | #define WM831X_LDO2_HWC_VSEL_SHIFT 10 /* LDO2_HWC_VSEL */ | ||
638 | #define WM831X_LDO2_HWC_VSEL_WIDTH 1 /* LDO2_HWC_VSEL */ | ||
639 | #define WM831X_LDO2_HWC_MODE_MASK 0x0300 /* LDO2_HWC_MODE - [9:8] */ | ||
640 | #define WM831X_LDO2_HWC_MODE_SHIFT 8 /* LDO2_HWC_MODE - [9:8] */ | ||
641 | #define WM831X_LDO2_HWC_MODE_WIDTH 2 /* LDO2_HWC_MODE - [9:8] */ | ||
642 | #define WM831X_LDO2_FLT 0x0080 /* LDO2_FLT */ | ||
643 | #define WM831X_LDO2_FLT_MASK 0x0080 /* LDO2_FLT */ | ||
644 | #define WM831X_LDO2_FLT_SHIFT 7 /* LDO2_FLT */ | ||
645 | #define WM831X_LDO2_FLT_WIDTH 1 /* LDO2_FLT */ | ||
646 | #define WM831X_LDO2_SWI 0x0040 /* LDO2_SWI */ | ||
647 | #define WM831X_LDO2_SWI_MASK 0x0040 /* LDO2_SWI */ | ||
648 | #define WM831X_LDO2_SWI_SHIFT 6 /* LDO2_SWI */ | ||
649 | #define WM831X_LDO2_SWI_WIDTH 1 /* LDO2_SWI */ | ||
650 | #define WM831X_LDO2_LP_MODE 0x0001 /* LDO2_LP_MODE */ | ||
651 | #define WM831X_LDO2_LP_MODE_MASK 0x0001 /* LDO2_LP_MODE */ | ||
652 | #define WM831X_LDO2_LP_MODE_SHIFT 0 /* LDO2_LP_MODE */ | ||
653 | #define WM831X_LDO2_LP_MODE_WIDTH 1 /* LDO2_LP_MODE */ | ||
654 | |||
655 | /* | ||
656 | * R16492 (0x406C) - LDO2 ON Control | ||
657 | */ | ||
658 | #define WM831X_LDO2_ON_SLOT_MASK 0xE000 /* LDO2_ON_SLOT - [15:13] */ | ||
659 | #define WM831X_LDO2_ON_SLOT_SHIFT 13 /* LDO2_ON_SLOT - [15:13] */ | ||
660 | #define WM831X_LDO2_ON_SLOT_WIDTH 3 /* LDO2_ON_SLOT - [15:13] */ | ||
661 | #define WM831X_LDO2_ON_MODE 0x0100 /* LDO2_ON_MODE */ | ||
662 | #define WM831X_LDO2_ON_MODE_MASK 0x0100 /* LDO2_ON_MODE */ | ||
663 | #define WM831X_LDO2_ON_MODE_SHIFT 8 /* LDO2_ON_MODE */ | ||
664 | #define WM831X_LDO2_ON_MODE_WIDTH 1 /* LDO2_ON_MODE */ | ||
665 | #define WM831X_LDO2_ON_VSEL_MASK 0x001F /* LDO2_ON_VSEL - [4:0] */ | ||
666 | #define WM831X_LDO2_ON_VSEL_SHIFT 0 /* LDO2_ON_VSEL - [4:0] */ | ||
667 | #define WM831X_LDO2_ON_VSEL_WIDTH 5 /* LDO2_ON_VSEL - [4:0] */ | ||
668 | |||
669 | /* | ||
670 | * R16493 (0x406D) - LDO2 SLEEP Control | ||
671 | */ | ||
672 | #define WM831X_LDO2_SLP_SLOT_MASK 0xE000 /* LDO2_SLP_SLOT - [15:13] */ | ||
673 | #define WM831X_LDO2_SLP_SLOT_SHIFT 13 /* LDO2_SLP_SLOT - [15:13] */ | ||
674 | #define WM831X_LDO2_SLP_SLOT_WIDTH 3 /* LDO2_SLP_SLOT - [15:13] */ | ||
675 | #define WM831X_LDO2_SLP_MODE 0x0100 /* LDO2_SLP_MODE */ | ||
676 | #define WM831X_LDO2_SLP_MODE_MASK 0x0100 /* LDO2_SLP_MODE */ | ||
677 | #define WM831X_LDO2_SLP_MODE_SHIFT 8 /* LDO2_SLP_MODE */ | ||
678 | #define WM831X_LDO2_SLP_MODE_WIDTH 1 /* LDO2_SLP_MODE */ | ||
679 | #define WM831X_LDO2_SLP_VSEL_MASK 0x001F /* LDO2_SLP_VSEL - [4:0] */ | ||
680 | #define WM831X_LDO2_SLP_VSEL_SHIFT 0 /* LDO2_SLP_VSEL - [4:0] */ | ||
681 | #define WM831X_LDO2_SLP_VSEL_WIDTH 5 /* LDO2_SLP_VSEL - [4:0] */ | ||
682 | |||
683 | /* | ||
684 | * R16494 (0x406E) - LDO3 Control | ||
685 | */ | ||
686 | #define WM831X_LDO3_ERR_ACT_MASK 0xC000 /* LDO3_ERR_ACT - [15:14] */ | ||
687 | #define WM831X_LDO3_ERR_ACT_SHIFT 14 /* LDO3_ERR_ACT - [15:14] */ | ||
688 | #define WM831X_LDO3_ERR_ACT_WIDTH 2 /* LDO3_ERR_ACT - [15:14] */ | ||
689 | #define WM831X_LDO3_HWC_SRC_MASK 0x1800 /* LDO3_HWC_SRC - [12:11] */ | ||
690 | #define WM831X_LDO3_HWC_SRC_SHIFT 11 /* LDO3_HWC_SRC - [12:11] */ | ||
691 | #define WM831X_LDO3_HWC_SRC_WIDTH 2 /* LDO3_HWC_SRC - [12:11] */ | ||
692 | #define WM831X_LDO3_HWC_VSEL 0x0400 /* LDO3_HWC_VSEL */ | ||
693 | #define WM831X_LDO3_HWC_VSEL_MASK 0x0400 /* LDO3_HWC_VSEL */ | ||
694 | #define WM831X_LDO3_HWC_VSEL_SHIFT 10 /* LDO3_HWC_VSEL */ | ||
695 | #define WM831X_LDO3_HWC_VSEL_WIDTH 1 /* LDO3_HWC_VSEL */ | ||
696 | #define WM831X_LDO3_HWC_MODE_MASK 0x0300 /* LDO3_HWC_MODE - [9:8] */ | ||
697 | #define WM831X_LDO3_HWC_MODE_SHIFT 8 /* LDO3_HWC_MODE - [9:8] */ | ||
698 | #define WM831X_LDO3_HWC_MODE_WIDTH 2 /* LDO3_HWC_MODE - [9:8] */ | ||
699 | #define WM831X_LDO3_FLT 0x0080 /* LDO3_FLT */ | ||
700 | #define WM831X_LDO3_FLT_MASK 0x0080 /* LDO3_FLT */ | ||
701 | #define WM831X_LDO3_FLT_SHIFT 7 /* LDO3_FLT */ | ||
702 | #define WM831X_LDO3_FLT_WIDTH 1 /* LDO3_FLT */ | ||
703 | #define WM831X_LDO3_SWI 0x0040 /* LDO3_SWI */ | ||
704 | #define WM831X_LDO3_SWI_MASK 0x0040 /* LDO3_SWI */ | ||
705 | #define WM831X_LDO3_SWI_SHIFT 6 /* LDO3_SWI */ | ||
706 | #define WM831X_LDO3_SWI_WIDTH 1 /* LDO3_SWI */ | ||
707 | #define WM831X_LDO3_LP_MODE 0x0001 /* LDO3_LP_MODE */ | ||
708 | #define WM831X_LDO3_LP_MODE_MASK 0x0001 /* LDO3_LP_MODE */ | ||
709 | #define WM831X_LDO3_LP_MODE_SHIFT 0 /* LDO3_LP_MODE */ | ||
710 | #define WM831X_LDO3_LP_MODE_WIDTH 1 /* LDO3_LP_MODE */ | ||
711 | |||
712 | /* | ||
713 | * R16495 (0x406F) - LDO3 ON Control | ||
714 | */ | ||
715 | #define WM831X_LDO3_ON_SLOT_MASK 0xE000 /* LDO3_ON_SLOT - [15:13] */ | ||
716 | #define WM831X_LDO3_ON_SLOT_SHIFT 13 /* LDO3_ON_SLOT - [15:13] */ | ||
717 | #define WM831X_LDO3_ON_SLOT_WIDTH 3 /* LDO3_ON_SLOT - [15:13] */ | ||
718 | #define WM831X_LDO3_ON_MODE 0x0100 /* LDO3_ON_MODE */ | ||
719 | #define WM831X_LDO3_ON_MODE_MASK 0x0100 /* LDO3_ON_MODE */ | ||
720 | #define WM831X_LDO3_ON_MODE_SHIFT 8 /* LDO3_ON_MODE */ | ||
721 | #define WM831X_LDO3_ON_MODE_WIDTH 1 /* LDO3_ON_MODE */ | ||
722 | #define WM831X_LDO3_ON_VSEL_MASK 0x001F /* LDO3_ON_VSEL - [4:0] */ | ||
723 | #define WM831X_LDO3_ON_VSEL_SHIFT 0 /* LDO3_ON_VSEL - [4:0] */ | ||
724 | #define WM831X_LDO3_ON_VSEL_WIDTH 5 /* LDO3_ON_VSEL - [4:0] */ | ||
725 | |||
726 | /* | ||
727 | * R16496 (0x4070) - LDO3 SLEEP Control | ||
728 | */ | ||
729 | #define WM831X_LDO3_SLP_SLOT_MASK 0xE000 /* LDO3_SLP_SLOT - [15:13] */ | ||
730 | #define WM831X_LDO3_SLP_SLOT_SHIFT 13 /* LDO3_SLP_SLOT - [15:13] */ | ||
731 | #define WM831X_LDO3_SLP_SLOT_WIDTH 3 /* LDO3_SLP_SLOT - [15:13] */ | ||
732 | #define WM831X_LDO3_SLP_MODE 0x0100 /* LDO3_SLP_MODE */ | ||
733 | #define WM831X_LDO3_SLP_MODE_MASK 0x0100 /* LDO3_SLP_MODE */ | ||
734 | #define WM831X_LDO3_SLP_MODE_SHIFT 8 /* LDO3_SLP_MODE */ | ||
735 | #define WM831X_LDO3_SLP_MODE_WIDTH 1 /* LDO3_SLP_MODE */ | ||
736 | #define WM831X_LDO3_SLP_VSEL_MASK 0x001F /* LDO3_SLP_VSEL - [4:0] */ | ||
737 | #define WM831X_LDO3_SLP_VSEL_SHIFT 0 /* LDO3_SLP_VSEL - [4:0] */ | ||
738 | #define WM831X_LDO3_SLP_VSEL_WIDTH 5 /* LDO3_SLP_VSEL - [4:0] */ | ||
739 | |||
740 | /* | ||
741 | * R16497 (0x4071) - LDO4 Control | ||
742 | */ | ||
743 | #define WM831X_LDO4_ERR_ACT_MASK 0xC000 /* LDO4_ERR_ACT - [15:14] */ | ||
744 | #define WM831X_LDO4_ERR_ACT_SHIFT 14 /* LDO4_ERR_ACT - [15:14] */ | ||
745 | #define WM831X_LDO4_ERR_ACT_WIDTH 2 /* LDO4_ERR_ACT - [15:14] */ | ||
746 | #define WM831X_LDO4_HWC_SRC_MASK 0x1800 /* LDO4_HWC_SRC - [12:11] */ | ||
747 | #define WM831X_LDO4_HWC_SRC_SHIFT 11 /* LDO4_HWC_SRC - [12:11] */ | ||
748 | #define WM831X_LDO4_HWC_SRC_WIDTH 2 /* LDO4_HWC_SRC - [12:11] */ | ||
749 | #define WM831X_LDO4_HWC_VSEL 0x0400 /* LDO4_HWC_VSEL */ | ||
750 | #define WM831X_LDO4_HWC_VSEL_MASK 0x0400 /* LDO4_HWC_VSEL */ | ||
751 | #define WM831X_LDO4_HWC_VSEL_SHIFT 10 /* LDO4_HWC_VSEL */ | ||
752 | #define WM831X_LDO4_HWC_VSEL_WIDTH 1 /* LDO4_HWC_VSEL */ | ||
753 | #define WM831X_LDO4_HWC_MODE_MASK 0x0300 /* LDO4_HWC_MODE - [9:8] */ | ||
754 | #define WM831X_LDO4_HWC_MODE_SHIFT 8 /* LDO4_HWC_MODE - [9:8] */ | ||
755 | #define WM831X_LDO4_HWC_MODE_WIDTH 2 /* LDO4_HWC_MODE - [9:8] */ | ||
756 | #define WM831X_LDO4_FLT 0x0080 /* LDO4_FLT */ | ||
757 | #define WM831X_LDO4_FLT_MASK 0x0080 /* LDO4_FLT */ | ||
758 | #define WM831X_LDO4_FLT_SHIFT 7 /* LDO4_FLT */ | ||
759 | #define WM831X_LDO4_FLT_WIDTH 1 /* LDO4_FLT */ | ||
760 | #define WM831X_LDO4_SWI 0x0040 /* LDO4_SWI */ | ||
761 | #define WM831X_LDO4_SWI_MASK 0x0040 /* LDO4_SWI */ | ||
762 | #define WM831X_LDO4_SWI_SHIFT 6 /* LDO4_SWI */ | ||
763 | #define WM831X_LDO4_SWI_WIDTH 1 /* LDO4_SWI */ | ||
764 | #define WM831X_LDO4_LP_MODE 0x0001 /* LDO4_LP_MODE */ | ||
765 | #define WM831X_LDO4_LP_MODE_MASK 0x0001 /* LDO4_LP_MODE */ | ||
766 | #define WM831X_LDO4_LP_MODE_SHIFT 0 /* LDO4_LP_MODE */ | ||
767 | #define WM831X_LDO4_LP_MODE_WIDTH 1 /* LDO4_LP_MODE */ | ||
768 | |||
769 | /* | ||
770 | * R16498 (0x4072) - LDO4 ON Control | ||
771 | */ | ||
772 | #define WM831X_LDO4_ON_SLOT_MASK 0xE000 /* LDO4_ON_SLOT - [15:13] */ | ||
773 | #define WM831X_LDO4_ON_SLOT_SHIFT 13 /* LDO4_ON_SLOT - [15:13] */ | ||
774 | #define WM831X_LDO4_ON_SLOT_WIDTH 3 /* LDO4_ON_SLOT - [15:13] */ | ||
775 | #define WM831X_LDO4_ON_MODE 0x0100 /* LDO4_ON_MODE */ | ||
776 | #define WM831X_LDO4_ON_MODE_MASK 0x0100 /* LDO4_ON_MODE */ | ||
777 | #define WM831X_LDO4_ON_MODE_SHIFT 8 /* LDO4_ON_MODE */ | ||
778 | #define WM831X_LDO4_ON_MODE_WIDTH 1 /* LDO4_ON_MODE */ | ||
779 | #define WM831X_LDO4_ON_VSEL_MASK 0x001F /* LDO4_ON_VSEL - [4:0] */ | ||
780 | #define WM831X_LDO4_ON_VSEL_SHIFT 0 /* LDO4_ON_VSEL - [4:0] */ | ||
781 | #define WM831X_LDO4_ON_VSEL_WIDTH 5 /* LDO4_ON_VSEL - [4:0] */ | ||
782 | |||
783 | /* | ||
784 | * R16499 (0x4073) - LDO4 SLEEP Control | ||
785 | */ | ||
786 | #define WM831X_LDO4_SLP_SLOT_MASK 0xE000 /* LDO4_SLP_SLOT - [15:13] */ | ||
787 | #define WM831X_LDO4_SLP_SLOT_SHIFT 13 /* LDO4_SLP_SLOT - [15:13] */ | ||
788 | #define WM831X_LDO4_SLP_SLOT_WIDTH 3 /* LDO4_SLP_SLOT - [15:13] */ | ||
789 | #define WM831X_LDO4_SLP_MODE 0x0100 /* LDO4_SLP_MODE */ | ||
790 | #define WM831X_LDO4_SLP_MODE_MASK 0x0100 /* LDO4_SLP_MODE */ | ||
791 | #define WM831X_LDO4_SLP_MODE_SHIFT 8 /* LDO4_SLP_MODE */ | ||
792 | #define WM831X_LDO4_SLP_MODE_WIDTH 1 /* LDO4_SLP_MODE */ | ||
793 | #define WM831X_LDO4_SLP_VSEL_MASK 0x001F /* LDO4_SLP_VSEL - [4:0] */ | ||
794 | #define WM831X_LDO4_SLP_VSEL_SHIFT 0 /* LDO4_SLP_VSEL - [4:0] */ | ||
795 | #define WM831X_LDO4_SLP_VSEL_WIDTH 5 /* LDO4_SLP_VSEL - [4:0] */ | ||
796 | |||
797 | /* | ||
798 | * R16500 (0x4074) - LDO5 Control | ||
799 | */ | ||
800 | #define WM831X_LDO5_ERR_ACT_MASK 0xC000 /* LDO5_ERR_ACT - [15:14] */ | ||
801 | #define WM831X_LDO5_ERR_ACT_SHIFT 14 /* LDO5_ERR_ACT - [15:14] */ | ||
802 | #define WM831X_LDO5_ERR_ACT_WIDTH 2 /* LDO5_ERR_ACT - [15:14] */ | ||
803 | #define WM831X_LDO5_HWC_SRC_MASK 0x1800 /* LDO5_HWC_SRC - [12:11] */ | ||
804 | #define WM831X_LDO5_HWC_SRC_SHIFT 11 /* LDO5_HWC_SRC - [12:11] */ | ||
805 | #define WM831X_LDO5_HWC_SRC_WIDTH 2 /* LDO5_HWC_SRC - [12:11] */ | ||
806 | #define WM831X_LDO5_HWC_VSEL 0x0400 /* LDO5_HWC_VSEL */ | ||
807 | #define WM831X_LDO5_HWC_VSEL_MASK 0x0400 /* LDO5_HWC_VSEL */ | ||
808 | #define WM831X_LDO5_HWC_VSEL_SHIFT 10 /* LDO5_HWC_VSEL */ | ||
809 | #define WM831X_LDO5_HWC_VSEL_WIDTH 1 /* LDO5_HWC_VSEL */ | ||
810 | #define WM831X_LDO5_HWC_MODE_MASK 0x0300 /* LDO5_HWC_MODE - [9:8] */ | ||
811 | #define WM831X_LDO5_HWC_MODE_SHIFT 8 /* LDO5_HWC_MODE - [9:8] */ | ||
812 | #define WM831X_LDO5_HWC_MODE_WIDTH 2 /* LDO5_HWC_MODE - [9:8] */ | ||
813 | #define WM831X_LDO5_FLT 0x0080 /* LDO5_FLT */ | ||
814 | #define WM831X_LDO5_FLT_MASK 0x0080 /* LDO5_FLT */ | ||
815 | #define WM831X_LDO5_FLT_SHIFT 7 /* LDO5_FLT */ | ||
816 | #define WM831X_LDO5_FLT_WIDTH 1 /* LDO5_FLT */ | ||
817 | #define WM831X_LDO5_SWI 0x0040 /* LDO5_SWI */ | ||
818 | #define WM831X_LDO5_SWI_MASK 0x0040 /* LDO5_SWI */ | ||
819 | #define WM831X_LDO5_SWI_SHIFT 6 /* LDO5_SWI */ | ||
820 | #define WM831X_LDO5_SWI_WIDTH 1 /* LDO5_SWI */ | ||
821 | #define WM831X_LDO5_LP_MODE 0x0001 /* LDO5_LP_MODE */ | ||
822 | #define WM831X_LDO5_LP_MODE_MASK 0x0001 /* LDO5_LP_MODE */ | ||
823 | #define WM831X_LDO5_LP_MODE_SHIFT 0 /* LDO5_LP_MODE */ | ||
824 | #define WM831X_LDO5_LP_MODE_WIDTH 1 /* LDO5_LP_MODE */ | ||
825 | |||
826 | /* | ||
827 | * R16501 (0x4075) - LDO5 ON Control | ||
828 | */ | ||
829 | #define WM831X_LDO5_ON_SLOT_MASK 0xE000 /* LDO5_ON_SLOT - [15:13] */ | ||
830 | #define WM831X_LDO5_ON_SLOT_SHIFT 13 /* LDO5_ON_SLOT - [15:13] */ | ||
831 | #define WM831X_LDO5_ON_SLOT_WIDTH 3 /* LDO5_ON_SLOT - [15:13] */ | ||
832 | #define WM831X_LDO5_ON_MODE 0x0100 /* LDO5_ON_MODE */ | ||
833 | #define WM831X_LDO5_ON_MODE_MASK 0x0100 /* LDO5_ON_MODE */ | ||
834 | #define WM831X_LDO5_ON_MODE_SHIFT 8 /* LDO5_ON_MODE */ | ||
835 | #define WM831X_LDO5_ON_MODE_WIDTH 1 /* LDO5_ON_MODE */ | ||
836 | #define WM831X_LDO5_ON_VSEL_MASK 0x001F /* LDO5_ON_VSEL - [4:0] */ | ||
837 | #define WM831X_LDO5_ON_VSEL_SHIFT 0 /* LDO5_ON_VSEL - [4:0] */ | ||
838 | #define WM831X_LDO5_ON_VSEL_WIDTH 5 /* LDO5_ON_VSEL - [4:0] */ | ||
839 | |||
840 | /* | ||
841 | * R16502 (0x4076) - LDO5 SLEEP Control | ||
842 | */ | ||
843 | #define WM831X_LDO5_SLP_SLOT_MASK 0xE000 /* LDO5_SLP_SLOT - [15:13] */ | ||
844 | #define WM831X_LDO5_SLP_SLOT_SHIFT 13 /* LDO5_SLP_SLOT - [15:13] */ | ||
845 | #define WM831X_LDO5_SLP_SLOT_WIDTH 3 /* LDO5_SLP_SLOT - [15:13] */ | ||
846 | #define WM831X_LDO5_SLP_MODE 0x0100 /* LDO5_SLP_MODE */ | ||
847 | #define WM831X_LDO5_SLP_MODE_MASK 0x0100 /* LDO5_SLP_MODE */ | ||
848 | #define WM831X_LDO5_SLP_MODE_SHIFT 8 /* LDO5_SLP_MODE */ | ||
849 | #define WM831X_LDO5_SLP_MODE_WIDTH 1 /* LDO5_SLP_MODE */ | ||
850 | #define WM831X_LDO5_SLP_VSEL_MASK 0x001F /* LDO5_SLP_VSEL - [4:0] */ | ||
851 | #define WM831X_LDO5_SLP_VSEL_SHIFT 0 /* LDO5_SLP_VSEL - [4:0] */ | ||
852 | #define WM831X_LDO5_SLP_VSEL_WIDTH 5 /* LDO5_SLP_VSEL - [4:0] */ | ||
853 | |||
854 | /* | ||
855 | * R16503 (0x4077) - LDO6 Control | ||
856 | */ | ||
857 | #define WM831X_LDO6_ERR_ACT_MASK 0xC000 /* LDO6_ERR_ACT - [15:14] */ | ||
858 | #define WM831X_LDO6_ERR_ACT_SHIFT 14 /* LDO6_ERR_ACT - [15:14] */ | ||
859 | #define WM831X_LDO6_ERR_ACT_WIDTH 2 /* LDO6_ERR_ACT - [15:14] */ | ||
860 | #define WM831X_LDO6_HWC_SRC_MASK 0x1800 /* LDO6_HWC_SRC - [12:11] */ | ||
861 | #define WM831X_LDO6_HWC_SRC_SHIFT 11 /* LDO6_HWC_SRC - [12:11] */ | ||
862 | #define WM831X_LDO6_HWC_SRC_WIDTH 2 /* LDO6_HWC_SRC - [12:11] */ | ||
863 | #define WM831X_LDO6_HWC_VSEL 0x0400 /* LDO6_HWC_VSEL */ | ||
864 | #define WM831X_LDO6_HWC_VSEL_MASK 0x0400 /* LDO6_HWC_VSEL */ | ||
865 | #define WM831X_LDO6_HWC_VSEL_SHIFT 10 /* LDO6_HWC_VSEL */ | ||
866 | #define WM831X_LDO6_HWC_VSEL_WIDTH 1 /* LDO6_HWC_VSEL */ | ||
867 | #define WM831X_LDO6_HWC_MODE_MASK 0x0300 /* LDO6_HWC_MODE - [9:8] */ | ||
868 | #define WM831X_LDO6_HWC_MODE_SHIFT 8 /* LDO6_HWC_MODE - [9:8] */ | ||
869 | #define WM831X_LDO6_HWC_MODE_WIDTH 2 /* LDO6_HWC_MODE - [9:8] */ | ||
870 | #define WM831X_LDO6_FLT 0x0080 /* LDO6_FLT */ | ||
871 | #define WM831X_LDO6_FLT_MASK 0x0080 /* LDO6_FLT */ | ||
872 | #define WM831X_LDO6_FLT_SHIFT 7 /* LDO6_FLT */ | ||
873 | #define WM831X_LDO6_FLT_WIDTH 1 /* LDO6_FLT */ | ||
874 | #define WM831X_LDO6_SWI 0x0040 /* LDO6_SWI */ | ||
875 | #define WM831X_LDO6_SWI_MASK 0x0040 /* LDO6_SWI */ | ||
876 | #define WM831X_LDO6_SWI_SHIFT 6 /* LDO6_SWI */ | ||
877 | #define WM831X_LDO6_SWI_WIDTH 1 /* LDO6_SWI */ | ||
878 | #define WM831X_LDO6_LP_MODE 0x0001 /* LDO6_LP_MODE */ | ||
879 | #define WM831X_LDO6_LP_MODE_MASK 0x0001 /* LDO6_LP_MODE */ | ||
880 | #define WM831X_LDO6_LP_MODE_SHIFT 0 /* LDO6_LP_MODE */ | ||
881 | #define WM831X_LDO6_LP_MODE_WIDTH 1 /* LDO6_LP_MODE */ | ||
882 | |||
883 | /* | ||
884 | * R16504 (0x4078) - LDO6 ON Control | ||
885 | */ | ||
886 | #define WM831X_LDO6_ON_SLOT_MASK 0xE000 /* LDO6_ON_SLOT - [15:13] */ | ||
887 | #define WM831X_LDO6_ON_SLOT_SHIFT 13 /* LDO6_ON_SLOT - [15:13] */ | ||
888 | #define WM831X_LDO6_ON_SLOT_WIDTH 3 /* LDO6_ON_SLOT - [15:13] */ | ||
889 | #define WM831X_LDO6_ON_MODE 0x0100 /* LDO6_ON_MODE */ | ||
890 | #define WM831X_LDO6_ON_MODE_MASK 0x0100 /* LDO6_ON_MODE */ | ||
891 | #define WM831X_LDO6_ON_MODE_SHIFT 8 /* LDO6_ON_MODE */ | ||
892 | #define WM831X_LDO6_ON_MODE_WIDTH 1 /* LDO6_ON_MODE */ | ||
893 | #define WM831X_LDO6_ON_VSEL_MASK 0x001F /* LDO6_ON_VSEL - [4:0] */ | ||
894 | #define WM831X_LDO6_ON_VSEL_SHIFT 0 /* LDO6_ON_VSEL - [4:0] */ | ||
895 | #define WM831X_LDO6_ON_VSEL_WIDTH 5 /* LDO6_ON_VSEL - [4:0] */ | ||
896 | |||
897 | /* | ||
898 | * R16505 (0x4079) - LDO6 SLEEP Control | ||
899 | */ | ||
900 | #define WM831X_LDO6_SLP_SLOT_MASK 0xE000 /* LDO6_SLP_SLOT - [15:13] */ | ||
901 | #define WM831X_LDO6_SLP_SLOT_SHIFT 13 /* LDO6_SLP_SLOT - [15:13] */ | ||
902 | #define WM831X_LDO6_SLP_SLOT_WIDTH 3 /* LDO6_SLP_SLOT - [15:13] */ | ||
903 | #define WM831X_LDO6_SLP_MODE 0x0100 /* LDO6_SLP_MODE */ | ||
904 | #define WM831X_LDO6_SLP_MODE_MASK 0x0100 /* LDO6_SLP_MODE */ | ||
905 | #define WM831X_LDO6_SLP_MODE_SHIFT 8 /* LDO6_SLP_MODE */ | ||
906 | #define WM831X_LDO6_SLP_MODE_WIDTH 1 /* LDO6_SLP_MODE */ | ||
907 | #define WM831X_LDO6_SLP_VSEL_MASK 0x001F /* LDO6_SLP_VSEL - [4:0] */ | ||
908 | #define WM831X_LDO6_SLP_VSEL_SHIFT 0 /* LDO6_SLP_VSEL - [4:0] */ | ||
909 | #define WM831X_LDO6_SLP_VSEL_WIDTH 5 /* LDO6_SLP_VSEL - [4:0] */ | ||
910 | |||
911 | /* | ||
912 | * R16506 (0x407A) - LDO7 Control | ||
913 | */ | ||
914 | #define WM831X_LDO7_ERR_ACT_MASK 0xC000 /* LDO7_ERR_ACT - [15:14] */ | ||
915 | #define WM831X_LDO7_ERR_ACT_SHIFT 14 /* LDO7_ERR_ACT - [15:14] */ | ||
916 | #define WM831X_LDO7_ERR_ACT_WIDTH 2 /* LDO7_ERR_ACT - [15:14] */ | ||
917 | #define WM831X_LDO7_HWC_SRC_MASK 0x1800 /* LDO7_HWC_SRC - [12:11] */ | ||
918 | #define WM831X_LDO7_HWC_SRC_SHIFT 11 /* LDO7_HWC_SRC - [12:11] */ | ||
919 | #define WM831X_LDO7_HWC_SRC_WIDTH 2 /* LDO7_HWC_SRC - [12:11] */ | ||
920 | #define WM831X_LDO7_HWC_VSEL 0x0400 /* LDO7_HWC_VSEL */ | ||
921 | #define WM831X_LDO7_HWC_VSEL_MASK 0x0400 /* LDO7_HWC_VSEL */ | ||
922 | #define WM831X_LDO7_HWC_VSEL_SHIFT 10 /* LDO7_HWC_VSEL */ | ||
923 | #define WM831X_LDO7_HWC_VSEL_WIDTH 1 /* LDO7_HWC_VSEL */ | ||
924 | #define WM831X_LDO7_HWC_MODE_MASK 0x0300 /* LDO7_HWC_MODE - [9:8] */ | ||
925 | #define WM831X_LDO7_HWC_MODE_SHIFT 8 /* LDO7_HWC_MODE - [9:8] */ | ||
926 | #define WM831X_LDO7_HWC_MODE_WIDTH 2 /* LDO7_HWC_MODE - [9:8] */ | ||
927 | #define WM831X_LDO7_FLT 0x0080 /* LDO7_FLT */ | ||
928 | #define WM831X_LDO7_FLT_MASK 0x0080 /* LDO7_FLT */ | ||
929 | #define WM831X_LDO7_FLT_SHIFT 7 /* LDO7_FLT */ | ||
930 | #define WM831X_LDO7_FLT_WIDTH 1 /* LDO7_FLT */ | ||
931 | #define WM831X_LDO7_SWI 0x0040 /* LDO7_SWI */ | ||
932 | #define WM831X_LDO7_SWI_MASK 0x0040 /* LDO7_SWI */ | ||
933 | #define WM831X_LDO7_SWI_SHIFT 6 /* LDO7_SWI */ | ||
934 | #define WM831X_LDO7_SWI_WIDTH 1 /* LDO7_SWI */ | ||
935 | |||
936 | /* | ||
937 | * R16507 (0x407B) - LDO7 ON Control | ||
938 | */ | ||
939 | #define WM831X_LDO7_ON_SLOT_MASK 0xE000 /* LDO7_ON_SLOT - [15:13] */ | ||
940 | #define WM831X_LDO7_ON_SLOT_SHIFT 13 /* LDO7_ON_SLOT - [15:13] */ | ||
941 | #define WM831X_LDO7_ON_SLOT_WIDTH 3 /* LDO7_ON_SLOT - [15:13] */ | ||
942 | #define WM831X_LDO7_ON_MODE 0x0100 /* LDO7_ON_MODE */ | ||
943 | #define WM831X_LDO7_ON_MODE_MASK 0x0100 /* LDO7_ON_MODE */ | ||
944 | #define WM831X_LDO7_ON_MODE_SHIFT 8 /* LDO7_ON_MODE */ | ||
945 | #define WM831X_LDO7_ON_MODE_WIDTH 1 /* LDO7_ON_MODE */ | ||
946 | #define WM831X_LDO7_ON_VSEL_MASK 0x001F /* LDO7_ON_VSEL - [4:0] */ | ||
947 | #define WM831X_LDO7_ON_VSEL_SHIFT 0 /* LDO7_ON_VSEL - [4:0] */ | ||
948 | #define WM831X_LDO7_ON_VSEL_WIDTH 5 /* LDO7_ON_VSEL - [4:0] */ | ||
949 | |||
950 | /* | ||
951 | * R16508 (0x407C) - LDO7 SLEEP Control | ||
952 | */ | ||
953 | #define WM831X_LDO7_SLP_SLOT_MASK 0xE000 /* LDO7_SLP_SLOT - [15:13] */ | ||
954 | #define WM831X_LDO7_SLP_SLOT_SHIFT 13 /* LDO7_SLP_SLOT - [15:13] */ | ||
955 | #define WM831X_LDO7_SLP_SLOT_WIDTH 3 /* LDO7_SLP_SLOT - [15:13] */ | ||
956 | #define WM831X_LDO7_SLP_MODE 0x0100 /* LDO7_SLP_MODE */ | ||
957 | #define WM831X_LDO7_SLP_MODE_MASK 0x0100 /* LDO7_SLP_MODE */ | ||
958 | #define WM831X_LDO7_SLP_MODE_SHIFT 8 /* LDO7_SLP_MODE */ | ||
959 | #define WM831X_LDO7_SLP_MODE_WIDTH 1 /* LDO7_SLP_MODE */ | ||
960 | #define WM831X_LDO7_SLP_VSEL_MASK 0x001F /* LDO7_SLP_VSEL - [4:0] */ | ||
961 | #define WM831X_LDO7_SLP_VSEL_SHIFT 0 /* LDO7_SLP_VSEL - [4:0] */ | ||
962 | #define WM831X_LDO7_SLP_VSEL_WIDTH 5 /* LDO7_SLP_VSEL - [4:0] */ | ||
963 | |||
964 | /* | ||
965 | * R16509 (0x407D) - LDO8 Control | ||
966 | */ | ||
967 | #define WM831X_LDO8_ERR_ACT_MASK 0xC000 /* LDO8_ERR_ACT - [15:14] */ | ||
968 | #define WM831X_LDO8_ERR_ACT_SHIFT 14 /* LDO8_ERR_ACT - [15:14] */ | ||
969 | #define WM831X_LDO8_ERR_ACT_WIDTH 2 /* LDO8_ERR_ACT - [15:14] */ | ||
970 | #define WM831X_LDO8_HWC_SRC_MASK 0x1800 /* LDO8_HWC_SRC - [12:11] */ | ||
971 | #define WM831X_LDO8_HWC_SRC_SHIFT 11 /* LDO8_HWC_SRC - [12:11] */ | ||
972 | #define WM831X_LDO8_HWC_SRC_WIDTH 2 /* LDO8_HWC_SRC - [12:11] */ | ||
973 | #define WM831X_LDO8_HWC_VSEL 0x0400 /* LDO8_HWC_VSEL */ | ||
974 | #define WM831X_LDO8_HWC_VSEL_MASK 0x0400 /* LDO8_HWC_VSEL */ | ||
975 | #define WM831X_LDO8_HWC_VSEL_SHIFT 10 /* LDO8_HWC_VSEL */ | ||
976 | #define WM831X_LDO8_HWC_VSEL_WIDTH 1 /* LDO8_HWC_VSEL */ | ||
977 | #define WM831X_LDO8_HWC_MODE_MASK 0x0300 /* LDO8_HWC_MODE - [9:8] */ | ||
978 | #define WM831X_LDO8_HWC_MODE_SHIFT 8 /* LDO8_HWC_MODE - [9:8] */ | ||
979 | #define WM831X_LDO8_HWC_MODE_WIDTH 2 /* LDO8_HWC_MODE - [9:8] */ | ||
980 | #define WM831X_LDO8_FLT 0x0080 /* LDO8_FLT */ | ||
981 | #define WM831X_LDO8_FLT_MASK 0x0080 /* LDO8_FLT */ | ||
982 | #define WM831X_LDO8_FLT_SHIFT 7 /* LDO8_FLT */ | ||
983 | #define WM831X_LDO8_FLT_WIDTH 1 /* LDO8_FLT */ | ||
984 | #define WM831X_LDO8_SWI 0x0040 /* LDO8_SWI */ | ||
985 | #define WM831X_LDO8_SWI_MASK 0x0040 /* LDO8_SWI */ | ||
986 | #define WM831X_LDO8_SWI_SHIFT 6 /* LDO8_SWI */ | ||
987 | #define WM831X_LDO8_SWI_WIDTH 1 /* LDO8_SWI */ | ||
988 | |||
989 | /* | ||
990 | * R16510 (0x407E) - LDO8 ON Control | ||
991 | */ | ||
992 | #define WM831X_LDO8_ON_SLOT_MASK 0xE000 /* LDO8_ON_SLOT - [15:13] */ | ||
993 | #define WM831X_LDO8_ON_SLOT_SHIFT 13 /* LDO8_ON_SLOT - [15:13] */ | ||
994 | #define WM831X_LDO8_ON_SLOT_WIDTH 3 /* LDO8_ON_SLOT - [15:13] */ | ||
995 | #define WM831X_LDO8_ON_MODE 0x0100 /* LDO8_ON_MODE */ | ||
996 | #define WM831X_LDO8_ON_MODE_MASK 0x0100 /* LDO8_ON_MODE */ | ||
997 | #define WM831X_LDO8_ON_MODE_SHIFT 8 /* LDO8_ON_MODE */ | ||
998 | #define WM831X_LDO8_ON_MODE_WIDTH 1 /* LDO8_ON_MODE */ | ||
999 | #define WM831X_LDO8_ON_VSEL_MASK 0x001F /* LDO8_ON_VSEL - [4:0] */ | ||
1000 | #define WM831X_LDO8_ON_VSEL_SHIFT 0 /* LDO8_ON_VSEL - [4:0] */ | ||
1001 | #define WM831X_LDO8_ON_VSEL_WIDTH 5 /* LDO8_ON_VSEL - [4:0] */ | ||
1002 | |||
1003 | /* | ||
1004 | * R16511 (0x407F) - LDO8 SLEEP Control | ||
1005 | */ | ||
1006 | #define WM831X_LDO8_SLP_SLOT_MASK 0xE000 /* LDO8_SLP_SLOT - [15:13] */ | ||
1007 | #define WM831X_LDO8_SLP_SLOT_SHIFT 13 /* LDO8_SLP_SLOT - [15:13] */ | ||
1008 | #define WM831X_LDO8_SLP_SLOT_WIDTH 3 /* LDO8_SLP_SLOT - [15:13] */ | ||
1009 | #define WM831X_LDO8_SLP_MODE 0x0100 /* LDO8_SLP_MODE */ | ||
1010 | #define WM831X_LDO8_SLP_MODE_MASK 0x0100 /* LDO8_SLP_MODE */ | ||
1011 | #define WM831X_LDO8_SLP_MODE_SHIFT 8 /* LDO8_SLP_MODE */ | ||
1012 | #define WM831X_LDO8_SLP_MODE_WIDTH 1 /* LDO8_SLP_MODE */ | ||
1013 | #define WM831X_LDO8_SLP_VSEL_MASK 0x001F /* LDO8_SLP_VSEL - [4:0] */ | ||
1014 | #define WM831X_LDO8_SLP_VSEL_SHIFT 0 /* LDO8_SLP_VSEL - [4:0] */ | ||
1015 | #define WM831X_LDO8_SLP_VSEL_WIDTH 5 /* LDO8_SLP_VSEL - [4:0] */ | ||
1016 | |||
1017 | /* | ||
1018 | * R16512 (0x4080) - LDO9 Control | ||
1019 | */ | ||
1020 | #define WM831X_LDO9_ERR_ACT_MASK 0xC000 /* LDO9_ERR_ACT - [15:14] */ | ||
1021 | #define WM831X_LDO9_ERR_ACT_SHIFT 14 /* LDO9_ERR_ACT - [15:14] */ | ||
1022 | #define WM831X_LDO9_ERR_ACT_WIDTH 2 /* LDO9_ERR_ACT - [15:14] */ | ||
1023 | #define WM831X_LDO9_HWC_SRC_MASK 0x1800 /* LDO9_HWC_SRC - [12:11] */ | ||
1024 | #define WM831X_LDO9_HWC_SRC_SHIFT 11 /* LDO9_HWC_SRC - [12:11] */ | ||
1025 | #define WM831X_LDO9_HWC_SRC_WIDTH 2 /* LDO9_HWC_SRC - [12:11] */ | ||
1026 | #define WM831X_LDO9_HWC_VSEL 0x0400 /* LDO9_HWC_VSEL */ | ||
1027 | #define WM831X_LDO9_HWC_VSEL_MASK 0x0400 /* LDO9_HWC_VSEL */ | ||
1028 | #define WM831X_LDO9_HWC_VSEL_SHIFT 10 /* LDO9_HWC_VSEL */ | ||
1029 | #define WM831X_LDO9_HWC_VSEL_WIDTH 1 /* LDO9_HWC_VSEL */ | ||
1030 | #define WM831X_LDO9_HWC_MODE_MASK 0x0300 /* LDO9_HWC_MODE - [9:8] */ | ||
1031 | #define WM831X_LDO9_HWC_MODE_SHIFT 8 /* LDO9_HWC_MODE - [9:8] */ | ||
1032 | #define WM831X_LDO9_HWC_MODE_WIDTH 2 /* LDO9_HWC_MODE - [9:8] */ | ||
1033 | #define WM831X_LDO9_FLT 0x0080 /* LDO9_FLT */ | ||
1034 | #define WM831X_LDO9_FLT_MASK 0x0080 /* LDO9_FLT */ | ||
1035 | #define WM831X_LDO9_FLT_SHIFT 7 /* LDO9_FLT */ | ||
1036 | #define WM831X_LDO9_FLT_WIDTH 1 /* LDO9_FLT */ | ||
1037 | #define WM831X_LDO9_SWI 0x0040 /* LDO9_SWI */ | ||
1038 | #define WM831X_LDO9_SWI_MASK 0x0040 /* LDO9_SWI */ | ||
1039 | #define WM831X_LDO9_SWI_SHIFT 6 /* LDO9_SWI */ | ||
1040 | #define WM831X_LDO9_SWI_WIDTH 1 /* LDO9_SWI */ | ||
1041 | |||
1042 | /* | ||
1043 | * R16513 (0x4081) - LDO9 ON Control | ||
1044 | */ | ||
1045 | #define WM831X_LDO9_ON_SLOT_MASK 0xE000 /* LDO9_ON_SLOT - [15:13] */ | ||
1046 | #define WM831X_LDO9_ON_SLOT_SHIFT 13 /* LDO9_ON_SLOT - [15:13] */ | ||
1047 | #define WM831X_LDO9_ON_SLOT_WIDTH 3 /* LDO9_ON_SLOT - [15:13] */ | ||
1048 | #define WM831X_LDO9_ON_MODE 0x0100 /* LDO9_ON_MODE */ | ||
1049 | #define WM831X_LDO9_ON_MODE_MASK 0x0100 /* LDO9_ON_MODE */ | ||
1050 | #define WM831X_LDO9_ON_MODE_SHIFT 8 /* LDO9_ON_MODE */ | ||
1051 | #define WM831X_LDO9_ON_MODE_WIDTH 1 /* LDO9_ON_MODE */ | ||
1052 | #define WM831X_LDO9_ON_VSEL_MASK 0x001F /* LDO9_ON_VSEL - [4:0] */ | ||
1053 | #define WM831X_LDO9_ON_VSEL_SHIFT 0 /* LDO9_ON_VSEL - [4:0] */ | ||
1054 | #define WM831X_LDO9_ON_VSEL_WIDTH 5 /* LDO9_ON_VSEL - [4:0] */ | ||
1055 | |||
1056 | /* | ||
1057 | * R16514 (0x4082) - LDO9 SLEEP Control | ||
1058 | */ | ||
1059 | #define WM831X_LDO9_SLP_SLOT_MASK 0xE000 /* LDO9_SLP_SLOT - [15:13] */ | ||
1060 | #define WM831X_LDO9_SLP_SLOT_SHIFT 13 /* LDO9_SLP_SLOT - [15:13] */ | ||
1061 | #define WM831X_LDO9_SLP_SLOT_WIDTH 3 /* LDO9_SLP_SLOT - [15:13] */ | ||
1062 | #define WM831X_LDO9_SLP_MODE 0x0100 /* LDO9_SLP_MODE */ | ||
1063 | #define WM831X_LDO9_SLP_MODE_MASK 0x0100 /* LDO9_SLP_MODE */ | ||
1064 | #define WM831X_LDO9_SLP_MODE_SHIFT 8 /* LDO9_SLP_MODE */ | ||
1065 | #define WM831X_LDO9_SLP_MODE_WIDTH 1 /* LDO9_SLP_MODE */ | ||
1066 | #define WM831X_LDO9_SLP_VSEL_MASK 0x001F /* LDO9_SLP_VSEL - [4:0] */ | ||
1067 | #define WM831X_LDO9_SLP_VSEL_SHIFT 0 /* LDO9_SLP_VSEL - [4:0] */ | ||
1068 | #define WM831X_LDO9_SLP_VSEL_WIDTH 5 /* LDO9_SLP_VSEL - [4:0] */ | ||
1069 | |||
1070 | /* | ||
1071 | * R16515 (0x4083) - LDO10 Control | ||
1072 | */ | ||
1073 | #define WM831X_LDO10_ERR_ACT_MASK 0xC000 /* LDO10_ERR_ACT - [15:14] */ | ||
1074 | #define WM831X_LDO10_ERR_ACT_SHIFT 14 /* LDO10_ERR_ACT - [15:14] */ | ||
1075 | #define WM831X_LDO10_ERR_ACT_WIDTH 2 /* LDO10_ERR_ACT - [15:14] */ | ||
1076 | #define WM831X_LDO10_HWC_SRC_MASK 0x1800 /* LDO10_HWC_SRC - [12:11] */ | ||
1077 | #define WM831X_LDO10_HWC_SRC_SHIFT 11 /* LDO10_HWC_SRC - [12:11] */ | ||
1078 | #define WM831X_LDO10_HWC_SRC_WIDTH 2 /* LDO10_HWC_SRC - [12:11] */ | ||
1079 | #define WM831X_LDO10_HWC_VSEL 0x0400 /* LDO10_HWC_VSEL */ | ||
1080 | #define WM831X_LDO10_HWC_VSEL_MASK 0x0400 /* LDO10_HWC_VSEL */ | ||
1081 | #define WM831X_LDO10_HWC_VSEL_SHIFT 10 /* LDO10_HWC_VSEL */ | ||
1082 | #define WM831X_LDO10_HWC_VSEL_WIDTH 1 /* LDO10_HWC_VSEL */ | ||
1083 | #define WM831X_LDO10_HWC_MODE_MASK 0x0300 /* LDO10_HWC_MODE - [9:8] */ | ||
1084 | #define WM831X_LDO10_HWC_MODE_SHIFT 8 /* LDO10_HWC_MODE - [9:8] */ | ||
1085 | #define WM831X_LDO10_HWC_MODE_WIDTH 2 /* LDO10_HWC_MODE - [9:8] */ | ||
1086 | #define WM831X_LDO10_FLT 0x0080 /* LDO10_FLT */ | ||
1087 | #define WM831X_LDO10_FLT_MASK 0x0080 /* LDO10_FLT */ | ||
1088 | #define WM831X_LDO10_FLT_SHIFT 7 /* LDO10_FLT */ | ||
1089 | #define WM831X_LDO10_FLT_WIDTH 1 /* LDO10_FLT */ | ||
1090 | #define WM831X_LDO10_SWI 0x0040 /* LDO10_SWI */ | ||
1091 | #define WM831X_LDO10_SWI_MASK 0x0040 /* LDO10_SWI */ | ||
1092 | #define WM831X_LDO10_SWI_SHIFT 6 /* LDO10_SWI */ | ||
1093 | #define WM831X_LDO10_SWI_WIDTH 1 /* LDO10_SWI */ | ||
1094 | |||
1095 | /* | ||
1096 | * R16516 (0x4084) - LDO10 ON Control | ||
1097 | */ | ||
1098 | #define WM831X_LDO10_ON_SLOT_MASK 0xE000 /* LDO10_ON_SLOT - [15:13] */ | ||
1099 | #define WM831X_LDO10_ON_SLOT_SHIFT 13 /* LDO10_ON_SLOT - [15:13] */ | ||
1100 | #define WM831X_LDO10_ON_SLOT_WIDTH 3 /* LDO10_ON_SLOT - [15:13] */ | ||
1101 | #define WM831X_LDO10_ON_MODE 0x0100 /* LDO10_ON_MODE */ | ||
1102 | #define WM831X_LDO10_ON_MODE_MASK 0x0100 /* LDO10_ON_MODE */ | ||
1103 | #define WM831X_LDO10_ON_MODE_SHIFT 8 /* LDO10_ON_MODE */ | ||
1104 | #define WM831X_LDO10_ON_MODE_WIDTH 1 /* LDO10_ON_MODE */ | ||
1105 | #define WM831X_LDO10_ON_VSEL_MASK 0x001F /* LDO10_ON_VSEL - [4:0] */ | ||
1106 | #define WM831X_LDO10_ON_VSEL_SHIFT 0 /* LDO10_ON_VSEL - [4:0] */ | ||
1107 | #define WM831X_LDO10_ON_VSEL_WIDTH 5 /* LDO10_ON_VSEL - [4:0] */ | ||
1108 | |||
1109 | /* | ||
1110 | * R16517 (0x4085) - LDO10 SLEEP Control | ||
1111 | */ | ||
1112 | #define WM831X_LDO10_SLP_SLOT_MASK 0xE000 /* LDO10_SLP_SLOT - [15:13] */ | ||
1113 | #define WM831X_LDO10_SLP_SLOT_SHIFT 13 /* LDO10_SLP_SLOT - [15:13] */ | ||
1114 | #define WM831X_LDO10_SLP_SLOT_WIDTH 3 /* LDO10_SLP_SLOT - [15:13] */ | ||
1115 | #define WM831X_LDO10_SLP_MODE 0x0100 /* LDO10_SLP_MODE */ | ||
1116 | #define WM831X_LDO10_SLP_MODE_MASK 0x0100 /* LDO10_SLP_MODE */ | ||
1117 | #define WM831X_LDO10_SLP_MODE_SHIFT 8 /* LDO10_SLP_MODE */ | ||
1118 | #define WM831X_LDO10_SLP_MODE_WIDTH 1 /* LDO10_SLP_MODE */ | ||
1119 | #define WM831X_LDO10_SLP_VSEL_MASK 0x001F /* LDO10_SLP_VSEL - [4:0] */ | ||
1120 | #define WM831X_LDO10_SLP_VSEL_SHIFT 0 /* LDO10_SLP_VSEL - [4:0] */ | ||
1121 | #define WM831X_LDO10_SLP_VSEL_WIDTH 5 /* LDO10_SLP_VSEL - [4:0] */ | ||
1122 | |||
1123 | /* | ||
1124 | * R16519 (0x4087) - LDO11 ON Control | ||
1125 | */ | ||
1126 | #define WM831X_LDO11_ON_SLOT_MASK 0xE000 /* LDO11_ON_SLOT - [15:13] */ | ||
1127 | #define WM831X_LDO11_ON_SLOT_SHIFT 13 /* LDO11_ON_SLOT - [15:13] */ | ||
1128 | #define WM831X_LDO11_ON_SLOT_WIDTH 3 /* LDO11_ON_SLOT - [15:13] */ | ||
1129 | #define WM831X_LDO11_OFFENA 0x1000 /* LDO11_OFFENA */ | ||
1130 | #define WM831X_LDO11_OFFENA_MASK 0x1000 /* LDO11_OFFENA */ | ||
1131 | #define WM831X_LDO11_OFFENA_SHIFT 12 /* LDO11_OFFENA */ | ||
1132 | #define WM831X_LDO11_OFFENA_WIDTH 1 /* LDO11_OFFENA */ | ||
1133 | #define WM831X_LDO11_VSEL_SRC 0x0080 /* LDO11_VSEL_SRC */ | ||
1134 | #define WM831X_LDO11_VSEL_SRC_MASK 0x0080 /* LDO11_VSEL_SRC */ | ||
1135 | #define WM831X_LDO11_VSEL_SRC_SHIFT 7 /* LDO11_VSEL_SRC */ | ||
1136 | #define WM831X_LDO11_VSEL_SRC_WIDTH 1 /* LDO11_VSEL_SRC */ | ||
1137 | #define WM831X_LDO11_ON_VSEL_MASK 0x000F /* LDO11_ON_VSEL - [3:0] */ | ||
1138 | #define WM831X_LDO11_ON_VSEL_SHIFT 0 /* LDO11_ON_VSEL - [3:0] */ | ||
1139 | #define WM831X_LDO11_ON_VSEL_WIDTH 4 /* LDO11_ON_VSEL - [3:0] */ | ||
1140 | |||
1141 | /* | ||
1142 | * R16520 (0x4088) - LDO11 SLEEP Control | ||
1143 | */ | ||
1144 | #define WM831X_LDO11_SLP_SLOT_MASK 0xE000 /* LDO11_SLP_SLOT - [15:13] */ | ||
1145 | #define WM831X_LDO11_SLP_SLOT_SHIFT 13 /* LDO11_SLP_SLOT - [15:13] */ | ||
1146 | #define WM831X_LDO11_SLP_SLOT_WIDTH 3 /* LDO11_SLP_SLOT - [15:13] */ | ||
1147 | #define WM831X_LDO11_SLP_VSEL_MASK 0x000F /* LDO11_SLP_VSEL - [3:0] */ | ||
1148 | #define WM831X_LDO11_SLP_VSEL_SHIFT 0 /* LDO11_SLP_VSEL - [3:0] */ | ||
1149 | #define WM831X_LDO11_SLP_VSEL_WIDTH 4 /* LDO11_SLP_VSEL - [3:0] */ | ||
1150 | |||
1151 | /* | ||
1152 | * R16526 (0x408E) - Power Good Source 1 | ||
1153 | */ | ||
1154 | #define WM831X_DC4_OK 0x0008 /* DC4_OK */ | ||
1155 | #define WM831X_DC4_OK_MASK 0x0008 /* DC4_OK */ | ||
1156 | #define WM831X_DC4_OK_SHIFT 3 /* DC4_OK */ | ||
1157 | #define WM831X_DC4_OK_WIDTH 1 /* DC4_OK */ | ||
1158 | #define WM831X_DC3_OK 0x0004 /* DC3_OK */ | ||
1159 | #define WM831X_DC3_OK_MASK 0x0004 /* DC3_OK */ | ||
1160 | #define WM831X_DC3_OK_SHIFT 2 /* DC3_OK */ | ||
1161 | #define WM831X_DC3_OK_WIDTH 1 /* DC3_OK */ | ||
1162 | #define WM831X_DC2_OK 0x0002 /* DC2_OK */ | ||
1163 | #define WM831X_DC2_OK_MASK 0x0002 /* DC2_OK */ | ||
1164 | #define WM831X_DC2_OK_SHIFT 1 /* DC2_OK */ | ||
1165 | #define WM831X_DC2_OK_WIDTH 1 /* DC2_OK */ | ||
1166 | #define WM831X_DC1_OK 0x0001 /* DC1_OK */ | ||
1167 | #define WM831X_DC1_OK_MASK 0x0001 /* DC1_OK */ | ||
1168 | #define WM831X_DC1_OK_SHIFT 0 /* DC1_OK */ | ||
1169 | #define WM831X_DC1_OK_WIDTH 1 /* DC1_OK */ | ||
1170 | |||
1171 | /* | ||
1172 | * R16527 (0x408F) - Power Good Source 2 | ||
1173 | */ | ||
1174 | #define WM831X_LDO10_OK 0x0200 /* LDO10_OK */ | ||
1175 | #define WM831X_LDO10_OK_MASK 0x0200 /* LDO10_OK */ | ||
1176 | #define WM831X_LDO10_OK_SHIFT 9 /* LDO10_OK */ | ||
1177 | #define WM831X_LDO10_OK_WIDTH 1 /* LDO10_OK */ | ||
1178 | #define WM831X_LDO9_OK 0x0100 /* LDO9_OK */ | ||
1179 | #define WM831X_LDO9_OK_MASK 0x0100 /* LDO9_OK */ | ||
1180 | #define WM831X_LDO9_OK_SHIFT 8 /* LDO9_OK */ | ||
1181 | #define WM831X_LDO9_OK_WIDTH 1 /* LDO9_OK */ | ||
1182 | #define WM831X_LDO8_OK 0x0080 /* LDO8_OK */ | ||
1183 | #define WM831X_LDO8_OK_MASK 0x0080 /* LDO8_OK */ | ||
1184 | #define WM831X_LDO8_OK_SHIFT 7 /* LDO8_OK */ | ||
1185 | #define WM831X_LDO8_OK_WIDTH 1 /* LDO8_OK */ | ||
1186 | #define WM831X_LDO7_OK 0x0040 /* LDO7_OK */ | ||
1187 | #define WM831X_LDO7_OK_MASK 0x0040 /* LDO7_OK */ | ||
1188 | #define WM831X_LDO7_OK_SHIFT 6 /* LDO7_OK */ | ||
1189 | #define WM831X_LDO7_OK_WIDTH 1 /* LDO7_OK */ | ||
1190 | #define WM831X_LDO6_OK 0x0020 /* LDO6_OK */ | ||
1191 | #define WM831X_LDO6_OK_MASK 0x0020 /* LDO6_OK */ | ||
1192 | #define WM831X_LDO6_OK_SHIFT 5 /* LDO6_OK */ | ||
1193 | #define WM831X_LDO6_OK_WIDTH 1 /* LDO6_OK */ | ||
1194 | #define WM831X_LDO5_OK 0x0010 /* LDO5_OK */ | ||
1195 | #define WM831X_LDO5_OK_MASK 0x0010 /* LDO5_OK */ | ||
1196 | #define WM831X_LDO5_OK_SHIFT 4 /* LDO5_OK */ | ||
1197 | #define WM831X_LDO5_OK_WIDTH 1 /* LDO5_OK */ | ||
1198 | #define WM831X_LDO4_OK 0x0008 /* LDO4_OK */ | ||
1199 | #define WM831X_LDO4_OK_MASK 0x0008 /* LDO4_OK */ | ||
1200 | #define WM831X_LDO4_OK_SHIFT 3 /* LDO4_OK */ | ||
1201 | #define WM831X_LDO4_OK_WIDTH 1 /* LDO4_OK */ | ||
1202 | #define WM831X_LDO3_OK 0x0004 /* LDO3_OK */ | ||
1203 | #define WM831X_LDO3_OK_MASK 0x0004 /* LDO3_OK */ | ||
1204 | #define WM831X_LDO3_OK_SHIFT 2 /* LDO3_OK */ | ||
1205 | #define WM831X_LDO3_OK_WIDTH 1 /* LDO3_OK */ | ||
1206 | #define WM831X_LDO2_OK 0x0002 /* LDO2_OK */ | ||
1207 | #define WM831X_LDO2_OK_MASK 0x0002 /* LDO2_OK */ | ||
1208 | #define WM831X_LDO2_OK_SHIFT 1 /* LDO2_OK */ | ||
1209 | #define WM831X_LDO2_OK_WIDTH 1 /* LDO2_OK */ | ||
1210 | #define WM831X_LDO1_OK 0x0001 /* LDO1_OK */ | ||
1211 | #define WM831X_LDO1_OK_MASK 0x0001 /* LDO1_OK */ | ||
1212 | #define WM831X_LDO1_OK_SHIFT 0 /* LDO1_OK */ | ||
1213 | #define WM831X_LDO1_OK_WIDTH 1 /* LDO1_OK */ | ||
1214 | |||
1215 | #define WM831X_ISINK_MAX_ISEL 56 | ||
1216 | extern int wm831x_isinkv_values[WM831X_ISINK_MAX_ISEL]; | ||
1217 | |||
1218 | #endif | ||
diff --git a/include/linux/mfd/wm831x/watchdog.h b/include/linux/mfd/wm831x/watchdog.h new file mode 100644 index 000000000000..97a99b52956f --- /dev/null +++ b/include/linux/mfd/wm831x/watchdog.h | |||
@@ -0,0 +1,52 @@ | |||
1 | /* | ||
2 | * include/linux/mfd/wm831x/watchdog.h -- Watchdog for WM831x | ||
3 | * | ||
4 | * Copyright 2009 Wolfson Microelectronics PLC. | ||
5 | * | ||
6 | * Author: Mark Brown <broonie@opensource.wolfsonmicro.com> | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify it | ||
9 | * under the terms of the GNU General Public License as published by the | ||
10 | * Free Software Foundation; either version 2 of the License, or (at your | ||
11 | * option) any later version. | ||
12 | * | ||
13 | */ | ||
14 | |||
15 | #ifndef __MFD_WM831X_WATCHDOG_H__ | ||
16 | #define __MFD_WM831X_WATCHDOG_H__ | ||
17 | |||
18 | |||
19 | /* | ||
20 | * R16388 (0x4004) - Watchdog | ||
21 | */ | ||
22 | #define WM831X_WDOG_ENA 0x8000 /* WDOG_ENA */ | ||
23 | #define WM831X_WDOG_ENA_MASK 0x8000 /* WDOG_ENA */ | ||
24 | #define WM831X_WDOG_ENA_SHIFT 15 /* WDOG_ENA */ | ||
25 | #define WM831X_WDOG_ENA_WIDTH 1 /* WDOG_ENA */ | ||
26 | #define WM831X_WDOG_DEBUG 0x4000 /* WDOG_DEBUG */ | ||
27 | #define WM831X_WDOG_DEBUG_MASK 0x4000 /* WDOG_DEBUG */ | ||
28 | #define WM831X_WDOG_DEBUG_SHIFT 14 /* WDOG_DEBUG */ | ||
29 | #define WM831X_WDOG_DEBUG_WIDTH 1 /* WDOG_DEBUG */ | ||
30 | #define WM831X_WDOG_RST_SRC 0x2000 /* WDOG_RST_SRC */ | ||
31 | #define WM831X_WDOG_RST_SRC_MASK 0x2000 /* WDOG_RST_SRC */ | ||
32 | #define WM831X_WDOG_RST_SRC_SHIFT 13 /* WDOG_RST_SRC */ | ||
33 | #define WM831X_WDOG_RST_SRC_WIDTH 1 /* WDOG_RST_SRC */ | ||
34 | #define WM831X_WDOG_SLPENA 0x1000 /* WDOG_SLPENA */ | ||
35 | #define WM831X_WDOG_SLPENA_MASK 0x1000 /* WDOG_SLPENA */ | ||
36 | #define WM831X_WDOG_SLPENA_SHIFT 12 /* WDOG_SLPENA */ | ||
37 | #define WM831X_WDOG_SLPENA_WIDTH 1 /* WDOG_SLPENA */ | ||
38 | #define WM831X_WDOG_RESET 0x0800 /* WDOG_RESET */ | ||
39 | #define WM831X_WDOG_RESET_MASK 0x0800 /* WDOG_RESET */ | ||
40 | #define WM831X_WDOG_RESET_SHIFT 11 /* WDOG_RESET */ | ||
41 | #define WM831X_WDOG_RESET_WIDTH 1 /* WDOG_RESET */ | ||
42 | #define WM831X_WDOG_SECACT_MASK 0x0300 /* WDOG_SECACT - [9:8] */ | ||
43 | #define WM831X_WDOG_SECACT_SHIFT 8 /* WDOG_SECACT - [9:8] */ | ||
44 | #define WM831X_WDOG_SECACT_WIDTH 2 /* WDOG_SECACT - [9:8] */ | ||
45 | #define WM831X_WDOG_PRIMACT_MASK 0x0030 /* WDOG_PRIMACT - [5:4] */ | ||
46 | #define WM831X_WDOG_PRIMACT_SHIFT 4 /* WDOG_PRIMACT - [5:4] */ | ||
47 | #define WM831X_WDOG_PRIMACT_WIDTH 2 /* WDOG_PRIMACT - [5:4] */ | ||
48 | #define WM831X_WDOG_TO_MASK 0x0007 /* WDOG_TO - [2:0] */ | ||
49 | #define WM831X_WDOG_TO_SHIFT 0 /* WDOG_TO - [2:0] */ | ||
50 | #define WM831X_WDOG_TO_WIDTH 3 /* WDOG_TO - [2:0] */ | ||
51 | |||
52 | #endif | ||
diff --git a/include/linux/mfd/wm8350/core.h b/include/linux/mfd/wm8350/core.h index 42cca672f340..1d595de6a055 100644 --- a/include/linux/mfd/wm8350/core.h +++ b/include/linux/mfd/wm8350/core.h | |||
@@ -605,6 +605,11 @@ struct wm8350_irq { | |||
605 | void *data; | 605 | void *data; |
606 | }; | 606 | }; |
607 | 607 | ||
608 | struct wm8350_hwmon { | ||
609 | struct platform_device *pdev; | ||
610 | struct device *classdev; | ||
611 | }; | ||
612 | |||
608 | struct wm8350 { | 613 | struct wm8350 { |
609 | struct device *dev; | 614 | struct device *dev; |
610 | 615 | ||
@@ -621,7 +626,6 @@ struct wm8350 { | |||
621 | struct mutex auxadc_mutex; | 626 | struct mutex auxadc_mutex; |
622 | 627 | ||
623 | /* Interrupt handling */ | 628 | /* Interrupt handling */ |
624 | struct work_struct irq_work; | ||
625 | struct mutex irq_mutex; /* IRQ table mutex */ | 629 | struct mutex irq_mutex; /* IRQ table mutex */ |
626 | struct wm8350_irq irq[WM8350_NUM_IRQ]; | 630 | struct wm8350_irq irq[WM8350_NUM_IRQ]; |
627 | int chip_irq; | 631 | int chip_irq; |
@@ -629,6 +633,7 @@ struct wm8350 { | |||
629 | /* Client devices */ | 633 | /* Client devices */ |
630 | struct wm8350_codec codec; | 634 | struct wm8350_codec codec; |
631 | struct wm8350_gpio gpio; | 635 | struct wm8350_gpio gpio; |
636 | struct wm8350_hwmon hwmon; | ||
632 | struct wm8350_pmic pmic; | 637 | struct wm8350_pmic pmic; |
633 | struct wm8350_power power; | 638 | struct wm8350_power power; |
634 | struct wm8350_rtc rtc; | 639 | struct wm8350_rtc rtc; |
diff --git a/include/linux/miscdevice.h b/include/linux/miscdevice.h index 052117744629..adaf3c15e449 100644 --- a/include/linux/miscdevice.h +++ b/include/linux/miscdevice.h | |||
@@ -41,7 +41,8 @@ struct miscdevice { | |||
41 | struct list_head list; | 41 | struct list_head list; |
42 | struct device *parent; | 42 | struct device *parent; |
43 | struct device *this_device; | 43 | struct device *this_device; |
44 | const char *devnode; | 44 | const char *nodename; |
45 | mode_t mode; | ||
45 | }; | 46 | }; |
46 | 47 | ||
47 | extern int misc_register(struct miscdevice * misc); | 48 | extern int misc_register(struct miscdevice * misc); |
diff --git a/include/linux/mm.h b/include/linux/mm.h index ba3a7cb1eaa0..5946e2ff9fe8 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
@@ -25,6 +25,7 @@ extern unsigned long max_mapnr; | |||
25 | #endif | 25 | #endif |
26 | 26 | ||
27 | extern unsigned long num_physpages; | 27 | extern unsigned long num_physpages; |
28 | extern unsigned long totalram_pages; | ||
28 | extern void * high_memory; | 29 | extern void * high_memory; |
29 | extern int page_cluster; | 30 | extern int page_cluster; |
30 | 31 | ||
@@ -34,8 +35,6 @@ extern int sysctl_legacy_va_layout; | |||
34 | #define sysctl_legacy_va_layout 0 | 35 | #define sysctl_legacy_va_layout 0 |
35 | #endif | 36 | #endif |
36 | 37 | ||
37 | extern unsigned long mmap_min_addr; | ||
38 | |||
39 | #include <asm/page.h> | 38 | #include <asm/page.h> |
40 | #include <asm/pgtable.h> | 39 | #include <asm/pgtable.h> |
41 | #include <asm/processor.h> | 40 | #include <asm/processor.h> |
@@ -105,6 +104,7 @@ extern unsigned int kobjsize(const void *objp); | |||
105 | #define VM_MIXEDMAP 0x10000000 /* Can contain "struct page" and pure PFN pages */ | 104 | #define VM_MIXEDMAP 0x10000000 /* Can contain "struct page" and pure PFN pages */ |
106 | #define VM_SAO 0x20000000 /* Strong Access Ordering (powerpc) */ | 105 | #define VM_SAO 0x20000000 /* Strong Access Ordering (powerpc) */ |
107 | #define VM_PFN_AT_MMAP 0x40000000 /* PFNMAP vma that is fully mapped at mmap time */ | 106 | #define VM_PFN_AT_MMAP 0x40000000 /* PFNMAP vma that is fully mapped at mmap time */ |
107 | #define VM_MERGEABLE 0x80000000 /* KSM may merge identical pages */ | ||
108 | 108 | ||
109 | #ifndef VM_STACK_DEFAULT_FLAGS /* arch can override this */ | 109 | #ifndef VM_STACK_DEFAULT_FLAGS /* arch can override this */ |
110 | #define VM_STACK_DEFAULT_FLAGS VM_DATA_DEFAULT_FLAGS | 110 | #define VM_STACK_DEFAULT_FLAGS VM_DATA_DEFAULT_FLAGS |
@@ -575,19 +575,6 @@ static inline void set_page_links(struct page *page, enum zone_type zone, | |||
575 | } | 575 | } |
576 | 576 | ||
577 | /* | 577 | /* |
578 | * If a hint addr is less than mmap_min_addr change hint to be as | ||
579 | * low as possible but still greater than mmap_min_addr | ||
580 | */ | ||
581 | static inline unsigned long round_hint_to_min(unsigned long hint) | ||
582 | { | ||
583 | hint &= PAGE_MASK; | ||
584 | if (((void *)hint != NULL) && | ||
585 | (hint < mmap_min_addr)) | ||
586 | return PAGE_ALIGN(mmap_min_addr); | ||
587 | return hint; | ||
588 | } | ||
589 | |||
590 | /* | ||
591 | * Some inline functions in vmstat.h depend on page_zone() | 578 | * Some inline functions in vmstat.h depend on page_zone() |
592 | */ | 579 | */ |
593 | #include <linux/vmstat.h> | 580 | #include <linux/vmstat.h> |
@@ -715,17 +702,8 @@ extern void pagefault_out_of_memory(void); | |||
715 | 702 | ||
716 | extern void show_free_areas(void); | 703 | extern void show_free_areas(void); |
717 | 704 | ||
718 | #ifdef CONFIG_SHMEM | 705 | int shmem_lock(struct file *file, int lock, struct user_struct *user); |
719 | extern int shmem_lock(struct file *file, int lock, struct user_struct *user); | ||
720 | #else | ||
721 | static inline int shmem_lock(struct file *file, int lock, | ||
722 | struct user_struct *user) | ||
723 | { | ||
724 | return 0; | ||
725 | } | ||
726 | #endif | ||
727 | struct file *shmem_file_setup(const char *name, loff_t size, unsigned long flags); | 706 | struct file *shmem_file_setup(const char *name, loff_t size, unsigned long flags); |
728 | |||
729 | int shmem_zero_setup(struct vm_area_struct *); | 707 | int shmem_zero_setup(struct vm_area_struct *); |
730 | 708 | ||
731 | #ifndef CONFIG_MMU | 709 | #ifndef CONFIG_MMU |
@@ -830,6 +808,7 @@ int get_user_pages(struct task_struct *tsk, struct mm_struct *mm, | |||
830 | struct page **pages, struct vm_area_struct **vmas); | 808 | struct page **pages, struct vm_area_struct **vmas); |
831 | int get_user_pages_fast(unsigned long start, int nr_pages, int write, | 809 | int get_user_pages_fast(unsigned long start, int nr_pages, int write, |
832 | struct page **pages); | 810 | struct page **pages); |
811 | struct page *get_dump_page(unsigned long addr); | ||
833 | 812 | ||
834 | extern int try_to_release_page(struct page * page, gfp_t gfp_mask); | 813 | extern int try_to_release_page(struct page * page, gfp_t gfp_mask); |
835 | extern void do_invalidatepage(struct page *page, unsigned long offset); | 814 | extern void do_invalidatepage(struct page *page, unsigned long offset); |
@@ -1073,6 +1052,8 @@ extern void setup_per_cpu_pageset(void); | |||
1073 | static inline void setup_per_cpu_pageset(void) {} | 1052 | static inline void setup_per_cpu_pageset(void) {} |
1074 | #endif | 1053 | #endif |
1075 | 1054 | ||
1055 | extern void zone_pcp_update(struct zone *zone); | ||
1056 | |||
1076 | /* nommu.c */ | 1057 | /* nommu.c */ |
1077 | extern atomic_long_t mmap_pages_allocated; | 1058 | extern atomic_long_t mmap_pages_allocated; |
1078 | 1059 | ||
@@ -1241,7 +1222,8 @@ struct page *follow_page(struct vm_area_struct *, unsigned long address, | |||
1241 | #define FOLL_WRITE 0x01 /* check pte is writable */ | 1222 | #define FOLL_WRITE 0x01 /* check pte is writable */ |
1242 | #define FOLL_TOUCH 0x02 /* mark page accessed */ | 1223 | #define FOLL_TOUCH 0x02 /* mark page accessed */ |
1243 | #define FOLL_GET 0x04 /* do get_page on page */ | 1224 | #define FOLL_GET 0x04 /* do get_page on page */ |
1244 | #define FOLL_ANON 0x08 /* give ZERO_PAGE if no pgtable */ | 1225 | #define FOLL_DUMP 0x08 /* give error on hole if it would be zero */ |
1226 | #define FOLL_FORCE 0x10 /* get_user_pages read/write w/o permission */ | ||
1245 | 1227 | ||
1246 | typedef int (*pte_fn_t)(pte_t *pte, pgtable_t token, unsigned long addr, | 1228 | typedef int (*pte_fn_t)(pte_t *pte, pgtable_t token, unsigned long addr, |
1247 | void *data); | 1229 | void *data); |
diff --git a/include/linux/mm_inline.h b/include/linux/mm_inline.h index 7fbb97267556..8835b877b8db 100644 --- a/include/linux/mm_inline.h +++ b/include/linux/mm_inline.h | |||
@@ -5,7 +5,7 @@ | |||
5 | * page_is_file_cache - should the page be on a file LRU or anon LRU? | 5 | * page_is_file_cache - should the page be on a file LRU or anon LRU? |
6 | * @page: the page to test | 6 | * @page: the page to test |
7 | * | 7 | * |
8 | * Returns LRU_FILE if @page is page cache page backed by a regular filesystem, | 8 | * Returns 1 if @page is page cache page backed by a regular filesystem, |
9 | * or 0 if @page is anonymous, tmpfs or otherwise ram or swap backed. | 9 | * or 0 if @page is anonymous, tmpfs or otherwise ram or swap backed. |
10 | * Used by functions that manipulate the LRU lists, to sort a page | 10 | * Used by functions that manipulate the LRU lists, to sort a page |
11 | * onto the right LRU list. | 11 | * onto the right LRU list. |
@@ -16,11 +16,7 @@ | |||
16 | */ | 16 | */ |
17 | static inline int page_is_file_cache(struct page *page) | 17 | static inline int page_is_file_cache(struct page *page) |
18 | { | 18 | { |
19 | if (PageSwapBacked(page)) | 19 | return !PageSwapBacked(page); |
20 | return 0; | ||
21 | |||
22 | /* The page is page cache backed by a normal filesystem. */ | ||
23 | return LRU_FILE; | ||
24 | } | 20 | } |
25 | 21 | ||
26 | static inline void | 22 | static inline void |
@@ -39,21 +35,36 @@ del_page_from_lru_list(struct zone *zone, struct page *page, enum lru_list l) | |||
39 | mem_cgroup_del_lru_list(page, l); | 35 | mem_cgroup_del_lru_list(page, l); |
40 | } | 36 | } |
41 | 37 | ||
38 | /** | ||
39 | * page_lru_base_type - which LRU list type should a page be on? | ||
40 | * @page: the page to test | ||
41 | * | ||
42 | * Used for LRU list index arithmetic. | ||
43 | * | ||
44 | * Returns the base LRU type - file or anon - @page should be on. | ||
45 | */ | ||
46 | static inline enum lru_list page_lru_base_type(struct page *page) | ||
47 | { | ||
48 | if (page_is_file_cache(page)) | ||
49 | return LRU_INACTIVE_FILE; | ||
50 | return LRU_INACTIVE_ANON; | ||
51 | } | ||
52 | |||
42 | static inline void | 53 | static inline void |
43 | del_page_from_lru(struct zone *zone, struct page *page) | 54 | del_page_from_lru(struct zone *zone, struct page *page) |
44 | { | 55 | { |
45 | enum lru_list l = LRU_BASE; | 56 | enum lru_list l; |
46 | 57 | ||
47 | list_del(&page->lru); | 58 | list_del(&page->lru); |
48 | if (PageUnevictable(page)) { | 59 | if (PageUnevictable(page)) { |
49 | __ClearPageUnevictable(page); | 60 | __ClearPageUnevictable(page); |
50 | l = LRU_UNEVICTABLE; | 61 | l = LRU_UNEVICTABLE; |
51 | } else { | 62 | } else { |
63 | l = page_lru_base_type(page); | ||
52 | if (PageActive(page)) { | 64 | if (PageActive(page)) { |
53 | __ClearPageActive(page); | 65 | __ClearPageActive(page); |
54 | l += LRU_ACTIVE; | 66 | l += LRU_ACTIVE; |
55 | } | 67 | } |
56 | l += page_is_file_cache(page); | ||
57 | } | 68 | } |
58 | __dec_zone_state(zone, NR_LRU_BASE + l); | 69 | __dec_zone_state(zone, NR_LRU_BASE + l); |
59 | mem_cgroup_del_lru_list(page, l); | 70 | mem_cgroup_del_lru_list(page, l); |
@@ -68,14 +79,14 @@ del_page_from_lru(struct zone *zone, struct page *page) | |||
68 | */ | 79 | */ |
69 | static inline enum lru_list page_lru(struct page *page) | 80 | static inline enum lru_list page_lru(struct page *page) |
70 | { | 81 | { |
71 | enum lru_list lru = LRU_BASE; | 82 | enum lru_list lru; |
72 | 83 | ||
73 | if (PageUnevictable(page)) | 84 | if (PageUnevictable(page)) |
74 | lru = LRU_UNEVICTABLE; | 85 | lru = LRU_UNEVICTABLE; |
75 | else { | 86 | else { |
87 | lru = page_lru_base_type(page); | ||
76 | if (PageActive(page)) | 88 | if (PageActive(page)) |
77 | lru += LRU_ACTIVE; | 89 | lru += LRU_ACTIVE; |
78 | lru += page_is_file_cache(page); | ||
79 | } | 90 | } |
80 | 91 | ||
81 | return lru; | 92 | return lru; |
diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h index 7acc8439d9b3..0042090a4d70 100644 --- a/include/linux/mm_types.h +++ b/include/linux/mm_types.h | |||
@@ -240,8 +240,6 @@ struct mm_struct { | |||
240 | 240 | ||
241 | unsigned long saved_auxv[AT_VECTOR_SIZE]; /* for /proc/PID/auxv */ | 241 | unsigned long saved_auxv[AT_VECTOR_SIZE]; /* for /proc/PID/auxv */ |
242 | 242 | ||
243 | s8 oom_adj; /* OOM kill score adjustment (bit shift) */ | ||
244 | |||
245 | cpumask_t cpu_vm_mask; | 243 | cpumask_t cpu_vm_mask; |
246 | 244 | ||
247 | /* Architecture-specific MM context */ | 245 | /* Architecture-specific MM context */ |
diff --git a/include/linux/mmc/sdio_ids.h b/include/linux/mmc/sdio_ids.h index 39751c8cde9c..2dbfb5a05994 100644 --- a/include/linux/mmc/sdio_ids.h +++ b/include/linux/mmc/sdio_ids.h | |||
@@ -22,6 +22,12 @@ | |||
22 | /* | 22 | /* |
23 | * Vendors and devices. Sort key: vendor first, device next. | 23 | * Vendors and devices. Sort key: vendor first, device next. |
24 | */ | 24 | */ |
25 | #define SDIO_VENDOR_ID_INTEL 0x0089 | ||
26 | #define SDIO_DEVICE_ID_INTEL_IWMC3200WIMAX 0x1402 | ||
27 | #define SDIO_DEVICE_ID_INTEL_IWMC3200WIFI 0x1403 | ||
28 | #define SDIO_DEVICE_ID_INTEL_IWMC3200TOP 0x1404 | ||
29 | #define SDIO_DEVICE_ID_INTEL_IWMC3200GPS 0x1405 | ||
30 | #define SDIO_DEVICE_ID_INTEL_IWMC3200BT 0x1406 | ||
25 | 31 | ||
26 | #define SDIO_VENDOR_ID_MARVELL 0x02df | 32 | #define SDIO_VENDOR_ID_MARVELL 0x02df |
27 | #define SDIO_DEVICE_ID_MARVELL_LIBERTAS 0x9103 | 33 | #define SDIO_DEVICE_ID_MARVELL_LIBERTAS 0x9103 |
diff --git a/include/linux/mmu_context.h b/include/linux/mmu_context.h new file mode 100644 index 000000000000..70fffeba7495 --- /dev/null +++ b/include/linux/mmu_context.h | |||
@@ -0,0 +1,9 @@ | |||
1 | #ifndef _LINUX_MMU_CONTEXT_H | ||
2 | #define _LINUX_MMU_CONTEXT_H | ||
3 | |||
4 | struct mm_struct; | ||
5 | |||
6 | void use_mm(struct mm_struct *mm); | ||
7 | void unuse_mm(struct mm_struct *mm); | ||
8 | |||
9 | #endif | ||
diff --git a/include/linux/mmu_notifier.h b/include/linux/mmu_notifier.h index b77486d152cd..4e02ee2b071e 100644 --- a/include/linux/mmu_notifier.h +++ b/include/linux/mmu_notifier.h | |||
@@ -62,6 +62,15 @@ struct mmu_notifier_ops { | |||
62 | unsigned long address); | 62 | unsigned long address); |
63 | 63 | ||
64 | /* | 64 | /* |
65 | * change_pte is called in cases that pte mapping to page is changed: | ||
66 | * for example, when ksm remaps pte to point to a new shared page. | ||
67 | */ | ||
68 | void (*change_pte)(struct mmu_notifier *mn, | ||
69 | struct mm_struct *mm, | ||
70 | unsigned long address, | ||
71 | pte_t pte); | ||
72 | |||
73 | /* | ||
65 | * Before this is invoked any secondary MMU is still ok to | 74 | * Before this is invoked any secondary MMU is still ok to |
66 | * read/write to the page previously pointed to by the Linux | 75 | * read/write to the page previously pointed to by the Linux |
67 | * pte because the page hasn't been freed yet and it won't be | 76 | * pte because the page hasn't been freed yet and it won't be |
@@ -154,6 +163,8 @@ extern void __mmu_notifier_mm_destroy(struct mm_struct *mm); | |||
154 | extern void __mmu_notifier_release(struct mm_struct *mm); | 163 | extern void __mmu_notifier_release(struct mm_struct *mm); |
155 | extern int __mmu_notifier_clear_flush_young(struct mm_struct *mm, | 164 | extern int __mmu_notifier_clear_flush_young(struct mm_struct *mm, |
156 | unsigned long address); | 165 | unsigned long address); |
166 | extern void __mmu_notifier_change_pte(struct mm_struct *mm, | ||
167 | unsigned long address, pte_t pte); | ||
157 | extern void __mmu_notifier_invalidate_page(struct mm_struct *mm, | 168 | extern void __mmu_notifier_invalidate_page(struct mm_struct *mm, |
158 | unsigned long address); | 169 | unsigned long address); |
159 | extern void __mmu_notifier_invalidate_range_start(struct mm_struct *mm, | 170 | extern void __mmu_notifier_invalidate_range_start(struct mm_struct *mm, |
@@ -175,6 +186,13 @@ static inline int mmu_notifier_clear_flush_young(struct mm_struct *mm, | |||
175 | return 0; | 186 | return 0; |
176 | } | 187 | } |
177 | 188 | ||
189 | static inline void mmu_notifier_change_pte(struct mm_struct *mm, | ||
190 | unsigned long address, pte_t pte) | ||
191 | { | ||
192 | if (mm_has_notifiers(mm)) | ||
193 | __mmu_notifier_change_pte(mm, address, pte); | ||
194 | } | ||
195 | |||
178 | static inline void mmu_notifier_invalidate_page(struct mm_struct *mm, | 196 | static inline void mmu_notifier_invalidate_page(struct mm_struct *mm, |
179 | unsigned long address) | 197 | unsigned long address) |
180 | { | 198 | { |
@@ -236,6 +254,16 @@ static inline void mmu_notifier_mm_destroy(struct mm_struct *mm) | |||
236 | __young; \ | 254 | __young; \ |
237 | }) | 255 | }) |
238 | 256 | ||
257 | #define set_pte_at_notify(__mm, __address, __ptep, __pte) \ | ||
258 | ({ \ | ||
259 | struct mm_struct *___mm = __mm; \ | ||
260 | unsigned long ___address = __address; \ | ||
261 | pte_t ___pte = __pte; \ | ||
262 | \ | ||
263 | set_pte_at(___mm, ___address, __ptep, ___pte); \ | ||
264 | mmu_notifier_change_pte(___mm, ___address, ___pte); \ | ||
265 | }) | ||
266 | |||
239 | #else /* CONFIG_MMU_NOTIFIER */ | 267 | #else /* CONFIG_MMU_NOTIFIER */ |
240 | 268 | ||
241 | static inline void mmu_notifier_release(struct mm_struct *mm) | 269 | static inline void mmu_notifier_release(struct mm_struct *mm) |
@@ -248,6 +276,11 @@ static inline int mmu_notifier_clear_flush_young(struct mm_struct *mm, | |||
248 | return 0; | 276 | return 0; |
249 | } | 277 | } |
250 | 278 | ||
279 | static inline void mmu_notifier_change_pte(struct mm_struct *mm, | ||
280 | unsigned long address, pte_t pte) | ||
281 | { | ||
282 | } | ||
283 | |||
251 | static inline void mmu_notifier_invalidate_page(struct mm_struct *mm, | 284 | static inline void mmu_notifier_invalidate_page(struct mm_struct *mm, |
252 | unsigned long address) | 285 | unsigned long address) |
253 | { | 286 | { |
@@ -273,6 +306,7 @@ static inline void mmu_notifier_mm_destroy(struct mm_struct *mm) | |||
273 | 306 | ||
274 | #define ptep_clear_flush_young_notify ptep_clear_flush_young | 307 | #define ptep_clear_flush_young_notify ptep_clear_flush_young |
275 | #define ptep_clear_flush_notify ptep_clear_flush | 308 | #define ptep_clear_flush_notify ptep_clear_flush |
309 | #define set_pte_at_notify set_pte_at | ||
276 | 310 | ||
277 | #endif /* CONFIG_MMU_NOTIFIER */ | 311 | #endif /* CONFIG_MMU_NOTIFIER */ |
278 | 312 | ||
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index 889598537370..652ef01be582 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h | |||
@@ -38,6 +38,7 @@ | |||
38 | #define MIGRATE_UNMOVABLE 0 | 38 | #define MIGRATE_UNMOVABLE 0 |
39 | #define MIGRATE_RECLAIMABLE 1 | 39 | #define MIGRATE_RECLAIMABLE 1 |
40 | #define MIGRATE_MOVABLE 2 | 40 | #define MIGRATE_MOVABLE 2 |
41 | #define MIGRATE_PCPTYPES 3 /* the number of types on the pcp lists */ | ||
41 | #define MIGRATE_RESERVE 3 | 42 | #define MIGRATE_RESERVE 3 |
42 | #define MIGRATE_ISOLATE 4 /* can't allocate from here */ | 43 | #define MIGRATE_ISOLATE 4 /* can't allocate from here */ |
43 | #define MIGRATE_TYPES 5 | 44 | #define MIGRATE_TYPES 5 |
@@ -94,11 +95,15 @@ enum zone_stat_item { | |||
94 | NR_SLAB_RECLAIMABLE, | 95 | NR_SLAB_RECLAIMABLE, |
95 | NR_SLAB_UNRECLAIMABLE, | 96 | NR_SLAB_UNRECLAIMABLE, |
96 | NR_PAGETABLE, /* used for pagetables */ | 97 | NR_PAGETABLE, /* used for pagetables */ |
98 | NR_KERNEL_STACK, | ||
99 | /* Second 128 byte cacheline */ | ||
97 | NR_UNSTABLE_NFS, /* NFS unstable pages */ | 100 | NR_UNSTABLE_NFS, /* NFS unstable pages */ |
98 | NR_BOUNCE, | 101 | NR_BOUNCE, |
99 | NR_VMSCAN_WRITE, | 102 | NR_VMSCAN_WRITE, |
100 | /* Second 128 byte cacheline */ | ||
101 | NR_WRITEBACK_TEMP, /* Writeback using temporary buffers */ | 103 | NR_WRITEBACK_TEMP, /* Writeback using temporary buffers */ |
104 | NR_ISOLATED_ANON, /* Temporary isolated pages from anon lru */ | ||
105 | NR_ISOLATED_FILE, /* Temporary isolated pages from file lru */ | ||
106 | NR_SHMEM, /* shmem pages (included tmpfs/GEM pages) */ | ||
102 | #ifdef CONFIG_NUMA | 107 | #ifdef CONFIG_NUMA |
103 | NUMA_HIT, /* allocated in intended node */ | 108 | NUMA_HIT, /* allocated in intended node */ |
104 | NUMA_MISS, /* allocated in non intended node */ | 109 | NUMA_MISS, /* allocated in non intended node */ |
@@ -165,7 +170,9 @@ struct per_cpu_pages { | |||
165 | int count; /* number of pages in the list */ | 170 | int count; /* number of pages in the list */ |
166 | int high; /* high watermark, emptying needed */ | 171 | int high; /* high watermark, emptying needed */ |
167 | int batch; /* chunk size for buddy add/remove */ | 172 | int batch; /* chunk size for buddy add/remove */ |
168 | struct list_head list; /* the list of pages */ | 173 | |
174 | /* Lists of pages, one per migrate type stored on the pcp-lists */ | ||
175 | struct list_head lists[MIGRATE_PCPTYPES]; | ||
169 | }; | 176 | }; |
170 | 177 | ||
171 | struct per_cpu_pageset { | 178 | struct per_cpu_pageset { |
@@ -269,6 +276,11 @@ struct zone_reclaim_stat { | |||
269 | */ | 276 | */ |
270 | unsigned long recent_rotated[2]; | 277 | unsigned long recent_rotated[2]; |
271 | unsigned long recent_scanned[2]; | 278 | unsigned long recent_scanned[2]; |
279 | |||
280 | /* | ||
281 | * accumulated for batching | ||
282 | */ | ||
283 | unsigned long nr_saved_scan[NR_LRU_LISTS]; | ||
272 | }; | 284 | }; |
273 | 285 | ||
274 | struct zone { | 286 | struct zone { |
@@ -323,7 +335,6 @@ struct zone { | |||
323 | spinlock_t lru_lock; | 335 | spinlock_t lru_lock; |
324 | struct zone_lru { | 336 | struct zone_lru { |
325 | struct list_head list; | 337 | struct list_head list; |
326 | unsigned long nr_saved_scan; /* accumulated for batching */ | ||
327 | } lru[NR_LRU_LISTS]; | 338 | } lru[NR_LRU_LISTS]; |
328 | 339 | ||
329 | struct zone_reclaim_stat reclaim_stat; | 340 | struct zone_reclaim_stat reclaim_stat; |
diff --git a/include/linux/mnt_namespace.h b/include/linux/mnt_namespace.h index 3beb2592b03f..d74785c2393a 100644 --- a/include/linux/mnt_namespace.h +++ b/include/linux/mnt_namespace.h | |||
@@ -2,10 +2,9 @@ | |||
2 | #define _NAMESPACE_H_ | 2 | #define _NAMESPACE_H_ |
3 | #ifdef __KERNEL__ | 3 | #ifdef __KERNEL__ |
4 | 4 | ||
5 | #include <linux/mount.h> | 5 | #include <linux/path.h> |
6 | #include <linux/sched.h> | ||
7 | #include <linux/nsproxy.h> | ||
8 | #include <linux/seq_file.h> | 6 | #include <linux/seq_file.h> |
7 | #include <linux/wait.h> | ||
9 | 8 | ||
10 | struct mnt_namespace { | 9 | struct mnt_namespace { |
11 | atomic_t count; | 10 | atomic_t count; |
@@ -28,14 +27,6 @@ extern struct mnt_namespace *create_mnt_ns(struct vfsmount *mnt); | |||
28 | extern struct mnt_namespace *copy_mnt_ns(unsigned long, struct mnt_namespace *, | 27 | extern struct mnt_namespace *copy_mnt_ns(unsigned long, struct mnt_namespace *, |
29 | struct fs_struct *); | 28 | struct fs_struct *); |
30 | extern void put_mnt_ns(struct mnt_namespace *ns); | 29 | extern void put_mnt_ns(struct mnt_namespace *ns); |
31 | |||
32 | static inline void exit_mnt_ns(struct task_struct *p) | ||
33 | { | ||
34 | struct mnt_namespace *ns = p->nsproxy->mnt_ns; | ||
35 | if (ns) | ||
36 | put_mnt_ns(ns); | ||
37 | } | ||
38 | |||
39 | static inline void get_mnt_ns(struct mnt_namespace *ns) | 30 | static inline void get_mnt_ns(struct mnt_namespace *ns) |
40 | { | 31 | { |
41 | atomic_inc(&ns->count); | 32 | atomic_inc(&ns->count); |
diff --git a/include/linux/module.h b/include/linux/module.h index 098bdb7bfacf..1c755b2f937d 100644 --- a/include/linux/module.h +++ b/include/linux/module.h | |||
@@ -15,12 +15,13 @@ | |||
15 | #include <linux/stringify.h> | 15 | #include <linux/stringify.h> |
16 | #include <linux/kobject.h> | 16 | #include <linux/kobject.h> |
17 | #include <linux/moduleparam.h> | 17 | #include <linux/moduleparam.h> |
18 | #include <linux/marker.h> | ||
19 | #include <linux/tracepoint.h> | 18 | #include <linux/tracepoint.h> |
20 | #include <asm/local.h> | ||
21 | 19 | ||
20 | #include <asm/local.h> | ||
22 | #include <asm/module.h> | 21 | #include <asm/module.h> |
23 | 22 | ||
23 | #include <trace/events/module.h> | ||
24 | |||
24 | /* Not Yet Implemented */ | 25 | /* Not Yet Implemented */ |
25 | #define MODULE_SUPPORTED_DEVICE(name) | 26 | #define MODULE_SUPPORTED_DEVICE(name) |
26 | 27 | ||
@@ -325,10 +326,6 @@ struct module | |||
325 | /* The command line arguments (may be mangled). People like | 326 | /* The command line arguments (may be mangled). People like |
326 | keeping pointers to this stuff */ | 327 | keeping pointers to this stuff */ |
327 | char *args; | 328 | char *args; |
328 | #ifdef CONFIG_MARKERS | ||
329 | struct marker *markers; | ||
330 | unsigned int num_markers; | ||
331 | #endif | ||
332 | #ifdef CONFIG_TRACEPOINTS | 329 | #ifdef CONFIG_TRACEPOINTS |
333 | struct tracepoint *tracepoints; | 330 | struct tracepoint *tracepoints; |
334 | unsigned int num_tracepoints; | 331 | unsigned int num_tracepoints; |
@@ -462,7 +459,10 @@ static inline local_t *__module_ref_addr(struct module *mod, int cpu) | |||
462 | static inline void __module_get(struct module *module) | 459 | static inline void __module_get(struct module *module) |
463 | { | 460 | { |
464 | if (module) { | 461 | if (module) { |
465 | local_inc(__module_ref_addr(module, get_cpu())); | 462 | unsigned int cpu = get_cpu(); |
463 | local_inc(__module_ref_addr(module, cpu)); | ||
464 | trace_module_get(module, _THIS_IP_, | ||
465 | local_read(__module_ref_addr(module, cpu))); | ||
466 | put_cpu(); | 466 | put_cpu(); |
467 | } | 467 | } |
468 | } | 468 | } |
@@ -473,8 +473,11 @@ static inline int try_module_get(struct module *module) | |||
473 | 473 | ||
474 | if (module) { | 474 | if (module) { |
475 | unsigned int cpu = get_cpu(); | 475 | unsigned int cpu = get_cpu(); |
476 | if (likely(module_is_live(module))) | 476 | if (likely(module_is_live(module))) { |
477 | local_inc(__module_ref_addr(module, cpu)); | 477 | local_inc(__module_ref_addr(module, cpu)); |
478 | trace_module_get(module, _THIS_IP_, | ||
479 | local_read(__module_ref_addr(module, cpu))); | ||
480 | } | ||
478 | else | 481 | else |
479 | ret = 0; | 482 | ret = 0; |
480 | put_cpu(); | 483 | put_cpu(); |
@@ -527,8 +530,6 @@ int unregister_module_notifier(struct notifier_block * nb); | |||
527 | 530 | ||
528 | extern void print_modules(void); | 531 | extern void print_modules(void); |
529 | 532 | ||
530 | extern void module_update_markers(void); | ||
531 | |||
532 | extern void module_update_tracepoints(void); | 533 | extern void module_update_tracepoints(void); |
533 | extern int module_get_iter_tracepoints(struct tracepoint_iter *iter); | 534 | extern int module_get_iter_tracepoints(struct tracepoint_iter *iter); |
534 | 535 | ||
@@ -643,10 +644,6 @@ static inline void print_modules(void) | |||
643 | { | 644 | { |
644 | } | 645 | } |
645 | 646 | ||
646 | static inline void module_update_markers(void) | ||
647 | { | ||
648 | } | ||
649 | |||
650 | static inline void module_update_tracepoints(void) | 647 | static inline void module_update_tracepoints(void) |
651 | { | 648 | { |
652 | } | 649 | } |
diff --git a/include/linux/mtd/mtd.h b/include/linux/mtd/mtd.h index 5675b63a0631..0f32a9b6ff55 100644 --- a/include/linux/mtd/mtd.h +++ b/include/linux/mtd/mtd.h | |||
@@ -251,7 +251,7 @@ struct mtd_info { | |||
251 | 251 | ||
252 | static inline struct mtd_info *dev_to_mtd(struct device *dev) | 252 | static inline struct mtd_info *dev_to_mtd(struct device *dev) |
253 | { | 253 | { |
254 | return dev ? container_of(dev, struct mtd_info, dev) : NULL; | 254 | return dev ? dev_get_drvdata(dev) : NULL; |
255 | } | 255 | } |
256 | 256 | ||
257 | static inline uint32_t mtd_div_by_eb(uint64_t sz, struct mtd_info *mtd) | 257 | static inline uint32_t mtd_div_by_eb(uint64_t sz, struct mtd_info *mtd) |
diff --git a/include/linux/mtd/partitions.h b/include/linux/mtd/partitions.h index af6dcb992bc3..274b6196091d 100644 --- a/include/linux/mtd/partitions.h +++ b/include/linux/mtd/partitions.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * MTD partitioning layer definitions | 2 | * MTD partitioning layer definitions |
3 | * | 3 | * |
4 | * (C) 2000 Nicolas Pitre <nico@cam.org> | 4 | * (C) 2000 Nicolas Pitre <nico@fluxnic.net> |
5 | * | 5 | * |
6 | * This code is GPL | 6 | * This code is GPL |
7 | */ | 7 | */ |
@@ -47,6 +47,8 @@ struct mtd_partition { | |||
47 | #define MTDPART_SIZ_FULL (0) | 47 | #define MTDPART_SIZ_FULL (0) |
48 | 48 | ||
49 | 49 | ||
50 | struct mtd_info; | ||
51 | |||
50 | int add_mtd_partitions(struct mtd_info *, const struct mtd_partition *, int); | 52 | int add_mtd_partitions(struct mtd_info *, const struct mtd_partition *, int); |
51 | int del_mtd_partitions(struct mtd_info *); | 53 | int del_mtd_partitions(struct mtd_info *); |
52 | 54 | ||
diff --git a/include/linux/namei.h b/include/linux/namei.h index d870ae2faedc..ec0f607b364a 100644 --- a/include/linux/namei.h +++ b/include/linux/namei.h | |||
@@ -40,7 +40,7 @@ enum {LAST_NORM, LAST_ROOT, LAST_DOT, LAST_DOTDOT, LAST_BIND}; | |||
40 | * - follow links at the end | 40 | * - follow links at the end |
41 | * - require a directory | 41 | * - require a directory |
42 | * - ending slashes ok even for nonexistent files | 42 | * - ending slashes ok even for nonexistent files |
43 | * - internal "there are more path compnents" flag | 43 | * - internal "there are more path components" flag |
44 | * - locked when lookup done with dcache_lock held | 44 | * - locked when lookup done with dcache_lock held |
45 | * - dentry cache is untrusted; force a real lookup | 45 | * - dentry cache is untrusted; force a real lookup |
46 | */ | 46 | */ |
diff --git a/include/linux/net.h b/include/linux/net.h index 4fc2ffd527f9..9040a10584f7 100644 --- a/include/linux/net.h +++ b/include/linux/net.h | |||
@@ -57,6 +57,7 @@ typedef enum { | |||
57 | #include <linux/random.h> | 57 | #include <linux/random.h> |
58 | #include <linux/wait.h> | 58 | #include <linux/wait.h> |
59 | #include <linux/fcntl.h> /* For O_CLOEXEC and O_NONBLOCK */ | 59 | #include <linux/fcntl.h> /* For O_CLOEXEC and O_NONBLOCK */ |
60 | #include <linux/kmemcheck.h> | ||
60 | 61 | ||
61 | struct poll_table_struct; | 62 | struct poll_table_struct; |
62 | struct pipe_inode_info; | 63 | struct pipe_inode_info; |
@@ -127,7 +128,11 @@ enum sock_shutdown_cmd { | |||
127 | */ | 128 | */ |
128 | struct socket { | 129 | struct socket { |
129 | socket_state state; | 130 | socket_state state; |
131 | |||
132 | kmemcheck_bitfield_begin(type); | ||
130 | short type; | 133 | short type; |
134 | kmemcheck_bitfield_end(type); | ||
135 | |||
131 | unsigned long flags; | 136 | unsigned long flags; |
132 | /* | 137 | /* |
133 | * Please keep fasync_list & wait fields in the same cache line | 138 | * Please keep fasync_list & wait fields in the same cache line |
diff --git a/include/linux/net_dropmon.h b/include/linux/net_dropmon.h index 3ceb0cc1bc78..2a739462caeb 100644 --- a/include/linux/net_dropmon.h +++ b/include/linux/net_dropmon.h | |||
@@ -3,7 +3,6 @@ | |||
3 | 3 | ||
4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
5 | #include <linux/netlink.h> | 5 | #include <linux/netlink.h> |
6 | #include <linux/types.h> | ||
7 | 6 | ||
8 | struct net_dm_drop_point { | 7 | struct net_dm_drop_point { |
9 | __u8 pc[8]; | 8 | __u8 pc[8]; |
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index d4a4d9867794..94958c109761 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
@@ -72,10 +72,6 @@ struct wireless_dev; | |||
72 | /* Backlog congestion levels */ | 72 | /* Backlog congestion levels */ |
73 | #define NET_RX_SUCCESS 0 /* keep 'em coming, baby */ | 73 | #define NET_RX_SUCCESS 0 /* keep 'em coming, baby */ |
74 | #define NET_RX_DROP 1 /* packet dropped */ | 74 | #define NET_RX_DROP 1 /* packet dropped */ |
75 | #define NET_RX_CN_LOW 2 /* storm alert, just in case */ | ||
76 | #define NET_RX_CN_MOD 3 /* Storm on its way! */ | ||
77 | #define NET_RX_CN_HIGH 4 /* The storm is here */ | ||
78 | #define NET_RX_BAD 5 /* packet dropped due to kernel error */ | ||
79 | 75 | ||
80 | /* NET_XMIT_CN is special. It does not guarantee that this packet is lost. It | 76 | /* NET_XMIT_CN is special. It does not guarantee that this packet is lost. It |
81 | * indicates that the device will soon be dropping packets, or already drops | 77 | * indicates that the device will soon be dropping packets, or already drops |
@@ -83,17 +79,19 @@ struct wireless_dev; | |||
83 | #define net_xmit_eval(e) ((e) == NET_XMIT_CN? 0 : (e)) | 79 | #define net_xmit_eval(e) ((e) == NET_XMIT_CN? 0 : (e)) |
84 | #define net_xmit_errno(e) ((e) != NET_XMIT_CN ? -ENOBUFS : 0) | 80 | #define net_xmit_errno(e) ((e) != NET_XMIT_CN ? -ENOBUFS : 0) |
85 | 81 | ||
82 | /* Driver transmit return codes */ | ||
83 | enum netdev_tx { | ||
84 | NETDEV_TX_OK = 0, /* driver took care of packet */ | ||
85 | NETDEV_TX_BUSY, /* driver tx path was busy*/ | ||
86 | NETDEV_TX_LOCKED = -1, /* driver tx lock was already taken */ | ||
87 | }; | ||
88 | typedef enum netdev_tx netdev_tx_t; | ||
89 | |||
86 | #endif | 90 | #endif |
87 | 91 | ||
88 | #define MAX_ADDR_LEN 32 /* Largest hardware address length */ | 92 | #define MAX_ADDR_LEN 32 /* Largest hardware address length */ |
89 | 93 | ||
90 | /* Driver transmit return codes */ | ||
91 | #define NETDEV_TX_OK 0 /* driver took care of packet */ | ||
92 | #define NETDEV_TX_BUSY 1 /* driver tx path was busy*/ | ||
93 | #define NETDEV_TX_LOCKED -1 /* driver tx lock was already taken */ | ||
94 | |||
95 | #ifdef __KERNEL__ | 94 | #ifdef __KERNEL__ |
96 | |||
97 | /* | 95 | /* |
98 | * Compute the worst case header length according to the protocols | 96 | * Compute the worst case header length according to the protocols |
99 | * used. | 97 | * used. |
@@ -511,9 +509,11 @@ struct netdev_queue { | |||
511 | * This function is called when network device transistions to the down | 509 | * This function is called when network device transistions to the down |
512 | * state. | 510 | * state. |
513 | * | 511 | * |
514 | * int (*ndo_start_xmit)(struct sk_buff *skb, struct net_device *dev); | 512 | * netdev_tx_t (*ndo_start_xmit)(struct sk_buff *skb, |
513 | * struct net_device *dev); | ||
515 | * Called when a packet needs to be transmitted. | 514 | * Called when a packet needs to be transmitted. |
516 | * Must return NETDEV_TX_OK , NETDEV_TX_BUSY, or NETDEV_TX_LOCKED, | 515 | * Must return NETDEV_TX_OK , NETDEV_TX_BUSY. |
516 | * (can also return NETDEV_TX_LOCKED iff NETIF_F_LLTX) | ||
517 | * Required can not be NULL. | 517 | * Required can not be NULL. |
518 | * | 518 | * |
519 | * u16 (*ndo_select_queue)(struct net_device *dev, struct sk_buff *skb); | 519 | * u16 (*ndo_select_queue)(struct net_device *dev, struct sk_buff *skb); |
@@ -584,7 +584,7 @@ struct net_device_ops { | |||
584 | void (*ndo_uninit)(struct net_device *dev); | 584 | void (*ndo_uninit)(struct net_device *dev); |
585 | int (*ndo_open)(struct net_device *dev); | 585 | int (*ndo_open)(struct net_device *dev); |
586 | int (*ndo_stop)(struct net_device *dev); | 586 | int (*ndo_stop)(struct net_device *dev); |
587 | int (*ndo_start_xmit) (struct sk_buff *skb, | 587 | netdev_tx_t (*ndo_start_xmit) (struct sk_buff *skb, |
588 | struct net_device *dev); | 588 | struct net_device *dev); |
589 | u16 (*ndo_select_queue)(struct net_device *dev, | 589 | u16 (*ndo_select_queue)(struct net_device *dev, |
590 | struct sk_buff *skb); | 590 | struct sk_buff *skb); |
@@ -627,6 +627,8 @@ struct net_device_ops { | |||
627 | void (*ndo_poll_controller)(struct net_device *dev); | 627 | void (*ndo_poll_controller)(struct net_device *dev); |
628 | #endif | 628 | #endif |
629 | #if defined(CONFIG_FCOE) || defined(CONFIG_FCOE_MODULE) | 629 | #if defined(CONFIG_FCOE) || defined(CONFIG_FCOE_MODULE) |
630 | int (*ndo_fcoe_enable)(struct net_device *dev); | ||
631 | int (*ndo_fcoe_disable)(struct net_device *dev); | ||
630 | int (*ndo_fcoe_ddp_setup)(struct net_device *dev, | 632 | int (*ndo_fcoe_ddp_setup)(struct net_device *dev, |
631 | u16 xid, | 633 | u16 xid, |
632 | struct scatterlist *sgl, | 634 | struct scatterlist *sgl, |
@@ -705,6 +707,7 @@ struct net_device | |||
705 | /* the GSO_MASK reserves bits 16 through 23 */ | 707 | /* the GSO_MASK reserves bits 16 through 23 */ |
706 | #define NETIF_F_FCOE_CRC (1 << 24) /* FCoE CRC32 */ | 708 | #define NETIF_F_FCOE_CRC (1 << 24) /* FCoE CRC32 */ |
707 | #define NETIF_F_SCTP_CSUM (1 << 25) /* SCTP checksum offload */ | 709 | #define NETIF_F_SCTP_CSUM (1 << 25) /* SCTP checksum offload */ |
710 | #define NETIF_F_FCOE_MTU (1 << 26) /* Supports max FCoE MTU, 2158 bytes*/ | ||
708 | 711 | ||
709 | /* Segmentation offload features */ | 712 | /* Segmentation offload features */ |
710 | #define NETIF_F_GSO_SHIFT 16 | 713 | #define NETIF_F_GSO_SHIFT 16 |
@@ -829,6 +832,9 @@ struct net_device | |||
829 | /* Number of TX queues currently active in device */ | 832 | /* Number of TX queues currently active in device */ |
830 | unsigned int real_num_tx_queues; | 833 | unsigned int real_num_tx_queues; |
831 | 834 | ||
835 | /* root qdisc from userspace point of view */ | ||
836 | struct Qdisc *qdisc; | ||
837 | |||
832 | unsigned long tx_queue_len; /* Max frames per queue allowed */ | 838 | unsigned long tx_queue_len; /* Max frames per queue allowed */ |
833 | spinlock_t tx_global_lock; | 839 | spinlock_t tx_global_lock; |
834 | /* | 840 | /* |
@@ -889,7 +895,7 @@ struct net_device | |||
889 | /* class/net/name entry */ | 895 | /* class/net/name entry */ |
890 | struct device dev; | 896 | struct device dev; |
891 | /* space for optional statistics and wireless sysfs groups */ | 897 | /* space for optional statistics and wireless sysfs groups */ |
892 | struct attribute_group *sysfs_groups[3]; | 898 | const struct attribute_group *sysfs_groups[3]; |
893 | 899 | ||
894 | /* rtnetlink link ops */ | 900 | /* rtnetlink link ops */ |
895 | const struct rtnl_link_ops *rtnl_link_ops; | 901 | const struct rtnl_link_ops *rtnl_link_ops; |
@@ -992,6 +998,12 @@ static inline void *netdev_priv(const struct net_device *dev) | |||
992 | */ | 998 | */ |
993 | #define SET_NETDEV_DEV(net, pdev) ((net)->dev.parent = (pdev)) | 999 | #define SET_NETDEV_DEV(net, pdev) ((net)->dev.parent = (pdev)) |
994 | 1000 | ||
1001 | /* Set the sysfs device type for the network logical device to allow | ||
1002 | * fin grained indentification of different network device types. For | ||
1003 | * example Ethernet, Wirelss LAN, Bluetooth, WiMAX etc. | ||
1004 | */ | ||
1005 | #define SET_NETDEV_DEVTYPE(net, devtype) ((net)->dev.type = (devtype)) | ||
1006 | |||
995 | /** | 1007 | /** |
996 | * netif_napi_add - initialize a napi context | 1008 | * netif_napi_add - initialize a napi context |
997 | * @dev: network device | 1009 | * @dev: network device |
@@ -1260,7 +1272,7 @@ static inline void netif_tx_wake_queue(struct netdev_queue *dev_queue) | |||
1260 | { | 1272 | { |
1261 | #ifdef CONFIG_NETPOLL_TRAP | 1273 | #ifdef CONFIG_NETPOLL_TRAP |
1262 | if (netpoll_trap()) { | 1274 | if (netpoll_trap()) { |
1263 | clear_bit(__QUEUE_STATE_XOFF, &dev_queue->state); | 1275 | netif_tx_start_queue(dev_queue); |
1264 | return; | 1276 | return; |
1265 | } | 1277 | } |
1266 | #endif | 1278 | #endif |
@@ -1366,7 +1378,8 @@ static inline int netif_running(const struct net_device *dev) | |||
1366 | static inline void netif_start_subqueue(struct net_device *dev, u16 queue_index) | 1378 | static inline void netif_start_subqueue(struct net_device *dev, u16 queue_index) |
1367 | { | 1379 | { |
1368 | struct netdev_queue *txq = netdev_get_tx_queue(dev, queue_index); | 1380 | struct netdev_queue *txq = netdev_get_tx_queue(dev, queue_index); |
1369 | clear_bit(__QUEUE_STATE_XOFF, &txq->state); | 1381 | |
1382 | netif_tx_start_queue(txq); | ||
1370 | } | 1383 | } |
1371 | 1384 | ||
1372 | /** | 1385 | /** |
@@ -1383,7 +1396,7 @@ static inline void netif_stop_subqueue(struct net_device *dev, u16 queue_index) | |||
1383 | if (netpoll_trap()) | 1396 | if (netpoll_trap()) |
1384 | return; | 1397 | return; |
1385 | #endif | 1398 | #endif |
1386 | set_bit(__QUEUE_STATE_XOFF, &txq->state); | 1399 | netif_tx_stop_queue(txq); |
1387 | } | 1400 | } |
1388 | 1401 | ||
1389 | /** | 1402 | /** |
@@ -1397,7 +1410,8 @@ static inline int __netif_subqueue_stopped(const struct net_device *dev, | |||
1397 | u16 queue_index) | 1410 | u16 queue_index) |
1398 | { | 1411 | { |
1399 | struct netdev_queue *txq = netdev_get_tx_queue(dev, queue_index); | 1412 | struct netdev_queue *txq = netdev_get_tx_queue(dev, queue_index); |
1400 | return test_bit(__QUEUE_STATE_XOFF, &txq->state); | 1413 | |
1414 | return netif_tx_queue_stopped(txq); | ||
1401 | } | 1415 | } |
1402 | 1416 | ||
1403 | static inline int netif_subqueue_stopped(const struct net_device *dev, | 1417 | static inline int netif_subqueue_stopped(const struct net_device *dev, |
@@ -1749,8 +1763,7 @@ static inline void netif_tx_unlock(struct net_device *dev) | |||
1749 | * force a schedule. | 1763 | * force a schedule. |
1750 | */ | 1764 | */ |
1751 | clear_bit(__QUEUE_STATE_FROZEN, &txq->state); | 1765 | clear_bit(__QUEUE_STATE_FROZEN, &txq->state); |
1752 | if (!test_bit(__QUEUE_STATE_XOFF, &txq->state)) | 1766 | netif_schedule_queue(txq); |
1753 | __netif_schedule(txq->qdisc); | ||
1754 | } | 1767 | } |
1755 | spin_unlock(&dev->tx_global_lock); | 1768 | spin_unlock(&dev->tx_global_lock); |
1756 | } | 1769 | } |
@@ -1860,7 +1873,8 @@ extern void __dev_addr_unsync(struct dev_addr_list **to, int *to_count, struct | |||
1860 | extern int dev_set_promiscuity(struct net_device *dev, int inc); | 1873 | extern int dev_set_promiscuity(struct net_device *dev, int inc); |
1861 | extern int dev_set_allmulti(struct net_device *dev, int inc); | 1874 | extern int dev_set_allmulti(struct net_device *dev, int inc); |
1862 | extern void netdev_state_change(struct net_device *dev); | 1875 | extern void netdev_state_change(struct net_device *dev); |
1863 | extern void netdev_bonding_change(struct net_device *dev); | 1876 | extern void netdev_bonding_change(struct net_device *dev, |
1877 | unsigned long event); | ||
1864 | extern void netdev_features_change(struct net_device *dev); | 1878 | extern void netdev_features_change(struct net_device *dev); |
1865 | /* Load a device via the kmod */ | 1879 | /* Load a device via the kmod */ |
1866 | extern void dev_load(struct net *net, const char *name); | 1880 | extern void dev_load(struct net *net, const char *name); |
diff --git a/include/linux/netfilter/nfnetlink.h b/include/linux/netfilter/nfnetlink.h index bff4d5741d98..9f00da287f2c 100644 --- a/include/linux/netfilter/nfnetlink.h +++ b/include/linux/netfilter/nfnetlink.h | |||
@@ -58,7 +58,8 @@ struct nfgenmsg { | |||
58 | struct nfnl_callback | 58 | struct nfnl_callback |
59 | { | 59 | { |
60 | int (*call)(struct sock *nl, struct sk_buff *skb, | 60 | int (*call)(struct sock *nl, struct sk_buff *skb, |
61 | struct nlmsghdr *nlh, struct nlattr *cda[]); | 61 | const struct nlmsghdr *nlh, |
62 | const struct nlattr * const cda[]); | ||
62 | const struct nla_policy *policy; /* netlink attribute policy */ | 63 | const struct nla_policy *policy; /* netlink attribute policy */ |
63 | const u_int16_t attr_count; /* number of nlattr's */ | 64 | const u_int16_t attr_count; /* number of nlattr's */ |
64 | }; | 65 | }; |
diff --git a/include/linux/netfilter/x_tables.h b/include/linux/netfilter/x_tables.h index 1030b7593898..812cb153cabb 100644 --- a/include/linux/netfilter/x_tables.h +++ b/include/linux/netfilter/x_tables.h | |||
@@ -238,9 +238,9 @@ struct xt_mtdtor_param { | |||
238 | */ | 238 | */ |
239 | struct xt_target_param { | 239 | struct xt_target_param { |
240 | const struct net_device *in, *out; | 240 | const struct net_device *in, *out; |
241 | unsigned int hooknum; | ||
242 | const struct xt_target *target; | 241 | const struct xt_target *target; |
243 | const void *targinfo; | 242 | const void *targinfo; |
243 | unsigned int hooknum; | ||
244 | u_int8_t family; | 244 | u_int8_t family; |
245 | }; | 245 | }; |
246 | 246 | ||
@@ -407,7 +407,7 @@ extern int xt_check_target(struct xt_tgchk_param *, | |||
407 | unsigned int size, u_int8_t proto, bool inv_proto); | 407 | unsigned int size, u_int8_t proto, bool inv_proto); |
408 | 408 | ||
409 | extern struct xt_table *xt_register_table(struct net *net, | 409 | extern struct xt_table *xt_register_table(struct net *net, |
410 | struct xt_table *table, | 410 | const struct xt_table *table, |
411 | struct xt_table_info *bootstrap, | 411 | struct xt_table_info *bootstrap, |
412 | struct xt_table_info *newinfo); | 412 | struct xt_table_info *newinfo); |
413 | extern void *xt_unregister_table(struct xt_table *table); | 413 | extern void *xt_unregister_table(struct xt_table *table); |
diff --git a/include/linux/netfilter/xt_CONNMARK.h b/include/linux/netfilter/xt_CONNMARK.h index 7635c8ffdadb..0a8545866752 100644 --- a/include/linux/netfilter/xt_CONNMARK.h +++ b/include/linux/netfilter/xt_CONNMARK.h | |||
@@ -18,12 +18,6 @@ enum { | |||
18 | XT_CONNMARK_RESTORE | 18 | XT_CONNMARK_RESTORE |
19 | }; | 19 | }; |
20 | 20 | ||
21 | struct xt_connmark_target_info { | ||
22 | unsigned long mark; | ||
23 | unsigned long mask; | ||
24 | __u8 mode; | ||
25 | }; | ||
26 | |||
27 | struct xt_connmark_tginfo1 { | 21 | struct xt_connmark_tginfo1 { |
28 | __u32 ctmark, ctmask, nfmask; | 22 | __u32 ctmark, ctmask, nfmask; |
29 | __u8 mode; | 23 | __u8 mode; |
diff --git a/include/linux/netfilter/xt_MARK.h b/include/linux/netfilter/xt_MARK.h index 028304bcc0b1..bc9561bdef79 100644 --- a/include/linux/netfilter/xt_MARK.h +++ b/include/linux/netfilter/xt_MARK.h | |||
@@ -3,23 +3,6 @@ | |||
3 | 3 | ||
4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
5 | 5 | ||
6 | /* Version 0 */ | ||
7 | struct xt_mark_target_info { | ||
8 | unsigned long mark; | ||
9 | }; | ||
10 | |||
11 | /* Version 1 */ | ||
12 | enum { | ||
13 | XT_MARK_SET=0, | ||
14 | XT_MARK_AND, | ||
15 | XT_MARK_OR, | ||
16 | }; | ||
17 | |||
18 | struct xt_mark_target_info_v1 { | ||
19 | unsigned long mark; | ||
20 | __u8 mode; | ||
21 | }; | ||
22 | |||
23 | struct xt_mark_tginfo2 { | 6 | struct xt_mark_tginfo2 { |
24 | __u32 mark, mask; | 7 | __u32 mark, mask; |
25 | }; | 8 | }; |
diff --git a/include/linux/netfilter/xt_connmark.h b/include/linux/netfilter/xt_connmark.h index 571e266d004c..619e47cde01a 100644 --- a/include/linux/netfilter/xt_connmark.h +++ b/include/linux/netfilter/xt_connmark.h | |||
@@ -12,11 +12,6 @@ | |||
12 | * (at your option) any later version. | 12 | * (at your option) any later version. |
13 | */ | 13 | */ |
14 | 14 | ||
15 | struct xt_connmark_info { | ||
16 | unsigned long mark, mask; | ||
17 | __u8 invert; | ||
18 | }; | ||
19 | |||
20 | struct xt_connmark_mtinfo1 { | 15 | struct xt_connmark_mtinfo1 { |
21 | __u32 mark, mask; | 16 | __u32 mark, mask; |
22 | __u8 invert; | 17 | __u8 invert; |
diff --git a/include/linux/netfilter/xt_conntrack.h b/include/linux/netfilter/xt_conntrack.h index 3430c7751948..54f47a2f6152 100644 --- a/include/linux/netfilter/xt_conntrack.h +++ b/include/linux/netfilter/xt_conntrack.h | |||
@@ -32,42 +32,6 @@ enum { | |||
32 | XT_CONNTRACK_DIRECTION = 1 << 12, | 32 | XT_CONNTRACK_DIRECTION = 1 << 12, |
33 | }; | 33 | }; |
34 | 34 | ||
35 | /* This is exposed to userspace, so remains frozen in time. */ | ||
36 | struct ip_conntrack_old_tuple | ||
37 | { | ||
38 | struct { | ||
39 | __be32 ip; | ||
40 | union { | ||
41 | __u16 all; | ||
42 | } u; | ||
43 | } src; | ||
44 | |||
45 | struct { | ||
46 | __be32 ip; | ||
47 | union { | ||
48 | __u16 all; | ||
49 | } u; | ||
50 | |||
51 | /* The protocol. */ | ||
52 | __u16 protonum; | ||
53 | } dst; | ||
54 | }; | ||
55 | |||
56 | struct xt_conntrack_info | ||
57 | { | ||
58 | unsigned int statemask, statusmask; | ||
59 | |||
60 | struct ip_conntrack_old_tuple tuple[IP_CT_DIR_MAX]; | ||
61 | struct in_addr sipmsk[IP_CT_DIR_MAX], dipmsk[IP_CT_DIR_MAX]; | ||
62 | |||
63 | unsigned long expires_min, expires_max; | ||
64 | |||
65 | /* Flags word */ | ||
66 | __u8 flags; | ||
67 | /* Inverse flags */ | ||
68 | __u8 invflags; | ||
69 | }; | ||
70 | |||
71 | struct xt_conntrack_mtinfo1 { | 35 | struct xt_conntrack_mtinfo1 { |
72 | union nf_inet_addr origsrc_addr, origsrc_mask; | 36 | union nf_inet_addr origsrc_addr, origsrc_mask; |
73 | union nf_inet_addr origdst_addr, origdst_mask; | 37 | union nf_inet_addr origdst_addr, origdst_mask; |
@@ -81,4 +45,17 @@ struct xt_conntrack_mtinfo1 { | |||
81 | __u8 state_mask, status_mask; | 45 | __u8 state_mask, status_mask; |
82 | }; | 46 | }; |
83 | 47 | ||
48 | struct xt_conntrack_mtinfo2 { | ||
49 | union nf_inet_addr origsrc_addr, origsrc_mask; | ||
50 | union nf_inet_addr origdst_addr, origdst_mask; | ||
51 | union nf_inet_addr replsrc_addr, replsrc_mask; | ||
52 | union nf_inet_addr repldst_addr, repldst_mask; | ||
53 | __u32 expires_min, expires_max; | ||
54 | __u16 l4proto; | ||
55 | __be16 origsrc_port, origdst_port; | ||
56 | __be16 replsrc_port, repldst_port; | ||
57 | __u16 match_flags, invert_flags; | ||
58 | __u16 state_mask, status_mask; | ||
59 | }; | ||
60 | |||
84 | #endif /*_XT_CONNTRACK_H*/ | 61 | #endif /*_XT_CONNTRACK_H*/ |
diff --git a/include/linux/netfilter/xt_mark.h b/include/linux/netfilter/xt_mark.h index 6fa460a3cc29..6607c8f38ea5 100644 --- a/include/linux/netfilter/xt_mark.h +++ b/include/linux/netfilter/xt_mark.h | |||
@@ -3,11 +3,6 @@ | |||
3 | 3 | ||
4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
5 | 5 | ||
6 | struct xt_mark_info { | ||
7 | unsigned long mark, mask; | ||
8 | __u8 invert; | ||
9 | }; | ||
10 | |||
11 | struct xt_mark_mtinfo1 { | 6 | struct xt_mark_mtinfo1 { |
12 | __u32 mark, mask; | 7 | __u32 mark, mask; |
13 | __u8 invert; | 8 | __u8 invert; |
diff --git a/include/linux/netfilter/xt_osf.h b/include/linux/netfilter/xt_osf.h index fd2272e0959a..18afa495f973 100644 --- a/include/linux/netfilter/xt_osf.h +++ b/include/linux/netfilter/xt_osf.h | |||
@@ -20,6 +20,8 @@ | |||
20 | #ifndef _XT_OSF_H | 20 | #ifndef _XT_OSF_H |
21 | #define _XT_OSF_H | 21 | #define _XT_OSF_H |
22 | 22 | ||
23 | #include <linux/types.h> | ||
24 | |||
23 | #define MAXGENRELEN 32 | 25 | #define MAXGENRELEN 32 |
24 | 26 | ||
25 | #define XT_OSF_GENRE (1<<0) | 27 | #define XT_OSF_GENRE (1<<0) |
diff --git a/include/linux/netfilter_arp/arp_tables.h b/include/linux/netfilter_arp/arp_tables.h index 590ac3d6d5d6..6fe3e6aa10db 100644 --- a/include/linux/netfilter_arp/arp_tables.h +++ b/include/linux/netfilter_arp/arp_tables.h | |||
@@ -265,7 +265,7 @@ struct arpt_error | |||
265 | } | 265 | } |
266 | 266 | ||
267 | extern struct xt_table *arpt_register_table(struct net *net, | 267 | extern struct xt_table *arpt_register_table(struct net *net, |
268 | struct xt_table *table, | 268 | const struct xt_table *table, |
269 | const struct arpt_replace *repl); | 269 | const struct arpt_replace *repl); |
270 | extern void arpt_unregister_table(struct xt_table *table); | 270 | extern void arpt_unregister_table(struct xt_table *table); |
271 | extern unsigned int arpt_do_table(struct sk_buff *skb, | 271 | extern unsigned int arpt_do_table(struct sk_buff *skb, |
diff --git a/include/linux/netfilter_bridge/ebtables.h b/include/linux/netfilter_bridge/ebtables.h index e40ddb94b1af..ea281e6a2048 100644 --- a/include/linux/netfilter_bridge/ebtables.h +++ b/include/linux/netfilter_bridge/ebtables.h | |||
@@ -301,7 +301,7 @@ struct ebt_table | |||
301 | #define EBT_ALIGN(s) (((s) + (__alignof__(struct ebt_replace)-1)) & \ | 301 | #define EBT_ALIGN(s) (((s) + (__alignof__(struct ebt_replace)-1)) & \ |
302 | ~(__alignof__(struct ebt_replace)-1)) | 302 | ~(__alignof__(struct ebt_replace)-1)) |
303 | extern struct ebt_table *ebt_register_table(struct net *net, | 303 | extern struct ebt_table *ebt_register_table(struct net *net, |
304 | struct ebt_table *table); | 304 | const struct ebt_table *table); |
305 | extern void ebt_unregister_table(struct ebt_table *table); | 305 | extern void ebt_unregister_table(struct ebt_table *table); |
306 | extern unsigned int ebt_do_table(unsigned int hook, struct sk_buff *skb, | 306 | extern unsigned int ebt_do_table(unsigned int hook, struct sk_buff *skb, |
307 | const struct net_device *in, const struct net_device *out, | 307 | const struct net_device *in, const struct net_device *out, |
diff --git a/include/linux/netfilter_ipv4/Kbuild b/include/linux/netfilter_ipv4/Kbuild index 3a7105bb8f33..431b40761920 100644 --- a/include/linux/netfilter_ipv4/Kbuild +++ b/include/linux/netfilter_ipv4/Kbuild | |||
@@ -1,46 +1,14 @@ | |||
1 | header-y += ipt_CLASSIFY.h | ||
2 | header-y += ipt_CLUSTERIP.h | 1 | header-y += ipt_CLUSTERIP.h |
3 | header-y += ipt_CONNMARK.h | ||
4 | header-y += ipt_DSCP.h | ||
5 | header-y += ipt_ECN.h | 2 | header-y += ipt_ECN.h |
6 | header-y += ipt_LOG.h | 3 | header-y += ipt_LOG.h |
7 | header-y += ipt_MARK.h | ||
8 | header-y += ipt_NFQUEUE.h | ||
9 | header-y += ipt_REJECT.h | 4 | header-y += ipt_REJECT.h |
10 | header-y += ipt_SAME.h | 5 | header-y += ipt_SAME.h |
11 | header-y += ipt_TCPMSS.h | ||
12 | header-y += ipt_TOS.h | ||
13 | header-y += ipt_TTL.h | 6 | header-y += ipt_TTL.h |
14 | header-y += ipt_ULOG.h | 7 | header-y += ipt_ULOG.h |
15 | header-y += ipt_addrtype.h | 8 | header-y += ipt_addrtype.h |
16 | header-y += ipt_ah.h | 9 | header-y += ipt_ah.h |
17 | header-y += ipt_comment.h | ||
18 | header-y += ipt_connbytes.h | ||
19 | header-y += ipt_connmark.h | ||
20 | header-y += ipt_conntrack.h | ||
21 | header-y += ipt_dccp.h | ||
22 | header-y += ipt_dscp.h | ||
23 | header-y += ipt_ecn.h | 10 | header-y += ipt_ecn.h |
24 | header-y += ipt_esp.h | ||
25 | header-y += ipt_hashlimit.h | ||
26 | header-y += ipt_helper.h | ||
27 | header-y += ipt_iprange.h | ||
28 | header-y += ipt_length.h | ||
29 | header-y += ipt_limit.h | ||
30 | header-y += ipt_mac.h | ||
31 | header-y += ipt_mark.h | ||
32 | header-y += ipt_multiport.h | ||
33 | header-y += ipt_owner.h | ||
34 | header-y += ipt_physdev.h | ||
35 | header-y += ipt_pkttype.h | ||
36 | header-y += ipt_policy.h | ||
37 | header-y += ipt_realm.h | 11 | header-y += ipt_realm.h |
38 | header-y += ipt_recent.h | ||
39 | header-y += ipt_sctp.h | ||
40 | header-y += ipt_state.h | ||
41 | header-y += ipt_string.h | ||
42 | header-y += ipt_tcpmss.h | ||
43 | header-y += ipt_tos.h | ||
44 | header-y += ipt_ttl.h | 12 | header-y += ipt_ttl.h |
45 | 13 | ||
46 | unifdef-y += ip_queue.h | 14 | unifdef-y += ip_queue.h |
diff --git a/include/linux/netfilter_ipv4/ip_tables.h b/include/linux/netfilter_ipv4/ip_tables.h index 092bd50581a9..61fafc868a7b 100644 --- a/include/linux/netfilter_ipv4/ip_tables.h +++ b/include/linux/netfilter_ipv4/ip_tables.h | |||
@@ -245,7 +245,7 @@ ipt_get_target(struct ipt_entry *e) | |||
245 | extern void ipt_init(void) __init; | 245 | extern void ipt_init(void) __init; |
246 | 246 | ||
247 | extern struct xt_table *ipt_register_table(struct net *net, | 247 | extern struct xt_table *ipt_register_table(struct net *net, |
248 | struct xt_table *table, | 248 | const struct xt_table *table, |
249 | const struct ipt_replace *repl); | 249 | const struct ipt_replace *repl); |
250 | extern void ipt_unregister_table(struct xt_table *table); | 250 | extern void ipt_unregister_table(struct xt_table *table); |
251 | 251 | ||
diff --git a/include/linux/netfilter_ipv4/ipt_CLASSIFY.h b/include/linux/netfilter_ipv4/ipt_CLASSIFY.h deleted file mode 100644 index a46d511b5c36..000000000000 --- a/include/linux/netfilter_ipv4/ipt_CLASSIFY.h +++ /dev/null | |||
@@ -1,7 +0,0 @@ | |||
1 | #ifndef _IPT_CLASSIFY_H | ||
2 | #define _IPT_CLASSIFY_H | ||
3 | |||
4 | #include <linux/netfilter/xt_CLASSIFY.h> | ||
5 | #define ipt_classify_target_info xt_classify_target_info | ||
6 | |||
7 | #endif /*_IPT_CLASSIFY_H */ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_CONNMARK.h b/include/linux/netfilter_ipv4/ipt_CONNMARK.h deleted file mode 100644 index 9ecfee0a9e33..000000000000 --- a/include/linux/netfilter_ipv4/ipt_CONNMARK.h +++ /dev/null | |||
@@ -1,19 +0,0 @@ | |||
1 | #ifndef _IPT_CONNMARK_H_target | ||
2 | #define _IPT_CONNMARK_H_target | ||
3 | |||
4 | /* Copyright (C) 2002,2004 MARA Systems AB <http://www.marasystems.com> | ||
5 | * by Henrik Nordstrom <hno@marasystems.com> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License as published by | ||
9 | * the Free Software Foundation; either version 2 of the License, or | ||
10 | * (at your option) any later version. | ||
11 | */ | ||
12 | #include <linux/netfilter/xt_CONNMARK.h> | ||
13 | #define IPT_CONNMARK_SET XT_CONNMARK_SET | ||
14 | #define IPT_CONNMARK_SAVE XT_CONNMARK_SAVE | ||
15 | #define IPT_CONNMARK_RESTORE XT_CONNMARK_RESTORE | ||
16 | |||
17 | #define ipt_connmark_target_info xt_connmark_target_info | ||
18 | |||
19 | #endif /*_IPT_CONNMARK_H_target*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_DSCP.h b/include/linux/netfilter_ipv4/ipt_DSCP.h deleted file mode 100644 index 3491e524d5ea..000000000000 --- a/include/linux/netfilter_ipv4/ipt_DSCP.h +++ /dev/null | |||
@@ -1,18 +0,0 @@ | |||
1 | /* iptables module for setting the IPv4 DSCP field | ||
2 | * | ||
3 | * (C) 2002 Harald Welte <laforge@gnumonks.org> | ||
4 | * based on ipt_FTOS.c (C) 2000 by Matthew G. Marsh <mgm@paktronix.com> | ||
5 | * This software is distributed under GNU GPL v2, 1991 | ||
6 | * | ||
7 | * See RFC2474 for a description of the DSCP field within the IP Header. | ||
8 | * | ||
9 | * ipt_DSCP.h,v 1.7 2002/03/14 12:03:13 laforge Exp | ||
10 | */ | ||
11 | #ifndef _IPT_DSCP_TARGET_H | ||
12 | #define _IPT_DSCP_TARGET_H | ||
13 | #include <linux/netfilter_ipv4/ipt_dscp.h> | ||
14 | #include <linux/netfilter/xt_DSCP.h> | ||
15 | |||
16 | #define ipt_DSCP_info xt_DSCP_info | ||
17 | |||
18 | #endif /* _IPT_DSCP_TARGET_H */ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_ECN.h b/include/linux/netfilter_ipv4/ipt_ECN.h index 94e0d9866469..7ca45918ab8e 100644 --- a/include/linux/netfilter_ipv4/ipt_ECN.h +++ b/include/linux/netfilter_ipv4/ipt_ECN.h | |||
@@ -8,9 +8,9 @@ | |||
8 | */ | 8 | */ |
9 | #ifndef _IPT_ECN_TARGET_H | 9 | #ifndef _IPT_ECN_TARGET_H |
10 | #define _IPT_ECN_TARGET_H | 10 | #define _IPT_ECN_TARGET_H |
11 | #include <linux/netfilter_ipv4/ipt_DSCP.h> | 11 | #include <linux/netfilter/xt_DSCP.h> |
12 | 12 | ||
13 | #define IPT_ECN_IP_MASK (~IPT_DSCP_MASK) | 13 | #define IPT_ECN_IP_MASK (~XT_DSCP_MASK) |
14 | 14 | ||
15 | #define IPT_ECN_OP_SET_IP 0x01 /* set ECN bits of IPv4 header */ | 15 | #define IPT_ECN_OP_SET_IP 0x01 /* set ECN bits of IPv4 header */ |
16 | #define IPT_ECN_OP_SET_ECE 0x10 /* set ECE bit of TCP header */ | 16 | #define IPT_ECN_OP_SET_ECE 0x10 /* set ECE bit of TCP header */ |
diff --git a/include/linux/netfilter_ipv4/ipt_MARK.h b/include/linux/netfilter_ipv4/ipt_MARK.h deleted file mode 100644 index 697a486a96d3..000000000000 --- a/include/linux/netfilter_ipv4/ipt_MARK.h +++ /dev/null | |||
@@ -1,18 +0,0 @@ | |||
1 | #ifndef _IPT_MARK_H_target | ||
2 | #define _IPT_MARK_H_target | ||
3 | |||
4 | /* Backwards compatibility for old userspace */ | ||
5 | |||
6 | #include <linux/netfilter/xt_MARK.h> | ||
7 | |||
8 | /* Version 0 */ | ||
9 | #define ipt_mark_target_info xt_mark_target_info | ||
10 | |||
11 | /* Version 1 */ | ||
12 | #define IPT_MARK_SET XT_MARK_SET | ||
13 | #define IPT_MARK_AND XT_MARK_AND | ||
14 | #define IPT_MARK_OR XT_MARK_OR | ||
15 | |||
16 | #define ipt_mark_target_info_v1 xt_mark_target_info_v1 | ||
17 | |||
18 | #endif /*_IPT_MARK_H_target*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_NFQUEUE.h b/include/linux/netfilter_ipv4/ipt_NFQUEUE.h deleted file mode 100644 index 97a2a7557cb9..000000000000 --- a/include/linux/netfilter_ipv4/ipt_NFQUEUE.h +++ /dev/null | |||
@@ -1,16 +0,0 @@ | |||
1 | /* iptables module for using NFQUEUE mechanism | ||
2 | * | ||
3 | * (C) 2005 Harald Welte <laforge@netfilter.org> | ||
4 | * | ||
5 | * This software is distributed under GNU GPL v2, 1991 | ||
6 | * | ||
7 | */ | ||
8 | #ifndef _IPT_NFQ_TARGET_H | ||
9 | #define _IPT_NFQ_TARGET_H | ||
10 | |||
11 | /* Backwards compatibility for old userspace */ | ||
12 | #include <linux/netfilter/xt_NFQUEUE.h> | ||
13 | |||
14 | #define ipt_NFQ_info xt_NFQ_info | ||
15 | |||
16 | #endif /* _IPT_DSCP_TARGET_H */ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_TCPMSS.h b/include/linux/netfilter_ipv4/ipt_TCPMSS.h deleted file mode 100644 index 7a850f945824..000000000000 --- a/include/linux/netfilter_ipv4/ipt_TCPMSS.h +++ /dev/null | |||
@@ -1,9 +0,0 @@ | |||
1 | #ifndef _IPT_TCPMSS_H | ||
2 | #define _IPT_TCPMSS_H | ||
3 | |||
4 | #include <linux/netfilter/xt_TCPMSS.h> | ||
5 | |||
6 | #define ipt_tcpmss_info xt_tcpmss_info | ||
7 | #define IPT_TCPMSS_CLAMP_PMTU XT_TCPMSS_CLAMP_PMTU | ||
8 | |||
9 | #endif /*_IPT_TCPMSS_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_TOS.h b/include/linux/netfilter_ipv4/ipt_TOS.h deleted file mode 100644 index 6bf9e1fdfd88..000000000000 --- a/include/linux/netfilter_ipv4/ipt_TOS.h +++ /dev/null | |||
@@ -1,12 +0,0 @@ | |||
1 | #ifndef _IPT_TOS_H_target | ||
2 | #define _IPT_TOS_H_target | ||
3 | |||
4 | #ifndef IPTOS_NORMALSVC | ||
5 | #define IPTOS_NORMALSVC 0 | ||
6 | #endif | ||
7 | |||
8 | struct ipt_tos_target_info { | ||
9 | u_int8_t tos; | ||
10 | }; | ||
11 | |||
12 | #endif /*_IPT_TOS_H_target*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_comment.h b/include/linux/netfilter_ipv4/ipt_comment.h deleted file mode 100644 index ae2afc2f7481..000000000000 --- a/include/linux/netfilter_ipv4/ipt_comment.h +++ /dev/null | |||
@@ -1,10 +0,0 @@ | |||
1 | #ifndef _IPT_COMMENT_H | ||
2 | #define _IPT_COMMENT_H | ||
3 | |||
4 | #include <linux/netfilter/xt_comment.h> | ||
5 | |||
6 | #define IPT_MAX_COMMENT_LEN XT_MAX_COMMENT_LEN | ||
7 | |||
8 | #define ipt_comment_info xt_comment_info | ||
9 | |||
10 | #endif /* _IPT_COMMENT_H */ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_connbytes.h b/include/linux/netfilter_ipv4/ipt_connbytes.h deleted file mode 100644 index f63e6ee91113..000000000000 --- a/include/linux/netfilter_ipv4/ipt_connbytes.h +++ /dev/null | |||
@@ -1,18 +0,0 @@ | |||
1 | #ifndef _IPT_CONNBYTES_H | ||
2 | #define _IPT_CONNBYTES_H | ||
3 | |||
4 | #include <linux/netfilter/xt_connbytes.h> | ||
5 | #define ipt_connbytes_what xt_connbytes_what | ||
6 | |||
7 | #define IPT_CONNBYTES_PKTS XT_CONNBYTES_PKTS | ||
8 | #define IPT_CONNBYTES_BYTES XT_CONNBYTES_BYTES | ||
9 | #define IPT_CONNBYTES_AVGPKT XT_CONNBYTES_AVGPKT | ||
10 | |||
11 | #define ipt_connbytes_direction xt_connbytes_direction | ||
12 | #define IPT_CONNBYTES_DIR_ORIGINAL XT_CONNBYTES_DIR_ORIGINAL | ||
13 | #define IPT_CONNBYTES_DIR_REPLY XT_CONNBYTES_DIR_REPLY | ||
14 | #define IPT_CONNBYTES_DIR_BOTH XT_CONNBYTES_DIR_BOTH | ||
15 | |||
16 | #define ipt_connbytes_info xt_connbytes_info | ||
17 | |||
18 | #endif | ||
diff --git a/include/linux/netfilter_ipv4/ipt_connmark.h b/include/linux/netfilter_ipv4/ipt_connmark.h deleted file mode 100644 index c7ba6560d44c..000000000000 --- a/include/linux/netfilter_ipv4/ipt_connmark.h +++ /dev/null | |||
@@ -1,7 +0,0 @@ | |||
1 | #ifndef _IPT_CONNMARK_H | ||
2 | #define _IPT_CONNMARK_H | ||
3 | |||
4 | #include <linux/netfilter/xt_connmark.h> | ||
5 | #define ipt_connmark_info xt_connmark_info | ||
6 | |||
7 | #endif /*_IPT_CONNMARK_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_conntrack.h b/include/linux/netfilter_ipv4/ipt_conntrack.h deleted file mode 100644 index cde6762949c5..000000000000 --- a/include/linux/netfilter_ipv4/ipt_conntrack.h +++ /dev/null | |||
@@ -1,28 +0,0 @@ | |||
1 | /* Header file for kernel module to match connection tracking information. | ||
2 | * GPL (C) 2001 Marc Boucher (marc@mbsi.ca). | ||
3 | */ | ||
4 | |||
5 | #ifndef _IPT_CONNTRACK_H | ||
6 | #define _IPT_CONNTRACK_H | ||
7 | |||
8 | #include <linux/netfilter/xt_conntrack.h> | ||
9 | |||
10 | #define IPT_CONNTRACK_STATE_BIT(ctinfo) XT_CONNTRACK_STATE_BIT(ctinfo) | ||
11 | #define IPT_CONNTRACK_STATE_INVALID XT_CONNTRACK_STATE_INVALID | ||
12 | |||
13 | #define IPT_CONNTRACK_STATE_SNAT XT_CONNTRACK_STATE_SNAT | ||
14 | #define IPT_CONNTRACK_STATE_DNAT XT_CONNTRACK_STATE_DNAT | ||
15 | #define IPT_CONNTRACK_STATE_UNTRACKED XT_CONNTRACK_STATE_UNTRACKED | ||
16 | |||
17 | /* flags, invflags: */ | ||
18 | #define IPT_CONNTRACK_STATE XT_CONNTRACK_STATE | ||
19 | #define IPT_CONNTRACK_PROTO XT_CONNTRACK_PROTO | ||
20 | #define IPT_CONNTRACK_ORIGSRC XT_CONNTRACK_ORIGSRC | ||
21 | #define IPT_CONNTRACK_ORIGDST XT_CONNTRACK_ORIGDST | ||
22 | #define IPT_CONNTRACK_REPLSRC XT_CONNTRACK_REPLSRC | ||
23 | #define IPT_CONNTRACK_REPLDST XT_CONNTRACK_REPLDST | ||
24 | #define IPT_CONNTRACK_STATUS XT_CONNTRACK_STATUS | ||
25 | #define IPT_CONNTRACK_EXPIRES XT_CONNTRACK_EXPIRES | ||
26 | |||
27 | #define ipt_conntrack_info xt_conntrack_info | ||
28 | #endif /*_IPT_CONNTRACK_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_dccp.h b/include/linux/netfilter_ipv4/ipt_dccp.h deleted file mode 100644 index e70d11e1f53c..000000000000 --- a/include/linux/netfilter_ipv4/ipt_dccp.h +++ /dev/null | |||
@@ -1,15 +0,0 @@ | |||
1 | #ifndef _IPT_DCCP_H_ | ||
2 | #define _IPT_DCCP_H_ | ||
3 | |||
4 | #include <linux/netfilter/xt_dccp.h> | ||
5 | #define IPT_DCCP_SRC_PORTS XT_DCCP_SRC_PORTS | ||
6 | #define IPT_DCCP_DEST_PORTS XT_DCCP_DEST_PORTS | ||
7 | #define IPT_DCCP_TYPE XT_DCCP_TYPE | ||
8 | #define IPT_DCCP_OPTION XT_DCCP_OPTION | ||
9 | |||
10 | #define IPT_DCCP_VALID_FLAGS XT_DCCP_VALID_FLAGS | ||
11 | |||
12 | #define ipt_dccp_info xt_dccp_info | ||
13 | |||
14 | #endif /* _IPT_DCCP_H_ */ | ||
15 | |||
diff --git a/include/linux/netfilter_ipv4/ipt_dscp.h b/include/linux/netfilter_ipv4/ipt_dscp.h deleted file mode 100644 index 4b82ca912b0e..000000000000 --- a/include/linux/netfilter_ipv4/ipt_dscp.h +++ /dev/null | |||
@@ -1,21 +0,0 @@ | |||
1 | /* iptables module for matching the IPv4 DSCP field | ||
2 | * | ||
3 | * (C) 2002 Harald Welte <laforge@gnumonks.org> | ||
4 | * This software is distributed under GNU GPL v2, 1991 | ||
5 | * | ||
6 | * See RFC2474 for a description of the DSCP field within the IP Header. | ||
7 | * | ||
8 | * ipt_dscp.h,v 1.3 2002/08/05 19:00:21 laforge Exp | ||
9 | */ | ||
10 | #ifndef _IPT_DSCP_H | ||
11 | #define _IPT_DSCP_H | ||
12 | |||
13 | #include <linux/netfilter/xt_dscp.h> | ||
14 | |||
15 | #define IPT_DSCP_MASK XT_DSCP_MASK | ||
16 | #define IPT_DSCP_SHIFT XT_DSCP_SHIFT | ||
17 | #define IPT_DSCP_MAX XT_DSCP_MAX | ||
18 | |||
19 | #define ipt_dscp_info xt_dscp_info | ||
20 | |||
21 | #endif /* _IPT_DSCP_H */ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_ecn.h b/include/linux/netfilter_ipv4/ipt_ecn.h index 1f0d9a4d3378..9945baa4ccd7 100644 --- a/include/linux/netfilter_ipv4/ipt_ecn.h +++ b/include/linux/netfilter_ipv4/ipt_ecn.h | |||
@@ -8,9 +8,9 @@ | |||
8 | */ | 8 | */ |
9 | #ifndef _IPT_ECN_H | 9 | #ifndef _IPT_ECN_H |
10 | #define _IPT_ECN_H | 10 | #define _IPT_ECN_H |
11 | #include <linux/netfilter_ipv4/ipt_dscp.h> | 11 | #include <linux/netfilter/xt_dscp.h> |
12 | 12 | ||
13 | #define IPT_ECN_IP_MASK (~IPT_DSCP_MASK) | 13 | #define IPT_ECN_IP_MASK (~XT_DSCP_MASK) |
14 | 14 | ||
15 | #define IPT_ECN_OP_MATCH_IP 0x01 | 15 | #define IPT_ECN_OP_MATCH_IP 0x01 |
16 | #define IPT_ECN_OP_MATCH_ECE 0x10 | 16 | #define IPT_ECN_OP_MATCH_ECE 0x10 |
diff --git a/include/linux/netfilter_ipv4/ipt_esp.h b/include/linux/netfilter_ipv4/ipt_esp.h deleted file mode 100644 index 78296e7eeff9..000000000000 --- a/include/linux/netfilter_ipv4/ipt_esp.h +++ /dev/null | |||
@@ -1,10 +0,0 @@ | |||
1 | #ifndef _IPT_ESP_H | ||
2 | #define _IPT_ESP_H | ||
3 | |||
4 | #include <linux/netfilter/xt_esp.h> | ||
5 | |||
6 | #define ipt_esp xt_esp | ||
7 | #define IPT_ESP_INV_SPI XT_ESP_INV_SPI | ||
8 | #define IPT_ESP_INV_MASK XT_ESP_INV_MASK | ||
9 | |||
10 | #endif /*_IPT_ESP_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_hashlimit.h b/include/linux/netfilter_ipv4/ipt_hashlimit.h deleted file mode 100644 index 5662120a3d7b..000000000000 --- a/include/linux/netfilter_ipv4/ipt_hashlimit.h +++ /dev/null | |||
@@ -1,14 +0,0 @@ | |||
1 | #ifndef _IPT_HASHLIMIT_H | ||
2 | #define _IPT_HASHLIMIT_H | ||
3 | |||
4 | #include <linux/netfilter/xt_hashlimit.h> | ||
5 | |||
6 | #define IPT_HASHLIMIT_SCALE XT_HASHLIMIT_SCALE | ||
7 | #define IPT_HASHLIMIT_HASH_DIP XT_HASHLIMIT_HASH_DIP | ||
8 | #define IPT_HASHLIMIT_HASH_DPT XT_HASHLIMIT_HASH_DPT | ||
9 | #define IPT_HASHLIMIT_HASH_SIP XT_HASHLIMIT_HASH_SIP | ||
10 | #define IPT_HASHLIMIT_HASH_SPT XT_HASHLIMIT_HASH_SPT | ||
11 | |||
12 | #define ipt_hashlimit_info xt_hashlimit_info | ||
13 | |||
14 | #endif /* _IPT_HASHLIMIT_H */ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_helper.h b/include/linux/netfilter_ipv4/ipt_helper.h deleted file mode 100644 index 80452c218551..000000000000 --- a/include/linux/netfilter_ipv4/ipt_helper.h +++ /dev/null | |||
@@ -1,7 +0,0 @@ | |||
1 | #ifndef _IPT_HELPER_H | ||
2 | #define _IPT_HELPER_H | ||
3 | |||
4 | #include <linux/netfilter/xt_helper.h> | ||
5 | #define ipt_helper_info xt_helper_info | ||
6 | |||
7 | #endif /* _IPT_HELPER_H */ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_iprange.h b/include/linux/netfilter_ipv4/ipt_iprange.h deleted file mode 100644 index 5f1aebde4d2f..000000000000 --- a/include/linux/netfilter_ipv4/ipt_iprange.h +++ /dev/null | |||
@@ -1,21 +0,0 @@ | |||
1 | #ifndef _IPT_IPRANGE_H | ||
2 | #define _IPT_IPRANGE_H | ||
3 | |||
4 | #include <linux/types.h> | ||
5 | #include <linux/netfilter/xt_iprange.h> | ||
6 | |||
7 | struct ipt_iprange { | ||
8 | /* Inclusive: network order. */ | ||
9 | __be32 min_ip, max_ip; | ||
10 | }; | ||
11 | |||
12 | struct ipt_iprange_info | ||
13 | { | ||
14 | struct ipt_iprange src; | ||
15 | struct ipt_iprange dst; | ||
16 | |||
17 | /* Flags from above */ | ||
18 | u_int8_t flags; | ||
19 | }; | ||
20 | |||
21 | #endif /* _IPT_IPRANGE_H */ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_length.h b/include/linux/netfilter_ipv4/ipt_length.h deleted file mode 100644 index 9b45206ffcef..000000000000 --- a/include/linux/netfilter_ipv4/ipt_length.h +++ /dev/null | |||
@@ -1,7 +0,0 @@ | |||
1 | #ifndef _IPT_LENGTH_H | ||
2 | #define _IPT_LENGTH_H | ||
3 | |||
4 | #include <linux/netfilter/xt_length.h> | ||
5 | #define ipt_length_info xt_length_info | ||
6 | |||
7 | #endif /*_IPT_LENGTH_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_limit.h b/include/linux/netfilter_ipv4/ipt_limit.h deleted file mode 100644 index 92f5cd07bbc4..000000000000 --- a/include/linux/netfilter_ipv4/ipt_limit.h +++ /dev/null | |||
@@ -1,8 +0,0 @@ | |||
1 | #ifndef _IPT_RATE_H | ||
2 | #define _IPT_RATE_H | ||
3 | |||
4 | #include <linux/netfilter/xt_limit.h> | ||
5 | #define IPT_LIMIT_SCALE XT_LIMIT_SCALE | ||
6 | #define ipt_rateinfo xt_rateinfo | ||
7 | |||
8 | #endif /*_IPT_RATE_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_mac.h b/include/linux/netfilter_ipv4/ipt_mac.h deleted file mode 100644 index b186008a3c47..000000000000 --- a/include/linux/netfilter_ipv4/ipt_mac.h +++ /dev/null | |||
@@ -1,7 +0,0 @@ | |||
1 | #ifndef _IPT_MAC_H | ||
2 | #define _IPT_MAC_H | ||
3 | |||
4 | #include <linux/netfilter/xt_mac.h> | ||
5 | #define ipt_mac_info xt_mac_info | ||
6 | |||
7 | #endif /*_IPT_MAC_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_mark.h b/include/linux/netfilter_ipv4/ipt_mark.h deleted file mode 100644 index bfde67c61224..000000000000 --- a/include/linux/netfilter_ipv4/ipt_mark.h +++ /dev/null | |||
@@ -1,9 +0,0 @@ | |||
1 | #ifndef _IPT_MARK_H | ||
2 | #define _IPT_MARK_H | ||
3 | |||
4 | /* Backwards compatibility for old userspace */ | ||
5 | #include <linux/netfilter/xt_mark.h> | ||
6 | |||
7 | #define ipt_mark_info xt_mark_info | ||
8 | |||
9 | #endif /*_IPT_MARK_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_multiport.h b/include/linux/netfilter_ipv4/ipt_multiport.h deleted file mode 100644 index 55fe85eca88c..000000000000 --- a/include/linux/netfilter_ipv4/ipt_multiport.h +++ /dev/null | |||
@@ -1,15 +0,0 @@ | |||
1 | #ifndef _IPT_MULTIPORT_H | ||
2 | #define _IPT_MULTIPORT_H | ||
3 | |||
4 | #include <linux/netfilter/xt_multiport.h> | ||
5 | |||
6 | #define IPT_MULTIPORT_SOURCE XT_MULTIPORT_SOURCE | ||
7 | #define IPT_MULTIPORT_DESTINATION XT_MULTIPORT_DESTINATION | ||
8 | #define IPT_MULTIPORT_EITHER XT_MULTIPORT_EITHER | ||
9 | |||
10 | #define IPT_MULTI_PORTS XT_MULTI_PORTS | ||
11 | |||
12 | #define ipt_multiport xt_multiport | ||
13 | #define ipt_multiport_v1 xt_multiport_v1 | ||
14 | |||
15 | #endif /*_IPT_MULTIPORT_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_owner.h b/include/linux/netfilter_ipv4/ipt_owner.h deleted file mode 100644 index a78445be9992..000000000000 --- a/include/linux/netfilter_ipv4/ipt_owner.h +++ /dev/null | |||
@@ -1,20 +0,0 @@ | |||
1 | #ifndef _IPT_OWNER_H | ||
2 | #define _IPT_OWNER_H | ||
3 | |||
4 | /* match and invert flags */ | ||
5 | #define IPT_OWNER_UID 0x01 | ||
6 | #define IPT_OWNER_GID 0x02 | ||
7 | #define IPT_OWNER_PID 0x04 | ||
8 | #define IPT_OWNER_SID 0x08 | ||
9 | #define IPT_OWNER_COMM 0x10 | ||
10 | |||
11 | struct ipt_owner_info { | ||
12 | __kernel_uid32_t uid; | ||
13 | __kernel_gid32_t gid; | ||
14 | __kernel_pid_t pid; | ||
15 | __kernel_pid_t sid; | ||
16 | char comm[16]; | ||
17 | u_int8_t match, invert; /* flags */ | ||
18 | }; | ||
19 | |||
20 | #endif /*_IPT_OWNER_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_physdev.h b/include/linux/netfilter_ipv4/ipt_physdev.h deleted file mode 100644 index 2400e7140f26..000000000000 --- a/include/linux/netfilter_ipv4/ipt_physdev.h +++ /dev/null | |||
@@ -1,17 +0,0 @@ | |||
1 | #ifndef _IPT_PHYSDEV_H | ||
2 | #define _IPT_PHYSDEV_H | ||
3 | |||
4 | /* Backwards compatibility for old userspace */ | ||
5 | |||
6 | #include <linux/netfilter/xt_physdev.h> | ||
7 | |||
8 | #define IPT_PHYSDEV_OP_IN XT_PHYSDEV_OP_IN | ||
9 | #define IPT_PHYSDEV_OP_OUT XT_PHYSDEV_OP_OUT | ||
10 | #define IPT_PHYSDEV_OP_BRIDGED XT_PHYSDEV_OP_BRIDGED | ||
11 | #define IPT_PHYSDEV_OP_ISIN XT_PHYSDEV_OP_ISIN | ||
12 | #define IPT_PHYSDEV_OP_ISOUT XT_PHYSDEV_OP_ISOUT | ||
13 | #define IPT_PHYSDEV_OP_MASK XT_PHYSDEV_OP_MASK | ||
14 | |||
15 | #define ipt_physdev_info xt_physdev_info | ||
16 | |||
17 | #endif /*_IPT_PHYSDEV_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_pkttype.h b/include/linux/netfilter_ipv4/ipt_pkttype.h deleted file mode 100644 index ff1fbc949a0c..000000000000 --- a/include/linux/netfilter_ipv4/ipt_pkttype.h +++ /dev/null | |||
@@ -1,7 +0,0 @@ | |||
1 | #ifndef _IPT_PKTTYPE_H | ||
2 | #define _IPT_PKTTYPE_H | ||
3 | |||
4 | #include <linux/netfilter/xt_pkttype.h> | ||
5 | #define ipt_pkttype_info xt_pkttype_info | ||
6 | |||
7 | #endif /*_IPT_PKTTYPE_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_policy.h b/include/linux/netfilter_ipv4/ipt_policy.h deleted file mode 100644 index 1037fb2cd206..000000000000 --- a/include/linux/netfilter_ipv4/ipt_policy.h +++ /dev/null | |||
@@ -1,23 +0,0 @@ | |||
1 | #ifndef _IPT_POLICY_H | ||
2 | #define _IPT_POLICY_H | ||
3 | |||
4 | #include <linux/netfilter/xt_policy.h> | ||
5 | |||
6 | #define IPT_POLICY_MAX_ELEM XT_POLICY_MAX_ELEM | ||
7 | |||
8 | /* ipt_policy_flags */ | ||
9 | #define IPT_POLICY_MATCH_IN XT_POLICY_MATCH_IN | ||
10 | #define IPT_POLICY_MATCH_OUT XT_POLICY_MATCH_OUT | ||
11 | #define IPT_POLICY_MATCH_NONE XT_POLICY_MATCH_NONE | ||
12 | #define IPT_POLICY_MATCH_STRICT XT_POLICY_MATCH_STRICT | ||
13 | |||
14 | /* ipt_policy_modes */ | ||
15 | #define IPT_POLICY_MODE_TRANSPORT XT_POLICY_MODE_TRANSPORT | ||
16 | #define IPT_POLICY_MODE_TUNNEL XT_POLICY_MODE_TUNNEL | ||
17 | |||
18 | #define ipt_policy_spec xt_policy_spec | ||
19 | #define ipt_policy_addr xt_policy_addr | ||
20 | #define ipt_policy_elem xt_policy_elem | ||
21 | #define ipt_policy_info xt_policy_info | ||
22 | |||
23 | #endif /* _IPT_POLICY_H */ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_recent.h b/include/linux/netfilter_ipv4/ipt_recent.h deleted file mode 100644 index d636cca133c2..000000000000 --- a/include/linux/netfilter_ipv4/ipt_recent.h +++ /dev/null | |||
@@ -1,21 +0,0 @@ | |||
1 | #ifndef _IPT_RECENT_H | ||
2 | #define _IPT_RECENT_H | ||
3 | |||
4 | #include <linux/netfilter/xt_recent.h> | ||
5 | |||
6 | #define ipt_recent_info xt_recent_mtinfo | ||
7 | |||
8 | enum { | ||
9 | IPT_RECENT_CHECK = XT_RECENT_CHECK, | ||
10 | IPT_RECENT_SET = XT_RECENT_SET, | ||
11 | IPT_RECENT_UPDATE = XT_RECENT_UPDATE, | ||
12 | IPT_RECENT_REMOVE = XT_RECENT_REMOVE, | ||
13 | IPT_RECENT_TTL = XT_RECENT_TTL, | ||
14 | |||
15 | IPT_RECENT_SOURCE = XT_RECENT_SOURCE, | ||
16 | IPT_RECENT_DEST = XT_RECENT_DEST, | ||
17 | |||
18 | IPT_RECENT_NAME_LEN = XT_RECENT_NAME_LEN, | ||
19 | }; | ||
20 | |||
21 | #endif /*_IPT_RECENT_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_sctp.h b/include/linux/netfilter_ipv4/ipt_sctp.h deleted file mode 100644 index 80b3dbacd193..000000000000 --- a/include/linux/netfilter_ipv4/ipt_sctp.h +++ /dev/null | |||
@@ -1,105 +0,0 @@ | |||
1 | #ifndef _IPT_SCTP_H_ | ||
2 | #define _IPT_SCTP_H_ | ||
3 | |||
4 | #define IPT_SCTP_SRC_PORTS 0x01 | ||
5 | #define IPT_SCTP_DEST_PORTS 0x02 | ||
6 | #define IPT_SCTP_CHUNK_TYPES 0x04 | ||
7 | |||
8 | #define IPT_SCTP_VALID_FLAGS 0x07 | ||
9 | |||
10 | |||
11 | struct ipt_sctp_flag_info { | ||
12 | u_int8_t chunktype; | ||
13 | u_int8_t flag; | ||
14 | u_int8_t flag_mask; | ||
15 | }; | ||
16 | |||
17 | #define IPT_NUM_SCTP_FLAGS 4 | ||
18 | |||
19 | struct ipt_sctp_info { | ||
20 | u_int16_t dpts[2]; /* Min, Max */ | ||
21 | u_int16_t spts[2]; /* Min, Max */ | ||
22 | |||
23 | u_int32_t chunkmap[256 / sizeof (u_int32_t)]; /* Bit mask of chunks to be matched according to RFC 2960 */ | ||
24 | |||
25 | #define SCTP_CHUNK_MATCH_ANY 0x01 /* Match if any of the chunk types are present */ | ||
26 | #define SCTP_CHUNK_MATCH_ALL 0x02 /* Match if all of the chunk types are present */ | ||
27 | #define SCTP_CHUNK_MATCH_ONLY 0x04 /* Match if these are the only chunk types present */ | ||
28 | |||
29 | u_int32_t chunk_match_type; | ||
30 | struct ipt_sctp_flag_info flag_info[IPT_NUM_SCTP_FLAGS]; | ||
31 | int flag_count; | ||
32 | |||
33 | u_int32_t flags; | ||
34 | u_int32_t invflags; | ||
35 | }; | ||
36 | |||
37 | #define bytes(type) (sizeof(type) * 8) | ||
38 | |||
39 | #define SCTP_CHUNKMAP_SET(chunkmap, type) \ | ||
40 | do { \ | ||
41 | chunkmap[type / bytes(u_int32_t)] |= \ | ||
42 | 1 << (type % bytes(u_int32_t)); \ | ||
43 | } while (0) | ||
44 | |||
45 | #define SCTP_CHUNKMAP_CLEAR(chunkmap, type) \ | ||
46 | do { \ | ||
47 | chunkmap[type / bytes(u_int32_t)] &= \ | ||
48 | ~(1 << (type % bytes(u_int32_t))); \ | ||
49 | } while (0) | ||
50 | |||
51 | #define SCTP_CHUNKMAP_IS_SET(chunkmap, type) \ | ||
52 | ({ \ | ||
53 | (chunkmap[type / bytes (u_int32_t)] & \ | ||
54 | (1 << (type % bytes (u_int32_t)))) ? 1: 0; \ | ||
55 | }) | ||
56 | |||
57 | #define SCTP_CHUNKMAP_RESET(chunkmap) \ | ||
58 | do { \ | ||
59 | int i; \ | ||
60 | for (i = 0; i < ARRAY_SIZE(chunkmap); i++) \ | ||
61 | chunkmap[i] = 0; \ | ||
62 | } while (0) | ||
63 | |||
64 | #define SCTP_CHUNKMAP_SET_ALL(chunkmap) \ | ||
65 | do { \ | ||
66 | int i; \ | ||
67 | for (i = 0; i < ARRAY_SIZE(chunkmap); i++) \ | ||
68 | chunkmap[i] = ~0; \ | ||
69 | } while (0) | ||
70 | |||
71 | #define SCTP_CHUNKMAP_COPY(destmap, srcmap) \ | ||
72 | do { \ | ||
73 | int i; \ | ||
74 | for (i = 0; i < ARRAY_SIZE(chunkmap); i++) \ | ||
75 | destmap[i] = srcmap[i]; \ | ||
76 | } while (0) | ||
77 | |||
78 | #define SCTP_CHUNKMAP_IS_CLEAR(chunkmap) \ | ||
79 | ({ \ | ||
80 | int i; \ | ||
81 | int flag = 1; \ | ||
82 | for (i = 0; i < ARRAY_SIZE(chunkmap); i++) { \ | ||
83 | if (chunkmap[i]) { \ | ||
84 | flag = 0; \ | ||
85 | break; \ | ||
86 | } \ | ||
87 | } \ | ||
88 | flag; \ | ||
89 | }) | ||
90 | |||
91 | #define SCTP_CHUNKMAP_IS_ALL_SET(chunkmap) \ | ||
92 | ({ \ | ||
93 | int i; \ | ||
94 | int flag = 1; \ | ||
95 | for (i = 0; i < ARRAY_SIZE(chunkmap); i++) { \ | ||
96 | if (chunkmap[i] != ~0) { \ | ||
97 | flag = 0; \ | ||
98 | break; \ | ||
99 | } \ | ||
100 | } \ | ||
101 | flag; \ | ||
102 | }) | ||
103 | |||
104 | #endif /* _IPT_SCTP_H_ */ | ||
105 | |||
diff --git a/include/linux/netfilter_ipv4/ipt_state.h b/include/linux/netfilter_ipv4/ipt_state.h deleted file mode 100644 index a44a99cc28cc..000000000000 --- a/include/linux/netfilter_ipv4/ipt_state.h +++ /dev/null | |||
@@ -1,15 +0,0 @@ | |||
1 | #ifndef _IPT_STATE_H | ||
2 | #define _IPT_STATE_H | ||
3 | |||
4 | /* Backwards compatibility for old userspace */ | ||
5 | |||
6 | #include <linux/netfilter/xt_state.h> | ||
7 | |||
8 | #define IPT_STATE_BIT XT_STATE_BIT | ||
9 | #define IPT_STATE_INVALID XT_STATE_INVALID | ||
10 | |||
11 | #define IPT_STATE_UNTRACKED XT_STATE_UNTRACKED | ||
12 | |||
13 | #define ipt_state_info xt_state_info | ||
14 | |||
15 | #endif /*_IPT_STATE_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_string.h b/include/linux/netfilter_ipv4/ipt_string.h deleted file mode 100644 index c26de3059903..000000000000 --- a/include/linux/netfilter_ipv4/ipt_string.h +++ /dev/null | |||
@@ -1,10 +0,0 @@ | |||
1 | #ifndef _IPT_STRING_H | ||
2 | #define _IPT_STRING_H | ||
3 | |||
4 | #include <linux/netfilter/xt_string.h> | ||
5 | |||
6 | #define IPT_STRING_MAX_PATTERN_SIZE XT_STRING_MAX_PATTERN_SIZE | ||
7 | #define IPT_STRING_MAX_ALGO_NAME_SIZE XT_STRING_MAX_ALGO_NAME_SIZE | ||
8 | #define ipt_string_info xt_string_info | ||
9 | |||
10 | #endif /*_IPT_STRING_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_tcpmss.h b/include/linux/netfilter_ipv4/ipt_tcpmss.h deleted file mode 100644 index 18bbc8e8e009..000000000000 --- a/include/linux/netfilter_ipv4/ipt_tcpmss.h +++ /dev/null | |||
@@ -1,7 +0,0 @@ | |||
1 | #ifndef _IPT_TCPMSS_MATCH_H | ||
2 | #define _IPT_TCPMSS_MATCH_H | ||
3 | |||
4 | #include <linux/netfilter/xt_tcpmss.h> | ||
5 | #define ipt_tcpmss_match_info xt_tcpmss_match_info | ||
6 | |||
7 | #endif /*_IPT_TCPMSS_MATCH_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_tos.h b/include/linux/netfilter_ipv4/ipt_tos.h deleted file mode 100644 index a21f5df23c50..000000000000 --- a/include/linux/netfilter_ipv4/ipt_tos.h +++ /dev/null | |||
@@ -1,13 +0,0 @@ | |||
1 | #ifndef _IPT_TOS_H | ||
2 | #define _IPT_TOS_H | ||
3 | |||
4 | struct ipt_tos_info { | ||
5 | u_int8_t tos; | ||
6 | u_int8_t invert; | ||
7 | }; | ||
8 | |||
9 | #ifndef IPTOS_NORMALSVC | ||
10 | #define IPTOS_NORMALSVC 0 | ||
11 | #endif | ||
12 | |||
13 | #endif /*_IPT_TOS_H*/ | ||
diff --git a/include/linux/netfilter_ipv6/Kbuild b/include/linux/netfilter_ipv6/Kbuild index aca4bd1f6d7c..e864eaee9e5e 100644 --- a/include/linux/netfilter_ipv6/Kbuild +++ b/include/linux/netfilter_ipv6/Kbuild | |||
@@ -1,22 +1,12 @@ | |||
1 | header-y += ip6t_HL.h | 1 | header-y += ip6t_HL.h |
2 | header-y += ip6t_LOG.h | 2 | header-y += ip6t_LOG.h |
3 | header-y += ip6t_MARK.h | ||
4 | header-y += ip6t_REJECT.h | 3 | header-y += ip6t_REJECT.h |
5 | header-y += ip6t_ah.h | 4 | header-y += ip6t_ah.h |
6 | header-y += ip6t_esp.h | ||
7 | header-y += ip6t_frag.h | 5 | header-y += ip6t_frag.h |
8 | header-y += ip6t_hl.h | ||
9 | header-y += ip6t_ipv6header.h | 6 | header-y += ip6t_ipv6header.h |
10 | header-y += ip6t_length.h | 7 | header-y += ip6t_hl.h |
11 | header-y += ip6t_limit.h | ||
12 | header-y += ip6t_mac.h | ||
13 | header-y += ip6t_mark.h | ||
14 | header-y += ip6t_mh.h | 8 | header-y += ip6t_mh.h |
15 | header-y += ip6t_multiport.h | ||
16 | header-y += ip6t_opts.h | 9 | header-y += ip6t_opts.h |
17 | header-y += ip6t_owner.h | ||
18 | header-y += ip6t_physdev.h | ||
19 | header-y += ip6t_policy.h | ||
20 | header-y += ip6t_rt.h | 10 | header-y += ip6t_rt.h |
21 | 11 | ||
22 | unifdef-y += ip6_tables.h | 12 | unifdef-y += ip6_tables.h |
diff --git a/include/linux/netfilter_ipv6/ip6_tables.h b/include/linux/netfilter_ipv6/ip6_tables.h index 1089e33cf633..a64e1451ac38 100644 --- a/include/linux/netfilter_ipv6/ip6_tables.h +++ b/include/linux/netfilter_ipv6/ip6_tables.h | |||
@@ -306,7 +306,7 @@ ip6t_get_target(struct ip6t_entry *e) | |||
306 | extern void ip6t_init(void) __init; | 306 | extern void ip6t_init(void) __init; |
307 | 307 | ||
308 | extern struct xt_table *ip6t_register_table(struct net *net, | 308 | extern struct xt_table *ip6t_register_table(struct net *net, |
309 | struct xt_table *table, | 309 | const struct xt_table *table, |
310 | const struct ip6t_replace *repl); | 310 | const struct ip6t_replace *repl); |
311 | extern void ip6t_unregister_table(struct xt_table *table); | 311 | extern void ip6t_unregister_table(struct xt_table *table); |
312 | extern unsigned int ip6t_do_table(struct sk_buff *skb, | 312 | extern unsigned int ip6t_do_table(struct sk_buff *skb, |
diff --git a/include/linux/netfilter_ipv6/ip6t_MARK.h b/include/linux/netfilter_ipv6/ip6t_MARK.h deleted file mode 100644 index 7cf629a8ab92..000000000000 --- a/include/linux/netfilter_ipv6/ip6t_MARK.h +++ /dev/null | |||
@@ -1,9 +0,0 @@ | |||
1 | #ifndef _IP6T_MARK_H_target | ||
2 | #define _IP6T_MARK_H_target | ||
3 | |||
4 | /* Backwards compatibility for old userspace */ | ||
5 | #include <linux/netfilter/xt_MARK.h> | ||
6 | |||
7 | #define ip6t_mark_target_info xt_mark_target_info | ||
8 | |||
9 | #endif /*_IP6T_MARK_H_target*/ | ||
diff --git a/include/linux/netfilter_ipv6/ip6t_esp.h b/include/linux/netfilter_ipv6/ip6t_esp.h deleted file mode 100644 index f62eaf53c16c..000000000000 --- a/include/linux/netfilter_ipv6/ip6t_esp.h +++ /dev/null | |||
@@ -1,10 +0,0 @@ | |||
1 | #ifndef _IP6T_ESP_H | ||
2 | #define _IP6T_ESP_H | ||
3 | |||
4 | #include <linux/netfilter/xt_esp.h> | ||
5 | |||
6 | #define ip6t_esp xt_esp | ||
7 | #define IP6T_ESP_INV_SPI XT_ESP_INV_SPI | ||
8 | #define IP6T_ESP_INV_MASK XT_ESP_INV_MASK | ||
9 | |||
10 | #endif /*_IP6T_ESP_H*/ | ||
diff --git a/include/linux/netfilter_ipv6/ip6t_length.h b/include/linux/netfilter_ipv6/ip6t_length.h deleted file mode 100644 index 9e9689d03ed7..000000000000 --- a/include/linux/netfilter_ipv6/ip6t_length.h +++ /dev/null | |||
@@ -1,8 +0,0 @@ | |||
1 | #ifndef _IP6T_LENGTH_H | ||
2 | #define _IP6T_LENGTH_H | ||
3 | |||
4 | #include <linux/netfilter/xt_length.h> | ||
5 | #define ip6t_length_info xt_length_info | ||
6 | |||
7 | #endif /*_IP6T_LENGTH_H*/ | ||
8 | |||
diff --git a/include/linux/netfilter_ipv6/ip6t_limit.h b/include/linux/netfilter_ipv6/ip6t_limit.h deleted file mode 100644 index 487e5ea342c6..000000000000 --- a/include/linux/netfilter_ipv6/ip6t_limit.h +++ /dev/null | |||
@@ -1,8 +0,0 @@ | |||
1 | #ifndef _IP6T_RATE_H | ||
2 | #define _IP6T_RATE_H | ||
3 | |||
4 | #include <linux/netfilter/xt_limit.h> | ||
5 | #define IP6T_LIMIT_SCALE XT_LIMIT_SCALE | ||
6 | #define ip6t_rateinfo xt_rateinfo | ||
7 | |||
8 | #endif /*_IP6T_RATE_H*/ | ||
diff --git a/include/linux/netfilter_ipv6/ip6t_mac.h b/include/linux/netfilter_ipv6/ip6t_mac.h deleted file mode 100644 index ac58e83e9423..000000000000 --- a/include/linux/netfilter_ipv6/ip6t_mac.h +++ /dev/null | |||
@@ -1,7 +0,0 @@ | |||
1 | #ifndef _IP6T_MAC_H | ||
2 | #define _IP6T_MAC_H | ||
3 | |||
4 | #include <linux/netfilter/xt_mac.h> | ||
5 | #define ip6t_mac_info xt_mac_info | ||
6 | |||
7 | #endif /*_IP6T_MAC_H*/ | ||
diff --git a/include/linux/netfilter_ipv6/ip6t_mark.h b/include/linux/netfilter_ipv6/ip6t_mark.h deleted file mode 100644 index ff204951ddc3..000000000000 --- a/include/linux/netfilter_ipv6/ip6t_mark.h +++ /dev/null | |||
@@ -1,9 +0,0 @@ | |||
1 | #ifndef _IP6T_MARK_H | ||
2 | #define _IP6T_MARK_H | ||
3 | |||
4 | /* Backwards compatibility for old userspace */ | ||
5 | #include <linux/netfilter/xt_mark.h> | ||
6 | |||
7 | #define ip6t_mark_info xt_mark_info | ||
8 | |||
9 | #endif /*_IPT_MARK_H*/ | ||
diff --git a/include/linux/netfilter_ipv6/ip6t_multiport.h b/include/linux/netfilter_ipv6/ip6t_multiport.h deleted file mode 100644 index 042c92661cee..000000000000 --- a/include/linux/netfilter_ipv6/ip6t_multiport.h +++ /dev/null | |||
@@ -1,14 +0,0 @@ | |||
1 | #ifndef _IP6T_MULTIPORT_H | ||
2 | #define _IP6T_MULTIPORT_H | ||
3 | |||
4 | #include <linux/netfilter/xt_multiport.h> | ||
5 | |||
6 | #define IP6T_MULTIPORT_SOURCE XT_MULTIPORT_SOURCE | ||
7 | #define IP6T_MULTIPORT_DESTINATION XT_MULTIPORT_DESTINATION | ||
8 | #define IP6T_MULTIPORT_EITHER XT_MULTIPORT_EITHER | ||
9 | |||
10 | #define IP6T_MULTI_PORTS XT_MULTI_PORTS | ||
11 | |||
12 | #define ip6t_multiport xt_multiport | ||
13 | |||
14 | #endif /*_IP6T_MULTIPORT_H*/ | ||
diff --git a/include/linux/netfilter_ipv6/ip6t_owner.h b/include/linux/netfilter_ipv6/ip6t_owner.h deleted file mode 100644 index ec5cc7a38c42..000000000000 --- a/include/linux/netfilter_ipv6/ip6t_owner.h +++ /dev/null | |||
@@ -1,18 +0,0 @@ | |||
1 | #ifndef _IP6T_OWNER_H | ||
2 | #define _IP6T_OWNER_H | ||
3 | |||
4 | /* match and invert flags */ | ||
5 | #define IP6T_OWNER_UID 0x01 | ||
6 | #define IP6T_OWNER_GID 0x02 | ||
7 | #define IP6T_OWNER_PID 0x04 | ||
8 | #define IP6T_OWNER_SID 0x08 | ||
9 | |||
10 | struct ip6t_owner_info { | ||
11 | __kernel_uid32_t uid; | ||
12 | __kernel_gid32_t gid; | ||
13 | __kernel_pid_t pid; | ||
14 | __kernel_pid_t sid; | ||
15 | u_int8_t match, invert; /* flags */ | ||
16 | }; | ||
17 | |||
18 | #endif /*_IPT_OWNER_H*/ | ||
diff --git a/include/linux/netfilter_ipv6/ip6t_physdev.h b/include/linux/netfilter_ipv6/ip6t_physdev.h deleted file mode 100644 index c161c0a81b55..000000000000 --- a/include/linux/netfilter_ipv6/ip6t_physdev.h +++ /dev/null | |||
@@ -1,17 +0,0 @@ | |||
1 | #ifndef _IP6T_PHYSDEV_H | ||
2 | #define _IP6T_PHYSDEV_H | ||
3 | |||
4 | /* Backwards compatibility for old userspace */ | ||
5 | |||
6 | #include <linux/netfilter/xt_physdev.h> | ||
7 | |||
8 | #define IP6T_PHYSDEV_OP_IN XT_PHYSDEV_OP_IN | ||
9 | #define IP6T_PHYSDEV_OP_OUT XT_PHYSDEV_OP_OUT | ||
10 | #define IP6T_PHYSDEV_OP_BRIDGED XT_PHYSDEV_OP_BRIDGED | ||
11 | #define IP6T_PHYSDEV_OP_ISIN XT_PHYSDEV_OP_ISIN | ||
12 | #define IP6T_PHYSDEV_OP_ISOUT XT_PHYSDEV_OP_ISOUT | ||
13 | #define IP6T_PHYSDEV_OP_MASK XT_PHYSDEV_OP_MASK | ||
14 | |||
15 | #define ip6t_physdev_info xt_physdev_info | ||
16 | |||
17 | #endif /*_IP6T_PHYSDEV_H*/ | ||
diff --git a/include/linux/netfilter_ipv6/ip6t_policy.h b/include/linux/netfilter_ipv6/ip6t_policy.h deleted file mode 100644 index b1c449d7ec89..000000000000 --- a/include/linux/netfilter_ipv6/ip6t_policy.h +++ /dev/null | |||
@@ -1,23 +0,0 @@ | |||
1 | #ifndef _IP6T_POLICY_H | ||
2 | #define _IP6T_POLICY_H | ||
3 | |||
4 | #include <linux/netfilter/xt_policy.h> | ||
5 | |||
6 | #define IP6T_POLICY_MAX_ELEM XT_POLICY_MAX_ELEM | ||
7 | |||
8 | /* ip6t_policy_flags */ | ||
9 | #define IP6T_POLICY_MATCH_IN XT_POLICY_MATCH_IN | ||
10 | #define IP6T_POLICY_MATCH_OUT XT_POLICY_MATCH_OUT | ||
11 | #define IP6T_POLICY_MATCH_NONE XT_POLICY_MATCH_NONE | ||
12 | #define IP6T_POLICY_MATCH_STRICT XT_POLICY_MATCH_STRICT | ||
13 | |||
14 | /* ip6t_policy_modes */ | ||
15 | #define IP6T_POLICY_MODE_TRANSPORT XT_POLICY_MODE_TRANSPORT | ||
16 | #define IP6T_POLICY_MODE_TUNNEL XT_POLICY_MODE_TUNNEL | ||
17 | |||
18 | #define ip6t_policy_spec xt_policy_spec | ||
19 | #define ip6t_policy_addr xt_policy_addr | ||
20 | #define ip6t_policy_elem xt_policy_elem | ||
21 | #define ip6t_policy_info xt_policy_info | ||
22 | |||
23 | #endif /* _IP6T_POLICY_H */ | ||
diff --git a/include/linux/netlink.h b/include/linux/netlink.h index 5ba398e90304..080f6ba9e73a 100644 --- a/include/linux/netlink.h +++ b/include/linux/netlink.h | |||
@@ -176,12 +176,16 @@ struct netlink_skb_parms | |||
176 | #define NETLINK_CREDS(skb) (&NETLINK_CB((skb)).creds) | 176 | #define NETLINK_CREDS(skb) (&NETLINK_CB((skb)).creds) |
177 | 177 | ||
178 | 178 | ||
179 | extern void netlink_table_grab(void); | ||
180 | extern void netlink_table_ungrab(void); | ||
181 | |||
179 | extern struct sock *netlink_kernel_create(struct net *net, | 182 | extern struct sock *netlink_kernel_create(struct net *net, |
180 | int unit,unsigned int groups, | 183 | int unit,unsigned int groups, |
181 | void (*input)(struct sk_buff *skb), | 184 | void (*input)(struct sk_buff *skb), |
182 | struct mutex *cb_mutex, | 185 | struct mutex *cb_mutex, |
183 | struct module *module); | 186 | struct module *module); |
184 | extern void netlink_kernel_release(struct sock *sk); | 187 | extern void netlink_kernel_release(struct sock *sk); |
188 | extern int __netlink_change_ngroups(struct sock *sk, unsigned int groups); | ||
185 | extern int netlink_change_ngroups(struct sock *sk, unsigned int groups); | 189 | extern int netlink_change_ngroups(struct sock *sk, unsigned int groups); |
186 | extern void netlink_clear_multicast_users(struct sock *sk, unsigned int group); | 190 | extern void netlink_clear_multicast_users(struct sock *sk, unsigned int group); |
187 | extern void netlink_ack(struct sk_buff *in_skb, struct nlmsghdr *nlh, int err); | 191 | extern void netlink_ack(struct sk_buff *in_skb, struct nlmsghdr *nlh, int err); |
@@ -217,12 +221,13 @@ int netlink_sendskb(struct sock *sk, struct sk_buff *skb); | |||
217 | 221 | ||
218 | struct netlink_callback | 222 | struct netlink_callback |
219 | { | 223 | { |
220 | struct sk_buff *skb; | 224 | struct sk_buff *skb; |
221 | struct nlmsghdr *nlh; | 225 | const struct nlmsghdr *nlh; |
222 | int (*dump)(struct sk_buff * skb, struct netlink_callback *cb); | 226 | int (*dump)(struct sk_buff * skb, |
223 | int (*done)(struct netlink_callback *cb); | 227 | struct netlink_callback *cb); |
224 | int family; | 228 | int (*done)(struct netlink_callback *cb); |
225 | long args[6]; | 229 | int family; |
230 | long args[6]; | ||
226 | }; | 231 | }; |
227 | 232 | ||
228 | struct netlink_notify | 233 | struct netlink_notify |
@@ -258,7 +263,7 @@ __nlmsg_put(struct sk_buff *skb, u32 pid, u32 seq, int type, int len, int flags) | |||
258 | NLMSG_NEW(skb, pid, seq, type, len, 0) | 263 | NLMSG_NEW(skb, pid, seq, type, len, 0) |
259 | 264 | ||
260 | extern int netlink_dump_start(struct sock *ssk, struct sk_buff *skb, | 265 | extern int netlink_dump_start(struct sock *ssk, struct sk_buff *skb, |
261 | struct nlmsghdr *nlh, | 266 | const struct nlmsghdr *nlh, |
262 | int (*dump)(struct sk_buff *skb, struct netlink_callback*), | 267 | int (*dump)(struct sk_buff *skb, struct netlink_callback*), |
263 | int (*done)(struct netlink_callback*)); | 268 | int (*done)(struct netlink_callback*)); |
264 | 269 | ||
diff --git a/include/linux/nfs4.h b/include/linux/nfs4.h index bd2eba530667..c4c060208109 100644 --- a/include/linux/nfs4.h +++ b/include/linux/nfs4.h | |||
@@ -234,7 +234,7 @@ enum nfs_opnum4 { | |||
234 | Needs to be updated if more operations are defined in future.*/ | 234 | Needs to be updated if more operations are defined in future.*/ |
235 | 235 | ||
236 | #define FIRST_NFS4_OP OP_ACCESS | 236 | #define FIRST_NFS4_OP OP_ACCESS |
237 | #define LAST_NFS4_OP OP_RELEASE_LOCKOWNER | 237 | #define LAST_NFS4_OP OP_RECLAIM_COMPLETE |
238 | 238 | ||
239 | enum nfsstat4 { | 239 | enum nfsstat4 { |
240 | NFS4_OK = 0, | 240 | NFS4_OK = 0, |
@@ -472,6 +472,7 @@ enum lock_type4 { | |||
472 | 472 | ||
473 | #define NFSPROC4_NULL 0 | 473 | #define NFSPROC4_NULL 0 |
474 | #define NFSPROC4_COMPOUND 1 | 474 | #define NFSPROC4_COMPOUND 1 |
475 | #define NFS4_VERSION 4 | ||
475 | #define NFS4_MINOR_VERSION 0 | 476 | #define NFS4_MINOR_VERSION 0 |
476 | 477 | ||
477 | #if defined(CONFIG_NFS_V4_1) | 478 | #if defined(CONFIG_NFS_V4_1) |
diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h index fdffb413b192..f6b90240dd41 100644 --- a/include/linux/nfs_fs.h +++ b/include/linux/nfs_fs.h | |||
@@ -473,7 +473,6 @@ extern int nfs_writepages(struct address_space *, struct writeback_control *); | |||
473 | extern int nfs_flush_incompatible(struct file *file, struct page *page); | 473 | extern int nfs_flush_incompatible(struct file *file, struct page *page); |
474 | extern int nfs_updatepage(struct file *, struct page *, unsigned int, unsigned int); | 474 | extern int nfs_updatepage(struct file *, struct page *, unsigned int, unsigned int); |
475 | extern int nfs_writeback_done(struct rpc_task *, struct nfs_write_data *); | 475 | extern int nfs_writeback_done(struct rpc_task *, struct nfs_write_data *); |
476 | extern void nfs_writedata_release(void *); | ||
477 | 476 | ||
478 | /* | 477 | /* |
479 | * Try to write back everything synchronously (but check the | 478 | * Try to write back everything synchronously (but check the |
@@ -488,7 +487,6 @@ extern int nfs_wb_page_cancel(struct inode *inode, struct page* page); | |||
488 | extern int nfs_commit_inode(struct inode *, int); | 487 | extern int nfs_commit_inode(struct inode *, int); |
489 | extern struct nfs_write_data *nfs_commitdata_alloc(void); | 488 | extern struct nfs_write_data *nfs_commitdata_alloc(void); |
490 | extern void nfs_commit_free(struct nfs_write_data *wdata); | 489 | extern void nfs_commit_free(struct nfs_write_data *wdata); |
491 | extern void nfs_commitdata_release(void *wdata); | ||
492 | #else | 490 | #else |
493 | static inline int | 491 | static inline int |
494 | nfs_commit_inode(struct inode *inode, int how) | 492 | nfs_commit_inode(struct inode *inode, int how) |
@@ -507,6 +505,7 @@ nfs_have_writebacks(struct inode *inode) | |||
507 | * Allocate nfs_write_data structures | 505 | * Allocate nfs_write_data structures |
508 | */ | 506 | */ |
509 | extern struct nfs_write_data *nfs_writedata_alloc(unsigned int npages); | 507 | extern struct nfs_write_data *nfs_writedata_alloc(unsigned int npages); |
508 | extern void nfs_writedata_free(struct nfs_write_data *); | ||
510 | 509 | ||
511 | /* | 510 | /* |
512 | * linux/fs/nfs/read.c | 511 | * linux/fs/nfs/read.c |
@@ -515,7 +514,6 @@ extern int nfs_readpage(struct file *, struct page *); | |||
515 | extern int nfs_readpages(struct file *, struct address_space *, | 514 | extern int nfs_readpages(struct file *, struct address_space *, |
516 | struct list_head *, unsigned); | 515 | struct list_head *, unsigned); |
517 | extern int nfs_readpage_result(struct rpc_task *, struct nfs_read_data *); | 516 | extern int nfs_readpage_result(struct rpc_task *, struct nfs_read_data *); |
518 | extern void nfs_readdata_release(void *data); | ||
519 | extern int nfs_readpage_async(struct nfs_open_context *, struct inode *, | 517 | extern int nfs_readpage_async(struct nfs_open_context *, struct inode *, |
520 | struct page *); | 518 | struct page *); |
521 | 519 | ||
@@ -523,6 +521,7 @@ extern int nfs_readpage_async(struct nfs_open_context *, struct inode *, | |||
523 | * Allocate nfs_read_data structures | 521 | * Allocate nfs_read_data structures |
524 | */ | 522 | */ |
525 | extern struct nfs_read_data *nfs_readdata_alloc(unsigned int npages); | 523 | extern struct nfs_read_data *nfs_readdata_alloc(unsigned int npages); |
524 | extern void nfs_readdata_free(struct nfs_read_data *); | ||
526 | 525 | ||
527 | /* | 526 | /* |
528 | * linux/fs/nfs3proc.c | 527 | * linux/fs/nfs3proc.c |
diff --git a/include/linux/nfs_fs_sb.h b/include/linux/nfs_fs_sb.h index 19fe15d12042..320569eabe3b 100644 --- a/include/linux/nfs_fs_sb.h +++ b/include/linux/nfs_fs_sb.h | |||
@@ -167,6 +167,15 @@ struct nfs_server { | |||
167 | #define NFS_CAP_SYMLINKS (1U << 2) | 167 | #define NFS_CAP_SYMLINKS (1U << 2) |
168 | #define NFS_CAP_ACLS (1U << 3) | 168 | #define NFS_CAP_ACLS (1U << 3) |
169 | #define NFS_CAP_ATOMIC_OPEN (1U << 4) | 169 | #define NFS_CAP_ATOMIC_OPEN (1U << 4) |
170 | #define NFS_CAP_CHANGE_ATTR (1U << 5) | ||
171 | #define NFS_CAP_FILEID (1U << 6) | ||
172 | #define NFS_CAP_MODE (1U << 7) | ||
173 | #define NFS_CAP_NLINK (1U << 8) | ||
174 | #define NFS_CAP_OWNER (1U << 9) | ||
175 | #define NFS_CAP_OWNER_GROUP (1U << 10) | ||
176 | #define NFS_CAP_ATIME (1U << 11) | ||
177 | #define NFS_CAP_CTIME (1U << 12) | ||
178 | #define NFS_CAP_MTIME (1U << 13) | ||
170 | 179 | ||
171 | 180 | ||
172 | /* maximum number of slots to use */ | 181 | /* maximum number of slots to use */ |
diff --git a/include/linux/nfsd/nfsd.h b/include/linux/nfsd/nfsd.h index 2b49d676d0c9..03bbe9039104 100644 --- a/include/linux/nfsd/nfsd.h +++ b/include/linux/nfsd/nfsd.h | |||
@@ -56,6 +56,9 @@ extern struct svc_version nfsd_version2, nfsd_version3, | |||
56 | extern u32 nfsd_supported_minorversion; | 56 | extern u32 nfsd_supported_minorversion; |
57 | extern struct mutex nfsd_mutex; | 57 | extern struct mutex nfsd_mutex; |
58 | extern struct svc_serv *nfsd_serv; | 58 | extern struct svc_serv *nfsd_serv; |
59 | extern spinlock_t nfsd_drc_lock; | ||
60 | extern unsigned int nfsd_drc_max_mem; | ||
61 | extern unsigned int nfsd_drc_mem_used; | ||
59 | 62 | ||
60 | extern struct seq_operations nfs_exports_op; | 63 | extern struct seq_operations nfs_exports_op; |
61 | 64 | ||
@@ -163,7 +166,7 @@ extern int nfsd_max_blksize; | |||
163 | extern unsigned int max_delegations; | 166 | extern unsigned int max_delegations; |
164 | int nfs4_state_init(void); | 167 | int nfs4_state_init(void); |
165 | void nfsd4_free_slabs(void); | 168 | void nfsd4_free_slabs(void); |
166 | void nfs4_state_start(void); | 169 | int nfs4_state_start(void); |
167 | void nfs4_state_shutdown(void); | 170 | void nfs4_state_shutdown(void); |
168 | time_t nfs4_lease_time(void); | 171 | time_t nfs4_lease_time(void); |
169 | void nfs4_reset_lease(time_t leasetime); | 172 | void nfs4_reset_lease(time_t leasetime); |
@@ -171,7 +174,7 @@ int nfs4_reset_recoverydir(char *recdir); | |||
171 | #else | 174 | #else |
172 | static inline int nfs4_state_init(void) { return 0; } | 175 | static inline int nfs4_state_init(void) { return 0; } |
173 | static inline void nfsd4_free_slabs(void) { } | 176 | static inline void nfsd4_free_slabs(void) { } |
174 | static inline void nfs4_state_start(void) { } | 177 | static inline int nfs4_state_start(void) { return 0; } |
175 | static inline void nfs4_state_shutdown(void) { } | 178 | static inline void nfs4_state_shutdown(void) { } |
176 | static inline time_t nfs4_lease_time(void) { return 0; } | 179 | static inline time_t nfs4_lease_time(void) { return 0; } |
177 | static inline void nfs4_reset_lease(time_t leasetime) { } | 180 | static inline void nfs4_reset_lease(time_t leasetime) { } |
diff --git a/include/linux/nfsd/state.h b/include/linux/nfsd/state.h index 57ab2ed08459..b38d11324189 100644 --- a/include/linux/nfsd/state.h +++ b/include/linux/nfsd/state.h | |||
@@ -60,6 +60,12 @@ typedef struct { | |||
60 | #define si_stateownerid si_opaque.so_stateownerid | 60 | #define si_stateownerid si_opaque.so_stateownerid |
61 | #define si_fileid si_opaque.so_fileid | 61 | #define si_fileid si_opaque.so_fileid |
62 | 62 | ||
63 | struct nfsd4_cb_sequence { | ||
64 | /* args/res */ | ||
65 | u32 cbs_minorversion; | ||
66 | struct nfs4_client *cbs_clp; | ||
67 | }; | ||
68 | |||
63 | struct nfs4_delegation { | 69 | struct nfs4_delegation { |
64 | struct list_head dl_perfile; | 70 | struct list_head dl_perfile; |
65 | struct list_head dl_perclnt; | 71 | struct list_head dl_perclnt; |
@@ -81,38 +87,35 @@ struct nfs4_delegation { | |||
81 | /* client delegation callback info */ | 87 | /* client delegation callback info */ |
82 | struct nfs4_cb_conn { | 88 | struct nfs4_cb_conn { |
83 | /* SETCLIENTID info */ | 89 | /* SETCLIENTID info */ |
84 | u32 cb_addr; | 90 | struct sockaddr_storage cb_addr; |
85 | unsigned short cb_port; | 91 | size_t cb_addrlen; |
86 | u32 cb_prog; | 92 | u32 cb_prog; |
87 | u32 cb_minorversion; | 93 | u32 cb_minorversion; |
88 | u32 cb_ident; /* minorversion 0 only */ | 94 | u32 cb_ident; /* minorversion 0 only */ |
89 | /* RPC client info */ | 95 | /* RPC client info */ |
90 | atomic_t cb_set; /* successful CB_NULL call */ | 96 | atomic_t cb_set; /* successful CB_NULL call */ |
91 | struct rpc_clnt * cb_client; | 97 | struct rpc_clnt * cb_client; |
92 | struct rpc_cred * cb_cred; | ||
93 | }; | 98 | }; |
94 | 99 | ||
95 | /* Maximum number of slots per session. 128 is useful for long haul TCP */ | 100 | /* Maximum number of slots per session. 160 is useful for long haul TCP */ |
96 | #define NFSD_MAX_SLOTS_PER_SESSION 128 | 101 | #define NFSD_MAX_SLOTS_PER_SESSION 160 |
97 | /* Maximum number of pages per slot cache entry */ | ||
98 | #define NFSD_PAGES_PER_SLOT 1 | ||
99 | /* Maximum number of operations per session compound */ | 102 | /* Maximum number of operations per session compound */ |
100 | #define NFSD_MAX_OPS_PER_COMPOUND 16 | 103 | #define NFSD_MAX_OPS_PER_COMPOUND 16 |
101 | 104 | /* Maximum session per slot cache size */ | |
102 | struct nfsd4_cache_entry { | 105 | #define NFSD_SLOT_CACHE_SIZE 1024 |
103 | __be32 ce_status; | 106 | /* Maximum number of NFSD_SLOT_CACHE_SIZE slots per session */ |
104 | struct kvec ce_datav; /* encoded NFSv4.1 data in rq_res.head[0] */ | 107 | #define NFSD_CACHE_SIZE_SLOTS_PER_SESSION 32 |
105 | struct page *ce_respages[NFSD_PAGES_PER_SLOT + 1]; | 108 | #define NFSD_MAX_MEM_PER_SESSION \ |
106 | int ce_cachethis; | 109 | (NFSD_CACHE_SIZE_SLOTS_PER_SESSION * NFSD_SLOT_CACHE_SIZE) |
107 | short ce_resused; | ||
108 | int ce_opcnt; | ||
109 | int ce_rpchdrlen; | ||
110 | }; | ||
111 | 110 | ||
112 | struct nfsd4_slot { | 111 | struct nfsd4_slot { |
113 | bool sl_inuse; | 112 | bool sl_inuse; |
114 | u32 sl_seqid; | 113 | bool sl_cachethis; |
115 | struct nfsd4_cache_entry sl_cache_entry; | 114 | u16 sl_opcnt; |
115 | u32 sl_seqid; | ||
116 | __be32 sl_status; | ||
117 | u32 sl_datalen; | ||
118 | char sl_data[]; | ||
116 | }; | 119 | }; |
117 | 120 | ||
118 | struct nfsd4_channel_attrs { | 121 | struct nfsd4_channel_attrs { |
@@ -126,6 +129,25 @@ struct nfsd4_channel_attrs { | |||
126 | u32 rdma_attrs; | 129 | u32 rdma_attrs; |
127 | }; | 130 | }; |
128 | 131 | ||
132 | struct nfsd4_create_session { | ||
133 | clientid_t clientid; | ||
134 | struct nfs4_sessionid sessionid; | ||
135 | u32 seqid; | ||
136 | u32 flags; | ||
137 | struct nfsd4_channel_attrs fore_channel; | ||
138 | struct nfsd4_channel_attrs back_channel; | ||
139 | u32 callback_prog; | ||
140 | u32 uid; | ||
141 | u32 gid; | ||
142 | }; | ||
143 | |||
144 | /* The single slot clientid cache structure */ | ||
145 | struct nfsd4_clid_slot { | ||
146 | u32 sl_seqid; | ||
147 | __be32 sl_status; | ||
148 | struct nfsd4_create_session sl_cr_ses; | ||
149 | }; | ||
150 | |||
129 | struct nfsd4_session { | 151 | struct nfsd4_session { |
130 | struct kref se_ref; | 152 | struct kref se_ref; |
131 | struct list_head se_hash; /* hash by sessionid */ | 153 | struct list_head se_hash; /* hash by sessionid */ |
@@ -135,7 +157,7 @@ struct nfsd4_session { | |||
135 | struct nfs4_sessionid se_sessionid; | 157 | struct nfs4_sessionid se_sessionid; |
136 | struct nfsd4_channel_attrs se_fchannel; | 158 | struct nfsd4_channel_attrs se_fchannel; |
137 | struct nfsd4_channel_attrs se_bchannel; | 159 | struct nfsd4_channel_attrs se_bchannel; |
138 | struct nfsd4_slot se_slots[]; /* forward channel slots */ | 160 | struct nfsd4_slot *se_slots[]; /* forward channel slots */ |
139 | }; | 161 | }; |
140 | 162 | ||
141 | static inline void | 163 | static inline void |
@@ -180,7 +202,7 @@ struct nfs4_client { | |||
180 | char cl_recdir[HEXDIR_LEN]; /* recovery dir */ | 202 | char cl_recdir[HEXDIR_LEN]; /* recovery dir */ |
181 | nfs4_verifier cl_verifier; /* generated by client */ | 203 | nfs4_verifier cl_verifier; /* generated by client */ |
182 | time_t cl_time; /* time of last lease renewal */ | 204 | time_t cl_time; /* time of last lease renewal */ |
183 | __be32 cl_addr; /* client ipaddress */ | 205 | struct sockaddr_storage cl_addr; /* client ipaddress */ |
184 | u32 cl_flavor; /* setclientid pseudoflavor */ | 206 | u32 cl_flavor; /* setclientid pseudoflavor */ |
185 | char *cl_principal; /* setclientid principal name */ | 207 | char *cl_principal; /* setclientid principal name */ |
186 | struct svc_cred cl_cred; /* setclientid principal */ | 208 | struct svc_cred cl_cred; /* setclientid principal */ |
@@ -192,9 +214,17 @@ struct nfs4_client { | |||
192 | 214 | ||
193 | /* for nfs41 */ | 215 | /* for nfs41 */ |
194 | struct list_head cl_sessions; | 216 | struct list_head cl_sessions; |
195 | struct nfsd4_slot cl_slot; /* create_session slot */ | 217 | struct nfsd4_clid_slot cl_cs_slot; /* create_session slot */ |
196 | u32 cl_exchange_flags; | 218 | u32 cl_exchange_flags; |
197 | struct nfs4_sessionid cl_sessionid; | 219 | struct nfs4_sessionid cl_sessionid; |
220 | |||
221 | /* for nfs41 callbacks */ | ||
222 | /* We currently support a single back channel with a single slot */ | ||
223 | unsigned long cl_cb_slot_busy; | ||
224 | u32 cl_cb_seq_nr; | ||
225 | struct svc_xprt *cl_cb_xprt; /* 4.1 callback transport */ | ||
226 | struct rpc_wait_queue cl_cb_waitq; /* backchannel callers may */ | ||
227 | /* wait here for slots */ | ||
198 | }; | 228 | }; |
199 | 229 | ||
200 | /* struct nfs4_client_reset | 230 | /* struct nfs4_client_reset |
@@ -345,6 +375,7 @@ extern int nfs4_in_grace(void); | |||
345 | extern __be32 nfs4_check_open_reclaim(clientid_t *clid); | 375 | extern __be32 nfs4_check_open_reclaim(clientid_t *clid); |
346 | extern void put_nfs4_client(struct nfs4_client *clp); | 376 | extern void put_nfs4_client(struct nfs4_client *clp); |
347 | extern void nfs4_free_stateowner(struct kref *kref); | 377 | extern void nfs4_free_stateowner(struct kref *kref); |
378 | extern int set_callback_cred(void); | ||
348 | extern void nfsd4_probe_callback(struct nfs4_client *clp); | 379 | extern void nfsd4_probe_callback(struct nfs4_client *clp); |
349 | extern void nfsd4_cb_recall(struct nfs4_delegation *dp); | 380 | extern void nfsd4_cb_recall(struct nfs4_delegation *dp); |
350 | extern void nfs4_put_delegation(struct nfs4_delegation *dp); | 381 | extern void nfs4_put_delegation(struct nfs4_delegation *dp); |
diff --git a/include/linux/nfsd/xdr4.h b/include/linux/nfsd/xdr4.h index 2bacf7535069..73164c2b3d29 100644 --- a/include/linux/nfsd/xdr4.h +++ b/include/linux/nfsd/xdr4.h | |||
@@ -51,7 +51,7 @@ struct nfsd4_compound_state { | |||
51 | /* For sessions DRC */ | 51 | /* For sessions DRC */ |
52 | struct nfsd4_session *session; | 52 | struct nfsd4_session *session; |
53 | struct nfsd4_slot *slot; | 53 | struct nfsd4_slot *slot; |
54 | __be32 *statp; | 54 | __be32 *datap; |
55 | size_t iovlen; | 55 | size_t iovlen; |
56 | u32 minorversion; | 56 | u32 minorversion; |
57 | u32 status; | 57 | u32 status; |
@@ -366,18 +366,6 @@ struct nfsd4_exchange_id { | |||
366 | int spa_how; | 366 | int spa_how; |
367 | }; | 367 | }; |
368 | 368 | ||
369 | struct nfsd4_create_session { | ||
370 | clientid_t clientid; | ||
371 | struct nfs4_sessionid sessionid; | ||
372 | u32 seqid; | ||
373 | u32 flags; | ||
374 | struct nfsd4_channel_attrs fore_channel; | ||
375 | struct nfsd4_channel_attrs back_channel; | ||
376 | u32 callback_prog; | ||
377 | u32 uid; | ||
378 | u32 gid; | ||
379 | }; | ||
380 | |||
381 | struct nfsd4_sequence { | 369 | struct nfsd4_sequence { |
382 | struct nfs4_sessionid sessionid; /* request/response */ | 370 | struct nfs4_sessionid sessionid; /* request/response */ |
383 | u32 seqid; /* request/response */ | 371 | u32 seqid; /* request/response */ |
@@ -479,13 +467,12 @@ struct nfsd4_compoundres { | |||
479 | static inline bool nfsd4_is_solo_sequence(struct nfsd4_compoundres *resp) | 467 | static inline bool nfsd4_is_solo_sequence(struct nfsd4_compoundres *resp) |
480 | { | 468 | { |
481 | struct nfsd4_compoundargs *args = resp->rqstp->rq_argp; | 469 | struct nfsd4_compoundargs *args = resp->rqstp->rq_argp; |
482 | return args->opcnt == 1; | 470 | return resp->opcnt == 1 && args->ops[0].opnum == OP_SEQUENCE; |
483 | } | 471 | } |
484 | 472 | ||
485 | static inline bool nfsd4_not_cached(struct nfsd4_compoundres *resp) | 473 | static inline bool nfsd4_not_cached(struct nfsd4_compoundres *resp) |
486 | { | 474 | { |
487 | return !resp->cstate.slot->sl_cache_entry.ce_cachethis || | 475 | return !resp->cstate.slot->sl_cachethis || nfsd4_is_solo_sequence(resp); |
488 | nfsd4_is_solo_sequence(resp); | ||
489 | } | 476 | } |
490 | 477 | ||
491 | #define NFS4_SVC_XDRSIZE sizeof(struct nfsd4_compoundargs) | 478 | #define NFS4_SVC_XDRSIZE sizeof(struct nfsd4_compoundargs) |
diff --git a/include/linux/nl80211.h b/include/linux/nl80211.h index dbea93b694e5..a8d71ed43a0e 100644 --- a/include/linux/nl80211.h +++ b/include/linux/nl80211.h | |||
@@ -242,6 +242,29 @@ | |||
242 | * @NL80211_CMD_LEAVE_IBSS: Leave the IBSS -- no special arguments, the IBSS is | 242 | * @NL80211_CMD_LEAVE_IBSS: Leave the IBSS -- no special arguments, the IBSS is |
243 | * determined by the network interface. | 243 | * determined by the network interface. |
244 | * | 244 | * |
245 | * @NL80211_CMD_TESTMODE: testmode command, takes a wiphy (or ifindex) attribute | ||
246 | * to identify the device, and the TESTDATA blob attribute to pass through | ||
247 | * to the driver. | ||
248 | * | ||
249 | * @NL80211_CMD_CONNECT: connection request and notification; this command | ||
250 | * requests to connect to a specified network but without separating | ||
251 | * auth and assoc steps. For this, you need to specify the SSID in a | ||
252 | * %NL80211_ATTR_SSID attribute, and can optionally specify the association | ||
253 | * IEs in %NL80211_ATTR_IE, %NL80211_ATTR_AUTH_TYPE, %NL80211_ATTR_MAC, | ||
254 | * %NL80211_ATTR_WIPHY_FREQ and %NL80211_ATTR_CONTROL_PORT. | ||
255 | * It is also sent as an event, with the BSSID and response IEs when the | ||
256 | * connection is established or failed to be established. This can be | ||
257 | * determined by the STATUS_CODE attribute. | ||
258 | * @NL80211_CMD_ROAM: request that the card roam (currently not implemented), | ||
259 | * sent as an event when the card/driver roamed by itself. | ||
260 | * @NL80211_CMD_DISCONNECT: drop a given connection; also used to notify | ||
261 | * userspace that a connection was dropped by the AP or due to other | ||
262 | * reasons, for this the %NL80211_ATTR_DISCONNECTED_BY_AP and | ||
263 | * %NL80211_ATTR_REASON_CODE attributes are used. | ||
264 | * | ||
265 | * @NL80211_CMD_SET_WIPHY_NETNS: Set a wiphy's netns. Note that all devices | ||
266 | * associated with this wiphy must be down and will follow. | ||
267 | * | ||
245 | * @NL80211_CMD_MAX: highest used command number | 268 | * @NL80211_CMD_MAX: highest used command number |
246 | * @__NL80211_CMD_AFTER_LAST: internal use | 269 | * @__NL80211_CMD_AFTER_LAST: internal use |
247 | */ | 270 | */ |
@@ -310,6 +333,14 @@ enum nl80211_commands { | |||
310 | NL80211_CMD_JOIN_IBSS, | 333 | NL80211_CMD_JOIN_IBSS, |
311 | NL80211_CMD_LEAVE_IBSS, | 334 | NL80211_CMD_LEAVE_IBSS, |
312 | 335 | ||
336 | NL80211_CMD_TESTMODE, | ||
337 | |||
338 | NL80211_CMD_CONNECT, | ||
339 | NL80211_CMD_ROAM, | ||
340 | NL80211_CMD_DISCONNECT, | ||
341 | |||
342 | NL80211_CMD_SET_WIPHY_NETNS, | ||
343 | |||
313 | /* add new commands above here */ | 344 | /* add new commands above here */ |
314 | 345 | ||
315 | /* used to define NL80211_CMD_MAX below */ | 346 | /* used to define NL80211_CMD_MAX below */ |
@@ -449,10 +480,6 @@ enum nl80211_commands { | |||
449 | * @NL80211_ATTR_SCAN_FREQUENCIES: nested attribute with frequencies (in MHz) | 480 | * @NL80211_ATTR_SCAN_FREQUENCIES: nested attribute with frequencies (in MHz) |
450 | * @NL80211_ATTR_SCAN_SSIDS: nested attribute with SSIDs, leave out for passive | 481 | * @NL80211_ATTR_SCAN_SSIDS: nested attribute with SSIDs, leave out for passive |
451 | * scanning and include a zero-length SSID (wildcard) for wildcard scan | 482 | * scanning and include a zero-length SSID (wildcard) for wildcard scan |
452 | * @NL80211_ATTR_SCAN_GENERATION: the scan generation increases whenever the | ||
453 | * scan result list changes (BSS expired or added) so that applications | ||
454 | * can verify that they got a single, consistent snapshot (when all dump | ||
455 | * messages carried the same generation number) | ||
456 | * @NL80211_ATTR_BSS: scan result BSS | 483 | * @NL80211_ATTR_BSS: scan result BSS |
457 | * | 484 | * |
458 | * @NL80211_ATTR_REG_INITIATOR: indicates who requested the regulatory domain | 485 | * @NL80211_ATTR_REG_INITIATOR: indicates who requested the regulatory domain |
@@ -511,6 +538,52 @@ enum nl80211_commands { | |||
511 | * authorized by user space. Otherwise, port is marked authorized by | 538 | * authorized by user space. Otherwise, port is marked authorized by |
512 | * default in station mode. | 539 | * default in station mode. |
513 | * | 540 | * |
541 | * @NL80211_ATTR_TESTDATA: Testmode data blob, passed through to the driver. | ||
542 | * We recommend using nested, driver-specific attributes within this. | ||
543 | * | ||
544 | * @NL80211_ATTR_DISCONNECTED_BY_AP: A flag indicating that the DISCONNECT | ||
545 | * event was due to the AP disconnecting the station, and not due to | ||
546 | * a local disconnect request. | ||
547 | * @NL80211_ATTR_STATUS_CODE: StatusCode for the %NL80211_CMD_CONNECT | ||
548 | * event (u16) | ||
549 | * @NL80211_ATTR_PRIVACY: Flag attribute, used with connect(), indicating | ||
550 | * that protected APs should be used. | ||
551 | * | ||
552 | * @NL80211_ATTR_CIPHERS_PAIRWISE: Used with CONNECT and ASSOCIATE to | ||
553 | * indicate which unicast key ciphers will be used with the connection | ||
554 | * (an array of u32). | ||
555 | * @NL80211_ATTR_CIPHER_GROUP: Used with CONNECT and ASSOCIATE to indicate | ||
556 | * which group key cipher will be used with the connection (a u32). | ||
557 | * @NL80211_ATTR_WPA_VERSIONS: Used with CONNECT and ASSOCIATE to indicate | ||
558 | * which WPA version(s) the AP we want to associate with is using | ||
559 | * (a u32 with flags from &enum nl80211_wpa_versions). | ||
560 | * @NL80211_ATTR_AKM_SUITES: Used with CONNECT and ASSOCIATE to indicate | ||
561 | * which key management algorithm(s) to use (an array of u32). | ||
562 | * | ||
563 | * @NL80211_ATTR_REQ_IE: (Re)association request information elements as | ||
564 | * sent out by the card, for ROAM and successful CONNECT events. | ||
565 | * @NL80211_ATTR_RESP_IE: (Re)association response information elements as | ||
566 | * sent by peer, for ROAM and successful CONNECT events. | ||
567 | * | ||
568 | * @NL80211_ATTR_PREV_BSSID: previous BSSID, to be used by in ASSOCIATE | ||
569 | * commands to specify using a reassociate frame | ||
570 | * | ||
571 | * @NL80211_ATTR_KEY: key information in a nested attribute with | ||
572 | * %NL80211_KEY_* sub-attributes | ||
573 | * @NL80211_ATTR_KEYS: array of keys for static WEP keys for connect() | ||
574 | * and join_ibss(), key information is in a nested attribute each | ||
575 | * with %NL80211_KEY_* sub-attributes | ||
576 | * | ||
577 | * @NL80211_ATTR_PID: Process ID of a network namespace. | ||
578 | * | ||
579 | * @NL80211_ATTR_GENERATION: Used to indicate consistent snapshots for | ||
580 | * dumps. This number increases whenever the object list being | ||
581 | * dumped changes, and as such userspace can verify that it has | ||
582 | * obtained a complete and consistent snapshot by verifying that | ||
583 | * all dump messages contain the same generation number. If it | ||
584 | * changed then the list changed and the dump should be repeated | ||
585 | * completely from scratch. | ||
586 | * | ||
514 | * @NL80211_ATTR_MAX: highest attribute number currently defined | 587 | * @NL80211_ATTR_MAX: highest attribute number currently defined |
515 | * @__NL80211_ATTR_AFTER_LAST: internal use | 588 | * @__NL80211_ATTR_AFTER_LAST: internal use |
516 | */ | 589 | */ |
@@ -582,7 +655,7 @@ enum nl80211_attrs { | |||
582 | 655 | ||
583 | NL80211_ATTR_SCAN_FREQUENCIES, | 656 | NL80211_ATTR_SCAN_FREQUENCIES, |
584 | NL80211_ATTR_SCAN_SSIDS, | 657 | NL80211_ATTR_SCAN_SSIDS, |
585 | NL80211_ATTR_SCAN_GENERATION, | 658 | NL80211_ATTR_GENERATION, /* replaces old SCAN_GENERATION */ |
586 | NL80211_ATTR_BSS, | 659 | NL80211_ATTR_BSS, |
587 | 660 | ||
588 | NL80211_ATTR_REG_INITIATOR, | 661 | NL80211_ATTR_REG_INITIATOR, |
@@ -619,16 +692,42 @@ enum nl80211_attrs { | |||
619 | 692 | ||
620 | NL80211_ATTR_CONTROL_PORT, | 693 | NL80211_ATTR_CONTROL_PORT, |
621 | 694 | ||
695 | NL80211_ATTR_TESTDATA, | ||
696 | |||
697 | NL80211_ATTR_PRIVACY, | ||
698 | |||
699 | NL80211_ATTR_DISCONNECTED_BY_AP, | ||
700 | NL80211_ATTR_STATUS_CODE, | ||
701 | |||
702 | NL80211_ATTR_CIPHER_SUITES_PAIRWISE, | ||
703 | NL80211_ATTR_CIPHER_SUITE_GROUP, | ||
704 | NL80211_ATTR_WPA_VERSIONS, | ||
705 | NL80211_ATTR_AKM_SUITES, | ||
706 | |||
707 | NL80211_ATTR_REQ_IE, | ||
708 | NL80211_ATTR_RESP_IE, | ||
709 | |||
710 | NL80211_ATTR_PREV_BSSID, | ||
711 | |||
712 | NL80211_ATTR_KEY, | ||
713 | NL80211_ATTR_KEYS, | ||
714 | |||
715 | NL80211_ATTR_PID, | ||
716 | |||
622 | /* add attributes here, update the policy in nl80211.c */ | 717 | /* add attributes here, update the policy in nl80211.c */ |
623 | 718 | ||
624 | __NL80211_ATTR_AFTER_LAST, | 719 | __NL80211_ATTR_AFTER_LAST, |
625 | NL80211_ATTR_MAX = __NL80211_ATTR_AFTER_LAST - 1 | 720 | NL80211_ATTR_MAX = __NL80211_ATTR_AFTER_LAST - 1 |
626 | }; | 721 | }; |
627 | 722 | ||
723 | /* source-level API compatibility */ | ||
724 | #define NL80211_ATTR_SCAN_GENERATION NL80211_ATTR_GENERATION | ||
725 | |||
628 | /* | 726 | /* |
629 | * Allow user space programs to use #ifdef on new attributes by defining them | 727 | * Allow user space programs to use #ifdef on new attributes by defining them |
630 | * here | 728 | * here |
631 | */ | 729 | */ |
730 | #define NL80211_CMD_CONNECT NL80211_CMD_CONNECT | ||
632 | #define NL80211_ATTR_HT_CAPABILITY NL80211_ATTR_HT_CAPABILITY | 731 | #define NL80211_ATTR_HT_CAPABILITY NL80211_ATTR_HT_CAPABILITY |
633 | #define NL80211_ATTR_BSS_BASIC_RATES NL80211_ATTR_BSS_BASIC_RATES | 732 | #define NL80211_ATTR_BSS_BASIC_RATES NL80211_ATTR_BSS_BASIC_RATES |
634 | #define NL80211_ATTR_WIPHY_TXQ_PARAMS NL80211_ATTR_WIPHY_TXQ_PARAMS | 733 | #define NL80211_ATTR_WIPHY_TXQ_PARAMS NL80211_ATTR_WIPHY_TXQ_PARAMS |
@@ -642,6 +741,12 @@ enum nl80211_attrs { | |||
642 | #define NL80211_ATTR_SSID NL80211_ATTR_SSID | 741 | #define NL80211_ATTR_SSID NL80211_ATTR_SSID |
643 | #define NL80211_ATTR_AUTH_TYPE NL80211_ATTR_AUTH_TYPE | 742 | #define NL80211_ATTR_AUTH_TYPE NL80211_ATTR_AUTH_TYPE |
644 | #define NL80211_ATTR_REASON_CODE NL80211_ATTR_REASON_CODE | 743 | #define NL80211_ATTR_REASON_CODE NL80211_ATTR_REASON_CODE |
744 | #define NL80211_ATTR_CIPHER_SUITES_PAIRWISE NL80211_ATTR_CIPHER_SUITES_PAIRWISE | ||
745 | #define NL80211_ATTR_CIPHER_SUITE_GROUP NL80211_ATTR_CIPHER_SUITE_GROUP | ||
746 | #define NL80211_ATTR_WPA_VERSIONS NL80211_ATTR_WPA_VERSIONS | ||
747 | #define NL80211_ATTR_AKM_SUITES NL80211_ATTR_AKM_SUITES | ||
748 | #define NL80211_ATTR_KEY NL80211_ATTR_KEY | ||
749 | #define NL80211_ATTR_KEYS NL80211_ATTR_KEYS | ||
645 | 750 | ||
646 | #define NL80211_MAX_SUPP_RATES 32 | 751 | #define NL80211_MAX_SUPP_RATES 32 |
647 | #define NL80211_MAX_SUPP_REG_RULES 32 | 752 | #define NL80211_MAX_SUPP_REG_RULES 32 |
@@ -650,6 +755,9 @@ enum nl80211_attrs { | |||
650 | #define NL80211_TKIP_DATA_OFFSET_RX_MIC_KEY 24 | 755 | #define NL80211_TKIP_DATA_OFFSET_RX_MIC_KEY 24 |
651 | #define NL80211_HT_CAPABILITY_LEN 26 | 756 | #define NL80211_HT_CAPABILITY_LEN 26 |
652 | 757 | ||
758 | #define NL80211_MAX_NR_CIPHER_SUITES 5 | ||
759 | #define NL80211_MAX_NR_AKM_SUITES 2 | ||
760 | |||
653 | /** | 761 | /** |
654 | * enum nl80211_iftype - (virtual) interface types | 762 | * enum nl80211_iftype - (virtual) interface types |
655 | * | 763 | * |
@@ -1168,6 +1276,7 @@ enum nl80211_channel_type { | |||
1168 | * in mBm (100 * dBm) (s32) | 1276 | * in mBm (100 * dBm) (s32) |
1169 | * @NL80211_BSS_SIGNAL_UNSPEC: signal strength of the probe response/beacon | 1277 | * @NL80211_BSS_SIGNAL_UNSPEC: signal strength of the probe response/beacon |
1170 | * in unspecified units, scaled to 0..100 (u8) | 1278 | * in unspecified units, scaled to 0..100 (u8) |
1279 | * @NL80211_BSS_STATUS: status, if this BSS is "used" | ||
1171 | * @__NL80211_BSS_AFTER_LAST: internal | 1280 | * @__NL80211_BSS_AFTER_LAST: internal |
1172 | * @NL80211_BSS_MAX: highest BSS attribute | 1281 | * @NL80211_BSS_MAX: highest BSS attribute |
1173 | */ | 1282 | */ |
@@ -1181,6 +1290,7 @@ enum nl80211_bss { | |||
1181 | NL80211_BSS_INFORMATION_ELEMENTS, | 1290 | NL80211_BSS_INFORMATION_ELEMENTS, |
1182 | NL80211_BSS_SIGNAL_MBM, | 1291 | NL80211_BSS_SIGNAL_MBM, |
1183 | NL80211_BSS_SIGNAL_UNSPEC, | 1292 | NL80211_BSS_SIGNAL_UNSPEC, |
1293 | NL80211_BSS_STATUS, | ||
1184 | 1294 | ||
1185 | /* keep last */ | 1295 | /* keep last */ |
1186 | __NL80211_BSS_AFTER_LAST, | 1296 | __NL80211_BSS_AFTER_LAST, |
@@ -1188,18 +1298,37 @@ enum nl80211_bss { | |||
1188 | }; | 1298 | }; |
1189 | 1299 | ||
1190 | /** | 1300 | /** |
1301 | * enum nl80211_bss_status - BSS "status" | ||
1302 | */ | ||
1303 | enum nl80211_bss_status { | ||
1304 | NL80211_BSS_STATUS_AUTHENTICATED, | ||
1305 | NL80211_BSS_STATUS_ASSOCIATED, | ||
1306 | NL80211_BSS_STATUS_IBSS_JOINED, | ||
1307 | }; | ||
1308 | |||
1309 | /** | ||
1191 | * enum nl80211_auth_type - AuthenticationType | 1310 | * enum nl80211_auth_type - AuthenticationType |
1192 | * | 1311 | * |
1193 | * @NL80211_AUTHTYPE_OPEN_SYSTEM: Open System authentication | 1312 | * @NL80211_AUTHTYPE_OPEN_SYSTEM: Open System authentication |
1194 | * @NL80211_AUTHTYPE_SHARED_KEY: Shared Key authentication (WEP only) | 1313 | * @NL80211_AUTHTYPE_SHARED_KEY: Shared Key authentication (WEP only) |
1195 | * @NL80211_AUTHTYPE_FT: Fast BSS Transition (IEEE 802.11r) | 1314 | * @NL80211_AUTHTYPE_FT: Fast BSS Transition (IEEE 802.11r) |
1196 | * @NL80211_AUTHTYPE_NETWORK_EAP: Network EAP (some Cisco APs and mainly LEAP) | 1315 | * @NL80211_AUTHTYPE_NETWORK_EAP: Network EAP (some Cisco APs and mainly LEAP) |
1316 | * @__NL80211_AUTHTYPE_NUM: internal | ||
1317 | * @NL80211_AUTHTYPE_MAX: maximum valid auth algorithm | ||
1318 | * @NL80211_AUTHTYPE_AUTOMATIC: determine automatically (if necessary by | ||
1319 | * trying multiple times); this is invalid in netlink -- leave out | ||
1320 | * the attribute for this on CONNECT commands. | ||
1197 | */ | 1321 | */ |
1198 | enum nl80211_auth_type { | 1322 | enum nl80211_auth_type { |
1199 | NL80211_AUTHTYPE_OPEN_SYSTEM, | 1323 | NL80211_AUTHTYPE_OPEN_SYSTEM, |
1200 | NL80211_AUTHTYPE_SHARED_KEY, | 1324 | NL80211_AUTHTYPE_SHARED_KEY, |
1201 | NL80211_AUTHTYPE_FT, | 1325 | NL80211_AUTHTYPE_FT, |
1202 | NL80211_AUTHTYPE_NETWORK_EAP, | 1326 | NL80211_AUTHTYPE_NETWORK_EAP, |
1327 | |||
1328 | /* keep last */ | ||
1329 | __NL80211_AUTHTYPE_NUM, | ||
1330 | NL80211_AUTHTYPE_MAX = __NL80211_AUTHTYPE_NUM - 1, | ||
1331 | NL80211_AUTHTYPE_AUTOMATIC | ||
1203 | }; | 1332 | }; |
1204 | 1333 | ||
1205 | /** | 1334 | /** |
@@ -1224,4 +1353,39 @@ enum nl80211_mfp { | |||
1224 | NL80211_MFP_REQUIRED, | 1353 | NL80211_MFP_REQUIRED, |
1225 | }; | 1354 | }; |
1226 | 1355 | ||
1356 | enum nl80211_wpa_versions { | ||
1357 | NL80211_WPA_VERSION_1 = 1 << 0, | ||
1358 | NL80211_WPA_VERSION_2 = 1 << 1, | ||
1359 | }; | ||
1360 | |||
1361 | /** | ||
1362 | * enum nl80211_key_attributes - key attributes | ||
1363 | * @__NL80211_KEY_INVALID: invalid | ||
1364 | * @NL80211_KEY_DATA: (temporal) key data; for TKIP this consists of | ||
1365 | * 16 bytes encryption key followed by 8 bytes each for TX and RX MIC | ||
1366 | * keys | ||
1367 | * @NL80211_KEY_IDX: key ID (u8, 0-3) | ||
1368 | * @NL80211_KEY_CIPHER: key cipher suite (u32, as defined by IEEE 802.11 | ||
1369 | * section 7.3.2.25.1, e.g. 0x000FAC04) | ||
1370 | * @NL80211_KEY_SEQ: transmit key sequence number (IV/PN) for TKIP and | ||
1371 | * CCMP keys, each six bytes in little endian | ||
1372 | * @NL80211_KEY_DEFAULT: flag indicating default key | ||
1373 | * @NL80211_KEY_DEFAULT_MGMT: flag indicating default management key | ||
1374 | * @__NL80211_KEY_AFTER_LAST: internal | ||
1375 | * @NL80211_KEY_MAX: highest key attribute | ||
1376 | */ | ||
1377 | enum nl80211_key_attributes { | ||
1378 | __NL80211_KEY_INVALID, | ||
1379 | NL80211_KEY_DATA, | ||
1380 | NL80211_KEY_IDX, | ||
1381 | NL80211_KEY_CIPHER, | ||
1382 | NL80211_KEY_SEQ, | ||
1383 | NL80211_KEY_DEFAULT, | ||
1384 | NL80211_KEY_DEFAULT_MGMT, | ||
1385 | |||
1386 | /* keep last */ | ||
1387 | __NL80211_KEY_AFTER_LAST, | ||
1388 | NL80211_KEY_MAX = __NL80211_KEY_AFTER_LAST - 1 | ||
1389 | }; | ||
1390 | |||
1227 | #endif /* __LINUX_NL80211_H */ | 1391 | #endif /* __LINUX_NL80211_H */ |
diff --git a/include/linux/nl802154.h b/include/linux/nl802154.h index 2cda00ccfcca..b7d9435d5a9f 100644 --- a/include/linux/nl802154.h +++ b/include/linux/nl802154.h | |||
@@ -64,12 +64,14 @@ enum { | |||
64 | IEEE802154_ATTR_COORD_REALIGN, | 64 | IEEE802154_ATTR_COORD_REALIGN, |
65 | IEEE802154_ATTR_SEC, | 65 | IEEE802154_ATTR_SEC, |
66 | 66 | ||
67 | IEEE802154_ATTR_PAGE, | ||
68 | |||
67 | __IEEE802154_ATTR_MAX, | 69 | __IEEE802154_ATTR_MAX, |
68 | }; | 70 | }; |
69 | 71 | ||
70 | #define IEEE802154_ATTR_MAX (__IEEE802154_ATTR_MAX - 1) | 72 | #define IEEE802154_ATTR_MAX (__IEEE802154_ATTR_MAX - 1) |
71 | 73 | ||
72 | extern struct nla_policy ieee802154_policy[]; | 74 | extern const struct nla_policy ieee802154_policy[]; |
73 | 75 | ||
74 | /* commands */ | 76 | /* commands */ |
75 | /* REQ should be responded with CONF | 77 | /* REQ should be responded with CONF |
@@ -111,6 +113,8 @@ enum { | |||
111 | IEEE802154_RX_ENABLE_REQ, /* Not supported yet */ | 113 | IEEE802154_RX_ENABLE_REQ, /* Not supported yet */ |
112 | IEEE802154_RX_ENABLE_CONF, /* Not supported yet */ | 114 | IEEE802154_RX_ENABLE_CONF, /* Not supported yet */ |
113 | 115 | ||
116 | IEEE802154_LIST_IFACE, | ||
117 | |||
114 | __IEEE802154_CMD_MAX, | 118 | __IEEE802154_CMD_MAX, |
115 | }; | 119 | }; |
116 | 120 | ||
diff --git a/include/linux/nmi.h b/include/linux/nmi.h index 29af2d5df097..b752e807adde 100644 --- a/include/linux/nmi.h +++ b/include/linux/nmi.h | |||
@@ -28,8 +28,23 @@ static inline void acpi_nmi_disable(void) { } | |||
28 | static inline void acpi_nmi_enable(void) { } | 28 | static inline void acpi_nmi_enable(void) { } |
29 | #endif | 29 | #endif |
30 | 30 | ||
31 | #ifndef trigger_all_cpu_backtrace | 31 | /* |
32 | #define trigger_all_cpu_backtrace() do { } while (0) | 32 | * Create trigger_all_cpu_backtrace() out of the arch-provided |
33 | * base function. Return whether such support was available, | ||
34 | * to allow calling code to fall back to some other mechanism: | ||
35 | */ | ||
36 | #ifdef arch_trigger_all_cpu_backtrace | ||
37 | static inline bool trigger_all_cpu_backtrace(void) | ||
38 | { | ||
39 | arch_trigger_all_cpu_backtrace(); | ||
40 | |||
41 | return true; | ||
42 | } | ||
43 | #else | ||
44 | static inline bool trigger_all_cpu_backtrace(void) | ||
45 | { | ||
46 | return false; | ||
47 | } | ||
33 | #endif | 48 | #endif |
34 | 49 | ||
35 | #endif | 50 | #endif |
diff --git a/include/linux/nodemask.h b/include/linux/nodemask.h index 829b94b156f2..b359c4a9ec9e 100644 --- a/include/linux/nodemask.h +++ b/include/linux/nodemask.h | |||
@@ -82,6 +82,12 @@ | |||
82 | * to generate slightly worse code. So use a simple one-line #define | 82 | * to generate slightly worse code. So use a simple one-line #define |
83 | * for node_isset(), instead of wrapping an inline inside a macro, the | 83 | * for node_isset(), instead of wrapping an inline inside a macro, the |
84 | * way we do the other calls. | 84 | * way we do the other calls. |
85 | * | ||
86 | * NODEMASK_SCRATCH | ||
87 | * When doing above logical AND, OR, XOR, Remap operations the callers tend to | ||
88 | * need temporary nodemask_t's on the stack. But if NODES_SHIFT is large, | ||
89 | * nodemask_t's consume too much stack space. NODEMASK_SCRATCH is a helper | ||
90 | * for such situations. See below and CPUMASK_ALLOC also. | ||
85 | */ | 91 | */ |
86 | 92 | ||
87 | #include <linux/kernel.h> | 93 | #include <linux/kernel.h> |
@@ -473,4 +479,26 @@ static inline int num_node_state(enum node_states state) | |||
473 | #define for_each_node(node) for_each_node_state(node, N_POSSIBLE) | 479 | #define for_each_node(node) for_each_node_state(node, N_POSSIBLE) |
474 | #define for_each_online_node(node) for_each_node_state(node, N_ONLINE) | 480 | #define for_each_online_node(node) for_each_node_state(node, N_ONLINE) |
475 | 481 | ||
482 | /* | ||
483 | * For nodemask scrach area.(See CPUMASK_ALLOC() in cpumask.h) | ||
484 | */ | ||
485 | |||
486 | #if NODES_SHIFT > 8 /* nodemask_t > 64 bytes */ | ||
487 | #define NODEMASK_ALLOC(x, m) struct x *m = kmalloc(sizeof(*m), GFP_KERNEL) | ||
488 | #define NODEMASK_FREE(m) kfree(m) | ||
489 | #else | ||
490 | #define NODEMASK_ALLOC(x, m) struct x _m, *m = &_m | ||
491 | #define NODEMASK_FREE(m) | ||
492 | #endif | ||
493 | |||
494 | /* A example struture for using NODEMASK_ALLOC, used in mempolicy. */ | ||
495 | struct nodemask_scratch { | ||
496 | nodemask_t mask1; | ||
497 | nodemask_t mask2; | ||
498 | }; | ||
499 | |||
500 | #define NODEMASK_SCRATCH(x) NODEMASK_ALLOC(nodemask_scratch, x) | ||
501 | #define NODEMASK_SCRATCH_FREE(x) NODEMASK_FREE(x) | ||
502 | |||
503 | |||
476 | #endif /* __LINUX_NODEMASK_H */ | 504 | #endif /* __LINUX_NODEMASK_H */ |
diff --git a/include/linux/notifier.h b/include/linux/notifier.h index 81bc252dc8ac..44428d247dbe 100644 --- a/include/linux/notifier.h +++ b/include/linux/notifier.h | |||
@@ -199,6 +199,8 @@ static inline int notifier_to_errno(int ret) | |||
199 | #define NETDEV_FEAT_CHANGE 0x000B | 199 | #define NETDEV_FEAT_CHANGE 0x000B |
200 | #define NETDEV_BONDING_FAILOVER 0x000C | 200 | #define NETDEV_BONDING_FAILOVER 0x000C |
201 | #define NETDEV_PRE_UP 0x000D | 201 | #define NETDEV_PRE_UP 0x000D |
202 | #define NETDEV_BONDING_OLDTYPE 0x000E | ||
203 | #define NETDEV_BONDING_NEWTYPE 0x000F | ||
202 | 204 | ||
203 | #define SYS_DOWN 0x0001 /* Notify of system down */ | 205 | #define SYS_DOWN 0x0001 /* Notify of system down */ |
204 | #define SYS_RESTART SYS_DOWN | 206 | #define SYS_RESTART SYS_DOWN |
diff --git a/include/linux/of_mdio.h b/include/linux/of_mdio.h index c9663c690303..53b94e025c7c 100644 --- a/include/linux/of_mdio.h +++ b/include/linux/of_mdio.h | |||
@@ -18,5 +18,8 @@ extern struct phy_device *of_phy_connect(struct net_device *dev, | |||
18 | struct device_node *phy_np, | 18 | struct device_node *phy_np, |
19 | void (*hndlr)(struct net_device *), | 19 | void (*hndlr)(struct net_device *), |
20 | u32 flags, phy_interface_t iface); | 20 | u32 flags, phy_interface_t iface); |
21 | extern struct phy_device *of_phy_connect_fixed_link(struct net_device *dev, | ||
22 | void (*hndlr)(struct net_device *), | ||
23 | phy_interface_t iface); | ||
21 | 24 | ||
22 | #endif /* __LINUX_OF_MDIO_H */ | 25 | #endif /* __LINUX_OF_MDIO_H */ |
diff --git a/include/linux/oom.h b/include/linux/oom.h index a7979baf1e39..6aac5fe4f6f1 100644 --- a/include/linux/oom.h +++ b/include/linux/oom.h | |||
@@ -30,5 +30,16 @@ extern void out_of_memory(struct zonelist *zonelist, gfp_t gfp_mask, int order); | |||
30 | extern int register_oom_notifier(struct notifier_block *nb); | 30 | extern int register_oom_notifier(struct notifier_block *nb); |
31 | extern int unregister_oom_notifier(struct notifier_block *nb); | 31 | extern int unregister_oom_notifier(struct notifier_block *nb); |
32 | 32 | ||
33 | extern bool oom_killer_disabled; | ||
34 | |||
35 | static inline void oom_killer_disable(void) | ||
36 | { | ||
37 | oom_killer_disabled = true; | ||
38 | } | ||
39 | |||
40 | static inline void oom_killer_enable(void) | ||
41 | { | ||
42 | oom_killer_disabled = false; | ||
43 | } | ||
33 | #endif /* __KERNEL__*/ | 44 | #endif /* __KERNEL__*/ |
34 | #endif /* _INCLUDE_LINUX_OOM_H */ | 45 | #endif /* _INCLUDE_LINUX_OOM_H */ |
diff --git a/include/linux/oprofile.h b/include/linux/oprofile.h index 1d9518bc4c58..5171639ecf0f 100644 --- a/include/linux/oprofile.h +++ b/include/linux/oprofile.h | |||
@@ -67,6 +67,9 @@ struct oprofile_operations { | |||
67 | 67 | ||
68 | /* Initiate a stack backtrace. Optional. */ | 68 | /* Initiate a stack backtrace. Optional. */ |
69 | void (*backtrace)(struct pt_regs * const regs, unsigned int depth); | 69 | void (*backtrace)(struct pt_regs * const regs, unsigned int depth); |
70 | |||
71 | /* Multiplex between different events. Optional. */ | ||
72 | int (*switch_events)(void); | ||
70 | /* CPU identification string. */ | 73 | /* CPU identification string. */ |
71 | char * cpu_type; | 74 | char * cpu_type; |
72 | }; | 75 | }; |
@@ -171,7 +174,6 @@ struct op_sample; | |||
171 | struct op_entry { | 174 | struct op_entry { |
172 | struct ring_buffer_event *event; | 175 | struct ring_buffer_event *event; |
173 | struct op_sample *sample; | 176 | struct op_sample *sample; |
174 | unsigned long irq_flags; | ||
175 | unsigned long size; | 177 | unsigned long size; |
176 | unsigned long *data; | 178 | unsigned long *data; |
177 | }; | 179 | }; |
@@ -180,6 +182,7 @@ void oprofile_write_reserve(struct op_entry *entry, | |||
180 | struct pt_regs * const regs, | 182 | struct pt_regs * const regs, |
181 | unsigned long pc, int code, int size); | 183 | unsigned long pc, int code, int size); |
182 | int oprofile_add_data(struct op_entry *entry, unsigned long val); | 184 | int oprofile_add_data(struct op_entry *entry, unsigned long val); |
185 | int oprofile_add_data64(struct op_entry *entry, u64 val); | ||
183 | int oprofile_write_commit(struct op_entry *entry); | 186 | int oprofile_write_commit(struct op_entry *entry); |
184 | 187 | ||
185 | #endif /* OPROFILE_H */ | 188 | #endif /* OPROFILE_H */ |
diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h index e2e5ce543595..13de789f0a5c 100644 --- a/include/linux/page-flags.h +++ b/include/linux/page-flags.h | |||
@@ -99,7 +99,7 @@ enum pageflags { | |||
99 | #ifdef CONFIG_HAVE_MLOCKED_PAGE_BIT | 99 | #ifdef CONFIG_HAVE_MLOCKED_PAGE_BIT |
100 | PG_mlocked, /* Page is vma mlocked */ | 100 | PG_mlocked, /* Page is vma mlocked */ |
101 | #endif | 101 | #endif |
102 | #ifdef CONFIG_IA64_UNCACHED_ALLOCATOR | 102 | #ifdef CONFIG_ARCH_USES_PG_UNCACHED |
103 | PG_uncached, /* Page has been mapped as uncached */ | 103 | PG_uncached, /* Page has been mapped as uncached */ |
104 | #endif | 104 | #endif |
105 | __NR_PAGEFLAGS, | 105 | __NR_PAGEFLAGS, |
@@ -158,6 +158,9 @@ static inline int TestSetPage##uname(struct page *page) \ | |||
158 | static inline int TestClearPage##uname(struct page *page) \ | 158 | static inline int TestClearPage##uname(struct page *page) \ |
159 | { return test_and_clear_bit(PG_##lname, &page->flags); } | 159 | { return test_and_clear_bit(PG_##lname, &page->flags); } |
160 | 160 | ||
161 | #define __TESTCLEARFLAG(uname, lname) \ | ||
162 | static inline int __TestClearPage##uname(struct page *page) \ | ||
163 | { return __test_and_clear_bit(PG_##lname, &page->flags); } | ||
161 | 164 | ||
162 | #define PAGEFLAG(uname, lname) TESTPAGEFLAG(uname, lname) \ | 165 | #define PAGEFLAG(uname, lname) TESTPAGEFLAG(uname, lname) \ |
163 | SETPAGEFLAG(uname, lname) CLEARPAGEFLAG(uname, lname) | 166 | SETPAGEFLAG(uname, lname) CLEARPAGEFLAG(uname, lname) |
@@ -184,6 +187,9 @@ static inline void __ClearPage##uname(struct page *page) { } | |||
184 | #define TESTCLEARFLAG_FALSE(uname) \ | 187 | #define TESTCLEARFLAG_FALSE(uname) \ |
185 | static inline int TestClearPage##uname(struct page *page) { return 0; } | 188 | static inline int TestClearPage##uname(struct page *page) { return 0; } |
186 | 189 | ||
190 | #define __TESTCLEARFLAG_FALSE(uname) \ | ||
191 | static inline int __TestClearPage##uname(struct page *page) { return 0; } | ||
192 | |||
187 | struct page; /* forward declaration */ | 193 | struct page; /* forward declaration */ |
188 | 194 | ||
189 | TESTPAGEFLAG(Locked, locked) TESTSETFLAG(Locked, locked) | 195 | TESTPAGEFLAG(Locked, locked) TESTSETFLAG(Locked, locked) |
@@ -250,14 +256,14 @@ PAGEFLAG(Unevictable, unevictable) __CLEARPAGEFLAG(Unevictable, unevictable) | |||
250 | #ifdef CONFIG_HAVE_MLOCKED_PAGE_BIT | 256 | #ifdef CONFIG_HAVE_MLOCKED_PAGE_BIT |
251 | #define MLOCK_PAGES 1 | 257 | #define MLOCK_PAGES 1 |
252 | PAGEFLAG(Mlocked, mlocked) __CLEARPAGEFLAG(Mlocked, mlocked) | 258 | PAGEFLAG(Mlocked, mlocked) __CLEARPAGEFLAG(Mlocked, mlocked) |
253 | TESTSCFLAG(Mlocked, mlocked) | 259 | TESTSCFLAG(Mlocked, mlocked) __TESTCLEARFLAG(Mlocked, mlocked) |
254 | #else | 260 | #else |
255 | #define MLOCK_PAGES 0 | 261 | #define MLOCK_PAGES 0 |
256 | PAGEFLAG_FALSE(Mlocked) | 262 | PAGEFLAG_FALSE(Mlocked) SETPAGEFLAG_NOOP(Mlocked) |
257 | SETPAGEFLAG_NOOP(Mlocked) TESTCLEARFLAG_FALSE(Mlocked) | 263 | TESTCLEARFLAG_FALSE(Mlocked) __TESTCLEARFLAG_FALSE(Mlocked) |
258 | #endif | 264 | #endif |
259 | 265 | ||
260 | #ifdef CONFIG_IA64_UNCACHED_ALLOCATOR | 266 | #ifdef CONFIG_ARCH_USES_PG_UNCACHED |
261 | PAGEFLAG(Uncached, uncached) | 267 | PAGEFLAG(Uncached, uncached) |
262 | #else | 268 | #else |
263 | PAGEFLAG_FALSE(Uncached) | 269 | PAGEFLAG_FALSE(Uncached) |
@@ -396,8 +402,8 @@ static inline void __ClearPageTail(struct page *page) | |||
396 | */ | 402 | */ |
397 | #define PAGE_FLAGS_CHECK_AT_PREP ((1 << NR_PAGEFLAGS) - 1) | 403 | #define PAGE_FLAGS_CHECK_AT_PREP ((1 << NR_PAGEFLAGS) - 1) |
398 | 404 | ||
399 | #endif /* !__GENERATING_BOUNDS_H */ | 405 | #define PAGE_FLAGS_PRIVATE \ |
400 | 406 | (1 << PG_private | 1 << PG_private_2) | |
401 | /** | 407 | /** |
402 | * page_has_private - Determine if page has private stuff | 408 | * page_has_private - Determine if page has private stuff |
403 | * @page: The page to be checked | 409 | * @page: The page to be checked |
@@ -405,8 +411,11 @@ static inline void __ClearPageTail(struct page *page) | |||
405 | * Determine if a page has private stuff, indicating that release routines | 411 | * Determine if a page has private stuff, indicating that release routines |
406 | * should be invoked upon it. | 412 | * should be invoked upon it. |
407 | */ | 413 | */ |
408 | #define page_has_private(page) \ | 414 | static inline int page_has_private(struct page *page) |
409 | ((page)->flags & ((1 << PG_private) | \ | 415 | { |
410 | (1 << PG_private_2))) | 416 | return !!(page->flags & PAGE_FLAGS_PRIVATE); |
417 | } | ||
418 | |||
419 | #endif /* !__GENERATING_BOUNDS_H */ | ||
411 | 420 | ||
412 | #endif /* PAGE_FLAGS_H */ | 421 | #endif /* PAGE_FLAGS_H */ |
diff --git a/include/linux/page_cgroup.h b/include/linux/page_cgroup.h index 13f126c89ae8..ada779f24178 100644 --- a/include/linux/page_cgroup.h +++ b/include/linux/page_cgroup.h | |||
@@ -105,14 +105,14 @@ static inline void __init page_cgroup_init_flatmem(void) | |||
105 | 105 | ||
106 | #endif | 106 | #endif |
107 | 107 | ||
108 | #ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP | ||
109 | #include <linux/swap.h> | 108 | #include <linux/swap.h> |
109 | |||
110 | #ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP | ||
110 | extern unsigned short swap_cgroup_record(swp_entry_t ent, unsigned short id); | 111 | extern unsigned short swap_cgroup_record(swp_entry_t ent, unsigned short id); |
111 | extern unsigned short lookup_swap_cgroup(swp_entry_t ent); | 112 | extern unsigned short lookup_swap_cgroup(swp_entry_t ent); |
112 | extern int swap_cgroup_swapon(int type, unsigned long max_pages); | 113 | extern int swap_cgroup_swapon(int type, unsigned long max_pages); |
113 | extern void swap_cgroup_swapoff(int type); | 114 | extern void swap_cgroup_swapoff(int type); |
114 | #else | 115 | #else |
115 | #include <linux/swap.h> | ||
116 | 116 | ||
117 | static inline | 117 | static inline |
118 | unsigned short swap_cgroup_record(swp_entry_t ent, unsigned short id) | 118 | unsigned short swap_cgroup_record(swp_entry_t ent, unsigned short id) |
diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h index aec3252afcf5..ed5d7501e181 100644 --- a/include/linux/pagemap.h +++ b/include/linux/pagemap.h | |||
@@ -132,7 +132,7 @@ static inline int page_cache_get_speculative(struct page *page) | |||
132 | { | 132 | { |
133 | VM_BUG_ON(in_interrupt()); | 133 | VM_BUG_ON(in_interrupt()); |
134 | 134 | ||
135 | #if !defined(CONFIG_SMP) && defined(CONFIG_CLASSIC_RCU) | 135 | #if !defined(CONFIG_SMP) && defined(CONFIG_TREE_RCU) |
136 | # ifdef CONFIG_PREEMPT | 136 | # ifdef CONFIG_PREEMPT |
137 | VM_BUG_ON(!in_atomic()); | 137 | VM_BUG_ON(!in_atomic()); |
138 | # endif | 138 | # endif |
@@ -170,7 +170,7 @@ static inline int page_cache_add_speculative(struct page *page, int count) | |||
170 | { | 170 | { |
171 | VM_BUG_ON(in_interrupt()); | 171 | VM_BUG_ON(in_interrupt()); |
172 | 172 | ||
173 | #if !defined(CONFIG_SMP) && defined(CONFIG_CLASSIC_RCU) | 173 | #if !defined(CONFIG_SMP) && defined(CONFIG_TREE_RCU) |
174 | # ifdef CONFIG_PREEMPT | 174 | # ifdef CONFIG_PREEMPT |
175 | VM_BUG_ON(!in_atomic()); | 175 | VM_BUG_ON(!in_atomic()); |
176 | # endif | 176 | # endif |
diff --git a/include/linux/pci.h b/include/linux/pci.h index d304ddf412d0..f5c7cd343e56 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h | |||
@@ -241,6 +241,7 @@ struct pci_dev { | |||
241 | unsigned int d1_support:1; /* Low power state D1 is supported */ | 241 | unsigned int d1_support:1; /* Low power state D1 is supported */ |
242 | unsigned int d2_support:1; /* Low power state D2 is supported */ | 242 | unsigned int d2_support:1; /* Low power state D2 is supported */ |
243 | unsigned int no_d1d2:1; /* Only allow D0 and D3 */ | 243 | unsigned int no_d1d2:1; /* Only allow D0 and D3 */ |
244 | unsigned int wakeup_prepared:1; | ||
244 | 245 | ||
245 | #ifdef CONFIG_PCIEASPM | 246 | #ifdef CONFIG_PCIEASPM |
246 | struct pcie_link_state *link_state; /* ASPM link state. */ | 247 | struct pcie_link_state *link_state; /* ASPM link state. */ |
@@ -273,9 +274,12 @@ struct pci_dev { | |||
273 | unsigned int ari_enabled:1; /* ARI forwarding */ | 274 | unsigned int ari_enabled:1; /* ARI forwarding */ |
274 | unsigned int is_managed:1; | 275 | unsigned int is_managed:1; |
275 | unsigned int is_pcie:1; | 276 | unsigned int is_pcie:1; |
277 | unsigned int needs_freset:1; /* Dev requires fundamental reset */ | ||
276 | unsigned int state_saved:1; | 278 | unsigned int state_saved:1; |
277 | unsigned int is_physfn:1; | 279 | unsigned int is_physfn:1; |
278 | unsigned int is_virtfn:1; | 280 | unsigned int is_virtfn:1; |
281 | unsigned int reset_fn:1; | ||
282 | unsigned int is_hotplug_bridge:1; | ||
279 | pci_dev_flags_t dev_flags; | 283 | pci_dev_flags_t dev_flags; |
280 | atomic_t enable_cnt; /* pci_enable_device has been called */ | 284 | atomic_t enable_cnt; /* pci_enable_device has been called */ |
281 | 285 | ||
@@ -794,6 +798,11 @@ int __must_check __pci_register_driver(struct pci_driver *, struct module *, | |||
794 | void pci_unregister_driver(struct pci_driver *dev); | 798 | void pci_unregister_driver(struct pci_driver *dev); |
795 | void pci_remove_behind_bridge(struct pci_dev *dev); | 799 | void pci_remove_behind_bridge(struct pci_dev *dev); |
796 | struct pci_driver *pci_dev_driver(const struct pci_dev *dev); | 800 | struct pci_driver *pci_dev_driver(const struct pci_dev *dev); |
801 | int pci_add_dynid(struct pci_driver *drv, | ||
802 | unsigned int vendor, unsigned int device, | ||
803 | unsigned int subvendor, unsigned int subdevice, | ||
804 | unsigned int class, unsigned int class_mask, | ||
805 | unsigned long driver_data); | ||
797 | const struct pci_device_id *pci_match_id(const struct pci_device_id *ids, | 806 | const struct pci_device_id *pci_match_id(const struct pci_device_id *ids, |
798 | struct pci_dev *dev); | 807 | struct pci_dev *dev); |
799 | int pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max, | 808 | int pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max, |
@@ -805,6 +814,8 @@ int pci_cfg_space_size_ext(struct pci_dev *dev); | |||
805 | int pci_cfg_space_size(struct pci_dev *dev); | 814 | int pci_cfg_space_size(struct pci_dev *dev); |
806 | unsigned char pci_bus_max_busnr(struct pci_bus *bus); | 815 | unsigned char pci_bus_max_busnr(struct pci_bus *bus); |
807 | 816 | ||
817 | int pci_set_vga_state(struct pci_dev *pdev, bool decode, | ||
818 | unsigned int command_bits, bool change_bridge); | ||
808 | /* kmem_cache style wrapper around pci_alloc_consistent() */ | 819 | /* kmem_cache style wrapper around pci_alloc_consistent() */ |
809 | 820 | ||
810 | #include <linux/dmapool.h> | 821 | #include <linux/dmapool.h> |
@@ -1145,7 +1156,7 @@ static inline void pci_set_drvdata(struct pci_dev *pdev, void *data) | |||
1145 | /* If you want to know what to call your pci_dev, ask this function. | 1156 | /* If you want to know what to call your pci_dev, ask this function. |
1146 | * Again, it's a wrapper around the generic device. | 1157 | * Again, it's a wrapper around the generic device. |
1147 | */ | 1158 | */ |
1148 | static inline const char *pci_name(struct pci_dev *pdev) | 1159 | static inline const char *pci_name(const struct pci_dev *pdev) |
1149 | { | 1160 | { |
1150 | return dev_name(&pdev->dev); | 1161 | return dev_name(&pdev->dev); |
1151 | } | 1162 | } |
@@ -1236,6 +1247,9 @@ extern int pci_pci_problems; | |||
1236 | extern unsigned long pci_cardbus_io_size; | 1247 | extern unsigned long pci_cardbus_io_size; |
1237 | extern unsigned long pci_cardbus_mem_size; | 1248 | extern unsigned long pci_cardbus_mem_size; |
1238 | 1249 | ||
1250 | extern unsigned long pci_hotplug_io_size; | ||
1251 | extern unsigned long pci_hotplug_mem_size; | ||
1252 | |||
1239 | int pcibios_add_platform_entries(struct pci_dev *dev); | 1253 | int pcibios_add_platform_entries(struct pci_dev *dev); |
1240 | void pcibios_disable_device(struct pci_dev *dev); | 1254 | void pcibios_disable_device(struct pci_dev *dev); |
1241 | int pcibios_set_pcie_reset_state(struct pci_dev *dev, | 1255 | int pcibios_set_pcie_reset_state(struct pci_dev *dev, |
diff --git a/include/linux/pci_hotplug.h b/include/linux/pci_hotplug.h index 4391741b99dc..652ba797696d 100644 --- a/include/linux/pci_hotplug.h +++ b/include/linux/pci_hotplug.h | |||
@@ -62,7 +62,8 @@ enum pcie_link_width { | |||
62 | }; | 62 | }; |
63 | 63 | ||
64 | enum pcie_link_speed { | 64 | enum pcie_link_speed { |
65 | PCIE_2PT5GB = 0x14, | 65 | PCIE_2_5GB = 0x14, |
66 | PCIE_5_0GB = 0x15, | ||
66 | PCIE_LNK_SPEED_UNKNOWN = 0xFF, | 67 | PCIE_LNK_SPEED_UNKNOWN = 0xFF, |
67 | }; | 68 | }; |
68 | 69 | ||
@@ -226,11 +227,18 @@ struct hotplug_params { | |||
226 | #ifdef CONFIG_ACPI | 227 | #ifdef CONFIG_ACPI |
227 | #include <acpi/acpi.h> | 228 | #include <acpi/acpi.h> |
228 | #include <acpi/acpi_bus.h> | 229 | #include <acpi/acpi_bus.h> |
229 | extern acpi_status acpi_get_hp_params_from_firmware(struct pci_bus *bus, | 230 | int pci_get_hp_params(struct pci_dev *dev, struct hotplug_params *hpp); |
230 | struct hotplug_params *hpp); | ||
231 | int acpi_get_hp_hw_control_from_firmware(struct pci_dev *dev, u32 flags); | 231 | int acpi_get_hp_hw_control_from_firmware(struct pci_dev *dev, u32 flags); |
232 | int acpi_pci_check_ejectable(struct pci_bus *pbus, acpi_handle handle); | 232 | int acpi_pci_check_ejectable(struct pci_bus *pbus, acpi_handle handle); |
233 | int acpi_pci_detect_ejectable(struct pci_bus *pbus); | 233 | int acpi_pci_detect_ejectable(acpi_handle handle); |
234 | #else | ||
235 | static inline int pci_get_hp_params(struct pci_dev *dev, | ||
236 | struct hotplug_params *hpp) | ||
237 | { | ||
238 | return -ENODEV; | ||
239 | } | ||
234 | #endif | 240 | #endif |
241 | |||
242 | void pci_configure_slot(struct pci_dev *dev); | ||
235 | #endif | 243 | #endif |
236 | 244 | ||
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index a3b000365795..3b6b788fe2b5 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
@@ -2,6 +2,9 @@ | |||
2 | * PCI Class, Vendor and Device IDs | 2 | * PCI Class, Vendor and Device IDs |
3 | * | 3 | * |
4 | * Please keep sorted. | 4 | * Please keep sorted. |
5 | * | ||
6 | * Do not add new entries to this file unless the definitions | ||
7 | * are shared between multiple drivers. | ||
5 | */ | 8 | */ |
6 | 9 | ||
7 | /* Device classes and subclasses */ | 10 | /* Device classes and subclasses */ |
@@ -376,6 +379,9 @@ | |||
376 | #define PCI_DEVICE_ID_ATI_IXP600_IDE 0x438c | 379 | #define PCI_DEVICE_ID_ATI_IXP600_IDE 0x438c |
377 | #define PCI_DEVICE_ID_ATI_IXP700_SATA 0x4390 | 380 | #define PCI_DEVICE_ID_ATI_IXP700_SATA 0x4390 |
378 | #define PCI_DEVICE_ID_ATI_IXP700_IDE 0x439c | 381 | #define PCI_DEVICE_ID_ATI_IXP700_IDE 0x439c |
382 | /* AMD SB Chipset */ | ||
383 | #define PCI_DEVICE_ID_AMD_SB900_IDE 0x780c | ||
384 | #define PCI_DEVICE_ID_AMD_SB900_SATA_IDE 0x7800 | ||
379 | 385 | ||
380 | #define PCI_VENDOR_ID_VLSI 0x1004 | 386 | #define PCI_VENDOR_ID_VLSI 0x1004 |
381 | #define PCI_DEVICE_ID_VLSI_82C592 0x0005 | 387 | #define PCI_DEVICE_ID_VLSI_82C592 0x0005 |
@@ -537,6 +543,7 @@ | |||
537 | #define PCI_DEVICE_ID_AMD_8131_BRIDGE 0x7450 | 543 | #define PCI_DEVICE_ID_AMD_8131_BRIDGE 0x7450 |
538 | #define PCI_DEVICE_ID_AMD_8131_APIC 0x7451 | 544 | #define PCI_DEVICE_ID_AMD_8131_APIC 0x7451 |
539 | #define PCI_DEVICE_ID_AMD_8132_BRIDGE 0x7458 | 545 | #define PCI_DEVICE_ID_AMD_8132_BRIDGE 0x7458 |
546 | #define PCI_DEVICE_ID_AMD_CS5535_IDE 0x208F | ||
540 | #define PCI_DEVICE_ID_AMD_CS5536_ISA 0x2090 | 547 | #define PCI_DEVICE_ID_AMD_CS5536_ISA 0x2090 |
541 | #define PCI_DEVICE_ID_AMD_CS5536_FLASH 0x2091 | 548 | #define PCI_DEVICE_ID_AMD_CS5536_FLASH 0x2091 |
542 | #define PCI_DEVICE_ID_AMD_CS5536_AUDIO 0x2093 | 549 | #define PCI_DEVICE_ID_AMD_CS5536_AUDIO 0x2093 |
@@ -877,6 +884,7 @@ | |||
877 | #define PCI_DEVICE_ID_APPLE_SH_SUNGEM 0x0051 | 884 | #define PCI_DEVICE_ID_APPLE_SH_SUNGEM 0x0051 |
878 | #define PCI_DEVICE_ID_APPLE_U3L_AGP 0x0058 | 885 | #define PCI_DEVICE_ID_APPLE_U3L_AGP 0x0058 |
879 | #define PCI_DEVICE_ID_APPLE_U3H_AGP 0x0059 | 886 | #define PCI_DEVICE_ID_APPLE_U3H_AGP 0x0059 |
887 | #define PCI_DEVICE_ID_APPLE_U4_PCIE 0x005b | ||
880 | #define PCI_DEVICE_ID_APPLE_IPID2_AGP 0x0066 | 888 | #define PCI_DEVICE_ID_APPLE_IPID2_AGP 0x0066 |
881 | #define PCI_DEVICE_ID_APPLE_IPID2_ATA 0x0069 | 889 | #define PCI_DEVICE_ID_APPLE_IPID2_ATA 0x0069 |
882 | #define PCI_DEVICE_ID_APPLE_IPID2_FW 0x006a | 890 | #define PCI_DEVICE_ID_APPLE_IPID2_FW 0x006a |
@@ -1521,6 +1529,8 @@ | |||
1521 | #define PCI_DEVICE_ID_ARTOP_ATP860R 0x0007 | 1529 | #define PCI_DEVICE_ID_ARTOP_ATP860R 0x0007 |
1522 | #define PCI_DEVICE_ID_ARTOP_ATP865 0x0008 | 1530 | #define PCI_DEVICE_ID_ARTOP_ATP865 0x0008 |
1523 | #define PCI_DEVICE_ID_ARTOP_ATP865R 0x0009 | 1531 | #define PCI_DEVICE_ID_ARTOP_ATP865R 0x0009 |
1532 | #define PCI_DEVICE_ID_ARTOP_ATP867A 0x000A | ||
1533 | #define PCI_DEVICE_ID_ARTOP_ATP867B 0x000B | ||
1524 | #define PCI_DEVICE_ID_ARTOP_AEC7610 0x8002 | 1534 | #define PCI_DEVICE_ID_ARTOP_AEC7610 0x8002 |
1525 | #define PCI_DEVICE_ID_ARTOP_AEC7612UW 0x8010 | 1535 | #define PCI_DEVICE_ID_ARTOP_AEC7612UW 0x8010 |
1526 | #define PCI_DEVICE_ID_ARTOP_AEC7612U 0x8020 | 1536 | #define PCI_DEVICE_ID_ARTOP_AEC7612U 0x8020 |
@@ -1984,6 +1994,8 @@ | |||
1984 | 1994 | ||
1985 | #define PCI_VENDOR_ID_SAMSUNG 0x144d | 1995 | #define PCI_VENDOR_ID_SAMSUNG 0x144d |
1986 | 1996 | ||
1997 | #define PCI_VENDOR_ID_GIGABYTE 0x1458 | ||
1998 | |||
1987 | #define PCI_VENDOR_ID_AMBIT 0x1468 | 1999 | #define PCI_VENDOR_ID_AMBIT 0x1468 |
1988 | 2000 | ||
1989 | #define PCI_VENDOR_ID_MYRICOM 0x14c1 | 2001 | #define PCI_VENDOR_ID_MYRICOM 0x14c1 |
@@ -2062,7 +2074,6 @@ | |||
2062 | #define PCI_DEVICE_ID_TIGON3_5787M 0x1693 | 2074 | #define PCI_DEVICE_ID_TIGON3_5787M 0x1693 |
2063 | #define PCI_DEVICE_ID_TIGON3_5782 0x1696 | 2075 | #define PCI_DEVICE_ID_TIGON3_5782 0x1696 |
2064 | #define PCI_DEVICE_ID_TIGON3_5784 0x1698 | 2076 | #define PCI_DEVICE_ID_TIGON3_5784 0x1698 |
2065 | #define PCI_DEVICE_ID_TIGON3_5785 0x1699 | ||
2066 | #define PCI_DEVICE_ID_TIGON3_5786 0x169a | 2077 | #define PCI_DEVICE_ID_TIGON3_5786 0x169a |
2067 | #define PCI_DEVICE_ID_TIGON3_5787 0x169b | 2078 | #define PCI_DEVICE_ID_TIGON3_5787 0x169b |
2068 | #define PCI_DEVICE_ID_TIGON3_5788 0x169c | 2079 | #define PCI_DEVICE_ID_TIGON3_5788 0x169c |
@@ -2645,6 +2656,7 @@ | |||
2645 | #define PCI_DEVICE_ID_NETMOS_9835 0x9835 | 2656 | #define PCI_DEVICE_ID_NETMOS_9835 0x9835 |
2646 | #define PCI_DEVICE_ID_NETMOS_9845 0x9845 | 2657 | #define PCI_DEVICE_ID_NETMOS_9845 0x9845 |
2647 | #define PCI_DEVICE_ID_NETMOS_9855 0x9855 | 2658 | #define PCI_DEVICE_ID_NETMOS_9855 0x9855 |
2659 | #define PCI_DEVICE_ID_NETMOS_9901 0x9901 | ||
2648 | 2660 | ||
2649 | #define PCI_VENDOR_ID_3COM_2 0xa727 | 2661 | #define PCI_VENDOR_ID_3COM_2 0xa727 |
2650 | 2662 | ||
diff --git a/include/linux/pci_regs.h b/include/linux/pci_regs.h index fcaee42c7ac2..dd0bed4f1cf0 100644 --- a/include/linux/pci_regs.h +++ b/include/linux/pci_regs.h | |||
@@ -42,6 +42,7 @@ | |||
42 | #define PCI_COMMAND_INTX_DISABLE 0x400 /* INTx Emulation Disable */ | 42 | #define PCI_COMMAND_INTX_DISABLE 0x400 /* INTx Emulation Disable */ |
43 | 43 | ||
44 | #define PCI_STATUS 0x06 /* 16 bits */ | 44 | #define PCI_STATUS 0x06 /* 16 bits */ |
45 | #define PCI_STATUS_INTERRUPT 0x08 /* Interrupt status */ | ||
45 | #define PCI_STATUS_CAP_LIST 0x10 /* Support Capability List */ | 46 | #define PCI_STATUS_CAP_LIST 0x10 /* Support Capability List */ |
46 | #define PCI_STATUS_66MHZ 0x20 /* Support 66 Mhz PCI 2.1 bus */ | 47 | #define PCI_STATUS_66MHZ 0x20 /* Support 66 Mhz PCI 2.1 bus */ |
47 | #define PCI_STATUS_UDF 0x40 /* Support User Definable Features [obsolete] */ | 48 | #define PCI_STATUS_UDF 0x40 /* Support User Definable Features [obsolete] */ |
diff --git a/include/linux/percpu-defs.h b/include/linux/percpu-defs.h index 8f921d74f49f..9bd03193ecd4 100644 --- a/include/linux/percpu-defs.h +++ b/include/linux/percpu-defs.h | |||
@@ -10,21 +10,70 @@ | |||
10 | /* | 10 | /* |
11 | * Base implementations of per-CPU variable declarations and definitions, where | 11 | * Base implementations of per-CPU variable declarations and definitions, where |
12 | * the section in which the variable is to be placed is provided by the | 12 | * the section in which the variable is to be placed is provided by the |
13 | * 'section' argument. This may be used to affect the parameters governing the | 13 | * 'sec' argument. This may be used to affect the parameters governing the |
14 | * variable's storage. | 14 | * variable's storage. |
15 | * | 15 | * |
16 | * NOTE! The sections for the DECLARE and for the DEFINE must match, lest | 16 | * NOTE! The sections for the DECLARE and for the DEFINE must match, lest |
17 | * linkage errors occur due the compiler generating the wrong code to access | 17 | * linkage errors occur due the compiler generating the wrong code to access |
18 | * that section. | 18 | * that section. |
19 | */ | 19 | */ |
20 | #define DECLARE_PER_CPU_SECTION(type, name, section) \ | 20 | #define __PCPU_ATTRS(sec) \ |
21 | extern \ | 21 | __attribute__((section(PER_CPU_BASE_SECTION sec))) \ |
22 | __attribute__((__section__(PER_CPU_BASE_SECTION section))) \ | 22 | PER_CPU_ATTRIBUTES |
23 | PER_CPU_ATTRIBUTES __typeof__(type) per_cpu__##name | ||
24 | 23 | ||
25 | #define DEFINE_PER_CPU_SECTION(type, name, section) \ | 24 | #define __PCPU_DUMMY_ATTRS \ |
26 | __attribute__((__section__(PER_CPU_BASE_SECTION section))) \ | 25 | __attribute__((section(".discard"), unused)) |
27 | PER_CPU_ATTRIBUTES __typeof__(type) per_cpu__##name | 26 | |
27 | /* | ||
28 | * s390 and alpha modules require percpu variables to be defined as | ||
29 | * weak to force the compiler to generate GOT based external | ||
30 | * references for them. This is necessary because percpu sections | ||
31 | * will be located outside of the usually addressable area. | ||
32 | * | ||
33 | * This definition puts the following two extra restrictions when | ||
34 | * defining percpu variables. | ||
35 | * | ||
36 | * 1. The symbol must be globally unique, even the static ones. | ||
37 | * 2. Static percpu variables cannot be defined inside a function. | ||
38 | * | ||
39 | * Archs which need weak percpu definitions should define | ||
40 | * ARCH_NEEDS_WEAK_PER_CPU in asm/percpu.h when necessary. | ||
41 | * | ||
42 | * To ensure that the generic code observes the above two | ||
43 | * restrictions, if CONFIG_DEBUG_FORCE_WEAK_PER_CPU is set weak | ||
44 | * definition is used for all cases. | ||
45 | */ | ||
46 | #if defined(ARCH_NEEDS_WEAK_PER_CPU) || defined(CONFIG_DEBUG_FORCE_WEAK_PER_CPU) | ||
47 | /* | ||
48 | * __pcpu_scope_* dummy variable is used to enforce scope. It | ||
49 | * receives the static modifier when it's used in front of | ||
50 | * DEFINE_PER_CPU() and will trigger build failure if | ||
51 | * DECLARE_PER_CPU() is used for the same variable. | ||
52 | * | ||
53 | * __pcpu_unique_* dummy variable is used to enforce symbol uniqueness | ||
54 | * such that hidden weak symbol collision, which will cause unrelated | ||
55 | * variables to share the same address, can be detected during build. | ||
56 | */ | ||
57 | #define DECLARE_PER_CPU_SECTION(type, name, sec) \ | ||
58 | extern __PCPU_DUMMY_ATTRS char __pcpu_scope_##name; \ | ||
59 | extern __PCPU_ATTRS(sec) __typeof__(type) per_cpu__##name | ||
60 | |||
61 | #define DEFINE_PER_CPU_SECTION(type, name, sec) \ | ||
62 | __PCPU_DUMMY_ATTRS char __pcpu_scope_##name; \ | ||
63 | __PCPU_DUMMY_ATTRS char __pcpu_unique_##name; \ | ||
64 | __PCPU_ATTRS(sec) PER_CPU_DEF_ATTRIBUTES __weak \ | ||
65 | __typeof__(type) per_cpu__##name | ||
66 | #else | ||
67 | /* | ||
68 | * Normal declaration and definition macros. | ||
69 | */ | ||
70 | #define DECLARE_PER_CPU_SECTION(type, name, sec) \ | ||
71 | extern __PCPU_ATTRS(sec) __typeof__(type) per_cpu__##name | ||
72 | |||
73 | #define DEFINE_PER_CPU_SECTION(type, name, sec) \ | ||
74 | __PCPU_ATTRS(sec) PER_CPU_DEF_ATTRIBUTES \ | ||
75 | __typeof__(type) per_cpu__##name | ||
76 | #endif | ||
28 | 77 | ||
29 | /* | 78 | /* |
30 | * Variant on the per-CPU variable declaration/definition theme used for | 79 | * Variant on the per-CPU variable declaration/definition theme used for |
@@ -65,14 +114,24 @@ | |||
65 | DEFINE_PER_CPU_SECTION(type, name, PER_CPU_SHARED_ALIGNED_SECTION) \ | 114 | DEFINE_PER_CPU_SECTION(type, name, PER_CPU_SHARED_ALIGNED_SECTION) \ |
66 | ____cacheline_aligned_in_smp | 115 | ____cacheline_aligned_in_smp |
67 | 116 | ||
117 | #define DECLARE_PER_CPU_ALIGNED(type, name) \ | ||
118 | DECLARE_PER_CPU_SECTION(type, name, PER_CPU_ALIGNED_SECTION) \ | ||
119 | ____cacheline_aligned | ||
120 | |||
121 | #define DEFINE_PER_CPU_ALIGNED(type, name) \ | ||
122 | DEFINE_PER_CPU_SECTION(type, name, PER_CPU_ALIGNED_SECTION) \ | ||
123 | ____cacheline_aligned | ||
124 | |||
68 | /* | 125 | /* |
69 | * Declaration/definition used for per-CPU variables that must be page aligned. | 126 | * Declaration/definition used for per-CPU variables that must be page aligned. |
70 | */ | 127 | */ |
71 | #define DECLARE_PER_CPU_PAGE_ALIGNED(type, name) \ | 128 | #define DECLARE_PER_CPU_PAGE_ALIGNED(type, name) \ |
72 | DECLARE_PER_CPU_SECTION(type, name, ".page_aligned") | 129 | DECLARE_PER_CPU_SECTION(type, name, ".page_aligned") \ |
130 | __aligned(PAGE_SIZE) | ||
73 | 131 | ||
74 | #define DEFINE_PER_CPU_PAGE_ALIGNED(type, name) \ | 132 | #define DEFINE_PER_CPU_PAGE_ALIGNED(type, name) \ |
75 | DEFINE_PER_CPU_SECTION(type, name, ".page_aligned") | 133 | DEFINE_PER_CPU_SECTION(type, name, ".page_aligned") \ |
134 | __aligned(PAGE_SIZE) | ||
76 | 135 | ||
77 | /* | 136 | /* |
78 | * Intermodule exports for per-CPU variables. | 137 | * Intermodule exports for per-CPU variables. |
diff --git a/include/linux/percpu.h b/include/linux/percpu.h index 26fd9d12f050..878836ca999c 100644 --- a/include/linux/percpu.h +++ b/include/linux/percpu.h | |||
@@ -34,7 +34,7 @@ | |||
34 | 34 | ||
35 | #ifdef CONFIG_SMP | 35 | #ifdef CONFIG_SMP |
36 | 36 | ||
37 | #ifdef CONFIG_HAVE_DYNAMIC_PER_CPU_AREA | 37 | #ifndef CONFIG_HAVE_LEGACY_PER_CPU_AREA |
38 | 38 | ||
39 | /* minimum unit size, also is the maximum supported allocation size */ | 39 | /* minimum unit size, also is the maximum supported allocation size */ |
40 | #define PCPU_MIN_UNIT_SIZE PFN_ALIGN(64 << 10) | 40 | #define PCPU_MIN_UNIT_SIZE PFN_ALIGN(64 << 10) |
@@ -57,19 +57,70 @@ | |||
57 | #endif | 57 | #endif |
58 | 58 | ||
59 | extern void *pcpu_base_addr; | 59 | extern void *pcpu_base_addr; |
60 | extern const unsigned long *pcpu_unit_offsets; | ||
60 | 61 | ||
61 | typedef struct page * (*pcpu_get_page_fn_t)(unsigned int cpu, int pageno); | 62 | struct pcpu_group_info { |
62 | typedef void (*pcpu_populate_pte_fn_t)(unsigned long addr); | 63 | int nr_units; /* aligned # of units */ |
64 | unsigned long base_offset; /* base address offset */ | ||
65 | unsigned int *cpu_map; /* unit->cpu map, empty | ||
66 | * entries contain NR_CPUS */ | ||
67 | }; | ||
68 | |||
69 | struct pcpu_alloc_info { | ||
70 | size_t static_size; | ||
71 | size_t reserved_size; | ||
72 | size_t dyn_size; | ||
73 | size_t unit_size; | ||
74 | size_t atom_size; | ||
75 | size_t alloc_size; | ||
76 | size_t __ai_size; /* internal, don't use */ | ||
77 | int nr_groups; /* 0 if grouping unnecessary */ | ||
78 | struct pcpu_group_info groups[]; | ||
79 | }; | ||
63 | 80 | ||
64 | extern size_t __init pcpu_setup_first_chunk(pcpu_get_page_fn_t get_page_fn, | 81 | enum pcpu_fc { |
65 | size_t static_size, size_t reserved_size, | 82 | PCPU_FC_AUTO, |
66 | ssize_t dyn_size, ssize_t unit_size, | 83 | PCPU_FC_EMBED, |
67 | void *base_addr, | 84 | PCPU_FC_PAGE, |
68 | pcpu_populate_pte_fn_t populate_pte_fn); | ||
69 | 85 | ||
70 | extern ssize_t __init pcpu_embed_first_chunk( | 86 | PCPU_FC_NR, |
71 | size_t static_size, size_t reserved_size, | 87 | }; |
72 | ssize_t dyn_size, ssize_t unit_size); | 88 | extern const char *pcpu_fc_names[PCPU_FC_NR]; |
89 | |||
90 | extern enum pcpu_fc pcpu_chosen_fc; | ||
91 | |||
92 | typedef void * (*pcpu_fc_alloc_fn_t)(unsigned int cpu, size_t size, | ||
93 | size_t align); | ||
94 | typedef void (*pcpu_fc_free_fn_t)(void *ptr, size_t size); | ||
95 | typedef void (*pcpu_fc_populate_pte_fn_t)(unsigned long addr); | ||
96 | typedef int (pcpu_fc_cpu_distance_fn_t)(unsigned int from, unsigned int to); | ||
97 | |||
98 | extern struct pcpu_alloc_info * __init pcpu_alloc_alloc_info(int nr_groups, | ||
99 | int nr_units); | ||
100 | extern void __init pcpu_free_alloc_info(struct pcpu_alloc_info *ai); | ||
101 | |||
102 | extern struct pcpu_alloc_info * __init pcpu_build_alloc_info( | ||
103 | size_t reserved_size, ssize_t dyn_size, | ||
104 | size_t atom_size, | ||
105 | pcpu_fc_cpu_distance_fn_t cpu_distance_fn); | ||
106 | |||
107 | extern int __init pcpu_setup_first_chunk(const struct pcpu_alloc_info *ai, | ||
108 | void *base_addr); | ||
109 | |||
110 | #ifdef CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK | ||
111 | extern int __init pcpu_embed_first_chunk(size_t reserved_size, ssize_t dyn_size, | ||
112 | size_t atom_size, | ||
113 | pcpu_fc_cpu_distance_fn_t cpu_distance_fn, | ||
114 | pcpu_fc_alloc_fn_t alloc_fn, | ||
115 | pcpu_fc_free_fn_t free_fn); | ||
116 | #endif | ||
117 | |||
118 | #ifdef CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK | ||
119 | extern int __init pcpu_page_first_chunk(size_t reserved_size, | ||
120 | pcpu_fc_alloc_fn_t alloc_fn, | ||
121 | pcpu_fc_free_fn_t free_fn, | ||
122 | pcpu_fc_populate_pte_fn_t populate_pte_fn); | ||
123 | #endif | ||
73 | 124 | ||
74 | /* | 125 | /* |
75 | * Use this to get to a cpu's version of the per-cpu object | 126 | * Use this to get to a cpu's version of the per-cpu object |
@@ -80,7 +131,7 @@ extern ssize_t __init pcpu_embed_first_chunk( | |||
80 | 131 | ||
81 | extern void *__alloc_reserved_percpu(size_t size, size_t align); | 132 | extern void *__alloc_reserved_percpu(size_t size, size_t align); |
82 | 133 | ||
83 | #else /* CONFIG_HAVE_DYNAMIC_PER_CPU_AREA */ | 134 | #else /* CONFIG_HAVE_LEGACY_PER_CPU_AREA */ |
84 | 135 | ||
85 | struct percpu_data { | 136 | struct percpu_data { |
86 | void *ptrs[1]; | 137 | void *ptrs[1]; |
@@ -99,11 +150,15 @@ struct percpu_data { | |||
99 | (__typeof__(ptr))__p->ptrs[(cpu)]; \ | 150 | (__typeof__(ptr))__p->ptrs[(cpu)]; \ |
100 | }) | 151 | }) |
101 | 152 | ||
102 | #endif /* CONFIG_HAVE_DYNAMIC_PER_CPU_AREA */ | 153 | #endif /* CONFIG_HAVE_LEGACY_PER_CPU_AREA */ |
103 | 154 | ||
104 | extern void *__alloc_percpu(size_t size, size_t align); | 155 | extern void *__alloc_percpu(size_t size, size_t align); |
105 | extern void free_percpu(void *__pdata); | 156 | extern void free_percpu(void *__pdata); |
106 | 157 | ||
158 | #ifndef CONFIG_HAVE_SETUP_PER_CPU_AREA | ||
159 | extern void __init setup_per_cpu_areas(void); | ||
160 | #endif | ||
161 | |||
107 | #else /* CONFIG_SMP */ | 162 | #else /* CONFIG_SMP */ |
108 | 163 | ||
109 | #define per_cpu_ptr(ptr, cpu) ({ (void)(cpu); (ptr); }) | 164 | #define per_cpu_ptr(ptr, cpu) ({ (void)(cpu); (ptr); }) |
@@ -124,6 +179,13 @@ static inline void free_percpu(void *p) | |||
124 | kfree(p); | 179 | kfree(p); |
125 | } | 180 | } |
126 | 181 | ||
182 | static inline void __init setup_per_cpu_areas(void) { } | ||
183 | |||
184 | static inline void *pcpu_lpage_remapped(void *kaddr) | ||
185 | { | ||
186 | return NULL; | ||
187 | } | ||
188 | |||
127 | #endif /* CONFIG_SMP */ | 189 | #endif /* CONFIG_SMP */ |
128 | 190 | ||
129 | #define alloc_percpu(type) (type *)__alloc_percpu(sizeof(type), \ | 191 | #define alloc_percpu(type) (type *)__alloc_percpu(sizeof(type), \ |
diff --git a/include/linux/perf_counter.h b/include/linux/perf_counter.h index 89698d8aba5c..368bd70f1d2d 100644 --- a/include/linux/perf_counter.h +++ b/include/linux/perf_counter.h | |||
@@ -1,5 +1,9 @@ | |||
1 | /* | 1 | /* |
2 | * Performance counters: | 2 | * NOTE: this file will be removed in a future kernel release, it is |
3 | * provided as a courtesy copy of user-space code that relies on the | ||
4 | * old (pre-rename) symbols and constants. | ||
5 | * | ||
6 | * Performance events: | ||
3 | * | 7 | * |
4 | * Copyright (C) 2008-2009, Thomas Gleixner <tglx@linutronix.de> | 8 | * Copyright (C) 2008-2009, Thomas Gleixner <tglx@linutronix.de> |
5 | * Copyright (C) 2008-2009, Red Hat, Inc., Ingo Molnar | 9 | * Copyright (C) 2008-2009, Red Hat, Inc., Ingo Molnar |
@@ -115,26 +119,44 @@ enum perf_counter_sample_format { | |||
115 | PERF_SAMPLE_TID = 1U << 1, | 119 | PERF_SAMPLE_TID = 1U << 1, |
116 | PERF_SAMPLE_TIME = 1U << 2, | 120 | PERF_SAMPLE_TIME = 1U << 2, |
117 | PERF_SAMPLE_ADDR = 1U << 3, | 121 | PERF_SAMPLE_ADDR = 1U << 3, |
118 | PERF_SAMPLE_GROUP = 1U << 4, | 122 | PERF_SAMPLE_READ = 1U << 4, |
119 | PERF_SAMPLE_CALLCHAIN = 1U << 5, | 123 | PERF_SAMPLE_CALLCHAIN = 1U << 5, |
120 | PERF_SAMPLE_ID = 1U << 6, | 124 | PERF_SAMPLE_ID = 1U << 6, |
121 | PERF_SAMPLE_CPU = 1U << 7, | 125 | PERF_SAMPLE_CPU = 1U << 7, |
122 | PERF_SAMPLE_PERIOD = 1U << 8, | 126 | PERF_SAMPLE_PERIOD = 1U << 8, |
127 | PERF_SAMPLE_STREAM_ID = 1U << 9, | ||
128 | PERF_SAMPLE_RAW = 1U << 10, | ||
123 | 129 | ||
124 | PERF_SAMPLE_MAX = 1U << 9, /* non-ABI */ | 130 | PERF_SAMPLE_MAX = 1U << 11, /* non-ABI */ |
125 | }; | 131 | }; |
126 | 132 | ||
127 | /* | 133 | /* |
128 | * Bits that can be set in attr.read_format to request that | 134 | * The format of the data returned by read() on a perf counter fd, |
129 | * reads on the counter should return the indicated quantities, | 135 | * as specified by attr.read_format: |
130 | * in increasing order of bit value, after the counter value. | 136 | * |
137 | * struct read_format { | ||
138 | * { u64 value; | ||
139 | * { u64 time_enabled; } && PERF_FORMAT_ENABLED | ||
140 | * { u64 time_running; } && PERF_FORMAT_RUNNING | ||
141 | * { u64 id; } && PERF_FORMAT_ID | ||
142 | * } && !PERF_FORMAT_GROUP | ||
143 | * | ||
144 | * { u64 nr; | ||
145 | * { u64 time_enabled; } && PERF_FORMAT_ENABLED | ||
146 | * { u64 time_running; } && PERF_FORMAT_RUNNING | ||
147 | * { u64 value; | ||
148 | * { u64 id; } && PERF_FORMAT_ID | ||
149 | * } cntr[nr]; | ||
150 | * } && PERF_FORMAT_GROUP | ||
151 | * }; | ||
131 | */ | 152 | */ |
132 | enum perf_counter_read_format { | 153 | enum perf_counter_read_format { |
133 | PERF_FORMAT_TOTAL_TIME_ENABLED = 1U << 0, | 154 | PERF_FORMAT_TOTAL_TIME_ENABLED = 1U << 0, |
134 | PERF_FORMAT_TOTAL_TIME_RUNNING = 1U << 1, | 155 | PERF_FORMAT_TOTAL_TIME_RUNNING = 1U << 1, |
135 | PERF_FORMAT_ID = 1U << 2, | 156 | PERF_FORMAT_ID = 1U << 2, |
157 | PERF_FORMAT_GROUP = 1U << 3, | ||
136 | 158 | ||
137 | PERF_FORMAT_MAX = 1U << 3, /* non-ABI */ | 159 | PERF_FORMAT_MAX = 1U << 4, /* non-ABI */ |
138 | }; | 160 | }; |
139 | 161 | ||
140 | #define PERF_ATTR_SIZE_VER0 64 /* sizeof first published struct */ | 162 | #define PERF_ATTR_SIZE_VER0 64 /* sizeof first published struct */ |
@@ -178,10 +200,17 @@ struct perf_counter_attr { | |||
178 | mmap : 1, /* include mmap data */ | 200 | mmap : 1, /* include mmap data */ |
179 | comm : 1, /* include comm data */ | 201 | comm : 1, /* include comm data */ |
180 | freq : 1, /* use freq, not period */ | 202 | freq : 1, /* use freq, not period */ |
203 | inherit_stat : 1, /* per task counts */ | ||
204 | enable_on_exec : 1, /* next exec enables */ | ||
205 | task : 1, /* trace fork/exit */ | ||
206 | watermark : 1, /* wakeup_watermark */ | ||
181 | 207 | ||
182 | __reserved_1 : 53; | 208 | __reserved_1 : 49; |
183 | 209 | ||
184 | __u32 wakeup_events; /* wakeup every n events */ | 210 | union { |
211 | __u32 wakeup_events; /* wakeup every n events */ | ||
212 | __u32 wakeup_watermark; /* bytes before wakeup */ | ||
213 | }; | ||
185 | __u32 __reserved_2; | 214 | __u32 __reserved_2; |
186 | 215 | ||
187 | __u64 __reserved_3; | 216 | __u64 __reserved_3; |
@@ -195,6 +224,7 @@ struct perf_counter_attr { | |||
195 | #define PERF_COUNTER_IOC_REFRESH _IO ('$', 2) | 224 | #define PERF_COUNTER_IOC_REFRESH _IO ('$', 2) |
196 | #define PERF_COUNTER_IOC_RESET _IO ('$', 3) | 225 | #define PERF_COUNTER_IOC_RESET _IO ('$', 3) |
197 | #define PERF_COUNTER_IOC_PERIOD _IOW('$', 4, u64) | 226 | #define PERF_COUNTER_IOC_PERIOD _IOW('$', 4, u64) |
227 | #define PERF_COUNTER_IOC_SET_OUTPUT _IO ('$', 5) | ||
198 | 228 | ||
199 | enum perf_counter_ioc_flags { | 229 | enum perf_counter_ioc_flags { |
200 | PERF_IOC_FLAG_GROUP = 1U << 0, | 230 | PERF_IOC_FLAG_GROUP = 1U << 0, |
@@ -232,6 +262,14 @@ struct perf_counter_mmap_page { | |||
232 | __u32 lock; /* seqlock for synchronization */ | 262 | __u32 lock; /* seqlock for synchronization */ |
233 | __u32 index; /* hardware counter identifier */ | 263 | __u32 index; /* hardware counter identifier */ |
234 | __s64 offset; /* add to hardware counter value */ | 264 | __s64 offset; /* add to hardware counter value */ |
265 | __u64 time_enabled; /* time counter active */ | ||
266 | __u64 time_running; /* time counter on cpu */ | ||
267 | |||
268 | /* | ||
269 | * Hole for extension of the self monitor capabilities | ||
270 | */ | ||
271 | |||
272 | __u64 __reserved[123]; /* align to 1k */ | ||
235 | 273 | ||
236 | /* | 274 | /* |
237 | * Control data for the mmap() data buffer. | 275 | * Control data for the mmap() data buffer. |
@@ -253,7 +291,6 @@ struct perf_counter_mmap_page { | |||
253 | #define PERF_EVENT_MISC_KERNEL (1 << 0) | 291 | #define PERF_EVENT_MISC_KERNEL (1 << 0) |
254 | #define PERF_EVENT_MISC_USER (2 << 0) | 292 | #define PERF_EVENT_MISC_USER (2 << 0) |
255 | #define PERF_EVENT_MISC_HYPERVISOR (3 << 0) | 293 | #define PERF_EVENT_MISC_HYPERVISOR (3 << 0) |
256 | #define PERF_EVENT_MISC_OVERFLOW (1 << 2) | ||
257 | 294 | ||
258 | struct perf_event_header { | 295 | struct perf_event_header { |
259 | __u32 type; | 296 | __u32 type; |
@@ -281,9 +318,9 @@ enum perf_event_type { | |||
281 | 318 | ||
282 | /* | 319 | /* |
283 | * struct { | 320 | * struct { |
284 | * struct perf_event_header header; | 321 | * struct perf_event_header header; |
285 | * u64 id; | 322 | * u64 id; |
286 | * u64 lost; | 323 | * u64 lost; |
287 | * }; | 324 | * }; |
288 | */ | 325 | */ |
289 | PERF_EVENT_LOST = 2, | 326 | PERF_EVENT_LOST = 2, |
@@ -301,18 +338,19 @@ enum perf_event_type { | |||
301 | /* | 338 | /* |
302 | * struct { | 339 | * struct { |
303 | * struct perf_event_header header; | 340 | * struct perf_event_header header; |
341 | * u32 pid, ppid; | ||
342 | * u32 tid, ptid; | ||
304 | * u64 time; | 343 | * u64 time; |
305 | * u64 id; | ||
306 | * u64 sample_period; | ||
307 | * }; | 344 | * }; |
308 | */ | 345 | */ |
309 | PERF_EVENT_PERIOD = 4, | 346 | PERF_EVENT_EXIT = 4, |
310 | 347 | ||
311 | /* | 348 | /* |
312 | * struct { | 349 | * struct { |
313 | * struct perf_event_header header; | 350 | * struct perf_event_header header; |
314 | * u64 time; | 351 | * u64 time; |
315 | * u64 id; | 352 | * u64 id; |
353 | * u64 stream_id; | ||
316 | * }; | 354 | * }; |
317 | */ | 355 | */ |
318 | PERF_EVENT_THROTTLE = 5, | 356 | PERF_EVENT_THROTTLE = 5, |
@@ -322,14 +360,23 @@ enum perf_event_type { | |||
322 | * struct { | 360 | * struct { |
323 | * struct perf_event_header header; | 361 | * struct perf_event_header header; |
324 | * u32 pid, ppid; | 362 | * u32 pid, ppid; |
363 | * u32 tid, ptid; | ||
364 | * { u64 time; } && PERF_SAMPLE_TIME | ||
325 | * }; | 365 | * }; |
326 | */ | 366 | */ |
327 | PERF_EVENT_FORK = 7, | 367 | PERF_EVENT_FORK = 7, |
328 | 368 | ||
329 | /* | 369 | /* |
330 | * When header.misc & PERF_EVENT_MISC_OVERFLOW the event_type field | 370 | * struct { |
331 | * will be PERF_SAMPLE_* | 371 | * struct perf_event_header header; |
372 | * u32 pid, tid; | ||
332 | * | 373 | * |
374 | * struct read_format values; | ||
375 | * }; | ||
376 | */ | ||
377 | PERF_EVENT_READ = 8, | ||
378 | |||
379 | /* | ||
333 | * struct { | 380 | * struct { |
334 | * struct perf_event_header header; | 381 | * struct perf_event_header header; |
335 | * | 382 | * |
@@ -337,16 +384,34 @@ enum perf_event_type { | |||
337 | * { u32 pid, tid; } && PERF_SAMPLE_TID | 384 | * { u32 pid, tid; } && PERF_SAMPLE_TID |
338 | * { u64 time; } && PERF_SAMPLE_TIME | 385 | * { u64 time; } && PERF_SAMPLE_TIME |
339 | * { u64 addr; } && PERF_SAMPLE_ADDR | 386 | * { u64 addr; } && PERF_SAMPLE_ADDR |
340 | * { u64 config; } && PERF_SAMPLE_CONFIG | 387 | * { u64 id; } && PERF_SAMPLE_ID |
388 | * { u64 stream_id;} && PERF_SAMPLE_STREAM_ID | ||
341 | * { u32 cpu, res; } && PERF_SAMPLE_CPU | 389 | * { u32 cpu, res; } && PERF_SAMPLE_CPU |
390 | * { u64 period; } && PERF_SAMPLE_PERIOD | ||
342 | * | 391 | * |
343 | * { u64 nr; | 392 | * { struct read_format values; } && PERF_SAMPLE_READ |
344 | * { u64 id, val; } cnt[nr]; } && PERF_SAMPLE_GROUP | ||
345 | * | 393 | * |
346 | * { u64 nr, | 394 | * { u64 nr, |
347 | * u64 ips[nr]; } && PERF_SAMPLE_CALLCHAIN | 395 | * u64 ips[nr]; } && PERF_SAMPLE_CALLCHAIN |
396 | * | ||
397 | * # | ||
398 | * # The RAW record below is opaque data wrt the ABI | ||
399 | * # | ||
400 | * # That is, the ABI doesn't make any promises wrt to | ||
401 | * # the stability of its content, it may vary depending | ||
402 | * # on event, hardware, kernel version and phase of | ||
403 | * # the moon. | ||
404 | * # | ||
405 | * # In other words, PERF_SAMPLE_RAW contents are not an ABI. | ||
406 | * # | ||
407 | * | ||
408 | * { u32 size; | ||
409 | * char data[size];}&& PERF_SAMPLE_RAW | ||
348 | * }; | 410 | * }; |
349 | */ | 411 | */ |
412 | PERF_EVENT_SAMPLE = 9, | ||
413 | |||
414 | PERF_EVENT_MAX, /* non-ABI */ | ||
350 | }; | 415 | }; |
351 | 416 | ||
352 | enum perf_callchain_context { | 417 | enum perf_callchain_context { |
@@ -361,368 +426,16 @@ enum perf_callchain_context { | |||
361 | PERF_CONTEXT_MAX = (__u64)-4095, | 426 | PERF_CONTEXT_MAX = (__u64)-4095, |
362 | }; | 427 | }; |
363 | 428 | ||
364 | #ifdef __KERNEL__ | 429 | #define PERF_FLAG_FD_NO_GROUP (1U << 0) |
365 | /* | 430 | #define PERF_FLAG_FD_OUTPUT (1U << 1) |
366 | * Kernel-internal data types and definitions: | ||
367 | */ | ||
368 | |||
369 | #ifdef CONFIG_PERF_COUNTERS | ||
370 | # include <asm/perf_counter.h> | ||
371 | #endif | ||
372 | |||
373 | #include <linux/list.h> | ||
374 | #include <linux/mutex.h> | ||
375 | #include <linux/rculist.h> | ||
376 | #include <linux/rcupdate.h> | ||
377 | #include <linux/spinlock.h> | ||
378 | #include <linux/hrtimer.h> | ||
379 | #include <linux/fs.h> | ||
380 | #include <linux/pid_namespace.h> | ||
381 | #include <asm/atomic.h> | ||
382 | |||
383 | #define PERF_MAX_STACK_DEPTH 255 | ||
384 | |||
385 | struct perf_callchain_entry { | ||
386 | __u64 nr; | ||
387 | __u64 ip[PERF_MAX_STACK_DEPTH]; | ||
388 | }; | ||
389 | |||
390 | struct task_struct; | ||
391 | |||
392 | /** | ||
393 | * struct hw_perf_counter - performance counter hardware details: | ||
394 | */ | ||
395 | struct hw_perf_counter { | ||
396 | #ifdef CONFIG_PERF_COUNTERS | ||
397 | union { | ||
398 | struct { /* hardware */ | ||
399 | u64 config; | ||
400 | unsigned long config_base; | ||
401 | unsigned long counter_base; | ||
402 | int idx; | ||
403 | }; | ||
404 | union { /* software */ | ||
405 | atomic64_t count; | ||
406 | struct hrtimer hrtimer; | ||
407 | }; | ||
408 | }; | ||
409 | atomic64_t prev_count; | ||
410 | u64 sample_period; | ||
411 | u64 last_period; | ||
412 | atomic64_t period_left; | ||
413 | u64 interrupts; | ||
414 | |||
415 | u64 freq_count; | ||
416 | u64 freq_interrupts; | ||
417 | u64 freq_stamp; | ||
418 | #endif | ||
419 | }; | ||
420 | |||
421 | struct perf_counter; | ||
422 | |||
423 | /** | ||
424 | * struct pmu - generic performance monitoring unit | ||
425 | */ | ||
426 | struct pmu { | ||
427 | int (*enable) (struct perf_counter *counter); | ||
428 | void (*disable) (struct perf_counter *counter); | ||
429 | void (*read) (struct perf_counter *counter); | ||
430 | void (*unthrottle) (struct perf_counter *counter); | ||
431 | }; | ||
432 | |||
433 | /** | ||
434 | * enum perf_counter_active_state - the states of a counter | ||
435 | */ | ||
436 | enum perf_counter_active_state { | ||
437 | PERF_COUNTER_STATE_ERROR = -2, | ||
438 | PERF_COUNTER_STATE_OFF = -1, | ||
439 | PERF_COUNTER_STATE_INACTIVE = 0, | ||
440 | PERF_COUNTER_STATE_ACTIVE = 1, | ||
441 | }; | ||
442 | |||
443 | struct file; | ||
444 | |||
445 | struct perf_mmap_data { | ||
446 | struct rcu_head rcu_head; | ||
447 | int nr_pages; /* nr of data pages */ | ||
448 | int writable; /* are we writable */ | ||
449 | int nr_locked; /* nr pages mlocked */ | ||
450 | |||
451 | atomic_t poll; /* POLL_ for wakeups */ | ||
452 | atomic_t events; /* event limit */ | ||
453 | |||
454 | atomic_long_t head; /* write position */ | ||
455 | atomic_long_t done_head; /* completed head */ | ||
456 | |||
457 | atomic_t lock; /* concurrent writes */ | ||
458 | atomic_t wakeup; /* needs a wakeup */ | ||
459 | atomic_t lost; /* nr records lost */ | ||
460 | |||
461 | struct perf_counter_mmap_page *user_page; | ||
462 | void *data_pages[0]; | ||
463 | }; | ||
464 | |||
465 | struct perf_pending_entry { | ||
466 | struct perf_pending_entry *next; | ||
467 | void (*func)(struct perf_pending_entry *); | ||
468 | }; | ||
469 | |||
470 | /** | ||
471 | * struct perf_counter - performance counter kernel representation: | ||
472 | */ | ||
473 | struct perf_counter { | ||
474 | #ifdef CONFIG_PERF_COUNTERS | ||
475 | struct list_head list_entry; | ||
476 | struct list_head event_entry; | ||
477 | struct list_head sibling_list; | ||
478 | int nr_siblings; | ||
479 | struct perf_counter *group_leader; | ||
480 | const struct pmu *pmu; | ||
481 | |||
482 | enum perf_counter_active_state state; | ||
483 | atomic64_t count; | ||
484 | |||
485 | /* | ||
486 | * These are the total time in nanoseconds that the counter | ||
487 | * has been enabled (i.e. eligible to run, and the task has | ||
488 | * been scheduled in, if this is a per-task counter) | ||
489 | * and running (scheduled onto the CPU), respectively. | ||
490 | * | ||
491 | * They are computed from tstamp_enabled, tstamp_running and | ||
492 | * tstamp_stopped when the counter is in INACTIVE or ACTIVE state. | ||
493 | */ | ||
494 | u64 total_time_enabled; | ||
495 | u64 total_time_running; | ||
496 | |||
497 | /* | ||
498 | * These are timestamps used for computing total_time_enabled | ||
499 | * and total_time_running when the counter is in INACTIVE or | ||
500 | * ACTIVE state, measured in nanoseconds from an arbitrary point | ||
501 | * in time. | ||
502 | * tstamp_enabled: the notional time when the counter was enabled | ||
503 | * tstamp_running: the notional time when the counter was scheduled on | ||
504 | * tstamp_stopped: in INACTIVE state, the notional time when the | ||
505 | * counter was scheduled off. | ||
506 | */ | ||
507 | u64 tstamp_enabled; | ||
508 | u64 tstamp_running; | ||
509 | u64 tstamp_stopped; | ||
510 | |||
511 | struct perf_counter_attr attr; | ||
512 | struct hw_perf_counter hw; | ||
513 | |||
514 | struct perf_counter_context *ctx; | ||
515 | struct file *filp; | ||
516 | |||
517 | /* | ||
518 | * These accumulate total time (in nanoseconds) that children | ||
519 | * counters have been enabled and running, respectively. | ||
520 | */ | ||
521 | atomic64_t child_total_time_enabled; | ||
522 | atomic64_t child_total_time_running; | ||
523 | |||
524 | /* | ||
525 | * Protect attach/detach and child_list: | ||
526 | */ | ||
527 | struct mutex child_mutex; | ||
528 | struct list_head child_list; | ||
529 | struct perf_counter *parent; | ||
530 | |||
531 | int oncpu; | ||
532 | int cpu; | ||
533 | |||
534 | struct list_head owner_entry; | ||
535 | struct task_struct *owner; | ||
536 | |||
537 | /* mmap bits */ | ||
538 | struct mutex mmap_mutex; | ||
539 | atomic_t mmap_count; | ||
540 | struct perf_mmap_data *data; | ||
541 | |||
542 | /* poll related */ | ||
543 | wait_queue_head_t waitq; | ||
544 | struct fasync_struct *fasync; | ||
545 | |||
546 | /* delayed work for NMIs and such */ | ||
547 | int pending_wakeup; | ||
548 | int pending_kill; | ||
549 | int pending_disable; | ||
550 | struct perf_pending_entry pending; | ||
551 | |||
552 | atomic_t event_limit; | ||
553 | |||
554 | void (*destroy)(struct perf_counter *); | ||
555 | struct rcu_head rcu_head; | ||
556 | |||
557 | struct pid_namespace *ns; | ||
558 | u64 id; | ||
559 | #endif | ||
560 | }; | ||
561 | |||
562 | /** | ||
563 | * struct perf_counter_context - counter context structure | ||
564 | * | ||
565 | * Used as a container for task counters and CPU counters as well: | ||
566 | */ | ||
567 | struct perf_counter_context { | ||
568 | /* | ||
569 | * Protect the states of the counters in the list, | ||
570 | * nr_active, and the list: | ||
571 | */ | ||
572 | spinlock_t lock; | ||
573 | /* | ||
574 | * Protect the list of counters. Locking either mutex or lock | ||
575 | * is sufficient to ensure the list doesn't change; to change | ||
576 | * the list you need to lock both the mutex and the spinlock. | ||
577 | */ | ||
578 | struct mutex mutex; | ||
579 | |||
580 | struct list_head counter_list; | ||
581 | struct list_head event_list; | ||
582 | int nr_counters; | ||
583 | int nr_active; | ||
584 | int is_active; | ||
585 | atomic_t refcount; | ||
586 | struct task_struct *task; | ||
587 | |||
588 | /* | ||
589 | * Context clock, runs when context enabled. | ||
590 | */ | ||
591 | u64 time; | ||
592 | u64 timestamp; | ||
593 | |||
594 | /* | ||
595 | * These fields let us detect when two contexts have both | ||
596 | * been cloned (inherited) from a common ancestor. | ||
597 | */ | ||
598 | struct perf_counter_context *parent_ctx; | ||
599 | u64 parent_gen; | ||
600 | u64 generation; | ||
601 | int pin_count; | ||
602 | struct rcu_head rcu_head; | ||
603 | }; | ||
604 | |||
605 | /** | ||
606 | * struct perf_counter_cpu_context - per cpu counter context structure | ||
607 | */ | ||
608 | struct perf_cpu_context { | ||
609 | struct perf_counter_context ctx; | ||
610 | struct perf_counter_context *task_ctx; | ||
611 | int active_oncpu; | ||
612 | int max_pertask; | ||
613 | int exclusive; | ||
614 | |||
615 | /* | ||
616 | * Recursion avoidance: | ||
617 | * | ||
618 | * task, softirq, irq, nmi context | ||
619 | */ | ||
620 | int recursion[4]; | ||
621 | }; | ||
622 | |||
623 | #ifdef CONFIG_PERF_COUNTERS | ||
624 | 431 | ||
625 | /* | 432 | /* |
626 | * Set by architecture code: | 433 | * In case some app still references the old symbols: |
627 | */ | 434 | */ |
628 | extern int perf_max_counters; | ||
629 | |||
630 | extern const struct pmu *hw_perf_counter_init(struct perf_counter *counter); | ||
631 | |||
632 | extern void perf_counter_task_sched_in(struct task_struct *task, int cpu); | ||
633 | extern void perf_counter_task_sched_out(struct task_struct *task, | ||
634 | struct task_struct *next, int cpu); | ||
635 | extern void perf_counter_task_tick(struct task_struct *task, int cpu); | ||
636 | extern int perf_counter_init_task(struct task_struct *child); | ||
637 | extern void perf_counter_exit_task(struct task_struct *child); | ||
638 | extern void perf_counter_free_task(struct task_struct *task); | ||
639 | extern void set_perf_counter_pending(void); | ||
640 | extern void perf_counter_do_pending(void); | ||
641 | extern void perf_counter_print_debug(void); | ||
642 | extern void __perf_disable(void); | ||
643 | extern bool __perf_enable(void); | ||
644 | extern void perf_disable(void); | ||
645 | extern void perf_enable(void); | ||
646 | extern int perf_counter_task_disable(void); | ||
647 | extern int perf_counter_task_enable(void); | ||
648 | extern int hw_perf_group_sched_in(struct perf_counter *group_leader, | ||
649 | struct perf_cpu_context *cpuctx, | ||
650 | struct perf_counter_context *ctx, int cpu); | ||
651 | extern void perf_counter_update_userpage(struct perf_counter *counter); | ||
652 | |||
653 | struct perf_sample_data { | ||
654 | struct pt_regs *regs; | ||
655 | u64 addr; | ||
656 | u64 period; | ||
657 | }; | ||
658 | 435 | ||
659 | extern int perf_counter_overflow(struct perf_counter *counter, int nmi, | 436 | #define __NR_perf_counter_open __NR_perf_event_open |
660 | struct perf_sample_data *data); | 437 | |
438 | #define PR_TASK_PERF_COUNTERS_DISABLE PR_TASK_PERF_EVENTS_DISABLE | ||
439 | #define PR_TASK_PERF_COUNTERS_ENABLE PR_TASK_PERF_EVENTS_ENABLE | ||
661 | 440 | ||
662 | /* | ||
663 | * Return 1 for a software counter, 0 for a hardware counter | ||
664 | */ | ||
665 | static inline int is_software_counter(struct perf_counter *counter) | ||
666 | { | ||
667 | return (counter->attr.type != PERF_TYPE_RAW) && | ||
668 | (counter->attr.type != PERF_TYPE_HARDWARE) && | ||
669 | (counter->attr.type != PERF_TYPE_HW_CACHE); | ||
670 | } | ||
671 | |||
672 | extern void perf_swcounter_event(u32, u64, int, struct pt_regs *, u64); | ||
673 | |||
674 | extern void __perf_counter_mmap(struct vm_area_struct *vma); | ||
675 | |||
676 | static inline void perf_counter_mmap(struct vm_area_struct *vma) | ||
677 | { | ||
678 | if (vma->vm_flags & VM_EXEC) | ||
679 | __perf_counter_mmap(vma); | ||
680 | } | ||
681 | |||
682 | extern void perf_counter_comm(struct task_struct *tsk); | ||
683 | extern void perf_counter_fork(struct task_struct *tsk); | ||
684 | |||
685 | extern struct perf_callchain_entry *perf_callchain(struct pt_regs *regs); | ||
686 | |||
687 | extern int sysctl_perf_counter_paranoid; | ||
688 | extern int sysctl_perf_counter_mlock; | ||
689 | extern int sysctl_perf_counter_sample_rate; | ||
690 | |||
691 | extern void perf_counter_init(void); | ||
692 | |||
693 | #ifndef perf_misc_flags | ||
694 | #define perf_misc_flags(regs) (user_mode(regs) ? PERF_EVENT_MISC_USER : \ | ||
695 | PERF_EVENT_MISC_KERNEL) | ||
696 | #define perf_instruction_pointer(regs) instruction_pointer(regs) | ||
697 | #endif | ||
698 | |||
699 | #else | ||
700 | static inline void | ||
701 | perf_counter_task_sched_in(struct task_struct *task, int cpu) { } | ||
702 | static inline void | ||
703 | perf_counter_task_sched_out(struct task_struct *task, | ||
704 | struct task_struct *next, int cpu) { } | ||
705 | static inline void | ||
706 | perf_counter_task_tick(struct task_struct *task, int cpu) { } | ||
707 | static inline int perf_counter_init_task(struct task_struct *child) { return 0; } | ||
708 | static inline void perf_counter_exit_task(struct task_struct *child) { } | ||
709 | static inline void perf_counter_free_task(struct task_struct *task) { } | ||
710 | static inline void perf_counter_do_pending(void) { } | ||
711 | static inline void perf_counter_print_debug(void) { } | ||
712 | static inline void perf_disable(void) { } | ||
713 | static inline void perf_enable(void) { } | ||
714 | static inline int perf_counter_task_disable(void) { return -EINVAL; } | ||
715 | static inline int perf_counter_task_enable(void) { return -EINVAL; } | ||
716 | |||
717 | static inline void | ||
718 | perf_swcounter_event(u32 event, u64 nr, int nmi, | ||
719 | struct pt_regs *regs, u64 addr) { } | ||
720 | |||
721 | static inline void perf_counter_mmap(struct vm_area_struct *vma) { } | ||
722 | static inline void perf_counter_comm(struct task_struct *tsk) { } | ||
723 | static inline void perf_counter_fork(struct task_struct *tsk) { } | ||
724 | static inline void perf_counter_init(void) { } | ||
725 | #endif | ||
726 | |||
727 | #endif /* __KERNEL__ */ | ||
728 | #endif /* _LINUX_PERF_COUNTER_H */ | 441 | #endif /* _LINUX_PERF_COUNTER_H */ |
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h new file mode 100644 index 000000000000..acefaf71e6dd --- /dev/null +++ b/include/linux/perf_event.h | |||
@@ -0,0 +1,858 @@ | |||
1 | /* | ||
2 | * Performance events: | ||
3 | * | ||
4 | * Copyright (C) 2008-2009, Thomas Gleixner <tglx@linutronix.de> | ||
5 | * Copyright (C) 2008-2009, Red Hat, Inc., Ingo Molnar | ||
6 | * Copyright (C) 2008-2009, Red Hat, Inc., Peter Zijlstra | ||
7 | * | ||
8 | * Data type definitions, declarations, prototypes. | ||
9 | * | ||
10 | * Started by: Thomas Gleixner and Ingo Molnar | ||
11 | * | ||
12 | * For licencing details see kernel-base/COPYING | ||
13 | */ | ||
14 | #ifndef _LINUX_PERF_EVENT_H | ||
15 | #define _LINUX_PERF_EVENT_H | ||
16 | |||
17 | #include <linux/types.h> | ||
18 | #include <linux/ioctl.h> | ||
19 | #include <asm/byteorder.h> | ||
20 | |||
21 | /* | ||
22 | * User-space ABI bits: | ||
23 | */ | ||
24 | |||
25 | /* | ||
26 | * attr.type | ||
27 | */ | ||
28 | enum perf_type_id { | ||
29 | PERF_TYPE_HARDWARE = 0, | ||
30 | PERF_TYPE_SOFTWARE = 1, | ||
31 | PERF_TYPE_TRACEPOINT = 2, | ||
32 | PERF_TYPE_HW_CACHE = 3, | ||
33 | PERF_TYPE_RAW = 4, | ||
34 | |||
35 | PERF_TYPE_MAX, /* non-ABI */ | ||
36 | }; | ||
37 | |||
38 | /* | ||
39 | * Generalized performance event event_id types, used by the | ||
40 | * attr.event_id parameter of the sys_perf_event_open() | ||
41 | * syscall: | ||
42 | */ | ||
43 | enum perf_hw_id { | ||
44 | /* | ||
45 | * Common hardware events, generalized by the kernel: | ||
46 | */ | ||
47 | PERF_COUNT_HW_CPU_CYCLES = 0, | ||
48 | PERF_COUNT_HW_INSTRUCTIONS = 1, | ||
49 | PERF_COUNT_HW_CACHE_REFERENCES = 2, | ||
50 | PERF_COUNT_HW_CACHE_MISSES = 3, | ||
51 | PERF_COUNT_HW_BRANCH_INSTRUCTIONS = 4, | ||
52 | PERF_COUNT_HW_BRANCH_MISSES = 5, | ||
53 | PERF_COUNT_HW_BUS_CYCLES = 6, | ||
54 | |||
55 | PERF_COUNT_HW_MAX, /* non-ABI */ | ||
56 | }; | ||
57 | |||
58 | /* | ||
59 | * Generalized hardware cache events: | ||
60 | * | ||
61 | * { L1-D, L1-I, LLC, ITLB, DTLB, BPU } x | ||
62 | * { read, write, prefetch } x | ||
63 | * { accesses, misses } | ||
64 | */ | ||
65 | enum perf_hw_cache_id { | ||
66 | PERF_COUNT_HW_CACHE_L1D = 0, | ||
67 | PERF_COUNT_HW_CACHE_L1I = 1, | ||
68 | PERF_COUNT_HW_CACHE_LL = 2, | ||
69 | PERF_COUNT_HW_CACHE_DTLB = 3, | ||
70 | PERF_COUNT_HW_CACHE_ITLB = 4, | ||
71 | PERF_COUNT_HW_CACHE_BPU = 5, | ||
72 | |||
73 | PERF_COUNT_HW_CACHE_MAX, /* non-ABI */ | ||
74 | }; | ||
75 | |||
76 | enum perf_hw_cache_op_id { | ||
77 | PERF_COUNT_HW_CACHE_OP_READ = 0, | ||
78 | PERF_COUNT_HW_CACHE_OP_WRITE = 1, | ||
79 | PERF_COUNT_HW_CACHE_OP_PREFETCH = 2, | ||
80 | |||
81 | PERF_COUNT_HW_CACHE_OP_MAX, /* non-ABI */ | ||
82 | }; | ||
83 | |||
84 | enum perf_hw_cache_op_result_id { | ||
85 | PERF_COUNT_HW_CACHE_RESULT_ACCESS = 0, | ||
86 | PERF_COUNT_HW_CACHE_RESULT_MISS = 1, | ||
87 | |||
88 | PERF_COUNT_HW_CACHE_RESULT_MAX, /* non-ABI */ | ||
89 | }; | ||
90 | |||
91 | /* | ||
92 | * Special "software" events provided by the kernel, even if the hardware | ||
93 | * does not support performance events. These events measure various | ||
94 | * physical and sw events of the kernel (and allow the profiling of them as | ||
95 | * well): | ||
96 | */ | ||
97 | enum perf_sw_ids { | ||
98 | PERF_COUNT_SW_CPU_CLOCK = 0, | ||
99 | PERF_COUNT_SW_TASK_CLOCK = 1, | ||
100 | PERF_COUNT_SW_PAGE_FAULTS = 2, | ||
101 | PERF_COUNT_SW_CONTEXT_SWITCHES = 3, | ||
102 | PERF_COUNT_SW_CPU_MIGRATIONS = 4, | ||
103 | PERF_COUNT_SW_PAGE_FAULTS_MIN = 5, | ||
104 | PERF_COUNT_SW_PAGE_FAULTS_MAJ = 6, | ||
105 | |||
106 | PERF_COUNT_SW_MAX, /* non-ABI */ | ||
107 | }; | ||
108 | |||
109 | /* | ||
110 | * Bits that can be set in attr.sample_type to request information | ||
111 | * in the overflow packets. | ||
112 | */ | ||
113 | enum perf_event_sample_format { | ||
114 | PERF_SAMPLE_IP = 1U << 0, | ||
115 | PERF_SAMPLE_TID = 1U << 1, | ||
116 | PERF_SAMPLE_TIME = 1U << 2, | ||
117 | PERF_SAMPLE_ADDR = 1U << 3, | ||
118 | PERF_SAMPLE_READ = 1U << 4, | ||
119 | PERF_SAMPLE_CALLCHAIN = 1U << 5, | ||
120 | PERF_SAMPLE_ID = 1U << 6, | ||
121 | PERF_SAMPLE_CPU = 1U << 7, | ||
122 | PERF_SAMPLE_PERIOD = 1U << 8, | ||
123 | PERF_SAMPLE_STREAM_ID = 1U << 9, | ||
124 | PERF_SAMPLE_RAW = 1U << 10, | ||
125 | |||
126 | PERF_SAMPLE_MAX = 1U << 11, /* non-ABI */ | ||
127 | }; | ||
128 | |||
129 | /* | ||
130 | * The format of the data returned by read() on a perf event fd, | ||
131 | * as specified by attr.read_format: | ||
132 | * | ||
133 | * struct read_format { | ||
134 | * { u64 value; | ||
135 | * { u64 time_enabled; } && PERF_FORMAT_ENABLED | ||
136 | * { u64 time_running; } && PERF_FORMAT_RUNNING | ||
137 | * { u64 id; } && PERF_FORMAT_ID | ||
138 | * } && !PERF_FORMAT_GROUP | ||
139 | * | ||
140 | * { u64 nr; | ||
141 | * { u64 time_enabled; } && PERF_FORMAT_ENABLED | ||
142 | * { u64 time_running; } && PERF_FORMAT_RUNNING | ||
143 | * { u64 value; | ||
144 | * { u64 id; } && PERF_FORMAT_ID | ||
145 | * } cntr[nr]; | ||
146 | * } && PERF_FORMAT_GROUP | ||
147 | * }; | ||
148 | */ | ||
149 | enum perf_event_read_format { | ||
150 | PERF_FORMAT_TOTAL_TIME_ENABLED = 1U << 0, | ||
151 | PERF_FORMAT_TOTAL_TIME_RUNNING = 1U << 1, | ||
152 | PERF_FORMAT_ID = 1U << 2, | ||
153 | PERF_FORMAT_GROUP = 1U << 3, | ||
154 | |||
155 | PERF_FORMAT_MAX = 1U << 4, /* non-ABI */ | ||
156 | }; | ||
157 | |||
158 | #define PERF_ATTR_SIZE_VER0 64 /* sizeof first published struct */ | ||
159 | |||
160 | /* | ||
161 | * Hardware event_id to monitor via a performance monitoring event: | ||
162 | */ | ||
163 | struct perf_event_attr { | ||
164 | |||
165 | /* | ||
166 | * Major type: hardware/software/tracepoint/etc. | ||
167 | */ | ||
168 | __u32 type; | ||
169 | |||
170 | /* | ||
171 | * Size of the attr structure, for fwd/bwd compat. | ||
172 | */ | ||
173 | __u32 size; | ||
174 | |||
175 | /* | ||
176 | * Type specific configuration information. | ||
177 | */ | ||
178 | __u64 config; | ||
179 | |||
180 | union { | ||
181 | __u64 sample_period; | ||
182 | __u64 sample_freq; | ||
183 | }; | ||
184 | |||
185 | __u64 sample_type; | ||
186 | __u64 read_format; | ||
187 | |||
188 | __u64 disabled : 1, /* off by default */ | ||
189 | inherit : 1, /* children inherit it */ | ||
190 | pinned : 1, /* must always be on PMU */ | ||
191 | exclusive : 1, /* only group on PMU */ | ||
192 | exclude_user : 1, /* don't count user */ | ||
193 | exclude_kernel : 1, /* ditto kernel */ | ||
194 | exclude_hv : 1, /* ditto hypervisor */ | ||
195 | exclude_idle : 1, /* don't count when idle */ | ||
196 | mmap : 1, /* include mmap data */ | ||
197 | comm : 1, /* include comm data */ | ||
198 | freq : 1, /* use freq, not period */ | ||
199 | inherit_stat : 1, /* per task counts */ | ||
200 | enable_on_exec : 1, /* next exec enables */ | ||
201 | task : 1, /* trace fork/exit */ | ||
202 | watermark : 1, /* wakeup_watermark */ | ||
203 | |||
204 | __reserved_1 : 49; | ||
205 | |||
206 | union { | ||
207 | __u32 wakeup_events; /* wakeup every n events */ | ||
208 | __u32 wakeup_watermark; /* bytes before wakeup */ | ||
209 | }; | ||
210 | __u32 __reserved_2; | ||
211 | |||
212 | __u64 __reserved_3; | ||
213 | }; | ||
214 | |||
215 | /* | ||
216 | * Ioctls that can be done on a perf event fd: | ||
217 | */ | ||
218 | #define PERF_EVENT_IOC_ENABLE _IO ('$', 0) | ||
219 | #define PERF_EVENT_IOC_DISABLE _IO ('$', 1) | ||
220 | #define PERF_EVENT_IOC_REFRESH _IO ('$', 2) | ||
221 | #define PERF_EVENT_IOC_RESET _IO ('$', 3) | ||
222 | #define PERF_EVENT_IOC_PERIOD _IOW('$', 4, u64) | ||
223 | #define PERF_EVENT_IOC_SET_OUTPUT _IO ('$', 5) | ||
224 | |||
225 | enum perf_event_ioc_flags { | ||
226 | PERF_IOC_FLAG_GROUP = 1U << 0, | ||
227 | }; | ||
228 | |||
229 | /* | ||
230 | * Structure of the page that can be mapped via mmap | ||
231 | */ | ||
232 | struct perf_event_mmap_page { | ||
233 | __u32 version; /* version number of this structure */ | ||
234 | __u32 compat_version; /* lowest version this is compat with */ | ||
235 | |||
236 | /* | ||
237 | * Bits needed to read the hw events in user-space. | ||
238 | * | ||
239 | * u32 seq; | ||
240 | * s64 count; | ||
241 | * | ||
242 | * do { | ||
243 | * seq = pc->lock; | ||
244 | * | ||
245 | * barrier() | ||
246 | * if (pc->index) { | ||
247 | * count = pmc_read(pc->index - 1); | ||
248 | * count += pc->offset; | ||
249 | * } else | ||
250 | * goto regular_read; | ||
251 | * | ||
252 | * barrier(); | ||
253 | * } while (pc->lock != seq); | ||
254 | * | ||
255 | * NOTE: for obvious reason this only works on self-monitoring | ||
256 | * processes. | ||
257 | */ | ||
258 | __u32 lock; /* seqlock for synchronization */ | ||
259 | __u32 index; /* hardware event identifier */ | ||
260 | __s64 offset; /* add to hardware event value */ | ||
261 | __u64 time_enabled; /* time event active */ | ||
262 | __u64 time_running; /* time event on cpu */ | ||
263 | |||
264 | /* | ||
265 | * Hole for extension of the self monitor capabilities | ||
266 | */ | ||
267 | |||
268 | __u64 __reserved[123]; /* align to 1k */ | ||
269 | |||
270 | /* | ||
271 | * Control data for the mmap() data buffer. | ||
272 | * | ||
273 | * User-space reading the @data_head value should issue an rmb(), on | ||
274 | * SMP capable platforms, after reading this value -- see | ||
275 | * perf_event_wakeup(). | ||
276 | * | ||
277 | * When the mapping is PROT_WRITE the @data_tail value should be | ||
278 | * written by userspace to reflect the last read data. In this case | ||
279 | * the kernel will not over-write unread data. | ||
280 | */ | ||
281 | __u64 data_head; /* head in the data section */ | ||
282 | __u64 data_tail; /* user-space written tail */ | ||
283 | }; | ||
284 | |||
285 | #define PERF_RECORD_MISC_CPUMODE_MASK (3 << 0) | ||
286 | #define PERF_RECORD_MISC_CPUMODE_UNKNOWN (0 << 0) | ||
287 | #define PERF_RECORD_MISC_KERNEL (1 << 0) | ||
288 | #define PERF_RECORD_MISC_USER (2 << 0) | ||
289 | #define PERF_RECORD_MISC_HYPERVISOR (3 << 0) | ||
290 | |||
291 | struct perf_event_header { | ||
292 | __u32 type; | ||
293 | __u16 misc; | ||
294 | __u16 size; | ||
295 | }; | ||
296 | |||
297 | enum perf_event_type { | ||
298 | |||
299 | /* | ||
300 | * The MMAP events record the PROT_EXEC mappings so that we can | ||
301 | * correlate userspace IPs to code. They have the following structure: | ||
302 | * | ||
303 | * struct { | ||
304 | * struct perf_event_header header; | ||
305 | * | ||
306 | * u32 pid, tid; | ||
307 | * u64 addr; | ||
308 | * u64 len; | ||
309 | * u64 pgoff; | ||
310 | * char filename[]; | ||
311 | * }; | ||
312 | */ | ||
313 | PERF_RECORD_MMAP = 1, | ||
314 | |||
315 | /* | ||
316 | * struct { | ||
317 | * struct perf_event_header header; | ||
318 | * u64 id; | ||
319 | * u64 lost; | ||
320 | * }; | ||
321 | */ | ||
322 | PERF_RECORD_LOST = 2, | ||
323 | |||
324 | /* | ||
325 | * struct { | ||
326 | * struct perf_event_header header; | ||
327 | * | ||
328 | * u32 pid, tid; | ||
329 | * char comm[]; | ||
330 | * }; | ||
331 | */ | ||
332 | PERF_RECORD_COMM = 3, | ||
333 | |||
334 | /* | ||
335 | * struct { | ||
336 | * struct perf_event_header header; | ||
337 | * u32 pid, ppid; | ||
338 | * u32 tid, ptid; | ||
339 | * u64 time; | ||
340 | * }; | ||
341 | */ | ||
342 | PERF_RECORD_EXIT = 4, | ||
343 | |||
344 | /* | ||
345 | * struct { | ||
346 | * struct perf_event_header header; | ||
347 | * u64 time; | ||
348 | * u64 id; | ||
349 | * u64 stream_id; | ||
350 | * }; | ||
351 | */ | ||
352 | PERF_RECORD_THROTTLE = 5, | ||
353 | PERF_RECORD_UNTHROTTLE = 6, | ||
354 | |||
355 | /* | ||
356 | * struct { | ||
357 | * struct perf_event_header header; | ||
358 | * u32 pid, ppid; | ||
359 | * u32 tid, ptid; | ||
360 | * { u64 time; } && PERF_SAMPLE_TIME | ||
361 | * }; | ||
362 | */ | ||
363 | PERF_RECORD_FORK = 7, | ||
364 | |||
365 | /* | ||
366 | * struct { | ||
367 | * struct perf_event_header header; | ||
368 | * u32 pid, tid; | ||
369 | * | ||
370 | * struct read_format values; | ||
371 | * }; | ||
372 | */ | ||
373 | PERF_RECORD_READ = 8, | ||
374 | |||
375 | /* | ||
376 | * struct { | ||
377 | * struct perf_event_header header; | ||
378 | * | ||
379 | * { u64 ip; } && PERF_SAMPLE_IP | ||
380 | * { u32 pid, tid; } && PERF_SAMPLE_TID | ||
381 | * { u64 time; } && PERF_SAMPLE_TIME | ||
382 | * { u64 addr; } && PERF_SAMPLE_ADDR | ||
383 | * { u64 id; } && PERF_SAMPLE_ID | ||
384 | * { u64 stream_id;} && PERF_SAMPLE_STREAM_ID | ||
385 | * { u32 cpu, res; } && PERF_SAMPLE_CPU | ||
386 | * { u64 period; } && PERF_SAMPLE_PERIOD | ||
387 | * | ||
388 | * { struct read_format values; } && PERF_SAMPLE_READ | ||
389 | * | ||
390 | * { u64 nr, | ||
391 | * u64 ips[nr]; } && PERF_SAMPLE_CALLCHAIN | ||
392 | * | ||
393 | * # | ||
394 | * # The RAW record below is opaque data wrt the ABI | ||
395 | * # | ||
396 | * # That is, the ABI doesn't make any promises wrt to | ||
397 | * # the stability of its content, it may vary depending | ||
398 | * # on event, hardware, kernel version and phase of | ||
399 | * # the moon. | ||
400 | * # | ||
401 | * # In other words, PERF_SAMPLE_RAW contents are not an ABI. | ||
402 | * # | ||
403 | * | ||
404 | * { u32 size; | ||
405 | * char data[size];}&& PERF_SAMPLE_RAW | ||
406 | * }; | ||
407 | */ | ||
408 | PERF_RECORD_SAMPLE = 9, | ||
409 | |||
410 | PERF_RECORD_MAX, /* non-ABI */ | ||
411 | }; | ||
412 | |||
413 | enum perf_callchain_context { | ||
414 | PERF_CONTEXT_HV = (__u64)-32, | ||
415 | PERF_CONTEXT_KERNEL = (__u64)-128, | ||
416 | PERF_CONTEXT_USER = (__u64)-512, | ||
417 | |||
418 | PERF_CONTEXT_GUEST = (__u64)-2048, | ||
419 | PERF_CONTEXT_GUEST_KERNEL = (__u64)-2176, | ||
420 | PERF_CONTEXT_GUEST_USER = (__u64)-2560, | ||
421 | |||
422 | PERF_CONTEXT_MAX = (__u64)-4095, | ||
423 | }; | ||
424 | |||
425 | #define PERF_FLAG_FD_NO_GROUP (1U << 0) | ||
426 | #define PERF_FLAG_FD_OUTPUT (1U << 1) | ||
427 | |||
428 | #ifdef __KERNEL__ | ||
429 | /* | ||
430 | * Kernel-internal data types and definitions: | ||
431 | */ | ||
432 | |||
433 | #ifdef CONFIG_PERF_EVENTS | ||
434 | # include <asm/perf_event.h> | ||
435 | #endif | ||
436 | |||
437 | #include <linux/list.h> | ||
438 | #include <linux/mutex.h> | ||
439 | #include <linux/rculist.h> | ||
440 | #include <linux/rcupdate.h> | ||
441 | #include <linux/spinlock.h> | ||
442 | #include <linux/hrtimer.h> | ||
443 | #include <linux/fs.h> | ||
444 | #include <linux/pid_namespace.h> | ||
445 | #include <asm/atomic.h> | ||
446 | |||
447 | #define PERF_MAX_STACK_DEPTH 255 | ||
448 | |||
449 | struct perf_callchain_entry { | ||
450 | __u64 nr; | ||
451 | __u64 ip[PERF_MAX_STACK_DEPTH]; | ||
452 | }; | ||
453 | |||
454 | struct perf_raw_record { | ||
455 | u32 size; | ||
456 | void *data; | ||
457 | }; | ||
458 | |||
459 | struct task_struct; | ||
460 | |||
461 | /** | ||
462 | * struct hw_perf_event - performance event hardware details: | ||
463 | */ | ||
464 | struct hw_perf_event { | ||
465 | #ifdef CONFIG_PERF_EVENTS | ||
466 | union { | ||
467 | struct { /* hardware */ | ||
468 | u64 config; | ||
469 | unsigned long config_base; | ||
470 | unsigned long event_base; | ||
471 | int idx; | ||
472 | }; | ||
473 | union { /* software */ | ||
474 | atomic64_t count; | ||
475 | struct hrtimer hrtimer; | ||
476 | }; | ||
477 | }; | ||
478 | atomic64_t prev_count; | ||
479 | u64 sample_period; | ||
480 | u64 last_period; | ||
481 | atomic64_t period_left; | ||
482 | u64 interrupts; | ||
483 | |||
484 | u64 freq_count; | ||
485 | u64 freq_interrupts; | ||
486 | u64 freq_stamp; | ||
487 | #endif | ||
488 | }; | ||
489 | |||
490 | struct perf_event; | ||
491 | |||
492 | /** | ||
493 | * struct pmu - generic performance monitoring unit | ||
494 | */ | ||
495 | struct pmu { | ||
496 | int (*enable) (struct perf_event *event); | ||
497 | void (*disable) (struct perf_event *event); | ||
498 | void (*read) (struct perf_event *event); | ||
499 | void (*unthrottle) (struct perf_event *event); | ||
500 | }; | ||
501 | |||
502 | /** | ||
503 | * enum perf_event_active_state - the states of a event | ||
504 | */ | ||
505 | enum perf_event_active_state { | ||
506 | PERF_EVENT_STATE_ERROR = -2, | ||
507 | PERF_EVENT_STATE_OFF = -1, | ||
508 | PERF_EVENT_STATE_INACTIVE = 0, | ||
509 | PERF_EVENT_STATE_ACTIVE = 1, | ||
510 | }; | ||
511 | |||
512 | struct file; | ||
513 | |||
514 | struct perf_mmap_data { | ||
515 | struct rcu_head rcu_head; | ||
516 | int nr_pages; /* nr of data pages */ | ||
517 | int writable; /* are we writable */ | ||
518 | int nr_locked; /* nr pages mlocked */ | ||
519 | |||
520 | atomic_t poll; /* POLL_ for wakeups */ | ||
521 | atomic_t events; /* event_id limit */ | ||
522 | |||
523 | atomic_long_t head; /* write position */ | ||
524 | atomic_long_t done_head; /* completed head */ | ||
525 | |||
526 | atomic_t lock; /* concurrent writes */ | ||
527 | atomic_t wakeup; /* needs a wakeup */ | ||
528 | atomic_t lost; /* nr records lost */ | ||
529 | |||
530 | long watermark; /* wakeup watermark */ | ||
531 | |||
532 | struct perf_event_mmap_page *user_page; | ||
533 | void *data_pages[0]; | ||
534 | }; | ||
535 | |||
536 | struct perf_pending_entry { | ||
537 | struct perf_pending_entry *next; | ||
538 | void (*func)(struct perf_pending_entry *); | ||
539 | }; | ||
540 | |||
541 | /** | ||
542 | * struct perf_event - performance event kernel representation: | ||
543 | */ | ||
544 | struct perf_event { | ||
545 | #ifdef CONFIG_PERF_EVENTS | ||
546 | struct list_head group_entry; | ||
547 | struct list_head event_entry; | ||
548 | struct list_head sibling_list; | ||
549 | int nr_siblings; | ||
550 | struct perf_event *group_leader; | ||
551 | struct perf_event *output; | ||
552 | const struct pmu *pmu; | ||
553 | |||
554 | enum perf_event_active_state state; | ||
555 | atomic64_t count; | ||
556 | |||
557 | /* | ||
558 | * These are the total time in nanoseconds that the event | ||
559 | * has been enabled (i.e. eligible to run, and the task has | ||
560 | * been scheduled in, if this is a per-task event) | ||
561 | * and running (scheduled onto the CPU), respectively. | ||
562 | * | ||
563 | * They are computed from tstamp_enabled, tstamp_running and | ||
564 | * tstamp_stopped when the event is in INACTIVE or ACTIVE state. | ||
565 | */ | ||
566 | u64 total_time_enabled; | ||
567 | u64 total_time_running; | ||
568 | |||
569 | /* | ||
570 | * These are timestamps used for computing total_time_enabled | ||
571 | * and total_time_running when the event is in INACTIVE or | ||
572 | * ACTIVE state, measured in nanoseconds from an arbitrary point | ||
573 | * in time. | ||
574 | * tstamp_enabled: the notional time when the event was enabled | ||
575 | * tstamp_running: the notional time when the event was scheduled on | ||
576 | * tstamp_stopped: in INACTIVE state, the notional time when the | ||
577 | * event was scheduled off. | ||
578 | */ | ||
579 | u64 tstamp_enabled; | ||
580 | u64 tstamp_running; | ||
581 | u64 tstamp_stopped; | ||
582 | |||
583 | struct perf_event_attr attr; | ||
584 | struct hw_perf_event hw; | ||
585 | |||
586 | struct perf_event_context *ctx; | ||
587 | struct file *filp; | ||
588 | |||
589 | /* | ||
590 | * These accumulate total time (in nanoseconds) that children | ||
591 | * events have been enabled and running, respectively. | ||
592 | */ | ||
593 | atomic64_t child_total_time_enabled; | ||
594 | atomic64_t child_total_time_running; | ||
595 | |||
596 | /* | ||
597 | * Protect attach/detach and child_list: | ||
598 | */ | ||
599 | struct mutex child_mutex; | ||
600 | struct list_head child_list; | ||
601 | struct perf_event *parent; | ||
602 | |||
603 | int oncpu; | ||
604 | int cpu; | ||
605 | |||
606 | struct list_head owner_entry; | ||
607 | struct task_struct *owner; | ||
608 | |||
609 | /* mmap bits */ | ||
610 | struct mutex mmap_mutex; | ||
611 | atomic_t mmap_count; | ||
612 | struct perf_mmap_data *data; | ||
613 | |||
614 | /* poll related */ | ||
615 | wait_queue_head_t waitq; | ||
616 | struct fasync_struct *fasync; | ||
617 | |||
618 | /* delayed work for NMIs and such */ | ||
619 | int pending_wakeup; | ||
620 | int pending_kill; | ||
621 | int pending_disable; | ||
622 | struct perf_pending_entry pending; | ||
623 | |||
624 | atomic_t event_limit; | ||
625 | |||
626 | void (*destroy)(struct perf_event *); | ||
627 | struct rcu_head rcu_head; | ||
628 | |||
629 | struct pid_namespace *ns; | ||
630 | u64 id; | ||
631 | #endif | ||
632 | }; | ||
633 | |||
634 | /** | ||
635 | * struct perf_event_context - event context structure | ||
636 | * | ||
637 | * Used as a container for task events and CPU events as well: | ||
638 | */ | ||
639 | struct perf_event_context { | ||
640 | /* | ||
641 | * Protect the states of the events in the list, | ||
642 | * nr_active, and the list: | ||
643 | */ | ||
644 | spinlock_t lock; | ||
645 | /* | ||
646 | * Protect the list of events. Locking either mutex or lock | ||
647 | * is sufficient to ensure the list doesn't change; to change | ||
648 | * the list you need to lock both the mutex and the spinlock. | ||
649 | */ | ||
650 | struct mutex mutex; | ||
651 | |||
652 | struct list_head group_list; | ||
653 | struct list_head event_list; | ||
654 | int nr_events; | ||
655 | int nr_active; | ||
656 | int is_active; | ||
657 | int nr_stat; | ||
658 | atomic_t refcount; | ||
659 | struct task_struct *task; | ||
660 | |||
661 | /* | ||
662 | * Context clock, runs when context enabled. | ||
663 | */ | ||
664 | u64 time; | ||
665 | u64 timestamp; | ||
666 | |||
667 | /* | ||
668 | * These fields let us detect when two contexts have both | ||
669 | * been cloned (inherited) from a common ancestor. | ||
670 | */ | ||
671 | struct perf_event_context *parent_ctx; | ||
672 | u64 parent_gen; | ||
673 | u64 generation; | ||
674 | int pin_count; | ||
675 | struct rcu_head rcu_head; | ||
676 | }; | ||
677 | |||
678 | /** | ||
679 | * struct perf_event_cpu_context - per cpu event context structure | ||
680 | */ | ||
681 | struct perf_cpu_context { | ||
682 | struct perf_event_context ctx; | ||
683 | struct perf_event_context *task_ctx; | ||
684 | int active_oncpu; | ||
685 | int max_pertask; | ||
686 | int exclusive; | ||
687 | |||
688 | /* | ||
689 | * Recursion avoidance: | ||
690 | * | ||
691 | * task, softirq, irq, nmi context | ||
692 | */ | ||
693 | int recursion[4]; | ||
694 | }; | ||
695 | |||
696 | struct perf_output_handle { | ||
697 | struct perf_event *event; | ||
698 | struct perf_mmap_data *data; | ||
699 | unsigned long head; | ||
700 | unsigned long offset; | ||
701 | int nmi; | ||
702 | int sample; | ||
703 | int locked; | ||
704 | unsigned long flags; | ||
705 | }; | ||
706 | |||
707 | #ifdef CONFIG_PERF_EVENTS | ||
708 | |||
709 | /* | ||
710 | * Set by architecture code: | ||
711 | */ | ||
712 | extern int perf_max_events; | ||
713 | |||
714 | extern const struct pmu *hw_perf_event_init(struct perf_event *event); | ||
715 | |||
716 | extern void perf_event_task_sched_in(struct task_struct *task, int cpu); | ||
717 | extern void perf_event_task_sched_out(struct task_struct *task, | ||
718 | struct task_struct *next, int cpu); | ||
719 | extern void perf_event_task_tick(struct task_struct *task, int cpu); | ||
720 | extern int perf_event_init_task(struct task_struct *child); | ||
721 | extern void perf_event_exit_task(struct task_struct *child); | ||
722 | extern void perf_event_free_task(struct task_struct *task); | ||
723 | extern void set_perf_event_pending(void); | ||
724 | extern void perf_event_do_pending(void); | ||
725 | extern void perf_event_print_debug(void); | ||
726 | extern void __perf_disable(void); | ||
727 | extern bool __perf_enable(void); | ||
728 | extern void perf_disable(void); | ||
729 | extern void perf_enable(void); | ||
730 | extern int perf_event_task_disable(void); | ||
731 | extern int perf_event_task_enable(void); | ||
732 | extern int hw_perf_group_sched_in(struct perf_event *group_leader, | ||
733 | struct perf_cpu_context *cpuctx, | ||
734 | struct perf_event_context *ctx, int cpu); | ||
735 | extern void perf_event_update_userpage(struct perf_event *event); | ||
736 | |||
737 | struct perf_sample_data { | ||
738 | u64 type; | ||
739 | |||
740 | u64 ip; | ||
741 | struct { | ||
742 | u32 pid; | ||
743 | u32 tid; | ||
744 | } tid_entry; | ||
745 | u64 time; | ||
746 | u64 addr; | ||
747 | u64 id; | ||
748 | u64 stream_id; | ||
749 | struct { | ||
750 | u32 cpu; | ||
751 | u32 reserved; | ||
752 | } cpu_entry; | ||
753 | u64 period; | ||
754 | struct perf_callchain_entry *callchain; | ||
755 | struct perf_raw_record *raw; | ||
756 | }; | ||
757 | |||
758 | extern void perf_output_sample(struct perf_output_handle *handle, | ||
759 | struct perf_event_header *header, | ||
760 | struct perf_sample_data *data, | ||
761 | struct perf_event *event); | ||
762 | extern void perf_prepare_sample(struct perf_event_header *header, | ||
763 | struct perf_sample_data *data, | ||
764 | struct perf_event *event, | ||
765 | struct pt_regs *regs); | ||
766 | |||
767 | extern int perf_event_overflow(struct perf_event *event, int nmi, | ||
768 | struct perf_sample_data *data, | ||
769 | struct pt_regs *regs); | ||
770 | |||
771 | /* | ||
772 | * Return 1 for a software event, 0 for a hardware event | ||
773 | */ | ||
774 | static inline int is_software_event(struct perf_event *event) | ||
775 | { | ||
776 | return (event->attr.type != PERF_TYPE_RAW) && | ||
777 | (event->attr.type != PERF_TYPE_HARDWARE) && | ||
778 | (event->attr.type != PERF_TYPE_HW_CACHE); | ||
779 | } | ||
780 | |||
781 | extern atomic_t perf_swevent_enabled[PERF_COUNT_SW_MAX]; | ||
782 | |||
783 | extern void __perf_sw_event(u32, u64, int, struct pt_regs *, u64); | ||
784 | |||
785 | static inline void | ||
786 | perf_sw_event(u32 event_id, u64 nr, int nmi, struct pt_regs *regs, u64 addr) | ||
787 | { | ||
788 | if (atomic_read(&perf_swevent_enabled[event_id])) | ||
789 | __perf_sw_event(event_id, nr, nmi, regs, addr); | ||
790 | } | ||
791 | |||
792 | extern void __perf_event_mmap(struct vm_area_struct *vma); | ||
793 | |||
794 | static inline void perf_event_mmap(struct vm_area_struct *vma) | ||
795 | { | ||
796 | if (vma->vm_flags & VM_EXEC) | ||
797 | __perf_event_mmap(vma); | ||
798 | } | ||
799 | |||
800 | extern void perf_event_comm(struct task_struct *tsk); | ||
801 | extern void perf_event_fork(struct task_struct *tsk); | ||
802 | |||
803 | extern struct perf_callchain_entry *perf_callchain(struct pt_regs *regs); | ||
804 | |||
805 | extern int sysctl_perf_event_paranoid; | ||
806 | extern int sysctl_perf_event_mlock; | ||
807 | extern int sysctl_perf_event_sample_rate; | ||
808 | |||
809 | extern void perf_event_init(void); | ||
810 | extern void perf_tp_event(int event_id, u64 addr, u64 count, | ||
811 | void *record, int entry_size); | ||
812 | |||
813 | #ifndef perf_misc_flags | ||
814 | #define perf_misc_flags(regs) (user_mode(regs) ? PERF_RECORD_MISC_USER : \ | ||
815 | PERF_RECORD_MISC_KERNEL) | ||
816 | #define perf_instruction_pointer(regs) instruction_pointer(regs) | ||
817 | #endif | ||
818 | |||
819 | extern int perf_output_begin(struct perf_output_handle *handle, | ||
820 | struct perf_event *event, unsigned int size, | ||
821 | int nmi, int sample); | ||
822 | extern void perf_output_end(struct perf_output_handle *handle); | ||
823 | extern void perf_output_copy(struct perf_output_handle *handle, | ||
824 | const void *buf, unsigned int len); | ||
825 | #else | ||
826 | static inline void | ||
827 | perf_event_task_sched_in(struct task_struct *task, int cpu) { } | ||
828 | static inline void | ||
829 | perf_event_task_sched_out(struct task_struct *task, | ||
830 | struct task_struct *next, int cpu) { } | ||
831 | static inline void | ||
832 | perf_event_task_tick(struct task_struct *task, int cpu) { } | ||
833 | static inline int perf_event_init_task(struct task_struct *child) { return 0; } | ||
834 | static inline void perf_event_exit_task(struct task_struct *child) { } | ||
835 | static inline void perf_event_free_task(struct task_struct *task) { } | ||
836 | static inline void perf_event_do_pending(void) { } | ||
837 | static inline void perf_event_print_debug(void) { } | ||
838 | static inline void perf_disable(void) { } | ||
839 | static inline void perf_enable(void) { } | ||
840 | static inline int perf_event_task_disable(void) { return -EINVAL; } | ||
841 | static inline int perf_event_task_enable(void) { return -EINVAL; } | ||
842 | |||
843 | static inline void | ||
844 | perf_sw_event(u32 event_id, u64 nr, int nmi, | ||
845 | struct pt_regs *regs, u64 addr) { } | ||
846 | |||
847 | static inline void perf_event_mmap(struct vm_area_struct *vma) { } | ||
848 | static inline void perf_event_comm(struct task_struct *tsk) { } | ||
849 | static inline void perf_event_fork(struct task_struct *tsk) { } | ||
850 | static inline void perf_event_init(void) { } | ||
851 | |||
852 | #endif | ||
853 | |||
854 | #define perf_output_put(handle, x) \ | ||
855 | perf_output_copy((handle), &(x), sizeof(x)) | ||
856 | |||
857 | #endif /* __KERNEL__ */ | ||
858 | #endif /* _LINUX_PERF_EVENT_H */ | ||
diff --git a/include/linux/personality.h b/include/linux/personality.h index a84e9ff9b27e..126120819a0d 100644 --- a/include/linux/personality.h +++ b/include/linux/personality.h | |||
@@ -40,7 +40,10 @@ enum { | |||
40 | * Security-relevant compatibility flags that must be | 40 | * Security-relevant compatibility flags that must be |
41 | * cleared upon setuid or setgid exec: | 41 | * cleared upon setuid or setgid exec: |
42 | */ | 42 | */ |
43 | #define PER_CLEAR_ON_SETID (READ_IMPLIES_EXEC|ADDR_NO_RANDOMIZE) | 43 | #define PER_CLEAR_ON_SETID (READ_IMPLIES_EXEC | \ |
44 | ADDR_NO_RANDOMIZE | \ | ||
45 | ADDR_COMPAT_LAYOUT | \ | ||
46 | MMAP_PAGE_ZERO) | ||
44 | 47 | ||
45 | /* | 48 | /* |
46 | * Personality types. | 49 | * Personality types. |
diff --git a/include/linux/phonet.h b/include/linux/phonet.h index ee5e3c9e2bca..1ef5a0781831 100644 --- a/include/linux/phonet.h +++ b/include/linux/phonet.h | |||
@@ -99,6 +99,9 @@ struct sockaddr_pn { | |||
99 | __u8 spn_zero[sizeof(struct sockaddr) - sizeof(sa_family_t) - 3]; | 99 | __u8 spn_zero[sizeof(struct sockaddr) - sizeof(sa_family_t) - 3]; |
100 | } __attribute__ ((packed)); | 100 | } __attribute__ ((packed)); |
101 | 101 | ||
102 | /* Well known address */ | ||
103 | #define PN_DEV_PC 0x10 | ||
104 | |||
102 | static inline __u16 pn_object(__u8 addr, __u16 port) | 105 | static inline __u16 pn_object(__u8 addr, __u16 port) |
103 | { | 106 | { |
104 | return (addr << 8) | (port & 0x3ff); | 107 | return (addr << 8) | (port & 0x3ff); |
@@ -170,4 +173,21 @@ static inline __u8 pn_sockaddr_get_resource(const struct sockaddr_pn *spn) | |||
170 | return spn->spn_resource; | 173 | return spn->spn_resource; |
171 | } | 174 | } |
172 | 175 | ||
176 | /* Phonet device ioctl requests */ | ||
177 | #ifdef __KERNEL__ | ||
178 | #define SIOCPNGAUTOCONF (SIOCDEVPRIVATE + 0) | ||
179 | |||
180 | struct if_phonet_autoconf { | ||
181 | uint8_t device; | ||
182 | }; | ||
183 | |||
184 | struct if_phonet_req { | ||
185 | char ifr_phonet_name[16]; | ||
186 | union { | ||
187 | struct if_phonet_autoconf ifru_phonet_autoconf; | ||
188 | } ifr_ifru; | ||
189 | }; | ||
190 | #define ifr_phonet_autoconf ifr_ifru.ifru_phonet_autoconf | ||
191 | #endif /* __KERNEL__ */ | ||
192 | |||
173 | #endif | 193 | #endif |
diff --git a/include/linux/platform_device.h b/include/linux/platform_device.h index 8dc5123b6305..3c6675c2444b 100644 --- a/include/linux/platform_device.h +++ b/include/linux/platform_device.h | |||
@@ -22,6 +22,9 @@ struct platform_device { | |||
22 | struct resource * resource; | 22 | struct resource * resource; |
23 | 23 | ||
24 | struct platform_device_id *id_entry; | 24 | struct platform_device_id *id_entry; |
25 | |||
26 | /* arch specific additions */ | ||
27 | struct pdev_archdata archdata; | ||
25 | }; | 28 | }; |
26 | 29 | ||
27 | #define platform_get_device_id(pdev) ((pdev)->id_entry) | 30 | #define platform_get_device_id(pdev) ((pdev)->id_entry) |
@@ -57,8 +60,6 @@ struct platform_driver { | |||
57 | int (*remove)(struct platform_device *); | 60 | int (*remove)(struct platform_device *); |
58 | void (*shutdown)(struct platform_device *); | 61 | void (*shutdown)(struct platform_device *); |
59 | int (*suspend)(struct platform_device *, pm_message_t state); | 62 | int (*suspend)(struct platform_device *, pm_message_t state); |
60 | int (*suspend_late)(struct platform_device *, pm_message_t state); | ||
61 | int (*resume_early)(struct platform_device *); | ||
62 | int (*resume)(struct platform_device *); | 63 | int (*resume)(struct platform_device *); |
63 | struct device_driver driver; | 64 | struct device_driver driver; |
64 | struct platform_device_id *id_table; | 65 | struct platform_device_id *id_table; |
diff --git a/include/linux/pm.h b/include/linux/pm.h index b3f74764a586..3b7e04b95bd2 100644 --- a/include/linux/pm.h +++ b/include/linux/pm.h | |||
@@ -22,6 +22,10 @@ | |||
22 | #define _LINUX_PM_H | 22 | #define _LINUX_PM_H |
23 | 23 | ||
24 | #include <linux/list.h> | 24 | #include <linux/list.h> |
25 | #include <linux/workqueue.h> | ||
26 | #include <linux/spinlock.h> | ||
27 | #include <linux/wait.h> | ||
28 | #include <linux/timer.h> | ||
25 | 29 | ||
26 | /* | 30 | /* |
27 | * Callbacks for platform drivers to implement. | 31 | * Callbacks for platform drivers to implement. |
@@ -165,6 +169,28 @@ typedef struct pm_message { | |||
165 | * It is allowed to unregister devices while the above callbacks are being | 169 | * It is allowed to unregister devices while the above callbacks are being |
166 | * executed. However, it is not allowed to unregister a device from within any | 170 | * executed. However, it is not allowed to unregister a device from within any |
167 | * of its own callbacks. | 171 | * of its own callbacks. |
172 | * | ||
173 | * There also are the following callbacks related to run-time power management | ||
174 | * of devices: | ||
175 | * | ||
176 | * @runtime_suspend: Prepare the device for a condition in which it won't be | ||
177 | * able to communicate with the CPU(s) and RAM due to power management. | ||
178 | * This need not mean that the device should be put into a low power state. | ||
179 | * For example, if the device is behind a link which is about to be turned | ||
180 | * off, the device may remain at full power. If the device does go to low | ||
181 | * power and if device_may_wakeup(dev) is true, remote wake-up (i.e., a | ||
182 | * hardware mechanism allowing the device to request a change of its power | ||
183 | * state, such as PCI PME) should be enabled for it. | ||
184 | * | ||
185 | * @runtime_resume: Put the device into the fully active state in response to a | ||
186 | * wake-up event generated by hardware or at the request of software. If | ||
187 | * necessary, put the device into the full power state and restore its | ||
188 | * registers, so that it is fully operational. | ||
189 | * | ||
190 | * @runtime_idle: Device appears to be inactive and it might be put into a low | ||
191 | * power state if all of the necessary conditions are satisfied. Check | ||
192 | * these conditions and handle the device as appropriate, possibly queueing | ||
193 | * a suspend request for it. The return value is ignored by the PM core. | ||
168 | */ | 194 | */ |
169 | 195 | ||
170 | struct dev_pm_ops { | 196 | struct dev_pm_ops { |
@@ -182,8 +208,25 @@ struct dev_pm_ops { | |||
182 | int (*thaw_noirq)(struct device *dev); | 208 | int (*thaw_noirq)(struct device *dev); |
183 | int (*poweroff_noirq)(struct device *dev); | 209 | int (*poweroff_noirq)(struct device *dev); |
184 | int (*restore_noirq)(struct device *dev); | 210 | int (*restore_noirq)(struct device *dev); |
211 | int (*runtime_suspend)(struct device *dev); | ||
212 | int (*runtime_resume)(struct device *dev); | ||
213 | int (*runtime_idle)(struct device *dev); | ||
185 | }; | 214 | }; |
186 | 215 | ||
216 | /* | ||
217 | * Use this if you want to use the same suspend and resume callbacks for suspend | ||
218 | * to RAM and hibernation. | ||
219 | */ | ||
220 | #define SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \ | ||
221 | struct dev_pm_ops name = { \ | ||
222 | .suspend = suspend_fn, \ | ||
223 | .resume = resume_fn, \ | ||
224 | .freeze = suspend_fn, \ | ||
225 | .thaw = resume_fn, \ | ||
226 | .poweroff = suspend_fn, \ | ||
227 | .restore = resume_fn, \ | ||
228 | } | ||
229 | |||
187 | /** | 230 | /** |
188 | * PM_EVENT_ messages | 231 | * PM_EVENT_ messages |
189 | * | 232 | * |
@@ -315,14 +358,80 @@ enum dpm_state { | |||
315 | DPM_OFF_IRQ, | 358 | DPM_OFF_IRQ, |
316 | }; | 359 | }; |
317 | 360 | ||
361 | /** | ||
362 | * Device run-time power management status. | ||
363 | * | ||
364 | * These status labels are used internally by the PM core to indicate the | ||
365 | * current status of a device with respect to the PM core operations. They do | ||
366 | * not reflect the actual power state of the device or its status as seen by the | ||
367 | * driver. | ||
368 | * | ||
369 | * RPM_ACTIVE Device is fully operational. Indicates that the device | ||
370 | * bus type's ->runtime_resume() callback has completed | ||
371 | * successfully. | ||
372 | * | ||
373 | * RPM_SUSPENDED Device bus type's ->runtime_suspend() callback has | ||
374 | * completed successfully. The device is regarded as | ||
375 | * suspended. | ||
376 | * | ||
377 | * RPM_RESUMING Device bus type's ->runtime_resume() callback is being | ||
378 | * executed. | ||
379 | * | ||
380 | * RPM_SUSPENDING Device bus type's ->runtime_suspend() callback is being | ||
381 | * executed. | ||
382 | */ | ||
383 | |||
384 | enum rpm_status { | ||
385 | RPM_ACTIVE = 0, | ||
386 | RPM_RESUMING, | ||
387 | RPM_SUSPENDED, | ||
388 | RPM_SUSPENDING, | ||
389 | }; | ||
390 | |||
391 | /** | ||
392 | * Device run-time power management request types. | ||
393 | * | ||
394 | * RPM_REQ_NONE Do nothing. | ||
395 | * | ||
396 | * RPM_REQ_IDLE Run the device bus type's ->runtime_idle() callback | ||
397 | * | ||
398 | * RPM_REQ_SUSPEND Run the device bus type's ->runtime_suspend() callback | ||
399 | * | ||
400 | * RPM_REQ_RESUME Run the device bus type's ->runtime_resume() callback | ||
401 | */ | ||
402 | |||
403 | enum rpm_request { | ||
404 | RPM_REQ_NONE = 0, | ||
405 | RPM_REQ_IDLE, | ||
406 | RPM_REQ_SUSPEND, | ||
407 | RPM_REQ_RESUME, | ||
408 | }; | ||
409 | |||
318 | struct dev_pm_info { | 410 | struct dev_pm_info { |
319 | pm_message_t power_state; | 411 | pm_message_t power_state; |
320 | unsigned can_wakeup:1; | 412 | unsigned int can_wakeup:1; |
321 | unsigned should_wakeup:1; | 413 | unsigned int should_wakeup:1; |
322 | enum dpm_state status; /* Owned by the PM core */ | 414 | enum dpm_state status; /* Owned by the PM core */ |
323 | #ifdef CONFIG_PM_SLEEP | 415 | #ifdef CONFIG_PM_SLEEP |
324 | struct list_head entry; | 416 | struct list_head entry; |
325 | #endif | 417 | #endif |
418 | #ifdef CONFIG_PM_RUNTIME | ||
419 | struct timer_list suspend_timer; | ||
420 | unsigned long timer_expires; | ||
421 | struct work_struct work; | ||
422 | wait_queue_head_t wait_queue; | ||
423 | spinlock_t lock; | ||
424 | atomic_t usage_count; | ||
425 | atomic_t child_count; | ||
426 | unsigned int disable_depth:3; | ||
427 | unsigned int ignore_children:1; | ||
428 | unsigned int idle_notification:1; | ||
429 | unsigned int request_pending:1; | ||
430 | unsigned int deferred_resume:1; | ||
431 | enum rpm_request request; | ||
432 | enum rpm_status runtime_status; | ||
433 | int runtime_error; | ||
434 | #endif | ||
326 | }; | 435 | }; |
327 | 436 | ||
328 | /* | 437 | /* |
diff --git a/include/linux/pm_runtime.h b/include/linux/pm_runtime.h new file mode 100644 index 000000000000..44087044910f --- /dev/null +++ b/include/linux/pm_runtime.h | |||
@@ -0,0 +1,114 @@ | |||
1 | /* | ||
2 | * pm_runtime.h - Device run-time power management helper functions. | ||
3 | * | ||
4 | * Copyright (C) 2009 Rafael J. Wysocki <rjw@sisk.pl> | ||
5 | * | ||
6 | * This file is released under the GPLv2. | ||
7 | */ | ||
8 | |||
9 | #ifndef _LINUX_PM_RUNTIME_H | ||
10 | #define _LINUX_PM_RUNTIME_H | ||
11 | |||
12 | #include <linux/device.h> | ||
13 | #include <linux/pm.h> | ||
14 | |||
15 | #ifdef CONFIG_PM_RUNTIME | ||
16 | |||
17 | extern struct workqueue_struct *pm_wq; | ||
18 | |||
19 | extern int pm_runtime_idle(struct device *dev); | ||
20 | extern int pm_runtime_suspend(struct device *dev); | ||
21 | extern int pm_runtime_resume(struct device *dev); | ||
22 | extern int pm_request_idle(struct device *dev); | ||
23 | extern int pm_schedule_suspend(struct device *dev, unsigned int delay); | ||
24 | extern int pm_request_resume(struct device *dev); | ||
25 | extern int __pm_runtime_get(struct device *dev, bool sync); | ||
26 | extern int __pm_runtime_put(struct device *dev, bool sync); | ||
27 | extern int __pm_runtime_set_status(struct device *dev, unsigned int status); | ||
28 | extern int pm_runtime_barrier(struct device *dev); | ||
29 | extern void pm_runtime_enable(struct device *dev); | ||
30 | extern void __pm_runtime_disable(struct device *dev, bool check_resume); | ||
31 | |||
32 | static inline bool pm_children_suspended(struct device *dev) | ||
33 | { | ||
34 | return dev->power.ignore_children | ||
35 | || !atomic_read(&dev->power.child_count); | ||
36 | } | ||
37 | |||
38 | static inline void pm_suspend_ignore_children(struct device *dev, bool enable) | ||
39 | { | ||
40 | dev->power.ignore_children = enable; | ||
41 | } | ||
42 | |||
43 | static inline void pm_runtime_get_noresume(struct device *dev) | ||
44 | { | ||
45 | atomic_inc(&dev->power.usage_count); | ||
46 | } | ||
47 | |||
48 | static inline void pm_runtime_put_noidle(struct device *dev) | ||
49 | { | ||
50 | atomic_add_unless(&dev->power.usage_count, -1, 0); | ||
51 | } | ||
52 | |||
53 | #else /* !CONFIG_PM_RUNTIME */ | ||
54 | |||
55 | static inline int pm_runtime_idle(struct device *dev) { return -ENOSYS; } | ||
56 | static inline int pm_runtime_suspend(struct device *dev) { return -ENOSYS; } | ||
57 | static inline int pm_runtime_resume(struct device *dev) { return 0; } | ||
58 | static inline int pm_request_idle(struct device *dev) { return -ENOSYS; } | ||
59 | static inline int pm_schedule_suspend(struct device *dev, unsigned int delay) | ||
60 | { | ||
61 | return -ENOSYS; | ||
62 | } | ||
63 | static inline int pm_request_resume(struct device *dev) { return 0; } | ||
64 | static inline int __pm_runtime_get(struct device *dev, bool sync) { return 1; } | ||
65 | static inline int __pm_runtime_put(struct device *dev, bool sync) { return 0; } | ||
66 | static inline int __pm_runtime_set_status(struct device *dev, | ||
67 | unsigned int status) { return 0; } | ||
68 | static inline int pm_runtime_barrier(struct device *dev) { return 0; } | ||
69 | static inline void pm_runtime_enable(struct device *dev) {} | ||
70 | static inline void __pm_runtime_disable(struct device *dev, bool c) {} | ||
71 | |||
72 | static inline bool pm_children_suspended(struct device *dev) { return false; } | ||
73 | static inline void pm_suspend_ignore_children(struct device *dev, bool en) {} | ||
74 | static inline void pm_runtime_get_noresume(struct device *dev) {} | ||
75 | static inline void pm_runtime_put_noidle(struct device *dev) {} | ||
76 | |||
77 | #endif /* !CONFIG_PM_RUNTIME */ | ||
78 | |||
79 | static inline int pm_runtime_get(struct device *dev) | ||
80 | { | ||
81 | return __pm_runtime_get(dev, false); | ||
82 | } | ||
83 | |||
84 | static inline int pm_runtime_get_sync(struct device *dev) | ||
85 | { | ||
86 | return __pm_runtime_get(dev, true); | ||
87 | } | ||
88 | |||
89 | static inline int pm_runtime_put(struct device *dev) | ||
90 | { | ||
91 | return __pm_runtime_put(dev, false); | ||
92 | } | ||
93 | |||
94 | static inline int pm_runtime_put_sync(struct device *dev) | ||
95 | { | ||
96 | return __pm_runtime_put(dev, true); | ||
97 | } | ||
98 | |||
99 | static inline int pm_runtime_set_active(struct device *dev) | ||
100 | { | ||
101 | return __pm_runtime_set_status(dev, RPM_ACTIVE); | ||
102 | } | ||
103 | |||
104 | static inline void pm_runtime_set_suspended(struct device *dev) | ||
105 | { | ||
106 | __pm_runtime_set_status(dev, RPM_SUSPENDED); | ||
107 | } | ||
108 | |||
109 | static inline void pm_runtime_disable(struct device *dev) | ||
110 | { | ||
111 | __pm_runtime_disable(dev, true); | ||
112 | } | ||
113 | |||
114 | #endif | ||
diff --git a/include/linux/pnp.h b/include/linux/pnp.h index b063c7328ba5..fddfafaed024 100644 --- a/include/linux/pnp.h +++ b/include/linux/pnp.h | |||
@@ -360,6 +360,7 @@ struct pnp_driver { | |||
360 | unsigned int flags; | 360 | unsigned int flags; |
361 | int (*probe) (struct pnp_dev *dev, const struct pnp_device_id *dev_id); | 361 | int (*probe) (struct pnp_dev *dev, const struct pnp_device_id *dev_id); |
362 | void (*remove) (struct pnp_dev *dev); | 362 | void (*remove) (struct pnp_dev *dev); |
363 | void (*shutdown) (struct pnp_dev *dev); | ||
363 | int (*suspend) (struct pnp_dev *dev, pm_message_t state); | 364 | int (*suspend) (struct pnp_dev *dev, pm_message_t state); |
364 | int (*resume) (struct pnp_dev *dev); | 365 | int (*resume) (struct pnp_dev *dev); |
365 | struct device_driver driver; | 366 | struct device_driver driver; |
diff --git a/include/linux/poison.h b/include/linux/poison.h index 6729f7dcd60e..7fc194aef8c2 100644 --- a/include/linux/poison.h +++ b/include/linux/poison.h | |||
@@ -65,6 +65,9 @@ | |||
65 | #define MUTEX_DEBUG_INIT 0x11 | 65 | #define MUTEX_DEBUG_INIT 0x11 |
66 | #define MUTEX_DEBUG_FREE 0x22 | 66 | #define MUTEX_DEBUG_FREE 0x22 |
67 | 67 | ||
68 | /********** lib/flex_array.c **********/ | ||
69 | #define FLEX_ARRAY_FREE 0x6c /* for use-after-free poisoning */ | ||
70 | |||
68 | /********** security/ **********/ | 71 | /********** security/ **********/ |
69 | #define KEY_DESTROY 0xbd | 72 | #define KEY_DESTROY 0xbd |
70 | 73 | ||
diff --git a/include/linux/pps.h b/include/linux/pps.h index cfe5c7214ec6..0194ab06177b 100644 --- a/include/linux/pps.h +++ b/include/linux/pps.h | |||
@@ -22,6 +22,8 @@ | |||
22 | #ifndef _PPS_H_ | 22 | #ifndef _PPS_H_ |
23 | #define _PPS_H_ | 23 | #define _PPS_H_ |
24 | 24 | ||
25 | #include <linux/types.h> | ||
26 | |||
25 | #define PPS_VERSION "5.3.6" | 27 | #define PPS_VERSION "5.3.6" |
26 | #define PPS_MAX_SOURCES 16 /* should be enough... */ | 28 | #define PPS_MAX_SOURCES 16 /* should be enough... */ |
27 | 29 | ||
diff --git a/include/linux/prctl.h b/include/linux/prctl.h index b00df4c79c63..07bff666e65b 100644 --- a/include/linux/prctl.h +++ b/include/linux/prctl.h | |||
@@ -85,7 +85,7 @@ | |||
85 | #define PR_SET_TIMERSLACK 29 | 85 | #define PR_SET_TIMERSLACK 29 |
86 | #define PR_GET_TIMERSLACK 30 | 86 | #define PR_GET_TIMERSLACK 30 |
87 | 87 | ||
88 | #define PR_TASK_PERF_COUNTERS_DISABLE 31 | 88 | #define PR_TASK_PERF_EVENTS_DISABLE 31 |
89 | #define PR_TASK_PERF_COUNTERS_ENABLE 32 | 89 | #define PR_TASK_PERF_EVENTS_ENABLE 32 |
90 | 90 | ||
91 | #endif /* _LINUX_PRCTL_H */ | 91 | #endif /* _LINUX_PRCTL_H */ |
diff --git a/include/linux/quotaops.h b/include/linux/quotaops.h index 7bc457593684..3ebb23153640 100644 --- a/include/linux/quotaops.h +++ b/include/linux/quotaops.h | |||
@@ -7,7 +7,6 @@ | |||
7 | #ifndef _LINUX_QUOTAOPS_ | 7 | #ifndef _LINUX_QUOTAOPS_ |
8 | #define _LINUX_QUOTAOPS_ | 8 | #define _LINUX_QUOTAOPS_ |
9 | 9 | ||
10 | #include <linux/smp_lock.h> | ||
11 | #include <linux/fs.h> | 10 | #include <linux/fs.h> |
12 | 11 | ||
13 | static inline struct quota_info *sb_dqopt(struct super_block *sb) | 12 | static inline struct quota_info *sb_dqopt(struct super_block *sb) |
@@ -136,8 +135,8 @@ static inline int sb_any_quota_active(struct super_block *sb) | |||
136 | /* | 135 | /* |
137 | * Operations supported for diskquotas. | 136 | * Operations supported for diskquotas. |
138 | */ | 137 | */ |
139 | extern struct dquot_operations dquot_operations; | 138 | extern const struct dquot_operations dquot_operations; |
140 | extern struct quotactl_ops vfs_quotactl_ops; | 139 | extern const struct quotactl_ops vfs_quotactl_ops; |
141 | 140 | ||
142 | #define sb_dquot_ops (&dquot_operations) | 141 | #define sb_dquot_ops (&dquot_operations) |
143 | #define sb_quotactl_ops (&vfs_quotactl_ops) | 142 | #define sb_quotactl_ops (&vfs_quotactl_ops) |
diff --git a/include/linux/rcuclassic.h b/include/linux/rcuclassic.h deleted file mode 100644 index bfd92e1e5d2c..000000000000 --- a/include/linux/rcuclassic.h +++ /dev/null | |||
@@ -1,178 +0,0 @@ | |||
1 | /* | ||
2 | * Read-Copy Update mechanism for mutual exclusion (classic version) | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License as published by | ||
6 | * the Free Software Foundation; either version 2 of the License, or | ||
7 | * (at your option) any later version. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
17 | * | ||
18 | * Copyright IBM Corporation, 2001 | ||
19 | * | ||
20 | * Author: Dipankar Sarma <dipankar@in.ibm.com> | ||
21 | * | ||
22 | * Based on the original work by Paul McKenney <paulmck@us.ibm.com> | ||
23 | * and inputs from Rusty Russell, Andrea Arcangeli and Andi Kleen. | ||
24 | * Papers: | ||
25 | * http://www.rdrop.com/users/paulmck/paper/rclockpdcsproof.pdf | ||
26 | * http://lse.sourceforge.net/locking/rclock_OLS.2001.05.01c.sc.pdf (OLS2001) | ||
27 | * | ||
28 | * For detailed explanation of Read-Copy Update mechanism see - | ||
29 | * Documentation/RCU | ||
30 | * | ||
31 | */ | ||
32 | |||
33 | #ifndef __LINUX_RCUCLASSIC_H | ||
34 | #define __LINUX_RCUCLASSIC_H | ||
35 | |||
36 | #include <linux/cache.h> | ||
37 | #include <linux/spinlock.h> | ||
38 | #include <linux/threads.h> | ||
39 | #include <linux/cpumask.h> | ||
40 | #include <linux/seqlock.h> | ||
41 | |||
42 | #ifdef CONFIG_RCU_CPU_STALL_DETECTOR | ||
43 | #define RCU_SECONDS_TILL_STALL_CHECK (10 * HZ) /* for rcp->jiffies_stall */ | ||
44 | #define RCU_SECONDS_TILL_STALL_RECHECK (30 * HZ) /* for rcp->jiffies_stall */ | ||
45 | #endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */ | ||
46 | |||
47 | /* Global control variables for rcupdate callback mechanism. */ | ||
48 | struct rcu_ctrlblk { | ||
49 | long cur; /* Current batch number. */ | ||
50 | long completed; /* Number of the last completed batch */ | ||
51 | long pending; /* Number of the last pending batch */ | ||
52 | #ifdef CONFIG_RCU_CPU_STALL_DETECTOR | ||
53 | unsigned long gp_start; /* Time at which GP started in jiffies. */ | ||
54 | unsigned long jiffies_stall; | ||
55 | /* Time at which to check for CPU stalls. */ | ||
56 | #endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */ | ||
57 | |||
58 | int signaled; | ||
59 | |||
60 | spinlock_t lock ____cacheline_internodealigned_in_smp; | ||
61 | DECLARE_BITMAP(cpumask, NR_CPUS); /* CPUs that need to switch for */ | ||
62 | /* current batch to proceed. */ | ||
63 | } ____cacheline_internodealigned_in_smp; | ||
64 | |||
65 | /* Is batch a before batch b ? */ | ||
66 | static inline int rcu_batch_before(long a, long b) | ||
67 | { | ||
68 | return (a - b) < 0; | ||
69 | } | ||
70 | |||
71 | /* Is batch a after batch b ? */ | ||
72 | static inline int rcu_batch_after(long a, long b) | ||
73 | { | ||
74 | return (a - b) > 0; | ||
75 | } | ||
76 | |||
77 | /* Per-CPU data for Read-Copy UPdate. */ | ||
78 | struct rcu_data { | ||
79 | /* 1) quiescent state handling : */ | ||
80 | long quiescbatch; /* Batch # for grace period */ | ||
81 | int passed_quiesc; /* User-mode/idle loop etc. */ | ||
82 | int qs_pending; /* core waits for quiesc state */ | ||
83 | |||
84 | /* 2) batch handling */ | ||
85 | /* | ||
86 | * if nxtlist is not NULL, then: | ||
87 | * batch: | ||
88 | * The batch # for the last entry of nxtlist | ||
89 | * [*nxttail[1], NULL = *nxttail[2]): | ||
90 | * Entries that batch # <= batch | ||
91 | * [*nxttail[0], *nxttail[1]): | ||
92 | * Entries that batch # <= batch - 1 | ||
93 | * [nxtlist, *nxttail[0]): | ||
94 | * Entries that batch # <= batch - 2 | ||
95 | * The grace period for these entries has completed, and | ||
96 | * the other grace-period-completed entries may be moved | ||
97 | * here temporarily in rcu_process_callbacks(). | ||
98 | */ | ||
99 | long batch; | ||
100 | struct rcu_head *nxtlist; | ||
101 | struct rcu_head **nxttail[3]; | ||
102 | long qlen; /* # of queued callbacks */ | ||
103 | struct rcu_head *donelist; | ||
104 | struct rcu_head **donetail; | ||
105 | long blimit; /* Upper limit on a processed batch */ | ||
106 | int cpu; | ||
107 | struct rcu_head barrier; | ||
108 | }; | ||
109 | |||
110 | /* | ||
111 | * Increment the quiescent state counter. | ||
112 | * The counter is a bit degenerated: We do not need to know | ||
113 | * how many quiescent states passed, just if there was at least | ||
114 | * one since the start of the grace period. Thus just a flag. | ||
115 | */ | ||
116 | extern void rcu_qsctr_inc(int cpu); | ||
117 | extern void rcu_bh_qsctr_inc(int cpu); | ||
118 | |||
119 | extern int rcu_pending(int cpu); | ||
120 | extern int rcu_needs_cpu(int cpu); | ||
121 | |||
122 | #ifdef CONFIG_DEBUG_LOCK_ALLOC | ||
123 | extern struct lockdep_map rcu_lock_map; | ||
124 | # define rcu_read_acquire() \ | ||
125 | lock_acquire(&rcu_lock_map, 0, 0, 2, 1, NULL, _THIS_IP_) | ||
126 | # define rcu_read_release() lock_release(&rcu_lock_map, 1, _THIS_IP_) | ||
127 | #else | ||
128 | # define rcu_read_acquire() do { } while (0) | ||
129 | # define rcu_read_release() do { } while (0) | ||
130 | #endif | ||
131 | |||
132 | #define __rcu_read_lock() \ | ||
133 | do { \ | ||
134 | preempt_disable(); \ | ||
135 | __acquire(RCU); \ | ||
136 | rcu_read_acquire(); \ | ||
137 | } while (0) | ||
138 | #define __rcu_read_unlock() \ | ||
139 | do { \ | ||
140 | rcu_read_release(); \ | ||
141 | __release(RCU); \ | ||
142 | preempt_enable(); \ | ||
143 | } while (0) | ||
144 | #define __rcu_read_lock_bh() \ | ||
145 | do { \ | ||
146 | local_bh_disable(); \ | ||
147 | __acquire(RCU_BH); \ | ||
148 | rcu_read_acquire(); \ | ||
149 | } while (0) | ||
150 | #define __rcu_read_unlock_bh() \ | ||
151 | do { \ | ||
152 | rcu_read_release(); \ | ||
153 | __release(RCU_BH); \ | ||
154 | local_bh_enable(); \ | ||
155 | } while (0) | ||
156 | |||
157 | #define __synchronize_sched() synchronize_rcu() | ||
158 | |||
159 | #define call_rcu_sched(head, func) call_rcu(head, func) | ||
160 | |||
161 | extern void __rcu_init(void); | ||
162 | #define rcu_init_sched() do { } while (0) | ||
163 | extern void rcu_check_callbacks(int cpu, int user); | ||
164 | extern void rcu_restart_cpu(int cpu); | ||
165 | |||
166 | extern long rcu_batches_completed(void); | ||
167 | extern long rcu_batches_completed_bh(void); | ||
168 | |||
169 | #define rcu_enter_nohz() do { } while (0) | ||
170 | #define rcu_exit_nohz() do { } while (0) | ||
171 | |||
172 | /* A context switch is a grace period for rcuclassic. */ | ||
173 | static inline int rcu_blocking_is_gp(void) | ||
174 | { | ||
175 | return num_online_cpus() == 1; | ||
176 | } | ||
177 | |||
178 | #endif /* __LINUX_RCUCLASSIC_H */ | ||
diff --git a/include/linux/rculist_nulls.h b/include/linux/rculist_nulls.h index f9ddd03961a8..589a40919f01 100644 --- a/include/linux/rculist_nulls.h +++ b/include/linux/rculist_nulls.h | |||
@@ -102,7 +102,7 @@ static inline void hlist_nulls_add_head_rcu(struct hlist_nulls_node *n, | |||
102 | */ | 102 | */ |
103 | #define hlist_nulls_for_each_entry_rcu(tpos, pos, head, member) \ | 103 | #define hlist_nulls_for_each_entry_rcu(tpos, pos, head, member) \ |
104 | for (pos = rcu_dereference((head)->first); \ | 104 | for (pos = rcu_dereference((head)->first); \ |
105 | (!is_a_nulls(pos)) && \ | 105 | (!is_a_nulls(pos)) && \ |
106 | ({ tpos = hlist_nulls_entry(pos, typeof(*tpos), member); 1; }); \ | 106 | ({ tpos = hlist_nulls_entry(pos, typeof(*tpos), member); 1; }); \ |
107 | pos = rcu_dereference(pos->next)) | 107 | pos = rcu_dereference(pos->next)) |
108 | 108 | ||
diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h index 15fbb3ca634d..6fe0363724e9 100644 --- a/include/linux/rcupdate.h +++ b/include/linux/rcupdate.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Read-Copy Update mechanism for mutual exclusion | 2 | * Read-Copy Update mechanism for mutual exclusion |
3 | * | 3 | * |
4 | * This program is free software; you can redistribute it and/or modify | 4 | * This program is free software; you can redistribute it and/or modify |
5 | * it under the terms of the GNU General Public License as published by | 5 | * it under the terms of the GNU General Public License as published by |
@@ -18,7 +18,7 @@ | |||
18 | * Copyright IBM Corporation, 2001 | 18 | * Copyright IBM Corporation, 2001 |
19 | * | 19 | * |
20 | * Author: Dipankar Sarma <dipankar@in.ibm.com> | 20 | * Author: Dipankar Sarma <dipankar@in.ibm.com> |
21 | * | 21 | * |
22 | * Based on the original work by Paul McKenney <paulmck@us.ibm.com> | 22 | * Based on the original work by Paul McKenney <paulmck@us.ibm.com> |
23 | * and inputs from Rusty Russell, Andrea Arcangeli and Andi Kleen. | 23 | * and inputs from Rusty Russell, Andrea Arcangeli and Andi Kleen. |
24 | * Papers: | 24 | * Papers: |
@@ -26,7 +26,7 @@ | |||
26 | * http://lse.sourceforge.net/locking/rclock_OLS.2001.05.01c.sc.pdf (OLS2001) | 26 | * http://lse.sourceforge.net/locking/rclock_OLS.2001.05.01c.sc.pdf (OLS2001) |
27 | * | 27 | * |
28 | * For detailed explanation of Read-Copy Update mechanism see - | 28 | * For detailed explanation of Read-Copy Update mechanism see - |
29 | * http://lse.sourceforge.net/locking/rcupdate.html | 29 | * http://lse.sourceforge.net/locking/rcupdate.html |
30 | * | 30 | * |
31 | */ | 31 | */ |
32 | 32 | ||
@@ -51,18 +51,31 @@ struct rcu_head { | |||
51 | void (*func)(struct rcu_head *head); | 51 | void (*func)(struct rcu_head *head); |
52 | }; | 52 | }; |
53 | 53 | ||
54 | /* Internal to kernel, but needed by rcupreempt.h. */ | 54 | /* Exported common interfaces */ |
55 | #ifdef CONFIG_TREE_PREEMPT_RCU | ||
56 | extern void synchronize_rcu(void); | ||
57 | #else /* #ifdef CONFIG_TREE_PREEMPT_RCU */ | ||
58 | #define synchronize_rcu synchronize_sched | ||
59 | #endif /* #else #ifdef CONFIG_TREE_PREEMPT_RCU */ | ||
60 | extern void synchronize_rcu_bh(void); | ||
61 | extern void synchronize_sched(void); | ||
62 | extern void rcu_barrier(void); | ||
63 | extern void rcu_barrier_bh(void); | ||
64 | extern void rcu_barrier_sched(void); | ||
65 | extern void synchronize_sched_expedited(void); | ||
66 | extern int sched_expedited_torture_stats(char *page); | ||
67 | |||
68 | /* Internal to kernel */ | ||
69 | extern void rcu_init(void); | ||
70 | extern void rcu_scheduler_starting(void); | ||
71 | extern int rcu_needs_cpu(int cpu); | ||
55 | extern int rcu_scheduler_active; | 72 | extern int rcu_scheduler_active; |
56 | 73 | ||
57 | #if defined(CONFIG_CLASSIC_RCU) | 74 | #if defined(CONFIG_TREE_RCU) || defined(CONFIG_TREE_PREEMPT_RCU) |
58 | #include <linux/rcuclassic.h> | ||
59 | #elif defined(CONFIG_TREE_RCU) | ||
60 | #include <linux/rcutree.h> | 75 | #include <linux/rcutree.h> |
61 | #elif defined(CONFIG_PREEMPT_RCU) | ||
62 | #include <linux/rcupreempt.h> | ||
63 | #else | 76 | #else |
64 | #error "Unknown RCU implementation specified to kernel configuration" | 77 | #error "Unknown RCU implementation specified to kernel configuration" |
65 | #endif /* #else #if defined(CONFIG_CLASSIC_RCU) */ | 78 | #endif |
66 | 79 | ||
67 | #define RCU_HEAD_INIT { .next = NULL, .func = NULL } | 80 | #define RCU_HEAD_INIT { .next = NULL, .func = NULL } |
68 | #define RCU_HEAD(head) struct rcu_head head = RCU_HEAD_INIT | 81 | #define RCU_HEAD(head) struct rcu_head head = RCU_HEAD_INIT |
@@ -70,6 +83,16 @@ extern int rcu_scheduler_active; | |||
70 | (ptr)->next = NULL; (ptr)->func = NULL; \ | 83 | (ptr)->next = NULL; (ptr)->func = NULL; \ |
71 | } while (0) | 84 | } while (0) |
72 | 85 | ||
86 | #ifdef CONFIG_DEBUG_LOCK_ALLOC | ||
87 | extern struct lockdep_map rcu_lock_map; | ||
88 | # define rcu_read_acquire() \ | ||
89 | lock_acquire(&rcu_lock_map, 0, 0, 2, 1, NULL, _THIS_IP_) | ||
90 | # define rcu_read_release() lock_release(&rcu_lock_map, 1, _THIS_IP_) | ||
91 | #else | ||
92 | # define rcu_read_acquire() do { } while (0) | ||
93 | # define rcu_read_release() do { } while (0) | ||
94 | #endif | ||
95 | |||
73 | /** | 96 | /** |
74 | * rcu_read_lock - mark the beginning of an RCU read-side critical section. | 97 | * rcu_read_lock - mark the beginning of an RCU read-side critical section. |
75 | * | 98 | * |
@@ -99,7 +122,12 @@ extern int rcu_scheduler_active; | |||
99 | * | 122 | * |
100 | * It is illegal to block while in an RCU read-side critical section. | 123 | * It is illegal to block while in an RCU read-side critical section. |
101 | */ | 124 | */ |
102 | #define rcu_read_lock() __rcu_read_lock() | 125 | static inline void rcu_read_lock(void) |
126 | { | ||
127 | __rcu_read_lock(); | ||
128 | __acquire(RCU); | ||
129 | rcu_read_acquire(); | ||
130 | } | ||
103 | 131 | ||
104 | /** | 132 | /** |
105 | * rcu_read_unlock - marks the end of an RCU read-side critical section. | 133 | * rcu_read_unlock - marks the end of an RCU read-side critical section. |
@@ -116,7 +144,12 @@ extern int rcu_scheduler_active; | |||
116 | * used as well. RCU does not care how the writers keep out of each | 144 | * used as well. RCU does not care how the writers keep out of each |
117 | * others' way, as long as they do so. | 145 | * others' way, as long as they do so. |
118 | */ | 146 | */ |
119 | #define rcu_read_unlock() __rcu_read_unlock() | 147 | static inline void rcu_read_unlock(void) |
148 | { | ||
149 | rcu_read_release(); | ||
150 | __release(RCU); | ||
151 | __rcu_read_unlock(); | ||
152 | } | ||
120 | 153 | ||
121 | /** | 154 | /** |
122 | * rcu_read_lock_bh - mark the beginning of a softirq-only RCU critical section | 155 | * rcu_read_lock_bh - mark the beginning of a softirq-only RCU critical section |
@@ -129,14 +162,24 @@ extern int rcu_scheduler_active; | |||
129 | * can use just rcu_read_lock(). | 162 | * can use just rcu_read_lock(). |
130 | * | 163 | * |
131 | */ | 164 | */ |
132 | #define rcu_read_lock_bh() __rcu_read_lock_bh() | 165 | static inline void rcu_read_lock_bh(void) |
166 | { | ||
167 | __rcu_read_lock_bh(); | ||
168 | __acquire(RCU_BH); | ||
169 | rcu_read_acquire(); | ||
170 | } | ||
133 | 171 | ||
134 | /* | 172 | /* |
135 | * rcu_read_unlock_bh - marks the end of a softirq-only RCU critical section | 173 | * rcu_read_unlock_bh - marks the end of a softirq-only RCU critical section |
136 | * | 174 | * |
137 | * See rcu_read_lock_bh() for more information. | 175 | * See rcu_read_lock_bh() for more information. |
138 | */ | 176 | */ |
139 | #define rcu_read_unlock_bh() __rcu_read_unlock_bh() | 177 | static inline void rcu_read_unlock_bh(void) |
178 | { | ||
179 | rcu_read_release(); | ||
180 | __release(RCU_BH); | ||
181 | __rcu_read_unlock_bh(); | ||
182 | } | ||
140 | 183 | ||
141 | /** | 184 | /** |
142 | * rcu_read_lock_sched - mark the beginning of a RCU-classic critical section | 185 | * rcu_read_lock_sched - mark the beginning of a RCU-classic critical section |
@@ -147,17 +190,34 @@ extern int rcu_scheduler_active; | |||
147 | * - call_rcu_sched() and rcu_barrier_sched() | 190 | * - call_rcu_sched() and rcu_barrier_sched() |
148 | * on the write-side to insure proper synchronization. | 191 | * on the write-side to insure proper synchronization. |
149 | */ | 192 | */ |
150 | #define rcu_read_lock_sched() preempt_disable() | 193 | static inline void rcu_read_lock_sched(void) |
151 | #define rcu_read_lock_sched_notrace() preempt_disable_notrace() | 194 | { |
195 | preempt_disable(); | ||
196 | __acquire(RCU_SCHED); | ||
197 | rcu_read_acquire(); | ||
198 | } | ||
199 | static inline notrace void rcu_read_lock_sched_notrace(void) | ||
200 | { | ||
201 | preempt_disable_notrace(); | ||
202 | __acquire(RCU_SCHED); | ||
203 | } | ||
152 | 204 | ||
153 | /* | 205 | /* |
154 | * rcu_read_unlock_sched - marks the end of a RCU-classic critical section | 206 | * rcu_read_unlock_sched - marks the end of a RCU-classic critical section |
155 | * | 207 | * |
156 | * See rcu_read_lock_sched for more information. | 208 | * See rcu_read_lock_sched for more information. |
157 | */ | 209 | */ |
158 | #define rcu_read_unlock_sched() preempt_enable() | 210 | static inline void rcu_read_unlock_sched(void) |
159 | #define rcu_read_unlock_sched_notrace() preempt_enable_notrace() | 211 | { |
160 | 212 | rcu_read_release(); | |
213 | __release(RCU_SCHED); | ||
214 | preempt_enable(); | ||
215 | } | ||
216 | static inline notrace void rcu_read_unlock_sched_notrace(void) | ||
217 | { | ||
218 | __release(RCU_SCHED); | ||
219 | preempt_enable_notrace(); | ||
220 | } | ||
161 | 221 | ||
162 | 222 | ||
163 | /** | 223 | /** |
@@ -207,24 +267,6 @@ struct rcu_synchronize { | |||
207 | extern void wakeme_after_rcu(struct rcu_head *head); | 267 | extern void wakeme_after_rcu(struct rcu_head *head); |
208 | 268 | ||
209 | /** | 269 | /** |
210 | * synchronize_sched - block until all CPUs have exited any non-preemptive | ||
211 | * kernel code sequences. | ||
212 | * | ||
213 | * This means that all preempt_disable code sequences, including NMI and | ||
214 | * hardware-interrupt handlers, in progress on entry will have completed | ||
215 | * before this primitive returns. However, this does not guarantee that | ||
216 | * softirq handlers will have completed, since in some kernels, these | ||
217 | * handlers can run in process context, and can block. | ||
218 | * | ||
219 | * This primitive provides the guarantees made by the (now removed) | ||
220 | * synchronize_kernel() API. In contrast, synchronize_rcu() only | ||
221 | * guarantees that rcu_read_lock() sections will have completed. | ||
222 | * In "classic RCU", these two guarantees happen to be one and | ||
223 | * the same, but can differ in realtime RCU implementations. | ||
224 | */ | ||
225 | #define synchronize_sched() __synchronize_sched() | ||
226 | |||
227 | /** | ||
228 | * call_rcu - Queue an RCU callback for invocation after a grace period. | 270 | * call_rcu - Queue an RCU callback for invocation after a grace period. |
229 | * @head: structure to be used for queueing the RCU updates. | 271 | * @head: structure to be used for queueing the RCU updates. |
230 | * @func: actual update function to be invoked after the grace period | 272 | * @func: actual update function to be invoked after the grace period |
@@ -259,15 +301,4 @@ extern void call_rcu(struct rcu_head *head, | |||
259 | extern void call_rcu_bh(struct rcu_head *head, | 301 | extern void call_rcu_bh(struct rcu_head *head, |
260 | void (*func)(struct rcu_head *head)); | 302 | void (*func)(struct rcu_head *head)); |
261 | 303 | ||
262 | /* Exported common interfaces */ | ||
263 | extern void synchronize_rcu(void); | ||
264 | extern void rcu_barrier(void); | ||
265 | extern void rcu_barrier_bh(void); | ||
266 | extern void rcu_barrier_sched(void); | ||
267 | |||
268 | /* Internal to kernel */ | ||
269 | extern void rcu_init(void); | ||
270 | extern void rcu_scheduler_starting(void); | ||
271 | extern int rcu_needs_cpu(int cpu); | ||
272 | |||
273 | #endif /* __LINUX_RCUPDATE_H */ | 304 | #endif /* __LINUX_RCUPDATE_H */ |
diff --git a/include/linux/rcupreempt.h b/include/linux/rcupreempt.h deleted file mode 100644 index fce522782ffa..000000000000 --- a/include/linux/rcupreempt.h +++ /dev/null | |||
@@ -1,127 +0,0 @@ | |||
1 | /* | ||
2 | * Read-Copy Update mechanism for mutual exclusion (RT implementation) | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License as published by | ||
6 | * the Free Software Foundation; either version 2 of the License, or | ||
7 | * (at your option) any later version. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
17 | * | ||
18 | * Copyright (C) IBM Corporation, 2006 | ||
19 | * | ||
20 | * Author: Paul McKenney <paulmck@us.ibm.com> | ||
21 | * | ||
22 | * Based on the original work by Paul McKenney <paul.mckenney@us.ibm.com> | ||
23 | * and inputs from Rusty Russell, Andrea Arcangeli and Andi Kleen. | ||
24 | * Papers: | ||
25 | * http://www.rdrop.com/users/paulmck/paper/rclockpdcsproof.pdf | ||
26 | * http://lse.sourceforge.net/locking/rclock_OLS.2001.05.01c.sc.pdf (OLS2001) | ||
27 | * | ||
28 | * For detailed explanation of Read-Copy Update mechanism see - | ||
29 | * Documentation/RCU | ||
30 | * | ||
31 | */ | ||
32 | |||
33 | #ifndef __LINUX_RCUPREEMPT_H | ||
34 | #define __LINUX_RCUPREEMPT_H | ||
35 | |||
36 | #include <linux/cache.h> | ||
37 | #include <linux/spinlock.h> | ||
38 | #include <linux/threads.h> | ||
39 | #include <linux/smp.h> | ||
40 | #include <linux/cpumask.h> | ||
41 | #include <linux/seqlock.h> | ||
42 | |||
43 | extern void rcu_qsctr_inc(int cpu); | ||
44 | static inline void rcu_bh_qsctr_inc(int cpu) { } | ||
45 | |||
46 | /* | ||
47 | * Someone might want to pass call_rcu_bh as a function pointer. | ||
48 | * So this needs to just be a rename and not a macro function. | ||
49 | * (no parentheses) | ||
50 | */ | ||
51 | #define call_rcu_bh call_rcu | ||
52 | |||
53 | /** | ||
54 | * call_rcu_sched - Queue RCU callback for invocation after sched grace period. | ||
55 | * @head: structure to be used for queueing the RCU updates. | ||
56 | * @func: actual update function to be invoked after the grace period | ||
57 | * | ||
58 | * The update function will be invoked some time after a full | ||
59 | * synchronize_sched()-style grace period elapses, in other words after | ||
60 | * all currently executing preempt-disabled sections of code (including | ||
61 | * hardirq handlers, NMI handlers, and local_irq_save() blocks) have | ||
62 | * completed. | ||
63 | */ | ||
64 | extern void call_rcu_sched(struct rcu_head *head, | ||
65 | void (*func)(struct rcu_head *head)); | ||
66 | |||
67 | extern void __rcu_read_lock(void) __acquires(RCU); | ||
68 | extern void __rcu_read_unlock(void) __releases(RCU); | ||
69 | extern int rcu_pending(int cpu); | ||
70 | extern int rcu_needs_cpu(int cpu); | ||
71 | |||
72 | #define __rcu_read_lock_bh() { rcu_read_lock(); local_bh_disable(); } | ||
73 | #define __rcu_read_unlock_bh() { local_bh_enable(); rcu_read_unlock(); } | ||
74 | |||
75 | extern void __synchronize_sched(void); | ||
76 | |||
77 | extern void __rcu_init(void); | ||
78 | extern void rcu_init_sched(void); | ||
79 | extern void rcu_check_callbacks(int cpu, int user); | ||
80 | extern void rcu_restart_cpu(int cpu); | ||
81 | extern long rcu_batches_completed(void); | ||
82 | |||
83 | /* | ||
84 | * Return the number of RCU batches processed thus far. Useful for debug | ||
85 | * and statistic. The _bh variant is identifcal to straight RCU | ||
86 | */ | ||
87 | static inline long rcu_batches_completed_bh(void) | ||
88 | { | ||
89 | return rcu_batches_completed(); | ||
90 | } | ||
91 | |||
92 | #ifdef CONFIG_RCU_TRACE | ||
93 | struct rcupreempt_trace; | ||
94 | extern long *rcupreempt_flipctr(int cpu); | ||
95 | extern long rcupreempt_data_completed(void); | ||
96 | extern int rcupreempt_flip_flag(int cpu); | ||
97 | extern int rcupreempt_mb_flag(int cpu); | ||
98 | extern char *rcupreempt_try_flip_state_name(void); | ||
99 | extern struct rcupreempt_trace *rcupreempt_trace_cpu(int cpu); | ||
100 | #endif | ||
101 | |||
102 | struct softirq_action; | ||
103 | |||
104 | #ifdef CONFIG_NO_HZ | ||
105 | extern void rcu_enter_nohz(void); | ||
106 | extern void rcu_exit_nohz(void); | ||
107 | #else | ||
108 | # define rcu_enter_nohz() do { } while (0) | ||
109 | # define rcu_exit_nohz() do { } while (0) | ||
110 | #endif | ||
111 | |||
112 | /* | ||
113 | * A context switch is a grace period for rcupreempt synchronize_rcu() | ||
114 | * only during early boot, before the scheduler has been initialized. | ||
115 | * So, how the heck do we get a context switch? Well, if the caller | ||
116 | * invokes synchronize_rcu(), they are willing to accept a context | ||
117 | * switch, so we simply pretend that one happened. | ||
118 | * | ||
119 | * After boot, there might be a blocked or preempted task in an RCU | ||
120 | * read-side critical section, so we cannot then take the fastpath. | ||
121 | */ | ||
122 | static inline int rcu_blocking_is_gp(void) | ||
123 | { | ||
124 | return num_online_cpus() == 1 && !rcu_scheduler_active; | ||
125 | } | ||
126 | |||
127 | #endif /* __LINUX_RCUPREEMPT_H */ | ||
diff --git a/include/linux/rcupreempt_trace.h b/include/linux/rcupreempt_trace.h deleted file mode 100644 index b99ae073192a..000000000000 --- a/include/linux/rcupreempt_trace.h +++ /dev/null | |||
@@ -1,97 +0,0 @@ | |||
1 | /* | ||
2 | * Read-Copy Update mechanism for mutual exclusion (RT implementation) | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License as published by | ||
6 | * the Free Software Foundation; either version 2 of the License, or | ||
7 | * (at your option) any later version. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
17 | * | ||
18 | * Copyright (C) IBM Corporation, 2006 | ||
19 | * | ||
20 | * Author: Paul McKenney <paulmck@us.ibm.com> | ||
21 | * | ||
22 | * Based on the original work by Paul McKenney <paul.mckenney@us.ibm.com> | ||
23 | * and inputs from Rusty Russell, Andrea Arcangeli and Andi Kleen. | ||
24 | * Papers: | ||
25 | * http://www.rdrop.com/users/paulmck/paper/rclockpdcsproof.pdf | ||
26 | * http://lse.sourceforge.net/locking/rclock_OLS.2001.05.01c.sc.pdf (OLS2001) | ||
27 | * | ||
28 | * For detailed explanation of the Preemptible Read-Copy Update mechanism see - | ||
29 | * http://lwn.net/Articles/253651/ | ||
30 | */ | ||
31 | |||
32 | #ifndef __LINUX_RCUPREEMPT_TRACE_H | ||
33 | #define __LINUX_RCUPREEMPT_TRACE_H | ||
34 | |||
35 | #include <linux/types.h> | ||
36 | #include <linux/kernel.h> | ||
37 | |||
38 | #include <asm/atomic.h> | ||
39 | |||
40 | /* | ||
41 | * PREEMPT_RCU data structures. | ||
42 | */ | ||
43 | |||
44 | struct rcupreempt_trace { | ||
45 | long next_length; | ||
46 | long next_add; | ||
47 | long wait_length; | ||
48 | long wait_add; | ||
49 | long done_length; | ||
50 | long done_add; | ||
51 | long done_remove; | ||
52 | atomic_t done_invoked; | ||
53 | long rcu_check_callbacks; | ||
54 | atomic_t rcu_try_flip_1; | ||
55 | atomic_t rcu_try_flip_e1; | ||
56 | long rcu_try_flip_i1; | ||
57 | long rcu_try_flip_ie1; | ||
58 | long rcu_try_flip_g1; | ||
59 | long rcu_try_flip_a1; | ||
60 | long rcu_try_flip_ae1; | ||
61 | long rcu_try_flip_a2; | ||
62 | long rcu_try_flip_z1; | ||
63 | long rcu_try_flip_ze1; | ||
64 | long rcu_try_flip_z2; | ||
65 | long rcu_try_flip_m1; | ||
66 | long rcu_try_flip_me1; | ||
67 | long rcu_try_flip_m2; | ||
68 | }; | ||
69 | |||
70 | #ifdef CONFIG_RCU_TRACE | ||
71 | #define RCU_TRACE(fn, arg) fn(arg); | ||
72 | #else | ||
73 | #define RCU_TRACE(fn, arg) | ||
74 | #endif | ||
75 | |||
76 | extern void rcupreempt_trace_move2done(struct rcupreempt_trace *trace); | ||
77 | extern void rcupreempt_trace_move2wait(struct rcupreempt_trace *trace); | ||
78 | extern void rcupreempt_trace_try_flip_1(struct rcupreempt_trace *trace); | ||
79 | extern void rcupreempt_trace_try_flip_e1(struct rcupreempt_trace *trace); | ||
80 | extern void rcupreempt_trace_try_flip_i1(struct rcupreempt_trace *trace); | ||
81 | extern void rcupreempt_trace_try_flip_ie1(struct rcupreempt_trace *trace); | ||
82 | extern void rcupreempt_trace_try_flip_g1(struct rcupreempt_trace *trace); | ||
83 | extern void rcupreempt_trace_try_flip_a1(struct rcupreempt_trace *trace); | ||
84 | extern void rcupreempt_trace_try_flip_ae1(struct rcupreempt_trace *trace); | ||
85 | extern void rcupreempt_trace_try_flip_a2(struct rcupreempt_trace *trace); | ||
86 | extern void rcupreempt_trace_try_flip_z1(struct rcupreempt_trace *trace); | ||
87 | extern void rcupreempt_trace_try_flip_ze1(struct rcupreempt_trace *trace); | ||
88 | extern void rcupreempt_trace_try_flip_z2(struct rcupreempt_trace *trace); | ||
89 | extern void rcupreempt_trace_try_flip_m1(struct rcupreempt_trace *trace); | ||
90 | extern void rcupreempt_trace_try_flip_me1(struct rcupreempt_trace *trace); | ||
91 | extern void rcupreempt_trace_try_flip_m2(struct rcupreempt_trace *trace); | ||
92 | extern void rcupreempt_trace_check_callbacks(struct rcupreempt_trace *trace); | ||
93 | extern void rcupreempt_trace_done_remove(struct rcupreempt_trace *trace); | ||
94 | extern void rcupreempt_trace_invoke(struct rcupreempt_trace *trace); | ||
95 | extern void rcupreempt_trace_next_add(struct rcupreempt_trace *trace); | ||
96 | |||
97 | #endif /* __LINUX_RCUPREEMPT_TRACE_H */ | ||
diff --git a/include/linux/rcutree.h b/include/linux/rcutree.h index 5a5153806c42..37682770e9d2 100644 --- a/include/linux/rcutree.h +++ b/include/linux/rcutree.h | |||
@@ -24,270 +24,63 @@ | |||
24 | * and inputs from Rusty Russell, Andrea Arcangeli and Andi Kleen. | 24 | * and inputs from Rusty Russell, Andrea Arcangeli and Andi Kleen. |
25 | * | 25 | * |
26 | * For detailed explanation of Read-Copy Update mechanism see - | 26 | * For detailed explanation of Read-Copy Update mechanism see - |
27 | * Documentation/RCU | 27 | * Documentation/RCU |
28 | */ | 28 | */ |
29 | 29 | ||
30 | #ifndef __LINUX_RCUTREE_H | 30 | #ifndef __LINUX_RCUTREE_H |
31 | #define __LINUX_RCUTREE_H | 31 | #define __LINUX_RCUTREE_H |
32 | 32 | ||
33 | #include <linux/cache.h> | 33 | extern void rcu_sched_qs(int cpu); |
34 | #include <linux/spinlock.h> | 34 | extern void rcu_bh_qs(int cpu); |
35 | #include <linux/threads.h> | ||
36 | #include <linux/cpumask.h> | ||
37 | #include <linux/seqlock.h> | ||
38 | 35 | ||
39 | /* | 36 | extern int rcu_needs_cpu(int cpu); |
40 | * Define shape of hierarchy based on NR_CPUS and CONFIG_RCU_FANOUT. | ||
41 | * In theory, it should be possible to add more levels straightforwardly. | ||
42 | * In practice, this has not been tested, so there is probably some | ||
43 | * bug somewhere. | ||
44 | */ | ||
45 | #define MAX_RCU_LVLS 3 | ||
46 | #define RCU_FANOUT (CONFIG_RCU_FANOUT) | ||
47 | #define RCU_FANOUT_SQ (RCU_FANOUT * RCU_FANOUT) | ||
48 | #define RCU_FANOUT_CUBE (RCU_FANOUT_SQ * RCU_FANOUT) | ||
49 | |||
50 | #if NR_CPUS <= RCU_FANOUT | ||
51 | # define NUM_RCU_LVLS 1 | ||
52 | # define NUM_RCU_LVL_0 1 | ||
53 | # define NUM_RCU_LVL_1 (NR_CPUS) | ||
54 | # define NUM_RCU_LVL_2 0 | ||
55 | # define NUM_RCU_LVL_3 0 | ||
56 | #elif NR_CPUS <= RCU_FANOUT_SQ | ||
57 | # define NUM_RCU_LVLS 2 | ||
58 | # define NUM_RCU_LVL_0 1 | ||
59 | # define NUM_RCU_LVL_1 (((NR_CPUS) + RCU_FANOUT - 1) / RCU_FANOUT) | ||
60 | # define NUM_RCU_LVL_2 (NR_CPUS) | ||
61 | # define NUM_RCU_LVL_3 0 | ||
62 | #elif NR_CPUS <= RCU_FANOUT_CUBE | ||
63 | # define NUM_RCU_LVLS 3 | ||
64 | # define NUM_RCU_LVL_0 1 | ||
65 | # define NUM_RCU_LVL_1 (((NR_CPUS) + RCU_FANOUT_SQ - 1) / RCU_FANOUT_SQ) | ||
66 | # define NUM_RCU_LVL_2 (((NR_CPUS) + (RCU_FANOUT) - 1) / (RCU_FANOUT)) | ||
67 | # define NUM_RCU_LVL_3 NR_CPUS | ||
68 | #else | ||
69 | # error "CONFIG_RCU_FANOUT insufficient for NR_CPUS" | ||
70 | #endif /* #if (NR_CPUS) <= RCU_FANOUT */ | ||
71 | |||
72 | #define RCU_SUM (NUM_RCU_LVL_0 + NUM_RCU_LVL_1 + NUM_RCU_LVL_2 + NUM_RCU_LVL_3) | ||
73 | #define NUM_RCU_NODES (RCU_SUM - NR_CPUS) | ||
74 | |||
75 | /* | ||
76 | * Dynticks per-CPU state. | ||
77 | */ | ||
78 | struct rcu_dynticks { | ||
79 | int dynticks_nesting; /* Track nesting level, sort of. */ | ||
80 | int dynticks; /* Even value for dynticks-idle, else odd. */ | ||
81 | int dynticks_nmi; /* Even value for either dynticks-idle or */ | ||
82 | /* not in nmi handler, else odd. So this */ | ||
83 | /* remains even for nmi from irq handler. */ | ||
84 | }; | ||
85 | |||
86 | /* | ||
87 | * Definition for node within the RCU grace-period-detection hierarchy. | ||
88 | */ | ||
89 | struct rcu_node { | ||
90 | spinlock_t lock; | ||
91 | unsigned long qsmask; /* CPUs or groups that need to switch in */ | ||
92 | /* order for current grace period to proceed.*/ | ||
93 | unsigned long qsmaskinit; | ||
94 | /* Per-GP initialization for qsmask. */ | ||
95 | unsigned long grpmask; /* Mask to apply to parent qsmask. */ | ||
96 | int grplo; /* lowest-numbered CPU or group here. */ | ||
97 | int grphi; /* highest-numbered CPU or group here. */ | ||
98 | u8 grpnum; /* CPU/group number for next level up. */ | ||
99 | u8 level; /* root is at level 0. */ | ||
100 | struct rcu_node *parent; | ||
101 | } ____cacheline_internodealigned_in_smp; | ||
102 | |||
103 | /* Index values for nxttail array in struct rcu_data. */ | ||
104 | #define RCU_DONE_TAIL 0 /* Also RCU_WAIT head. */ | ||
105 | #define RCU_WAIT_TAIL 1 /* Also RCU_NEXT_READY head. */ | ||
106 | #define RCU_NEXT_READY_TAIL 2 /* Also RCU_NEXT head. */ | ||
107 | #define RCU_NEXT_TAIL 3 | ||
108 | #define RCU_NEXT_SIZE 4 | ||
109 | |||
110 | /* Per-CPU data for read-copy update. */ | ||
111 | struct rcu_data { | ||
112 | /* 1) quiescent-state and grace-period handling : */ | ||
113 | long completed; /* Track rsp->completed gp number */ | ||
114 | /* in order to detect GP end. */ | ||
115 | long gpnum; /* Highest gp number that this CPU */ | ||
116 | /* is aware of having started. */ | ||
117 | long passed_quiesc_completed; | ||
118 | /* Value of completed at time of qs. */ | ||
119 | bool passed_quiesc; /* User-mode/idle loop etc. */ | ||
120 | bool qs_pending; /* Core waits for quiesc state. */ | ||
121 | bool beenonline; /* CPU online at least once. */ | ||
122 | struct rcu_node *mynode; /* This CPU's leaf of hierarchy */ | ||
123 | unsigned long grpmask; /* Mask to apply to leaf qsmask. */ | ||
124 | |||
125 | /* 2) batch handling */ | ||
126 | /* | ||
127 | * If nxtlist is not NULL, it is partitioned as follows. | ||
128 | * Any of the partitions might be empty, in which case the | ||
129 | * pointer to that partition will be equal to the pointer for | ||
130 | * the following partition. When the list is empty, all of | ||
131 | * the nxttail elements point to nxtlist, which is NULL. | ||
132 | * | ||
133 | * [*nxttail[RCU_NEXT_READY_TAIL], NULL = *nxttail[RCU_NEXT_TAIL]): | ||
134 | * Entries that might have arrived after current GP ended | ||
135 | * [*nxttail[RCU_WAIT_TAIL], *nxttail[RCU_NEXT_READY_TAIL]): | ||
136 | * Entries known to have arrived before current GP ended | ||
137 | * [*nxttail[RCU_DONE_TAIL], *nxttail[RCU_WAIT_TAIL]): | ||
138 | * Entries that batch # <= ->completed - 1: waiting for current GP | ||
139 | * [nxtlist, *nxttail[RCU_DONE_TAIL]): | ||
140 | * Entries that batch # <= ->completed | ||
141 | * The grace period for these entries has completed, and | ||
142 | * the other grace-period-completed entries may be moved | ||
143 | * here temporarily in rcu_process_callbacks(). | ||
144 | */ | ||
145 | struct rcu_head *nxtlist; | ||
146 | struct rcu_head **nxttail[RCU_NEXT_SIZE]; | ||
147 | long qlen; /* # of queued callbacks */ | ||
148 | long blimit; /* Upper limit on a processed batch */ | ||
149 | |||
150 | #ifdef CONFIG_NO_HZ | ||
151 | /* 3) dynticks interface. */ | ||
152 | struct rcu_dynticks *dynticks; /* Shared per-CPU dynticks state. */ | ||
153 | int dynticks_snap; /* Per-GP tracking for dynticks. */ | ||
154 | int dynticks_nmi_snap; /* Per-GP tracking for dynticks_nmi. */ | ||
155 | #endif /* #ifdef CONFIG_NO_HZ */ | ||
156 | |||
157 | /* 4) reasons this CPU needed to be kicked by force_quiescent_state */ | ||
158 | #ifdef CONFIG_NO_HZ | ||
159 | unsigned long dynticks_fqs; /* Kicked due to dynticks idle. */ | ||
160 | #endif /* #ifdef CONFIG_NO_HZ */ | ||
161 | unsigned long offline_fqs; /* Kicked due to being offline. */ | ||
162 | unsigned long resched_ipi; /* Sent a resched IPI. */ | ||
163 | |||
164 | /* 5) __rcu_pending() statistics. */ | ||
165 | long n_rcu_pending; /* rcu_pending() calls since boot. */ | ||
166 | long n_rp_qs_pending; | ||
167 | long n_rp_cb_ready; | ||
168 | long n_rp_cpu_needs_gp; | ||
169 | long n_rp_gp_completed; | ||
170 | long n_rp_gp_started; | ||
171 | long n_rp_need_fqs; | ||
172 | long n_rp_need_nothing; | ||
173 | |||
174 | int cpu; | ||
175 | }; | ||
176 | |||
177 | /* Values for signaled field in struct rcu_state. */ | ||
178 | #define RCU_GP_INIT 0 /* Grace period being initialized. */ | ||
179 | #define RCU_SAVE_DYNTICK 1 /* Need to scan dyntick state. */ | ||
180 | #define RCU_FORCE_QS 2 /* Need to force quiescent state. */ | ||
181 | #ifdef CONFIG_NO_HZ | ||
182 | #define RCU_SIGNAL_INIT RCU_SAVE_DYNTICK | ||
183 | #else /* #ifdef CONFIG_NO_HZ */ | ||
184 | #define RCU_SIGNAL_INIT RCU_FORCE_QS | ||
185 | #endif /* #else #ifdef CONFIG_NO_HZ */ | ||
186 | |||
187 | #define RCU_JIFFIES_TILL_FORCE_QS 3 /* for rsp->jiffies_force_qs */ | ||
188 | #ifdef CONFIG_RCU_CPU_STALL_DETECTOR | ||
189 | #define RCU_SECONDS_TILL_STALL_CHECK (10 * HZ) /* for rsp->jiffies_stall */ | ||
190 | #define RCU_SECONDS_TILL_STALL_RECHECK (30 * HZ) /* for rsp->jiffies_stall */ | ||
191 | #define RCU_STALL_RAT_DELAY 2 /* Allow other CPUs time */ | ||
192 | /* to take at least one */ | ||
193 | /* scheduling clock irq */ | ||
194 | /* before ratting on them. */ | ||
195 | |||
196 | #endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */ | ||
197 | |||
198 | /* | ||
199 | * RCU global state, including node hierarchy. This hierarchy is | ||
200 | * represented in "heap" form in a dense array. The root (first level) | ||
201 | * of the hierarchy is in ->node[0] (referenced by ->level[0]), the second | ||
202 | * level in ->node[1] through ->node[m] (->node[1] referenced by ->level[1]), | ||
203 | * and the third level in ->node[m+1] and following (->node[m+1] referenced | ||
204 | * by ->level[2]). The number of levels is determined by the number of | ||
205 | * CPUs and by CONFIG_RCU_FANOUT. Small systems will have a "hierarchy" | ||
206 | * consisting of a single rcu_node. | ||
207 | */ | ||
208 | struct rcu_state { | ||
209 | struct rcu_node node[NUM_RCU_NODES]; /* Hierarchy. */ | ||
210 | struct rcu_node *level[NUM_RCU_LVLS]; /* Hierarchy levels. */ | ||
211 | u32 levelcnt[MAX_RCU_LVLS + 1]; /* # nodes in each level. */ | ||
212 | u8 levelspread[NUM_RCU_LVLS]; /* kids/node in each level. */ | ||
213 | struct rcu_data *rda[NR_CPUS]; /* array of rdp pointers. */ | ||
214 | |||
215 | /* The following fields are guarded by the root rcu_node's lock. */ | ||
216 | |||
217 | u8 signaled ____cacheline_internodealigned_in_smp; | ||
218 | /* Force QS state. */ | ||
219 | long gpnum; /* Current gp number. */ | ||
220 | long completed; /* # of last completed gp. */ | ||
221 | spinlock_t onofflock; /* exclude on/offline and */ | ||
222 | /* starting new GP. */ | ||
223 | spinlock_t fqslock; /* Only one task forcing */ | ||
224 | /* quiescent states. */ | ||
225 | unsigned long jiffies_force_qs; /* Time at which to invoke */ | ||
226 | /* force_quiescent_state(). */ | ||
227 | unsigned long n_force_qs; /* Number of calls to */ | ||
228 | /* force_quiescent_state(). */ | ||
229 | unsigned long n_force_qs_lh; /* ~Number of calls leaving */ | ||
230 | /* due to lock unavailable. */ | ||
231 | unsigned long n_force_qs_ngp; /* Number of calls leaving */ | ||
232 | /* due to no GP active. */ | ||
233 | #ifdef CONFIG_RCU_CPU_STALL_DETECTOR | ||
234 | unsigned long gp_start; /* Time at which GP started, */ | ||
235 | /* but in jiffies. */ | ||
236 | unsigned long jiffies_stall; /* Time at which to check */ | ||
237 | /* for CPU stalls. */ | ||
238 | #endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */ | ||
239 | #ifdef CONFIG_NO_HZ | ||
240 | long dynticks_completed; /* Value of completed @ snap. */ | ||
241 | #endif /* #ifdef CONFIG_NO_HZ */ | ||
242 | }; | ||
243 | 37 | ||
244 | extern void rcu_qsctr_inc(int cpu); | 38 | #ifdef CONFIG_TREE_PREEMPT_RCU |
245 | extern void rcu_bh_qsctr_inc(int cpu); | ||
246 | 39 | ||
247 | extern int rcu_pending(int cpu); | 40 | extern void __rcu_read_lock(void); |
248 | extern int rcu_needs_cpu(int cpu); | 41 | extern void __rcu_read_unlock(void); |
42 | extern void exit_rcu(void); | ||
249 | 43 | ||
250 | #ifdef CONFIG_DEBUG_LOCK_ALLOC | 44 | #else /* #ifdef CONFIG_TREE_PREEMPT_RCU */ |
251 | extern struct lockdep_map rcu_lock_map; | ||
252 | # define rcu_read_acquire() \ | ||
253 | lock_acquire(&rcu_lock_map, 0, 0, 2, 1, NULL, _THIS_IP_) | ||
254 | # define rcu_read_release() lock_release(&rcu_lock_map, 1, _THIS_IP_) | ||
255 | #else | ||
256 | # define rcu_read_acquire() do { } while (0) | ||
257 | # define rcu_read_release() do { } while (0) | ||
258 | #endif | ||
259 | 45 | ||
260 | static inline void __rcu_read_lock(void) | 46 | static inline void __rcu_read_lock(void) |
261 | { | 47 | { |
262 | preempt_disable(); | 48 | preempt_disable(); |
263 | __acquire(RCU); | ||
264 | rcu_read_acquire(); | ||
265 | } | 49 | } |
50 | |||
266 | static inline void __rcu_read_unlock(void) | 51 | static inline void __rcu_read_unlock(void) |
267 | { | 52 | { |
268 | rcu_read_release(); | ||
269 | __release(RCU); | ||
270 | preempt_enable(); | 53 | preempt_enable(); |
271 | } | 54 | } |
55 | |||
56 | #define __synchronize_sched() synchronize_rcu() | ||
57 | |||
58 | static inline void exit_rcu(void) | ||
59 | { | ||
60 | } | ||
61 | |||
62 | #endif /* #else #ifdef CONFIG_TREE_PREEMPT_RCU */ | ||
63 | |||
272 | static inline void __rcu_read_lock_bh(void) | 64 | static inline void __rcu_read_lock_bh(void) |
273 | { | 65 | { |
274 | local_bh_disable(); | 66 | local_bh_disable(); |
275 | __acquire(RCU_BH); | ||
276 | rcu_read_acquire(); | ||
277 | } | 67 | } |
278 | static inline void __rcu_read_unlock_bh(void) | 68 | static inline void __rcu_read_unlock_bh(void) |
279 | { | 69 | { |
280 | rcu_read_release(); | ||
281 | __release(RCU_BH); | ||
282 | local_bh_enable(); | 70 | local_bh_enable(); |
283 | } | 71 | } |
284 | 72 | ||
285 | #define __synchronize_sched() synchronize_rcu() | 73 | extern void call_rcu_sched(struct rcu_head *head, |
74 | void (*func)(struct rcu_head *rcu)); | ||
286 | 75 | ||
287 | #define call_rcu_sched(head, func) call_rcu(head, func) | 76 | static inline void synchronize_rcu_expedited(void) |
77 | { | ||
78 | synchronize_sched_expedited(); | ||
79 | } | ||
288 | 80 | ||
289 | static inline void rcu_init_sched(void) | 81 | static inline void synchronize_rcu_bh_expedited(void) |
290 | { | 82 | { |
83 | synchronize_sched_expedited(); | ||
291 | } | 84 | } |
292 | 85 | ||
293 | extern void __rcu_init(void); | 86 | extern void __rcu_init(void); |
@@ -296,6 +89,11 @@ extern void rcu_restart_cpu(int cpu); | |||
296 | 89 | ||
297 | extern long rcu_batches_completed(void); | 90 | extern long rcu_batches_completed(void); |
298 | extern long rcu_batches_completed_bh(void); | 91 | extern long rcu_batches_completed_bh(void); |
92 | extern long rcu_batches_completed_sched(void); | ||
93 | |||
94 | static inline void rcu_init_sched(void) | ||
95 | { | ||
96 | } | ||
299 | 97 | ||
300 | #ifdef CONFIG_NO_HZ | 98 | #ifdef CONFIG_NO_HZ |
301 | void rcu_enter_nohz(void); | 99 | void rcu_enter_nohz(void); |
diff --git a/include/linux/rds.h b/include/linux/rds.h index d91dc91f5443..89d46e1afbb1 100644 --- a/include/linux/rds.h +++ b/include/linux/rds.h | |||
@@ -147,6 +147,18 @@ struct rds_info_socket { | |||
147 | u_int64_t inum; | 147 | u_int64_t inum; |
148 | } __attribute__((packed)); | 148 | } __attribute__((packed)); |
149 | 149 | ||
150 | struct rds_info_tcp_socket { | ||
151 | __be32 local_addr; | ||
152 | __be16 local_port; | ||
153 | __be32 peer_addr; | ||
154 | __be16 peer_port; | ||
155 | u_int64_t hdr_rem; | ||
156 | u_int64_t data_rem; | ||
157 | u_int32_t last_sent_nxt; | ||
158 | u_int32_t last_expected_una; | ||
159 | u_int32_t last_seen_una; | ||
160 | } __attribute__((packed)); | ||
161 | |||
150 | #define RDS_IB_GID_LEN 16 | 162 | #define RDS_IB_GID_LEN 16 |
151 | struct rds_info_rdma_connection { | 163 | struct rds_info_rdma_connection { |
152 | __be32 src_addr; | 164 | __be32 src_addr; |
diff --git a/include/linux/regulator/driver.h b/include/linux/regulator/driver.h index 225f733e7533..ce1be708ca16 100644 --- a/include/linux/regulator/driver.h +++ b/include/linux/regulator/driver.h | |||
@@ -193,6 +193,8 @@ void *rdev_get_drvdata(struct regulator_dev *rdev); | |||
193 | struct device *rdev_get_dev(struct regulator_dev *rdev); | 193 | struct device *rdev_get_dev(struct regulator_dev *rdev); |
194 | int rdev_get_id(struct regulator_dev *rdev); | 194 | int rdev_get_id(struct regulator_dev *rdev); |
195 | 195 | ||
196 | int regulator_mode_to_status(unsigned int); | ||
197 | |||
196 | void *regulator_get_init_drvdata(struct regulator_init_data *reg_init_data); | 198 | void *regulator_get_init_drvdata(struct regulator_init_data *reg_init_data); |
197 | 199 | ||
198 | #endif | 200 | #endif |
diff --git a/include/linux/rfkill.h b/include/linux/rfkill.h index e73e2429a1b1..3392c59d2706 100644 --- a/include/linux/rfkill.h +++ b/include/linux/rfkill.h | |||
@@ -6,20 +6,17 @@ | |||
6 | * Copyright (C) 2007 Dmitry Torokhov | 6 | * Copyright (C) 2007 Dmitry Torokhov |
7 | * Copyright 2009 Johannes Berg <johannes@sipsolutions.net> | 7 | * Copyright 2009 Johannes Berg <johannes@sipsolutions.net> |
8 | * | 8 | * |
9 | * This program is free software; you can redistribute it and/or modify | 9 | * Permission to use, copy, modify, and/or distribute this software for any |
10 | * it under the terms of the GNU General Public License as published by | 10 | * purpose with or without fee is hereby granted, provided that the above |
11 | * the Free Software Foundation; either version 2 of the License, or | 11 | * copyright notice and this permission notice appear in all copies. |
12 | * (at your option) any later version. | ||
13 | * | 12 | * |
14 | * This program is distributed in the hope that it will be useful, | 13 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 14 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 15 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
17 | * GNU General Public License for more details. | 16 | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
18 | * | 17 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
19 | * You should have received a copy of the GNU General Public License | 18 | * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
20 | * along with this program; if not, write to the | 19 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
21 | * Free Software Foundation, Inc., | ||
22 | * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
23 | */ | 20 | */ |
24 | 21 | ||
25 | #include <linux/types.h> | 22 | #include <linux/types.h> |
@@ -47,6 +44,7 @@ enum rfkill_type { | |||
47 | RFKILL_TYPE_UWB, | 44 | RFKILL_TYPE_UWB, |
48 | RFKILL_TYPE_WIMAX, | 45 | RFKILL_TYPE_WIMAX, |
49 | RFKILL_TYPE_WWAN, | 46 | RFKILL_TYPE_WWAN, |
47 | RFKILL_TYPE_GPS, | ||
50 | NUM_RFKILL_TYPES, | 48 | NUM_RFKILL_TYPES, |
51 | }; | 49 | }; |
52 | 50 | ||
@@ -82,6 +80,20 @@ struct rfkill_event { | |||
82 | __u8 soft, hard; | 80 | __u8 soft, hard; |
83 | } __packed; | 81 | } __packed; |
84 | 82 | ||
83 | /* | ||
84 | * We are planning to be backward and forward compatible with changes | ||
85 | * to the event struct, by adding new, optional, members at the end. | ||
86 | * When reading an event (whether the kernel from userspace or vice | ||
87 | * versa) we need to accept anything that's at least as large as the | ||
88 | * version 1 event size, but might be able to accept other sizes in | ||
89 | * the future. | ||
90 | * | ||
91 | * One exception is the kernel -- we already have two event sizes in | ||
92 | * that we've made the 'hard' member optional since our only option | ||
93 | * is to ignore it anyway. | ||
94 | */ | ||
95 | #define RFKILL_EVENT_SIZE_V1 8 | ||
96 | |||
85 | /* ioctl for turning off rfkill-input (if present) */ | 97 | /* ioctl for turning off rfkill-input (if present) */ |
86 | #define RFKILL_IOC_MAGIC 'R' | 98 | #define RFKILL_IOC_MAGIC 'R' |
87 | #define RFKILL_IOC_NOINPUT 1 | 99 | #define RFKILL_IOC_NOINPUT 1 |
@@ -99,7 +111,6 @@ enum rfkill_user_states { | |||
99 | #undef RFKILL_STATE_UNBLOCKED | 111 | #undef RFKILL_STATE_UNBLOCKED |
100 | #undef RFKILL_STATE_HARD_BLOCKED | 112 | #undef RFKILL_STATE_HARD_BLOCKED |
101 | 113 | ||
102 | #include <linux/types.h> | ||
103 | #include <linux/kernel.h> | 114 | #include <linux/kernel.h> |
104 | #include <linux/list.h> | 115 | #include <linux/list.h> |
105 | #include <linux/mutex.h> | 116 | #include <linux/mutex.h> |
@@ -225,7 +236,7 @@ void rfkill_destroy(struct rfkill *rfkill); | |||
225 | * should be blocked) so that drivers need not keep track of the soft | 236 | * should be blocked) so that drivers need not keep track of the soft |
226 | * block state -- which they might not be able to. | 237 | * block state -- which they might not be able to. |
227 | */ | 238 | */ |
228 | bool __must_check rfkill_set_hw_state(struct rfkill *rfkill, bool blocked); | 239 | bool rfkill_set_hw_state(struct rfkill *rfkill, bool blocked); |
229 | 240 | ||
230 | /** | 241 | /** |
231 | * rfkill_set_sw_state - Set the internal rfkill software block state | 242 | * rfkill_set_sw_state - Set the internal rfkill software block state |
diff --git a/include/linux/ring_buffer.h b/include/linux/ring_buffer.h index 29f8599e6bea..5fcc31ed5771 100644 --- a/include/linux/ring_buffer.h +++ b/include/linux/ring_buffer.h | |||
@@ -75,20 +75,6 @@ ring_buffer_event_time_delta(struct ring_buffer_event *event) | |||
75 | } | 75 | } |
76 | 76 | ||
77 | /* | 77 | /* |
78 | * ring_buffer_event_discard can discard any event in the ring buffer. | ||
79 | * it is up to the caller to protect against a reader from | ||
80 | * consuming it or a writer from wrapping and replacing it. | ||
81 | * | ||
82 | * No external protection is needed if this is called before | ||
83 | * the event is commited. But in that case it would be better to | ||
84 | * use ring_buffer_discard_commit. | ||
85 | * | ||
86 | * Note, if an event that has not been committed is discarded | ||
87 | * with ring_buffer_event_discard, it must still be committed. | ||
88 | */ | ||
89 | void ring_buffer_event_discard(struct ring_buffer_event *event); | ||
90 | |||
91 | /* | ||
92 | * ring_buffer_discard_commit will remove an event that has not | 78 | * ring_buffer_discard_commit will remove an event that has not |
93 | * ben committed yet. If this is used, then ring_buffer_unlock_commit | 79 | * ben committed yet. If this is used, then ring_buffer_unlock_commit |
94 | * must not be called on the discarded event. This function | 80 | * must not be called on the discarded event. This function |
@@ -154,8 +140,17 @@ unsigned long ring_buffer_size(struct ring_buffer *buffer); | |||
154 | void ring_buffer_reset_cpu(struct ring_buffer *buffer, int cpu); | 140 | void ring_buffer_reset_cpu(struct ring_buffer *buffer, int cpu); |
155 | void ring_buffer_reset(struct ring_buffer *buffer); | 141 | void ring_buffer_reset(struct ring_buffer *buffer); |
156 | 142 | ||
143 | #ifdef CONFIG_RING_BUFFER_ALLOW_SWAP | ||
157 | int ring_buffer_swap_cpu(struct ring_buffer *buffer_a, | 144 | int ring_buffer_swap_cpu(struct ring_buffer *buffer_a, |
158 | struct ring_buffer *buffer_b, int cpu); | 145 | struct ring_buffer *buffer_b, int cpu); |
146 | #else | ||
147 | static inline int | ||
148 | ring_buffer_swap_cpu(struct ring_buffer *buffer_a, | ||
149 | struct ring_buffer *buffer_b, int cpu) | ||
150 | { | ||
151 | return -ENODEV; | ||
152 | } | ||
153 | #endif | ||
159 | 154 | ||
160 | int ring_buffer_empty(struct ring_buffer *buffer); | 155 | int ring_buffer_empty(struct ring_buffer *buffer); |
161 | int ring_buffer_empty_cpu(struct ring_buffer *buffer, int cpu); | 156 | int ring_buffer_empty_cpu(struct ring_buffer *buffer, int cpu); |
@@ -170,7 +165,6 @@ unsigned long ring_buffer_overruns(struct ring_buffer *buffer); | |||
170 | unsigned long ring_buffer_entries_cpu(struct ring_buffer *buffer, int cpu); | 165 | unsigned long ring_buffer_entries_cpu(struct ring_buffer *buffer, int cpu); |
171 | unsigned long ring_buffer_overrun_cpu(struct ring_buffer *buffer, int cpu); | 166 | unsigned long ring_buffer_overrun_cpu(struct ring_buffer *buffer, int cpu); |
172 | unsigned long ring_buffer_commit_overrun_cpu(struct ring_buffer *buffer, int cpu); | 167 | unsigned long ring_buffer_commit_overrun_cpu(struct ring_buffer *buffer, int cpu); |
173 | unsigned long ring_buffer_nmi_dropped_cpu(struct ring_buffer *buffer, int cpu); | ||
174 | 168 | ||
175 | u64 ring_buffer_time_stamp(struct ring_buffer *buffer, int cpu); | 169 | u64 ring_buffer_time_stamp(struct ring_buffer *buffer, int cpu); |
176 | void ring_buffer_normalize_time_stamp(struct ring_buffer *buffer, | 170 | void ring_buffer_normalize_time_stamp(struct ring_buffer *buffer, |
diff --git a/include/linux/rmap.h b/include/linux/rmap.h index bf116d0dbf23..477841d29fce 100644 --- a/include/linux/rmap.h +++ b/include/linux/rmap.h | |||
@@ -71,14 +71,10 @@ void page_add_new_anon_rmap(struct page *, struct vm_area_struct *, unsigned lon | |||
71 | void page_add_file_rmap(struct page *); | 71 | void page_add_file_rmap(struct page *); |
72 | void page_remove_rmap(struct page *); | 72 | void page_remove_rmap(struct page *); |
73 | 73 | ||
74 | #ifdef CONFIG_DEBUG_VM | 74 | static inline void page_dup_rmap(struct page *page) |
75 | void page_dup_rmap(struct page *page, struct vm_area_struct *vma, unsigned long address); | ||
76 | #else | ||
77 | static inline void page_dup_rmap(struct page *page, struct vm_area_struct *vma, unsigned long address) | ||
78 | { | 75 | { |
79 | atomic_inc(&page->_mapcount); | 76 | atomic_inc(&page->_mapcount); |
80 | } | 77 | } |
81 | #endif | ||
82 | 78 | ||
83 | /* | 79 | /* |
84 | * Called from mm/vmscan.c to handle paging out | 80 | * Called from mm/vmscan.c to handle paging out |
diff --git a/include/linux/rtnetlink.h b/include/linux/rtnetlink.h index ba3254ecf7fb..adf2068d12b5 100644 --- a/include/linux/rtnetlink.h +++ b/include/linux/rtnetlink.h | |||
@@ -104,7 +104,7 @@ enum { | |||
104 | RTM_NEWADDRLABEL = 72, | 104 | RTM_NEWADDRLABEL = 72, |
105 | #define RTM_NEWADDRLABEL RTM_NEWADDRLABEL | 105 | #define RTM_NEWADDRLABEL RTM_NEWADDRLABEL |
106 | RTM_DELADDRLABEL, | 106 | RTM_DELADDRLABEL, |
107 | #define RTM_NEWADDRLABEL RTM_NEWADDRLABEL | 107 | #define RTM_DELADDRLABEL RTM_DELADDRLABEL |
108 | RTM_GETADDRLABEL, | 108 | RTM_GETADDRLABEL, |
109 | #define RTM_GETADDRLABEL RTM_GETADDRLABEL | 109 | #define RTM_GETADDRLABEL RTM_GETADDRLABEL |
110 | 110 | ||
diff --git a/include/linux/rxrpc.h b/include/linux/rxrpc.h index f7b826b565c7..a53915cd5581 100644 --- a/include/linux/rxrpc.h +++ b/include/linux/rxrpc.h | |||
@@ -58,5 +58,12 @@ struct sockaddr_rxrpc { | |||
58 | #define RXRPC_SECURITY_AUTH 1 /* authenticated packets */ | 58 | #define RXRPC_SECURITY_AUTH 1 /* authenticated packets */ |
59 | #define RXRPC_SECURITY_ENCRYPT 2 /* encrypted packets */ | 59 | #define RXRPC_SECURITY_ENCRYPT 2 /* encrypted packets */ |
60 | 60 | ||
61 | /* | ||
62 | * RxRPC security indices | ||
63 | */ | ||
64 | #define RXRPC_SECURITY_NONE 0 /* no security protocol */ | ||
65 | #define RXRPC_SECURITY_RXKAD 2 /* kaserver or kerberos 4 */ | ||
66 | #define RXRPC_SECURITY_RXGK 4 /* gssapi-based */ | ||
67 | #define RXRPC_SECURITY_RXK5 5 /* kerberos 5 */ | ||
61 | 68 | ||
62 | #endif /* _LINUX_RXRPC_H */ | 69 | #endif /* _LINUX_RXRPC_H */ |
diff --git a/include/linux/scatterlist.h b/include/linux/scatterlist.h index e5996984ddd0..9aaf5bfdad1a 100644 --- a/include/linux/scatterlist.h +++ b/include/linux/scatterlist.h | |||
@@ -242,6 +242,8 @@ size_t sg_copy_to_buffer(struct scatterlist *sgl, unsigned int nents, | |||
242 | */ | 242 | */ |
243 | 243 | ||
244 | #define SG_MITER_ATOMIC (1 << 0) /* use kmap_atomic */ | 244 | #define SG_MITER_ATOMIC (1 << 0) /* use kmap_atomic */ |
245 | #define SG_MITER_TO_SG (1 << 1) /* flush back to phys on unmap */ | ||
246 | #define SG_MITER_FROM_SG (1 << 2) /* nop */ | ||
245 | 247 | ||
246 | struct sg_mapping_iter { | 248 | struct sg_mapping_iter { |
247 | /* the following three fields can be accessed directly */ | 249 | /* the following three fields can be accessed directly */ |
diff --git a/include/linux/sched.h b/include/linux/sched.h index 4d0754269884..97b10da0a3ea 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
@@ -38,6 +38,8 @@ | |||
38 | #define SCHED_BATCH 3 | 38 | #define SCHED_BATCH 3 |
39 | /* SCHED_ISO: reserved but not implemented yet */ | 39 | /* SCHED_ISO: reserved but not implemented yet */ |
40 | #define SCHED_IDLE 5 | 40 | #define SCHED_IDLE 5 |
41 | /* Can be ORed in to make sure the process is reverted back to SCHED_NORMAL on fork */ | ||
42 | #define SCHED_RESET_ON_FORK 0x40000000 | ||
41 | 43 | ||
42 | #ifdef __KERNEL__ | 44 | #ifdef __KERNEL__ |
43 | 45 | ||
@@ -98,7 +100,7 @@ struct robust_list_head; | |||
98 | struct bio; | 100 | struct bio; |
99 | struct fs_struct; | 101 | struct fs_struct; |
100 | struct bts_context; | 102 | struct bts_context; |
101 | struct perf_counter_context; | 103 | struct perf_event_context; |
102 | 104 | ||
103 | /* | 105 | /* |
104 | * List of flags we want to share for kernel threads, | 106 | * List of flags we want to share for kernel threads, |
@@ -138,6 +140,10 @@ extern int nr_processes(void); | |||
138 | extern unsigned long nr_running(void); | 140 | extern unsigned long nr_running(void); |
139 | extern unsigned long nr_uninterruptible(void); | 141 | extern unsigned long nr_uninterruptible(void); |
140 | extern unsigned long nr_iowait(void); | 142 | extern unsigned long nr_iowait(void); |
143 | extern unsigned long nr_iowait_cpu(void); | ||
144 | extern unsigned long this_cpu_load(void); | ||
145 | |||
146 | |||
141 | extern void calc_global_load(void); | 147 | extern void calc_global_load(void); |
142 | extern u64 cpu_nr_migrations(int cpu); | 148 | extern u64 cpu_nr_migrations(int cpu); |
143 | 149 | ||
@@ -188,6 +194,7 @@ extern unsigned long long time_sync_thresh; | |||
188 | /* in tsk->state again */ | 194 | /* in tsk->state again */ |
189 | #define TASK_DEAD 64 | 195 | #define TASK_DEAD 64 |
190 | #define TASK_WAKEKILL 128 | 196 | #define TASK_WAKEKILL 128 |
197 | #define TASK_WAKING 256 | ||
191 | 198 | ||
192 | /* Convenience macros for the sake of set_task_state */ | 199 | /* Convenience macros for the sake of set_task_state */ |
193 | #define TASK_KILLABLE (TASK_WAKEKILL | TASK_UNINTERRUPTIBLE) | 200 | #define TASK_KILLABLE (TASK_WAKEKILL | TASK_UNINTERRUPTIBLE) |
@@ -209,7 +216,7 @@ extern unsigned long long time_sync_thresh; | |||
209 | ((task->state & (__TASK_STOPPED | __TASK_TRACED)) != 0) | 216 | ((task->state & (__TASK_STOPPED | __TASK_TRACED)) != 0) |
210 | #define task_contributes_to_load(task) \ | 217 | #define task_contributes_to_load(task) \ |
211 | ((task->state & TASK_UNINTERRUPTIBLE) != 0 && \ | 218 | ((task->state & TASK_UNINTERRUPTIBLE) != 0 && \ |
212 | (task->flags & PF_FROZEN) == 0) | 219 | (task->flags & PF_FREEZING) == 0) |
213 | 220 | ||
214 | #define __set_task_state(tsk, state_value) \ | 221 | #define __set_task_state(tsk, state_value) \ |
215 | do { (tsk)->state = (state_value); } while (0) | 222 | do { (tsk)->state = (state_value); } while (0) |
@@ -254,7 +261,7 @@ extern asmlinkage void schedule_tail(struct task_struct *prev); | |||
254 | extern void init_idle(struct task_struct *idle, int cpu); | 261 | extern void init_idle(struct task_struct *idle, int cpu); |
255 | extern void init_idle_bootup_task(struct task_struct *idle); | 262 | extern void init_idle_bootup_task(struct task_struct *idle); |
256 | 263 | ||
257 | extern int runqueue_is_locked(void); | 264 | extern int runqueue_is_locked(int cpu); |
258 | extern void task_rq_unlock_wait(struct task_struct *p); | 265 | extern void task_rq_unlock_wait(struct task_struct *p); |
259 | 266 | ||
260 | extern cpumask_var_t nohz_cpu_mask; | 267 | extern cpumask_var_t nohz_cpu_mask; |
@@ -349,8 +356,20 @@ extern int mutex_spin_on_owner(struct mutex *lock, struct thread_info *owner); | |||
349 | struct nsproxy; | 356 | struct nsproxy; |
350 | struct user_namespace; | 357 | struct user_namespace; |
351 | 358 | ||
352 | /* Maximum number of active map areas.. This is a random (large) number */ | 359 | /* |
353 | #define DEFAULT_MAX_MAP_COUNT 65536 | 360 | * Default maximum number of active map areas, this limits the number of vmas |
361 | * per mm struct. Users can overwrite this number by sysctl but there is a | ||
362 | * problem. | ||
363 | * | ||
364 | * When a program's coredump is generated as ELF format, a section is created | ||
365 | * per a vma. In ELF, the number of sections is represented in unsigned short. | ||
366 | * This means the number of sections should be smaller than 65535 at coredump. | ||
367 | * Because the kernel adds some informative sections to a image of program at | ||
368 | * generating coredump, we need some margin. The number of extra sections is | ||
369 | * 1-3 now and depends on arch. We use "5" as safe margin, here. | ||
370 | */ | ||
371 | #define MAPCOUNT_ELF_CORE_MARGIN (5) | ||
372 | #define DEFAULT_MAX_MAP_COUNT (USHORT_MAX - MAPCOUNT_ELF_CORE_MARGIN) | ||
354 | 373 | ||
355 | extern int sysctl_max_map_count; | 374 | extern int sysctl_max_map_count; |
356 | 375 | ||
@@ -419,7 +438,9 @@ extern int get_dumpable(struct mm_struct *mm); | |||
419 | /* dumpable bits */ | 438 | /* dumpable bits */ |
420 | #define MMF_DUMPABLE 0 /* core dump is permitted */ | 439 | #define MMF_DUMPABLE 0 /* core dump is permitted */ |
421 | #define MMF_DUMP_SECURELY 1 /* core file is readable only by root */ | 440 | #define MMF_DUMP_SECURELY 1 /* core file is readable only by root */ |
441 | |||
422 | #define MMF_DUMPABLE_BITS 2 | 442 | #define MMF_DUMPABLE_BITS 2 |
443 | #define MMF_DUMPABLE_MASK ((1 << MMF_DUMPABLE_BITS) - 1) | ||
423 | 444 | ||
424 | /* coredump filter bits */ | 445 | /* coredump filter bits */ |
425 | #define MMF_DUMP_ANON_PRIVATE 2 | 446 | #define MMF_DUMP_ANON_PRIVATE 2 |
@@ -429,6 +450,7 @@ extern int get_dumpable(struct mm_struct *mm); | |||
429 | #define MMF_DUMP_ELF_HEADERS 6 | 450 | #define MMF_DUMP_ELF_HEADERS 6 |
430 | #define MMF_DUMP_HUGETLB_PRIVATE 7 | 451 | #define MMF_DUMP_HUGETLB_PRIVATE 7 |
431 | #define MMF_DUMP_HUGETLB_SHARED 8 | 452 | #define MMF_DUMP_HUGETLB_SHARED 8 |
453 | |||
432 | #define MMF_DUMP_FILTER_SHIFT MMF_DUMPABLE_BITS | 454 | #define MMF_DUMP_FILTER_SHIFT MMF_DUMPABLE_BITS |
433 | #define MMF_DUMP_FILTER_BITS 7 | 455 | #define MMF_DUMP_FILTER_BITS 7 |
434 | #define MMF_DUMP_FILTER_MASK \ | 456 | #define MMF_DUMP_FILTER_MASK \ |
@@ -442,6 +464,10 @@ extern int get_dumpable(struct mm_struct *mm); | |||
442 | #else | 464 | #else |
443 | # define MMF_DUMP_MASK_DEFAULT_ELF 0 | 465 | # define MMF_DUMP_MASK_DEFAULT_ELF 0 |
444 | #endif | 466 | #endif |
467 | /* leave room for more dump flags */ | ||
468 | #define MMF_VM_MERGEABLE 16 /* KSM may merge identical pages */ | ||
469 | |||
470 | #define MMF_INIT_MASK (MMF_DUMPABLE_MASK | MMF_DUMP_FILTER_MASK) | ||
445 | 471 | ||
446 | struct sighand_struct { | 472 | struct sighand_struct { |
447 | atomic_t count; | 473 | atomic_t count; |
@@ -486,6 +512,15 @@ struct task_cputime { | |||
486 | .sum_exec_runtime = 0, \ | 512 | .sum_exec_runtime = 0, \ |
487 | } | 513 | } |
488 | 514 | ||
515 | /* | ||
516 | * Disable preemption until the scheduler is running. | ||
517 | * Reset by start_kernel()->sched_init()->init_idle(). | ||
518 | * | ||
519 | * We include PREEMPT_ACTIVE to avoid cond_resched() from working | ||
520 | * before the scheduler is active -- see should_resched(). | ||
521 | */ | ||
522 | #define INIT_PREEMPT_COUNT (1 + PREEMPT_ACTIVE) | ||
523 | |||
489 | /** | 524 | /** |
490 | * struct thread_group_cputimer - thread group interval timer counts | 525 | * struct thread_group_cputimer - thread group interval timer counts |
491 | * @cputime: thread group interval timers. | 526 | * @cputime: thread group interval timers. |
@@ -608,6 +643,8 @@ struct signal_struct { | |||
608 | unsigned audit_tty; | 643 | unsigned audit_tty; |
609 | struct tty_audit_buf *tty_audit_buf; | 644 | struct tty_audit_buf *tty_audit_buf; |
610 | #endif | 645 | #endif |
646 | |||
647 | int oom_adj; /* OOM kill score adjustment (bit shift) */ | ||
611 | }; | 648 | }; |
612 | 649 | ||
613 | /* Context switch must be unlocked if interrupts are to be enabled */ | 650 | /* Context switch must be unlocked if interrupts are to be enabled */ |
@@ -677,7 +714,7 @@ struct user_struct { | |||
677 | #endif | 714 | #endif |
678 | #endif | 715 | #endif |
679 | 716 | ||
680 | #ifdef CONFIG_PERF_COUNTERS | 717 | #ifdef CONFIG_PERF_EVENTS |
681 | atomic_long_t locked_vm; | 718 | atomic_long_t locked_vm; |
682 | #endif | 719 | #endif |
683 | }; | 720 | }; |
@@ -775,18 +812,19 @@ enum cpu_idle_type { | |||
775 | #define SCHED_LOAD_SCALE_FUZZ SCHED_LOAD_SCALE | 812 | #define SCHED_LOAD_SCALE_FUZZ SCHED_LOAD_SCALE |
776 | 813 | ||
777 | #ifdef CONFIG_SMP | 814 | #ifdef CONFIG_SMP |
778 | #define SD_LOAD_BALANCE 1 /* Do load balancing on this domain. */ | 815 | #define SD_LOAD_BALANCE 0x0001 /* Do load balancing on this domain. */ |
779 | #define SD_BALANCE_NEWIDLE 2 /* Balance when about to become idle */ | 816 | #define SD_BALANCE_NEWIDLE 0x0002 /* Balance when about to become idle */ |
780 | #define SD_BALANCE_EXEC 4 /* Balance on exec */ | 817 | #define SD_BALANCE_EXEC 0x0004 /* Balance on exec */ |
781 | #define SD_BALANCE_FORK 8 /* Balance on fork, clone */ | 818 | #define SD_BALANCE_FORK 0x0008 /* Balance on fork, clone */ |
782 | #define SD_WAKE_IDLE 16 /* Wake to idle CPU on task wakeup */ | 819 | #define SD_BALANCE_WAKE 0x0010 /* Balance on wakeup */ |
783 | #define SD_WAKE_AFFINE 32 /* Wake task to waking CPU */ | 820 | #define SD_WAKE_AFFINE 0x0020 /* Wake task to waking CPU */ |
784 | #define SD_WAKE_BALANCE 64 /* Perform balancing at task wakeup */ | 821 | #define SD_PREFER_LOCAL 0x0040 /* Prefer to keep tasks local to this domain */ |
785 | #define SD_SHARE_CPUPOWER 128 /* Domain members share cpu power */ | 822 | #define SD_SHARE_CPUPOWER 0x0080 /* Domain members share cpu power */ |
786 | #define SD_POWERSAVINGS_BALANCE 256 /* Balance for power savings */ | 823 | #define SD_POWERSAVINGS_BALANCE 0x0100 /* Balance for power savings */ |
787 | #define SD_SHARE_PKG_RESOURCES 512 /* Domain members share cpu pkg resources */ | 824 | #define SD_SHARE_PKG_RESOURCES 0x0200 /* Domain members share cpu pkg resources */ |
788 | #define SD_SERIALIZE 1024 /* Only a single load balancing instance */ | 825 | #define SD_SERIALIZE 0x0400 /* Only a single load balancing instance */ |
789 | #define SD_WAKE_IDLE_FAR 2048 /* Gain latency sacrificing cache hit */ | 826 | |
827 | #define SD_PREFER_SIBLING 0x1000 /* Prefer to place tasks in a sibling domain */ | ||
790 | 828 | ||
791 | enum powersavings_balance_level { | 829 | enum powersavings_balance_level { |
792 | POWERSAVINGS_BALANCE_NONE = 0, /* No power saving load balance */ | 830 | POWERSAVINGS_BALANCE_NONE = 0, /* No power saving load balance */ |
@@ -806,7 +844,7 @@ static inline int sd_balance_for_mc_power(void) | |||
806 | if (sched_smt_power_savings) | 844 | if (sched_smt_power_savings) |
807 | return SD_POWERSAVINGS_BALANCE; | 845 | return SD_POWERSAVINGS_BALANCE; |
808 | 846 | ||
809 | return 0; | 847 | return SD_PREFER_SIBLING; |
810 | } | 848 | } |
811 | 849 | ||
812 | static inline int sd_balance_for_package_power(void) | 850 | static inline int sd_balance_for_package_power(void) |
@@ -814,7 +852,7 @@ static inline int sd_balance_for_package_power(void) | |||
814 | if (sched_mc_power_savings | sched_smt_power_savings) | 852 | if (sched_mc_power_savings | sched_smt_power_savings) |
815 | return SD_POWERSAVINGS_BALANCE; | 853 | return SD_POWERSAVINGS_BALANCE; |
816 | 854 | ||
817 | return 0; | 855 | return SD_PREFER_SIBLING; |
818 | } | 856 | } |
819 | 857 | ||
820 | /* | 858 | /* |
@@ -836,15 +874,9 @@ struct sched_group { | |||
836 | 874 | ||
837 | /* | 875 | /* |
838 | * CPU power of this group, SCHED_LOAD_SCALE being max power for a | 876 | * CPU power of this group, SCHED_LOAD_SCALE being max power for a |
839 | * single CPU. This is read only (except for setup, hotplug CPU). | 877 | * single CPU. |
840 | * Note : Never change cpu_power without recompute its reciprocal | ||
841 | */ | 878 | */ |
842 | unsigned int __cpu_power; | 879 | unsigned int cpu_power; |
843 | /* | ||
844 | * reciprocal value of cpu_power to avoid expensive divides | ||
845 | * (see include/linux/reciprocal_div.h) | ||
846 | */ | ||
847 | u32 reciprocal_cpu_power; | ||
848 | 880 | ||
849 | /* | 881 | /* |
850 | * The CPUs this group covers. | 882 | * The CPUs this group covers. |
@@ -897,6 +929,7 @@ struct sched_domain { | |||
897 | unsigned int newidle_idx; | 929 | unsigned int newidle_idx; |
898 | unsigned int wake_idx; | 930 | unsigned int wake_idx; |
899 | unsigned int forkexec_idx; | 931 | unsigned int forkexec_idx; |
932 | unsigned int smt_gain; | ||
900 | int flags; /* See SD_* */ | 933 | int flags; /* See SD_* */ |
901 | enum sched_domain_level level; | 934 | enum sched_domain_level level; |
902 | 935 | ||
@@ -972,6 +1005,9 @@ static inline int test_sd_parent(struct sched_domain *sd, int flag) | |||
972 | return 0; | 1005 | return 0; |
973 | } | 1006 | } |
974 | 1007 | ||
1008 | unsigned long default_scale_freq_power(struct sched_domain *sd, int cpu); | ||
1009 | unsigned long default_scale_smt_power(struct sched_domain *sd, int cpu); | ||
1010 | |||
975 | #else /* CONFIG_SMP */ | 1011 | #else /* CONFIG_SMP */ |
976 | 1012 | ||
977 | struct sched_domain_attr; | 1013 | struct sched_domain_attr; |
@@ -983,6 +1019,7 @@ partition_sched_domains(int ndoms_new, struct cpumask *doms_new, | |||
983 | } | 1019 | } |
984 | #endif /* !CONFIG_SMP */ | 1020 | #endif /* !CONFIG_SMP */ |
985 | 1021 | ||
1022 | |||
986 | struct io_context; /* See blkdev.h */ | 1023 | struct io_context; /* See blkdev.h */ |
987 | 1024 | ||
988 | 1025 | ||
@@ -1000,6 +1037,12 @@ struct uts_namespace; | |||
1000 | struct rq; | 1037 | struct rq; |
1001 | struct sched_domain; | 1038 | struct sched_domain; |
1002 | 1039 | ||
1040 | /* | ||
1041 | * wake flags | ||
1042 | */ | ||
1043 | #define WF_SYNC 0x01 /* waker goes to sleep after wakup */ | ||
1044 | #define WF_FORK 0x02 /* child wakeup after fork */ | ||
1045 | |||
1003 | struct sched_class { | 1046 | struct sched_class { |
1004 | const struct sched_class *next; | 1047 | const struct sched_class *next; |
1005 | 1048 | ||
@@ -1007,13 +1050,13 @@ struct sched_class { | |||
1007 | void (*dequeue_task) (struct rq *rq, struct task_struct *p, int sleep); | 1050 | void (*dequeue_task) (struct rq *rq, struct task_struct *p, int sleep); |
1008 | void (*yield_task) (struct rq *rq); | 1051 | void (*yield_task) (struct rq *rq); |
1009 | 1052 | ||
1010 | void (*check_preempt_curr) (struct rq *rq, struct task_struct *p, int sync); | 1053 | void (*check_preempt_curr) (struct rq *rq, struct task_struct *p, int flags); |
1011 | 1054 | ||
1012 | struct task_struct * (*pick_next_task) (struct rq *rq); | 1055 | struct task_struct * (*pick_next_task) (struct rq *rq); |
1013 | void (*put_prev_task) (struct rq *rq, struct task_struct *p); | 1056 | void (*put_prev_task) (struct rq *rq, struct task_struct *p); |
1014 | 1057 | ||
1015 | #ifdef CONFIG_SMP | 1058 | #ifdef CONFIG_SMP |
1016 | int (*select_task_rq)(struct task_struct *p, int sync); | 1059 | int (*select_task_rq)(struct task_struct *p, int sd_flag, int flags); |
1017 | 1060 | ||
1018 | unsigned long (*load_balance) (struct rq *this_rq, int this_cpu, | 1061 | unsigned long (*load_balance) (struct rq *this_rq, int this_cpu, |
1019 | struct rq *busiest, unsigned long max_load_move, | 1062 | struct rq *busiest, unsigned long max_load_move, |
@@ -1024,7 +1067,6 @@ struct sched_class { | |||
1024 | struct rq *busiest, struct sched_domain *sd, | 1067 | struct rq *busiest, struct sched_domain *sd, |
1025 | enum cpu_idle_type idle); | 1068 | enum cpu_idle_type idle); |
1026 | void (*pre_schedule) (struct rq *this_rq, struct task_struct *task); | 1069 | void (*pre_schedule) (struct rq *this_rq, struct task_struct *task); |
1027 | int (*needs_post_schedule) (struct rq *this_rq); | ||
1028 | void (*post_schedule) (struct rq *this_rq); | 1070 | void (*post_schedule) (struct rq *this_rq); |
1029 | void (*task_wake_up) (struct rq *this_rq, struct task_struct *task); | 1071 | void (*task_wake_up) (struct rq *this_rq, struct task_struct *task); |
1030 | 1072 | ||
@@ -1046,6 +1088,8 @@ struct sched_class { | |||
1046 | void (*prio_changed) (struct rq *this_rq, struct task_struct *task, | 1088 | void (*prio_changed) (struct rq *this_rq, struct task_struct *task, |
1047 | int oldprio, int running); | 1089 | int oldprio, int running); |
1048 | 1090 | ||
1091 | unsigned int (*get_rr_interval) (struct task_struct *task); | ||
1092 | |||
1049 | #ifdef CONFIG_FAIR_GROUP_SCHED | 1093 | #ifdef CONFIG_FAIR_GROUP_SCHED |
1050 | void (*moved_group) (struct task_struct *p); | 1094 | void (*moved_group) (struct task_struct *p); |
1051 | #endif | 1095 | #endif |
@@ -1084,11 +1128,15 @@ struct sched_entity { | |||
1084 | u64 start_runtime; | 1128 | u64 start_runtime; |
1085 | u64 avg_wakeup; | 1129 | u64 avg_wakeup; |
1086 | 1130 | ||
1131 | u64 avg_running; | ||
1132 | |||
1087 | #ifdef CONFIG_SCHEDSTATS | 1133 | #ifdef CONFIG_SCHEDSTATS |
1088 | u64 wait_start; | 1134 | u64 wait_start; |
1089 | u64 wait_max; | 1135 | u64 wait_max; |
1090 | u64 wait_count; | 1136 | u64 wait_count; |
1091 | u64 wait_sum; | 1137 | u64 wait_sum; |
1138 | u64 iowait_count; | ||
1139 | u64 iowait_sum; | ||
1092 | 1140 | ||
1093 | u64 sleep_start; | 1141 | u64 sleep_start; |
1094 | u64 sleep_max; | 1142 | u64 sleep_max; |
@@ -1142,6 +1190,8 @@ struct sched_rt_entity { | |||
1142 | #endif | 1190 | #endif |
1143 | }; | 1191 | }; |
1144 | 1192 | ||
1193 | struct rcu_node; | ||
1194 | |||
1145 | struct task_struct { | 1195 | struct task_struct { |
1146 | volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */ | 1196 | volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */ |
1147 | void *stack; | 1197 | void *stack; |
@@ -1184,10 +1234,12 @@ struct task_struct { | |||
1184 | unsigned int policy; | 1234 | unsigned int policy; |
1185 | cpumask_t cpus_allowed; | 1235 | cpumask_t cpus_allowed; |
1186 | 1236 | ||
1187 | #ifdef CONFIG_PREEMPT_RCU | 1237 | #ifdef CONFIG_TREE_PREEMPT_RCU |
1188 | int rcu_read_lock_nesting; | 1238 | int rcu_read_lock_nesting; |
1189 | int rcu_flipctr_idx; | 1239 | char rcu_read_unlock_special; |
1190 | #endif /* #ifdef CONFIG_PREEMPT_RCU */ | 1240 | struct rcu_node *rcu_blocked_node; |
1241 | struct list_head rcu_node_entry; | ||
1242 | #endif /* #ifdef CONFIG_TREE_PREEMPT_RCU */ | ||
1191 | 1243 | ||
1192 | #if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) | 1244 | #if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) |
1193 | struct sched_info sched_info; | 1245 | struct sched_info sched_info; |
@@ -1208,11 +1260,19 @@ struct task_struct { | |||
1208 | unsigned did_exec:1; | 1260 | unsigned did_exec:1; |
1209 | unsigned in_execve:1; /* Tell the LSMs that the process is doing an | 1261 | unsigned in_execve:1; /* Tell the LSMs that the process is doing an |
1210 | * execve */ | 1262 | * execve */ |
1263 | unsigned in_iowait:1; | ||
1264 | |||
1265 | |||
1266 | /* Revert to default priority/policy when forking */ | ||
1267 | unsigned sched_reset_on_fork:1; | ||
1268 | |||
1211 | pid_t pid; | 1269 | pid_t pid; |
1212 | pid_t tgid; | 1270 | pid_t tgid; |
1213 | 1271 | ||
1272 | #ifdef CONFIG_CC_STACKPROTECTOR | ||
1214 | /* Canary value for the -fstack-protector gcc feature */ | 1273 | /* Canary value for the -fstack-protector gcc feature */ |
1215 | unsigned long stack_canary; | 1274 | unsigned long stack_canary; |
1275 | #endif | ||
1216 | 1276 | ||
1217 | /* | 1277 | /* |
1218 | * pointers to (original) parent process, youngest child, younger sibling, | 1278 | * pointers to (original) parent process, youngest child, younger sibling, |
@@ -1270,6 +1330,7 @@ struct task_struct { | |||
1270 | struct mutex cred_guard_mutex; /* guard against foreign influences on | 1330 | struct mutex cred_guard_mutex; /* guard against foreign influences on |
1271 | * credential calculations | 1331 | * credential calculations |
1272 | * (notably. ptrace) */ | 1332 | * (notably. ptrace) */ |
1333 | struct cred *replacement_session_keyring; /* for KEYCTL_SESSION_TO_PARENT */ | ||
1273 | 1334 | ||
1274 | char comm[TASK_COMM_LEN]; /* executable name excluding path | 1335 | char comm[TASK_COMM_LEN]; /* executable name excluding path |
1275 | - access with [gs]et_task_comm (which lock | 1336 | - access with [gs]et_task_comm (which lock |
@@ -1402,10 +1463,10 @@ struct task_struct { | |||
1402 | struct list_head pi_state_list; | 1463 | struct list_head pi_state_list; |
1403 | struct futex_pi_state *pi_state_cache; | 1464 | struct futex_pi_state *pi_state_cache; |
1404 | #endif | 1465 | #endif |
1405 | #ifdef CONFIG_PERF_COUNTERS | 1466 | #ifdef CONFIG_PERF_EVENTS |
1406 | struct perf_counter_context *perf_counter_ctxp; | 1467 | struct perf_event_context *perf_event_ctxp; |
1407 | struct mutex perf_counter_mutex; | 1468 | struct mutex perf_event_mutex; |
1408 | struct list_head perf_counter_list; | 1469 | struct list_head perf_event_list; |
1409 | #endif | 1470 | #endif |
1410 | #ifdef CONFIG_NUMA | 1471 | #ifdef CONFIG_NUMA |
1411 | struct mempolicy *mempolicy; /* Protected by alloc_lock */ | 1472 | struct mempolicy *mempolicy; /* Protected by alloc_lock */ |
@@ -1659,11 +1720,12 @@ extern cputime_t task_gtime(struct task_struct *p); | |||
1659 | #define PF_MEMALLOC 0x00000800 /* Allocating memory */ | 1720 | #define PF_MEMALLOC 0x00000800 /* Allocating memory */ |
1660 | #define PF_FLUSHER 0x00001000 /* responsible for disk writeback */ | 1721 | #define PF_FLUSHER 0x00001000 /* responsible for disk writeback */ |
1661 | #define PF_USED_MATH 0x00002000 /* if unset the fpu must be initialized before use */ | 1722 | #define PF_USED_MATH 0x00002000 /* if unset the fpu must be initialized before use */ |
1723 | #define PF_FREEZING 0x00004000 /* freeze in progress. do not account to load */ | ||
1662 | #define PF_NOFREEZE 0x00008000 /* this thread should not be frozen */ | 1724 | #define PF_NOFREEZE 0x00008000 /* this thread should not be frozen */ |
1663 | #define PF_FROZEN 0x00010000 /* frozen for system suspend */ | 1725 | #define PF_FROZEN 0x00010000 /* frozen for system suspend */ |
1664 | #define PF_FSTRANS 0x00020000 /* inside a filesystem transaction */ | 1726 | #define PF_FSTRANS 0x00020000 /* inside a filesystem transaction */ |
1665 | #define PF_KSWAPD 0x00040000 /* I am kswapd */ | 1727 | #define PF_KSWAPD 0x00040000 /* I am kswapd */ |
1666 | #define PF_SWAPOFF 0x00080000 /* I am in swapoff */ | 1728 | #define PF_OOM_ORIGIN 0x00080000 /* Allocating much memory to others */ |
1667 | #define PF_LESS_THROTTLE 0x00100000 /* Throttle me less: I clean memory */ | 1729 | #define PF_LESS_THROTTLE 0x00100000 /* Throttle me less: I clean memory */ |
1668 | #define PF_KTHREAD 0x00200000 /* I am a kernel thread */ | 1730 | #define PF_KTHREAD 0x00200000 /* I am a kernel thread */ |
1669 | #define PF_RANDOMIZE 0x00400000 /* randomize virtual address space */ | 1731 | #define PF_RANDOMIZE 0x00400000 /* randomize virtual address space */ |
@@ -1701,6 +1763,27 @@ extern cputime_t task_gtime(struct task_struct *p); | |||
1701 | #define tsk_used_math(p) ((p)->flags & PF_USED_MATH) | 1763 | #define tsk_used_math(p) ((p)->flags & PF_USED_MATH) |
1702 | #define used_math() tsk_used_math(current) | 1764 | #define used_math() tsk_used_math(current) |
1703 | 1765 | ||
1766 | #ifdef CONFIG_TREE_PREEMPT_RCU | ||
1767 | |||
1768 | #define RCU_READ_UNLOCK_BLOCKED (1 << 0) /* blocked while in RCU read-side. */ | ||
1769 | #define RCU_READ_UNLOCK_NEED_QS (1 << 1) /* RCU core needs CPU response. */ | ||
1770 | |||
1771 | static inline void rcu_copy_process(struct task_struct *p) | ||
1772 | { | ||
1773 | p->rcu_read_lock_nesting = 0; | ||
1774 | p->rcu_read_unlock_special = 0; | ||
1775 | p->rcu_blocked_node = NULL; | ||
1776 | INIT_LIST_HEAD(&p->rcu_node_entry); | ||
1777 | } | ||
1778 | |||
1779 | #else | ||
1780 | |||
1781 | static inline void rcu_copy_process(struct task_struct *p) | ||
1782 | { | ||
1783 | } | ||
1784 | |||
1785 | #endif | ||
1786 | |||
1704 | #ifdef CONFIG_SMP | 1787 | #ifdef CONFIG_SMP |
1705 | extern int set_cpus_allowed_ptr(struct task_struct *p, | 1788 | extern int set_cpus_allowed_ptr(struct task_struct *p, |
1706 | const struct cpumask *new_mask); | 1789 | const struct cpumask *new_mask); |
@@ -1790,11 +1873,12 @@ extern unsigned int sysctl_sched_min_granularity; | |||
1790 | extern unsigned int sysctl_sched_wakeup_granularity; | 1873 | extern unsigned int sysctl_sched_wakeup_granularity; |
1791 | extern unsigned int sysctl_sched_shares_ratelimit; | 1874 | extern unsigned int sysctl_sched_shares_ratelimit; |
1792 | extern unsigned int sysctl_sched_shares_thresh; | 1875 | extern unsigned int sysctl_sched_shares_thresh; |
1793 | #ifdef CONFIG_SCHED_DEBUG | ||
1794 | extern unsigned int sysctl_sched_child_runs_first; | 1876 | extern unsigned int sysctl_sched_child_runs_first; |
1877 | #ifdef CONFIG_SCHED_DEBUG | ||
1795 | extern unsigned int sysctl_sched_features; | 1878 | extern unsigned int sysctl_sched_features; |
1796 | extern unsigned int sysctl_sched_migration_cost; | 1879 | extern unsigned int sysctl_sched_migration_cost; |
1797 | extern unsigned int sysctl_sched_nr_migrate; | 1880 | extern unsigned int sysctl_sched_nr_migrate; |
1881 | extern unsigned int sysctl_sched_time_avg; | ||
1798 | extern unsigned int sysctl_timer_migration; | 1882 | extern unsigned int sysctl_timer_migration; |
1799 | 1883 | ||
1800 | int sched_nr_latency_handler(struct ctl_table *table, int write, | 1884 | int sched_nr_latency_handler(struct ctl_table *table, int write, |
@@ -2054,7 +2138,7 @@ static inline unsigned long wait_task_inactive(struct task_struct *p, | |||
2054 | #define for_each_process(p) \ | 2138 | #define for_each_process(p) \ |
2055 | for (p = &init_task ; (p = next_task(p)) != &init_task ; ) | 2139 | for (p = &init_task ; (p = next_task(p)) != &init_task ; ) |
2056 | 2140 | ||
2057 | extern bool is_single_threaded(struct task_struct *); | 2141 | extern bool current_is_single_threaded(void); |
2058 | 2142 | ||
2059 | /* | 2143 | /* |
2060 | * Careful: do_each_thread/while_each_thread is a double loop so | 2144 | * Careful: do_each_thread/while_each_thread is a double loop so |
@@ -2258,23 +2342,31 @@ static inline int need_resched(void) | |||
2258 | * cond_resched_softirq() will enable bhs before scheduling. | 2342 | * cond_resched_softirq() will enable bhs before scheduling. |
2259 | */ | 2343 | */ |
2260 | extern int _cond_resched(void); | 2344 | extern int _cond_resched(void); |
2261 | #ifdef CONFIG_PREEMPT_BKL | 2345 | |
2262 | static inline int cond_resched(void) | 2346 | #define cond_resched() ({ \ |
2263 | { | 2347 | __might_sleep(__FILE__, __LINE__, 0); \ |
2264 | return 0; | 2348 | _cond_resched(); \ |
2265 | } | 2349 | }) |
2350 | |||
2351 | extern int __cond_resched_lock(spinlock_t *lock); | ||
2352 | |||
2353 | #ifdef CONFIG_PREEMPT | ||
2354 | #define PREEMPT_LOCK_OFFSET PREEMPT_OFFSET | ||
2266 | #else | 2355 | #else |
2267 | static inline int cond_resched(void) | 2356 | #define PREEMPT_LOCK_OFFSET 0 |
2268 | { | ||
2269 | return _cond_resched(); | ||
2270 | } | ||
2271 | #endif | 2357 | #endif |
2272 | extern int cond_resched_lock(spinlock_t * lock); | 2358 | |
2273 | extern int cond_resched_softirq(void); | 2359 | #define cond_resched_lock(lock) ({ \ |
2274 | static inline int cond_resched_bkl(void) | 2360 | __might_sleep(__FILE__, __LINE__, PREEMPT_LOCK_OFFSET); \ |
2275 | { | 2361 | __cond_resched_lock(lock); \ |
2276 | return _cond_resched(); | 2362 | }) |
2277 | } | 2363 | |
2364 | extern int __cond_resched_softirq(void); | ||
2365 | |||
2366 | #define cond_resched_softirq() ({ \ | ||
2367 | __might_sleep(__FILE__, __LINE__, SOFTIRQ_OFFSET); \ | ||
2368 | __cond_resched_softirq(); \ | ||
2369 | }) | ||
2278 | 2370 | ||
2279 | /* | 2371 | /* |
2280 | * Does a critical section need to be broken due to another | 2372 | * Does a critical section need to be broken due to another |
diff --git a/include/linux/security.h b/include/linux/security.h index 5eff459b3833..d050b66ab9ef 100644 --- a/include/linux/security.h +++ b/include/linux/security.h | |||
@@ -28,6 +28,7 @@ | |||
28 | #include <linux/resource.h> | 28 | #include <linux/resource.h> |
29 | #include <linux/sem.h> | 29 | #include <linux/sem.h> |
30 | #include <linux/shm.h> | 30 | #include <linux/shm.h> |
31 | #include <linux/mm.h> /* PAGE_ALIGN */ | ||
31 | #include <linux/msg.h> | 32 | #include <linux/msg.h> |
32 | #include <linux/sched.h> | 33 | #include <linux/sched.h> |
33 | #include <linux/key.h> | 34 | #include <linux/key.h> |
@@ -52,7 +53,7 @@ struct audit_krule; | |||
52 | extern int cap_capable(struct task_struct *tsk, const struct cred *cred, | 53 | extern int cap_capable(struct task_struct *tsk, const struct cred *cred, |
53 | int cap, int audit); | 54 | int cap, int audit); |
54 | extern int cap_settime(struct timespec *ts, struct timezone *tz); | 55 | extern int cap_settime(struct timespec *ts, struct timezone *tz); |
55 | extern int cap_ptrace_may_access(struct task_struct *child, unsigned int mode); | 56 | extern int cap_ptrace_access_check(struct task_struct *child, unsigned int mode); |
56 | extern int cap_ptrace_traceme(struct task_struct *parent); | 57 | extern int cap_ptrace_traceme(struct task_struct *parent); |
57 | extern int cap_capget(struct task_struct *target, kernel_cap_t *effective, kernel_cap_t *inheritable, kernel_cap_t *permitted); | 58 | extern int cap_capget(struct task_struct *target, kernel_cap_t *effective, kernel_cap_t *inheritable, kernel_cap_t *permitted); |
58 | extern int cap_capset(struct cred *new, const struct cred *old, | 59 | extern int cap_capset(struct cred *new, const struct cred *old, |
@@ -66,6 +67,9 @@ extern int cap_inode_setxattr(struct dentry *dentry, const char *name, | |||
66 | extern int cap_inode_removexattr(struct dentry *dentry, const char *name); | 67 | extern int cap_inode_removexattr(struct dentry *dentry, const char *name); |
67 | extern int cap_inode_need_killpriv(struct dentry *dentry); | 68 | extern int cap_inode_need_killpriv(struct dentry *dentry); |
68 | extern int cap_inode_killpriv(struct dentry *dentry); | 69 | extern int cap_inode_killpriv(struct dentry *dentry); |
70 | extern int cap_file_mmap(struct file *file, unsigned long reqprot, | ||
71 | unsigned long prot, unsigned long flags, | ||
72 | unsigned long addr, unsigned long addr_only); | ||
69 | extern int cap_task_fix_setuid(struct cred *new, const struct cred *old, int flags); | 73 | extern int cap_task_fix_setuid(struct cred *new, const struct cred *old, int flags); |
70 | extern int cap_task_prctl(int option, unsigned long arg2, unsigned long arg3, | 74 | extern int cap_task_prctl(int option, unsigned long arg2, unsigned long arg3, |
71 | unsigned long arg4, unsigned long arg5); | 75 | unsigned long arg4, unsigned long arg5); |
@@ -92,6 +96,7 @@ extern int cap_netlink_send(struct sock *sk, struct sk_buff *skb); | |||
92 | extern int cap_netlink_recv(struct sk_buff *skb, int cap); | 96 | extern int cap_netlink_recv(struct sk_buff *skb, int cap); |
93 | 97 | ||
94 | extern unsigned long mmap_min_addr; | 98 | extern unsigned long mmap_min_addr; |
99 | extern unsigned long dac_mmap_min_addr; | ||
95 | /* | 100 | /* |
96 | * Values used in the task_security_ops calls | 101 | * Values used in the task_security_ops calls |
97 | */ | 102 | */ |
@@ -116,6 +121,21 @@ struct request_sock; | |||
116 | #define LSM_UNSAFE_PTRACE 2 | 121 | #define LSM_UNSAFE_PTRACE 2 |
117 | #define LSM_UNSAFE_PTRACE_CAP 4 | 122 | #define LSM_UNSAFE_PTRACE_CAP 4 |
118 | 123 | ||
124 | /* | ||
125 | * If a hint addr is less than mmap_min_addr change hint to be as | ||
126 | * low as possible but still greater than mmap_min_addr | ||
127 | */ | ||
128 | static inline unsigned long round_hint_to_min(unsigned long hint) | ||
129 | { | ||
130 | hint &= PAGE_MASK; | ||
131 | if (((void *)hint != NULL) && | ||
132 | (hint < mmap_min_addr)) | ||
133 | return PAGE_ALIGN(mmap_min_addr); | ||
134 | return hint; | ||
135 | } | ||
136 | extern int mmap_min_addr_handler(struct ctl_table *table, int write, struct file *filp, | ||
137 | void __user *buffer, size_t *lenp, loff_t *ppos); | ||
138 | |||
119 | #ifdef CONFIG_SECURITY | 139 | #ifdef CONFIG_SECURITY |
120 | 140 | ||
121 | struct security_mnt_opts { | 141 | struct security_mnt_opts { |
@@ -633,6 +653,11 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
633 | * manual page for definitions of the @clone_flags. | 653 | * manual page for definitions of the @clone_flags. |
634 | * @clone_flags contains the flags indicating what should be shared. | 654 | * @clone_flags contains the flags indicating what should be shared. |
635 | * Return 0 if permission is granted. | 655 | * Return 0 if permission is granted. |
656 | * @cred_alloc_blank: | ||
657 | * @cred points to the credentials. | ||
658 | * @gfp indicates the atomicity of any memory allocations. | ||
659 | * Only allocate sufficient memory and attach to @cred such that | ||
660 | * cred_transfer() will not get ENOMEM. | ||
636 | * @cred_free: | 661 | * @cred_free: |
637 | * @cred points to the credentials. | 662 | * @cred points to the credentials. |
638 | * Deallocate and clear the cred->security field in a set of credentials. | 663 | * Deallocate and clear the cred->security field in a set of credentials. |
@@ -645,6 +670,10 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
645 | * @new points to the new credentials. | 670 | * @new points to the new credentials. |
646 | * @old points to the original credentials. | 671 | * @old points to the original credentials. |
647 | * Install a new set of credentials. | 672 | * Install a new set of credentials. |
673 | * @cred_transfer: | ||
674 | * @new points to the new credentials. | ||
675 | * @old points to the original credentials. | ||
676 | * Transfer data from original creds to new creds | ||
648 | * @kernel_act_as: | 677 | * @kernel_act_as: |
649 | * Set the credentials for a kernel service to act as (subjective context). | 678 | * Set the credentials for a kernel service to act as (subjective context). |
650 | * @new points to the credentials to be modified. | 679 | * @new points to the credentials to be modified. |
@@ -658,6 +687,10 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
658 | * @inode points to the inode to use as a reference. | 687 | * @inode points to the inode to use as a reference. |
659 | * The current task must be the one that nominated @inode. | 688 | * The current task must be the one that nominated @inode. |
660 | * Return 0 if successful. | 689 | * Return 0 if successful. |
690 | * @kernel_module_request: | ||
691 | * Ability to trigger the kernel to automatically upcall to userspace for | ||
692 | * userspace to load a kernel module with the given name. | ||
693 | * Return 0 if successful. | ||
661 | * @task_setuid: | 694 | * @task_setuid: |
662 | * Check permission before setting one or more of the user identity | 695 | * Check permission before setting one or more of the user identity |
663 | * attributes of the current process. The @flags parameter indicates | 696 | * attributes of the current process. The @flags parameter indicates |
@@ -974,6 +1007,17 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
974 | * Sets the connection's peersid to the secmark on skb. | 1007 | * Sets the connection's peersid to the secmark on skb. |
975 | * @req_classify_flow: | 1008 | * @req_classify_flow: |
976 | * Sets the flow's sid to the openreq sid. | 1009 | * Sets the flow's sid to the openreq sid. |
1010 | * @tun_dev_create: | ||
1011 | * Check permissions prior to creating a new TUN device. | ||
1012 | * @tun_dev_post_create: | ||
1013 | * This hook allows a module to update or allocate a per-socket security | ||
1014 | * structure. | ||
1015 | * @sk contains the newly created sock structure. | ||
1016 | * @tun_dev_attach: | ||
1017 | * Check permissions prior to attaching to a persistent TUN device. This | ||
1018 | * hook can also be used by the module to update any security state | ||
1019 | * associated with the TUN device's sock structure. | ||
1020 | * @sk contains the existing sock structure. | ||
977 | * | 1021 | * |
978 | * Security hooks for XFRM operations. | 1022 | * Security hooks for XFRM operations. |
979 | * | 1023 | * |
@@ -1068,6 +1112,13 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
1068 | * Return the length of the string (including terminating NUL) or -ve if | 1112 | * Return the length of the string (including terminating NUL) or -ve if |
1069 | * an error. | 1113 | * an error. |
1070 | * May also return 0 (and a NULL buffer pointer) if there is no label. | 1114 | * May also return 0 (and a NULL buffer pointer) if there is no label. |
1115 | * @key_session_to_parent: | ||
1116 | * Forcibly assign the session keyring from a process to its parent | ||
1117 | * process. | ||
1118 | * @cred: Pointer to process's credentials | ||
1119 | * @parent_cred: Pointer to parent process's credentials | ||
1120 | * @keyring: Proposed new session keyring | ||
1121 | * Return 0 if permission is granted, -ve error otherwise. | ||
1071 | * | 1122 | * |
1072 | * Security hooks affecting all System V IPC operations. | 1123 | * Security hooks affecting all System V IPC operations. |
1073 | * | 1124 | * |
@@ -1209,7 +1260,7 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
1209 | * @alter contains the flag indicating whether changes are to be made. | 1260 | * @alter contains the flag indicating whether changes are to be made. |
1210 | * Return 0 if permission is granted. | 1261 | * Return 0 if permission is granted. |
1211 | * | 1262 | * |
1212 | * @ptrace_may_access: | 1263 | * @ptrace_access_check: |
1213 | * Check permission before allowing the current process to trace the | 1264 | * Check permission before allowing the current process to trace the |
1214 | * @child process. | 1265 | * @child process. |
1215 | * Security modules may also want to perform a process tracing check | 1266 | * Security modules may also want to perform a process tracing check |
@@ -1224,7 +1275,7 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
1224 | * Check that the @parent process has sufficient permission to trace the | 1275 | * Check that the @parent process has sufficient permission to trace the |
1225 | * current process before allowing the current process to present itself | 1276 | * current process before allowing the current process to present itself |
1226 | * to the @parent process for tracing. | 1277 | * to the @parent process for tracing. |
1227 | * The parent process will still have to undergo the ptrace_may_access | 1278 | * The parent process will still have to undergo the ptrace_access_check |
1228 | * checks before it is allowed to trace this one. | 1279 | * checks before it is allowed to trace this one. |
1229 | * @parent contains the task_struct structure for debugger process. | 1280 | * @parent contains the task_struct structure for debugger process. |
1230 | * Return 0 if permission is granted. | 1281 | * Return 0 if permission is granted. |
@@ -1331,12 +1382,47 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
1331 | * audit_rule_init. | 1382 | * audit_rule_init. |
1332 | * @rule contains the allocated rule | 1383 | * @rule contains the allocated rule |
1333 | * | 1384 | * |
1385 | * @inode_notifysecctx: | ||
1386 | * Notify the security module of what the security context of an inode | ||
1387 | * should be. Initializes the incore security context managed by the | ||
1388 | * security module for this inode. Example usage: NFS client invokes | ||
1389 | * this hook to initialize the security context in its incore inode to the | ||
1390 | * value provided by the server for the file when the server returned the | ||
1391 | * file's attributes to the client. | ||
1392 | * | ||
1393 | * Must be called with inode->i_mutex locked. | ||
1394 | * | ||
1395 | * @inode we wish to set the security context of. | ||
1396 | * @ctx contains the string which we wish to set in the inode. | ||
1397 | * @ctxlen contains the length of @ctx. | ||
1398 | * | ||
1399 | * @inode_setsecctx: | ||
1400 | * Change the security context of an inode. Updates the | ||
1401 | * incore security context managed by the security module and invokes the | ||
1402 | * fs code as needed (via __vfs_setxattr_noperm) to update any backing | ||
1403 | * xattrs that represent the context. Example usage: NFS server invokes | ||
1404 | * this hook to change the security context in its incore inode and on the | ||
1405 | * backing filesystem to a value provided by the client on a SETATTR | ||
1406 | * operation. | ||
1407 | * | ||
1408 | * Must be called with inode->i_mutex locked. | ||
1409 | * | ||
1410 | * @dentry contains the inode we wish to set the security context of. | ||
1411 | * @ctx contains the string which we wish to set in the inode. | ||
1412 | * @ctxlen contains the length of @ctx. | ||
1413 | * | ||
1414 | * @inode_getsecctx: | ||
1415 | * Returns a string containing all relavent security context information | ||
1416 | * | ||
1417 | * @inode we wish to set the security context of. | ||
1418 | * @ctx is a pointer in which to place the allocated security context. | ||
1419 | * @ctxlen points to the place to put the length of @ctx. | ||
1334 | * This is the main security structure. | 1420 | * This is the main security structure. |
1335 | */ | 1421 | */ |
1336 | struct security_operations { | 1422 | struct security_operations { |
1337 | char name[SECURITY_NAME_MAX + 1]; | 1423 | char name[SECURITY_NAME_MAX + 1]; |
1338 | 1424 | ||
1339 | int (*ptrace_may_access) (struct task_struct *child, unsigned int mode); | 1425 | int (*ptrace_access_check) (struct task_struct *child, unsigned int mode); |
1340 | int (*ptrace_traceme) (struct task_struct *parent); | 1426 | int (*ptrace_traceme) (struct task_struct *parent); |
1341 | int (*capget) (struct task_struct *target, | 1427 | int (*capget) (struct task_struct *target, |
1342 | kernel_cap_t *effective, | 1428 | kernel_cap_t *effective, |
@@ -1463,12 +1549,15 @@ struct security_operations { | |||
1463 | int (*dentry_open) (struct file *file, const struct cred *cred); | 1549 | int (*dentry_open) (struct file *file, const struct cred *cred); |
1464 | 1550 | ||
1465 | int (*task_create) (unsigned long clone_flags); | 1551 | int (*task_create) (unsigned long clone_flags); |
1552 | int (*cred_alloc_blank) (struct cred *cred, gfp_t gfp); | ||
1466 | void (*cred_free) (struct cred *cred); | 1553 | void (*cred_free) (struct cred *cred); |
1467 | int (*cred_prepare)(struct cred *new, const struct cred *old, | 1554 | int (*cred_prepare)(struct cred *new, const struct cred *old, |
1468 | gfp_t gfp); | 1555 | gfp_t gfp); |
1469 | void (*cred_commit)(struct cred *new, const struct cred *old); | 1556 | void (*cred_commit)(struct cred *new, const struct cred *old); |
1557 | void (*cred_transfer)(struct cred *new, const struct cred *old); | ||
1470 | int (*kernel_act_as)(struct cred *new, u32 secid); | 1558 | int (*kernel_act_as)(struct cred *new, u32 secid); |
1471 | int (*kernel_create_files_as)(struct cred *new, struct inode *inode); | 1559 | int (*kernel_create_files_as)(struct cred *new, struct inode *inode); |
1560 | int (*kernel_module_request)(void); | ||
1472 | int (*task_setuid) (uid_t id0, uid_t id1, uid_t id2, int flags); | 1561 | int (*task_setuid) (uid_t id0, uid_t id1, uid_t id2, int flags); |
1473 | int (*task_fix_setuid) (struct cred *new, const struct cred *old, | 1562 | int (*task_fix_setuid) (struct cred *new, const struct cred *old, |
1474 | int flags); | 1563 | int flags); |
@@ -1536,6 +1625,10 @@ struct security_operations { | |||
1536 | int (*secctx_to_secid) (const char *secdata, u32 seclen, u32 *secid); | 1625 | int (*secctx_to_secid) (const char *secdata, u32 seclen, u32 *secid); |
1537 | void (*release_secctx) (char *secdata, u32 seclen); | 1626 | void (*release_secctx) (char *secdata, u32 seclen); |
1538 | 1627 | ||
1628 | int (*inode_notifysecctx)(struct inode *inode, void *ctx, u32 ctxlen); | ||
1629 | int (*inode_setsecctx)(struct dentry *dentry, void *ctx, u32 ctxlen); | ||
1630 | int (*inode_getsecctx)(struct inode *inode, void **ctx, u32 *ctxlen); | ||
1631 | |||
1539 | #ifdef CONFIG_SECURITY_NETWORK | 1632 | #ifdef CONFIG_SECURITY_NETWORK |
1540 | int (*unix_stream_connect) (struct socket *sock, | 1633 | int (*unix_stream_connect) (struct socket *sock, |
1541 | struct socket *other, struct sock *newsk); | 1634 | struct socket *other, struct sock *newsk); |
@@ -1572,6 +1665,9 @@ struct security_operations { | |||
1572 | void (*inet_csk_clone) (struct sock *newsk, const struct request_sock *req); | 1665 | void (*inet_csk_clone) (struct sock *newsk, const struct request_sock *req); |
1573 | void (*inet_conn_established) (struct sock *sk, struct sk_buff *skb); | 1666 | void (*inet_conn_established) (struct sock *sk, struct sk_buff *skb); |
1574 | void (*req_classify_flow) (const struct request_sock *req, struct flowi *fl); | 1667 | void (*req_classify_flow) (const struct request_sock *req, struct flowi *fl); |
1668 | int (*tun_dev_create)(void); | ||
1669 | void (*tun_dev_post_create)(struct sock *sk); | ||
1670 | int (*tun_dev_attach)(struct sock *sk); | ||
1575 | #endif /* CONFIG_SECURITY_NETWORK */ | 1671 | #endif /* CONFIG_SECURITY_NETWORK */ |
1576 | 1672 | ||
1577 | #ifdef CONFIG_SECURITY_NETWORK_XFRM | 1673 | #ifdef CONFIG_SECURITY_NETWORK_XFRM |
@@ -1600,6 +1696,9 @@ struct security_operations { | |||
1600 | const struct cred *cred, | 1696 | const struct cred *cred, |
1601 | key_perm_t perm); | 1697 | key_perm_t perm); |
1602 | int (*key_getsecurity)(struct key *key, char **_buffer); | 1698 | int (*key_getsecurity)(struct key *key, char **_buffer); |
1699 | int (*key_session_to_parent)(const struct cred *cred, | ||
1700 | const struct cred *parent_cred, | ||
1701 | struct key *key); | ||
1603 | #endif /* CONFIG_KEYS */ | 1702 | #endif /* CONFIG_KEYS */ |
1604 | 1703 | ||
1605 | #ifdef CONFIG_AUDIT | 1704 | #ifdef CONFIG_AUDIT |
@@ -1617,7 +1716,7 @@ extern int security_module_enable(struct security_operations *ops); | |||
1617 | extern int register_security(struct security_operations *ops); | 1716 | extern int register_security(struct security_operations *ops); |
1618 | 1717 | ||
1619 | /* Security operations */ | 1718 | /* Security operations */ |
1620 | int security_ptrace_may_access(struct task_struct *child, unsigned int mode); | 1719 | int security_ptrace_access_check(struct task_struct *child, unsigned int mode); |
1621 | int security_ptrace_traceme(struct task_struct *parent); | 1720 | int security_ptrace_traceme(struct task_struct *parent); |
1622 | int security_capget(struct task_struct *target, | 1721 | int security_capget(struct task_struct *target, |
1623 | kernel_cap_t *effective, | 1722 | kernel_cap_t *effective, |
@@ -1716,11 +1815,14 @@ int security_file_send_sigiotask(struct task_struct *tsk, | |||
1716 | int security_file_receive(struct file *file); | 1815 | int security_file_receive(struct file *file); |
1717 | int security_dentry_open(struct file *file, const struct cred *cred); | 1816 | int security_dentry_open(struct file *file, const struct cred *cred); |
1718 | int security_task_create(unsigned long clone_flags); | 1817 | int security_task_create(unsigned long clone_flags); |
1818 | int security_cred_alloc_blank(struct cred *cred, gfp_t gfp); | ||
1719 | void security_cred_free(struct cred *cred); | 1819 | void security_cred_free(struct cred *cred); |
1720 | int security_prepare_creds(struct cred *new, const struct cred *old, gfp_t gfp); | 1820 | int security_prepare_creds(struct cred *new, const struct cred *old, gfp_t gfp); |
1721 | void security_commit_creds(struct cred *new, const struct cred *old); | 1821 | void security_commit_creds(struct cred *new, const struct cred *old); |
1822 | void security_transfer_creds(struct cred *new, const struct cred *old); | ||
1722 | int security_kernel_act_as(struct cred *new, u32 secid); | 1823 | int security_kernel_act_as(struct cred *new, u32 secid); |
1723 | int security_kernel_create_files_as(struct cred *new, struct inode *inode); | 1824 | int security_kernel_create_files_as(struct cred *new, struct inode *inode); |
1825 | int security_kernel_module_request(void); | ||
1724 | int security_task_setuid(uid_t id0, uid_t id1, uid_t id2, int flags); | 1826 | int security_task_setuid(uid_t id0, uid_t id1, uid_t id2, int flags); |
1725 | int security_task_fix_setuid(struct cred *new, const struct cred *old, | 1827 | int security_task_fix_setuid(struct cred *new, const struct cred *old, |
1726 | int flags); | 1828 | int flags); |
@@ -1776,6 +1878,9 @@ int security_secid_to_secctx(u32 secid, char **secdata, u32 *seclen); | |||
1776 | int security_secctx_to_secid(const char *secdata, u32 seclen, u32 *secid); | 1878 | int security_secctx_to_secid(const char *secdata, u32 seclen, u32 *secid); |
1777 | void security_release_secctx(char *secdata, u32 seclen); | 1879 | void security_release_secctx(char *secdata, u32 seclen); |
1778 | 1880 | ||
1881 | int security_inode_notifysecctx(struct inode *inode, void *ctx, u32 ctxlen); | ||
1882 | int security_inode_setsecctx(struct dentry *dentry, void *ctx, u32 ctxlen); | ||
1883 | int security_inode_getsecctx(struct inode *inode, void **ctx, u32 *ctxlen); | ||
1779 | #else /* CONFIG_SECURITY */ | 1884 | #else /* CONFIG_SECURITY */ |
1780 | struct security_mnt_opts { | 1885 | struct security_mnt_opts { |
1781 | }; | 1886 | }; |
@@ -1798,10 +1903,10 @@ static inline int security_init(void) | |||
1798 | return 0; | 1903 | return 0; |
1799 | } | 1904 | } |
1800 | 1905 | ||
1801 | static inline int security_ptrace_may_access(struct task_struct *child, | 1906 | static inline int security_ptrace_access_check(struct task_struct *child, |
1802 | unsigned int mode) | 1907 | unsigned int mode) |
1803 | { | 1908 | { |
1804 | return cap_ptrace_may_access(child, mode); | 1909 | return cap_ptrace_access_check(child, mode); |
1805 | } | 1910 | } |
1806 | 1911 | ||
1807 | static inline int security_ptrace_traceme(struct task_struct *parent) | 1912 | static inline int security_ptrace_traceme(struct task_struct *parent) |
@@ -2197,9 +2302,7 @@ static inline int security_file_mmap(struct file *file, unsigned long reqprot, | |||
2197 | unsigned long addr, | 2302 | unsigned long addr, |
2198 | unsigned long addr_only) | 2303 | unsigned long addr_only) |
2199 | { | 2304 | { |
2200 | if ((addr < mmap_min_addr) && !capable(CAP_SYS_RAWIO)) | 2305 | return cap_file_mmap(file, reqprot, prot, flags, addr, addr_only); |
2201 | return -EACCES; | ||
2202 | return 0; | ||
2203 | } | 2306 | } |
2204 | 2307 | ||
2205 | static inline int security_file_mprotect(struct vm_area_struct *vma, | 2308 | static inline int security_file_mprotect(struct vm_area_struct *vma, |
@@ -2248,6 +2351,11 @@ static inline int security_task_create(unsigned long clone_flags) | |||
2248 | return 0; | 2351 | return 0; |
2249 | } | 2352 | } |
2250 | 2353 | ||
2354 | static inline int security_cred_alloc_blank(struct cred *cred, gfp_t gfp) | ||
2355 | { | ||
2356 | return 0; | ||
2357 | } | ||
2358 | |||
2251 | static inline void security_cred_free(struct cred *cred) | 2359 | static inline void security_cred_free(struct cred *cred) |
2252 | { } | 2360 | { } |
2253 | 2361 | ||
@@ -2263,6 +2371,11 @@ static inline void security_commit_creds(struct cred *new, | |||
2263 | { | 2371 | { |
2264 | } | 2372 | } |
2265 | 2373 | ||
2374 | static inline void security_transfer_creds(struct cred *new, | ||
2375 | const struct cred *old) | ||
2376 | { | ||
2377 | } | ||
2378 | |||
2266 | static inline int security_kernel_act_as(struct cred *cred, u32 secid) | 2379 | static inline int security_kernel_act_as(struct cred *cred, u32 secid) |
2267 | { | 2380 | { |
2268 | return 0; | 2381 | return 0; |
@@ -2274,6 +2387,11 @@ static inline int security_kernel_create_files_as(struct cred *cred, | |||
2274 | return 0; | 2387 | return 0; |
2275 | } | 2388 | } |
2276 | 2389 | ||
2390 | static inline int security_kernel_module_request(void) | ||
2391 | { | ||
2392 | return 0; | ||
2393 | } | ||
2394 | |||
2277 | static inline int security_task_setuid(uid_t id0, uid_t id1, uid_t id2, | 2395 | static inline int security_task_setuid(uid_t id0, uid_t id1, uid_t id2, |
2278 | int flags) | 2396 | int flags) |
2279 | { | 2397 | { |
@@ -2519,6 +2637,19 @@ static inline int security_secctx_to_secid(const char *secdata, | |||
2519 | static inline void security_release_secctx(char *secdata, u32 seclen) | 2637 | static inline void security_release_secctx(char *secdata, u32 seclen) |
2520 | { | 2638 | { |
2521 | } | 2639 | } |
2640 | |||
2641 | static inline int security_inode_notifysecctx(struct inode *inode, void *ctx, u32 ctxlen) | ||
2642 | { | ||
2643 | return -EOPNOTSUPP; | ||
2644 | } | ||
2645 | static inline int security_inode_setsecctx(struct dentry *dentry, void *ctx, u32 ctxlen) | ||
2646 | { | ||
2647 | return -EOPNOTSUPP; | ||
2648 | } | ||
2649 | static inline int security_inode_getsecctx(struct inode *inode, void **ctx, u32 *ctxlen) | ||
2650 | { | ||
2651 | return -EOPNOTSUPP; | ||
2652 | } | ||
2522 | #endif /* CONFIG_SECURITY */ | 2653 | #endif /* CONFIG_SECURITY */ |
2523 | 2654 | ||
2524 | #ifdef CONFIG_SECURITY_NETWORK | 2655 | #ifdef CONFIG_SECURITY_NETWORK |
@@ -2557,6 +2688,9 @@ void security_inet_csk_clone(struct sock *newsk, | |||
2557 | const struct request_sock *req); | 2688 | const struct request_sock *req); |
2558 | void security_inet_conn_established(struct sock *sk, | 2689 | void security_inet_conn_established(struct sock *sk, |
2559 | struct sk_buff *skb); | 2690 | struct sk_buff *skb); |
2691 | int security_tun_dev_create(void); | ||
2692 | void security_tun_dev_post_create(struct sock *sk); | ||
2693 | int security_tun_dev_attach(struct sock *sk); | ||
2560 | 2694 | ||
2561 | #else /* CONFIG_SECURITY_NETWORK */ | 2695 | #else /* CONFIG_SECURITY_NETWORK */ |
2562 | static inline int security_unix_stream_connect(struct socket *sock, | 2696 | static inline int security_unix_stream_connect(struct socket *sock, |
@@ -2707,6 +2841,20 @@ static inline void security_inet_conn_established(struct sock *sk, | |||
2707 | struct sk_buff *skb) | 2841 | struct sk_buff *skb) |
2708 | { | 2842 | { |
2709 | } | 2843 | } |
2844 | |||
2845 | static inline int security_tun_dev_create(void) | ||
2846 | { | ||
2847 | return 0; | ||
2848 | } | ||
2849 | |||
2850 | static inline void security_tun_dev_post_create(struct sock *sk) | ||
2851 | { | ||
2852 | } | ||
2853 | |||
2854 | static inline int security_tun_dev_attach(struct sock *sk) | ||
2855 | { | ||
2856 | return 0; | ||
2857 | } | ||
2710 | #endif /* CONFIG_SECURITY_NETWORK */ | 2858 | #endif /* CONFIG_SECURITY_NETWORK */ |
2711 | 2859 | ||
2712 | #ifdef CONFIG_SECURITY_NETWORK_XFRM | 2860 | #ifdef CONFIG_SECURITY_NETWORK_XFRM |
@@ -2863,6 +3011,9 @@ void security_key_free(struct key *key); | |||
2863 | int security_key_permission(key_ref_t key_ref, | 3011 | int security_key_permission(key_ref_t key_ref, |
2864 | const struct cred *cred, key_perm_t perm); | 3012 | const struct cred *cred, key_perm_t perm); |
2865 | int security_key_getsecurity(struct key *key, char **_buffer); | 3013 | int security_key_getsecurity(struct key *key, char **_buffer); |
3014 | int security_key_session_to_parent(const struct cred *cred, | ||
3015 | const struct cred *parent_cred, | ||
3016 | struct key *key); | ||
2866 | 3017 | ||
2867 | #else | 3018 | #else |
2868 | 3019 | ||
@@ -2890,6 +3041,13 @@ static inline int security_key_getsecurity(struct key *key, char **_buffer) | |||
2890 | return 0; | 3041 | return 0; |
2891 | } | 3042 | } |
2892 | 3043 | ||
3044 | static inline int security_key_session_to_parent(const struct cred *cred, | ||
3045 | const struct cred *parent_cred, | ||
3046 | struct key *key) | ||
3047 | { | ||
3048 | return 0; | ||
3049 | } | ||
3050 | |||
2893 | #endif | 3051 | #endif |
2894 | #endif /* CONFIG_KEYS */ | 3052 | #endif /* CONFIG_KEYS */ |
2895 | 3053 | ||
diff --git a/include/linux/selinux.h b/include/linux/selinux.h index 20f965d4b041..82e0f26a1299 100644 --- a/include/linux/selinux.h +++ b/include/linux/selinux.h | |||
@@ -61,6 +61,11 @@ void selinux_secmark_refcount_inc(void); | |||
61 | * existing SECMARK targets has been removed/flushed. | 61 | * existing SECMARK targets has been removed/flushed. |
62 | */ | 62 | */ |
63 | void selinux_secmark_refcount_dec(void); | 63 | void selinux_secmark_refcount_dec(void); |
64 | |||
65 | /** | ||
66 | * selinux_is_enabled - is SELinux enabled? | ||
67 | */ | ||
68 | bool selinux_is_enabled(void); | ||
64 | #else | 69 | #else |
65 | 70 | ||
66 | static inline int selinux_string_to_sid(const char *str, u32 *sid) | 71 | static inline int selinux_string_to_sid(const char *str, u32 *sid) |
@@ -84,6 +89,10 @@ static inline void selinux_secmark_refcount_dec(void) | |||
84 | return; | 89 | return; |
85 | } | 90 | } |
86 | 91 | ||
92 | static inline bool selinux_is_enabled(void) | ||
93 | { | ||
94 | return false; | ||
95 | } | ||
87 | #endif /* CONFIG_SECURITY_SELINUX */ | 96 | #endif /* CONFIG_SECURITY_SELINUX */ |
88 | 97 | ||
89 | #endif /* _LINUX_SELINUX_H */ | 98 | #endif /* _LINUX_SELINUX_H */ |
diff --git a/include/linux/serial.h b/include/linux/serial.h index e5bb75a63802..c8613c3ff9d3 100644 --- a/include/linux/serial.h +++ b/include/linux/serial.h | |||
@@ -122,6 +122,7 @@ struct serial_uart_config { | |||
122 | 122 | ||
123 | /* Internal flags used only by kernel */ | 123 | /* Internal flags used only by kernel */ |
124 | #define ASYNCB_INITIALIZED 31 /* Serial port was initialized */ | 124 | #define ASYNCB_INITIALIZED 31 /* Serial port was initialized */ |
125 | #define ASYNCB_SUSPENDED 30 /* Serial port is suspended */ | ||
125 | #define ASYNCB_NORMAL_ACTIVE 29 /* Normal device is active */ | 126 | #define ASYNCB_NORMAL_ACTIVE 29 /* Normal device is active */ |
126 | #define ASYNCB_BOOT_AUTOCONF 28 /* Autoconfigure port on bootup */ | 127 | #define ASYNCB_BOOT_AUTOCONF 28 /* Autoconfigure port on bootup */ |
127 | #define ASYNCB_CLOSING 27 /* Serial port is closing */ | 128 | #define ASYNCB_CLOSING 27 /* Serial port is closing */ |
@@ -133,6 +134,7 @@ struct serial_uart_config { | |||
133 | #define ASYNCB_FIRST_KERNEL 22 | 134 | #define ASYNCB_FIRST_KERNEL 22 |
134 | 135 | ||
135 | #define ASYNC_HUP_NOTIFY (1U << ASYNCB_HUP_NOTIFY) | 136 | #define ASYNC_HUP_NOTIFY (1U << ASYNCB_HUP_NOTIFY) |
137 | #define ASYNC_SUSPENDED (1U << ASYNCB_SUSPENDED) | ||
136 | #define ASYNC_FOURPORT (1U << ASYNCB_FOURPORT) | 138 | #define ASYNC_FOURPORT (1U << ASYNCB_FOURPORT) |
137 | #define ASYNC_SAK (1U << ASYNCB_SAK) | 139 | #define ASYNC_SAK (1U << ASYNCB_SAK) |
138 | #define ASYNC_SPLIT_TERMIOS (1U << ASYNCB_SPLIT_TERMIOS) | 140 | #define ASYNC_SPLIT_TERMIOS (1U << ASYNCB_SPLIT_TERMIOS) |
diff --git a/include/linux/serial_8250.h b/include/linux/serial_8250.h index d4d2a78ad43e..fb46aba11fb5 100644 --- a/include/linux/serial_8250.h +++ b/include/linux/serial_8250.h | |||
@@ -22,6 +22,7 @@ struct plat_serial8250_port { | |||
22 | void __iomem *membase; /* ioremap cookie or NULL */ | 22 | void __iomem *membase; /* ioremap cookie or NULL */ |
23 | resource_size_t mapbase; /* resource base */ | 23 | resource_size_t mapbase; /* resource base */ |
24 | unsigned int irq; /* interrupt number */ | 24 | unsigned int irq; /* interrupt number */ |
25 | unsigned long irqflags; /* request_irq flags */ | ||
25 | unsigned int uartclk; /* UART clock rate */ | 26 | unsigned int uartclk; /* UART clock rate */ |
26 | void *private_data; | 27 | void *private_data; |
27 | unsigned char regshift; /* register shift */ | 28 | unsigned char regshift; /* register shift */ |
diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h index 23d2fb051f97..d58e460844dd 100644 --- a/include/linux/serial_core.h +++ b/include/linux/serial_core.h | |||
@@ -20,6 +20,8 @@ | |||
20 | #ifndef LINUX_SERIAL_CORE_H | 20 | #ifndef LINUX_SERIAL_CORE_H |
21 | #define LINUX_SERIAL_CORE_H | 21 | #define LINUX_SERIAL_CORE_H |
22 | 22 | ||
23 | #include <linux/serial.h> | ||
24 | |||
23 | /* | 25 | /* |
24 | * The type definitions. These are from Ted Ts'o's serial.h | 26 | * The type definitions. These are from Ted Ts'o's serial.h |
25 | */ | 27 | */ |
@@ -186,7 +188,6 @@ | |||
186 | #include <linux/sysrq.h> | 188 | #include <linux/sysrq.h> |
187 | 189 | ||
188 | struct uart_port; | 190 | struct uart_port; |
189 | struct uart_info; | ||
190 | struct serial_struct; | 191 | struct serial_struct; |
191 | struct device; | 192 | struct device; |
192 | 193 | ||
@@ -265,6 +266,7 @@ struct uart_port { | |||
265 | unsigned int (*serial_in)(struct uart_port *, int); | 266 | unsigned int (*serial_in)(struct uart_port *, int); |
266 | void (*serial_out)(struct uart_port *, int, int); | 267 | void (*serial_out)(struct uart_port *, int, int); |
267 | unsigned int irq; /* irq number */ | 268 | unsigned int irq; /* irq number */ |
269 | unsigned long irqflags; /* irq flags */ | ||
268 | unsigned int uartclk; /* base uart clock */ | 270 | unsigned int uartclk; /* base uart clock */ |
269 | unsigned int fifosize; /* tx fifo size */ | 271 | unsigned int fifosize; /* tx fifo size */ |
270 | unsigned char x_char; /* xon/xoff char */ | 272 | unsigned char x_char; /* xon/xoff char */ |
@@ -283,7 +285,7 @@ struct uart_port { | |||
283 | 285 | ||
284 | unsigned int read_status_mask; /* driver specific */ | 286 | unsigned int read_status_mask; /* driver specific */ |
285 | unsigned int ignore_status_mask; /* driver specific */ | 287 | unsigned int ignore_status_mask; /* driver specific */ |
286 | struct uart_info *info; /* pointer to parent info */ | 288 | struct uart_state *state; /* pointer to parent state */ |
287 | struct uart_icount icount; /* statistics */ | 289 | struct uart_icount icount; /* statistics */ |
288 | 290 | ||
289 | struct console *cons; /* struct console, if any */ | 291 | struct console *cons; /* struct console, if any */ |
@@ -335,52 +337,16 @@ struct uart_port { | |||
335 | }; | 337 | }; |
336 | 338 | ||
337 | /* | 339 | /* |
338 | * This is the state information which is only valid when the port | ||
339 | * is open; it may be cleared the core driver once the device has | ||
340 | * been closed. Either the low level driver or the core can modify | ||
341 | * stuff here. | ||
342 | */ | ||
343 | typedef unsigned int __bitwise__ uif_t; | ||
344 | |||
345 | struct uart_info { | ||
346 | struct tty_port port; | ||
347 | struct circ_buf xmit; | ||
348 | uif_t flags; | ||
349 | |||
350 | /* | ||
351 | * Definitions for info->flags. These are _private_ to serial_core, and | ||
352 | * are specific to this structure. They may be queried by low level drivers. | ||
353 | * | ||
354 | * FIXME: use the ASY_ definitions | ||
355 | */ | ||
356 | #define UIF_CHECK_CD ((__force uif_t) (1 << 25)) | ||
357 | #define UIF_CTS_FLOW ((__force uif_t) (1 << 26)) | ||
358 | #define UIF_NORMAL_ACTIVE ((__force uif_t) (1 << 29)) | ||
359 | #define UIF_INITIALIZED ((__force uif_t) (1 << 31)) | ||
360 | #define UIF_SUSPENDED ((__force uif_t) (1 << 30)) | ||
361 | |||
362 | struct tasklet_struct tlet; | ||
363 | wait_queue_head_t delta_msr_wait; | ||
364 | }; | ||
365 | |||
366 | /* | ||
367 | * This is the state information which is persistent across opens. | 340 | * This is the state information which is persistent across opens. |
368 | * The low level driver must not to touch any elements contained | ||
369 | * within. | ||
370 | */ | 341 | */ |
371 | struct uart_state { | 342 | struct uart_state { |
372 | unsigned int close_delay; /* msec */ | 343 | struct tty_port port; |
373 | unsigned int closing_wait; /* msec */ | ||
374 | |||
375 | #define USF_CLOSING_WAIT_INF (0) | ||
376 | #define USF_CLOSING_WAIT_NONE (~0U) | ||
377 | 344 | ||
378 | int count; | ||
379 | int pm_state; | 345 | int pm_state; |
380 | struct uart_info info; | 346 | struct circ_buf xmit; |
381 | struct uart_port *port; | ||
382 | 347 | ||
383 | struct mutex mutex; | 348 | struct tasklet_struct tlet; |
349 | struct uart_port *uart_port; | ||
384 | }; | 350 | }; |
385 | 351 | ||
386 | #define UART_XMIT_SIZE PAGE_SIZE | 352 | #define UART_XMIT_SIZE PAGE_SIZE |
@@ -461,7 +427,7 @@ int uart_resume_port(struct uart_driver *reg, struct uart_port *port); | |||
461 | 427 | ||
462 | static inline int uart_tx_stopped(struct uart_port *port) | 428 | static inline int uart_tx_stopped(struct uart_port *port) |
463 | { | 429 | { |
464 | struct tty_struct *tty = port->info->port.tty; | 430 | struct tty_struct *tty = port->state->port.tty; |
465 | if(tty->stopped || tty->hw_stopped) | 431 | if(tty->stopped || tty->hw_stopped) |
466 | return 1; | 432 | return 1; |
467 | return 0; | 433 | return 0; |
@@ -476,7 +442,7 @@ uart_handle_sysrq_char(struct uart_port *port, unsigned int ch) | |||
476 | #ifdef SUPPORT_SYSRQ | 442 | #ifdef SUPPORT_SYSRQ |
477 | if (port->sysrq) { | 443 | if (port->sysrq) { |
478 | if (ch && time_before(jiffies, port->sysrq)) { | 444 | if (ch && time_before(jiffies, port->sysrq)) { |
479 | handle_sysrq(ch, port->info->port.tty); | 445 | handle_sysrq(ch, port->state->port.tty); |
480 | port->sysrq = 0; | 446 | port->sysrq = 0; |
481 | return 1; | 447 | return 1; |
482 | } | 448 | } |
@@ -494,7 +460,7 @@ uart_handle_sysrq_char(struct uart_port *port, unsigned int ch) | |||
494 | */ | 460 | */ |
495 | static inline int uart_handle_break(struct uart_port *port) | 461 | static inline int uart_handle_break(struct uart_port *port) |
496 | { | 462 | { |
497 | struct uart_info *info = port->info; | 463 | struct uart_state *state = port->state; |
498 | #ifdef SUPPORT_SYSRQ | 464 | #ifdef SUPPORT_SYSRQ |
499 | if (port->cons && port->cons->index == port->line) { | 465 | if (port->cons && port->cons->index == port->line) { |
500 | if (!port->sysrq) { | 466 | if (!port->sysrq) { |
@@ -505,7 +471,7 @@ static inline int uart_handle_break(struct uart_port *port) | |||
505 | } | 471 | } |
506 | #endif | 472 | #endif |
507 | if (port->flags & UPF_SAK) | 473 | if (port->flags & UPF_SAK) |
508 | do_SAK(info->port.tty); | 474 | do_SAK(state->port.tty); |
509 | return 0; | 475 | return 0; |
510 | } | 476 | } |
511 | 477 | ||
@@ -515,22 +481,23 @@ static inline int uart_handle_break(struct uart_port *port) | |||
515 | * @status: new carrier detect status, nonzero if active | 481 | * @status: new carrier detect status, nonzero if active |
516 | */ | 482 | */ |
517 | static inline void | 483 | static inline void |
518 | uart_handle_dcd_change(struct uart_port *port, unsigned int status) | 484 | uart_handle_dcd_change(struct uart_port *uport, unsigned int status) |
519 | { | 485 | { |
520 | struct uart_info *info = port->info; | 486 | struct uart_state *state = uport->state; |
487 | struct tty_port *port = &state->port; | ||
521 | 488 | ||
522 | port->icount.dcd++; | 489 | uport->icount.dcd++; |
523 | 490 | ||
524 | #ifdef CONFIG_HARD_PPS | 491 | #ifdef CONFIG_HARD_PPS |
525 | if ((port->flags & UPF_HARDPPS_CD) && status) | 492 | if ((uport->flags & UPF_HARDPPS_CD) && status) |
526 | hardpps(); | 493 | hardpps(); |
527 | #endif | 494 | #endif |
528 | 495 | ||
529 | if (info->flags & UIF_CHECK_CD) { | 496 | if (port->flags & ASYNC_CHECK_CD) { |
530 | if (status) | 497 | if (status) |
531 | wake_up_interruptible(&info->port.open_wait); | 498 | wake_up_interruptible(&port->open_wait); |
532 | else if (info->port.tty) | 499 | else if (port->tty) |
533 | tty_hangup(info->port.tty); | 500 | tty_hangup(port->tty); |
534 | } | 501 | } |
535 | } | 502 | } |
536 | 503 | ||
@@ -540,24 +507,24 @@ uart_handle_dcd_change(struct uart_port *port, unsigned int status) | |||
540 | * @status: new clear to send status, nonzero if active | 507 | * @status: new clear to send status, nonzero if active |
541 | */ | 508 | */ |
542 | static inline void | 509 | static inline void |
543 | uart_handle_cts_change(struct uart_port *port, unsigned int status) | 510 | uart_handle_cts_change(struct uart_port *uport, unsigned int status) |
544 | { | 511 | { |
545 | struct uart_info *info = port->info; | 512 | struct tty_port *port = &uport->state->port; |
546 | struct tty_struct *tty = info->port.tty; | 513 | struct tty_struct *tty = port->tty; |
547 | 514 | ||
548 | port->icount.cts++; | 515 | uport->icount.cts++; |
549 | 516 | ||
550 | if (info->flags & UIF_CTS_FLOW) { | 517 | if (port->flags & ASYNC_CTS_FLOW) { |
551 | if (tty->hw_stopped) { | 518 | if (tty->hw_stopped) { |
552 | if (status) { | 519 | if (status) { |
553 | tty->hw_stopped = 0; | 520 | tty->hw_stopped = 0; |
554 | port->ops->start_tx(port); | 521 | uport->ops->start_tx(uport); |
555 | uart_write_wakeup(port); | 522 | uart_write_wakeup(uport); |
556 | } | 523 | } |
557 | } else { | 524 | } else { |
558 | if (!status) { | 525 | if (!status) { |
559 | tty->hw_stopped = 1; | 526 | tty->hw_stopped = 1; |
560 | port->ops->stop_tx(port); | 527 | uport->ops->stop_tx(uport); |
561 | } | 528 | } |
562 | } | 529 | } |
563 | } | 530 | } |
@@ -569,7 +536,7 @@ static inline void | |||
569 | uart_insert_char(struct uart_port *port, unsigned int status, | 536 | uart_insert_char(struct uart_port *port, unsigned int status, |
570 | unsigned int overrun, unsigned int ch, unsigned int flag) | 537 | unsigned int overrun, unsigned int ch, unsigned int flag) |
571 | { | 538 | { |
572 | struct tty_struct *tty = port->info->port.tty; | 539 | struct tty_struct *tty = port->state->port.tty; |
573 | 540 | ||
574 | if ((status & port->ignore_status_mask & ~overrun) == 0) | 541 | if ((status & port->ignore_status_mask & ~overrun) == 0) |
575 | tty_insert_flip_char(tty, ch, flag); | 542 | tty_insert_flip_char(tty, ch, flag); |
diff --git a/include/linux/serio.h b/include/linux/serio.h index 126d24c9eaa8..a640bc2afe76 100644 --- a/include/linux/serio.h +++ b/include/linux/serio.h | |||
@@ -31,8 +31,6 @@ struct serio { | |||
31 | 31 | ||
32 | bool manual_bind; | 32 | bool manual_bind; |
33 | bool registered; /* port has been fully registered with driver core */ | 33 | bool registered; /* port has been fully registered with driver core */ |
34 | bool suspended; /* port is suspended */ | ||
35 | |||
36 | 34 | ||
37 | struct serio_device_id id; | 35 | struct serio_device_id id; |
38 | 36 | ||
diff --git a/include/linux/sh_intc.h b/include/linux/sh_intc.h index eb1423a0078d..68e212ff9dde 100644 --- a/include/linux/sh_intc.h +++ b/include/linux/sh_intc.h | |||
@@ -85,7 +85,6 @@ struct intc_desc symbol __initdata = { \ | |||
85 | } | 85 | } |
86 | #endif | 86 | #endif |
87 | 87 | ||
88 | unsigned int intc_evt2irq(unsigned int vector); | ||
89 | void __init register_intc_controller(struct intc_desc *desc); | 88 | void __init register_intc_controller(struct intc_desc *desc); |
90 | int intc_set_priority(unsigned int irq, unsigned int prio); | 89 | int intc_set_priority(unsigned int irq, unsigned int prio); |
91 | 90 | ||
diff --git a/include/linux/shmem_fs.h b/include/linux/shmem_fs.h index abff6c9b413c..deee7afd8d66 100644 --- a/include/linux/shmem_fs.h +++ b/include/linux/shmem_fs.h | |||
@@ -38,8 +38,11 @@ static inline struct shmem_inode_info *SHMEM_I(struct inode *inode) | |||
38 | return container_of(inode, struct shmem_inode_info, vfs_inode); | 38 | return container_of(inode, struct shmem_inode_info, vfs_inode); |
39 | } | 39 | } |
40 | 40 | ||
41 | extern int init_tmpfs(void); | ||
42 | extern int shmem_fill_super(struct super_block *sb, void *data, int silent); | ||
43 | |||
41 | #ifdef CONFIG_TMPFS_POSIX_ACL | 44 | #ifdef CONFIG_TMPFS_POSIX_ACL |
42 | int shmem_permission(struct inode *, int); | 45 | int shmem_check_acl(struct inode *, int); |
43 | int shmem_acl_init(struct inode *, struct inode *); | 46 | int shmem_acl_init(struct inode *, struct inode *); |
44 | 47 | ||
45 | extern struct xattr_handler shmem_xattr_acl_access_handler; | 48 | extern struct xattr_handler shmem_xattr_acl_access_handler; |
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index b47b3f039d14..df7b23ac66e6 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
@@ -304,7 +304,6 @@ typedef unsigned char *sk_buff_data_t; | |||
304 | * @tc_index: Traffic control index | 304 | * @tc_index: Traffic control index |
305 | * @tc_verd: traffic control verdict | 305 | * @tc_verd: traffic control verdict |
306 | * @ndisc_nodetype: router type (from link layer) | 306 | * @ndisc_nodetype: router type (from link layer) |
307 | * @do_not_encrypt: set to prevent encryption of this frame | ||
308 | * @dma_cookie: a cookie to one of several possible DMA operations | 307 | * @dma_cookie: a cookie to one of several possible DMA operations |
309 | * done by skb DMA functions | 308 | * done by skb DMA functions |
310 | * @secmark: security marking | 309 | * @secmark: security marking |
@@ -380,12 +379,9 @@ struct sk_buff { | |||
380 | #ifdef CONFIG_IPV6_NDISC_NODETYPE | 379 | #ifdef CONFIG_IPV6_NDISC_NODETYPE |
381 | __u8 ndisc_nodetype:2; | 380 | __u8 ndisc_nodetype:2; |
382 | #endif | 381 | #endif |
383 | #if defined(CONFIG_MAC80211) || defined(CONFIG_MAC80211_MODULE) | ||
384 | __u8 do_not_encrypt:1; | ||
385 | #endif | ||
386 | kmemcheck_bitfield_end(flags2); | 382 | kmemcheck_bitfield_end(flags2); |
387 | 383 | ||
388 | /* 0/13/14 bit hole */ | 384 | /* 0/14 bit hole */ |
389 | 385 | ||
390 | #ifdef CONFIG_NET_DMA | 386 | #ifdef CONFIG_NET_DMA |
391 | dma_cookie_t dma_cookie; | 387 | dma_cookie_t dma_cookie; |
@@ -1342,12 +1338,12 @@ static inline int skb_network_offset(const struct sk_buff *skb) | |||
1342 | * shifting the start of the packet by 2 bytes. Drivers should do this | 1338 | * shifting the start of the packet by 2 bytes. Drivers should do this |
1343 | * with: | 1339 | * with: |
1344 | * | 1340 | * |
1345 | * skb_reserve(NET_IP_ALIGN); | 1341 | * skb_reserve(skb, NET_IP_ALIGN); |
1346 | * | 1342 | * |
1347 | * The downside to this alignment of the IP header is that the DMA is now | 1343 | * The downside to this alignment of the IP header is that the DMA is now |
1348 | * unaligned. On some architectures the cost of an unaligned DMA is high | 1344 | * unaligned. On some architectures the cost of an unaligned DMA is high |
1349 | * and this cost outweighs the gains made by aligning the IP header. | 1345 | * and this cost outweighs the gains made by aligning the IP header. |
1350 | * | 1346 | * |
1351 | * Since this trade off varies between architectures, we allow NET_IP_ALIGN | 1347 | * Since this trade off varies between architectures, we allow NET_IP_ALIGN |
1352 | * to be overridden. | 1348 | * to be overridden. |
1353 | */ | 1349 | */ |
diff --git a/include/linux/slob_def.h b/include/linux/slob_def.h index bb5368df4be8..0ec00b39d006 100644 --- a/include/linux/slob_def.h +++ b/include/linux/slob_def.h | |||
@@ -34,9 +34,4 @@ static __always_inline void *__kmalloc(size_t size, gfp_t flags) | |||
34 | return kmalloc(size, flags); | 34 | return kmalloc(size, flags); |
35 | } | 35 | } |
36 | 36 | ||
37 | static inline void kmem_cache_init_late(void) | ||
38 | { | ||
39 | /* Nothing to do */ | ||
40 | } | ||
41 | |||
42 | #endif /* __LINUX_SLOB_DEF_H */ | 37 | #endif /* __LINUX_SLOB_DEF_H */ |
diff --git a/include/linux/slub_def.h b/include/linux/slub_def.h index 4dcbc2c71491..5ad70a60fd74 100644 --- a/include/linux/slub_def.h +++ b/include/linux/slub_def.h | |||
@@ -11,6 +11,7 @@ | |||
11 | #include <linux/workqueue.h> | 11 | #include <linux/workqueue.h> |
12 | #include <linux/kobject.h> | 12 | #include <linux/kobject.h> |
13 | #include <linux/kmemtrace.h> | 13 | #include <linux/kmemtrace.h> |
14 | #include <linux/kmemleak.h> | ||
14 | 15 | ||
15 | enum stat_item { | 16 | enum stat_item { |
16 | ALLOC_FASTPATH, /* Allocation from cpu slab */ | 17 | ALLOC_FASTPATH, /* Allocation from cpu slab */ |
@@ -152,12 +153,10 @@ static __always_inline int kmalloc_index(size_t size) | |||
152 | if (size <= KMALLOC_MIN_SIZE) | 153 | if (size <= KMALLOC_MIN_SIZE) |
153 | return KMALLOC_SHIFT_LOW; | 154 | return KMALLOC_SHIFT_LOW; |
154 | 155 | ||
155 | #if KMALLOC_MIN_SIZE <= 64 | 156 | if (KMALLOC_MIN_SIZE <= 32 && size > 64 && size <= 96) |
156 | if (size > 64 && size <= 96) | ||
157 | return 1; | 157 | return 1; |
158 | if (size > 128 && size <= 192) | 158 | if (KMALLOC_MIN_SIZE <= 64 && size > 128 && size <= 192) |
159 | return 2; | 159 | return 2; |
160 | #endif | ||
161 | if (size <= 8) return 3; | 160 | if (size <= 8) return 3; |
162 | if (size <= 16) return 4; | 161 | if (size <= 16) return 4; |
163 | if (size <= 32) return 5; | 162 | if (size <= 32) return 5; |
@@ -233,6 +232,7 @@ static __always_inline void *kmalloc_large(size_t size, gfp_t flags) | |||
233 | unsigned int order = get_order(size); | 232 | unsigned int order = get_order(size); |
234 | void *ret = (void *) __get_free_pages(flags | __GFP_COMP, order); | 233 | void *ret = (void *) __get_free_pages(flags | __GFP_COMP, order); |
235 | 234 | ||
235 | kmemleak_alloc(ret, size, 1, flags); | ||
236 | trace_kmalloc(_THIS_IP_, ret, size, PAGE_SIZE << order, flags); | 236 | trace_kmalloc(_THIS_IP_, ret, size, PAGE_SIZE << order, flags); |
237 | 237 | ||
238 | return ret; | 238 | return ret; |
@@ -302,6 +302,4 @@ static __always_inline void *kmalloc_node(size_t size, gfp_t flags, int node) | |||
302 | } | 302 | } |
303 | #endif | 303 | #endif |
304 | 304 | ||
305 | void __init kmem_cache_init_late(void); | ||
306 | |||
307 | #endif /* _LINUX_SLUB_DEF_H */ | 305 | #endif /* _LINUX_SLUB_DEF_H */ |
diff --git a/include/linux/spi/spi.h b/include/linux/spi/spi.h index 9c4cd27f4685..c47c4b4da97e 100644 --- a/include/linux/spi/spi.h +++ b/include/linux/spi/spi.h | |||
@@ -80,6 +80,8 @@ struct spi_device { | |||
80 | #define SPI_LSB_FIRST 0x08 /* per-word bits-on-wire */ | 80 | #define SPI_LSB_FIRST 0x08 /* per-word bits-on-wire */ |
81 | #define SPI_3WIRE 0x10 /* SI/SO signals shared */ | 81 | #define SPI_3WIRE 0x10 /* SI/SO signals shared */ |
82 | #define SPI_LOOP 0x20 /* loopback mode */ | 82 | #define SPI_LOOP 0x20 /* loopback mode */ |
83 | #define SPI_NO_CS 0x40 /* 1 dev/bus, no chipselect */ | ||
84 | #define SPI_READY 0x80 /* slave pulls low to pause */ | ||
83 | u8 bits_per_word; | 85 | u8 bits_per_word; |
84 | int irq; | 86 | int irq; |
85 | void *controller_state; | 87 | void *controller_state; |
@@ -248,6 +250,10 @@ struct spi_master { | |||
248 | /* spi_device.mode flags understood by this controller driver */ | 250 | /* spi_device.mode flags understood by this controller driver */ |
249 | u16 mode_bits; | 251 | u16 mode_bits; |
250 | 252 | ||
253 | /* other constraints relevant to this driver */ | ||
254 | u16 flags; | ||
255 | #define SPI_MASTER_HALF_DUPLEX BIT(0) /* can't do full duplex */ | ||
256 | |||
251 | /* Setup mode and clock, etc (spi driver may call many times). | 257 | /* Setup mode and clock, etc (spi driver may call many times). |
252 | * | 258 | * |
253 | * IMPORTANT: this may be called when transfers to another | 259 | * IMPORTANT: this may be called when transfers to another |
diff --git a/include/linux/spi/spidev.h b/include/linux/spi/spidev.h index 95251ccd5a07..bf0570a84f7a 100644 --- a/include/linux/spi/spidev.h +++ b/include/linux/spi/spidev.h | |||
@@ -40,6 +40,8 @@ | |||
40 | #define SPI_LSB_FIRST 0x08 | 40 | #define SPI_LSB_FIRST 0x08 |
41 | #define SPI_3WIRE 0x10 | 41 | #define SPI_3WIRE 0x10 |
42 | #define SPI_LOOP 0x20 | 42 | #define SPI_LOOP 0x20 |
43 | #define SPI_NO_CS 0x40 | ||
44 | #define SPI_READY 0x80 | ||
43 | 45 | ||
44 | /*---------------------------------------------------------------------------*/ | 46 | /*---------------------------------------------------------------------------*/ |
45 | 47 | ||
diff --git a/include/linux/spinlock.h b/include/linux/spinlock.h index 252b245cfcf4..f0ca7a7a1757 100644 --- a/include/linux/spinlock.h +++ b/include/linux/spinlock.h | |||
@@ -132,21 +132,17 @@ do { \ | |||
132 | #endif /*__raw_spin_is_contended*/ | 132 | #endif /*__raw_spin_is_contended*/ |
133 | #endif | 133 | #endif |
134 | 134 | ||
135 | /* The lock does not imply full memory barrier. */ | ||
136 | #ifndef ARCH_HAS_SMP_MB_AFTER_LOCK | ||
137 | static inline void smp_mb__after_lock(void) { smp_mb(); } | ||
138 | #endif | ||
139 | |||
135 | /** | 140 | /** |
136 | * spin_unlock_wait - wait until the spinlock gets unlocked | 141 | * spin_unlock_wait - wait until the spinlock gets unlocked |
137 | * @lock: the spinlock in question. | 142 | * @lock: the spinlock in question. |
138 | */ | 143 | */ |
139 | #define spin_unlock_wait(lock) __raw_spin_unlock_wait(&(lock)->raw_lock) | 144 | #define spin_unlock_wait(lock) __raw_spin_unlock_wait(&(lock)->raw_lock) |
140 | 145 | ||
141 | /* | ||
142 | * Pull the _spin_*()/_read_*()/_write_*() functions/declarations: | ||
143 | */ | ||
144 | #if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK) | ||
145 | # include <linux/spinlock_api_smp.h> | ||
146 | #else | ||
147 | # include <linux/spinlock_api_up.h> | ||
148 | #endif | ||
149 | |||
150 | #ifdef CONFIG_DEBUG_SPINLOCK | 146 | #ifdef CONFIG_DEBUG_SPINLOCK |
151 | extern void _raw_spin_lock(spinlock_t *lock); | 147 | extern void _raw_spin_lock(spinlock_t *lock); |
152 | #define _raw_spin_lock_flags(lock, flags) _raw_spin_lock(lock) | 148 | #define _raw_spin_lock_flags(lock, flags) _raw_spin_lock(lock) |
@@ -263,50 +259,16 @@ do { \ | |||
263 | 259 | ||
264 | #define spin_lock_irq(lock) _spin_lock_irq(lock) | 260 | #define spin_lock_irq(lock) _spin_lock_irq(lock) |
265 | #define spin_lock_bh(lock) _spin_lock_bh(lock) | 261 | #define spin_lock_bh(lock) _spin_lock_bh(lock) |
266 | |||
267 | #define read_lock_irq(lock) _read_lock_irq(lock) | 262 | #define read_lock_irq(lock) _read_lock_irq(lock) |
268 | #define read_lock_bh(lock) _read_lock_bh(lock) | 263 | #define read_lock_bh(lock) _read_lock_bh(lock) |
269 | |||
270 | #define write_lock_irq(lock) _write_lock_irq(lock) | 264 | #define write_lock_irq(lock) _write_lock_irq(lock) |
271 | #define write_lock_bh(lock) _write_lock_bh(lock) | 265 | #define write_lock_bh(lock) _write_lock_bh(lock) |
272 | 266 | #define spin_unlock(lock) _spin_unlock(lock) | |
273 | /* | 267 | #define read_unlock(lock) _read_unlock(lock) |
274 | * We inline the unlock functions in the nondebug case: | 268 | #define write_unlock(lock) _write_unlock(lock) |
275 | */ | 269 | #define spin_unlock_irq(lock) _spin_unlock_irq(lock) |
276 | #if defined(CONFIG_DEBUG_SPINLOCK) || defined(CONFIG_PREEMPT) || \ | 270 | #define read_unlock_irq(lock) _read_unlock_irq(lock) |
277 | !defined(CONFIG_SMP) | 271 | #define write_unlock_irq(lock) _write_unlock_irq(lock) |
278 | # define spin_unlock(lock) _spin_unlock(lock) | ||
279 | # define read_unlock(lock) _read_unlock(lock) | ||
280 | # define write_unlock(lock) _write_unlock(lock) | ||
281 | # define spin_unlock_irq(lock) _spin_unlock_irq(lock) | ||
282 | # define read_unlock_irq(lock) _read_unlock_irq(lock) | ||
283 | # define write_unlock_irq(lock) _write_unlock_irq(lock) | ||
284 | #else | ||
285 | # define spin_unlock(lock) \ | ||
286 | do {__raw_spin_unlock(&(lock)->raw_lock); __release(lock); } while (0) | ||
287 | # define read_unlock(lock) \ | ||
288 | do {__raw_read_unlock(&(lock)->raw_lock); __release(lock); } while (0) | ||
289 | # define write_unlock(lock) \ | ||
290 | do {__raw_write_unlock(&(lock)->raw_lock); __release(lock); } while (0) | ||
291 | # define spin_unlock_irq(lock) \ | ||
292 | do { \ | ||
293 | __raw_spin_unlock(&(lock)->raw_lock); \ | ||
294 | __release(lock); \ | ||
295 | local_irq_enable(); \ | ||
296 | } while (0) | ||
297 | # define read_unlock_irq(lock) \ | ||
298 | do { \ | ||
299 | __raw_read_unlock(&(lock)->raw_lock); \ | ||
300 | __release(lock); \ | ||
301 | local_irq_enable(); \ | ||
302 | } while (0) | ||
303 | # define write_unlock_irq(lock) \ | ||
304 | do { \ | ||
305 | __raw_write_unlock(&(lock)->raw_lock); \ | ||
306 | __release(lock); \ | ||
307 | local_irq_enable(); \ | ||
308 | } while (0) | ||
309 | #endif | ||
310 | 272 | ||
311 | #define spin_unlock_irqrestore(lock, flags) \ | 273 | #define spin_unlock_irqrestore(lock, flags) \ |
312 | do { \ | 274 | do { \ |
@@ -375,4 +337,13 @@ extern int _atomic_dec_and_lock(atomic_t *atomic, spinlock_t *lock); | |||
375 | */ | 337 | */ |
376 | #define spin_can_lock(lock) (!spin_is_locked(lock)) | 338 | #define spin_can_lock(lock) (!spin_is_locked(lock)) |
377 | 339 | ||
340 | /* | ||
341 | * Pull the _spin_*()/_read_*()/_write_*() functions/declarations: | ||
342 | */ | ||
343 | #if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK) | ||
344 | # include <linux/spinlock_api_smp.h> | ||
345 | #else | ||
346 | # include <linux/spinlock_api_up.h> | ||
347 | #endif | ||
348 | |||
378 | #endif /* __LINUX_SPINLOCK_H */ | 349 | #endif /* __LINUX_SPINLOCK_H */ |
diff --git a/include/linux/spinlock_api_smp.h b/include/linux/spinlock_api_smp.h index d79845d034b5..7a7e18fc2415 100644 --- a/include/linux/spinlock_api_smp.h +++ b/include/linux/spinlock_api_smp.h | |||
@@ -60,4 +60,398 @@ void __lockfunc _read_unlock_irqrestore(rwlock_t *lock, unsigned long flags) | |||
60 | void __lockfunc _write_unlock_irqrestore(rwlock_t *lock, unsigned long flags) | 60 | void __lockfunc _write_unlock_irqrestore(rwlock_t *lock, unsigned long flags) |
61 | __releases(lock); | 61 | __releases(lock); |
62 | 62 | ||
63 | /* | ||
64 | * We inline the unlock functions in the nondebug case: | ||
65 | */ | ||
66 | #if !defined(CONFIG_DEBUG_SPINLOCK) && !defined(CONFIG_PREEMPT) | ||
67 | #define __always_inline__spin_unlock | ||
68 | #define __always_inline__read_unlock | ||
69 | #define __always_inline__write_unlock | ||
70 | #define __always_inline__spin_unlock_irq | ||
71 | #define __always_inline__read_unlock_irq | ||
72 | #define __always_inline__write_unlock_irq | ||
73 | #endif | ||
74 | |||
75 | #ifndef CONFIG_DEBUG_SPINLOCK | ||
76 | #ifndef CONFIG_GENERIC_LOCKBREAK | ||
77 | |||
78 | #ifdef __always_inline__spin_lock | ||
79 | #define _spin_lock(lock) __spin_lock(lock) | ||
80 | #endif | ||
81 | |||
82 | #ifdef __always_inline__read_lock | ||
83 | #define _read_lock(lock) __read_lock(lock) | ||
84 | #endif | ||
85 | |||
86 | #ifdef __always_inline__write_lock | ||
87 | #define _write_lock(lock) __write_lock(lock) | ||
88 | #endif | ||
89 | |||
90 | #ifdef __always_inline__spin_lock_bh | ||
91 | #define _spin_lock_bh(lock) __spin_lock_bh(lock) | ||
92 | #endif | ||
93 | |||
94 | #ifdef __always_inline__read_lock_bh | ||
95 | #define _read_lock_bh(lock) __read_lock_bh(lock) | ||
96 | #endif | ||
97 | |||
98 | #ifdef __always_inline__write_lock_bh | ||
99 | #define _write_lock_bh(lock) __write_lock_bh(lock) | ||
100 | #endif | ||
101 | |||
102 | #ifdef __always_inline__spin_lock_irq | ||
103 | #define _spin_lock_irq(lock) __spin_lock_irq(lock) | ||
104 | #endif | ||
105 | |||
106 | #ifdef __always_inline__read_lock_irq | ||
107 | #define _read_lock_irq(lock) __read_lock_irq(lock) | ||
108 | #endif | ||
109 | |||
110 | #ifdef __always_inline__write_lock_irq | ||
111 | #define _write_lock_irq(lock) __write_lock_irq(lock) | ||
112 | #endif | ||
113 | |||
114 | #ifdef __always_inline__spin_lock_irqsave | ||
115 | #define _spin_lock_irqsave(lock) __spin_lock_irqsave(lock) | ||
116 | #endif | ||
117 | |||
118 | #ifdef __always_inline__read_lock_irqsave | ||
119 | #define _read_lock_irqsave(lock) __read_lock_irqsave(lock) | ||
120 | #endif | ||
121 | |||
122 | #ifdef __always_inline__write_lock_irqsave | ||
123 | #define _write_lock_irqsave(lock) __write_lock_irqsave(lock) | ||
124 | #endif | ||
125 | |||
126 | #endif /* !CONFIG_GENERIC_LOCKBREAK */ | ||
127 | |||
128 | #ifdef __always_inline__spin_trylock | ||
129 | #define _spin_trylock(lock) __spin_trylock(lock) | ||
130 | #endif | ||
131 | |||
132 | #ifdef __always_inline__read_trylock | ||
133 | #define _read_trylock(lock) __read_trylock(lock) | ||
134 | #endif | ||
135 | |||
136 | #ifdef __always_inline__write_trylock | ||
137 | #define _write_trylock(lock) __write_trylock(lock) | ||
138 | #endif | ||
139 | |||
140 | #ifdef __always_inline__spin_trylock_bh | ||
141 | #define _spin_trylock_bh(lock) __spin_trylock_bh(lock) | ||
142 | #endif | ||
143 | |||
144 | #ifdef __always_inline__spin_unlock | ||
145 | #define _spin_unlock(lock) __spin_unlock(lock) | ||
146 | #endif | ||
147 | |||
148 | #ifdef __always_inline__read_unlock | ||
149 | #define _read_unlock(lock) __read_unlock(lock) | ||
150 | #endif | ||
151 | |||
152 | #ifdef __always_inline__write_unlock | ||
153 | #define _write_unlock(lock) __write_unlock(lock) | ||
154 | #endif | ||
155 | |||
156 | #ifdef __always_inline__spin_unlock_bh | ||
157 | #define _spin_unlock_bh(lock) __spin_unlock_bh(lock) | ||
158 | #endif | ||
159 | |||
160 | #ifdef __always_inline__read_unlock_bh | ||
161 | #define _read_unlock_bh(lock) __read_unlock_bh(lock) | ||
162 | #endif | ||
163 | |||
164 | #ifdef __always_inline__write_unlock_bh | ||
165 | #define _write_unlock_bh(lock) __write_unlock_bh(lock) | ||
166 | #endif | ||
167 | |||
168 | #ifdef __always_inline__spin_unlock_irq | ||
169 | #define _spin_unlock_irq(lock) __spin_unlock_irq(lock) | ||
170 | #endif | ||
171 | |||
172 | #ifdef __always_inline__read_unlock_irq | ||
173 | #define _read_unlock_irq(lock) __read_unlock_irq(lock) | ||
174 | #endif | ||
175 | |||
176 | #ifdef __always_inline__write_unlock_irq | ||
177 | #define _write_unlock_irq(lock) __write_unlock_irq(lock) | ||
178 | #endif | ||
179 | |||
180 | #ifdef __always_inline__spin_unlock_irqrestore | ||
181 | #define _spin_unlock_irqrestore(lock, flags) __spin_unlock_irqrestore(lock, flags) | ||
182 | #endif | ||
183 | |||
184 | #ifdef __always_inline__read_unlock_irqrestore | ||
185 | #define _read_unlock_irqrestore(lock, flags) __read_unlock_irqrestore(lock, flags) | ||
186 | #endif | ||
187 | |||
188 | #ifdef __always_inline__write_unlock_irqrestore | ||
189 | #define _write_unlock_irqrestore(lock, flags) __write_unlock_irqrestore(lock, flags) | ||
190 | #endif | ||
191 | |||
192 | #endif /* CONFIG_DEBUG_SPINLOCK */ | ||
193 | |||
194 | static inline int __spin_trylock(spinlock_t *lock) | ||
195 | { | ||
196 | preempt_disable(); | ||
197 | if (_raw_spin_trylock(lock)) { | ||
198 | spin_acquire(&lock->dep_map, 0, 1, _RET_IP_); | ||
199 | return 1; | ||
200 | } | ||
201 | preempt_enable(); | ||
202 | return 0; | ||
203 | } | ||
204 | |||
205 | static inline int __read_trylock(rwlock_t *lock) | ||
206 | { | ||
207 | preempt_disable(); | ||
208 | if (_raw_read_trylock(lock)) { | ||
209 | rwlock_acquire_read(&lock->dep_map, 0, 1, _RET_IP_); | ||
210 | return 1; | ||
211 | } | ||
212 | preempt_enable(); | ||
213 | return 0; | ||
214 | } | ||
215 | |||
216 | static inline int __write_trylock(rwlock_t *lock) | ||
217 | { | ||
218 | preempt_disable(); | ||
219 | if (_raw_write_trylock(lock)) { | ||
220 | rwlock_acquire(&lock->dep_map, 0, 1, _RET_IP_); | ||
221 | return 1; | ||
222 | } | ||
223 | preempt_enable(); | ||
224 | return 0; | ||
225 | } | ||
226 | |||
227 | /* | ||
228 | * If lockdep is enabled then we use the non-preemption spin-ops | ||
229 | * even on CONFIG_PREEMPT, because lockdep assumes that interrupts are | ||
230 | * not re-enabled during lock-acquire (which the preempt-spin-ops do): | ||
231 | */ | ||
232 | #if !defined(CONFIG_GENERIC_LOCKBREAK) || defined(CONFIG_DEBUG_LOCK_ALLOC) | ||
233 | |||
234 | static inline void __read_lock(rwlock_t *lock) | ||
235 | { | ||
236 | preempt_disable(); | ||
237 | rwlock_acquire_read(&lock->dep_map, 0, 0, _RET_IP_); | ||
238 | LOCK_CONTENDED(lock, _raw_read_trylock, _raw_read_lock); | ||
239 | } | ||
240 | |||
241 | static inline unsigned long __spin_lock_irqsave(spinlock_t *lock) | ||
242 | { | ||
243 | unsigned long flags; | ||
244 | |||
245 | local_irq_save(flags); | ||
246 | preempt_disable(); | ||
247 | spin_acquire(&lock->dep_map, 0, 0, _RET_IP_); | ||
248 | /* | ||
249 | * On lockdep we dont want the hand-coded irq-enable of | ||
250 | * _raw_spin_lock_flags() code, because lockdep assumes | ||
251 | * that interrupts are not re-enabled during lock-acquire: | ||
252 | */ | ||
253 | #ifdef CONFIG_LOCKDEP | ||
254 | LOCK_CONTENDED(lock, _raw_spin_trylock, _raw_spin_lock); | ||
255 | #else | ||
256 | _raw_spin_lock_flags(lock, &flags); | ||
257 | #endif | ||
258 | return flags; | ||
259 | } | ||
260 | |||
261 | static inline void __spin_lock_irq(spinlock_t *lock) | ||
262 | { | ||
263 | local_irq_disable(); | ||
264 | preempt_disable(); | ||
265 | spin_acquire(&lock->dep_map, 0, 0, _RET_IP_); | ||
266 | LOCK_CONTENDED(lock, _raw_spin_trylock, _raw_spin_lock); | ||
267 | } | ||
268 | |||
269 | static inline void __spin_lock_bh(spinlock_t *lock) | ||
270 | { | ||
271 | local_bh_disable(); | ||
272 | preempt_disable(); | ||
273 | spin_acquire(&lock->dep_map, 0, 0, _RET_IP_); | ||
274 | LOCK_CONTENDED(lock, _raw_spin_trylock, _raw_spin_lock); | ||
275 | } | ||
276 | |||
277 | static inline unsigned long __read_lock_irqsave(rwlock_t *lock) | ||
278 | { | ||
279 | unsigned long flags; | ||
280 | |||
281 | local_irq_save(flags); | ||
282 | preempt_disable(); | ||
283 | rwlock_acquire_read(&lock->dep_map, 0, 0, _RET_IP_); | ||
284 | LOCK_CONTENDED_FLAGS(lock, _raw_read_trylock, _raw_read_lock, | ||
285 | _raw_read_lock_flags, &flags); | ||
286 | return flags; | ||
287 | } | ||
288 | |||
289 | static inline void __read_lock_irq(rwlock_t *lock) | ||
290 | { | ||
291 | local_irq_disable(); | ||
292 | preempt_disable(); | ||
293 | rwlock_acquire_read(&lock->dep_map, 0, 0, _RET_IP_); | ||
294 | LOCK_CONTENDED(lock, _raw_read_trylock, _raw_read_lock); | ||
295 | } | ||
296 | |||
297 | static inline void __read_lock_bh(rwlock_t *lock) | ||
298 | { | ||
299 | local_bh_disable(); | ||
300 | preempt_disable(); | ||
301 | rwlock_acquire_read(&lock->dep_map, 0, 0, _RET_IP_); | ||
302 | LOCK_CONTENDED(lock, _raw_read_trylock, _raw_read_lock); | ||
303 | } | ||
304 | |||
305 | static inline unsigned long __write_lock_irqsave(rwlock_t *lock) | ||
306 | { | ||
307 | unsigned long flags; | ||
308 | |||
309 | local_irq_save(flags); | ||
310 | preempt_disable(); | ||
311 | rwlock_acquire(&lock->dep_map, 0, 0, _RET_IP_); | ||
312 | LOCK_CONTENDED_FLAGS(lock, _raw_write_trylock, _raw_write_lock, | ||
313 | _raw_write_lock_flags, &flags); | ||
314 | return flags; | ||
315 | } | ||
316 | |||
317 | static inline void __write_lock_irq(rwlock_t *lock) | ||
318 | { | ||
319 | local_irq_disable(); | ||
320 | preempt_disable(); | ||
321 | rwlock_acquire(&lock->dep_map, 0, 0, _RET_IP_); | ||
322 | LOCK_CONTENDED(lock, _raw_write_trylock, _raw_write_lock); | ||
323 | } | ||
324 | |||
325 | static inline void __write_lock_bh(rwlock_t *lock) | ||
326 | { | ||
327 | local_bh_disable(); | ||
328 | preempt_disable(); | ||
329 | rwlock_acquire(&lock->dep_map, 0, 0, _RET_IP_); | ||
330 | LOCK_CONTENDED(lock, _raw_write_trylock, _raw_write_lock); | ||
331 | } | ||
332 | |||
333 | static inline void __spin_lock(spinlock_t *lock) | ||
334 | { | ||
335 | preempt_disable(); | ||
336 | spin_acquire(&lock->dep_map, 0, 0, _RET_IP_); | ||
337 | LOCK_CONTENDED(lock, _raw_spin_trylock, _raw_spin_lock); | ||
338 | } | ||
339 | |||
340 | static inline void __write_lock(rwlock_t *lock) | ||
341 | { | ||
342 | preempt_disable(); | ||
343 | rwlock_acquire(&lock->dep_map, 0, 0, _RET_IP_); | ||
344 | LOCK_CONTENDED(lock, _raw_write_trylock, _raw_write_lock); | ||
345 | } | ||
346 | |||
347 | #endif /* CONFIG_PREEMPT */ | ||
348 | |||
349 | static inline void __spin_unlock(spinlock_t *lock) | ||
350 | { | ||
351 | spin_release(&lock->dep_map, 1, _RET_IP_); | ||
352 | _raw_spin_unlock(lock); | ||
353 | preempt_enable(); | ||
354 | } | ||
355 | |||
356 | static inline void __write_unlock(rwlock_t *lock) | ||
357 | { | ||
358 | rwlock_release(&lock->dep_map, 1, _RET_IP_); | ||
359 | _raw_write_unlock(lock); | ||
360 | preempt_enable(); | ||
361 | } | ||
362 | |||
363 | static inline void __read_unlock(rwlock_t *lock) | ||
364 | { | ||
365 | rwlock_release(&lock->dep_map, 1, _RET_IP_); | ||
366 | _raw_read_unlock(lock); | ||
367 | preempt_enable(); | ||
368 | } | ||
369 | |||
370 | static inline void __spin_unlock_irqrestore(spinlock_t *lock, | ||
371 | unsigned long flags) | ||
372 | { | ||
373 | spin_release(&lock->dep_map, 1, _RET_IP_); | ||
374 | _raw_spin_unlock(lock); | ||
375 | local_irq_restore(flags); | ||
376 | preempt_enable(); | ||
377 | } | ||
378 | |||
379 | static inline void __spin_unlock_irq(spinlock_t *lock) | ||
380 | { | ||
381 | spin_release(&lock->dep_map, 1, _RET_IP_); | ||
382 | _raw_spin_unlock(lock); | ||
383 | local_irq_enable(); | ||
384 | preempt_enable(); | ||
385 | } | ||
386 | |||
387 | static inline void __spin_unlock_bh(spinlock_t *lock) | ||
388 | { | ||
389 | spin_release(&lock->dep_map, 1, _RET_IP_); | ||
390 | _raw_spin_unlock(lock); | ||
391 | preempt_enable_no_resched(); | ||
392 | local_bh_enable_ip((unsigned long)__builtin_return_address(0)); | ||
393 | } | ||
394 | |||
395 | static inline void __read_unlock_irqrestore(rwlock_t *lock, unsigned long flags) | ||
396 | { | ||
397 | rwlock_release(&lock->dep_map, 1, _RET_IP_); | ||
398 | _raw_read_unlock(lock); | ||
399 | local_irq_restore(flags); | ||
400 | preempt_enable(); | ||
401 | } | ||
402 | |||
403 | static inline void __read_unlock_irq(rwlock_t *lock) | ||
404 | { | ||
405 | rwlock_release(&lock->dep_map, 1, _RET_IP_); | ||
406 | _raw_read_unlock(lock); | ||
407 | local_irq_enable(); | ||
408 | preempt_enable(); | ||
409 | } | ||
410 | |||
411 | static inline void __read_unlock_bh(rwlock_t *lock) | ||
412 | { | ||
413 | rwlock_release(&lock->dep_map, 1, _RET_IP_); | ||
414 | _raw_read_unlock(lock); | ||
415 | preempt_enable_no_resched(); | ||
416 | local_bh_enable_ip((unsigned long)__builtin_return_address(0)); | ||
417 | } | ||
418 | |||
419 | static inline void __write_unlock_irqrestore(rwlock_t *lock, | ||
420 | unsigned long flags) | ||
421 | { | ||
422 | rwlock_release(&lock->dep_map, 1, _RET_IP_); | ||
423 | _raw_write_unlock(lock); | ||
424 | local_irq_restore(flags); | ||
425 | preempt_enable(); | ||
426 | } | ||
427 | |||
428 | static inline void __write_unlock_irq(rwlock_t *lock) | ||
429 | { | ||
430 | rwlock_release(&lock->dep_map, 1, _RET_IP_); | ||
431 | _raw_write_unlock(lock); | ||
432 | local_irq_enable(); | ||
433 | preempt_enable(); | ||
434 | } | ||
435 | |||
436 | static inline void __write_unlock_bh(rwlock_t *lock) | ||
437 | { | ||
438 | rwlock_release(&lock->dep_map, 1, _RET_IP_); | ||
439 | _raw_write_unlock(lock); | ||
440 | preempt_enable_no_resched(); | ||
441 | local_bh_enable_ip((unsigned long)__builtin_return_address(0)); | ||
442 | } | ||
443 | |||
444 | static inline int __spin_trylock_bh(spinlock_t *lock) | ||
445 | { | ||
446 | local_bh_disable(); | ||
447 | preempt_disable(); | ||
448 | if (_raw_spin_trylock(lock)) { | ||
449 | spin_acquire(&lock->dep_map, 0, 1, _RET_IP_); | ||
450 | return 1; | ||
451 | } | ||
452 | preempt_enable_no_resched(); | ||
453 | local_bh_enable_ip((unsigned long)__builtin_return_address(0)); | ||
454 | return 0; | ||
455 | } | ||
456 | |||
63 | #endif /* __LINUX_SPINLOCK_API_SMP_H */ | 457 | #endif /* __LINUX_SPINLOCK_API_SMP_H */ |
diff --git a/include/linux/ssb/ssb.h b/include/linux/ssb/ssb.h index 5ae8fa22d331..3d0a9ff24f01 100644 --- a/include/linux/ssb/ssb.h +++ b/include/linux/ssb/ssb.h | |||
@@ -27,24 +27,54 @@ struct ssb_sprom { | |||
27 | u8 et1mdcport; /* MDIO for enet1 */ | 27 | u8 et1mdcport; /* MDIO for enet1 */ |
28 | u8 board_rev; /* Board revision number from SPROM. */ | 28 | u8 board_rev; /* Board revision number from SPROM. */ |
29 | u8 country_code; /* Country Code */ | 29 | u8 country_code; /* Country Code */ |
30 | u8 ant_available_a; /* A-PHY antenna available bits (up to 4) */ | 30 | u8 ant_available_a; /* 2GHz antenna available bits (up to 4) */ |
31 | u8 ant_available_bg; /* B/G-PHY antenna available bits (up to 4) */ | 31 | u8 ant_available_bg; /* 5GHz antenna available bits (up to 4) */ |
32 | u16 pa0b0; | 32 | u16 pa0b0; |
33 | u16 pa0b1; | 33 | u16 pa0b1; |
34 | u16 pa0b2; | 34 | u16 pa0b2; |
35 | u16 pa1b0; | 35 | u16 pa1b0; |
36 | u16 pa1b1; | 36 | u16 pa1b1; |
37 | u16 pa1b2; | 37 | u16 pa1b2; |
38 | u16 pa1lob0; | ||
39 | u16 pa1lob1; | ||
40 | u16 pa1lob2; | ||
41 | u16 pa1hib0; | ||
42 | u16 pa1hib1; | ||
43 | u16 pa1hib2; | ||
38 | u8 gpio0; /* GPIO pin 0 */ | 44 | u8 gpio0; /* GPIO pin 0 */ |
39 | u8 gpio1; /* GPIO pin 1 */ | 45 | u8 gpio1; /* GPIO pin 1 */ |
40 | u8 gpio2; /* GPIO pin 2 */ | 46 | u8 gpio2; /* GPIO pin 2 */ |
41 | u8 gpio3; /* GPIO pin 3 */ | 47 | u8 gpio3; /* GPIO pin 3 */ |
42 | u16 maxpwr_a; /* A-PHY Amplifier Max Power (in dBm Q5.2) */ | 48 | u16 maxpwr_bg; /* 2.4GHz Amplifier Max Power (in dBm Q5.2) */ |
43 | u16 maxpwr_bg; /* B/G-PHY Amplifier Max Power (in dBm Q5.2) */ | 49 | u16 maxpwr_al; /* 5.2GHz Amplifier Max Power (in dBm Q5.2) */ |
50 | u16 maxpwr_a; /* 5.3GHz Amplifier Max Power (in dBm Q5.2) */ | ||
51 | u16 maxpwr_ah; /* 5.8GHz Amplifier Max Power (in dBm Q5.2) */ | ||
44 | u8 itssi_a; /* Idle TSSI Target for A-PHY */ | 52 | u8 itssi_a; /* Idle TSSI Target for A-PHY */ |
45 | u8 itssi_bg; /* Idle TSSI Target for B/G-PHY */ | 53 | u8 itssi_bg; /* Idle TSSI Target for B/G-PHY */ |
46 | u16 boardflags_lo; /* Boardflags (low 16 bits) */ | 54 | u8 tri2g; /* 2.4GHz TX isolation */ |
47 | u16 boardflags_hi; /* Boardflags (high 16 bits) */ | 55 | u8 tri5gl; /* 5.2GHz TX isolation */ |
56 | u8 tri5g; /* 5.3GHz TX isolation */ | ||
57 | u8 tri5gh; /* 5.8GHz TX isolation */ | ||
58 | u8 rxpo2g; /* 2GHz RX power offset */ | ||
59 | u8 rxpo5g; /* 5GHz RX power offset */ | ||
60 | u8 rssisav2g; /* 2GHz RSSI params */ | ||
61 | u8 rssismc2g; | ||
62 | u8 rssismf2g; | ||
63 | u8 bxa2g; /* 2GHz BX arch */ | ||
64 | u8 rssisav5g; /* 5GHz RSSI params */ | ||
65 | u8 rssismc5g; | ||
66 | u8 rssismf5g; | ||
67 | u8 bxa5g; /* 5GHz BX arch */ | ||
68 | u16 cck2gpo; /* CCK power offset */ | ||
69 | u32 ofdm2gpo; /* 2.4GHz OFDM power offset */ | ||
70 | u32 ofdm5glpo; /* 5.2GHz OFDM power offset */ | ||
71 | u32 ofdm5gpo; /* 5.3GHz OFDM power offset */ | ||
72 | u32 ofdm5ghpo; /* 5.8GHz OFDM power offset */ | ||
73 | u16 boardflags_lo; /* Board flags (bits 0-15) */ | ||
74 | u16 boardflags_hi; /* Board flags (bits 16-31) */ | ||
75 | u16 boardflags2_lo; /* Board flags (bits 32-47) */ | ||
76 | u16 boardflags2_hi; /* Board flags (bits 48-63) */ | ||
77 | /* TODO store board flags in a single u64 */ | ||
48 | 78 | ||
49 | /* Antenna gain values for up to 4 antennas | 79 | /* Antenna gain values for up to 4 antennas |
50 | * on each band. Values in dBm/4 (Q5.2). Negative gain means the | 80 | * on each band. Values in dBm/4 (Q5.2). Negative gain means the |
@@ -58,7 +88,7 @@ struct ssb_sprom { | |||
58 | } ghz5; /* 5GHz band */ | 88 | } ghz5; /* 5GHz band */ |
59 | } antenna_gain; | 89 | } antenna_gain; |
60 | 90 | ||
61 | /* TODO - add any parameters needed from rev 2, 3, or 4 SPROMs */ | 91 | /* TODO - add any parameters needed from rev 2, 3, 4, 5 or 8 SPROMs */ |
62 | }; | 92 | }; |
63 | 93 | ||
64 | /* Information about the PCB the circuitry is soldered on. */ | 94 | /* Information about the PCB the circuitry is soldered on. */ |
@@ -208,6 +238,7 @@ enum ssb_bustype { | |||
208 | SSB_BUSTYPE_SSB, /* This SSB bus is the system bus */ | 238 | SSB_BUSTYPE_SSB, /* This SSB bus is the system bus */ |
209 | SSB_BUSTYPE_PCI, /* SSB is connected to PCI bus */ | 239 | SSB_BUSTYPE_PCI, /* SSB is connected to PCI bus */ |
210 | SSB_BUSTYPE_PCMCIA, /* SSB is connected to PCMCIA bus */ | 240 | SSB_BUSTYPE_PCMCIA, /* SSB is connected to PCMCIA bus */ |
241 | SSB_BUSTYPE_SDIO, /* SSB is connected to SDIO bus */ | ||
211 | }; | 242 | }; |
212 | 243 | ||
213 | /* board_vendor */ | 244 | /* board_vendor */ |
@@ -240,8 +271,12 @@ struct ssb_bus { | |||
240 | 271 | ||
241 | /* The core in the basic address register window. (PCI bus only) */ | 272 | /* The core in the basic address register window. (PCI bus only) */ |
242 | struct ssb_device *mapped_device; | 273 | struct ssb_device *mapped_device; |
243 | /* Currently mapped PCMCIA segment. (bustype == SSB_BUSTYPE_PCMCIA only) */ | 274 | union { |
244 | u8 mapped_pcmcia_seg; | 275 | /* Currently mapped PCMCIA segment. (bustype == SSB_BUSTYPE_PCMCIA only) */ |
276 | u8 mapped_pcmcia_seg; | ||
277 | /* Current SSB base address window for SDIO. */ | ||
278 | u32 sdio_sbaddr; | ||
279 | }; | ||
245 | /* Lock for core and segment switching. | 280 | /* Lock for core and segment switching. |
246 | * On PCMCIA-host busses this is used to protect the whole MMIO access. */ | 281 | * On PCMCIA-host busses this is used to protect the whole MMIO access. */ |
247 | spinlock_t bar_lock; | 282 | spinlock_t bar_lock; |
@@ -252,6 +287,11 @@ struct ssb_bus { | |||
252 | struct pci_dev *host_pci; | 287 | struct pci_dev *host_pci; |
253 | /* Pointer to the PCMCIA device (only if bustype == SSB_BUSTYPE_PCMCIA). */ | 288 | /* Pointer to the PCMCIA device (only if bustype == SSB_BUSTYPE_PCMCIA). */ |
254 | struct pcmcia_device *host_pcmcia; | 289 | struct pcmcia_device *host_pcmcia; |
290 | /* Pointer to the SDIO device (only if bustype == SSB_BUSTYPE_SDIO). */ | ||
291 | struct sdio_func *host_sdio; | ||
292 | |||
293 | /* See enum ssb_quirks */ | ||
294 | unsigned int quirks; | ||
255 | 295 | ||
256 | #ifdef CONFIG_SSB_SPROM | 296 | #ifdef CONFIG_SSB_SPROM |
257 | /* Mutex to protect the SPROM writing. */ | 297 | /* Mutex to protect the SPROM writing. */ |
@@ -306,6 +346,11 @@ struct ssb_bus { | |||
306 | #endif /* DEBUG */ | 346 | #endif /* DEBUG */ |
307 | }; | 347 | }; |
308 | 348 | ||
349 | enum ssb_quirks { | ||
350 | /* SDIO connected card requires performing a read after writing a 32-bit value */ | ||
351 | SSB_QUIRK_SDIO_READ_AFTER_WRITE32 = (1 << 0), | ||
352 | }; | ||
353 | |||
309 | /* The initialization-invariants. */ | 354 | /* The initialization-invariants. */ |
310 | struct ssb_init_invariants { | 355 | struct ssb_init_invariants { |
311 | /* Versioning information about the PCB. */ | 356 | /* Versioning information about the PCB. */ |
@@ -336,6 +381,12 @@ extern int ssb_bus_pcmciabus_register(struct ssb_bus *bus, | |||
336 | struct pcmcia_device *pcmcia_dev, | 381 | struct pcmcia_device *pcmcia_dev, |
337 | unsigned long baseaddr); | 382 | unsigned long baseaddr); |
338 | #endif /* CONFIG_SSB_PCMCIAHOST */ | 383 | #endif /* CONFIG_SSB_PCMCIAHOST */ |
384 | #ifdef CONFIG_SSB_SDIOHOST | ||
385 | extern int ssb_bus_sdiobus_register(struct ssb_bus *bus, | ||
386 | struct sdio_func *sdio_func, | ||
387 | unsigned int quirks); | ||
388 | #endif /* CONFIG_SSB_SDIOHOST */ | ||
389 | |||
339 | 390 | ||
340 | extern void ssb_bus_unregister(struct ssb_bus *bus); | 391 | extern void ssb_bus_unregister(struct ssb_bus *bus); |
341 | 392 | ||
diff --git a/include/linux/ssb/ssb_driver_chipcommon.h b/include/linux/ssb/ssb_driver_chipcommon.h index d3b1d18922f2..4e27acf0a92f 100644 --- a/include/linux/ssb/ssb_driver_chipcommon.h +++ b/include/linux/ssb/ssb_driver_chipcommon.h | |||
@@ -629,5 +629,15 @@ extern int ssb_chipco_serial_init(struct ssb_chipcommon *cc, | |||
629 | /* PMU support */ | 629 | /* PMU support */ |
630 | extern void ssb_pmu_init(struct ssb_chipcommon *cc); | 630 | extern void ssb_pmu_init(struct ssb_chipcommon *cc); |
631 | 631 | ||
632 | enum ssb_pmu_ldo_volt_id { | ||
633 | LDO_PAREF = 0, | ||
634 | LDO_VOLT1, | ||
635 | LDO_VOLT2, | ||
636 | LDO_VOLT3, | ||
637 | }; | ||
638 | |||
639 | void ssb_pmu_set_ldo_voltage(struct ssb_chipcommon *cc, | ||
640 | enum ssb_pmu_ldo_volt_id id, u32 voltage); | ||
641 | void ssb_pmu_set_ldo_paref(struct ssb_chipcommon *cc, bool on); | ||
632 | 642 | ||
633 | #endif /* LINUX_SSB_CHIPCO_H_ */ | 643 | #endif /* LINUX_SSB_CHIPCO_H_ */ |
diff --git a/include/linux/ssb/ssb_regs.h b/include/linux/ssb/ssb_regs.h index a01b982b5783..9ae9082eaeb4 100644 --- a/include/linux/ssb/ssb_regs.h +++ b/include/linux/ssb/ssb_regs.h | |||
@@ -162,7 +162,7 @@ | |||
162 | 162 | ||
163 | /* SPROM shadow area. If not otherwise noted, fields are | 163 | /* SPROM shadow area. If not otherwise noted, fields are |
164 | * two bytes wide. Note that the SPROM can _only_ be read | 164 | * two bytes wide. Note that the SPROM can _only_ be read |
165 | * in two-byte quantinies. | 165 | * in two-byte quantities. |
166 | */ | 166 | */ |
167 | #define SSB_SPROMSIZE_WORDS 64 | 167 | #define SSB_SPROMSIZE_WORDS 64 |
168 | #define SSB_SPROMSIZE_BYTES (SSB_SPROMSIZE_WORDS * sizeof(u16)) | 168 | #define SSB_SPROMSIZE_BYTES (SSB_SPROMSIZE_WORDS * sizeof(u16)) |
@@ -327,8 +327,11 @@ | |||
327 | #define SSB_SPROM5_GPIOB_P3_SHIFT 8 | 327 | #define SSB_SPROM5_GPIOB_P3_SHIFT 8 |
328 | 328 | ||
329 | /* SPROM Revision 8 */ | 329 | /* SPROM Revision 8 */ |
330 | #define SSB_SPROM8_BFLLO 0x1084 /* Boardflags (low 16 bits) */ | 330 | #define SSB_SPROM8_BOARDREV 0x1082 /* Board revision */ |
331 | #define SSB_SPROM8_BFLHI 0x1086 /* Boardflags Hi */ | 331 | #define SSB_SPROM8_BFLLO 0x1084 /* Board flags (bits 0-15) */ |
332 | #define SSB_SPROM8_BFLHI 0x1086 /* Board flags (bits 16-31) */ | ||
333 | #define SSB_SPROM8_BFL2LO 0x1088 /* Board flags (bits 32-47) */ | ||
334 | #define SSB_SPROM8_BFL2HI 0x108A /* Board flags (bits 48-63) */ | ||
332 | #define SSB_SPROM8_IL0MAC 0x108C /* 6 byte MAC address */ | 335 | #define SSB_SPROM8_IL0MAC 0x108C /* 6 byte MAC address */ |
333 | #define SSB_SPROM8_CCODE 0x1092 /* 2 byte country code */ | 336 | #define SSB_SPROM8_CCODE 0x1092 /* 2 byte country code */ |
334 | #define SSB_SPROM8_ANTAVAIL 0x109C /* Antenna available bitfields*/ | 337 | #define SSB_SPROM8_ANTAVAIL 0x109C /* Antenna available bitfields*/ |
@@ -354,14 +357,63 @@ | |||
354 | #define SSB_SPROM8_GPIOB_P2 0x00FF /* Pin 2 */ | 357 | #define SSB_SPROM8_GPIOB_P2 0x00FF /* Pin 2 */ |
355 | #define SSB_SPROM8_GPIOB_P3 0xFF00 /* Pin 3 */ | 358 | #define SSB_SPROM8_GPIOB_P3 0xFF00 /* Pin 3 */ |
356 | #define SSB_SPROM8_GPIOB_P3_SHIFT 8 | 359 | #define SSB_SPROM8_GPIOB_P3_SHIFT 8 |
357 | #define SSB_SPROM8_MAXP_BG 0x10C0 /* Max Power BG in path 1 */ | 360 | #define SSB_SPROM8_RSSIPARM2G 0x10A4 /* RSSI params for 2GHz */ |
358 | #define SSB_SPROM8_MAXP_BG_MASK 0x00FF /* Mask for Max Power BG */ | 361 | #define SSB_SPROM8_RSSISMF2G 0x000F |
362 | #define SSB_SPROM8_RSSISMC2G 0x00F0 | ||
363 | #define SSB_SPROM8_RSSISMC2G_SHIFT 4 | ||
364 | #define SSB_SPROM8_RSSISAV2G 0x0700 | ||
365 | #define SSB_SPROM8_RSSISAV2G_SHIFT 8 | ||
366 | #define SSB_SPROM8_BXA2G 0x1800 | ||
367 | #define SSB_SPROM8_BXA2G_SHIFT 11 | ||
368 | #define SSB_SPROM8_RSSIPARM5G 0x10A6 /* RSSI params for 5GHz */ | ||
369 | #define SSB_SPROM8_RSSISMF5G 0x000F | ||
370 | #define SSB_SPROM8_RSSISMC5G 0x00F0 | ||
371 | #define SSB_SPROM8_RSSISMC5G_SHIFT 4 | ||
372 | #define SSB_SPROM8_RSSISAV5G 0x0700 | ||
373 | #define SSB_SPROM8_RSSISAV5G_SHIFT 8 | ||
374 | #define SSB_SPROM8_BXA5G 0x1800 | ||
375 | #define SSB_SPROM8_BXA5G_SHIFT 11 | ||
376 | #define SSB_SPROM8_TRI25G 0x10A8 /* TX isolation 2.4&5.3GHz */ | ||
377 | #define SSB_SPROM8_TRI2G 0x00FF /* TX isolation 2.4GHz */ | ||
378 | #define SSB_SPROM8_TRI5G 0xFF00 /* TX isolation 5.3GHz */ | ||
379 | #define SSB_SPROM8_TRI5G_SHIFT 8 | ||
380 | #define SSB_SPROM8_TRI5GHL 0x10AA /* TX isolation 5.2/5.8GHz */ | ||
381 | #define SSB_SPROM8_TRI5GL 0x00FF /* TX isolation 5.2GHz */ | ||
382 | #define SSB_SPROM8_TRI5GH 0xFF00 /* TX isolation 5.8GHz */ | ||
383 | #define SSB_SPROM8_TRI5GH_SHIFT 8 | ||
384 | #define SSB_SPROM8_RXPO 0x10AC /* RX power offsets */ | ||
385 | #define SSB_SPROM8_RXPO2G 0x00FF /* 2GHz RX power offset */ | ||
386 | #define SSB_SPROM8_RXPO5G 0xFF00 /* 5GHz RX power offset */ | ||
387 | #define SSB_SPROM8_RXPO5G_SHIFT 8 | ||
388 | #define SSB_SPROM8_MAXP_BG 0x10C0 /* Max Power 2GHz in path 1 */ | ||
389 | #define SSB_SPROM8_MAXP_BG_MASK 0x00FF /* Mask for Max Power 2GHz */ | ||
359 | #define SSB_SPROM8_ITSSI_BG 0xFF00 /* Mask for path 1 itssi_bg */ | 390 | #define SSB_SPROM8_ITSSI_BG 0xFF00 /* Mask for path 1 itssi_bg */ |
360 | #define SSB_SPROM8_ITSSI_BG_SHIFT 8 | 391 | #define SSB_SPROM8_ITSSI_BG_SHIFT 8 |
361 | #define SSB_SPROM8_MAXP_A 0x10C8 /* Max Power A in path 1 */ | 392 | #define SSB_SPROM8_PA0B0 0x10C2 /* 2GHz power amp settings */ |
362 | #define SSB_SPROM8_MAXP_A_MASK 0x00FF /* Mask for Max Power A */ | 393 | #define SSB_SPROM8_PA0B1 0x10C4 |
394 | #define SSB_SPROM8_PA0B2 0x10C6 | ||
395 | #define SSB_SPROM8_MAXP_A 0x10C8 /* Max Power 5.3GHz */ | ||
396 | #define SSB_SPROM8_MAXP_A_MASK 0x00FF /* Mask for Max Power 5.3GHz */ | ||
363 | #define SSB_SPROM8_ITSSI_A 0xFF00 /* Mask for path 1 itssi_a */ | 397 | #define SSB_SPROM8_ITSSI_A 0xFF00 /* Mask for path 1 itssi_a */ |
364 | #define SSB_SPROM8_ITSSI_A_SHIFT 8 | 398 | #define SSB_SPROM8_ITSSI_A_SHIFT 8 |
399 | #define SSB_SPROM8_MAXP_AHL 0x10CA /* Max Power 5.2/5.8GHz */ | ||
400 | #define SSB_SPROM8_MAXP_AH_MASK 0x00FF /* Mask for Max Power 5.8GHz */ | ||
401 | #define SSB_SPROM8_MAXP_AL_MASK 0xFF00 /* Mask for Max Power 5.2GHz */ | ||
402 | #define SSB_SPROM8_MAXP_AL_SHIFT 8 | ||
403 | #define SSB_SPROM8_PA1B0 0x10CC /* 5.3GHz power amp settings */ | ||
404 | #define SSB_SPROM8_PA1B1 0x10CE | ||
405 | #define SSB_SPROM8_PA1B2 0x10D0 | ||
406 | #define SSB_SPROM8_PA1LOB0 0x10D2 /* 5.2GHz power amp settings */ | ||
407 | #define SSB_SPROM8_PA1LOB1 0x10D4 | ||
408 | #define SSB_SPROM8_PA1LOB2 0x10D6 | ||
409 | #define SSB_SPROM8_PA1HIB0 0x10D8 /* 5.8GHz power amp settings */ | ||
410 | #define SSB_SPROM8_PA1HIB1 0x10DA | ||
411 | #define SSB_SPROM8_PA1HIB2 0x10DC | ||
412 | #define SSB_SPROM8_CCK2GPO 0x1140 /* CCK power offset */ | ||
413 | #define SSB_SPROM8_OFDM2GPO 0x1142 /* 2.4GHz OFDM power offset */ | ||
414 | #define SSB_SPROM8_OFDM5GPO 0x1146 /* 5.3GHz OFDM power offset */ | ||
415 | #define SSB_SPROM8_OFDM5GLPO 0x114A /* 5.2GHz OFDM power offset */ | ||
416 | #define SSB_SPROM8_OFDM5GHPO 0x114E /* 5.8GHz OFDM power offset */ | ||
365 | 417 | ||
366 | /* Values for SSB_SPROM1_BINF_CCODE */ | 418 | /* Values for SSB_SPROM1_BINF_CCODE */ |
367 | enum { | 419 | enum { |
diff --git a/include/linux/sunrpc/auth.h b/include/linux/sunrpc/auth.h index 3f632182d8eb..996df4dac7d4 100644 --- a/include/linux/sunrpc/auth.h +++ b/include/linux/sunrpc/auth.h | |||
@@ -111,7 +111,7 @@ struct rpc_credops { | |||
111 | void (*crdestroy)(struct rpc_cred *); | 111 | void (*crdestroy)(struct rpc_cred *); |
112 | 112 | ||
113 | int (*crmatch)(struct auth_cred *, struct rpc_cred *, int); | 113 | int (*crmatch)(struct auth_cred *, struct rpc_cred *, int); |
114 | void (*crbind)(struct rpc_task *, struct rpc_cred *); | 114 | void (*crbind)(struct rpc_task *, struct rpc_cred *, int); |
115 | __be32 * (*crmarshal)(struct rpc_task *, __be32 *); | 115 | __be32 * (*crmarshal)(struct rpc_task *, __be32 *); |
116 | int (*crrefresh)(struct rpc_task *); | 116 | int (*crrefresh)(struct rpc_task *); |
117 | __be32 * (*crvalidate)(struct rpc_task *, __be32 *); | 117 | __be32 * (*crvalidate)(struct rpc_task *, __be32 *); |
@@ -140,7 +140,7 @@ struct rpc_cred * rpcauth_lookup_credcache(struct rpc_auth *, struct auth_cred * | |||
140 | void rpcauth_init_cred(struct rpc_cred *, const struct auth_cred *, struct rpc_auth *, const struct rpc_credops *); | 140 | void rpcauth_init_cred(struct rpc_cred *, const struct auth_cred *, struct rpc_auth *, const struct rpc_credops *); |
141 | struct rpc_cred * rpcauth_lookupcred(struct rpc_auth *, int); | 141 | struct rpc_cred * rpcauth_lookupcred(struct rpc_auth *, int); |
142 | void rpcauth_bindcred(struct rpc_task *, struct rpc_cred *, int); | 142 | void rpcauth_bindcred(struct rpc_task *, struct rpc_cred *, int); |
143 | void rpcauth_generic_bind_cred(struct rpc_task *, struct rpc_cred *); | 143 | void rpcauth_generic_bind_cred(struct rpc_task *, struct rpc_cred *, int); |
144 | void put_rpccred(struct rpc_cred *); | 144 | void put_rpccred(struct rpc_cred *); |
145 | void rpcauth_unbindcred(struct rpc_task *); | 145 | void rpcauth_unbindcred(struct rpc_task *); |
146 | __be32 * rpcauth_marshcred(struct rpc_task *, __be32 *); | 146 | __be32 * rpcauth_marshcred(struct rpc_task *, __be32 *); |
diff --git a/include/linux/sunrpc/cache.h b/include/linux/sunrpc/cache.h index 2d8b211b9324..6f52b4d7c447 100644 --- a/include/linux/sunrpc/cache.h +++ b/include/linux/sunrpc/cache.h | |||
@@ -59,6 +59,15 @@ struct cache_head { | |||
59 | 59 | ||
60 | #define CACHE_NEW_EXPIRY 120 /* keep new things pending confirmation for 120 seconds */ | 60 | #define CACHE_NEW_EXPIRY 120 /* keep new things pending confirmation for 120 seconds */ |
61 | 61 | ||
62 | struct cache_detail_procfs { | ||
63 | struct proc_dir_entry *proc_ent; | ||
64 | struct proc_dir_entry *flush_ent, *channel_ent, *content_ent; | ||
65 | }; | ||
66 | |||
67 | struct cache_detail_pipefs { | ||
68 | struct dentry *dir; | ||
69 | }; | ||
70 | |||
62 | struct cache_detail { | 71 | struct cache_detail { |
63 | struct module * owner; | 72 | struct module * owner; |
64 | int hash_size; | 73 | int hash_size; |
@@ -70,15 +79,17 @@ struct cache_detail { | |||
70 | char *name; | 79 | char *name; |
71 | void (*cache_put)(struct kref *); | 80 | void (*cache_put)(struct kref *); |
72 | 81 | ||
73 | void (*cache_request)(struct cache_detail *cd, | 82 | int (*cache_upcall)(struct cache_detail *, |
74 | struct cache_head *h, | 83 | struct cache_head *); |
75 | char **bpp, int *blen); | 84 | |
76 | int (*cache_parse)(struct cache_detail *, | 85 | int (*cache_parse)(struct cache_detail *, |
77 | char *buf, int len); | 86 | char *buf, int len); |
78 | 87 | ||
79 | int (*cache_show)(struct seq_file *m, | 88 | int (*cache_show)(struct seq_file *m, |
80 | struct cache_detail *cd, | 89 | struct cache_detail *cd, |
81 | struct cache_head *h); | 90 | struct cache_head *h); |
91 | void (*warn_no_listener)(struct cache_detail *cd, | ||
92 | int has_died); | ||
82 | 93 | ||
83 | struct cache_head * (*alloc)(void); | 94 | struct cache_head * (*alloc)(void); |
84 | int (*match)(struct cache_head *orig, struct cache_head *new); | 95 | int (*match)(struct cache_head *orig, struct cache_head *new); |
@@ -96,13 +107,15 @@ struct cache_detail { | |||
96 | 107 | ||
97 | /* fields for communication over channel */ | 108 | /* fields for communication over channel */ |
98 | struct list_head queue; | 109 | struct list_head queue; |
99 | struct proc_dir_entry *proc_ent; | ||
100 | struct proc_dir_entry *flush_ent, *channel_ent, *content_ent; | ||
101 | 110 | ||
102 | atomic_t readers; /* how many time is /chennel open */ | 111 | atomic_t readers; /* how many time is /chennel open */ |
103 | time_t last_close; /* if no readers, when did last close */ | 112 | time_t last_close; /* if no readers, when did last close */ |
104 | time_t last_warn; /* when we last warned about no readers */ | 113 | time_t last_warn; /* when we last warned about no readers */ |
105 | void (*warn_no_listener)(struct cache_detail *cd); | 114 | |
115 | union { | ||
116 | struct cache_detail_procfs procfs; | ||
117 | struct cache_detail_pipefs pipefs; | ||
118 | } u; | ||
106 | }; | 119 | }; |
107 | 120 | ||
108 | 121 | ||
@@ -127,6 +140,10 @@ struct cache_deferred_req { | |||
127 | }; | 140 | }; |
128 | 141 | ||
129 | 142 | ||
143 | extern const struct file_operations cache_file_operations_pipefs; | ||
144 | extern const struct file_operations content_file_operations_pipefs; | ||
145 | extern const struct file_operations cache_flush_operations_pipefs; | ||
146 | |||
130 | extern struct cache_head * | 147 | extern struct cache_head * |
131 | sunrpc_cache_lookup(struct cache_detail *detail, | 148 | sunrpc_cache_lookup(struct cache_detail *detail, |
132 | struct cache_head *key, int hash); | 149 | struct cache_head *key, int hash); |
@@ -134,6 +151,13 @@ extern struct cache_head * | |||
134 | sunrpc_cache_update(struct cache_detail *detail, | 151 | sunrpc_cache_update(struct cache_detail *detail, |
135 | struct cache_head *new, struct cache_head *old, int hash); | 152 | struct cache_head *new, struct cache_head *old, int hash); |
136 | 153 | ||
154 | extern int | ||
155 | sunrpc_cache_pipe_upcall(struct cache_detail *detail, struct cache_head *h, | ||
156 | void (*cache_request)(struct cache_detail *, | ||
157 | struct cache_head *, | ||
158 | char **, | ||
159 | int *)); | ||
160 | |||
137 | 161 | ||
138 | extern void cache_clean_deferred(void *owner); | 162 | extern void cache_clean_deferred(void *owner); |
139 | 163 | ||
@@ -171,6 +195,10 @@ extern void cache_purge(struct cache_detail *detail); | |||
171 | extern int cache_register(struct cache_detail *cd); | 195 | extern int cache_register(struct cache_detail *cd); |
172 | extern void cache_unregister(struct cache_detail *cd); | 196 | extern void cache_unregister(struct cache_detail *cd); |
173 | 197 | ||
198 | extern int sunrpc_cache_register_pipefs(struct dentry *parent, const char *, | ||
199 | mode_t, struct cache_detail *); | ||
200 | extern void sunrpc_cache_unregister_pipefs(struct cache_detail *); | ||
201 | |||
174 | extern void qword_add(char **bpp, int *lp, char *str); | 202 | extern void qword_add(char **bpp, int *lp, char *str); |
175 | extern void qword_addhex(char **bpp, int *lp, char *buf, int blen); | 203 | extern void qword_addhex(char **bpp, int *lp, char *buf, int blen); |
176 | extern int qword_get(char **bpp, char *dest, int bufsize); | 204 | extern int qword_get(char **bpp, char *dest, int bufsize); |
diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h index 37881f1a0bd7..8ed9642a5a76 100644 --- a/include/linux/sunrpc/clnt.h +++ b/include/linux/sunrpc/clnt.h | |||
@@ -9,6 +9,10 @@ | |||
9 | #ifndef _LINUX_SUNRPC_CLNT_H | 9 | #ifndef _LINUX_SUNRPC_CLNT_H |
10 | #define _LINUX_SUNRPC_CLNT_H | 10 | #define _LINUX_SUNRPC_CLNT_H |
11 | 11 | ||
12 | #include <linux/socket.h> | ||
13 | #include <linux/in.h> | ||
14 | #include <linux/in6.h> | ||
15 | |||
12 | #include <linux/sunrpc/msg_prot.h> | 16 | #include <linux/sunrpc/msg_prot.h> |
13 | #include <linux/sunrpc/sched.h> | 17 | #include <linux/sunrpc/sched.h> |
14 | #include <linux/sunrpc/xprt.h> | 18 | #include <linux/sunrpc/xprt.h> |
@@ -17,6 +21,8 @@ | |||
17 | #include <linux/sunrpc/xdr.h> | 21 | #include <linux/sunrpc/xdr.h> |
18 | #include <linux/sunrpc/timer.h> | 22 | #include <linux/sunrpc/timer.h> |
19 | #include <asm/signal.h> | 23 | #include <asm/signal.h> |
24 | #include <linux/path.h> | ||
25 | #include <net/ipv6.h> | ||
20 | 26 | ||
21 | struct rpc_inode; | 27 | struct rpc_inode; |
22 | 28 | ||
@@ -50,9 +56,7 @@ struct rpc_clnt { | |||
50 | 56 | ||
51 | int cl_nodelen; /* nodename length */ | 57 | int cl_nodelen; /* nodename length */ |
52 | char cl_nodename[UNX_MAXNODENAME]; | 58 | char cl_nodename[UNX_MAXNODENAME]; |
53 | char cl_pathname[30];/* Path in rpc_pipe_fs */ | 59 | struct path cl_path; |
54 | struct vfsmount * cl_vfsmnt; | ||
55 | struct dentry * cl_dentry; /* inode */ | ||
56 | struct rpc_clnt * cl_parent; /* Points to parent of clones */ | 60 | struct rpc_clnt * cl_parent; /* Points to parent of clones */ |
57 | struct rpc_rtt cl_rtt_default; | 61 | struct rpc_rtt cl_rtt_default; |
58 | struct rpc_timeout cl_timeout_default; | 62 | struct rpc_timeout cl_timeout_default; |
@@ -110,6 +114,7 @@ struct rpc_create_args { | |||
110 | rpc_authflavor_t authflavor; | 114 | rpc_authflavor_t authflavor; |
111 | unsigned long flags; | 115 | unsigned long flags; |
112 | char *client_name; | 116 | char *client_name; |
117 | struct svc_xprt *bc_xprt; /* NFSv4.1 backchannel */ | ||
113 | }; | 118 | }; |
114 | 119 | ||
115 | /* Values for "flags" field */ | 120 | /* Values for "flags" field */ |
@@ -151,5 +156,151 @@ void rpc_force_rebind(struct rpc_clnt *); | |||
151 | size_t rpc_peeraddr(struct rpc_clnt *, struct sockaddr *, size_t); | 156 | size_t rpc_peeraddr(struct rpc_clnt *, struct sockaddr *, size_t); |
152 | const char *rpc_peeraddr2str(struct rpc_clnt *, enum rpc_display_format_t); | 157 | const char *rpc_peeraddr2str(struct rpc_clnt *, enum rpc_display_format_t); |
153 | 158 | ||
159 | size_t rpc_ntop(const struct sockaddr *, char *, const size_t); | ||
160 | size_t rpc_pton(const char *, const size_t, | ||
161 | struct sockaddr *, const size_t); | ||
162 | char * rpc_sockaddr2uaddr(const struct sockaddr *); | ||
163 | size_t rpc_uaddr2sockaddr(const char *, const size_t, | ||
164 | struct sockaddr *, const size_t); | ||
165 | |||
166 | static inline unsigned short rpc_get_port(const struct sockaddr *sap) | ||
167 | { | ||
168 | switch (sap->sa_family) { | ||
169 | case AF_INET: | ||
170 | return ntohs(((struct sockaddr_in *)sap)->sin_port); | ||
171 | case AF_INET6: | ||
172 | return ntohs(((struct sockaddr_in6 *)sap)->sin6_port); | ||
173 | } | ||
174 | return 0; | ||
175 | } | ||
176 | |||
177 | static inline void rpc_set_port(struct sockaddr *sap, | ||
178 | const unsigned short port) | ||
179 | { | ||
180 | switch (sap->sa_family) { | ||
181 | case AF_INET: | ||
182 | ((struct sockaddr_in *)sap)->sin_port = htons(port); | ||
183 | break; | ||
184 | case AF_INET6: | ||
185 | ((struct sockaddr_in6 *)sap)->sin6_port = htons(port); | ||
186 | break; | ||
187 | } | ||
188 | } | ||
189 | |||
190 | #define IPV6_SCOPE_DELIMITER '%' | ||
191 | #define IPV6_SCOPE_ID_LEN sizeof("%nnnnnnnnnn") | ||
192 | |||
193 | static inline bool __rpc_cmp_addr4(const struct sockaddr *sap1, | ||
194 | const struct sockaddr *sap2) | ||
195 | { | ||
196 | const struct sockaddr_in *sin1 = (const struct sockaddr_in *)sap1; | ||
197 | const struct sockaddr_in *sin2 = (const struct sockaddr_in *)sap2; | ||
198 | |||
199 | return sin1->sin_addr.s_addr == sin2->sin_addr.s_addr; | ||
200 | } | ||
201 | |||
202 | static inline bool __rpc_copy_addr4(struct sockaddr *dst, | ||
203 | const struct sockaddr *src) | ||
204 | { | ||
205 | const struct sockaddr_in *ssin = (struct sockaddr_in *) src; | ||
206 | struct sockaddr_in *dsin = (struct sockaddr_in *) dst; | ||
207 | |||
208 | dsin->sin_family = ssin->sin_family; | ||
209 | dsin->sin_addr.s_addr = ssin->sin_addr.s_addr; | ||
210 | return true; | ||
211 | } | ||
212 | |||
213 | #if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) | ||
214 | static inline bool __rpc_cmp_addr6(const struct sockaddr *sap1, | ||
215 | const struct sockaddr *sap2) | ||
216 | { | ||
217 | const struct sockaddr_in6 *sin1 = (const struct sockaddr_in6 *)sap1; | ||
218 | const struct sockaddr_in6 *sin2 = (const struct sockaddr_in6 *)sap2; | ||
219 | return ipv6_addr_equal(&sin1->sin6_addr, &sin2->sin6_addr); | ||
220 | } | ||
221 | |||
222 | static inline bool __rpc_copy_addr6(struct sockaddr *dst, | ||
223 | const struct sockaddr *src) | ||
224 | { | ||
225 | const struct sockaddr_in6 *ssin6 = (const struct sockaddr_in6 *) src; | ||
226 | struct sockaddr_in6 *dsin6 = (struct sockaddr_in6 *) dst; | ||
227 | |||
228 | dsin6->sin6_family = ssin6->sin6_family; | ||
229 | ipv6_addr_copy(&dsin6->sin6_addr, &ssin6->sin6_addr); | ||
230 | return true; | ||
231 | } | ||
232 | #else /* !(CONFIG_IPV6 || CONFIG_IPV6_MODULE) */ | ||
233 | static inline bool __rpc_cmp_addr6(const struct sockaddr *sap1, | ||
234 | const struct sockaddr *sap2) | ||
235 | { | ||
236 | return false; | ||
237 | } | ||
238 | |||
239 | static inline bool __rpc_copy_addr6(struct sockaddr *dst, | ||
240 | const struct sockaddr *src) | ||
241 | { | ||
242 | return false; | ||
243 | } | ||
244 | #endif /* !(CONFIG_IPV6 || CONFIG_IPV6_MODULE) */ | ||
245 | |||
246 | /** | ||
247 | * rpc_cmp_addr - compare the address portion of two sockaddrs. | ||
248 | * @sap1: first sockaddr | ||
249 | * @sap2: second sockaddr | ||
250 | * | ||
251 | * Just compares the family and address portion. Ignores port, scope, etc. | ||
252 | * Returns true if the addrs are equal, false if they aren't. | ||
253 | */ | ||
254 | static inline bool rpc_cmp_addr(const struct sockaddr *sap1, | ||
255 | const struct sockaddr *sap2) | ||
256 | { | ||
257 | if (sap1->sa_family == sap2->sa_family) { | ||
258 | switch (sap1->sa_family) { | ||
259 | case AF_INET: | ||
260 | return __rpc_cmp_addr4(sap1, sap2); | ||
261 | case AF_INET6: | ||
262 | return __rpc_cmp_addr6(sap1, sap2); | ||
263 | } | ||
264 | } | ||
265 | return false; | ||
266 | } | ||
267 | |||
268 | /** | ||
269 | * rpc_copy_addr - copy the address portion of one sockaddr to another | ||
270 | * @dst: destination sockaddr | ||
271 | * @src: source sockaddr | ||
272 | * | ||
273 | * Just copies the address portion and family. Ignores port, scope, etc. | ||
274 | * Caller is responsible for making certain that dst is large enough to hold | ||
275 | * the address in src. Returns true if address family is supported. Returns | ||
276 | * false otherwise. | ||
277 | */ | ||
278 | static inline bool rpc_copy_addr(struct sockaddr *dst, | ||
279 | const struct sockaddr *src) | ||
280 | { | ||
281 | switch (src->sa_family) { | ||
282 | case AF_INET: | ||
283 | return __rpc_copy_addr4(dst, src); | ||
284 | case AF_INET6: | ||
285 | return __rpc_copy_addr6(dst, src); | ||
286 | } | ||
287 | return false; | ||
288 | } | ||
289 | |||
290 | /** | ||
291 | * rpc_get_scope_id - return scopeid for a given sockaddr | ||
292 | * @sa: sockaddr to get scopeid from | ||
293 | * | ||
294 | * Returns the value of the sin6_scope_id for AF_INET6 addrs, or 0 if | ||
295 | * not an AF_INET6 address. | ||
296 | */ | ||
297 | static inline u32 rpc_get_scope_id(const struct sockaddr *sa) | ||
298 | { | ||
299 | if (sa->sa_family != AF_INET6) | ||
300 | return 0; | ||
301 | |||
302 | return ((struct sockaddr_in6 *) sa)->sin6_scope_id; | ||
303 | } | ||
304 | |||
154 | #endif /* __KERNEL__ */ | 305 | #endif /* __KERNEL__ */ |
155 | #endif /* _LINUX_SUNRPC_CLNT_H */ | 306 | #endif /* _LINUX_SUNRPC_CLNT_H */ |
diff --git a/include/linux/sunrpc/msg_prot.h b/include/linux/sunrpc/msg_prot.h index 70df4f1d8847..77e624883393 100644 --- a/include/linux/sunrpc/msg_prot.h +++ b/include/linux/sunrpc/msg_prot.h | |||
@@ -189,7 +189,22 @@ typedef __be32 rpc_fraghdr; | |||
189 | * Additionally, the two alternative forms specified in Section 2.2 of | 189 | * Additionally, the two alternative forms specified in Section 2.2 of |
190 | * [RFC2373] are also acceptable. | 190 | * [RFC2373] are also acceptable. |
191 | */ | 191 | */ |
192 | #define RPCBIND_MAXUADDRLEN (56u) | 192 | |
193 | #include <linux/inet.h> | ||
194 | |||
195 | /* Maximum size of the port number part of a universal address */ | ||
196 | #define RPCBIND_MAXUADDRPLEN sizeof(".255.255") | ||
197 | |||
198 | /* Maximum size of an IPv4 universal address */ | ||
199 | #define RPCBIND_MAXUADDR4LEN \ | ||
200 | (INET_ADDRSTRLEN + RPCBIND_MAXUADDRPLEN) | ||
201 | |||
202 | /* Maximum size of an IPv6 universal address */ | ||
203 | #define RPCBIND_MAXUADDR6LEN \ | ||
204 | (INET6_ADDRSTRLEN + RPCBIND_MAXUADDRPLEN) | ||
205 | |||
206 | /* Assume INET6_ADDRSTRLEN will always be larger than INET_ADDRSTRLEN... */ | ||
207 | #define RPCBIND_MAXUADDRLEN RPCBIND_MAXUADDR6LEN | ||
193 | 208 | ||
194 | #endif /* __KERNEL__ */ | 209 | #endif /* __KERNEL__ */ |
195 | #endif /* _LINUX_SUNRPC_MSGPROT_H_ */ | 210 | #endif /* _LINUX_SUNRPC_MSGPROT_H_ */ |
diff --git a/include/linux/sunrpc/rpc_pipe_fs.h b/include/linux/sunrpc/rpc_pipe_fs.h index cea764c2359f..cf14db975da0 100644 --- a/include/linux/sunrpc/rpc_pipe_fs.h +++ b/include/linux/sunrpc/rpc_pipe_fs.h | |||
@@ -3,6 +3,8 @@ | |||
3 | 3 | ||
4 | #ifdef __KERNEL__ | 4 | #ifdef __KERNEL__ |
5 | 5 | ||
6 | #include <linux/workqueue.h> | ||
7 | |||
6 | struct rpc_pipe_msg { | 8 | struct rpc_pipe_msg { |
7 | struct list_head list; | 9 | struct list_head list; |
8 | void *data; | 10 | void *data; |
@@ -32,8 +34,8 @@ struct rpc_inode { | |||
32 | wait_queue_head_t waitq; | 34 | wait_queue_head_t waitq; |
33 | #define RPC_PIPE_WAIT_FOR_OPEN 1 | 35 | #define RPC_PIPE_WAIT_FOR_OPEN 1 |
34 | int flags; | 36 | int flags; |
35 | struct rpc_pipe_ops *ops; | ||
36 | struct delayed_work queue_timeout; | 37 | struct delayed_work queue_timeout; |
38 | const struct rpc_pipe_ops *ops; | ||
37 | }; | 39 | }; |
38 | 40 | ||
39 | static inline struct rpc_inode * | 41 | static inline struct rpc_inode * |
@@ -44,9 +46,19 @@ RPC_I(struct inode *inode) | |||
44 | 46 | ||
45 | extern int rpc_queue_upcall(struct inode *, struct rpc_pipe_msg *); | 47 | extern int rpc_queue_upcall(struct inode *, struct rpc_pipe_msg *); |
46 | 48 | ||
47 | extern struct dentry *rpc_mkdir(char *, struct rpc_clnt *); | 49 | struct rpc_clnt; |
48 | extern int rpc_rmdir(struct dentry *); | 50 | extern struct dentry *rpc_create_client_dir(struct dentry *, struct qstr *, struct rpc_clnt *); |
49 | extern struct dentry *rpc_mkpipe(struct dentry *, const char *, void *, struct rpc_pipe_ops *, int flags); | 51 | extern int rpc_remove_client_dir(struct dentry *); |
52 | |||
53 | struct cache_detail; | ||
54 | extern struct dentry *rpc_create_cache_dir(struct dentry *, | ||
55 | struct qstr *, | ||
56 | mode_t umode, | ||
57 | struct cache_detail *); | ||
58 | extern void rpc_remove_cache_dir(struct dentry *); | ||
59 | |||
60 | extern struct dentry *rpc_mkpipe(struct dentry *, const char *, void *, | ||
61 | const struct rpc_pipe_ops *, int flags); | ||
50 | extern int rpc_unlink(struct dentry *); | 62 | extern int rpc_unlink(struct dentry *); |
51 | extern struct vfsmount *rpc_get_mount(void); | 63 | extern struct vfsmount *rpc_get_mount(void); |
52 | extern void rpc_put_mount(void); | 64 | extern void rpc_put_mount(void); |
diff --git a/include/linux/sunrpc/svc.h b/include/linux/sunrpc/svc.h index ea8009695c69..52e8cb0a7569 100644 --- a/include/linux/sunrpc/svc.h +++ b/include/linux/sunrpc/svc.h | |||
@@ -94,8 +94,6 @@ struct svc_serv { | |||
94 | struct module * sv_module; /* optional module to count when | 94 | struct module * sv_module; /* optional module to count when |
95 | * adding threads */ | 95 | * adding threads */ |
96 | svc_thread_fn sv_function; /* main function for threads */ | 96 | svc_thread_fn sv_function; /* main function for threads */ |
97 | unsigned int sv_drc_max_pages; /* Total pages for DRC */ | ||
98 | unsigned int sv_drc_pages_used;/* DRC pages used */ | ||
99 | #if defined(CONFIG_NFS_V4_1) | 97 | #if defined(CONFIG_NFS_V4_1) |
100 | struct list_head sv_cb_list; /* queue for callback requests | 98 | struct list_head sv_cb_list; /* queue for callback requests |
101 | * that arrive over the same | 99 | * that arrive over the same |
diff --git a/include/linux/sunrpc/svc_xprt.h b/include/linux/sunrpc/svc_xprt.h index 2223ae0b5ed5..5f4e18b3ce73 100644 --- a/include/linux/sunrpc/svc_xprt.h +++ b/include/linux/sunrpc/svc_xprt.h | |||
@@ -65,6 +65,7 @@ struct svc_xprt { | |||
65 | size_t xpt_locallen; /* length of address */ | 65 | size_t xpt_locallen; /* length of address */ |
66 | struct sockaddr_storage xpt_remote; /* remote peer's address */ | 66 | struct sockaddr_storage xpt_remote; /* remote peer's address */ |
67 | size_t xpt_remotelen; /* length of address */ | 67 | size_t xpt_remotelen; /* length of address */ |
68 | struct rpc_wait_queue xpt_bc_pending; /* backchannel wait queue */ | ||
68 | }; | 69 | }; |
69 | 70 | ||
70 | int svc_reg_xprt_class(struct svc_xprt_class *); | 71 | int svc_reg_xprt_class(struct svc_xprt_class *); |
diff --git a/include/linux/sunrpc/svcsock.h b/include/linux/sunrpc/svcsock.h index 04dba23c59f2..1b353a76c304 100644 --- a/include/linux/sunrpc/svcsock.h +++ b/include/linux/sunrpc/svcsock.h | |||
@@ -28,6 +28,7 @@ struct svc_sock { | |||
28 | /* private TCP part */ | 28 | /* private TCP part */ |
29 | u32 sk_reclen; /* length of record */ | 29 | u32 sk_reclen; /* length of record */ |
30 | u32 sk_tcplen; /* current read length */ | 30 | u32 sk_tcplen; /* current read length */ |
31 | struct rpc_xprt *sk_bc_xprt; /* NFSv4.1 backchannel xprt */ | ||
31 | }; | 32 | }; |
32 | 33 | ||
33 | /* | 34 | /* |
diff --git a/include/linux/sunrpc/xdr.h b/include/linux/sunrpc/xdr.h index d8910b68e1bd..7da466ba4b0d 100644 --- a/include/linux/sunrpc/xdr.h +++ b/include/linux/sunrpc/xdr.h | |||
@@ -12,7 +12,6 @@ | |||
12 | #include <linux/uio.h> | 12 | #include <linux/uio.h> |
13 | #include <asm/byteorder.h> | 13 | #include <asm/byteorder.h> |
14 | #include <linux/scatterlist.h> | 14 | #include <linux/scatterlist.h> |
15 | #include <linux/smp_lock.h> | ||
16 | 15 | ||
17 | /* | 16 | /* |
18 | * Buffer adjustment | 17 | * Buffer adjustment |
@@ -118,17 +117,15 @@ static inline __be32 *xdr_encode_array(__be32 *p, const void *s, unsigned int le | |||
118 | static inline __be32 * | 117 | static inline __be32 * |
119 | xdr_encode_hyper(__be32 *p, __u64 val) | 118 | xdr_encode_hyper(__be32 *p, __u64 val) |
120 | { | 119 | { |
121 | *p++ = htonl(val >> 32); | 120 | *(__be64 *)p = cpu_to_be64(val); |
122 | *p++ = htonl(val & 0xFFFFFFFF); | 121 | return p + 2; |
123 | return p; | ||
124 | } | 122 | } |
125 | 123 | ||
126 | static inline __be32 * | 124 | static inline __be32 * |
127 | xdr_decode_hyper(__be32 *p, __u64 *valp) | 125 | xdr_decode_hyper(__be32 *p, __u64 *valp) |
128 | { | 126 | { |
129 | *valp = ((__u64) ntohl(*p++)) << 32; | 127 | *valp = be64_to_cpup((__be64 *)p); |
130 | *valp |= ntohl(*p++); | 128 | return p + 2; |
131 | return p; | ||
132 | } | 129 | } |
133 | 130 | ||
134 | /* | 131 | /* |
diff --git a/include/linux/sunrpc/xprt.h b/include/linux/sunrpc/xprt.h index 1175d58efc2e..6f9457a75b8f 100644 --- a/include/linux/sunrpc/xprt.h +++ b/include/linux/sunrpc/xprt.h | |||
@@ -38,10 +38,8 @@ enum rpc_display_format_t { | |||
38 | RPC_DISPLAY_ADDR = 0, | 38 | RPC_DISPLAY_ADDR = 0, |
39 | RPC_DISPLAY_PORT, | 39 | RPC_DISPLAY_PORT, |
40 | RPC_DISPLAY_PROTO, | 40 | RPC_DISPLAY_PROTO, |
41 | RPC_DISPLAY_ALL, | ||
42 | RPC_DISPLAY_HEX_ADDR, | 41 | RPC_DISPLAY_HEX_ADDR, |
43 | RPC_DISPLAY_HEX_PORT, | 42 | RPC_DISPLAY_HEX_PORT, |
44 | RPC_DISPLAY_UNIVERSAL_ADDR, | ||
45 | RPC_DISPLAY_NETID, | 43 | RPC_DISPLAY_NETID, |
46 | RPC_DISPLAY_MAX, | 44 | RPC_DISPLAY_MAX, |
47 | }; | 45 | }; |
@@ -126,6 +124,23 @@ struct rpc_xprt_ops { | |||
126 | void (*print_stats)(struct rpc_xprt *xprt, struct seq_file *seq); | 124 | void (*print_stats)(struct rpc_xprt *xprt, struct seq_file *seq); |
127 | }; | 125 | }; |
128 | 126 | ||
127 | /* | ||
128 | * RPC transport identifiers | ||
129 | * | ||
130 | * To preserve compatibility with the historical use of raw IP protocol | ||
131 | * id's for transport selection, UDP and TCP identifiers are specified | ||
132 | * with the previous values. No such restriction exists for new transports, | ||
133 | * except that they may not collide with these values (17 and 6, | ||
134 | * respectively). | ||
135 | */ | ||
136 | #define XPRT_TRANSPORT_BC (1 << 31) | ||
137 | enum xprt_transports { | ||
138 | XPRT_TRANSPORT_UDP = IPPROTO_UDP, | ||
139 | XPRT_TRANSPORT_TCP = IPPROTO_TCP, | ||
140 | XPRT_TRANSPORT_BC_TCP = IPPROTO_TCP | XPRT_TRANSPORT_BC, | ||
141 | XPRT_TRANSPORT_RDMA = 256 | ||
142 | }; | ||
143 | |||
129 | struct rpc_xprt { | 144 | struct rpc_xprt { |
130 | struct kref kref; /* Reference count */ | 145 | struct kref kref; /* Reference count */ |
131 | struct rpc_xprt_ops * ops; /* transport methods */ | 146 | struct rpc_xprt_ops * ops; /* transport methods */ |
@@ -181,6 +196,7 @@ struct rpc_xprt { | |||
181 | spinlock_t reserve_lock; /* lock slot table */ | 196 | spinlock_t reserve_lock; /* lock slot table */ |
182 | u32 xid; /* Next XID value to use */ | 197 | u32 xid; /* Next XID value to use */ |
183 | struct rpc_task * snd_task; /* Task blocked in send */ | 198 | struct rpc_task * snd_task; /* Task blocked in send */ |
199 | struct svc_xprt *bc_xprt; /* NFSv4.1 backchannel */ | ||
184 | #if defined(CONFIG_NFS_V4_1) | 200 | #if defined(CONFIG_NFS_V4_1) |
185 | struct svc_serv *bc_serv; /* The RPC service which will */ | 201 | struct svc_serv *bc_serv; /* The RPC service which will */ |
186 | /* process the callback */ | 202 | /* process the callback */ |
@@ -233,6 +249,7 @@ struct xprt_create { | |||
233 | struct sockaddr * srcaddr; /* optional local address */ | 249 | struct sockaddr * srcaddr; /* optional local address */ |
234 | struct sockaddr * dstaddr; /* remote peer address */ | 250 | struct sockaddr * dstaddr; /* remote peer address */ |
235 | size_t addrlen; | 251 | size_t addrlen; |
252 | struct svc_xprt *bc_xprt; /* NFSv4.1 backchannel */ | ||
236 | }; | 253 | }; |
237 | 254 | ||
238 | struct xprt_class { | 255 | struct xprt_class { |
diff --git a/include/linux/sunrpc/xprtrdma.h b/include/linux/sunrpc/xprtrdma.h index 54a379c9e8eb..c2f04e1ae159 100644 --- a/include/linux/sunrpc/xprtrdma.h +++ b/include/linux/sunrpc/xprtrdma.h | |||
@@ -41,11 +41,6 @@ | |||
41 | #define _LINUX_SUNRPC_XPRTRDMA_H | 41 | #define _LINUX_SUNRPC_XPRTRDMA_H |
42 | 42 | ||
43 | /* | 43 | /* |
44 | * RPC transport identifier for RDMA | ||
45 | */ | ||
46 | #define XPRT_TRANSPORT_RDMA 256 | ||
47 | |||
48 | /* | ||
49 | * rpcbind (v3+) RDMA netid. | 44 | * rpcbind (v3+) RDMA netid. |
50 | */ | 45 | */ |
51 | #define RPCBIND_NETID_RDMA "rdma" | 46 | #define RPCBIND_NETID_RDMA "rdma" |
diff --git a/include/linux/sunrpc/xprtsock.h b/include/linux/sunrpc/xprtsock.h index c2a46c45c8f7..3f14a02e9cc0 100644 --- a/include/linux/sunrpc/xprtsock.h +++ b/include/linux/sunrpc/xprtsock.h | |||
@@ -13,17 +13,6 @@ int init_socket_xprt(void); | |||
13 | void cleanup_socket_xprt(void); | 13 | void cleanup_socket_xprt(void); |
14 | 14 | ||
15 | /* | 15 | /* |
16 | * RPC transport identifiers for UDP, TCP | ||
17 | * | ||
18 | * To preserve compatibility with the historical use of raw IP protocol | ||
19 | * id's for transport selection, these are specified with the previous | ||
20 | * values. No such restriction exists for new transports, except that | ||
21 | * they may not collide with these values (17 and 6, respectively). | ||
22 | */ | ||
23 | #define XPRT_TRANSPORT_UDP IPPROTO_UDP | ||
24 | #define XPRT_TRANSPORT_TCP IPPROTO_TCP | ||
25 | |||
26 | /* | ||
27 | * RPC slot table sizes for UDP, TCP transports | 16 | * RPC slot table sizes for UDP, TCP transports |
28 | */ | 17 | */ |
29 | extern unsigned int xprt_udp_slot_table_entries; | 18 | extern unsigned int xprt_udp_slot_table_entries; |
diff --git a/include/linux/swap.h b/include/linux/swap.h index 7c15334f3ff2..6c990e658f4e 100644 --- a/include/linux/swap.h +++ b/include/linux/swap.h | |||
@@ -419,10 +419,22 @@ static inline swp_entry_t get_swap_page(void) | |||
419 | } | 419 | } |
420 | 420 | ||
421 | /* linux/mm/thrash.c */ | 421 | /* linux/mm/thrash.c */ |
422 | #define put_swap_token(mm) do { } while (0) | 422 | static inline void put_swap_token(struct mm_struct *mm) |
423 | #define grab_swap_token(mm) do { } while (0) | 423 | { |
424 | #define has_swap_token(mm) 0 | 424 | } |
425 | #define disable_swap_token() do { } while (0) | 425 | |
426 | static inline void grab_swap_token(struct mm_struct *mm) | ||
427 | { | ||
428 | } | ||
429 | |||
430 | static inline int has_swap_token(struct mm_struct *mm) | ||
431 | { | ||
432 | return 0; | ||
433 | } | ||
434 | |||
435 | static inline void disable_swap_token(void) | ||
436 | { | ||
437 | } | ||
426 | 438 | ||
427 | static inline void | 439 | static inline void |
428 | mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent) | 440 | mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent) |
diff --git a/include/linux/swiotlb.h b/include/linux/swiotlb.h index cb1a6631b8f4..73b1f1cec423 100644 --- a/include/linux/swiotlb.h +++ b/include/linux/swiotlb.h | |||
@@ -14,7 +14,6 @@ struct scatterlist; | |||
14 | */ | 14 | */ |
15 | #define IO_TLB_SEGSIZE 128 | 15 | #define IO_TLB_SEGSIZE 128 |
16 | 16 | ||
17 | |||
18 | /* | 17 | /* |
19 | * log of the size of each IO TLB slab. The number of slabs is command line | 18 | * log of the size of each IO TLB slab. The number of slabs is command line |
20 | * controllable. | 19 | * controllable. |
@@ -24,16 +23,6 @@ struct scatterlist; | |||
24 | extern void | 23 | extern void |
25 | swiotlb_init(void); | 24 | swiotlb_init(void); |
26 | 25 | ||
27 | extern void *swiotlb_alloc_boot(size_t bytes, unsigned long nslabs); | ||
28 | extern void *swiotlb_alloc(unsigned order, unsigned long nslabs); | ||
29 | |||
30 | extern dma_addr_t swiotlb_phys_to_bus(struct device *hwdev, | ||
31 | phys_addr_t address); | ||
32 | extern phys_addr_t swiotlb_bus_to_phys(struct device *hwdev, | ||
33 | dma_addr_t address); | ||
34 | |||
35 | extern int swiotlb_arch_range_needs_mapping(phys_addr_t paddr, size_t size); | ||
36 | |||
37 | extern void | 26 | extern void |
38 | *swiotlb_alloc_coherent(struct device *hwdev, size_t size, | 27 | *swiotlb_alloc_coherent(struct device *hwdev, size_t size, |
39 | dma_addr_t *dma_handle, gfp_t flags); | 28 | dma_addr_t *dma_handle, gfp_t flags); |
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index fa4242cdade8..8d8285a10db9 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h | |||
@@ -55,7 +55,7 @@ struct compat_timeval; | |||
55 | struct robust_list_head; | 55 | struct robust_list_head; |
56 | struct getcpu_cache; | 56 | struct getcpu_cache; |
57 | struct old_linux_dirent; | 57 | struct old_linux_dirent; |
58 | struct perf_counter_attr; | 58 | struct perf_event_attr; |
59 | 59 | ||
60 | #include <linux/types.h> | 60 | #include <linux/types.h> |
61 | #include <linux/aio_abi.h> | 61 | #include <linux/aio_abi.h> |
@@ -64,6 +64,7 @@ struct perf_counter_attr; | |||
64 | #include <linux/sem.h> | 64 | #include <linux/sem.h> |
65 | #include <asm/siginfo.h> | 65 | #include <asm/siginfo.h> |
66 | #include <asm/signal.h> | 66 | #include <asm/signal.h> |
67 | #include <linux/unistd.h> | ||
67 | #include <linux/quota.h> | 68 | #include <linux/quota.h> |
68 | #include <linux/key.h> | 69 | #include <linux/key.h> |
69 | #include <trace/syscall.h> | 70 | #include <trace/syscall.h> |
@@ -97,6 +98,45 @@ struct perf_counter_attr; | |||
97 | #define __SC_TEST5(t5, a5, ...) __SC_TEST(t5); __SC_TEST4(__VA_ARGS__) | 98 | #define __SC_TEST5(t5, a5, ...) __SC_TEST(t5); __SC_TEST4(__VA_ARGS__) |
98 | #define __SC_TEST6(t6, a6, ...) __SC_TEST(t6); __SC_TEST5(__VA_ARGS__) | 99 | #define __SC_TEST6(t6, a6, ...) __SC_TEST(t6); __SC_TEST5(__VA_ARGS__) |
99 | 100 | ||
101 | #ifdef CONFIG_EVENT_PROFILE | ||
102 | #define TRACE_SYS_ENTER_PROFILE(sname) \ | ||
103 | static int prof_sysenter_enable_##sname(void) \ | ||
104 | { \ | ||
105 | return reg_prof_syscall_enter("sys"#sname); \ | ||
106 | } \ | ||
107 | \ | ||
108 | static void prof_sysenter_disable_##sname(void) \ | ||
109 | { \ | ||
110 | unreg_prof_syscall_enter("sys"#sname); \ | ||
111 | } | ||
112 | |||
113 | #define TRACE_SYS_EXIT_PROFILE(sname) \ | ||
114 | static int prof_sysexit_enable_##sname(void) \ | ||
115 | { \ | ||
116 | return reg_prof_syscall_exit("sys"#sname); \ | ||
117 | } \ | ||
118 | \ | ||
119 | static void prof_sysexit_disable_##sname(void) \ | ||
120 | { \ | ||
121 | unreg_prof_syscall_exit("sys"#sname); \ | ||
122 | } | ||
123 | |||
124 | #define TRACE_SYS_ENTER_PROFILE_INIT(sname) \ | ||
125 | .profile_count = ATOMIC_INIT(-1), \ | ||
126 | .profile_enable = prof_sysenter_enable_##sname, \ | ||
127 | .profile_disable = prof_sysenter_disable_##sname, | ||
128 | |||
129 | #define TRACE_SYS_EXIT_PROFILE_INIT(sname) \ | ||
130 | .profile_count = ATOMIC_INIT(-1), \ | ||
131 | .profile_enable = prof_sysexit_enable_##sname, \ | ||
132 | .profile_disable = prof_sysexit_disable_##sname, | ||
133 | #else | ||
134 | #define TRACE_SYS_ENTER_PROFILE(sname) | ||
135 | #define TRACE_SYS_ENTER_PROFILE_INIT(sname) | ||
136 | #define TRACE_SYS_EXIT_PROFILE(sname) | ||
137 | #define TRACE_SYS_EXIT_PROFILE_INIT(sname) | ||
138 | #endif | ||
139 | |||
100 | #ifdef CONFIG_FTRACE_SYSCALLS | 140 | #ifdef CONFIG_FTRACE_SYSCALLS |
101 | #define __SC_STR_ADECL1(t, a) #a | 141 | #define __SC_STR_ADECL1(t, a) #a |
102 | #define __SC_STR_ADECL2(t, a, ...) #a, __SC_STR_ADECL1(__VA_ARGS__) | 142 | #define __SC_STR_ADECL2(t, a, ...) #a, __SC_STR_ADECL1(__VA_ARGS__) |
@@ -112,7 +152,81 @@ struct perf_counter_attr; | |||
112 | #define __SC_STR_TDECL5(t, a, ...) #t, __SC_STR_TDECL4(__VA_ARGS__) | 152 | #define __SC_STR_TDECL5(t, a, ...) #t, __SC_STR_TDECL4(__VA_ARGS__) |
113 | #define __SC_STR_TDECL6(t, a, ...) #t, __SC_STR_TDECL5(__VA_ARGS__) | 153 | #define __SC_STR_TDECL6(t, a, ...) #t, __SC_STR_TDECL5(__VA_ARGS__) |
114 | 154 | ||
155 | #define SYSCALL_TRACE_ENTER_EVENT(sname) \ | ||
156 | static struct ftrace_event_call event_enter_##sname; \ | ||
157 | struct trace_event enter_syscall_print_##sname = { \ | ||
158 | .trace = print_syscall_enter, \ | ||
159 | }; \ | ||
160 | static int init_enter_##sname(void) \ | ||
161 | { \ | ||
162 | int num, id; \ | ||
163 | num = syscall_name_to_nr("sys"#sname); \ | ||
164 | if (num < 0) \ | ||
165 | return -ENOSYS; \ | ||
166 | id = register_ftrace_event(&enter_syscall_print_##sname);\ | ||
167 | if (!id) \ | ||
168 | return -ENODEV; \ | ||
169 | event_enter_##sname.id = id; \ | ||
170 | set_syscall_enter_id(num, id); \ | ||
171 | INIT_LIST_HEAD(&event_enter_##sname.fields); \ | ||
172 | return 0; \ | ||
173 | } \ | ||
174 | TRACE_SYS_ENTER_PROFILE(sname); \ | ||
175 | static struct ftrace_event_call __used \ | ||
176 | __attribute__((__aligned__(4))) \ | ||
177 | __attribute__((section("_ftrace_events"))) \ | ||
178 | event_enter_##sname = { \ | ||
179 | .name = "sys_enter"#sname, \ | ||
180 | .system = "syscalls", \ | ||
181 | .event = &event_syscall_enter, \ | ||
182 | .raw_init = init_enter_##sname, \ | ||
183 | .show_format = syscall_enter_format, \ | ||
184 | .define_fields = syscall_enter_define_fields, \ | ||
185 | .regfunc = reg_event_syscall_enter, \ | ||
186 | .unregfunc = unreg_event_syscall_enter, \ | ||
187 | .data = "sys"#sname, \ | ||
188 | TRACE_SYS_ENTER_PROFILE_INIT(sname) \ | ||
189 | } | ||
190 | |||
191 | #define SYSCALL_TRACE_EXIT_EVENT(sname) \ | ||
192 | static struct ftrace_event_call event_exit_##sname; \ | ||
193 | struct trace_event exit_syscall_print_##sname = { \ | ||
194 | .trace = print_syscall_exit, \ | ||
195 | }; \ | ||
196 | static int init_exit_##sname(void) \ | ||
197 | { \ | ||
198 | int num, id; \ | ||
199 | num = syscall_name_to_nr("sys"#sname); \ | ||
200 | if (num < 0) \ | ||
201 | return -ENOSYS; \ | ||
202 | id = register_ftrace_event(&exit_syscall_print_##sname);\ | ||
203 | if (!id) \ | ||
204 | return -ENODEV; \ | ||
205 | event_exit_##sname.id = id; \ | ||
206 | set_syscall_exit_id(num, id); \ | ||
207 | INIT_LIST_HEAD(&event_exit_##sname.fields); \ | ||
208 | return 0; \ | ||
209 | } \ | ||
210 | TRACE_SYS_EXIT_PROFILE(sname); \ | ||
211 | static struct ftrace_event_call __used \ | ||
212 | __attribute__((__aligned__(4))) \ | ||
213 | __attribute__((section("_ftrace_events"))) \ | ||
214 | event_exit_##sname = { \ | ||
215 | .name = "sys_exit"#sname, \ | ||
216 | .system = "syscalls", \ | ||
217 | .event = &event_syscall_exit, \ | ||
218 | .raw_init = init_exit_##sname, \ | ||
219 | .show_format = syscall_exit_format, \ | ||
220 | .define_fields = syscall_exit_define_fields, \ | ||
221 | .regfunc = reg_event_syscall_exit, \ | ||
222 | .unregfunc = unreg_event_syscall_exit, \ | ||
223 | .data = "sys"#sname, \ | ||
224 | TRACE_SYS_EXIT_PROFILE_INIT(sname) \ | ||
225 | } | ||
226 | |||
115 | #define SYSCALL_METADATA(sname, nb) \ | 227 | #define SYSCALL_METADATA(sname, nb) \ |
228 | SYSCALL_TRACE_ENTER_EVENT(sname); \ | ||
229 | SYSCALL_TRACE_EXIT_EVENT(sname); \ | ||
116 | static const struct syscall_metadata __used \ | 230 | static const struct syscall_metadata __used \ |
117 | __attribute__((__aligned__(4))) \ | 231 | __attribute__((__aligned__(4))) \ |
118 | __attribute__((section("__syscalls_metadata"))) \ | 232 | __attribute__((section("__syscalls_metadata"))) \ |
@@ -121,18 +235,23 @@ struct perf_counter_attr; | |||
121 | .nb_args = nb, \ | 235 | .nb_args = nb, \ |
122 | .types = types_##sname, \ | 236 | .types = types_##sname, \ |
123 | .args = args_##sname, \ | 237 | .args = args_##sname, \ |
124 | } | 238 | .enter_event = &event_enter_##sname, \ |
239 | .exit_event = &event_exit_##sname, \ | ||
240 | }; | ||
125 | 241 | ||
126 | #define SYSCALL_DEFINE0(sname) \ | 242 | #define SYSCALL_DEFINE0(sname) \ |
243 | SYSCALL_TRACE_ENTER_EVENT(_##sname); \ | ||
244 | SYSCALL_TRACE_EXIT_EVENT(_##sname); \ | ||
127 | static const struct syscall_metadata __used \ | 245 | static const struct syscall_metadata __used \ |
128 | __attribute__((__aligned__(4))) \ | 246 | __attribute__((__aligned__(4))) \ |
129 | __attribute__((section("__syscalls_metadata"))) \ | 247 | __attribute__((section("__syscalls_metadata"))) \ |
130 | __syscall_meta_##sname = { \ | 248 | __syscall_meta_##sname = { \ |
131 | .name = "sys_"#sname, \ | 249 | .name = "sys_"#sname, \ |
132 | .nb_args = 0, \ | 250 | .nb_args = 0, \ |
251 | .enter_event = &event_enter__##sname, \ | ||
252 | .exit_event = &event_exit__##sname, \ | ||
133 | }; \ | 253 | }; \ |
134 | asmlinkage long sys_##sname(void) | 254 | asmlinkage long sys_##sname(void) |
135 | |||
136 | #else | 255 | #else |
137 | #define SYSCALL_DEFINE0(name) asmlinkage long sys_##name(void) | 256 | #define SYSCALL_DEFINE0(name) asmlinkage long sys_##name(void) |
138 | #endif | 257 | #endif |
@@ -321,6 +440,8 @@ asmlinkage long sys_rt_sigtimedwait(const sigset_t __user *uthese, | |||
321 | siginfo_t __user *uinfo, | 440 | siginfo_t __user *uinfo, |
322 | const struct timespec __user *uts, | 441 | const struct timespec __user *uts, |
323 | size_t sigsetsize); | 442 | size_t sigsetsize); |
443 | asmlinkage long sys_rt_tgsigqueueinfo(pid_t tgid, pid_t pid, int sig, | ||
444 | siginfo_t __user *uinfo); | ||
324 | asmlinkage long sys_kill(int pid, int sig); | 445 | asmlinkage long sys_kill(int pid, int sig); |
325 | asmlinkage long sys_tgkill(int tgid, int pid, int sig); | 446 | asmlinkage long sys_tgkill(int tgid, int pid, int sig); |
326 | asmlinkage long sys_tkill(int pid, int sig); | 447 | asmlinkage long sys_tkill(int pid, int sig); |
@@ -756,7 +877,7 @@ asmlinkage long sys_ppoll(struct pollfd __user *, unsigned int, | |||
756 | int kernel_execve(const char *filename, char *const argv[], char *const envp[]); | 877 | int kernel_execve(const char *filename, char *const argv[], char *const envp[]); |
757 | 878 | ||
758 | 879 | ||
759 | asmlinkage long sys_perf_counter_open( | 880 | asmlinkage long sys_perf_event_open( |
760 | struct perf_counter_attr __user *attr_uptr, | 881 | struct perf_event_attr __user *attr_uptr, |
761 | pid_t pid, int cpu, int group_fd, unsigned long flags); | 882 | pid_t pid, int cpu, int group_fd, unsigned long flags); |
762 | #endif | 883 | #endif |
diff --git a/include/linux/sysrq.h b/include/linux/sysrq.h index 98a1d8cfb73d..99adcdc0d3ca 100644 --- a/include/linux/sysrq.h +++ b/include/linux/sysrq.h | |||
@@ -14,6 +14,8 @@ | |||
14 | #ifndef _LINUX_SYSRQ_H | 14 | #ifndef _LINUX_SYSRQ_H |
15 | #define _LINUX_SYSRQ_H | 15 | #define _LINUX_SYSRQ_H |
16 | 16 | ||
17 | #include <linux/errno.h> | ||
18 | |||
17 | struct pt_regs; | 19 | struct pt_regs; |
18 | struct tty_struct; | 20 | struct tty_struct; |
19 | 21 | ||
diff --git a/include/linux/taskstats_kern.h b/include/linux/taskstats_kern.h index 7e9680f4afdd..3398f4553269 100644 --- a/include/linux/taskstats_kern.h +++ b/include/linux/taskstats_kern.h | |||
@@ -9,7 +9,6 @@ | |||
9 | 9 | ||
10 | #include <linux/taskstats.h> | 10 | #include <linux/taskstats.h> |
11 | #include <linux/sched.h> | 11 | #include <linux/sched.h> |
12 | #include <net/genetlink.h> | ||
13 | 12 | ||
14 | #ifdef CONFIG_TASKSTATS | 13 | #ifdef CONFIG_TASKSTATS |
15 | extern struct kmem_cache *taskstats_cache; | 14 | extern struct kmem_cache *taskstats_cache; |
diff --git a/include/linux/tboot.h b/include/linux/tboot.h new file mode 100644 index 000000000000..bf2a0c748878 --- /dev/null +++ b/include/linux/tboot.h | |||
@@ -0,0 +1,162 @@ | |||
1 | /* | ||
2 | * tboot.h: shared data structure with tboot and kernel and functions | ||
3 | * used by kernel for runtime support of Intel(R) Trusted | ||
4 | * Execution Technology | ||
5 | * | ||
6 | * Copyright (c) 2006-2009, Intel Corporation | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify it | ||
9 | * under the terms and conditions of the GNU General Public License, | ||
10 | * version 2, as published by the Free Software Foundation. | ||
11 | * | ||
12 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
13 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
14 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
15 | * more details. | ||
16 | * | ||
17 | * You should have received a copy of the GNU General Public License along with | ||
18 | * this program; if not, write to the Free Software Foundation, Inc., | ||
19 | * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
20 | * | ||
21 | */ | ||
22 | |||
23 | #ifndef _LINUX_TBOOT_H | ||
24 | #define _LINUX_TBOOT_H | ||
25 | |||
26 | /* these must have the values from 0-5 in this order */ | ||
27 | enum { | ||
28 | TB_SHUTDOWN_REBOOT = 0, | ||
29 | TB_SHUTDOWN_S5, | ||
30 | TB_SHUTDOWN_S4, | ||
31 | TB_SHUTDOWN_S3, | ||
32 | TB_SHUTDOWN_HALT, | ||
33 | TB_SHUTDOWN_WFS | ||
34 | }; | ||
35 | |||
36 | #ifdef CONFIG_INTEL_TXT | ||
37 | #include <acpi/acpi.h> | ||
38 | /* used to communicate between tboot and the launched kernel */ | ||
39 | |||
40 | #define TB_KEY_SIZE 64 /* 512 bits */ | ||
41 | |||
42 | #define MAX_TB_MAC_REGIONS 32 | ||
43 | |||
44 | struct tboot_mac_region { | ||
45 | u64 start; /* must be 64 byte -aligned */ | ||
46 | u32 size; /* must be 64 byte -granular */ | ||
47 | } __packed; | ||
48 | |||
49 | /* GAS - Generic Address Structure (ACPI 2.0+) */ | ||
50 | struct tboot_acpi_generic_address { | ||
51 | u8 space_id; | ||
52 | u8 bit_width; | ||
53 | u8 bit_offset; | ||
54 | u8 access_width; | ||
55 | u64 address; | ||
56 | } __packed; | ||
57 | |||
58 | /* | ||
59 | * combines Sx info from FADT and FACS tables per ACPI 2.0+ spec | ||
60 | * (http://www.acpi.info/) | ||
61 | */ | ||
62 | struct tboot_acpi_sleep_info { | ||
63 | struct tboot_acpi_generic_address pm1a_cnt_blk; | ||
64 | struct tboot_acpi_generic_address pm1b_cnt_blk; | ||
65 | struct tboot_acpi_generic_address pm1a_evt_blk; | ||
66 | struct tboot_acpi_generic_address pm1b_evt_blk; | ||
67 | u16 pm1a_cnt_val; | ||
68 | u16 pm1b_cnt_val; | ||
69 | u64 wakeup_vector; | ||
70 | u32 vector_width; | ||
71 | u64 kernel_s3_resume_vector; | ||
72 | } __packed; | ||
73 | |||
74 | /* | ||
75 | * shared memory page used for communication between tboot and kernel | ||
76 | */ | ||
77 | struct tboot { | ||
78 | /* | ||
79 | * version 3+ fields: | ||
80 | */ | ||
81 | |||
82 | /* TBOOT_UUID */ | ||
83 | u8 uuid[16]; | ||
84 | |||
85 | /* version number: 5 is current */ | ||
86 | u32 version; | ||
87 | |||
88 | /* physical addr of tb_log_t log */ | ||
89 | u32 log_addr; | ||
90 | |||
91 | /* | ||
92 | * physical addr of entry point for tboot shutdown and | ||
93 | * type of shutdown (TB_SHUTDOWN_*) being requested | ||
94 | */ | ||
95 | u32 shutdown_entry; | ||
96 | u32 shutdown_type; | ||
97 | |||
98 | /* kernel-specified ACPI info for Sx shutdown */ | ||
99 | struct tboot_acpi_sleep_info acpi_sinfo; | ||
100 | |||
101 | /* tboot location in memory (physical) */ | ||
102 | u32 tboot_base; | ||
103 | u32 tboot_size; | ||
104 | |||
105 | /* memory regions (phys addrs) for tboot to MAC on S3 */ | ||
106 | u8 num_mac_regions; | ||
107 | struct tboot_mac_region mac_regions[MAX_TB_MAC_REGIONS]; | ||
108 | |||
109 | |||
110 | /* | ||
111 | * version 4+ fields: | ||
112 | */ | ||
113 | |||
114 | /* symmetric key for use by kernel; will be encrypted on S3 */ | ||
115 | u8 s3_key[TB_KEY_SIZE]; | ||
116 | |||
117 | |||
118 | /* | ||
119 | * version 5+ fields: | ||
120 | */ | ||
121 | |||
122 | /* used to 4byte-align num_in_wfs */ | ||
123 | u8 reserved_align[3]; | ||
124 | |||
125 | /* number of processors in wait-for-SIPI */ | ||
126 | u32 num_in_wfs; | ||
127 | } __packed; | ||
128 | |||
129 | /* | ||
130 | * UUID for tboot data struct to facilitate matching | ||
131 | * defined as {663C8DFF-E8B3-4b82-AABF-19EA4D057A08} by tboot, which is | ||
132 | * represented as {} in the char array used here | ||
133 | */ | ||
134 | #define TBOOT_UUID {0xff, 0x8d, 0x3c, 0x66, 0xb3, 0xe8, 0x82, 0x4b, 0xbf,\ | ||
135 | 0xaa, 0x19, 0xea, 0x4d, 0x5, 0x7a, 0x8} | ||
136 | |||
137 | extern struct tboot *tboot; | ||
138 | |||
139 | static inline int tboot_enabled(void) | ||
140 | { | ||
141 | return tboot != NULL; | ||
142 | } | ||
143 | |||
144 | extern void tboot_probe(void); | ||
145 | extern void tboot_shutdown(u32 shutdown_type); | ||
146 | extern void tboot_sleep(u8 sleep_state, u32 pm1a_control, u32 pm1b_control); | ||
147 | extern struct acpi_table_header *tboot_get_dmar_table( | ||
148 | struct acpi_table_header *dmar_tbl); | ||
149 | extern int tboot_force_iommu(void); | ||
150 | |||
151 | #else | ||
152 | |||
153 | #define tboot_probe() do { } while (0) | ||
154 | #define tboot_shutdown(shutdown_type) do { } while (0) | ||
155 | #define tboot_sleep(sleep_state, pm1a_control, pm1b_control) \ | ||
156 | do { } while (0) | ||
157 | #define tboot_get_dmar_table(dmar_tbl) (dmar_tbl) | ||
158 | #define tboot_force_iommu() 0 | ||
159 | |||
160 | #endif /* !CONFIG_INTEL_TXT */ | ||
161 | |||
162 | #endif /* _LINUX_TBOOT_H */ | ||
diff --git a/include/linux/tcp.h b/include/linux/tcp.h index 8afac76cd748..61723a7c21fe 100644 --- a/include/linux/tcp.h +++ b/include/linux/tcp.h | |||
@@ -233,7 +233,7 @@ struct tcp_request_sock { | |||
233 | struct inet_request_sock req; | 233 | struct inet_request_sock req; |
234 | #ifdef CONFIG_TCP_MD5SIG | 234 | #ifdef CONFIG_TCP_MD5SIG |
235 | /* Only used by TCP MD5 Signature so far. */ | 235 | /* Only used by TCP MD5 Signature so far. */ |
236 | struct tcp_request_sock_ops *af_specific; | 236 | const struct tcp_request_sock_ops *af_specific; |
237 | #endif | 237 | #endif |
238 | u32 rcv_isn; | 238 | u32 rcv_isn; |
239 | u32 snt_isn; | 239 | u32 snt_isn; |
@@ -401,9 +401,9 @@ struct tcp_sock { | |||
401 | 401 | ||
402 | #ifdef CONFIG_TCP_MD5SIG | 402 | #ifdef CONFIG_TCP_MD5SIG |
403 | /* TCP AF-Specific parts; only used by MD5 Signature support so far */ | 403 | /* TCP AF-Specific parts; only used by MD5 Signature support so far */ |
404 | struct tcp_sock_af_ops *af_specific; | 404 | const struct tcp_sock_af_ops *af_specific; |
405 | 405 | ||
406 | /* TCP MD5 Signagure Option information */ | 406 | /* TCP MD5 Signature Option information */ |
407 | struct tcp_md5sig_info *md5sig_info; | 407 | struct tcp_md5sig_info *md5sig_info; |
408 | #endif | 408 | #endif |
409 | }; | 409 | }; |
diff --git a/include/linux/time.h b/include/linux/time.h index ea16c1a01d51..56787c093345 100644 --- a/include/linux/time.h +++ b/include/linux/time.h | |||
@@ -75,7 +75,7 @@ extern unsigned long mktime(const unsigned int year, const unsigned int mon, | |||
75 | const unsigned int day, const unsigned int hour, | 75 | const unsigned int day, const unsigned int hour, |
76 | const unsigned int min, const unsigned int sec); | 76 | const unsigned int min, const unsigned int sec); |
77 | 77 | ||
78 | extern void set_normalized_timespec(struct timespec *ts, time_t sec, long nsec); | 78 | extern void set_normalized_timespec(struct timespec *ts, time_t sec, s64 nsec); |
79 | extern struct timespec timespec_add_safe(const struct timespec lhs, | 79 | extern struct timespec timespec_add_safe(const struct timespec lhs, |
80 | const struct timespec rhs); | 80 | const struct timespec rhs); |
81 | 81 | ||
@@ -101,7 +101,8 @@ extern struct timespec xtime; | |||
101 | extern struct timespec wall_to_monotonic; | 101 | extern struct timespec wall_to_monotonic; |
102 | extern seqlock_t xtime_lock; | 102 | extern seqlock_t xtime_lock; |
103 | 103 | ||
104 | extern unsigned long read_persistent_clock(void); | 104 | extern void read_persistent_clock(struct timespec *ts); |
105 | extern void read_boot_clock(struct timespec *ts); | ||
105 | extern int update_persistent_clock(struct timespec now); | 106 | extern int update_persistent_clock(struct timespec now); |
106 | extern int no_sync_cmos_clock __read_mostly; | 107 | extern int no_sync_cmos_clock __read_mostly; |
107 | void timekeeping_init(void); | 108 | void timekeeping_init(void); |
@@ -109,6 +110,8 @@ extern int timekeeping_suspended; | |||
109 | 110 | ||
110 | unsigned long get_seconds(void); | 111 | unsigned long get_seconds(void); |
111 | struct timespec current_kernel_time(void); | 112 | struct timespec current_kernel_time(void); |
113 | struct timespec __current_kernel_time(void); /* does not hold xtime_lock */ | ||
114 | struct timespec get_monotonic_coarse(void); | ||
112 | 115 | ||
113 | #define CURRENT_TIME (current_kernel_time()) | 116 | #define CURRENT_TIME (current_kernel_time()) |
114 | #define CURRENT_TIME_SEC ((struct timespec) { get_seconds(), 0 }) | 117 | #define CURRENT_TIME_SEC ((struct timespec) { get_seconds(), 0 }) |
@@ -147,6 +150,7 @@ extern struct timespec timespec_trunc(struct timespec t, unsigned gran); | |||
147 | extern int timekeeping_valid_for_hres(void); | 150 | extern int timekeeping_valid_for_hres(void); |
148 | extern void update_wall_time(void); | 151 | extern void update_wall_time(void); |
149 | extern void update_xtime_cache(u64 nsec); | 152 | extern void update_xtime_cache(u64 nsec); |
153 | extern void timekeeping_leap_insert(int leapsecond); | ||
150 | 154 | ||
151 | struct tms; | 155 | struct tms; |
152 | extern void do_sys_times(struct tms *); | 156 | extern void do_sys_times(struct tms *); |
@@ -241,6 +245,8 @@ struct itimerval { | |||
241 | #define CLOCK_PROCESS_CPUTIME_ID 2 | 245 | #define CLOCK_PROCESS_CPUTIME_ID 2 |
242 | #define CLOCK_THREAD_CPUTIME_ID 3 | 246 | #define CLOCK_THREAD_CPUTIME_ID 3 |
243 | #define CLOCK_MONOTONIC_RAW 4 | 247 | #define CLOCK_MONOTONIC_RAW 4 |
248 | #define CLOCK_REALTIME_COARSE 5 | ||
249 | #define CLOCK_MONOTONIC_COARSE 6 | ||
244 | 250 | ||
245 | /* | 251 | /* |
246 | * The IDs of various hardware clocks: | 252 | * The IDs of various hardware clocks: |
diff --git a/include/linux/timer.h b/include/linux/timer.h index be62ec2ebea5..a2d1eb6cb3f0 100644 --- a/include/linux/timer.h +++ b/include/linux/timer.h | |||
@@ -175,11 +175,6 @@ extern int mod_timer_pinned(struct timer_list *timer, unsigned long expires); | |||
175 | 175 | ||
176 | /* | 176 | /* |
177 | * Return when the next timer-wheel timeout occurs (in absolute jiffies), | 177 | * Return when the next timer-wheel timeout occurs (in absolute jiffies), |
178 | * locks the timer base: | ||
179 | */ | ||
180 | extern unsigned long next_timer_interrupt(void); | ||
181 | /* | ||
182 | * Return when the next timer-wheel timeout occurs (in absolute jiffies), | ||
183 | * locks the timer base and does the comparison against the given | 178 | * locks the timer base and does the comparison against the given |
184 | * jiffie. | 179 | * jiffie. |
185 | */ | 180 | */ |
diff --git a/include/linux/tipc.h b/include/linux/tipc.h index bea469455a0c..3d92396639de 100644 --- a/include/linux/tipc.h +++ b/include/linux/tipc.h | |||
@@ -209,5 +209,7 @@ struct sockaddr_tipc { | |||
209 | #define TIPC_SRC_DROPPABLE 128 /* Default: 0 (resend congested msg) */ | 209 | #define TIPC_SRC_DROPPABLE 128 /* Default: 0 (resend congested msg) */ |
210 | #define TIPC_DEST_DROPPABLE 129 /* Default: based on socket type */ | 210 | #define TIPC_DEST_DROPPABLE 129 /* Default: based on socket type */ |
211 | #define TIPC_CONN_TIMEOUT 130 /* Default: 8000 (ms) */ | 211 | #define TIPC_CONN_TIMEOUT 130 /* Default: 8000 (ms) */ |
212 | #define TIPC_NODE_RECVQ_DEPTH 131 /* Default: none (read only) */ | ||
213 | #define TIPC_SOCK_RECVQ_DEPTH 132 /* Default: none (read only) */ | ||
212 | 214 | ||
213 | #endif | 215 | #endif |
diff --git a/include/linux/topology.h b/include/linux/topology.h index 7402c1a27c4f..809b26c07090 100644 --- a/include/linux/topology.h +++ b/include/linux/topology.h | |||
@@ -85,20 +85,27 @@ int arch_update_cpu_topology(void); | |||
85 | #define ARCH_HAS_SCHED_WAKE_IDLE | 85 | #define ARCH_HAS_SCHED_WAKE_IDLE |
86 | /* Common values for SMT siblings */ | 86 | /* Common values for SMT siblings */ |
87 | #ifndef SD_SIBLING_INIT | 87 | #ifndef SD_SIBLING_INIT |
88 | #define SD_SIBLING_INIT (struct sched_domain) { \ | 88 | #define SD_SIBLING_INIT (struct sched_domain) { \ |
89 | .min_interval = 1, \ | 89 | .min_interval = 1, \ |
90 | .max_interval = 2, \ | 90 | .max_interval = 2, \ |
91 | .busy_factor = 64, \ | 91 | .busy_factor = 64, \ |
92 | .imbalance_pct = 110, \ | 92 | .imbalance_pct = 110, \ |
93 | .flags = SD_LOAD_BALANCE \ | 93 | \ |
94 | | SD_BALANCE_NEWIDLE \ | 94 | .flags = 1*SD_LOAD_BALANCE \ |
95 | | SD_BALANCE_FORK \ | 95 | | 1*SD_BALANCE_NEWIDLE \ |
96 | | SD_BALANCE_EXEC \ | 96 | | 1*SD_BALANCE_EXEC \ |
97 | | SD_WAKE_AFFINE \ | 97 | | 1*SD_BALANCE_FORK \ |
98 | | SD_WAKE_BALANCE \ | 98 | | 0*SD_BALANCE_WAKE \ |
99 | | SD_SHARE_CPUPOWER, \ | 99 | | 1*SD_WAKE_AFFINE \ |
100 | .last_balance = jiffies, \ | 100 | | 1*SD_SHARE_CPUPOWER \ |
101 | .balance_interval = 1, \ | 101 | | 0*SD_POWERSAVINGS_BALANCE \ |
102 | | 0*SD_SHARE_PKG_RESOURCES \ | ||
103 | | 0*SD_SERIALIZE \ | ||
104 | | 0*SD_PREFER_SIBLING \ | ||
105 | , \ | ||
106 | .last_balance = jiffies, \ | ||
107 | .balance_interval = 1, \ | ||
108 | .smt_gain = 1178, /* 15% */ \ | ||
102 | } | 109 | } |
103 | #endif | 110 | #endif |
104 | #endif /* CONFIG_SCHED_SMT */ | 111 | #endif /* CONFIG_SCHED_SMT */ |
@@ -106,69 +113,90 @@ int arch_update_cpu_topology(void); | |||
106 | #ifdef CONFIG_SCHED_MC | 113 | #ifdef CONFIG_SCHED_MC |
107 | /* Common values for MC siblings. for now mostly derived from SD_CPU_INIT */ | 114 | /* Common values for MC siblings. for now mostly derived from SD_CPU_INIT */ |
108 | #ifndef SD_MC_INIT | 115 | #ifndef SD_MC_INIT |
109 | #define SD_MC_INIT (struct sched_domain) { \ | 116 | #define SD_MC_INIT (struct sched_domain) { \ |
110 | .min_interval = 1, \ | 117 | .min_interval = 1, \ |
111 | .max_interval = 4, \ | 118 | .max_interval = 4, \ |
112 | .busy_factor = 64, \ | 119 | .busy_factor = 64, \ |
113 | .imbalance_pct = 125, \ | 120 | .imbalance_pct = 125, \ |
114 | .cache_nice_tries = 1, \ | 121 | .cache_nice_tries = 1, \ |
115 | .busy_idx = 2, \ | 122 | .busy_idx = 2, \ |
116 | .wake_idx = 1, \ | 123 | .wake_idx = 0, \ |
117 | .forkexec_idx = 1, \ | 124 | .forkexec_idx = 0, \ |
118 | .flags = SD_LOAD_BALANCE \ | 125 | \ |
119 | | SD_BALANCE_FORK \ | 126 | .flags = 1*SD_LOAD_BALANCE \ |
120 | | SD_BALANCE_EXEC \ | 127 | | 1*SD_BALANCE_NEWIDLE \ |
121 | | SD_WAKE_AFFINE \ | 128 | | 1*SD_BALANCE_EXEC \ |
122 | | SD_WAKE_BALANCE \ | 129 | | 1*SD_BALANCE_FORK \ |
123 | | SD_SHARE_PKG_RESOURCES\ | 130 | | 0*SD_BALANCE_WAKE \ |
124 | | sd_balance_for_mc_power()\ | 131 | | 1*SD_WAKE_AFFINE \ |
125 | | sd_power_saving_flags(),\ | 132 | | 1*SD_PREFER_LOCAL \ |
126 | .last_balance = jiffies, \ | 133 | | 0*SD_SHARE_CPUPOWER \ |
127 | .balance_interval = 1, \ | 134 | | 1*SD_SHARE_PKG_RESOURCES \ |
135 | | 0*SD_SERIALIZE \ | ||
136 | | sd_balance_for_mc_power() \ | ||
137 | | sd_power_saving_flags() \ | ||
138 | , \ | ||
139 | .last_balance = jiffies, \ | ||
140 | .balance_interval = 1, \ | ||
128 | } | 141 | } |
129 | #endif | 142 | #endif |
130 | #endif /* CONFIG_SCHED_MC */ | 143 | #endif /* CONFIG_SCHED_MC */ |
131 | 144 | ||
132 | /* Common values for CPUs */ | 145 | /* Common values for CPUs */ |
133 | #ifndef SD_CPU_INIT | 146 | #ifndef SD_CPU_INIT |
134 | #define SD_CPU_INIT (struct sched_domain) { \ | 147 | #define SD_CPU_INIT (struct sched_domain) { \ |
135 | .min_interval = 1, \ | 148 | .min_interval = 1, \ |
136 | .max_interval = 4, \ | 149 | .max_interval = 4, \ |
137 | .busy_factor = 64, \ | 150 | .busy_factor = 64, \ |
138 | .imbalance_pct = 125, \ | 151 | .imbalance_pct = 125, \ |
139 | .cache_nice_tries = 1, \ | 152 | .cache_nice_tries = 1, \ |
140 | .busy_idx = 2, \ | 153 | .busy_idx = 2, \ |
141 | .idle_idx = 1, \ | 154 | .idle_idx = 1, \ |
142 | .newidle_idx = 2, \ | 155 | .newidle_idx = 0, \ |
143 | .wake_idx = 1, \ | 156 | .wake_idx = 0, \ |
144 | .forkexec_idx = 1, \ | 157 | .forkexec_idx = 0, \ |
145 | .flags = SD_LOAD_BALANCE \ | 158 | \ |
146 | | SD_BALANCE_EXEC \ | 159 | .flags = 1*SD_LOAD_BALANCE \ |
147 | | SD_BALANCE_FORK \ | 160 | | 1*SD_BALANCE_NEWIDLE \ |
148 | | SD_WAKE_AFFINE \ | 161 | | 1*SD_BALANCE_EXEC \ |
149 | | SD_WAKE_BALANCE \ | 162 | | 1*SD_BALANCE_FORK \ |
150 | | sd_balance_for_package_power()\ | 163 | | 0*SD_BALANCE_WAKE \ |
151 | | sd_power_saving_flags(),\ | 164 | | 1*SD_WAKE_AFFINE \ |
152 | .last_balance = jiffies, \ | 165 | | 1*SD_PREFER_LOCAL \ |
153 | .balance_interval = 1, \ | 166 | | 0*SD_SHARE_CPUPOWER \ |
167 | | 0*SD_SHARE_PKG_RESOURCES \ | ||
168 | | 0*SD_SERIALIZE \ | ||
169 | | sd_balance_for_package_power() \ | ||
170 | | sd_power_saving_flags() \ | ||
171 | , \ | ||
172 | .last_balance = jiffies, \ | ||
173 | .balance_interval = 1, \ | ||
154 | } | 174 | } |
155 | #endif | 175 | #endif |
156 | 176 | ||
157 | /* sched_domains SD_ALLNODES_INIT for NUMA machines */ | 177 | /* sched_domains SD_ALLNODES_INIT for NUMA machines */ |
158 | #define SD_ALLNODES_INIT (struct sched_domain) { \ | 178 | #define SD_ALLNODES_INIT (struct sched_domain) { \ |
159 | .min_interval = 64, \ | 179 | .min_interval = 64, \ |
160 | .max_interval = 64*num_online_cpus(), \ | 180 | .max_interval = 64*num_online_cpus(), \ |
161 | .busy_factor = 128, \ | 181 | .busy_factor = 128, \ |
162 | .imbalance_pct = 133, \ | 182 | .imbalance_pct = 133, \ |
163 | .cache_nice_tries = 1, \ | 183 | .cache_nice_tries = 1, \ |
164 | .busy_idx = 3, \ | 184 | .busy_idx = 3, \ |
165 | .idle_idx = 3, \ | 185 | .idle_idx = 3, \ |
166 | .flags = SD_LOAD_BALANCE \ | 186 | .flags = 1*SD_LOAD_BALANCE \ |
167 | | SD_BALANCE_NEWIDLE \ | 187 | | 1*SD_BALANCE_NEWIDLE \ |
168 | | SD_WAKE_AFFINE \ | 188 | | 0*SD_BALANCE_EXEC \ |
169 | | SD_SERIALIZE, \ | 189 | | 0*SD_BALANCE_FORK \ |
170 | .last_balance = jiffies, \ | 190 | | 0*SD_BALANCE_WAKE \ |
171 | .balance_interval = 64, \ | 191 | | 0*SD_WAKE_AFFINE \ |
192 | | 0*SD_SHARE_CPUPOWER \ | ||
193 | | 0*SD_POWERSAVINGS_BALANCE \ | ||
194 | | 0*SD_SHARE_PKG_RESOURCES \ | ||
195 | | 1*SD_SERIALIZE \ | ||
196 | | 0*SD_PREFER_SIBLING \ | ||
197 | , \ | ||
198 | .last_balance = jiffies, \ | ||
199 | .balance_interval = 64, \ | ||
172 | } | 200 | } |
173 | 201 | ||
174 | #ifdef CONFIG_NUMA | 202 | #ifdef CONFIG_NUMA |
diff --git a/include/linux/tracepoint.h b/include/linux/tracepoint.h index b9dc4ca0246f..63a3f7a80580 100644 --- a/include/linux/tracepoint.h +++ b/include/linux/tracepoint.h | |||
@@ -23,6 +23,8 @@ struct tracepoint; | |||
23 | struct tracepoint { | 23 | struct tracepoint { |
24 | const char *name; /* Tracepoint name */ | 24 | const char *name; /* Tracepoint name */ |
25 | int state; /* State. */ | 25 | int state; /* State. */ |
26 | void (*regfunc)(void); | ||
27 | void (*unregfunc)(void); | ||
26 | void **funcs; | 28 | void **funcs; |
27 | } __attribute__((aligned(32))); /* | 29 | } __attribute__((aligned(32))); /* |
28 | * Aligned on 32 bytes because it is | 30 | * Aligned on 32 bytes because it is |
@@ -78,12 +80,16 @@ struct tracepoint { | |||
78 | return tracepoint_probe_unregister(#name, (void *)probe);\ | 80 | return tracepoint_probe_unregister(#name, (void *)probe);\ |
79 | } | 81 | } |
80 | 82 | ||
81 | #define DEFINE_TRACE(name) \ | 83 | |
84 | #define DEFINE_TRACE_FN(name, reg, unreg) \ | ||
82 | static const char __tpstrtab_##name[] \ | 85 | static const char __tpstrtab_##name[] \ |
83 | __attribute__((section("__tracepoints_strings"))) = #name; \ | 86 | __attribute__((section("__tracepoints_strings"))) = #name; \ |
84 | struct tracepoint __tracepoint_##name \ | 87 | struct tracepoint __tracepoint_##name \ |
85 | __attribute__((section("__tracepoints"), aligned(32))) = \ | 88 | __attribute__((section("__tracepoints"), aligned(32))) = \ |
86 | { __tpstrtab_##name, 0, NULL } | 89 | { __tpstrtab_##name, 0, reg, unreg, NULL } |
90 | |||
91 | #define DEFINE_TRACE(name) \ | ||
92 | DEFINE_TRACE_FN(name, NULL, NULL); | ||
87 | 93 | ||
88 | #define EXPORT_TRACEPOINT_SYMBOL_GPL(name) \ | 94 | #define EXPORT_TRACEPOINT_SYMBOL_GPL(name) \ |
89 | EXPORT_SYMBOL_GPL(__tracepoint_##name) | 95 | EXPORT_SYMBOL_GPL(__tracepoint_##name) |
@@ -108,6 +114,7 @@ extern void tracepoint_update_probe_range(struct tracepoint *begin, | |||
108 | return -ENOSYS; \ | 114 | return -ENOSYS; \ |
109 | } | 115 | } |
110 | 116 | ||
117 | #define DEFINE_TRACE_FN(name, reg, unreg) | ||
111 | #define DEFINE_TRACE(name) | 118 | #define DEFINE_TRACE(name) |
112 | #define EXPORT_TRACEPOINT_SYMBOL_GPL(name) | 119 | #define EXPORT_TRACEPOINT_SYMBOL_GPL(name) |
113 | #define EXPORT_TRACEPOINT_SYMBOL(name) | 120 | #define EXPORT_TRACEPOINT_SYMBOL(name) |
@@ -158,6 +165,15 @@ static inline void tracepoint_synchronize_unregister(void) | |||
158 | 165 | ||
159 | #define PARAMS(args...) args | 166 | #define PARAMS(args...) args |
160 | 167 | ||
168 | #endif /* _LINUX_TRACEPOINT_H */ | ||
169 | |||
170 | /* | ||
171 | * Note: we keep the TRACE_EVENT outside the include file ifdef protection. | ||
172 | * This is due to the way trace events work. If a file includes two | ||
173 | * trace event headers under one "CREATE_TRACE_POINTS" the first include | ||
174 | * will override the TRACE_EVENT and break the second include. | ||
175 | */ | ||
176 | |||
161 | #ifndef TRACE_EVENT | 177 | #ifndef TRACE_EVENT |
162 | /* | 178 | /* |
163 | * For use with the TRACE_EVENT macro: | 179 | * For use with the TRACE_EVENT macro: |
@@ -259,10 +275,15 @@ static inline void tracepoint_synchronize_unregister(void) | |||
259 | * can also by used by generic instrumentation like SystemTap), and | 275 | * can also by used by generic instrumentation like SystemTap), and |
260 | * it is also used to expose a structured trace record in | 276 | * it is also used to expose a structured trace record in |
261 | * /sys/kernel/debug/tracing/events/. | 277 | * /sys/kernel/debug/tracing/events/. |
278 | * | ||
279 | * A set of (un)registration functions can be passed to the variant | ||
280 | * TRACE_EVENT_FN to perform any (un)registration work. | ||
262 | */ | 281 | */ |
263 | 282 | ||
264 | #define TRACE_EVENT(name, proto, args, struct, assign, print) \ | 283 | #define TRACE_EVENT(name, proto, args, struct, assign, print) \ |
265 | DECLARE_TRACE(name, PARAMS(proto), PARAMS(args)) | 284 | DECLARE_TRACE(name, PARAMS(proto), PARAMS(args)) |
266 | #endif | 285 | #define TRACE_EVENT_FN(name, proto, args, struct, \ |
286 | assign, print, reg, unreg) \ | ||
287 | DECLARE_TRACE(name, PARAMS(proto), PARAMS(args)) | ||
267 | 288 | ||
268 | #endif | 289 | #endif /* ifdef TRACE_EVENT (see note above) */ |
diff --git a/include/linux/transport_class.h b/include/linux/transport_class.h index eaec1ea9558e..9ae8da3e6407 100644 --- a/include/linux/transport_class.h +++ b/include/linux/transport_class.h | |||
@@ -55,7 +55,7 @@ struct anon_transport_class cls = { \ | |||
55 | 55 | ||
56 | struct transport_container { | 56 | struct transport_container { |
57 | struct attribute_container ac; | 57 | struct attribute_container ac; |
58 | struct attribute_group *statistics; | 58 | const struct attribute_group *statistics; |
59 | }; | 59 | }; |
60 | 60 | ||
61 | #define attribute_container_to_transport_container(x) \ | 61 | #define attribute_container_to_transport_container(x) \ |
diff --git a/include/linux/tty.h b/include/linux/tty.h index 1488d8c81aac..f0f43d08d8b8 100644 --- a/include/linux/tty.h +++ b/include/linux/tty.h | |||
@@ -23,7 +23,7 @@ | |||
23 | */ | 23 | */ |
24 | #define NR_UNIX98_PTY_DEFAULT 4096 /* Default maximum for Unix98 ptys */ | 24 | #define NR_UNIX98_PTY_DEFAULT 4096 /* Default maximum for Unix98 ptys */ |
25 | #define NR_UNIX98_PTY_MAX (1 << MINORBITS) /* Absolute limit */ | 25 | #define NR_UNIX98_PTY_MAX (1 << MINORBITS) /* Absolute limit */ |
26 | #define NR_LDISCS 19 | 26 | #define NR_LDISCS 20 |
27 | 27 | ||
28 | /* line disciplines */ | 28 | /* line disciplines */ |
29 | #define N_TTY 0 | 29 | #define N_TTY 0 |
@@ -47,6 +47,8 @@ | |||
47 | #define N_SLCAN 17 /* Serial / USB serial CAN Adaptors */ | 47 | #define N_SLCAN 17 /* Serial / USB serial CAN Adaptors */ |
48 | #define N_PPS 18 /* Pulse per Second */ | 48 | #define N_PPS 18 /* Pulse per Second */ |
49 | 49 | ||
50 | #define N_V253 19 /* Codec control over voice modem */ | ||
51 | |||
50 | /* | 52 | /* |
51 | * This character is the same as _POSIX_VDISABLE: it cannot be used as | 53 | * This character is the same as _POSIX_VDISABLE: it cannot be used as |
52 | * a c_cc[] character, but indicates that a particular special character | 54 | * a c_cc[] character, but indicates that a particular special character |
@@ -185,7 +187,12 @@ struct tty_port; | |||
185 | struct tty_port_operations { | 187 | struct tty_port_operations { |
186 | /* Return 1 if the carrier is raised */ | 188 | /* Return 1 if the carrier is raised */ |
187 | int (*carrier_raised)(struct tty_port *port); | 189 | int (*carrier_raised)(struct tty_port *port); |
190 | /* Control the DTR line */ | ||
188 | void (*dtr_rts)(struct tty_port *port, int raise); | 191 | void (*dtr_rts)(struct tty_port *port, int raise); |
192 | /* Called when the last close completes or a hangup finishes | ||
193 | IFF the port was initialized. Do not use to free resources */ | ||
194 | void (*shutdown)(struct tty_port *port); | ||
195 | void (*drop)(struct tty_port *port); | ||
189 | }; | 196 | }; |
190 | 197 | ||
191 | struct tty_port { | 198 | struct tty_port { |
@@ -196,11 +203,12 @@ struct tty_port { | |||
196 | int count; /* Usage count */ | 203 | int count; /* Usage count */ |
197 | wait_queue_head_t open_wait; /* Open waiters */ | 204 | wait_queue_head_t open_wait; /* Open waiters */ |
198 | wait_queue_head_t close_wait; /* Close waiters */ | 205 | wait_queue_head_t close_wait; /* Close waiters */ |
206 | wait_queue_head_t delta_msr_wait; /* Modem status change */ | ||
199 | unsigned long flags; /* TTY flags ASY_*/ | 207 | unsigned long flags; /* TTY flags ASY_*/ |
200 | struct mutex mutex; /* Locking */ | 208 | struct mutex mutex; /* Locking */ |
201 | unsigned char *xmit_buf; /* Optional buffer */ | 209 | unsigned char *xmit_buf; /* Optional buffer */ |
202 | int close_delay; /* Close port delay */ | 210 | unsigned int close_delay; /* Close port delay */ |
203 | int closing_wait; /* Delay for output */ | 211 | unsigned int closing_wait; /* Delay for output */ |
204 | int drain_delay; /* Set to zero if no pure time | 212 | int drain_delay; /* Set to zero if no pure time |
205 | based drain is needed else | 213 | based drain is needed else |
206 | set to size of fifo */ | 214 | set to size of fifo */ |
@@ -394,6 +402,7 @@ extern void __do_SAK(struct tty_struct *tty); | |||
394 | extern void disassociate_ctty(int priv); | 402 | extern void disassociate_ctty(int priv); |
395 | extern void no_tty(void); | 403 | extern void no_tty(void); |
396 | extern void tty_flip_buffer_push(struct tty_struct *tty); | 404 | extern void tty_flip_buffer_push(struct tty_struct *tty); |
405 | extern void tty_flush_to_ldisc(struct tty_struct *tty); | ||
397 | extern void tty_buffer_free_all(struct tty_struct *tty); | 406 | extern void tty_buffer_free_all(struct tty_struct *tty); |
398 | extern void tty_buffer_flush(struct tty_struct *tty); | 407 | extern void tty_buffer_flush(struct tty_struct *tty); |
399 | extern void tty_buffer_init(struct tty_struct *tty); | 408 | extern void tty_buffer_init(struct tty_struct *tty); |
@@ -456,6 +465,12 @@ extern int tty_port_block_til_ready(struct tty_port *port, | |||
456 | extern int tty_port_close_start(struct tty_port *port, | 465 | extern int tty_port_close_start(struct tty_port *port, |
457 | struct tty_struct *tty, struct file *filp); | 466 | struct tty_struct *tty, struct file *filp); |
458 | extern void tty_port_close_end(struct tty_port *port, struct tty_struct *tty); | 467 | extern void tty_port_close_end(struct tty_port *port, struct tty_struct *tty); |
468 | extern void tty_port_close(struct tty_port *port, | ||
469 | struct tty_struct *tty, struct file *filp); | ||
470 | extern inline int tty_port_users(struct tty_port *port) | ||
471 | { | ||
472 | return port->count + port->blocked_open; | ||
473 | } | ||
459 | 474 | ||
460 | extern int tty_register_ldisc(int disc, struct tty_ldisc_ops *new_ldisc); | 475 | extern int tty_register_ldisc(int disc, struct tty_ldisc_ops *new_ldisc); |
461 | extern int tty_unregister_ldisc(int disc); | 476 | extern int tty_unregister_ldisc(int disc); |
@@ -516,14 +531,13 @@ extern void serial_console_init(void); | |||
516 | 531 | ||
517 | extern int pcxe_open(struct tty_struct *tty, struct file *filp); | 532 | extern int pcxe_open(struct tty_struct *tty, struct file *filp); |
518 | 533 | ||
519 | /* printk.c */ | ||
520 | |||
521 | extern void console_print(const char *); | ||
522 | |||
523 | /* vt.c */ | 534 | /* vt.c */ |
524 | 535 | ||
525 | extern int vt_ioctl(struct tty_struct *tty, struct file *file, | 536 | extern int vt_ioctl(struct tty_struct *tty, struct file *file, |
526 | unsigned int cmd, unsigned long arg); | 537 | unsigned int cmd, unsigned long arg); |
527 | 538 | ||
539 | extern long vt_compat_ioctl(struct tty_struct *tty, struct file * file, | ||
540 | unsigned int cmd, unsigned long arg); | ||
541 | |||
528 | #endif /* __KERNEL__ */ | 542 | #endif /* __KERNEL__ */ |
529 | #endif | 543 | #endif |
diff --git a/include/linux/tty_ldisc.h b/include/linux/tty_ldisc.h index 40f38d896777..0c4ee9b88f85 100644 --- a/include/linux/tty_ldisc.h +++ b/include/linux/tty_ldisc.h | |||
@@ -144,7 +144,7 @@ struct tty_ldisc_ops { | |||
144 | 144 | ||
145 | struct tty_ldisc { | 145 | struct tty_ldisc { |
146 | struct tty_ldisc_ops *ops; | 146 | struct tty_ldisc_ops *ops; |
147 | int refcount; | 147 | atomic_t users; |
148 | }; | 148 | }; |
149 | 149 | ||
150 | #define TTY_LDISC_MAGIC 0x5403 | 150 | #define TTY_LDISC_MAGIC 0x5403 |
diff --git a/include/linux/ucb1400.h b/include/linux/ucb1400.h index ed889f4168f3..ae779bb8cc0f 100644 --- a/include/linux/ucb1400.h +++ b/include/linux/ucb1400.h | |||
@@ -73,6 +73,10 @@ | |||
73 | 73 | ||
74 | #define UCB_ADC_DATA 0x68 | 74 | #define UCB_ADC_DATA 0x68 |
75 | #define UCB_ADC_DAT_VALID (1 << 15) | 75 | #define UCB_ADC_DAT_VALID (1 << 15) |
76 | |||
77 | #define UCB_FCSR 0x6c | ||
78 | #define UCB_FCSR_AVE (1 << 12) | ||
79 | |||
76 | #define UCB_ADC_DAT_MASK 0x3ff | 80 | #define UCB_ADC_DAT_MASK 0x3ff |
77 | 81 | ||
78 | #define UCB_ID 0x7e | 82 | #define UCB_ID 0x7e |
diff --git a/include/linux/uio.h b/include/linux/uio.h index b7fe13883bdb..98c114323a8b 100644 --- a/include/linux/uio.h +++ b/include/linux/uio.h | |||
@@ -19,15 +19,6 @@ struct iovec | |||
19 | __kernel_size_t iov_len; /* Must be size_t (1003.1g) */ | 19 | __kernel_size_t iov_len; /* Must be size_t (1003.1g) */ |
20 | }; | 20 | }; |
21 | 21 | ||
22 | #ifdef __KERNEL__ | ||
23 | |||
24 | struct kvec { | ||
25 | void *iov_base; /* and that should *never* hold a userland pointer */ | ||
26 | size_t iov_len; | ||
27 | }; | ||
28 | |||
29 | #endif | ||
30 | |||
31 | /* | 22 | /* |
32 | * UIO_MAXIOV shall be at least 16 1003.1g (5.4.1.1) | 23 | * UIO_MAXIOV shall be at least 16 1003.1g (5.4.1.1) |
33 | */ | 24 | */ |
@@ -35,6 +26,13 @@ struct kvec { | |||
35 | #define UIO_FASTIOV 8 | 26 | #define UIO_FASTIOV 8 |
36 | #define UIO_MAXIOV 1024 | 27 | #define UIO_MAXIOV 1024 |
37 | 28 | ||
29 | #ifdef __KERNEL__ | ||
30 | |||
31 | struct kvec { | ||
32 | void *iov_base; /* and that should *never* hold a userland pointer */ | ||
33 | size_t iov_len; | ||
34 | }; | ||
35 | |||
38 | /* | 36 | /* |
39 | * Total number of bytes covered by an iovec. | 37 | * Total number of bytes covered by an iovec. |
40 | * | 38 | * |
@@ -53,5 +51,6 @@ static inline size_t iov_length(const struct iovec *iov, unsigned long nr_segs) | |||
53 | } | 51 | } |
54 | 52 | ||
55 | unsigned long iov_shorten(struct iovec *iov, unsigned long nr_segs, size_t to); | 53 | unsigned long iov_shorten(struct iovec *iov, unsigned long nr_segs, size_t to); |
54 | #endif | ||
56 | 55 | ||
57 | #endif | 56 | #endif |
diff --git a/include/linux/usb.h b/include/linux/usb.h index 84929e914034..19fabc487beb 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h | |||
@@ -888,8 +888,6 @@ struct usb_driver { | |||
888 | * struct usb_device_driver - identifies USB device driver to usbcore | 888 | * struct usb_device_driver - identifies USB device driver to usbcore |
889 | * @name: The driver name should be unique among USB drivers, | 889 | * @name: The driver name should be unique among USB drivers, |
890 | * and should normally be the same as the module name. | 890 | * and should normally be the same as the module name. |
891 | * @nodename: Callback to provide a naming hint for a possible | ||
892 | * device node to create. | ||
893 | * @probe: Called to see if the driver is willing to manage a particular | 891 | * @probe: Called to see if the driver is willing to manage a particular |
894 | * device. If it is, probe returns zero and uses dev_set_drvdata() | 892 | * device. If it is, probe returns zero and uses dev_set_drvdata() |
895 | * to associate driver-specific data with the device. If unwilling | 893 | * to associate driver-specific data with the device. If unwilling |
@@ -924,6 +922,8 @@ extern struct bus_type usb_bus_type; | |||
924 | /** | 922 | /** |
925 | * struct usb_class_driver - identifies a USB driver that wants to use the USB major number | 923 | * struct usb_class_driver - identifies a USB driver that wants to use the USB major number |
926 | * @name: the usb class device name for this driver. Will show up in sysfs. | 924 | * @name: the usb class device name for this driver. Will show up in sysfs. |
925 | * @devnode: Callback to provide a naming hint for a possible | ||
926 | * device node to create. | ||
927 | * @fops: pointer to the struct file_operations of this driver. | 927 | * @fops: pointer to the struct file_operations of this driver. |
928 | * @minor_base: the start of the minor range for this driver. | 928 | * @minor_base: the start of the minor range for this driver. |
929 | * | 929 | * |
@@ -933,7 +933,7 @@ extern struct bus_type usb_bus_type; | |||
933 | */ | 933 | */ |
934 | struct usb_class_driver { | 934 | struct usb_class_driver { |
935 | char *name; | 935 | char *name; |
936 | char *(*nodename)(struct device *dev); | 936 | char *(*devnode)(struct device *dev, mode_t *mode); |
937 | const struct file_operations *fops; | 937 | const struct file_operations *fops; |
938 | int minor_base; | 938 | int minor_base; |
939 | }; | 939 | }; |
@@ -1046,6 +1046,8 @@ typedef void (*usb_complete_t)(struct urb *); | |||
1046 | * the device driver is saying that it provided this DMA address, | 1046 | * the device driver is saying that it provided this DMA address, |
1047 | * which the host controller driver should use in preference to the | 1047 | * which the host controller driver should use in preference to the |
1048 | * transfer_buffer. | 1048 | * transfer_buffer. |
1049 | * @sg: scatter gather buffer list | ||
1050 | * @num_sgs: number of entries in the sg list | ||
1049 | * @transfer_buffer_length: How big is transfer_buffer. The transfer may | 1051 | * @transfer_buffer_length: How big is transfer_buffer. The transfer may |
1050 | * be broken up into chunks according to the current maximum packet | 1052 | * be broken up into chunks according to the current maximum packet |
1051 | * size for the endpoint, which is a function of the configuration | 1053 | * size for the endpoint, which is a function of the configuration |
@@ -1069,7 +1071,7 @@ typedef void (*usb_complete_t)(struct urb *); | |||
1069 | * @start_frame: Returns the initial frame for isochronous transfers. | 1071 | * @start_frame: Returns the initial frame for isochronous transfers. |
1070 | * @number_of_packets: Lists the number of ISO transfer buffers. | 1072 | * @number_of_packets: Lists the number of ISO transfer buffers. |
1071 | * @interval: Specifies the polling interval for interrupt or isochronous | 1073 | * @interval: Specifies the polling interval for interrupt or isochronous |
1072 | * transfers. The units are frames (milliseconds) for for full and low | 1074 | * transfers. The units are frames (milliseconds) for full and low |
1073 | * speed devices, and microframes (1/8 millisecond) for highspeed ones. | 1075 | * speed devices, and microframes (1/8 millisecond) for highspeed ones. |
1074 | * @error_count: Returns the number of ISO transfers that reported errors. | 1076 | * @error_count: Returns the number of ISO transfers that reported errors. |
1075 | * @context: For use in completion functions. This normally points to | 1077 | * @context: For use in completion functions. This normally points to |
diff --git a/include/linux/usb/langwell_otg.h b/include/linux/usb/langwell_otg.h deleted file mode 100644 index e115ae6df1da..000000000000 --- a/include/linux/usb/langwell_otg.h +++ /dev/null | |||
@@ -1,177 +0,0 @@ | |||
1 | /* | ||
2 | * Intel Langwell USB OTG transceiver driver | ||
3 | * Copyright (C) 2008, Intel Corporation. | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify it | ||
6 | * under the terms and conditions of the GNU General Public License, | ||
7 | * version 2, as published by the Free Software Foundation. | ||
8 | * | ||
9 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
12 | * more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License along with | ||
15 | * this program; if not, write to the Free Software Foundation, Inc., | ||
16 | * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
17 | * | ||
18 | */ | ||
19 | |||
20 | #ifndef __LANGWELL_OTG_H__ | ||
21 | #define __LANGWELL_OTG_H__ | ||
22 | |||
23 | /* notify transceiver driver about OTG events */ | ||
24 | extern void langwell_update_transceiver(void); | ||
25 | /* HCD register bus driver */ | ||
26 | extern int langwell_register_host(struct pci_driver *host_driver); | ||
27 | /* HCD unregister bus driver */ | ||
28 | extern void langwell_unregister_host(struct pci_driver *host_driver); | ||
29 | /* DCD register bus driver */ | ||
30 | extern int langwell_register_peripheral(struct pci_driver *client_driver); | ||
31 | /* DCD unregister bus driver */ | ||
32 | extern void langwell_unregister_peripheral(struct pci_driver *client_driver); | ||
33 | /* No silent failure, output warning message */ | ||
34 | extern void langwell_otg_nsf_msg(unsigned long message); | ||
35 | |||
36 | #define CI_USBCMD 0x30 | ||
37 | # define USBCMD_RST BIT(1) | ||
38 | # define USBCMD_RS BIT(0) | ||
39 | #define CI_USBSTS 0x34 | ||
40 | # define USBSTS_SLI BIT(8) | ||
41 | # define USBSTS_URI BIT(6) | ||
42 | # define USBSTS_PCI BIT(2) | ||
43 | #define CI_PORTSC1 0x74 | ||
44 | # define PORTSC_PP BIT(12) | ||
45 | # define PORTSC_LS (BIT(11) | BIT(10)) | ||
46 | # define PORTSC_SUSP BIT(7) | ||
47 | # define PORTSC_CCS BIT(0) | ||
48 | #define CI_HOSTPC1 0xb4 | ||
49 | # define HOSTPC1_PHCD BIT(22) | ||
50 | #define CI_OTGSC 0xf4 | ||
51 | # define OTGSC_DPIE BIT(30) | ||
52 | # define OTGSC_1MSE BIT(29) | ||
53 | # define OTGSC_BSEIE BIT(28) | ||
54 | # define OTGSC_BSVIE BIT(27) | ||
55 | # define OTGSC_ASVIE BIT(26) | ||
56 | # define OTGSC_AVVIE BIT(25) | ||
57 | # define OTGSC_IDIE BIT(24) | ||
58 | # define OTGSC_DPIS BIT(22) | ||
59 | # define OTGSC_1MSS BIT(21) | ||
60 | # define OTGSC_BSEIS BIT(20) | ||
61 | # define OTGSC_BSVIS BIT(19) | ||
62 | # define OTGSC_ASVIS BIT(18) | ||
63 | # define OTGSC_AVVIS BIT(17) | ||
64 | # define OTGSC_IDIS BIT(16) | ||
65 | # define OTGSC_DPS BIT(14) | ||
66 | # define OTGSC_1MST BIT(13) | ||
67 | # define OTGSC_BSE BIT(12) | ||
68 | # define OTGSC_BSV BIT(11) | ||
69 | # define OTGSC_ASV BIT(10) | ||
70 | # define OTGSC_AVV BIT(9) | ||
71 | # define OTGSC_ID BIT(8) | ||
72 | # define OTGSC_HABA BIT(7) | ||
73 | # define OTGSC_HADP BIT(6) | ||
74 | # define OTGSC_IDPU BIT(5) | ||
75 | # define OTGSC_DP BIT(4) | ||
76 | # define OTGSC_OT BIT(3) | ||
77 | # define OTGSC_HAAR BIT(2) | ||
78 | # define OTGSC_VC BIT(1) | ||
79 | # define OTGSC_VD BIT(0) | ||
80 | # define OTGSC_INTEN_MASK (0x7f << 24) | ||
81 | # define OTGSC_INTSTS_MASK (0x7f << 16) | ||
82 | #define CI_USBMODE 0xf8 | ||
83 | # define USBMODE_CM (BIT(1) | BIT(0)) | ||
84 | # define USBMODE_IDLE 0 | ||
85 | # define USBMODE_DEVICE 0x2 | ||
86 | # define USBMODE_HOST 0x3 | ||
87 | |||
88 | #define INTR_DUMMY_MASK (USBSTS_SLI | USBSTS_URI | USBSTS_PCI) | ||
89 | |||
90 | struct otg_hsm { | ||
91 | /* Input */ | ||
92 | int a_bus_resume; | ||
93 | int a_bus_suspend; | ||
94 | int a_conn; | ||
95 | int a_sess_vld; | ||
96 | int a_srp_det; | ||
97 | int a_vbus_vld; | ||
98 | int b_bus_resume; | ||
99 | int b_bus_suspend; | ||
100 | int b_conn; | ||
101 | int b_se0_srp; | ||
102 | int b_sess_end; | ||
103 | int b_sess_vld; | ||
104 | int id; | ||
105 | |||
106 | /* Internal variables */ | ||
107 | int a_set_b_hnp_en; | ||
108 | int b_srp_done; | ||
109 | int b_hnp_enable; | ||
110 | |||
111 | /* Timeout indicator for timers */ | ||
112 | int a_wait_vrise_tmout; | ||
113 | int a_wait_bcon_tmout; | ||
114 | int a_aidl_bdis_tmout; | ||
115 | int b_ase0_brst_tmout; | ||
116 | int b_bus_suspend_tmout; | ||
117 | int b_srp_res_tmout; | ||
118 | |||
119 | /* Informative variables */ | ||
120 | int a_bus_drop; | ||
121 | int a_bus_req; | ||
122 | int a_clr_err; | ||
123 | int a_suspend_req; | ||
124 | int b_bus_req; | ||
125 | |||
126 | /* Output */ | ||
127 | int drv_vbus; | ||
128 | int loc_conn; | ||
129 | int loc_sof; | ||
130 | |||
131 | /* Others */ | ||
132 | int b_bus_suspend_vld; | ||
133 | }; | ||
134 | |||
135 | #define TA_WAIT_VRISE 100 | ||
136 | #define TA_WAIT_BCON 30000 | ||
137 | #define TA_AIDL_BDIS 15000 | ||
138 | #define TB_ASE0_BRST 5000 | ||
139 | #define TB_SE0_SRP 2 | ||
140 | #define TB_SRP_RES 100 | ||
141 | #define TB_BUS_SUSPEND 500 | ||
142 | |||
143 | struct langwell_otg_timer { | ||
144 | unsigned long expires; /* Number of count increase to timeout */ | ||
145 | unsigned long count; /* Tick counter */ | ||
146 | void (*function)(unsigned long); /* Timeout function */ | ||
147 | unsigned long data; /* Data passed to function */ | ||
148 | struct list_head list; | ||
149 | }; | ||
150 | |||
151 | struct langwell_otg { | ||
152 | struct otg_transceiver otg; | ||
153 | struct otg_hsm hsm; | ||
154 | void __iomem *regs; | ||
155 | unsigned region; | ||
156 | struct pci_driver *host_ops; | ||
157 | struct pci_driver *client_ops; | ||
158 | struct pci_dev *pdev; | ||
159 | struct work_struct work; | ||
160 | struct workqueue_struct *qwork; | ||
161 | spinlock_t lock; | ||
162 | spinlock_t wq_lock; | ||
163 | }; | ||
164 | |||
165 | static inline struct langwell_otg *otg_to_langwell(struct otg_transceiver *otg) | ||
166 | { | ||
167 | return container_of(otg, struct langwell_otg, otg); | ||
168 | } | ||
169 | |||
170 | #ifdef DEBUG | ||
171 | #define otg_dbg(fmt, args...) \ | ||
172 | printk(KERN_DEBUG fmt , ## args) | ||
173 | #else | ||
174 | #define otg_dbg(fmt, args...) \ | ||
175 | do { } while (0) | ||
176 | #endif /* DEBUG */ | ||
177 | #endif /* __LANGWELL_OTG_H__ */ | ||
diff --git a/include/linux/usb/m66592.h b/include/linux/usb/m66592.h new file mode 100644 index 000000000000..cda9625e7df0 --- /dev/null +++ b/include/linux/usb/m66592.h | |||
@@ -0,0 +1,44 @@ | |||
1 | /* | ||
2 | * M66592 driver platform data | ||
3 | * | ||
4 | * Copyright (C) 2009 Renesas Solutions Corp. | ||
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; version 2 of the License. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #ifndef __LINUX_USB_M66592_H | ||
22 | #define __LINUX_USB_M66592_H | ||
23 | |||
24 | #define M66592_PLATDATA_XTAL_12MHZ 0x01 | ||
25 | #define M66592_PLATDATA_XTAL_24MHZ 0x02 | ||
26 | #define M66592_PLATDATA_XTAL_48MHZ 0x03 | ||
27 | |||
28 | struct m66592_platdata { | ||
29 | /* one = on chip controller, zero = external controller */ | ||
30 | unsigned on_chip:1; | ||
31 | |||
32 | /* one = big endian, zero = little endian */ | ||
33 | unsigned endian:1; | ||
34 | |||
35 | /* (external controller only) M66592_PLATDATA_XTAL_nnMHZ */ | ||
36 | unsigned xtal:2; | ||
37 | |||
38 | /* (external controller only) one = 3.3V, zero = 1.5V */ | ||
39 | unsigned vif:1; | ||
40 | |||
41 | }; | ||
42 | |||
43 | #endif /* __LINUX_USB_M66592_H */ | ||
44 | |||
diff --git a/include/linux/usb/r8a66597.h b/include/linux/usb/r8a66597.h index e9f0384fa20c..26d216734057 100644 --- a/include/linux/usb/r8a66597.h +++ b/include/linux/usb/r8a66597.h | |||
@@ -28,9 +28,12 @@ | |||
28 | #define R8A66597_PLATDATA_XTAL_48MHZ 0x03 | 28 | #define R8A66597_PLATDATA_XTAL_48MHZ 0x03 |
29 | 29 | ||
30 | struct r8a66597_platdata { | 30 | struct r8a66597_platdata { |
31 | /* This ops can controll port power instead of DVSTCTR register. */ | 31 | /* This callback can control port power instead of DVSTCTR register. */ |
32 | void (*port_power)(int port, int power); | 32 | void (*port_power)(int port, int power); |
33 | 33 | ||
34 | /* set one = on chip controller, set zero = external controller */ | ||
35 | unsigned on_chip:1; | ||
36 | |||
34 | /* (external controller only) set R8A66597_PLATDATA_XTAL_nnMHZ */ | 37 | /* (external controller only) set R8A66597_PLATDATA_XTAL_nnMHZ */ |
35 | unsigned xtal:2; | 38 | unsigned xtal:2; |
36 | 39 | ||
@@ -40,5 +43,373 @@ struct r8a66597_platdata { | |||
40 | /* set one = big endian, set zero = little endian */ | 43 | /* set one = big endian, set zero = little endian */ |
41 | unsigned endian:1; | 44 | unsigned endian:1; |
42 | }; | 45 | }; |
43 | #endif | 46 | |
47 | /* Register definitions */ | ||
48 | #define SYSCFG0 0x00 | ||
49 | #define SYSCFG1 0x02 | ||
50 | #define SYSSTS0 0x04 | ||
51 | #define SYSSTS1 0x06 | ||
52 | #define DVSTCTR0 0x08 | ||
53 | #define DVSTCTR1 0x0A | ||
54 | #define TESTMODE 0x0C | ||
55 | #define PINCFG 0x0E | ||
56 | #define DMA0CFG 0x10 | ||
57 | #define DMA1CFG 0x12 | ||
58 | #define CFIFO 0x14 | ||
59 | #define D0FIFO 0x18 | ||
60 | #define D1FIFO 0x1C | ||
61 | #define CFIFOSEL 0x20 | ||
62 | #define CFIFOCTR 0x22 | ||
63 | #define CFIFOSIE 0x24 | ||
64 | #define D0FIFOSEL 0x28 | ||
65 | #define D0FIFOCTR 0x2A | ||
66 | #define D1FIFOSEL 0x2C | ||
67 | #define D1FIFOCTR 0x2E | ||
68 | #define INTENB0 0x30 | ||
69 | #define INTENB1 0x32 | ||
70 | #define INTENB2 0x34 | ||
71 | #define BRDYENB 0x36 | ||
72 | #define NRDYENB 0x38 | ||
73 | #define BEMPENB 0x3A | ||
74 | #define SOFCFG 0x3C | ||
75 | #define INTSTS0 0x40 | ||
76 | #define INTSTS1 0x42 | ||
77 | #define INTSTS2 0x44 | ||
78 | #define BRDYSTS 0x46 | ||
79 | #define NRDYSTS 0x48 | ||
80 | #define BEMPSTS 0x4A | ||
81 | #define FRMNUM 0x4C | ||
82 | #define UFRMNUM 0x4E | ||
83 | #define USBADDR 0x50 | ||
84 | #define USBREQ 0x54 | ||
85 | #define USBVAL 0x56 | ||
86 | #define USBINDX 0x58 | ||
87 | #define USBLENG 0x5A | ||
88 | #define DCPCFG 0x5C | ||
89 | #define DCPMAXP 0x5E | ||
90 | #define DCPCTR 0x60 | ||
91 | #define PIPESEL 0x64 | ||
92 | #define PIPECFG 0x68 | ||
93 | #define PIPEBUF 0x6A | ||
94 | #define PIPEMAXP 0x6C | ||
95 | #define PIPEPERI 0x6E | ||
96 | #define PIPE1CTR 0x70 | ||
97 | #define PIPE2CTR 0x72 | ||
98 | #define PIPE3CTR 0x74 | ||
99 | #define PIPE4CTR 0x76 | ||
100 | #define PIPE5CTR 0x78 | ||
101 | #define PIPE6CTR 0x7A | ||
102 | #define PIPE7CTR 0x7C | ||
103 | #define PIPE8CTR 0x7E | ||
104 | #define PIPE9CTR 0x80 | ||
105 | #define PIPE1TRE 0x90 | ||
106 | #define PIPE1TRN 0x92 | ||
107 | #define PIPE2TRE 0x94 | ||
108 | #define PIPE2TRN 0x96 | ||
109 | #define PIPE3TRE 0x98 | ||
110 | #define PIPE3TRN 0x9A | ||
111 | #define PIPE4TRE 0x9C | ||
112 | #define PIPE4TRN 0x9E | ||
113 | #define PIPE5TRE 0xA0 | ||
114 | #define PIPE5TRN 0xA2 | ||
115 | #define DEVADD0 0xD0 | ||
116 | #define DEVADD1 0xD2 | ||
117 | #define DEVADD2 0xD4 | ||
118 | #define DEVADD3 0xD6 | ||
119 | #define DEVADD4 0xD8 | ||
120 | #define DEVADD5 0xDA | ||
121 | #define DEVADD6 0xDC | ||
122 | #define DEVADD7 0xDE | ||
123 | #define DEVADD8 0xE0 | ||
124 | #define DEVADD9 0xE2 | ||
125 | #define DEVADDA 0xE4 | ||
126 | |||
127 | /* System Configuration Control Register */ | ||
128 | #define XTAL 0xC000 /* b15-14: Crystal selection */ | ||
129 | #define XTAL48 0x8000 /* 48MHz */ | ||
130 | #define XTAL24 0x4000 /* 24MHz */ | ||
131 | #define XTAL12 0x0000 /* 12MHz */ | ||
132 | #define XCKE 0x2000 /* b13: External clock enable */ | ||
133 | #define PLLC 0x0800 /* b11: PLL control */ | ||
134 | #define SCKE 0x0400 /* b10: USB clock enable */ | ||
135 | #define PCSDIS 0x0200 /* b9: not CS wakeup */ | ||
136 | #define LPSME 0x0100 /* b8: Low power sleep mode */ | ||
137 | #define HSE 0x0080 /* b7: Hi-speed enable */ | ||
138 | #define DCFM 0x0040 /* b6: Controller function select */ | ||
139 | #define DRPD 0x0020 /* b5: D+/- pull down control */ | ||
140 | #define DPRPU 0x0010 /* b4: D+ pull up control */ | ||
141 | #define USBE 0x0001 /* b0: USB module operation enable */ | ||
142 | |||
143 | /* System Configuration Status Register */ | ||
144 | #define OVCBIT 0x8000 /* b15-14: Over-current bit */ | ||
145 | #define OVCMON 0xC000 /* b15-14: Over-current monitor */ | ||
146 | #define SOFEA 0x0020 /* b5: SOF monitor */ | ||
147 | #define IDMON 0x0004 /* b3: ID-pin monitor */ | ||
148 | #define LNST 0x0003 /* b1-0: D+, D- line status */ | ||
149 | #define SE1 0x0003 /* SE1 */ | ||
150 | #define FS_KSTS 0x0002 /* Full-Speed K State */ | ||
151 | #define FS_JSTS 0x0001 /* Full-Speed J State */ | ||
152 | #define LS_JSTS 0x0002 /* Low-Speed J State */ | ||
153 | #define LS_KSTS 0x0001 /* Low-Speed K State */ | ||
154 | #define SE0 0x0000 /* SE0 */ | ||
155 | |||
156 | /* Device State Control Register */ | ||
157 | #define EXTLP0 0x0400 /* b10: External port */ | ||
158 | #define VBOUT 0x0200 /* b9: VBUS output */ | ||
159 | #define WKUP 0x0100 /* b8: Remote wakeup */ | ||
160 | #define RWUPE 0x0080 /* b7: Remote wakeup sense */ | ||
161 | #define USBRST 0x0040 /* b6: USB reset enable */ | ||
162 | #define RESUME 0x0020 /* b5: Resume enable */ | ||
163 | #define UACT 0x0010 /* b4: USB bus enable */ | ||
164 | #define RHST 0x0007 /* b1-0: Reset handshake status */ | ||
165 | #define HSPROC 0x0004 /* HS handshake is processing */ | ||
166 | #define HSMODE 0x0003 /* Hi-Speed mode */ | ||
167 | #define FSMODE 0x0002 /* Full-Speed mode */ | ||
168 | #define LSMODE 0x0001 /* Low-Speed mode */ | ||
169 | #define UNDECID 0x0000 /* Undecided */ | ||
170 | |||
171 | /* Test Mode Register */ | ||
172 | #define UTST 0x000F /* b3-0: Test select */ | ||
173 | #define H_TST_PACKET 0x000C /* HOST TEST Packet */ | ||
174 | #define H_TST_SE0_NAK 0x000B /* HOST TEST SE0 NAK */ | ||
175 | #define H_TST_K 0x000A /* HOST TEST K */ | ||
176 | #define H_TST_J 0x0009 /* HOST TEST J */ | ||
177 | #define H_TST_NORMAL 0x0000 /* HOST Normal Mode */ | ||
178 | #define P_TST_PACKET 0x0004 /* PERI TEST Packet */ | ||
179 | #define P_TST_SE0_NAK 0x0003 /* PERI TEST SE0 NAK */ | ||
180 | #define P_TST_K 0x0002 /* PERI TEST K */ | ||
181 | #define P_TST_J 0x0001 /* PERI TEST J */ | ||
182 | #define P_TST_NORMAL 0x0000 /* PERI Normal Mode */ | ||
183 | |||
184 | /* Data Pin Configuration Register */ | ||
185 | #define LDRV 0x8000 /* b15: Drive Current Adjust */ | ||
186 | #define VIF1 0x0000 /* VIF = 1.8V */ | ||
187 | #define VIF3 0x8000 /* VIF = 3.3V */ | ||
188 | #define INTA 0x0001 /* b1: USB INT-pin active */ | ||
189 | |||
190 | /* DMAx Pin Configuration Register */ | ||
191 | #define DREQA 0x4000 /* b14: Dreq active select */ | ||
192 | #define BURST 0x2000 /* b13: Burst mode */ | ||
193 | #define DACKA 0x0400 /* b10: Dack active select */ | ||
194 | #define DFORM 0x0380 /* b9-7: DMA mode select */ | ||
195 | #define CPU_ADR_RD_WR 0x0000 /* Address + RD/WR mode (CPU bus) */ | ||
196 | #define CPU_DACK_RD_WR 0x0100 /* DACK + RD/WR mode (CPU bus) */ | ||
197 | #define CPU_DACK_ONLY 0x0180 /* DACK only mode (CPU bus) */ | ||
198 | #define SPLIT_DACK_ONLY 0x0200 /* DACK only mode (SPLIT bus) */ | ||
199 | #define DENDA 0x0040 /* b6: Dend active select */ | ||
200 | #define PKTM 0x0020 /* b5: Packet mode */ | ||
201 | #define DENDE 0x0010 /* b4: Dend enable */ | ||
202 | #define OBUS 0x0004 /* b2: OUTbus mode */ | ||
203 | |||
204 | /* CFIFO/DxFIFO Port Select Register */ | ||
205 | #define RCNT 0x8000 /* b15: Read count mode */ | ||
206 | #define REW 0x4000 /* b14: Buffer rewind */ | ||
207 | #define DCLRM 0x2000 /* b13: DMA buffer clear mode */ | ||
208 | #define DREQE 0x1000 /* b12: DREQ output enable */ | ||
209 | #define MBW_8 0x0000 /* 8bit */ | ||
210 | #define MBW_16 0x0400 /* 16bit */ | ||
211 | #define MBW_32 0x0800 /* 32bit */ | ||
212 | #define BIGEND 0x0100 /* b8: Big endian mode */ | ||
213 | #define BYTE_LITTLE 0x0000 /* little dendian */ | ||
214 | #define BYTE_BIG 0x0100 /* big endifan */ | ||
215 | #define ISEL 0x0020 /* b5: DCP FIFO port direction select */ | ||
216 | #define CURPIPE 0x000F /* b2-0: PIPE select */ | ||
217 | |||
218 | /* CFIFO/DxFIFO Port Control Register */ | ||
219 | #define BVAL 0x8000 /* b15: Buffer valid flag */ | ||
220 | #define BCLR 0x4000 /* b14: Buffer clear */ | ||
221 | #define FRDY 0x2000 /* b13: FIFO ready */ | ||
222 | #define DTLN 0x0FFF /* b11-0: FIFO received data length */ | ||
223 | |||
224 | /* Interrupt Enable Register 0 */ | ||
225 | #define VBSE 0x8000 /* b15: VBUS interrupt */ | ||
226 | #define RSME 0x4000 /* b14: Resume interrupt */ | ||
227 | #define SOFE 0x2000 /* b13: Frame update interrupt */ | ||
228 | #define DVSE 0x1000 /* b12: Device state transition interrupt */ | ||
229 | #define CTRE 0x0800 /* b11: Control transfer stage transition interrupt */ | ||
230 | #define BEMPE 0x0400 /* b10: Buffer empty interrupt */ | ||
231 | #define NRDYE 0x0200 /* b9: Buffer not ready interrupt */ | ||
232 | #define BRDYE 0x0100 /* b8: Buffer ready interrupt */ | ||
233 | |||
234 | /* Interrupt Enable Register 1 */ | ||
235 | #define OVRCRE 0x8000 /* b15: Over-current interrupt */ | ||
236 | #define BCHGE 0x4000 /* b14: USB us chenge interrupt */ | ||
237 | #define DTCHE 0x1000 /* b12: Detach sense interrupt */ | ||
238 | #define ATTCHE 0x0800 /* b11: Attach sense interrupt */ | ||
239 | #define EOFERRE 0x0040 /* b6: EOF error interrupt */ | ||
240 | #define SIGNE 0x0020 /* b5: SETUP IGNORE interrupt */ | ||
241 | #define SACKE 0x0010 /* b4: SETUP ACK interrupt */ | ||
242 | |||
243 | /* BRDY Interrupt Enable/Status Register */ | ||
244 | #define BRDY9 0x0200 /* b9: PIPE9 */ | ||
245 | #define BRDY8 0x0100 /* b8: PIPE8 */ | ||
246 | #define BRDY7 0x0080 /* b7: PIPE7 */ | ||
247 | #define BRDY6 0x0040 /* b6: PIPE6 */ | ||
248 | #define BRDY5 0x0020 /* b5: PIPE5 */ | ||
249 | #define BRDY4 0x0010 /* b4: PIPE4 */ | ||
250 | #define BRDY3 0x0008 /* b3: PIPE3 */ | ||
251 | #define BRDY2 0x0004 /* b2: PIPE2 */ | ||
252 | #define BRDY1 0x0002 /* b1: PIPE1 */ | ||
253 | #define BRDY0 0x0001 /* b1: PIPE0 */ | ||
254 | |||
255 | /* NRDY Interrupt Enable/Status Register */ | ||
256 | #define NRDY9 0x0200 /* b9: PIPE9 */ | ||
257 | #define NRDY8 0x0100 /* b8: PIPE8 */ | ||
258 | #define NRDY7 0x0080 /* b7: PIPE7 */ | ||
259 | #define NRDY6 0x0040 /* b6: PIPE6 */ | ||
260 | #define NRDY5 0x0020 /* b5: PIPE5 */ | ||
261 | #define NRDY4 0x0010 /* b4: PIPE4 */ | ||
262 | #define NRDY3 0x0008 /* b3: PIPE3 */ | ||
263 | #define NRDY2 0x0004 /* b2: PIPE2 */ | ||
264 | #define NRDY1 0x0002 /* b1: PIPE1 */ | ||
265 | #define NRDY0 0x0001 /* b1: PIPE0 */ | ||
266 | |||
267 | /* BEMP Interrupt Enable/Status Register */ | ||
268 | #define BEMP9 0x0200 /* b9: PIPE9 */ | ||
269 | #define BEMP8 0x0100 /* b8: PIPE8 */ | ||
270 | #define BEMP7 0x0080 /* b7: PIPE7 */ | ||
271 | #define BEMP6 0x0040 /* b6: PIPE6 */ | ||
272 | #define BEMP5 0x0020 /* b5: PIPE5 */ | ||
273 | #define BEMP4 0x0010 /* b4: PIPE4 */ | ||
274 | #define BEMP3 0x0008 /* b3: PIPE3 */ | ||
275 | #define BEMP2 0x0004 /* b2: PIPE2 */ | ||
276 | #define BEMP1 0x0002 /* b1: PIPE1 */ | ||
277 | #define BEMP0 0x0001 /* b0: PIPE0 */ | ||
278 | |||
279 | /* SOF Pin Configuration Register */ | ||
280 | #define TRNENSEL 0x0100 /* b8: Select transaction enable period */ | ||
281 | #define BRDYM 0x0040 /* b6: BRDY clear timing */ | ||
282 | #define INTL 0x0020 /* b5: Interrupt sense select */ | ||
283 | #define EDGESTS 0x0010 /* b4: */ | ||
284 | #define SOFMODE 0x000C /* b3-2: SOF pin select */ | ||
285 | #define SOF_125US 0x0008 /* SOF OUT 125us Frame Signal */ | ||
286 | #define SOF_1MS 0x0004 /* SOF OUT 1ms Frame Signal */ | ||
287 | #define SOF_DISABLE 0x0000 /* SOF OUT Disable */ | ||
288 | |||
289 | /* Interrupt Status Register 0 */ | ||
290 | #define VBINT 0x8000 /* b15: VBUS interrupt */ | ||
291 | #define RESM 0x4000 /* b14: Resume interrupt */ | ||
292 | #define SOFR 0x2000 /* b13: SOF frame update interrupt */ | ||
293 | #define DVST 0x1000 /* b12: Device state transition interrupt */ | ||
294 | #define CTRT 0x0800 /* b11: Control transfer stage transition interrupt */ | ||
295 | #define BEMP 0x0400 /* b10: Buffer empty interrupt */ | ||
296 | #define NRDY 0x0200 /* b9: Buffer not ready interrupt */ | ||
297 | #define BRDY 0x0100 /* b8: Buffer ready interrupt */ | ||
298 | #define VBSTS 0x0080 /* b7: VBUS input port */ | ||
299 | #define DVSQ 0x0070 /* b6-4: Device state */ | ||
300 | #define DS_SPD_CNFG 0x0070 /* Suspend Configured */ | ||
301 | #define DS_SPD_ADDR 0x0060 /* Suspend Address */ | ||
302 | #define DS_SPD_DFLT 0x0050 /* Suspend Default */ | ||
303 | #define DS_SPD_POWR 0x0040 /* Suspend Powered */ | ||
304 | #define DS_SUSP 0x0040 /* Suspend */ | ||
305 | #define DS_CNFG 0x0030 /* Configured */ | ||
306 | #define DS_ADDS 0x0020 /* Address */ | ||
307 | #define DS_DFLT 0x0010 /* Default */ | ||
308 | #define DS_POWR 0x0000 /* Powered */ | ||
309 | #define DVSQS 0x0030 /* b5-4: Device state */ | ||
310 | #define VALID 0x0008 /* b3: Setup packet detected flag */ | ||
311 | #define CTSQ 0x0007 /* b2-0: Control transfer stage */ | ||
312 | #define CS_SQER 0x0006 /* Sequence error */ | ||
313 | #define CS_WRND 0x0005 /* Control write nodata status stage */ | ||
314 | #define CS_WRSS 0x0004 /* Control write status stage */ | ||
315 | #define CS_WRDS 0x0003 /* Control write data stage */ | ||
316 | #define CS_RDSS 0x0002 /* Control read status stage */ | ||
317 | #define CS_RDDS 0x0001 /* Control read data stage */ | ||
318 | #define CS_IDST 0x0000 /* Idle or setup stage */ | ||
319 | |||
320 | /* Interrupt Status Register 1 */ | ||
321 | #define OVRCR 0x8000 /* b15: Over-current interrupt */ | ||
322 | #define BCHG 0x4000 /* b14: USB bus chenge interrupt */ | ||
323 | #define DTCH 0x1000 /* b12: Detach sense interrupt */ | ||
324 | #define ATTCH 0x0800 /* b11: Attach sense interrupt */ | ||
325 | #define EOFERR 0x0040 /* b6: EOF-error interrupt */ | ||
326 | #define SIGN 0x0020 /* b5: Setup ignore interrupt */ | ||
327 | #define SACK 0x0010 /* b4: Setup acknowledge interrupt */ | ||
328 | |||
329 | /* Frame Number Register */ | ||
330 | #define OVRN 0x8000 /* b15: Overrun error */ | ||
331 | #define CRCE 0x4000 /* b14: Received data error */ | ||
332 | #define FRNM 0x07FF /* b10-0: Frame number */ | ||
333 | |||
334 | /* Micro Frame Number Register */ | ||
335 | #define UFRNM 0x0007 /* b2-0: Micro frame number */ | ||
336 | |||
337 | /* Default Control Pipe Maxpacket Size Register */ | ||
338 | /* Pipe Maxpacket Size Register */ | ||
339 | #define DEVSEL 0xF000 /* b15-14: Device address select */ | ||
340 | #define MAXP 0x007F /* b6-0: Maxpacket size of default control pipe */ | ||
341 | |||
342 | /* Default Control Pipe Control Register */ | ||
343 | #define BSTS 0x8000 /* b15: Buffer status */ | ||
344 | #define SUREQ 0x4000 /* b14: Send USB request */ | ||
345 | #define CSCLR 0x2000 /* b13: complete-split status clear */ | ||
346 | #define CSSTS 0x1000 /* b12: complete-split status */ | ||
347 | #define SUREQCLR 0x0800 /* b11: stop setup request */ | ||
348 | #define SQCLR 0x0100 /* b8: Sequence toggle bit clear */ | ||
349 | #define SQSET 0x0080 /* b7: Sequence toggle bit set */ | ||
350 | #define SQMON 0x0040 /* b6: Sequence toggle bit monitor */ | ||
351 | #define PBUSY 0x0020 /* b5: pipe busy */ | ||
352 | #define PINGE 0x0010 /* b4: ping enable */ | ||
353 | #define CCPL 0x0004 /* b2: Enable control transfer complete */ | ||
354 | #define PID 0x0003 /* b1-0: Response PID */ | ||
355 | #define PID_STALL11 0x0003 /* STALL */ | ||
356 | #define PID_STALL 0x0002 /* STALL */ | ||
357 | #define PID_BUF 0x0001 /* BUF */ | ||
358 | #define PID_NAK 0x0000 /* NAK */ | ||
359 | |||
360 | /* Pipe Window Select Register */ | ||
361 | #define PIPENM 0x0007 /* b2-0: Pipe select */ | ||
362 | |||
363 | /* Pipe Configuration Register */ | ||
364 | #define R8A66597_TYP 0xC000 /* b15-14: Transfer type */ | ||
365 | #define R8A66597_ISO 0xC000 /* Isochronous */ | ||
366 | #define R8A66597_INT 0x8000 /* Interrupt */ | ||
367 | #define R8A66597_BULK 0x4000 /* Bulk */ | ||
368 | #define R8A66597_BFRE 0x0400 /* b10: Buffer ready interrupt mode select */ | ||
369 | #define R8A66597_DBLB 0x0200 /* b9: Double buffer mode select */ | ||
370 | #define R8A66597_CNTMD 0x0100 /* b8: Continuous transfer mode select */ | ||
371 | #define R8A66597_SHTNAK 0x0080 /* b7: Transfer end NAK */ | ||
372 | #define R8A66597_DIR 0x0010 /* b4: Transfer direction select */ | ||
373 | #define R8A66597_EPNUM 0x000F /* b3-0: Eendpoint number select */ | ||
374 | |||
375 | /* Pipe Buffer Configuration Register */ | ||
376 | #define BUFSIZE 0x7C00 /* b14-10: Pipe buffer size */ | ||
377 | #define BUFNMB 0x007F /* b6-0: Pipe buffer number */ | ||
378 | #define PIPE0BUF 256 | ||
379 | #define PIPExBUF 64 | ||
380 | |||
381 | /* Pipe Maxpacket Size Register */ | ||
382 | #define MXPS 0x07FF /* b10-0: Maxpacket size */ | ||
383 | |||
384 | /* Pipe Cycle Configuration Register */ | ||
385 | #define IFIS 0x1000 /* b12: Isochronous in-buffer flush mode select */ | ||
386 | #define IITV 0x0007 /* b2-0: Isochronous interval */ | ||
387 | |||
388 | /* Pipex Control Register */ | ||
389 | #define BSTS 0x8000 /* b15: Buffer status */ | ||
390 | #define INBUFM 0x4000 /* b14: IN buffer monitor (Only for PIPE1 to 5) */ | ||
391 | #define CSCLR 0x2000 /* b13: complete-split status clear */ | ||
392 | #define CSSTS 0x1000 /* b12: complete-split status */ | ||
393 | #define ATREPM 0x0400 /* b10: Auto repeat mode */ | ||
394 | #define ACLRM 0x0200 /* b9: Out buffer auto clear mode */ | ||
395 | #define SQCLR 0x0100 /* b8: Sequence toggle bit clear */ | ||
396 | #define SQSET 0x0080 /* b7: Sequence toggle bit set */ | ||
397 | #define SQMON 0x0040 /* b6: Sequence toggle bit monitor */ | ||
398 | #define PBUSY 0x0020 /* b5: pipe busy */ | ||
399 | #define PID 0x0003 /* b1-0: Response PID */ | ||
400 | |||
401 | /* PIPExTRE */ | ||
402 | #define TRENB 0x0200 /* b9: Transaction counter enable */ | ||
403 | #define TRCLR 0x0100 /* b8: Transaction counter clear */ | ||
404 | |||
405 | /* PIPExTRN */ | ||
406 | #define TRNCNT 0xFFFF /* b15-0: Transaction counter */ | ||
407 | |||
408 | /* DEVADDx */ | ||
409 | #define UPPHUB 0x7800 | ||
410 | #define HUBPORT 0x0700 | ||
411 | #define USBSPD 0x00C0 | ||
412 | #define RTPORT 0x0001 | ||
413 | |||
414 | #endif /* __LINUX_USB_R8A66597_H */ | ||
44 | 415 | ||
diff --git a/include/linux/usb/rndis_host.h b/include/linux/usb/rndis_host.h index 37836b937d97..1ef1ebc2b04f 100644 --- a/include/linux/usb/rndis_host.h +++ b/include/linux/usb/rndis_host.h | |||
@@ -70,12 +70,13 @@ struct rndis_msg_hdr { | |||
70 | #define RNDIS_MSG_KEEPALIVE_C (RNDIS_MSG_KEEPALIVE|RNDIS_MSG_COMPLETION) | 70 | #define RNDIS_MSG_KEEPALIVE_C (RNDIS_MSG_KEEPALIVE|RNDIS_MSG_COMPLETION) |
71 | 71 | ||
72 | /* codes for "status" field of completion messages */ | 72 | /* codes for "status" field of completion messages */ |
73 | #define RNDIS_STATUS_SUCCESS cpu_to_le32(0x00000000) | 73 | #define RNDIS_STATUS_SUCCESS cpu_to_le32(0x00000000) |
74 | #define RNDIS_STATUS_FAILURE cpu_to_le32(0xc0000001) | 74 | #define RNDIS_STATUS_FAILURE cpu_to_le32(0xc0000001) |
75 | #define RNDIS_STATUS_INVALID_DATA cpu_to_le32(0xc0010015) | 75 | #define RNDIS_STATUS_INVALID_DATA cpu_to_le32(0xc0010015) |
76 | #define RNDIS_STATUS_NOT_SUPPORTED cpu_to_le32(0xc00000bb) | 76 | #define RNDIS_STATUS_NOT_SUPPORTED cpu_to_le32(0xc00000bb) |
77 | #define RNDIS_STATUS_MEDIA_CONNECT cpu_to_le32(0x4001000b) | 77 | #define RNDIS_STATUS_MEDIA_CONNECT cpu_to_le32(0x4001000b) |
78 | #define RNDIS_STATUS_MEDIA_DISCONNECT cpu_to_le32(0x4001000c) | 78 | #define RNDIS_STATUS_MEDIA_DISCONNECT cpu_to_le32(0x4001000c) |
79 | #define RNDIS_STATUS_MEDIA_SPECIFIC_INDICATION cpu_to_le32(0x40010012) | ||
79 | 80 | ||
80 | /* codes for OID_GEN_PHYSICAL_MEDIUM */ | 81 | /* codes for OID_GEN_PHYSICAL_MEDIUM */ |
81 | #define RNDIS_PHYSICAL_MEDIUM_UNSPECIFIED cpu_to_le32(0x00000000) | 82 | #define RNDIS_PHYSICAL_MEDIUM_UNSPECIFIED cpu_to_le32(0x00000000) |
diff --git a/include/linux/usb/serial.h b/include/linux/usb/serial.h index 44801d26a37a..7b85e327af91 100644 --- a/include/linux/usb/serial.h +++ b/include/linux/usb/serial.h | |||
@@ -238,9 +238,8 @@ struct usb_serial_driver { | |||
238 | int (*resume)(struct usb_serial *serial); | 238 | int (*resume)(struct usb_serial *serial); |
239 | 239 | ||
240 | /* serial function calls */ | 240 | /* serial function calls */ |
241 | /* Called by console with tty = NULL and by tty */ | 241 | /* Called by console and by the tty layer */ |
242 | int (*open)(struct tty_struct *tty, | 242 | int (*open)(struct tty_struct *tty, struct usb_serial_port *port); |
243 | struct usb_serial_port *port, struct file *filp); | ||
244 | void (*close)(struct usb_serial_port *port); | 243 | void (*close)(struct usb_serial_port *port); |
245 | int (*write)(struct tty_struct *tty, struct usb_serial_port *port, | 244 | int (*write)(struct tty_struct *tty, struct usb_serial_port *port, |
246 | const unsigned char *buf, int count); | 245 | const unsigned char *buf, int count); |
@@ -261,6 +260,9 @@ struct usb_serial_driver { | |||
261 | be an attached tty at this point */ | 260 | be an attached tty at this point */ |
262 | void (*dtr_rts)(struct usb_serial_port *port, int on); | 261 | void (*dtr_rts)(struct usb_serial_port *port, int on); |
263 | int (*carrier_raised)(struct usb_serial_port *port); | 262 | int (*carrier_raised)(struct usb_serial_port *port); |
263 | /* Called by the usb serial hooks to allow the user to rework the | ||
264 | termios state */ | ||
265 | void (*init_termios)(struct tty_struct *tty); | ||
264 | /* USB events */ | 266 | /* USB events */ |
265 | void (*read_int_callback)(struct urb *urb); | 267 | void (*read_int_callback)(struct urb *urb); |
266 | void (*write_int_callback)(struct urb *urb); | 268 | void (*write_int_callback)(struct urb *urb); |
@@ -300,7 +302,7 @@ static inline void usb_serial_console_disconnect(struct usb_serial *serial) {} | |||
300 | extern struct usb_serial *usb_serial_get_by_index(unsigned int minor); | 302 | extern struct usb_serial *usb_serial_get_by_index(unsigned int minor); |
301 | extern void usb_serial_put(struct usb_serial *serial); | 303 | extern void usb_serial_put(struct usb_serial *serial); |
302 | extern int usb_serial_generic_open(struct tty_struct *tty, | 304 | extern int usb_serial_generic_open(struct tty_struct *tty, |
303 | struct usb_serial_port *port, struct file *filp); | 305 | struct usb_serial_port *port); |
304 | extern int usb_serial_generic_write(struct tty_struct *tty, | 306 | extern int usb_serial_generic_write(struct tty_struct *tty, |
305 | struct usb_serial_port *port, const unsigned char *buf, int count); | 307 | struct usb_serial_port *port, const unsigned char *buf, int count); |
306 | extern void usb_serial_generic_close(struct usb_serial_port *port); | 308 | extern void usb_serial_generic_close(struct usb_serial_port *port); |
@@ -317,7 +319,8 @@ extern int usb_serial_generic_register(int debug); | |||
317 | extern void usb_serial_generic_deregister(void); | 319 | extern void usb_serial_generic_deregister(void); |
318 | extern void usb_serial_generic_resubmit_read_urb(struct usb_serial_port *port, | 320 | extern void usb_serial_generic_resubmit_read_urb(struct usb_serial_port *port, |
319 | gfp_t mem_flags); | 321 | gfp_t mem_flags); |
320 | extern int usb_serial_handle_sysrq_char(struct usb_serial_port *port, | 322 | extern int usb_serial_handle_sysrq_char(struct tty_struct *tty, |
323 | struct usb_serial_port *port, | ||
321 | unsigned int ch); | 324 | unsigned int ch); |
322 | extern int usb_serial_handle_break(struct usb_serial_port *port); | 325 | extern int usb_serial_handle_break(struct usb_serial_port *port); |
323 | 326 | ||
diff --git a/include/linux/usb/usbnet.h b/include/linux/usb/usbnet.h index 5d44059f6d63..bb69e256cd16 100644 --- a/include/linux/usb/usbnet.h +++ b/include/linux/usb/usbnet.h | |||
@@ -42,7 +42,6 @@ struct usbnet { | |||
42 | 42 | ||
43 | /* protocol/interface state */ | 43 | /* protocol/interface state */ |
44 | struct net_device *net; | 44 | struct net_device *net; |
45 | struct net_device_stats stats; | ||
46 | int msg_enable; | 45 | int msg_enable; |
47 | unsigned long data [5]; | 46 | unsigned long data [5]; |
48 | u32 xid; | 47 | u32 xid; |
@@ -54,6 +53,7 @@ struct usbnet { | |||
54 | struct sk_buff_head rxq; | 53 | struct sk_buff_head rxq; |
55 | struct sk_buff_head txq; | 54 | struct sk_buff_head txq; |
56 | struct sk_buff_head done; | 55 | struct sk_buff_head done; |
56 | struct sk_buff_head rxq_pause; | ||
57 | struct urb *interrupt; | 57 | struct urb *interrupt; |
58 | struct tasklet_struct bh; | 58 | struct tasklet_struct bh; |
59 | 59 | ||
@@ -64,6 +64,7 @@ struct usbnet { | |||
64 | # define EVENT_RX_MEMORY 2 | 64 | # define EVENT_RX_MEMORY 2 |
65 | # define EVENT_STS_SPLIT 3 | 65 | # define EVENT_STS_SPLIT 3 |
66 | # define EVENT_LINK_RESET 4 | 66 | # define EVENT_LINK_RESET 4 |
67 | # define EVENT_RX_PAUSED 5 | ||
67 | }; | 68 | }; |
68 | 69 | ||
69 | static inline struct usb_driver *driver_of(struct usb_interface *intf) | 70 | static inline struct usb_driver *driver_of(struct usb_interface *intf) |
@@ -87,6 +88,7 @@ struct driver_info { | |||
87 | 88 | ||
88 | #define FLAG_FRAMING_AX 0x0040 /* AX88772/178 packets */ | 89 | #define FLAG_FRAMING_AX 0x0040 /* AX88772/178 packets */ |
89 | #define FLAG_WLAN 0x0080 /* use "wlan%d" names */ | 90 | #define FLAG_WLAN 0x0080 /* use "wlan%d" names */ |
91 | #define FLAG_AVOID_UNLINK_URBS 0x0100 /* don't unlink urbs at usbnet_stop() */ | ||
90 | 92 | ||
91 | 93 | ||
92 | /* init device ... can sleep, or cause probe() failure */ | 94 | /* init device ... can sleep, or cause probe() failure */ |
@@ -98,6 +100,9 @@ struct driver_info { | |||
98 | /* reset device ... can sleep */ | 100 | /* reset device ... can sleep */ |
99 | int (*reset)(struct usbnet *); | 101 | int (*reset)(struct usbnet *); |
100 | 102 | ||
103 | /* stop device ... can sleep */ | ||
104 | int (*stop)(struct usbnet *); | ||
105 | |||
101 | /* see if peer is connected ... can sleep */ | 106 | /* see if peer is connected ... can sleep */ |
102 | int (*check_connect)(struct usbnet *); | 107 | int (*check_connect)(struct usbnet *); |
103 | 108 | ||
@@ -119,9 +124,8 @@ struct driver_info { | |||
119 | * right after minidriver have initialized hardware. */ | 124 | * right after minidriver have initialized hardware. */ |
120 | int (*early_init)(struct usbnet *dev); | 125 | int (*early_init)(struct usbnet *dev); |
121 | 126 | ||
122 | /* called by minidriver when link state changes, state: 0=disconnect, | 127 | /* called by minidriver when receiving indication */ |
123 | * 1=connect */ | 128 | void (*indication)(struct usbnet *dev, void *ind, int indlen); |
124 | void (*link_change)(struct usbnet *dev, int state); | ||
125 | 129 | ||
126 | /* for new devices, use the descriptor-reading code instead */ | 130 | /* for new devices, use the descriptor-reading code instead */ |
127 | int in; /* rx endpoint */ | 131 | int in; /* rx endpoint */ |
@@ -178,7 +182,8 @@ struct skb_data { /* skb->cb is one of these */ | |||
178 | 182 | ||
179 | extern int usbnet_open (struct net_device *net); | 183 | extern int usbnet_open (struct net_device *net); |
180 | extern int usbnet_stop (struct net_device *net); | 184 | extern int usbnet_stop (struct net_device *net); |
181 | extern int usbnet_start_xmit (struct sk_buff *skb, struct net_device *net); | 185 | extern netdev_tx_t usbnet_start_xmit (struct sk_buff *skb, |
186 | struct net_device *net); | ||
182 | extern void usbnet_tx_timeout (struct net_device *net); | 187 | extern void usbnet_tx_timeout (struct net_device *net); |
183 | extern int usbnet_change_mtu (struct net_device *net, int new_mtu); | 188 | extern int usbnet_change_mtu (struct net_device *net, int new_mtu); |
184 | 189 | ||
@@ -188,6 +193,10 @@ extern void usbnet_defer_kevent (struct usbnet *, int); | |||
188 | extern void usbnet_skb_return (struct usbnet *, struct sk_buff *); | 193 | extern void usbnet_skb_return (struct usbnet *, struct sk_buff *); |
189 | extern void usbnet_unlink_rx_urbs(struct usbnet *); | 194 | extern void usbnet_unlink_rx_urbs(struct usbnet *); |
190 | 195 | ||
196 | extern void usbnet_pause_rx(struct usbnet *); | ||
197 | extern void usbnet_resume_rx(struct usbnet *); | ||
198 | extern void usbnet_purge_paused_rxq(struct usbnet *); | ||
199 | |||
191 | extern int usbnet_get_settings (struct net_device *net, struct ethtool_cmd *cmd); | 200 | extern int usbnet_get_settings (struct net_device *net, struct ethtool_cmd *cmd); |
192 | extern int usbnet_set_settings (struct net_device *net, struct ethtool_cmd *cmd); | 201 | extern int usbnet_set_settings (struct net_device *net, struct ethtool_cmd *cmd); |
193 | extern u32 usbnet_get_link (struct net_device *net); | 202 | extern u32 usbnet_get_link (struct net_device *net); |
diff --git a/include/linux/usb/video.h b/include/linux/usb/video.h new file mode 100644 index 000000000000..be436d9ee479 --- /dev/null +++ b/include/linux/usb/video.h | |||
@@ -0,0 +1,164 @@ | |||
1 | /* | ||
2 | * USB Video Class definitions. | ||
3 | * | ||
4 | * Copyright (C) 2009 Laurent Pinchart <laurent.pinchart@skynet.be> | ||
5 | * | ||
6 | * This file holds USB constants and structures defined by the USB Device | ||
7 | * Class Definition for Video Devices. Unless otherwise stated, comments | ||
8 | * below reference relevant sections of the USB Video Class 1.1 specification | ||
9 | * available at | ||
10 | * | ||
11 | * http://www.usb.org/developers/devclass_docs/USB_Video_Class_1_1.zip | ||
12 | */ | ||
13 | |||
14 | #ifndef __LINUX_USB_VIDEO_H | ||
15 | #define __LINUX_USB_VIDEO_H | ||
16 | |||
17 | #include <linux/types.h> | ||
18 | |||
19 | /* -------------------------------------------------------------------------- | ||
20 | * UVC constants | ||
21 | */ | ||
22 | |||
23 | /* A.2. Video Interface Subclass Codes */ | ||
24 | #define UVC_SC_UNDEFINED 0x00 | ||
25 | #define UVC_SC_VIDEOCONTROL 0x01 | ||
26 | #define UVC_SC_VIDEOSTREAMING 0x02 | ||
27 | #define UVC_SC_VIDEO_INTERFACE_COLLECTION 0x03 | ||
28 | |||
29 | /* A.3. Video Interface Protocol Codes */ | ||
30 | #define UVC_PC_PROTOCOL_UNDEFINED 0x00 | ||
31 | |||
32 | /* A.5. Video Class-Specific VC Interface Descriptor Subtypes */ | ||
33 | #define UVC_VC_DESCRIPTOR_UNDEFINED 0x00 | ||
34 | #define UVC_VC_HEADER 0x01 | ||
35 | #define UVC_VC_INPUT_TERMINAL 0x02 | ||
36 | #define UVC_VC_OUTPUT_TERMINAL 0x03 | ||
37 | #define UVC_VC_SELECTOR_UNIT 0x04 | ||
38 | #define UVC_VC_PROCESSING_UNIT 0x05 | ||
39 | #define UVC_VC_EXTENSION_UNIT 0x06 | ||
40 | |||
41 | /* A.6. Video Class-Specific VS Interface Descriptor Subtypes */ | ||
42 | #define UVC_VS_UNDEFINED 0x00 | ||
43 | #define UVC_VS_INPUT_HEADER 0x01 | ||
44 | #define UVC_VS_OUTPUT_HEADER 0x02 | ||
45 | #define UVC_VS_STILL_IMAGE_FRAME 0x03 | ||
46 | #define UVC_VS_FORMAT_UNCOMPRESSED 0x04 | ||
47 | #define UVC_VS_FRAME_UNCOMPRESSED 0x05 | ||
48 | #define UVC_VS_FORMAT_MJPEG 0x06 | ||
49 | #define UVC_VS_FRAME_MJPEG 0x07 | ||
50 | #define UVC_VS_FORMAT_MPEG2TS 0x0a | ||
51 | #define UVC_VS_FORMAT_DV 0x0c | ||
52 | #define UVC_VS_COLORFORMAT 0x0d | ||
53 | #define UVC_VS_FORMAT_FRAME_BASED 0x10 | ||
54 | #define UVC_VS_FRAME_FRAME_BASED 0x11 | ||
55 | #define UVC_VS_FORMAT_STREAM_BASED 0x12 | ||
56 | |||
57 | /* A.7. Video Class-Specific Endpoint Descriptor Subtypes */ | ||
58 | #define UVC_EP_UNDEFINED 0x00 | ||
59 | #define UVC_EP_GENERAL 0x01 | ||
60 | #define UVC_EP_ENDPOINT 0x02 | ||
61 | #define UVC_EP_INTERRUPT 0x03 | ||
62 | |||
63 | /* A.8. Video Class-Specific Request Codes */ | ||
64 | #define UVC_RC_UNDEFINED 0x00 | ||
65 | #define UVC_SET_CUR 0x01 | ||
66 | #define UVC_GET_CUR 0x81 | ||
67 | #define UVC_GET_MIN 0x82 | ||
68 | #define UVC_GET_MAX 0x83 | ||
69 | #define UVC_GET_RES 0x84 | ||
70 | #define UVC_GET_LEN 0x85 | ||
71 | #define UVC_GET_INFO 0x86 | ||
72 | #define UVC_GET_DEF 0x87 | ||
73 | |||
74 | /* A.9.1. VideoControl Interface Control Selectors */ | ||
75 | #define UVC_VC_CONTROL_UNDEFINED 0x00 | ||
76 | #define UVC_VC_VIDEO_POWER_MODE_CONTROL 0x01 | ||
77 | #define UVC_VC_REQUEST_ERROR_CODE_CONTROL 0x02 | ||
78 | |||
79 | /* A.9.2. Terminal Control Selectors */ | ||
80 | #define UVC_TE_CONTROL_UNDEFINED 0x00 | ||
81 | |||
82 | /* A.9.3. Selector Unit Control Selectors */ | ||
83 | #define UVC_SU_CONTROL_UNDEFINED 0x00 | ||
84 | #define UVC_SU_INPUT_SELECT_CONTROL 0x01 | ||
85 | |||
86 | /* A.9.4. Camera Terminal Control Selectors */ | ||
87 | #define UVC_CT_CONTROL_UNDEFINED 0x00 | ||
88 | #define UVC_CT_SCANNING_MODE_CONTROL 0x01 | ||
89 | #define UVC_CT_AE_MODE_CONTROL 0x02 | ||
90 | #define UVC_CT_AE_PRIORITY_CONTROL 0x03 | ||
91 | #define UVC_CT_EXPOSURE_TIME_ABSOLUTE_CONTROL 0x04 | ||
92 | #define UVC_CT_EXPOSURE_TIME_RELATIVE_CONTROL 0x05 | ||
93 | #define UVC_CT_FOCUS_ABSOLUTE_CONTROL 0x06 | ||
94 | #define UVC_CT_FOCUS_RELATIVE_CONTROL 0x07 | ||
95 | #define UVC_CT_FOCUS_AUTO_CONTROL 0x08 | ||
96 | #define UVC_CT_IRIS_ABSOLUTE_CONTROL 0x09 | ||
97 | #define UVC_CT_IRIS_RELATIVE_CONTROL 0x0a | ||
98 | #define UVC_CT_ZOOM_ABSOLUTE_CONTROL 0x0b | ||
99 | #define UVC_CT_ZOOM_RELATIVE_CONTROL 0x0c | ||
100 | #define UVC_CT_PANTILT_ABSOLUTE_CONTROL 0x0d | ||
101 | #define UVC_CT_PANTILT_RELATIVE_CONTROL 0x0e | ||
102 | #define UVC_CT_ROLL_ABSOLUTE_CONTROL 0x0f | ||
103 | #define UVC_CT_ROLL_RELATIVE_CONTROL 0x10 | ||
104 | #define UVC_CT_PRIVACY_CONTROL 0x11 | ||
105 | |||
106 | /* A.9.5. Processing Unit Control Selectors */ | ||
107 | #define UVC_PU_CONTROL_UNDEFINED 0x00 | ||
108 | #define UVC_PU_BACKLIGHT_COMPENSATION_CONTROL 0x01 | ||
109 | #define UVC_PU_BRIGHTNESS_CONTROL 0x02 | ||
110 | #define UVC_PU_CONTRAST_CONTROL 0x03 | ||
111 | #define UVC_PU_GAIN_CONTROL 0x04 | ||
112 | #define UVC_PU_POWER_LINE_FREQUENCY_CONTROL 0x05 | ||
113 | #define UVC_PU_HUE_CONTROL 0x06 | ||
114 | #define UVC_PU_SATURATION_CONTROL 0x07 | ||
115 | #define UVC_PU_SHARPNESS_CONTROL 0x08 | ||
116 | #define UVC_PU_GAMMA_CONTROL 0x09 | ||
117 | #define UVC_PU_WHITE_BALANCE_TEMPERATURE_CONTROL 0x0a | ||
118 | #define UVC_PU_WHITE_BALANCE_TEMPERATURE_AUTO_CONTROL 0x0b | ||
119 | #define UVC_PU_WHITE_BALANCE_COMPONENT_CONTROL 0x0c | ||
120 | #define UVC_PU_WHITE_BALANCE_COMPONENT_AUTO_CONTROL 0x0d | ||
121 | #define UVC_PU_DIGITAL_MULTIPLIER_CONTROL 0x0e | ||
122 | #define UVC_PU_DIGITAL_MULTIPLIER_LIMIT_CONTROL 0x0f | ||
123 | #define UVC_PU_HUE_AUTO_CONTROL 0x10 | ||
124 | #define UVC_PU_ANALOG_VIDEO_STANDARD_CONTROL 0x11 | ||
125 | #define UVC_PU_ANALOG_LOCK_STATUS_CONTROL 0x12 | ||
126 | |||
127 | /* A.9.7. VideoStreaming Interface Control Selectors */ | ||
128 | #define UVC_VS_CONTROL_UNDEFINED 0x00 | ||
129 | #define UVC_VS_PROBE_CONTROL 0x01 | ||
130 | #define UVC_VS_COMMIT_CONTROL 0x02 | ||
131 | #define UVC_VS_STILL_PROBE_CONTROL 0x03 | ||
132 | #define UVC_VS_STILL_COMMIT_CONTROL 0x04 | ||
133 | #define UVC_VS_STILL_IMAGE_TRIGGER_CONTROL 0x05 | ||
134 | #define UVC_VS_STREAM_ERROR_CODE_CONTROL 0x06 | ||
135 | #define UVC_VS_GENERATE_KEY_FRAME_CONTROL 0x07 | ||
136 | #define UVC_VS_UPDATE_FRAME_SEGMENT_CONTROL 0x08 | ||
137 | #define UVC_VS_SYNC_DELAY_CONTROL 0x09 | ||
138 | |||
139 | /* B.1. USB Terminal Types */ | ||
140 | #define UVC_TT_VENDOR_SPECIFIC 0x0100 | ||
141 | #define UVC_TT_STREAMING 0x0101 | ||
142 | |||
143 | /* B.2. Input Terminal Types */ | ||
144 | #define UVC_ITT_VENDOR_SPECIFIC 0x0200 | ||
145 | #define UVC_ITT_CAMERA 0x0201 | ||
146 | #define UVC_ITT_MEDIA_TRANSPORT_INPUT 0x0202 | ||
147 | |||
148 | /* B.3. Output Terminal Types */ | ||
149 | #define UVC_OTT_VENDOR_SPECIFIC 0x0300 | ||
150 | #define UVC_OTT_DISPLAY 0x0301 | ||
151 | #define UVC_OTT_MEDIA_TRANSPORT_OUTPUT 0x0302 | ||
152 | |||
153 | /* B.4. External Terminal Types */ | ||
154 | #define UVC_EXTERNAL_VENDOR_SPECIFIC 0x0400 | ||
155 | #define UVC_COMPOSITE_CONNECTOR 0x0401 | ||
156 | #define UVC_SVIDEO_CONNECTOR 0x0402 | ||
157 | #define UVC_COMPONENT_CONNECTOR 0x0403 | ||
158 | |||
159 | /* 2.4.2.2. Status Packet Type */ | ||
160 | #define UVC_STATUS_TYPE_CONTROL 1 | ||
161 | #define UVC_STATUS_TYPE_STREAMING 2 | ||
162 | |||
163 | #endif /* __LINUX_USB_VIDEO_H */ | ||
164 | |||
diff --git a/include/linux/uwb.h b/include/linux/uwb.h index c02128991ff7..7fc9746f22cd 100644 --- a/include/linux/uwb.h +++ b/include/linux/uwb.h | |||
@@ -597,7 +597,7 @@ void uwb_rc_neh_grok(struct uwb_rc *, void *, size_t); | |||
597 | void uwb_rc_neh_error(struct uwb_rc *, int); | 597 | void uwb_rc_neh_error(struct uwb_rc *, int); |
598 | void uwb_rc_reset_all(struct uwb_rc *rc); | 598 | void uwb_rc_reset_all(struct uwb_rc *rc); |
599 | void uwb_rc_pre_reset(struct uwb_rc *rc); | 599 | void uwb_rc_pre_reset(struct uwb_rc *rc); |
600 | void uwb_rc_post_reset(struct uwb_rc *rc); | 600 | int uwb_rc_post_reset(struct uwb_rc *rc); |
601 | 601 | ||
602 | /** | 602 | /** |
603 | * uwb_rsv_is_owner - is the owner of this reservation the RC? | 603 | * uwb_rsv_is_owner - is the owner of this reservation the RC? |
diff --git a/include/linux/vgaarb.h b/include/linux/vgaarb.h new file mode 100644 index 000000000000..e81c64af80c1 --- /dev/null +++ b/include/linux/vgaarb.h | |||
@@ -0,0 +1,200 @@ | |||
1 | /* | ||
2 | * vgaarb.c | ||
3 | * | ||
4 | * (C) Copyright 2005 Benjamin Herrenschmidt <benh@kernel.crashing.org> | ||
5 | * (C) Copyright 2007 Paulo R. Zanoni <przanoni@gmail.com> | ||
6 | * (C) Copyright 2007, 2009 Tiago Vignatti <vignatti@freedesktop.org> | ||
7 | */ | ||
8 | |||
9 | #ifndef LINUX_VGA_H | ||
10 | |||
11 | #include <asm/vga.h> | ||
12 | |||
13 | /* Legacy VGA regions */ | ||
14 | #define VGA_RSRC_NONE 0x00 | ||
15 | #define VGA_RSRC_LEGACY_IO 0x01 | ||
16 | #define VGA_RSRC_LEGACY_MEM 0x02 | ||
17 | #define VGA_RSRC_LEGACY_MASK (VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM) | ||
18 | /* Non-legacy access */ | ||
19 | #define VGA_RSRC_NORMAL_IO 0x04 | ||
20 | #define VGA_RSRC_NORMAL_MEM 0x08 | ||
21 | |||
22 | /* Passing that instead of a pci_dev to use the system "default" | ||
23 | * device, that is the one used by vgacon. Archs will probably | ||
24 | * have to provide their own vga_default_device(); | ||
25 | */ | ||
26 | #define VGA_DEFAULT_DEVICE (NULL) | ||
27 | |||
28 | /* For use by clients */ | ||
29 | |||
30 | /** | ||
31 | * vga_set_legacy_decoding | ||
32 | * | ||
33 | * @pdev: pci device of the VGA card | ||
34 | * @decodes: bit mask of what legacy regions the card decodes | ||
35 | * | ||
36 | * Indicates to the arbiter if the card decodes legacy VGA IOs, | ||
37 | * legacy VGA Memory, both, or none. All cards default to both, | ||
38 | * the card driver (fbdev for example) should tell the arbiter | ||
39 | * if it has disabled legacy decoding, so the card can be left | ||
40 | * out of the arbitration process (and can be safe to take | ||
41 | * interrupts at any time. | ||
42 | */ | ||
43 | extern void vga_set_legacy_decoding(struct pci_dev *pdev, | ||
44 | unsigned int decodes); | ||
45 | |||
46 | /** | ||
47 | * vga_get - acquire & locks VGA resources | ||
48 | * | ||
49 | * @pdev: pci device of the VGA card or NULL for the system default | ||
50 | * @rsrc: bit mask of resources to acquire and lock | ||
51 | * @interruptible: blocking should be interruptible by signals ? | ||
52 | * | ||
53 | * This function acquires VGA resources for the given | ||
54 | * card and mark those resources locked. If the resource requested | ||
55 | * are "normal" (and not legacy) resources, the arbiter will first check | ||
56 | * wether the card is doing legacy decoding for that type of resource. If | ||
57 | * yes, the lock is "converted" into a legacy resource lock. | ||
58 | * The arbiter will first look for all VGA cards that might conflict | ||
59 | * and disable their IOs and/or Memory access, inlcuding VGA forwarding | ||
60 | * on P2P bridges if necessary, so that the requested resources can | ||
61 | * be used. Then, the card is marked as locking these resources and | ||
62 | * the IO and/or Memory accesse are enabled on the card (including | ||
63 | * VGA forwarding on parent P2P bridges if any). | ||
64 | * This function will block if some conflicting card is already locking | ||
65 | * one of the required resources (or any resource on a different bus | ||
66 | * segment, since P2P bridges don't differenciate VGA memory and IO | ||
67 | * afaik). You can indicate wether this blocking should be interruptible | ||
68 | * by a signal (for userland interface) or not. | ||
69 | * Must not be called at interrupt time or in atomic context. | ||
70 | * If the card already owns the resources, the function succeeds. | ||
71 | * Nested calls are supported (a per-resource counter is maintained) | ||
72 | */ | ||
73 | |||
74 | extern int vga_get(struct pci_dev *pdev, unsigned int rsrc, | ||
75 | int interruptible); | ||
76 | |||
77 | /** | ||
78 | * vga_get_interruptible | ||
79 | * | ||
80 | * Shortcut to vga_get | ||
81 | */ | ||
82 | |||
83 | static inline int vga_get_interruptible(struct pci_dev *pdev, | ||
84 | unsigned int rsrc) | ||
85 | { | ||
86 | return vga_get(pdev, rsrc, 1); | ||
87 | } | ||
88 | |||
89 | /** | ||
90 | * vga_get_uninterruptible | ||
91 | * | ||
92 | * Shortcut to vga_get | ||
93 | */ | ||
94 | |||
95 | static inline int vga_get_uninterruptible(struct pci_dev *pdev, | ||
96 | unsigned int rsrc) | ||
97 | { | ||
98 | return vga_get(pdev, rsrc, 0); | ||
99 | } | ||
100 | |||
101 | /** | ||
102 | * vga_tryget - try to acquire & lock legacy VGA resources | ||
103 | * | ||
104 | * @pdev: pci devivce of VGA card or NULL for system default | ||
105 | * @rsrc: bit mask of resources to acquire and lock | ||
106 | * | ||
107 | * This function performs the same operation as vga_get(), but | ||
108 | * will return an error (-EBUSY) instead of blocking if the resources | ||
109 | * are already locked by another card. It can be called in any context | ||
110 | */ | ||
111 | |||
112 | extern int vga_tryget(struct pci_dev *pdev, unsigned int rsrc); | ||
113 | |||
114 | /** | ||
115 | * vga_put - release lock on legacy VGA resources | ||
116 | * | ||
117 | * @pdev: pci device of VGA card or NULL for system default | ||
118 | * @rsrc: but mask of resource to release | ||
119 | * | ||
120 | * This function releases resources previously locked by vga_get() | ||
121 | * or vga_tryget(). The resources aren't disabled right away, so | ||
122 | * that a subsequence vga_get() on the same card will succeed | ||
123 | * immediately. Resources have a counter, so locks are only | ||
124 | * released if the counter reaches 0. | ||
125 | */ | ||
126 | |||
127 | extern void vga_put(struct pci_dev *pdev, unsigned int rsrc); | ||
128 | |||
129 | |||
130 | /** | ||
131 | * vga_default_device | ||
132 | * | ||
133 | * This can be defined by the platform. The default implementation | ||
134 | * is rather dumb and will probably only work properly on single | ||
135 | * vga card setups and/or x86 platforms. | ||
136 | * | ||
137 | * If your VGA default device is not PCI, you'll have to return | ||
138 | * NULL here. In this case, I assume it will not conflict with | ||
139 | * any PCI card. If this is not true, I'll have to define two archs | ||
140 | * hooks for enabling/disabling the VGA default device if that is | ||
141 | * possible. This may be a problem with real _ISA_ VGA cards, in | ||
142 | * addition to a PCI one. I don't know at this point how to deal | ||
143 | * with that card. Can theirs IOs be disabled at all ? If not, then | ||
144 | * I suppose it's a matter of having the proper arch hook telling | ||
145 | * us about it, so we basically never allow anybody to succeed a | ||
146 | * vga_get()... | ||
147 | */ | ||
148 | |||
149 | #ifndef __ARCH_HAS_VGA_DEFAULT_DEVICE | ||
150 | extern struct pci_dev *vga_default_device(void); | ||
151 | #endif | ||
152 | |||
153 | /** | ||
154 | * vga_conflicts | ||
155 | * | ||
156 | * Architectures should define this if they have several | ||
157 | * independant PCI domains that can afford concurrent VGA | ||
158 | * decoding | ||
159 | */ | ||
160 | |||
161 | #ifndef __ARCH_HAS_VGA_CONFLICT | ||
162 | static inline int vga_conflicts(struct pci_dev *p1, struct pci_dev *p2) | ||
163 | { | ||
164 | return 1; | ||
165 | } | ||
166 | #endif | ||
167 | |||
168 | /** | ||
169 | * vga_client_register | ||
170 | * | ||
171 | * @pdev: pci device of the VGA client | ||
172 | * @cookie: client cookie to be used in callbacks | ||
173 | * @irq_set_state: irq state change callback | ||
174 | * @set_vga_decode: vga decode change callback | ||
175 | * | ||
176 | * return value: 0 on success, -1 on failure | ||
177 | * Register a client with the VGA arbitration logic | ||
178 | * | ||
179 | * Clients have two callback mechanisms they can use. | ||
180 | * irq enable/disable callback - | ||
181 | * If a client can't disable its GPUs VGA resources, then we | ||
182 | * need to be able to ask it to turn off its irqs when we | ||
183 | * turn off its mem and io decoding. | ||
184 | * set_vga_decode | ||
185 | * If a client can disable its GPU VGA resource, it will | ||
186 | * get a callback from this to set the encode/decode state | ||
187 | * | ||
188 | * Rationale: we cannot disable VGA decode resources unconditionally | ||
189 | * some single GPU laptops seem to require ACPI or BIOS access to the | ||
190 | * VGA registers to control things like backlights etc. | ||
191 | * Hopefully newer multi-GPU laptops do something saner, and desktops | ||
192 | * won't have any special ACPI for this. | ||
193 | * They driver will get a callback when VGA arbitration is first used | ||
194 | * by userspace since we some older X servers have issues. | ||
195 | */ | ||
196 | int vga_client_register(struct pci_dev *pdev, void *cookie, | ||
197 | void (*irq_set_state)(void *cookie, bool state), | ||
198 | unsigned int (*set_vga_decode)(void *cookie, bool state)); | ||
199 | |||
200 | #endif /* LINUX_VGA_H */ | ||
diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h index 8a025d510904..b59e78c57161 100644 --- a/include/linux/videodev2.h +++ b/include/linux/videodev2.h | |||
@@ -167,6 +167,7 @@ enum v4l2_ctrl_type { | |||
167 | V4L2_CTRL_TYPE_BUTTON = 4, | 167 | V4L2_CTRL_TYPE_BUTTON = 4, |
168 | V4L2_CTRL_TYPE_INTEGER64 = 5, | 168 | V4L2_CTRL_TYPE_INTEGER64 = 5, |
169 | V4L2_CTRL_TYPE_CTRL_CLASS = 6, | 169 | V4L2_CTRL_TYPE_CTRL_CLASS = 6, |
170 | V4L2_CTRL_TYPE_STRING = 7, | ||
170 | }; | 171 | }; |
171 | 172 | ||
172 | enum v4l2_tuner_type { | 173 | enum v4l2_tuner_type { |
@@ -252,10 +253,12 @@ struct v4l2_capability { | |||
252 | #define V4L2_CAP_RDS_CAPTURE 0x00000100 /* RDS data capture */ | 253 | #define V4L2_CAP_RDS_CAPTURE 0x00000100 /* RDS data capture */ |
253 | #define V4L2_CAP_VIDEO_OUTPUT_OVERLAY 0x00000200 /* Can do video output overlay */ | 254 | #define V4L2_CAP_VIDEO_OUTPUT_OVERLAY 0x00000200 /* Can do video output overlay */ |
254 | #define V4L2_CAP_HW_FREQ_SEEK 0x00000400 /* Can do hardware frequency seek */ | 255 | #define V4L2_CAP_HW_FREQ_SEEK 0x00000400 /* Can do hardware frequency seek */ |
256 | #define V4L2_CAP_RDS_OUTPUT 0x00000800 /* Is an RDS encoder */ | ||
255 | 257 | ||
256 | #define V4L2_CAP_TUNER 0x00010000 /* has a tuner */ | 258 | #define V4L2_CAP_TUNER 0x00010000 /* has a tuner */ |
257 | #define V4L2_CAP_AUDIO 0x00020000 /* has audio support */ | 259 | #define V4L2_CAP_AUDIO 0x00020000 /* has audio support */ |
258 | #define V4L2_CAP_RADIO 0x00040000 /* is a radio device */ | 260 | #define V4L2_CAP_RADIO 0x00040000 /* is a radio device */ |
261 | #define V4L2_CAP_MODULATOR 0x00080000 /* has a modulator */ | ||
259 | 262 | ||
260 | #define V4L2_CAP_READWRITE 0x01000000 /* read/write systemcalls */ | 263 | #define V4L2_CAP_READWRITE 0x01000000 /* read/write systemcalls */ |
261 | #define V4L2_CAP_ASYNCIO 0x02000000 /* async I/O */ | 264 | #define V4L2_CAP_ASYNCIO 0x02000000 /* async I/O */ |
@@ -275,7 +278,9 @@ struct v4l2_pix_format { | |||
275 | __u32 priv; /* private data, depends on pixelformat */ | 278 | __u32 priv; /* private data, depends on pixelformat */ |
276 | }; | 279 | }; |
277 | 280 | ||
278 | /* Pixel format FOURCC depth Description */ | 281 | /* Pixel format FOURCC depth Description */ |
282 | |||
283 | /* RGB formats */ | ||
279 | #define V4L2_PIX_FMT_RGB332 v4l2_fourcc('R', 'G', 'B', '1') /* 8 RGB-3-3-2 */ | 284 | #define V4L2_PIX_FMT_RGB332 v4l2_fourcc('R', 'G', 'B', '1') /* 8 RGB-3-3-2 */ |
280 | #define V4L2_PIX_FMT_RGB444 v4l2_fourcc('R', '4', '4', '4') /* 16 xxxxrrrr ggggbbbb */ | 285 | #define V4L2_PIX_FMT_RGB444 v4l2_fourcc('R', '4', '4', '4') /* 16 xxxxrrrr ggggbbbb */ |
281 | #define V4L2_PIX_FMT_RGB555 v4l2_fourcc('R', 'G', 'B', 'O') /* 16 RGB-5-5-5 */ | 286 | #define V4L2_PIX_FMT_RGB555 v4l2_fourcc('R', 'G', 'B', 'O') /* 16 RGB-5-5-5 */ |
@@ -286,12 +291,20 @@ struct v4l2_pix_format { | |||
286 | #define V4L2_PIX_FMT_RGB24 v4l2_fourcc('R', 'G', 'B', '3') /* 24 RGB-8-8-8 */ | 291 | #define V4L2_PIX_FMT_RGB24 v4l2_fourcc('R', 'G', 'B', '3') /* 24 RGB-8-8-8 */ |
287 | #define V4L2_PIX_FMT_BGR32 v4l2_fourcc('B', 'G', 'R', '4') /* 32 BGR-8-8-8-8 */ | 292 | #define V4L2_PIX_FMT_BGR32 v4l2_fourcc('B', 'G', 'R', '4') /* 32 BGR-8-8-8-8 */ |
288 | #define V4L2_PIX_FMT_RGB32 v4l2_fourcc('R', 'G', 'B', '4') /* 32 RGB-8-8-8-8 */ | 293 | #define V4L2_PIX_FMT_RGB32 v4l2_fourcc('R', 'G', 'B', '4') /* 32 RGB-8-8-8-8 */ |
294 | |||
295 | /* Grey formats */ | ||
289 | #define V4L2_PIX_FMT_GREY v4l2_fourcc('G', 'R', 'E', 'Y') /* 8 Greyscale */ | 296 | #define V4L2_PIX_FMT_GREY v4l2_fourcc('G', 'R', 'E', 'Y') /* 8 Greyscale */ |
290 | #define V4L2_PIX_FMT_Y16 v4l2_fourcc('Y', '1', '6', ' ') /* 16 Greyscale */ | 297 | #define V4L2_PIX_FMT_Y16 v4l2_fourcc('Y', '1', '6', ' ') /* 16 Greyscale */ |
298 | |||
299 | /* Palette formats */ | ||
291 | #define V4L2_PIX_FMT_PAL8 v4l2_fourcc('P', 'A', 'L', '8') /* 8 8-bit palette */ | 300 | #define V4L2_PIX_FMT_PAL8 v4l2_fourcc('P', 'A', 'L', '8') /* 8 8-bit palette */ |
301 | |||
302 | /* Luminance+Chrominance formats */ | ||
292 | #define V4L2_PIX_FMT_YVU410 v4l2_fourcc('Y', 'V', 'U', '9') /* 9 YVU 4:1:0 */ | 303 | #define V4L2_PIX_FMT_YVU410 v4l2_fourcc('Y', 'V', 'U', '9') /* 9 YVU 4:1:0 */ |
293 | #define V4L2_PIX_FMT_YVU420 v4l2_fourcc('Y', 'V', '1', '2') /* 12 YVU 4:2:0 */ | 304 | #define V4L2_PIX_FMT_YVU420 v4l2_fourcc('Y', 'V', '1', '2') /* 12 YVU 4:2:0 */ |
294 | #define V4L2_PIX_FMT_YUYV v4l2_fourcc('Y', 'U', 'Y', 'V') /* 16 YUV 4:2:2 */ | 305 | #define V4L2_PIX_FMT_YUYV v4l2_fourcc('Y', 'U', 'Y', 'V') /* 16 YUV 4:2:2 */ |
306 | #define V4L2_PIX_FMT_YYUV v4l2_fourcc('Y', 'Y', 'U', 'V') /* 16 YUV 4:2:2 */ | ||
307 | #define V4L2_PIX_FMT_YVYU v4l2_fourcc('Y', 'V', 'Y', 'U') /* 16 YVU 4:2:2 */ | ||
295 | #define V4L2_PIX_FMT_UYVY v4l2_fourcc('U', 'Y', 'V', 'Y') /* 16 YUV 4:2:2 */ | 308 | #define V4L2_PIX_FMT_UYVY v4l2_fourcc('U', 'Y', 'V', 'Y') /* 16 YUV 4:2:2 */ |
296 | #define V4L2_PIX_FMT_VYUY v4l2_fourcc('V', 'Y', 'U', 'Y') /* 16 YUV 4:2:2 */ | 309 | #define V4L2_PIX_FMT_VYUY v4l2_fourcc('V', 'Y', 'U', 'Y') /* 16 YUV 4:2:2 */ |
297 | #define V4L2_PIX_FMT_YUV422P v4l2_fourcc('4', '2', '2', 'P') /* 16 YVU422 planar */ | 310 | #define V4L2_PIX_FMT_YUV422P v4l2_fourcc('4', '2', '2', 'P') /* 16 YVU422 planar */ |
@@ -301,6 +314,10 @@ struct v4l2_pix_format { | |||
301 | #define V4L2_PIX_FMT_YUV555 v4l2_fourcc('Y', 'U', 'V', 'O') /* 16 YUV-5-5-5 */ | 314 | #define V4L2_PIX_FMT_YUV555 v4l2_fourcc('Y', 'U', 'V', 'O') /* 16 YUV-5-5-5 */ |
302 | #define V4L2_PIX_FMT_YUV565 v4l2_fourcc('Y', 'U', 'V', 'P') /* 16 YUV-5-6-5 */ | 315 | #define V4L2_PIX_FMT_YUV565 v4l2_fourcc('Y', 'U', 'V', 'P') /* 16 YUV-5-6-5 */ |
303 | #define V4L2_PIX_FMT_YUV32 v4l2_fourcc('Y', 'U', 'V', '4') /* 32 YUV-8-8-8-8 */ | 316 | #define V4L2_PIX_FMT_YUV32 v4l2_fourcc('Y', 'U', 'V', '4') /* 32 YUV-8-8-8-8 */ |
317 | #define V4L2_PIX_FMT_YUV410 v4l2_fourcc('Y', 'U', 'V', '9') /* 9 YUV 4:1:0 */ | ||
318 | #define V4L2_PIX_FMT_YUV420 v4l2_fourcc('Y', 'U', '1', '2') /* 12 YUV 4:2:0 */ | ||
319 | #define V4L2_PIX_FMT_HI240 v4l2_fourcc('H', 'I', '2', '4') /* 8 8-bit color */ | ||
320 | #define V4L2_PIX_FMT_HM12 v4l2_fourcc('H', 'M', '1', '2') /* 8 YUV 4:2:0 16x16 macroblocks */ | ||
304 | 321 | ||
305 | /* two planes -- one Y, one Cr + Cb interleaved */ | 322 | /* two planes -- one Y, one Cr + Cb interleaved */ |
306 | #define V4L2_PIX_FMT_NV12 v4l2_fourcc('N', 'V', '1', '2') /* 12 Y/CbCr 4:2:0 */ | 323 | #define V4L2_PIX_FMT_NV12 v4l2_fourcc('N', 'V', '1', '2') /* 12 Y/CbCr 4:2:0 */ |
@@ -308,23 +325,17 @@ struct v4l2_pix_format { | |||
308 | #define V4L2_PIX_FMT_NV16 v4l2_fourcc('N', 'V', '1', '6') /* 16 Y/CbCr 4:2:2 */ | 325 | #define V4L2_PIX_FMT_NV16 v4l2_fourcc('N', 'V', '1', '6') /* 16 Y/CbCr 4:2:2 */ |
309 | #define V4L2_PIX_FMT_NV61 v4l2_fourcc('N', 'V', '6', '1') /* 16 Y/CrCb 4:2:2 */ | 326 | #define V4L2_PIX_FMT_NV61 v4l2_fourcc('N', 'V', '6', '1') /* 16 Y/CrCb 4:2:2 */ |
310 | 327 | ||
311 | /* The following formats are not defined in the V4L2 specification */ | 328 | /* Bayer formats - see http://www.siliconimaging.com/RGB%20Bayer.htm */ |
312 | #define V4L2_PIX_FMT_YUV410 v4l2_fourcc('Y', 'U', 'V', '9') /* 9 YUV 4:1:0 */ | ||
313 | #define V4L2_PIX_FMT_YUV420 v4l2_fourcc('Y', 'U', '1', '2') /* 12 YUV 4:2:0 */ | ||
314 | #define V4L2_PIX_FMT_YYUV v4l2_fourcc('Y', 'Y', 'U', 'V') /* 16 YUV 4:2:2 */ | ||
315 | #define V4L2_PIX_FMT_HI240 v4l2_fourcc('H', 'I', '2', '4') /* 8 8-bit color */ | ||
316 | #define V4L2_PIX_FMT_HM12 v4l2_fourcc('H', 'M', '1', '2') /* 8 YUV 4:2:0 16x16 macroblocks */ | ||
317 | |||
318 | /* see http://www.siliconimaging.com/RGB%20Bayer.htm */ | ||
319 | #define V4L2_PIX_FMT_SBGGR8 v4l2_fourcc('B', 'A', '8', '1') /* 8 BGBG.. GRGR.. */ | 329 | #define V4L2_PIX_FMT_SBGGR8 v4l2_fourcc('B', 'A', '8', '1') /* 8 BGBG.. GRGR.. */ |
320 | #define V4L2_PIX_FMT_SGBRG8 v4l2_fourcc('G', 'B', 'R', 'G') /* 8 GBGB.. RGRG.. */ | 330 | #define V4L2_PIX_FMT_SGBRG8 v4l2_fourcc('G', 'B', 'R', 'G') /* 8 GBGB.. RGRG.. */ |
321 | /* | 331 | #define V4L2_PIX_FMT_SGRBG8 v4l2_fourcc('G', 'R', 'B', 'G') /* 8 GRGR.. BGBG.. */ |
322 | * 10bit raw bayer, expanded to 16 bits | 332 | #define V4L2_PIX_FMT_SGRBG10 v4l2_fourcc('B', 'A', '1', '0') /* 10bit raw bayer */ |
323 | * xxxxrrrrrrrrrrxxxxgggggggggg xxxxggggggggggxxxxbbbbbbbbbb... | 333 | /* 10bit raw bayer DPCM compressed to 8 bits */ |
324 | */ | ||
325 | #define V4L2_PIX_FMT_SGRBG10 v4l2_fourcc('B', 'A', '1', '0') | ||
326 | /* 10bit raw bayer DPCM compressed to 8 bits */ | ||
327 | #define V4L2_PIX_FMT_SGRBG10DPCM8 v4l2_fourcc('B', 'D', '1', '0') | 334 | #define V4L2_PIX_FMT_SGRBG10DPCM8 v4l2_fourcc('B', 'D', '1', '0') |
335 | /* | ||
336 | * 10bit raw bayer, expanded to 16 bits | ||
337 | * xxxxrrrrrrrrrrxxxxgggggggggg xxxxggggggggggxxxxbbbbbbbbbb... | ||
338 | */ | ||
328 | #define V4L2_PIX_FMT_SBGGR16 v4l2_fourcc('B', 'Y', 'R', '2') /* 16 BGBG.. GRGR.. */ | 339 | #define V4L2_PIX_FMT_SBGGR16 v4l2_fourcc('B', 'Y', 'R', '2') /* 16 BGBG.. GRGR.. */ |
329 | 340 | ||
330 | /* compressed formats */ | 341 | /* compressed formats */ |
@@ -336,6 +347,7 @@ struct v4l2_pix_format { | |||
336 | /* Vendor-specific formats */ | 347 | /* Vendor-specific formats */ |
337 | #define V4L2_PIX_FMT_WNVA v4l2_fourcc('W', 'N', 'V', 'A') /* Winnov hw compress */ | 348 | #define V4L2_PIX_FMT_WNVA v4l2_fourcc('W', 'N', 'V', 'A') /* Winnov hw compress */ |
338 | #define V4L2_PIX_FMT_SN9C10X v4l2_fourcc('S', '9', '1', '0') /* SN9C10x compression */ | 349 | #define V4L2_PIX_FMT_SN9C10X v4l2_fourcc('S', '9', '1', '0') /* SN9C10x compression */ |
350 | #define V4L2_PIX_FMT_SN9C20X_I420 v4l2_fourcc('S', '9', '2', '0') /* SN9C20x YUV 4:2:0 */ | ||
339 | #define V4L2_PIX_FMT_PWC1 v4l2_fourcc('P', 'W', 'C', '1') /* pwc older webcam */ | 351 | #define V4L2_PIX_FMT_PWC1 v4l2_fourcc('P', 'W', 'C', '1') /* pwc older webcam */ |
340 | #define V4L2_PIX_FMT_PWC2 v4l2_fourcc('P', 'W', 'C', '2') /* pwc newer webcam */ | 352 | #define V4L2_PIX_FMT_PWC2 v4l2_fourcc('P', 'W', 'C', '2') /* pwc newer webcam */ |
341 | #define V4L2_PIX_FMT_ET61X251 v4l2_fourcc('E', '6', '2', '5') /* ET61X251 compression */ | 353 | #define V4L2_PIX_FMT_ET61X251 v4l2_fourcc('E', '6', '2', '5') /* ET61X251 compression */ |
@@ -347,7 +359,6 @@ struct v4l2_pix_format { | |||
347 | #define V4L2_PIX_FMT_MR97310A v4l2_fourcc('M', '3', '1', '0') /* compressed BGGR bayer */ | 359 | #define V4L2_PIX_FMT_MR97310A v4l2_fourcc('M', '3', '1', '0') /* compressed BGGR bayer */ |
348 | #define V4L2_PIX_FMT_SQ905C v4l2_fourcc('9', '0', '5', 'C') /* compressed RGGB bayer */ | 360 | #define V4L2_PIX_FMT_SQ905C v4l2_fourcc('9', '0', '5', 'C') /* compressed RGGB bayer */ |
349 | #define V4L2_PIX_FMT_PJPG v4l2_fourcc('P', 'J', 'P', 'G') /* Pixart 73xx JPEG */ | 361 | #define V4L2_PIX_FMT_PJPG v4l2_fourcc('P', 'J', 'P', 'G') /* Pixart 73xx JPEG */ |
350 | #define V4L2_PIX_FMT_YVYU v4l2_fourcc('Y', 'V', 'Y', 'U') /* 16 YVU 4:2:2 */ | ||
351 | #define V4L2_PIX_FMT_OV511 v4l2_fourcc('O', '5', '1', '1') /* ov511 JPEG */ | 362 | #define V4L2_PIX_FMT_OV511 v4l2_fourcc('O', '5', '1', '1') /* ov511 JPEG */ |
352 | #define V4L2_PIX_FMT_OV518 v4l2_fourcc('O', '5', '1', '8') /* ov518 JPEG */ | 363 | #define V4L2_PIX_FMT_OV518 v4l2_fourcc('O', '5', '1', '8') /* ov518 JPEG */ |
353 | 364 | ||
@@ -364,6 +375,7 @@ struct v4l2_fmtdesc { | |||
364 | }; | 375 | }; |
365 | 376 | ||
366 | #define V4L2_FMT_FLAG_COMPRESSED 0x0001 | 377 | #define V4L2_FMT_FLAG_COMPRESSED 0x0001 |
378 | #define V4L2_FMT_FLAG_EMULATED 0x0002 | ||
367 | 379 | ||
368 | #if 1 | 380 | #if 1 |
369 | /* Experimental Frame Size and frame rate enumeration */ | 381 | /* Experimental Frame Size and frame rate enumeration */ |
@@ -785,11 +797,12 @@ struct v4l2_control { | |||
785 | 797 | ||
786 | struct v4l2_ext_control { | 798 | struct v4l2_ext_control { |
787 | __u32 id; | 799 | __u32 id; |
788 | __u32 reserved2[2]; | 800 | __u32 size; |
801 | __u32 reserved2[1]; | ||
789 | union { | 802 | union { |
790 | __s32 value; | 803 | __s32 value; |
791 | __s64 value64; | 804 | __s64 value64; |
792 | void *reserved; | 805 | char *string; |
793 | }; | 806 | }; |
794 | } __attribute__ ((packed)); | 807 | } __attribute__ ((packed)); |
795 | 808 | ||
@@ -805,6 +818,7 @@ struct v4l2_ext_controls { | |||
805 | #define V4L2_CTRL_CLASS_USER 0x00980000 /* Old-style 'user' controls */ | 818 | #define V4L2_CTRL_CLASS_USER 0x00980000 /* Old-style 'user' controls */ |
806 | #define V4L2_CTRL_CLASS_MPEG 0x00990000 /* MPEG-compression controls */ | 819 | #define V4L2_CTRL_CLASS_MPEG 0x00990000 /* MPEG-compression controls */ |
807 | #define V4L2_CTRL_CLASS_CAMERA 0x009a0000 /* Camera class controls */ | 820 | #define V4L2_CTRL_CLASS_CAMERA 0x009a0000 /* Camera class controls */ |
821 | #define V4L2_CTRL_CLASS_FM_TX 0x009b0000 /* FM Modulator control class */ | ||
808 | 822 | ||
809 | #define V4L2_CTRL_ID_MASK (0x0fffffff) | 823 | #define V4L2_CTRL_ID_MASK (0x0fffffff) |
810 | #define V4L2_CTRL_ID2CLASS(id) ((id) & 0x0fff0000UL) | 824 | #define V4L2_CTRL_ID2CLASS(id) ((id) & 0x0fff0000UL) |
@@ -896,9 +910,10 @@ enum v4l2_colorfx { | |||
896 | V4L2_COLORFX_SEPIA = 2, | 910 | V4L2_COLORFX_SEPIA = 2, |
897 | }; | 911 | }; |
898 | #define V4L2_CID_AUTOBRIGHTNESS (V4L2_CID_BASE+32) | 912 | #define V4L2_CID_AUTOBRIGHTNESS (V4L2_CID_BASE+32) |
913 | #define V4L2_CID_BAND_STOP_FILTER (V4L2_CID_BASE+33) | ||
899 | 914 | ||
900 | /* last CID + 1 */ | 915 | /* last CID + 1 */ |
901 | #define V4L2_CID_LASTP1 (V4L2_CID_BASE+33) | 916 | #define V4L2_CID_LASTP1 (V4L2_CID_BASE+34) |
902 | 917 | ||
903 | /* MPEG-class control IDs defined by V4L2 */ | 918 | /* MPEG-class control IDs defined by V4L2 */ |
904 | #define V4L2_CID_MPEG_BASE (V4L2_CTRL_CLASS_MPEG | 0x900) | 919 | #define V4L2_CID_MPEG_BASE (V4L2_CTRL_CLASS_MPEG | 0x900) |
@@ -1144,6 +1159,39 @@ enum v4l2_exposure_auto_type { | |||
1144 | 1159 | ||
1145 | #define V4L2_CID_PRIVACY (V4L2_CID_CAMERA_CLASS_BASE+16) | 1160 | #define V4L2_CID_PRIVACY (V4L2_CID_CAMERA_CLASS_BASE+16) |
1146 | 1161 | ||
1162 | /* FM Modulator class control IDs */ | ||
1163 | #define V4L2_CID_FM_TX_CLASS_BASE (V4L2_CTRL_CLASS_FM_TX | 0x900) | ||
1164 | #define V4L2_CID_FM_TX_CLASS (V4L2_CTRL_CLASS_FM_TX | 1) | ||
1165 | |||
1166 | #define V4L2_CID_RDS_TX_DEVIATION (V4L2_CID_FM_TX_CLASS_BASE + 1) | ||
1167 | #define V4L2_CID_RDS_TX_PI (V4L2_CID_FM_TX_CLASS_BASE + 2) | ||
1168 | #define V4L2_CID_RDS_TX_PTY (V4L2_CID_FM_TX_CLASS_BASE + 3) | ||
1169 | #define V4L2_CID_RDS_TX_PS_NAME (V4L2_CID_FM_TX_CLASS_BASE + 5) | ||
1170 | #define V4L2_CID_RDS_TX_RADIO_TEXT (V4L2_CID_FM_TX_CLASS_BASE + 6) | ||
1171 | |||
1172 | #define V4L2_CID_AUDIO_LIMITER_ENABLED (V4L2_CID_FM_TX_CLASS_BASE + 64) | ||
1173 | #define V4L2_CID_AUDIO_LIMITER_RELEASE_TIME (V4L2_CID_FM_TX_CLASS_BASE + 65) | ||
1174 | #define V4L2_CID_AUDIO_LIMITER_DEVIATION (V4L2_CID_FM_TX_CLASS_BASE + 66) | ||
1175 | |||
1176 | #define V4L2_CID_AUDIO_COMPRESSION_ENABLED (V4L2_CID_FM_TX_CLASS_BASE + 80) | ||
1177 | #define V4L2_CID_AUDIO_COMPRESSION_GAIN (V4L2_CID_FM_TX_CLASS_BASE + 81) | ||
1178 | #define V4L2_CID_AUDIO_COMPRESSION_THRESHOLD (V4L2_CID_FM_TX_CLASS_BASE + 82) | ||
1179 | #define V4L2_CID_AUDIO_COMPRESSION_ATTACK_TIME (V4L2_CID_FM_TX_CLASS_BASE + 83) | ||
1180 | #define V4L2_CID_AUDIO_COMPRESSION_RELEASE_TIME (V4L2_CID_FM_TX_CLASS_BASE + 84) | ||
1181 | |||
1182 | #define V4L2_CID_PILOT_TONE_ENABLED (V4L2_CID_FM_TX_CLASS_BASE + 96) | ||
1183 | #define V4L2_CID_PILOT_TONE_DEVIATION (V4L2_CID_FM_TX_CLASS_BASE + 97) | ||
1184 | #define V4L2_CID_PILOT_TONE_FREQUENCY (V4L2_CID_FM_TX_CLASS_BASE + 98) | ||
1185 | |||
1186 | #define V4L2_CID_TUNE_PREEMPHASIS (V4L2_CID_FM_TX_CLASS_BASE + 112) | ||
1187 | enum v4l2_preemphasis { | ||
1188 | V4L2_PREEMPHASIS_DISABLED = 0, | ||
1189 | V4L2_PREEMPHASIS_50_uS = 1, | ||
1190 | V4L2_PREEMPHASIS_75_uS = 2, | ||
1191 | }; | ||
1192 | #define V4L2_CID_TUNE_POWER_LEVEL (V4L2_CID_FM_TX_CLASS_BASE + 113) | ||
1193 | #define V4L2_CID_TUNE_ANTENNA_CAPACITOR (V4L2_CID_FM_TX_CLASS_BASE + 114) | ||
1194 | |||
1147 | /* | 1195 | /* |
1148 | * T U N I N G | 1196 | * T U N I N G |
1149 | */ | 1197 | */ |
@@ -1178,6 +1226,7 @@ struct v4l2_modulator { | |||
1178 | #define V4L2_TUNER_CAP_LANG2 0x0020 | 1226 | #define V4L2_TUNER_CAP_LANG2 0x0020 |
1179 | #define V4L2_TUNER_CAP_SAP 0x0020 | 1227 | #define V4L2_TUNER_CAP_SAP 0x0020 |
1180 | #define V4L2_TUNER_CAP_LANG1 0x0040 | 1228 | #define V4L2_TUNER_CAP_LANG1 0x0040 |
1229 | #define V4L2_TUNER_CAP_RDS 0x0080 | ||
1181 | 1230 | ||
1182 | /* Flags for the 'rxsubchans' field */ | 1231 | /* Flags for the 'rxsubchans' field */ |
1183 | #define V4L2_TUNER_SUB_MONO 0x0001 | 1232 | #define V4L2_TUNER_SUB_MONO 0x0001 |
@@ -1185,6 +1234,7 @@ struct v4l2_modulator { | |||
1185 | #define V4L2_TUNER_SUB_LANG2 0x0004 | 1234 | #define V4L2_TUNER_SUB_LANG2 0x0004 |
1186 | #define V4L2_TUNER_SUB_SAP 0x0004 | 1235 | #define V4L2_TUNER_SUB_SAP 0x0004 |
1187 | #define V4L2_TUNER_SUB_LANG1 0x0008 | 1236 | #define V4L2_TUNER_SUB_LANG1 0x0008 |
1237 | #define V4L2_TUNER_SUB_RDS 0x0010 | ||
1188 | 1238 | ||
1189 | /* Values for the 'audmode' field */ | 1239 | /* Values for the 'audmode' field */ |
1190 | #define V4L2_TUNER_MODE_MONO 0x0000 | 1240 | #define V4L2_TUNER_MODE_MONO 0x0000 |
@@ -1210,6 +1260,27 @@ struct v4l2_hw_freq_seek { | |||
1210 | }; | 1260 | }; |
1211 | 1261 | ||
1212 | /* | 1262 | /* |
1263 | * R D S | ||
1264 | */ | ||
1265 | |||
1266 | struct v4l2_rds_data { | ||
1267 | __u8 lsb; | ||
1268 | __u8 msb; | ||
1269 | __u8 block; | ||
1270 | } __attribute__ ((packed)); | ||
1271 | |||
1272 | #define V4L2_RDS_BLOCK_MSK 0x7 | ||
1273 | #define V4L2_RDS_BLOCK_A 0 | ||
1274 | #define V4L2_RDS_BLOCK_B 1 | ||
1275 | #define V4L2_RDS_BLOCK_C 2 | ||
1276 | #define V4L2_RDS_BLOCK_D 3 | ||
1277 | #define V4L2_RDS_BLOCK_C_ALT 4 | ||
1278 | #define V4L2_RDS_BLOCK_INVALID 7 | ||
1279 | |||
1280 | #define V4L2_RDS_BLOCK_CORRECTED 0x40 | ||
1281 | #define V4L2_RDS_BLOCK_ERROR 0x80 | ||
1282 | |||
1283 | /* | ||
1213 | * A U D I O | 1284 | * A U D I O |
1214 | */ | 1285 | */ |
1215 | struct v4l2_audio { | 1286 | struct v4l2_audio { |
diff --git a/include/linux/virtio_blk.h b/include/linux/virtio_blk.h index be7d255fc7cf..8dab9f2b8832 100644 --- a/include/linux/virtio_blk.h +++ b/include/linux/virtio_blk.h | |||
@@ -20,8 +20,7 @@ | |||
20 | 20 | ||
21 | #define VIRTIO_BLK_ID_BYTES (sizeof(__u16[256])) /* IDENTIFY DATA */ | 21 | #define VIRTIO_BLK_ID_BYTES (sizeof(__u16[256])) /* IDENTIFY DATA */ |
22 | 22 | ||
23 | struct virtio_blk_config | 23 | struct virtio_blk_config { |
24 | { | ||
25 | /* The capacity (in 512-byte sectors). */ | 24 | /* The capacity (in 512-byte sectors). */ |
26 | __u64 capacity; | 25 | __u64 capacity; |
27 | /* The maximum segment size (if VIRTIO_BLK_F_SIZE_MAX) */ | 26 | /* The maximum segment size (if VIRTIO_BLK_F_SIZE_MAX) */ |
@@ -50,8 +49,7 @@ struct virtio_blk_config | |||
50 | #define VIRTIO_BLK_T_BARRIER 0x80000000 | 49 | #define VIRTIO_BLK_T_BARRIER 0x80000000 |
51 | 50 | ||
52 | /* This is the first element of the read scatter-gather list. */ | 51 | /* This is the first element of the read scatter-gather list. */ |
53 | struct virtio_blk_outhdr | 52 | struct virtio_blk_outhdr { |
54 | { | ||
55 | /* VIRTIO_BLK_T* */ | 53 | /* VIRTIO_BLK_T* */ |
56 | __u32 type; | 54 | __u32 type; |
57 | /* io priority. */ | 55 | /* io priority. */ |
diff --git a/include/linux/virtio_config.h b/include/linux/virtio_config.h index 99f514575f6a..e547e3c8ee9a 100644 --- a/include/linux/virtio_config.h +++ b/include/linux/virtio_config.h | |||
@@ -79,8 +79,7 @@ | |||
79 | * the dev->feature bits if it wants. | 79 | * the dev->feature bits if it wants. |
80 | */ | 80 | */ |
81 | typedef void vq_callback_t(struct virtqueue *); | 81 | typedef void vq_callback_t(struct virtqueue *); |
82 | struct virtio_config_ops | 82 | struct virtio_config_ops { |
83 | { | ||
84 | void (*get)(struct virtio_device *vdev, unsigned offset, | 83 | void (*get)(struct virtio_device *vdev, unsigned offset, |
85 | void *buf, unsigned len); | 84 | void *buf, unsigned len); |
86 | void (*set)(struct virtio_device *vdev, unsigned offset, | 85 | void (*set)(struct virtio_device *vdev, unsigned offset, |
diff --git a/include/linux/virtio_net.h b/include/linux/virtio_net.h index cec79adbe3ea..d8dd539c9f48 100644 --- a/include/linux/virtio_net.h +++ b/include/linux/virtio_net.h | |||
@@ -27,11 +27,11 @@ | |||
27 | #define VIRTIO_NET_F_CTRL_VQ 17 /* Control channel available */ | 27 | #define VIRTIO_NET_F_CTRL_VQ 17 /* Control channel available */ |
28 | #define VIRTIO_NET_F_CTRL_RX 18 /* Control channel RX mode support */ | 28 | #define VIRTIO_NET_F_CTRL_RX 18 /* Control channel RX mode support */ |
29 | #define VIRTIO_NET_F_CTRL_VLAN 19 /* Control channel VLAN filtering */ | 29 | #define VIRTIO_NET_F_CTRL_VLAN 19 /* Control channel VLAN filtering */ |
30 | #define VIRTIO_NET_F_CTRL_RX_EXTRA 20 /* Extra RX mode control support */ | ||
30 | 31 | ||
31 | #define VIRTIO_NET_S_LINK_UP 1 /* Link is up */ | 32 | #define VIRTIO_NET_S_LINK_UP 1 /* Link is up */ |
32 | 33 | ||
33 | struct virtio_net_config | 34 | struct virtio_net_config { |
34 | { | ||
35 | /* The config defining mac address (if VIRTIO_NET_F_MAC) */ | 35 | /* The config defining mac address (if VIRTIO_NET_F_MAC) */ |
36 | __u8 mac[6]; | 36 | __u8 mac[6]; |
37 | /* See VIRTIO_NET_F_STATUS and VIRTIO_NET_S_* above */ | 37 | /* See VIRTIO_NET_F_STATUS and VIRTIO_NET_S_* above */ |
@@ -40,8 +40,7 @@ struct virtio_net_config | |||
40 | 40 | ||
41 | /* This is the first element of the scatter-gather list. If you don't | 41 | /* This is the first element of the scatter-gather list. If you don't |
42 | * specify GSO or CSUM features, you can simply ignore the header. */ | 42 | * specify GSO or CSUM features, you can simply ignore the header. */ |
43 | struct virtio_net_hdr | 43 | struct virtio_net_hdr { |
44 | { | ||
45 | #define VIRTIO_NET_HDR_F_NEEDS_CSUM 1 // Use csum_start, csum_offset | 44 | #define VIRTIO_NET_HDR_F_NEEDS_CSUM 1 // Use csum_start, csum_offset |
46 | __u8 flags; | 45 | __u8 flags; |
47 | #define VIRTIO_NET_HDR_GSO_NONE 0 // Not a GSO frame | 46 | #define VIRTIO_NET_HDR_GSO_NONE 0 // Not a GSO frame |
@@ -81,14 +80,19 @@ typedef __u8 virtio_net_ctrl_ack; | |||
81 | #define VIRTIO_NET_ERR 1 | 80 | #define VIRTIO_NET_ERR 1 |
82 | 81 | ||
83 | /* | 82 | /* |
84 | * Control the RX mode, ie. promisucous and allmulti. PROMISC and | 83 | * Control the RX mode, ie. promisucous, allmulti, etc... |
85 | * ALLMULTI commands require an "out" sg entry containing a 1 byte | 84 | * All commands require an "out" sg entry containing a 1 byte |
86 | * state value, zero = disable, non-zero = enable. These commands | 85 | * state value, zero = disable, non-zero = enable. Commands |
87 | * are supported with the VIRTIO_NET_F_CTRL_RX feature. | 86 | * 0 and 1 are supported with the VIRTIO_NET_F_CTRL_RX feature. |
87 | * Commands 2-5 are added with VIRTIO_NET_F_CTRL_RX_EXTRA. | ||
88 | */ | 88 | */ |
89 | #define VIRTIO_NET_CTRL_RX 0 | 89 | #define VIRTIO_NET_CTRL_RX 0 |
90 | #define VIRTIO_NET_CTRL_RX_PROMISC 0 | 90 | #define VIRTIO_NET_CTRL_RX_PROMISC 0 |
91 | #define VIRTIO_NET_CTRL_RX_ALLMULTI 1 | 91 | #define VIRTIO_NET_CTRL_RX_ALLMULTI 1 |
92 | #define VIRTIO_NET_CTRL_RX_ALLUNI 2 | ||
93 | #define VIRTIO_NET_CTRL_RX_NOMULTI 3 | ||
94 | #define VIRTIO_NET_CTRL_RX_NOUNI 4 | ||
95 | #define VIRTIO_NET_CTRL_RX_NOBCAST 5 | ||
92 | 96 | ||
93 | /* | 97 | /* |
94 | * Control the MAC filter table. | 98 | * Control the MAC filter table. |
diff --git a/include/linux/virtio_ring.h b/include/linux/virtio_ring.h index 693e0ec5afa6..e4d144b132b5 100644 --- a/include/linux/virtio_ring.h +++ b/include/linux/virtio_ring.h | |||
@@ -30,8 +30,7 @@ | |||
30 | #define VIRTIO_RING_F_INDIRECT_DESC 28 | 30 | #define VIRTIO_RING_F_INDIRECT_DESC 28 |
31 | 31 | ||
32 | /* Virtio ring descriptors: 16 bytes. These can chain together via "next". */ | 32 | /* Virtio ring descriptors: 16 bytes. These can chain together via "next". */ |
33 | struct vring_desc | 33 | struct vring_desc { |
34 | { | ||
35 | /* Address (guest-physical). */ | 34 | /* Address (guest-physical). */ |
36 | __u64 addr; | 35 | __u64 addr; |
37 | /* Length. */ | 36 | /* Length. */ |
@@ -42,24 +41,21 @@ struct vring_desc | |||
42 | __u16 next; | 41 | __u16 next; |
43 | }; | 42 | }; |
44 | 43 | ||
45 | struct vring_avail | 44 | struct vring_avail { |
46 | { | ||
47 | __u16 flags; | 45 | __u16 flags; |
48 | __u16 idx; | 46 | __u16 idx; |
49 | __u16 ring[]; | 47 | __u16 ring[]; |
50 | }; | 48 | }; |
51 | 49 | ||
52 | /* u32 is used here for ids for padding reasons. */ | 50 | /* u32 is used here for ids for padding reasons. */ |
53 | struct vring_used_elem | 51 | struct vring_used_elem { |
54 | { | ||
55 | /* Index of start of used descriptor chain. */ | 52 | /* Index of start of used descriptor chain. */ |
56 | __u32 id; | 53 | __u32 id; |
57 | /* Total length of the descriptor chain which was used (written to) */ | 54 | /* Total length of the descriptor chain which was used (written to) */ |
58 | __u32 len; | 55 | __u32 len; |
59 | }; | 56 | }; |
60 | 57 | ||
61 | struct vring_used | 58 | struct vring_used { |
62 | { | ||
63 | __u16 flags; | 59 | __u16 flags; |
64 | __u16 idx; | 60 | __u16 idx; |
65 | struct vring_used_elem ring[]; | 61 | struct vring_used_elem ring[]; |
diff --git a/include/linux/vmalloc.h b/include/linux/vmalloc.h index a43ebec3a7b9..227c2a585e4f 100644 --- a/include/linux/vmalloc.h +++ b/include/linux/vmalloc.h | |||
@@ -115,4 +115,10 @@ extern rwlock_t vmlist_lock; | |||
115 | extern struct vm_struct *vmlist; | 115 | extern struct vm_struct *vmlist; |
116 | extern __init void vm_area_register_early(struct vm_struct *vm, size_t align); | 116 | extern __init void vm_area_register_early(struct vm_struct *vm, size_t align); |
117 | 117 | ||
118 | struct vm_struct **pcpu_get_vm_areas(const unsigned long *offsets, | ||
119 | const size_t *sizes, int nr_vms, | ||
120 | size_t align, gfp_t gfp_mask); | ||
121 | |||
122 | void pcpu_free_vm_areas(struct vm_struct **vms, int nr_vms); | ||
123 | |||
118 | #endif /* _LINUX_VMALLOC_H */ | 124 | #endif /* _LINUX_VMALLOC_H */ |
diff --git a/include/linux/vmstat.h b/include/linux/vmstat.h index 81a97cf8f0a0..2d0f222388a8 100644 --- a/include/linux/vmstat.h +++ b/include/linux/vmstat.h | |||
@@ -166,15 +166,8 @@ static inline unsigned long zone_page_state(struct zone *zone, | |||
166 | return x; | 166 | return x; |
167 | } | 167 | } |
168 | 168 | ||
169 | extern unsigned long global_lru_pages(void); | 169 | extern unsigned long global_reclaimable_pages(void); |
170 | 170 | extern unsigned long zone_reclaimable_pages(struct zone *zone); | |
171 | static inline unsigned long zone_lru_pages(struct zone *zone) | ||
172 | { | ||
173 | return (zone_page_state(zone, NR_ACTIVE_ANON) | ||
174 | + zone_page_state(zone, NR_ACTIVE_FILE) | ||
175 | + zone_page_state(zone, NR_INACTIVE_ANON) | ||
176 | + zone_page_state(zone, NR_INACTIVE_FILE)); | ||
177 | } | ||
178 | 171 | ||
179 | #ifdef CONFIG_NUMA | 172 | #ifdef CONFIG_NUMA |
180 | /* | 173 | /* |
@@ -210,11 +203,6 @@ extern void zone_statistics(struct zone *, struct zone *); | |||
210 | 203 | ||
211 | #endif /* CONFIG_NUMA */ | 204 | #endif /* CONFIG_NUMA */ |
212 | 205 | ||
213 | #define __add_zone_page_state(__z, __i, __d) \ | ||
214 | __mod_zone_page_state(__z, __i, __d) | ||
215 | #define __sub_zone_page_state(__z, __i, __d) \ | ||
216 | __mod_zone_page_state(__z, __i,-(__d)) | ||
217 | |||
218 | #define add_zone_page_state(__z, __i, __d) mod_zone_page_state(__z, __i, __d) | 206 | #define add_zone_page_state(__z, __i, __d) mod_zone_page_state(__z, __i, __d) |
219 | #define sub_zone_page_state(__z, __i, __d) mod_zone_page_state(__z, __i, -(__d)) | 207 | #define sub_zone_page_state(__z, __i, __d) mod_zone_page_state(__z, __i, -(__d)) |
220 | 208 | ||
diff --git a/include/linux/vt.h b/include/linux/vt.h index 02c1c0288770..7afca0d72139 100644 --- a/include/linux/vt.h +++ b/include/linux/vt.h | |||
@@ -1,17 +1,6 @@ | |||
1 | #ifndef _LINUX_VT_H | 1 | #ifndef _LINUX_VT_H |
2 | #define _LINUX_VT_H | 2 | #define _LINUX_VT_H |
3 | 3 | ||
4 | #ifdef __KERNEL__ | ||
5 | struct notifier_block; | ||
6 | |||
7 | struct vt_notifier_param { | ||
8 | struct vc_data *vc; /* VC on which the update happened */ | ||
9 | unsigned int c; /* Printed char */ | ||
10 | }; | ||
11 | |||
12 | extern int register_vt_notifier(struct notifier_block *nb); | ||
13 | extern int unregister_vt_notifier(struct notifier_block *nb); | ||
14 | #endif | ||
15 | 4 | ||
16 | /* | 5 | /* |
17 | * These constants are also useful for user-level apps (e.g., VC | 6 | * These constants are also useful for user-level apps (e.g., VC |
@@ -74,4 +63,25 @@ struct vt_consize { | |||
74 | #define VT_UNLOCKSWITCH 0x560C /* allow vt switching */ | 63 | #define VT_UNLOCKSWITCH 0x560C /* allow vt switching */ |
75 | #define VT_GETHIFONTMASK 0x560D /* return hi font mask */ | 64 | #define VT_GETHIFONTMASK 0x560D /* return hi font mask */ |
76 | 65 | ||
66 | struct vt_event { | ||
67 | unsigned int event; | ||
68 | #define VT_EVENT_SWITCH 0x0001 /* Console switch */ | ||
69 | #define VT_EVENT_BLANK 0x0002 /* Screen blank */ | ||
70 | #define VT_EVENT_UNBLANK 0x0004 /* Screen unblank */ | ||
71 | #define VT_EVENT_RESIZE 0x0008 /* Resize display */ | ||
72 | #define VT_MAX_EVENT 0x000F | ||
73 | unsigned int old; /* Old console */ | ||
74 | unsigned int new; /* New console (if changing) */ | ||
75 | unsigned int pad[4]; /* Padding for expansion */ | ||
76 | }; | ||
77 | |||
78 | #define VT_WAITEVENT 0x560E /* Wait for an event */ | ||
79 | |||
80 | struct vt_setactivate { | ||
81 | unsigned int console; | ||
82 | struct vt_mode mode; | ||
83 | }; | ||
84 | |||
85 | #define VT_SETACTIVATE 0x560F /* Activate and set the mode of a console */ | ||
86 | |||
77 | #endif /* _LINUX_VT_H */ | 87 | #endif /* _LINUX_VT_H */ |
diff --git a/include/linux/vt_kern.h b/include/linux/vt_kern.h index 2f1113467f70..c0c4e1103a73 100644 --- a/include/linux/vt_kern.h +++ b/include/linux/vt_kern.h | |||
@@ -13,6 +13,7 @@ | |||
13 | #include <linux/console_struct.h> | 13 | #include <linux/console_struct.h> |
14 | #include <linux/mm.h> | 14 | #include <linux/mm.h> |
15 | #include <linux/consolemap.h> | 15 | #include <linux/consolemap.h> |
16 | #include <linux/notifier.h> | ||
16 | 17 | ||
17 | /* | 18 | /* |
18 | * Presently, a lot of graphics programs do not restore the contents of | 19 | * Presently, a lot of graphics programs do not restore the contents of |
@@ -91,7 +92,8 @@ int con_copy_unimap(struct vc_data *dst_vc, struct vc_data *src_vc); | |||
91 | #endif | 92 | #endif |
92 | 93 | ||
93 | /* vt.c */ | 94 | /* vt.c */ |
94 | int vt_waitactive(int vt); | 95 | void vt_event_post(unsigned int event, unsigned int old, unsigned int new); |
96 | int vt_waitactive(int n); | ||
95 | void change_console(struct vc_data *new_vc); | 97 | void change_console(struct vc_data *new_vc); |
96 | void reset_vc(struct vc_data *vc); | 98 | void reset_vc(struct vc_data *vc); |
97 | extern int unbind_con_driver(const struct consw *csw, int first, int last, | 99 | extern int unbind_con_driver(const struct consw *csw, int first, int last, |
@@ -116,4 +118,16 @@ struct vt_spawn_console { | |||
116 | }; | 118 | }; |
117 | extern struct vt_spawn_console vt_spawn_con; | 119 | extern struct vt_spawn_console vt_spawn_con; |
118 | 120 | ||
121 | extern int vt_move_to_console(unsigned int vt, int alloc); | ||
122 | |||
123 | /* Interfaces for VC notification of character events (for accessibility etc) */ | ||
124 | |||
125 | struct vt_notifier_param { | ||
126 | struct vc_data *vc; /* VC on which the update happened */ | ||
127 | unsigned int c; /* Printed char */ | ||
128 | }; | ||
129 | |||
130 | extern int register_vt_notifier(struct notifier_block *nb); | ||
131 | extern int unregister_vt_notifier(struct notifier_block *nb); | ||
132 | |||
119 | #endif /* _VT_KERN_H */ | 133 | #endif /* _VT_KERN_H */ |
diff --git a/include/linux/wait.h b/include/linux/wait.h index 6788e1a4d4ca..a48e16b77d5e 100644 --- a/include/linux/wait.h +++ b/include/linux/wait.h | |||
@@ -26,8 +26,8 @@ | |||
26 | #include <asm/current.h> | 26 | #include <asm/current.h> |
27 | 27 | ||
28 | typedef struct __wait_queue wait_queue_t; | 28 | typedef struct __wait_queue wait_queue_t; |
29 | typedef int (*wait_queue_func_t)(wait_queue_t *wait, unsigned mode, int sync, void *key); | 29 | typedef int (*wait_queue_func_t)(wait_queue_t *wait, unsigned mode, int flags, void *key); |
30 | int default_wake_function(wait_queue_t *wait, unsigned mode, int sync, void *key); | 30 | int default_wake_function(wait_queue_t *wait, unsigned mode, int flags, void *key); |
31 | 31 | ||
32 | struct __wait_queue { | 32 | struct __wait_queue { |
33 | unsigned int flags; | 33 | unsigned int flags; |
@@ -77,7 +77,14 @@ struct task_struct; | |||
77 | #define __WAIT_BIT_KEY_INITIALIZER(word, bit) \ | 77 | #define __WAIT_BIT_KEY_INITIALIZER(word, bit) \ |
78 | { .flags = word, .bit_nr = bit, } | 78 | { .flags = word, .bit_nr = bit, } |
79 | 79 | ||
80 | extern void init_waitqueue_head(wait_queue_head_t *q); | 80 | extern void __init_waitqueue_head(wait_queue_head_t *q, struct lock_class_key *); |
81 | |||
82 | #define init_waitqueue_head(q) \ | ||
83 | do { \ | ||
84 | static struct lock_class_key __key; \ | ||
85 | \ | ||
86 | __init_waitqueue_head((q), &__key); \ | ||
87 | } while (0) | ||
81 | 88 | ||
82 | #ifdef CONFIG_LOCKDEP | 89 | #ifdef CONFIG_LOCKDEP |
83 | # define __WAIT_QUEUE_HEAD_INIT_ONSTACK(name) \ | 90 | # define __WAIT_QUEUE_HEAD_INIT_ONSTACK(name) \ |
diff --git a/include/linux/wireless.h b/include/linux/wireless.h index cb24204851f7..5b4c6c772a9b 100644 --- a/include/linux/wireless.h +++ b/include/linux/wireless.h | |||
@@ -1132,6 +1132,14 @@ struct __compat_iw_event { | |||
1132 | }; | 1132 | }; |
1133 | #define IW_EV_COMPAT_LCP_LEN offsetof(struct __compat_iw_event, pointer) | 1133 | #define IW_EV_COMPAT_LCP_LEN offsetof(struct __compat_iw_event, pointer) |
1134 | #define IW_EV_COMPAT_POINT_OFF offsetof(struct compat_iw_point, length) | 1134 | #define IW_EV_COMPAT_POINT_OFF offsetof(struct compat_iw_point, length) |
1135 | |||
1136 | /* Size of the various events for compat */ | ||
1137 | #define IW_EV_COMPAT_CHAR_LEN (IW_EV_COMPAT_LCP_LEN + IFNAMSIZ) | ||
1138 | #define IW_EV_COMPAT_UINT_LEN (IW_EV_COMPAT_LCP_LEN + sizeof(__u32)) | ||
1139 | #define IW_EV_COMPAT_FREQ_LEN (IW_EV_COMPAT_LCP_LEN + sizeof(struct iw_freq)) | ||
1140 | #define IW_EV_COMPAT_PARAM_LEN (IW_EV_COMPAT_LCP_LEN + sizeof(struct iw_param)) | ||
1141 | #define IW_EV_COMPAT_ADDR_LEN (IW_EV_COMPAT_LCP_LEN + sizeof(struct sockaddr)) | ||
1142 | #define IW_EV_COMPAT_QUAL_LEN (IW_EV_COMPAT_LCP_LEN + sizeof(struct iw_quality)) | ||
1135 | #define IW_EV_COMPAT_POINT_LEN \ | 1143 | #define IW_EV_COMPAT_POINT_LEN \ |
1136 | (IW_EV_COMPAT_LCP_LEN + sizeof(struct compat_iw_point) - \ | 1144 | (IW_EV_COMPAT_LCP_LEN + sizeof(struct compat_iw_point) - \ |
1137 | IW_EV_COMPAT_POINT_OFF) | 1145 | IW_EV_COMPAT_POINT_OFF) |
diff --git a/include/linux/wm97xx.h b/include/linux/wm97xx.h index b2c2297844e3..38e8c4d9289e 100644 --- a/include/linux/wm97xx.h +++ b/include/linux/wm97xx.h | |||
@@ -16,6 +16,12 @@ | |||
16 | #include <linux/platform_device.h> | 16 | #include <linux/platform_device.h> |
17 | 17 | ||
18 | /* | 18 | /* |
19 | * WM97xx variants | ||
20 | */ | ||
21 | #define WM97xx_GENERIC 0x0000 | ||
22 | #define WM97xx_WM1613 0x1613 | ||
23 | |||
24 | /* | ||
19 | * WM97xx AC97 Touchscreen registers | 25 | * WM97xx AC97 Touchscreen registers |
20 | */ | 26 | */ |
21 | #define AC97_WM97XX_DIGITISER1 0x76 | 27 | #define AC97_WM97XX_DIGITISER1 0x76 |
@@ -283,6 +289,7 @@ struct wm97xx { | |||
283 | unsigned pen_is_down:1; /* Pen is down */ | 289 | unsigned pen_is_down:1; /* Pen is down */ |
284 | unsigned aux_waiting:1; /* aux measurement waiting */ | 290 | unsigned aux_waiting:1; /* aux measurement waiting */ |
285 | unsigned pen_probably_down:1; /* used in polling mode */ | 291 | unsigned pen_probably_down:1; /* used in polling mode */ |
292 | u16 variant; /* WM97xx chip variant */ | ||
286 | u16 suspend_mode; /* PRP in suspend mode */ | 293 | u16 suspend_mode; /* PRP in suspend mode */ |
287 | }; | 294 | }; |
288 | 295 | ||
diff --git a/include/linux/workqueue.h b/include/linux/workqueue.h index 13e1adf55c4c..7ef0c7b94f31 100644 --- a/include/linux/workqueue.h +++ b/include/linux/workqueue.h | |||
@@ -94,7 +94,7 @@ struct execute_work { | |||
94 | /* | 94 | /* |
95 | * initialize all of a work item in one go | 95 | * initialize all of a work item in one go |
96 | * | 96 | * |
97 | * NOTE! No point in using "atomic_long_set()": useing a direct | 97 | * NOTE! No point in using "atomic_long_set()": using a direct |
98 | * assignment of the work data initializer allows the compiler | 98 | * assignment of the work data initializer allows the compiler |
99 | * to generate better code. | 99 | * to generate better code. |
100 | */ | 100 | */ |
@@ -240,6 +240,21 @@ static inline int cancel_delayed_work(struct delayed_work *work) | |||
240 | return ret; | 240 | return ret; |
241 | } | 241 | } |
242 | 242 | ||
243 | /* | ||
244 | * Like above, but uses del_timer() instead of del_timer_sync(). This means, | ||
245 | * if it returns 0 the timer function may be running and the queueing is in | ||
246 | * progress. | ||
247 | */ | ||
248 | static inline int __cancel_delayed_work(struct delayed_work *work) | ||
249 | { | ||
250 | int ret; | ||
251 | |||
252 | ret = del_timer(&work->timer); | ||
253 | if (ret) | ||
254 | work_clear_pending(&work->work); | ||
255 | return ret; | ||
256 | } | ||
257 | |||
243 | extern int cancel_delayed_work_sync(struct delayed_work *work); | 258 | extern int cancel_delayed_work_sync(struct delayed_work *work); |
244 | 259 | ||
245 | /* Obsolete. use cancel_delayed_work_sync() */ | 260 | /* Obsolete. use cancel_delayed_work_sync() */ |
diff --git a/include/linux/writeback.h b/include/linux/writeback.h index 3224820c8514..75cf58666ff9 100644 --- a/include/linux/writeback.h +++ b/include/linux/writeback.h | |||
@@ -14,17 +14,6 @@ extern struct list_head inode_in_use; | |||
14 | extern struct list_head inode_unused; | 14 | extern struct list_head inode_unused; |
15 | 15 | ||
16 | /* | 16 | /* |
17 | * Yes, writeback.h requires sched.h | ||
18 | * No, sched.h is not included from here. | ||
19 | */ | ||
20 | static inline int task_is_pdflush(struct task_struct *task) | ||
21 | { | ||
22 | return task->flags & PF_FLUSHER; | ||
23 | } | ||
24 | |||
25 | #define current_is_pdflush() task_is_pdflush(current) | ||
26 | |||
27 | /* | ||
28 | * fs/fs-writeback.c | 17 | * fs/fs-writeback.c |
29 | */ | 18 | */ |
30 | enum writeback_sync_modes { | 19 | enum writeback_sync_modes { |
@@ -40,6 +29,8 @@ enum writeback_sync_modes { | |||
40 | struct writeback_control { | 29 | struct writeback_control { |
41 | struct backing_dev_info *bdi; /* If !NULL, only write back this | 30 | struct backing_dev_info *bdi; /* If !NULL, only write back this |
42 | queue */ | 31 | queue */ |
32 | struct super_block *sb; /* if !NULL, only write inodes from | ||
33 | this super_block */ | ||
43 | enum writeback_sync_modes sync_mode; | 34 | enum writeback_sync_modes sync_mode; |
44 | unsigned long *older_than_this; /* If !NULL, only write back inodes | 35 | unsigned long *older_than_this; /* If !NULL, only write back inodes |
45 | older than this */ | 36 | older than this */ |
@@ -59,7 +50,6 @@ struct writeback_control { | |||
59 | unsigned encountered_congestion:1; /* An output: a queue is full */ | 50 | unsigned encountered_congestion:1; /* An output: a queue is full */ |
60 | unsigned for_kupdate:1; /* A kupdate writeback */ | 51 | unsigned for_kupdate:1; /* A kupdate writeback */ |
61 | unsigned for_reclaim:1; /* Invoked from the page allocator */ | 52 | unsigned for_reclaim:1; /* Invoked from the page allocator */ |
62 | unsigned for_writepages:1; /* This is a writepages() call */ | ||
63 | unsigned range_cyclic:1; /* range_start is cyclic */ | 53 | unsigned range_cyclic:1; /* range_start is cyclic */ |
64 | unsigned more_io:1; /* more io to be dispatched */ | 54 | unsigned more_io:1; /* more io to be dispatched */ |
65 | /* | 55 | /* |
@@ -76,9 +66,13 @@ struct writeback_control { | |||
76 | /* | 66 | /* |
77 | * fs/fs-writeback.c | 67 | * fs/fs-writeback.c |
78 | */ | 68 | */ |
79 | void writeback_inodes(struct writeback_control *wbc); | 69 | struct bdi_writeback; |
80 | int inode_wait(void *); | 70 | int inode_wait(void *); |
81 | void sync_inodes_sb(struct super_block *, int wait); | 71 | void writeback_inodes_sb(struct super_block *); |
72 | void sync_inodes_sb(struct super_block *); | ||
73 | void writeback_inodes_wbc(struct writeback_control *wbc); | ||
74 | long wb_do_writeback(struct bdi_writeback *wb, int force_wait); | ||
75 | void wakeup_flusher_threads(long nr_pages); | ||
82 | 76 | ||
83 | /* writeback.h requires fs.h; it, too, is not included from here. */ | 77 | /* writeback.h requires fs.h; it, too, is not included from here. */ |
84 | static inline void wait_on_inode(struct inode *inode) | 78 | static inline void wait_on_inode(struct inode *inode) |
@@ -98,7 +92,6 @@ static inline void inode_sync_wait(struct inode *inode) | |||
98 | /* | 92 | /* |
99 | * mm/page-writeback.c | 93 | * mm/page-writeback.c |
100 | */ | 94 | */ |
101 | int wakeup_pdflush(long nr_pages); | ||
102 | void laptop_io_completion(void); | 95 | void laptop_io_completion(void); |
103 | void laptop_sync_completion(void); | 96 | void laptop_sync_completion(void); |
104 | void throttle_vm_writeout(gfp_t gfp_mask); | 97 | void throttle_vm_writeout(gfp_t gfp_mask); |
@@ -150,17 +143,12 @@ balance_dirty_pages_ratelimited(struct address_space *mapping) | |||
150 | typedef int (*writepage_t)(struct page *page, struct writeback_control *wbc, | 143 | typedef int (*writepage_t)(struct page *page, struct writeback_control *wbc, |
151 | void *data); | 144 | void *data); |
152 | 145 | ||
153 | int pdflush_operation(void (*fn)(unsigned long), unsigned long arg0); | ||
154 | int generic_writepages(struct address_space *mapping, | 146 | int generic_writepages(struct address_space *mapping, |
155 | struct writeback_control *wbc); | 147 | struct writeback_control *wbc); |
156 | int write_cache_pages(struct address_space *mapping, | 148 | int write_cache_pages(struct address_space *mapping, |
157 | struct writeback_control *wbc, writepage_t writepage, | 149 | struct writeback_control *wbc, writepage_t writepage, |
158 | void *data); | 150 | void *data); |
159 | int do_writepages(struct address_space *mapping, struct writeback_control *wbc); | 151 | int do_writepages(struct address_space *mapping, struct writeback_control *wbc); |
160 | int sync_page_range(struct inode *inode, struct address_space *mapping, | ||
161 | loff_t pos, loff_t count); | ||
162 | int sync_page_range_nolock(struct inode *inode, struct address_space *mapping, | ||
163 | loff_t pos, loff_t count); | ||
164 | void set_page_dirty_balance(struct page *page, int page_mkwrite); | 152 | void set_page_dirty_balance(struct page *page, int page_mkwrite); |
165 | void writeback_set_ratelimit(void); | 153 | void writeback_set_ratelimit(void); |
166 | 154 | ||
diff --git a/include/linux/xattr.h b/include/linux/xattr.h index d131e352cfe1..5c84af8c5f6f 100644 --- a/include/linux/xattr.h +++ b/include/linux/xattr.h | |||
@@ -49,6 +49,7 @@ struct xattr_handler { | |||
49 | ssize_t xattr_getsecurity(struct inode *, const char *, void *, size_t); | 49 | ssize_t xattr_getsecurity(struct inode *, const char *, void *, size_t); |
50 | ssize_t vfs_getxattr(struct dentry *, const char *, void *, size_t); | 50 | ssize_t vfs_getxattr(struct dentry *, const char *, void *, size_t); |
51 | ssize_t vfs_listxattr(struct dentry *d, char *list, size_t size); | 51 | ssize_t vfs_listxattr(struct dentry *d, char *list, size_t size); |
52 | int __vfs_setxattr_noperm(struct dentry *, const char *, const void *, size_t, int); | ||
52 | int vfs_setxattr(struct dentry *, const char *, const void *, size_t, int); | 53 | int vfs_setxattr(struct dentry *, const char *, const void *, size_t, int); |
53 | int vfs_removexattr(struct dentry *, const char *); | 54 | int vfs_removexattr(struct dentry *, const char *); |
54 | 55 | ||
diff --git a/include/media/davinci/ccdc_types.h b/include/media/davinci/ccdc_types.h new file mode 100644 index 000000000000..5773874bf266 --- /dev/null +++ b/include/media/davinci/ccdc_types.h | |||
@@ -0,0 +1,43 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2008-2009 Texas Instruments Inc | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License as published by | ||
6 | * the Free Software Foundation; either version 2 of the License, or | ||
7 | * (at your option) any later version. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
17 | * | ||
18 | **************************************************************************/ | ||
19 | #ifndef _CCDC_TYPES_H | ||
20 | #define _CCDC_TYPES_H | ||
21 | enum ccdc_pixfmt { | ||
22 | CCDC_PIXFMT_RAW, | ||
23 | CCDC_PIXFMT_YCBCR_16BIT, | ||
24 | CCDC_PIXFMT_YCBCR_8BIT | ||
25 | }; | ||
26 | |||
27 | enum ccdc_frmfmt { | ||
28 | CCDC_FRMFMT_PROGRESSIVE, | ||
29 | CCDC_FRMFMT_INTERLACED | ||
30 | }; | ||
31 | |||
32 | /* PIXEL ORDER IN MEMORY from LSB to MSB */ | ||
33 | /* only applicable for 8-bit input mode */ | ||
34 | enum ccdc_pixorder { | ||
35 | CCDC_PIXORDER_YCBYCR, | ||
36 | CCDC_PIXORDER_CBYCRY, | ||
37 | }; | ||
38 | |||
39 | enum ccdc_buftype { | ||
40 | CCDC_BUFTYPE_FLD_INTERLEAVED, | ||
41 | CCDC_BUFTYPE_FLD_SEPARATED | ||
42 | }; | ||
43 | #endif | ||
diff --git a/include/media/davinci/dm355_ccdc.h b/include/media/davinci/dm355_ccdc.h new file mode 100644 index 000000000000..df8a7b107477 --- /dev/null +++ b/include/media/davinci/dm355_ccdc.h | |||
@@ -0,0 +1,321 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2005-2009 Texas Instruments Inc | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License as published by | ||
6 | * the Free Software Foundation; either version 2 of the License, or | ||
7 | * (at your option) any later version. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
17 | */ | ||
18 | #ifndef _DM355_CCDC_H | ||
19 | #define _DM355_CCDC_H | ||
20 | #include <media/davinci/ccdc_types.h> | ||
21 | #include <media/davinci/vpfe_types.h> | ||
22 | |||
23 | /* enum for No of pixel per line to be avg. in Black Clamping */ | ||
24 | enum ccdc_sample_length { | ||
25 | CCDC_SAMPLE_1PIXELS, | ||
26 | CCDC_SAMPLE_2PIXELS, | ||
27 | CCDC_SAMPLE_4PIXELS, | ||
28 | CCDC_SAMPLE_8PIXELS, | ||
29 | CCDC_SAMPLE_16PIXELS | ||
30 | }; | ||
31 | |||
32 | /* enum for No of lines in Black Clamping */ | ||
33 | enum ccdc_sample_line { | ||
34 | CCDC_SAMPLE_1LINES, | ||
35 | CCDC_SAMPLE_2LINES, | ||
36 | CCDC_SAMPLE_4LINES, | ||
37 | CCDC_SAMPLE_8LINES, | ||
38 | CCDC_SAMPLE_16LINES | ||
39 | }; | ||
40 | |||
41 | /* enum for Alaw gama width */ | ||
42 | enum ccdc_gamma_width { | ||
43 | CCDC_GAMMA_BITS_13_4, | ||
44 | CCDC_GAMMA_BITS_12_3, | ||
45 | CCDC_GAMMA_BITS_11_2, | ||
46 | CCDC_GAMMA_BITS_10_1, | ||
47 | CCDC_GAMMA_BITS_09_0 | ||
48 | }; | ||
49 | |||
50 | enum ccdc_colpats { | ||
51 | CCDC_RED, | ||
52 | CCDC_GREEN_RED, | ||
53 | CCDC_GREEN_BLUE, | ||
54 | CCDC_BLUE | ||
55 | }; | ||
56 | |||
57 | struct ccdc_col_pat { | ||
58 | enum ccdc_colpats olop; | ||
59 | enum ccdc_colpats olep; | ||
60 | enum ccdc_colpats elop; | ||
61 | enum ccdc_colpats elep; | ||
62 | }; | ||
63 | |||
64 | enum ccdc_datasft { | ||
65 | CCDC_DATA_NO_SHIFT, | ||
66 | CCDC_DATA_SHIFT_1BIT, | ||
67 | CCDC_DATA_SHIFT_2BIT, | ||
68 | CCDC_DATA_SHIFT_3BIT, | ||
69 | CCDC_DATA_SHIFT_4BIT, | ||
70 | CCDC_DATA_SHIFT_5BIT, | ||
71 | CCDC_DATA_SHIFT_6BIT | ||
72 | }; | ||
73 | |||
74 | enum ccdc_data_size { | ||
75 | CCDC_DATA_16BITS, | ||
76 | CCDC_DATA_15BITS, | ||
77 | CCDC_DATA_14BITS, | ||
78 | CCDC_DATA_13BITS, | ||
79 | CCDC_DATA_12BITS, | ||
80 | CCDC_DATA_11BITS, | ||
81 | CCDC_DATA_10BITS, | ||
82 | CCDC_DATA_8BITS | ||
83 | }; | ||
84 | enum ccdc_mfilt1 { | ||
85 | CCDC_NO_MEDIAN_FILTER1, | ||
86 | CCDC_AVERAGE_FILTER1, | ||
87 | CCDC_MEDIAN_FILTER1 | ||
88 | }; | ||
89 | |||
90 | enum ccdc_mfilt2 { | ||
91 | CCDC_NO_MEDIAN_FILTER2, | ||
92 | CCDC_AVERAGE_FILTER2, | ||
93 | CCDC_MEDIAN_FILTER2 | ||
94 | }; | ||
95 | |||
96 | /* structure for ALaw */ | ||
97 | struct ccdc_a_law { | ||
98 | /* Enable/disable A-Law */ | ||
99 | unsigned char enable; | ||
100 | /* Gama Width Input */ | ||
101 | enum ccdc_gamma_width gama_wd; | ||
102 | }; | ||
103 | |||
104 | /* structure for Black Clamping */ | ||
105 | struct ccdc_black_clamp { | ||
106 | /* only if bClampEnable is TRUE */ | ||
107 | unsigned char b_clamp_enable; | ||
108 | /* only if bClampEnable is TRUE */ | ||
109 | enum ccdc_sample_length sample_pixel; | ||
110 | /* only if bClampEnable is TRUE */ | ||
111 | enum ccdc_sample_line sample_ln; | ||
112 | /* only if bClampEnable is TRUE */ | ||
113 | unsigned short start_pixel; | ||
114 | /* only if bClampEnable is FALSE */ | ||
115 | unsigned short sgain; | ||
116 | unsigned short dc_sub; | ||
117 | }; | ||
118 | |||
119 | /* structure for Black Level Compensation */ | ||
120 | struct ccdc_black_compensation { | ||
121 | /* Constant value to subtract from Red component */ | ||
122 | unsigned char r; | ||
123 | /* Constant value to subtract from Gr component */ | ||
124 | unsigned char gr; | ||
125 | /* Constant value to subtract from Blue component */ | ||
126 | unsigned char b; | ||
127 | /* Constant value to subtract from Gb component */ | ||
128 | unsigned char gb; | ||
129 | }; | ||
130 | |||
131 | struct ccdc_float { | ||
132 | int integer; | ||
133 | unsigned int decimal; | ||
134 | }; | ||
135 | |||
136 | #define CCDC_CSC_COEFF_TABLE_SIZE 16 | ||
137 | /* structure for color space converter */ | ||
138 | struct ccdc_csc { | ||
139 | unsigned char enable; | ||
140 | /* | ||
141 | * S8Q5. Use 2 decimal precision, user values range from -3.00 to 3.99. | ||
142 | * example - to use 1.03, set integer part as 1, and decimal part as 3 | ||
143 | * to use -1.03, set integer part as -1 and decimal part as 3 | ||
144 | */ | ||
145 | struct ccdc_float coeff[CCDC_CSC_COEFF_TABLE_SIZE]; | ||
146 | }; | ||
147 | |||
148 | /* Structures for Vertical Defect Correction*/ | ||
149 | enum ccdc_vdf_csl { | ||
150 | CCDC_VDF_NORMAL, | ||
151 | CCDC_VDF_HORZ_INTERPOL_SAT, | ||
152 | CCDC_VDF_HORZ_INTERPOL | ||
153 | }; | ||
154 | |||
155 | enum ccdc_vdf_cuda { | ||
156 | CCDC_VDF_WHOLE_LINE_CORRECT, | ||
157 | CCDC_VDF_UPPER_DISABLE | ||
158 | }; | ||
159 | |||
160 | enum ccdc_dfc_mwr { | ||
161 | CCDC_DFC_MWR_WRITE_COMPLETE, | ||
162 | CCDC_DFC_WRITE_REG | ||
163 | }; | ||
164 | |||
165 | enum ccdc_dfc_mrd { | ||
166 | CCDC_DFC_READ_COMPLETE, | ||
167 | CCDC_DFC_READ_REG | ||
168 | }; | ||
169 | |||
170 | enum ccdc_dfc_ma_rst { | ||
171 | CCDC_DFC_INCR_ADDR, | ||
172 | CCDC_DFC_CLR_ADDR | ||
173 | }; | ||
174 | |||
175 | enum ccdc_dfc_mclr { | ||
176 | CCDC_DFC_CLEAR_COMPLETE, | ||
177 | CCDC_DFC_CLEAR | ||
178 | }; | ||
179 | |||
180 | struct ccdc_dft_corr_ctl { | ||
181 | enum ccdc_vdf_csl vdfcsl; | ||
182 | enum ccdc_vdf_cuda vdfcuda; | ||
183 | unsigned int vdflsft; | ||
184 | }; | ||
185 | |||
186 | struct ccdc_dft_corr_mem_ctl { | ||
187 | enum ccdc_dfc_mwr dfcmwr; | ||
188 | enum ccdc_dfc_mrd dfcmrd; | ||
189 | enum ccdc_dfc_ma_rst dfcmarst; | ||
190 | enum ccdc_dfc_mclr dfcmclr; | ||
191 | }; | ||
192 | |||
193 | #define CCDC_DFT_TABLE_SIZE 16 | ||
194 | /* | ||
195 | * Main Structure for vertical defect correction. Vertical defect | ||
196 | * correction can correct upto 16 defects if defects less than 16 | ||
197 | * then pad the rest with 0 | ||
198 | */ | ||
199 | struct ccdc_vertical_dft { | ||
200 | unsigned char ver_dft_en; | ||
201 | unsigned char gen_dft_en; | ||
202 | unsigned int saturation_ctl; | ||
203 | struct ccdc_dft_corr_ctl dft_corr_ctl; | ||
204 | struct ccdc_dft_corr_mem_ctl dft_corr_mem_ctl; | ||
205 | int table_size; | ||
206 | unsigned int dft_corr_horz[CCDC_DFT_TABLE_SIZE]; | ||
207 | unsigned int dft_corr_vert[CCDC_DFT_TABLE_SIZE]; | ||
208 | unsigned int dft_corr_sub1[CCDC_DFT_TABLE_SIZE]; | ||
209 | unsigned int dft_corr_sub2[CCDC_DFT_TABLE_SIZE]; | ||
210 | unsigned int dft_corr_sub3[CCDC_DFT_TABLE_SIZE]; | ||
211 | }; | ||
212 | |||
213 | struct ccdc_data_offset { | ||
214 | unsigned char horz_offset; | ||
215 | unsigned char vert_offset; | ||
216 | }; | ||
217 | |||
218 | /* | ||
219 | * Structure for CCDC configuration parameters for raw capture mode passed | ||
220 | * by application | ||
221 | */ | ||
222 | struct ccdc_config_params_raw { | ||
223 | /* data shift to be applied before storing */ | ||
224 | enum ccdc_datasft datasft; | ||
225 | /* data size value from 8 to 16 bits */ | ||
226 | enum ccdc_data_size data_sz; | ||
227 | /* median filter for sdram */ | ||
228 | enum ccdc_mfilt1 mfilt1; | ||
229 | enum ccdc_mfilt2 mfilt2; | ||
230 | /* low pass filter enable/disable */ | ||
231 | unsigned char lpf_enable; | ||
232 | /* Threshold of median filter */ | ||
233 | int med_filt_thres; | ||
234 | /* | ||
235 | * horz and vertical data offset. Appliable for defect correction | ||
236 | * and lsc | ||
237 | */ | ||
238 | struct ccdc_data_offset data_offset; | ||
239 | /* Structure for Optional A-Law */ | ||
240 | struct ccdc_a_law alaw; | ||
241 | /* Structure for Optical Black Clamp */ | ||
242 | struct ccdc_black_clamp blk_clamp; | ||
243 | /* Structure for Black Compensation */ | ||
244 | struct ccdc_black_compensation blk_comp; | ||
245 | /* struture for vertical Defect Correction Module Configuration */ | ||
246 | struct ccdc_vertical_dft vertical_dft; | ||
247 | /* structure for color space converter Module Configuration */ | ||
248 | struct ccdc_csc csc; | ||
249 | /* color patters for bayer capture */ | ||
250 | struct ccdc_col_pat col_pat_field0; | ||
251 | struct ccdc_col_pat col_pat_field1; | ||
252 | }; | ||
253 | |||
254 | #ifdef __KERNEL__ | ||
255 | #include <linux/io.h> | ||
256 | |||
257 | #define CCDC_WIN_PAL {0, 0, 720, 576} | ||
258 | #define CCDC_WIN_VGA {0, 0, 640, 480} | ||
259 | |||
260 | struct ccdc_params_ycbcr { | ||
261 | /* pixel format */ | ||
262 | enum ccdc_pixfmt pix_fmt; | ||
263 | /* progressive or interlaced frame */ | ||
264 | enum ccdc_frmfmt frm_fmt; | ||
265 | /* video window */ | ||
266 | struct v4l2_rect win; | ||
267 | /* field id polarity */ | ||
268 | enum vpfe_pin_pol fid_pol; | ||
269 | /* vertical sync polarity */ | ||
270 | enum vpfe_pin_pol vd_pol; | ||
271 | /* horizontal sync polarity */ | ||
272 | enum vpfe_pin_pol hd_pol; | ||
273 | /* enable BT.656 embedded sync mode */ | ||
274 | int bt656_enable; | ||
275 | /* cb:y:cr:y or y:cb:y:cr in memory */ | ||
276 | enum ccdc_pixorder pix_order; | ||
277 | /* interleaved or separated fields */ | ||
278 | enum ccdc_buftype buf_type; | ||
279 | }; | ||
280 | |||
281 | /* Gain applied to Raw Bayer data */ | ||
282 | struct ccdc_gain { | ||
283 | unsigned short r_ye; | ||
284 | unsigned short gr_cy; | ||
285 | unsigned short gb_g; | ||
286 | unsigned short b_mg; | ||
287 | }; | ||
288 | |||
289 | /* Structure for CCDC configuration parameters for raw capture mode */ | ||
290 | struct ccdc_params_raw { | ||
291 | /* pixel format */ | ||
292 | enum ccdc_pixfmt pix_fmt; | ||
293 | /* progressive or interlaced frame */ | ||
294 | enum ccdc_frmfmt frm_fmt; | ||
295 | /* video window */ | ||
296 | struct v4l2_rect win; | ||
297 | /* field id polarity */ | ||
298 | enum vpfe_pin_pol fid_pol; | ||
299 | /* vertical sync polarity */ | ||
300 | enum vpfe_pin_pol vd_pol; | ||
301 | /* horizontal sync polarity */ | ||
302 | enum vpfe_pin_pol hd_pol; | ||
303 | /* interleaved or separated fields */ | ||
304 | enum ccdc_buftype buf_type; | ||
305 | /* Gain values */ | ||
306 | struct ccdc_gain gain; | ||
307 | /* offset */ | ||
308 | unsigned int ccdc_offset; | ||
309 | /* horizontal flip enable */ | ||
310 | unsigned char horz_flip_enable; | ||
311 | /* | ||
312 | * enable to store the image in inverse order in memory | ||
313 | * (bottom to top) | ||
314 | */ | ||
315 | unsigned char image_invert_enable; | ||
316 | /* Configurable part of raw data */ | ||
317 | struct ccdc_config_params_raw config_params; | ||
318 | }; | ||
319 | |||
320 | #endif | ||
321 | #endif /* DM355_CCDC_H */ | ||
diff --git a/include/media/davinci/dm644x_ccdc.h b/include/media/davinci/dm644x_ccdc.h new file mode 100644 index 000000000000..3e178eb52fb3 --- /dev/null +++ b/include/media/davinci/dm644x_ccdc.h | |||
@@ -0,0 +1,184 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2006-2009 Texas Instruments Inc | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License as published by | ||
6 | * the Free Software Foundation; either version 2 of the License, or | ||
7 | * (at your option) any later version. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
17 | */ | ||
18 | #ifndef _DM644X_CCDC_H | ||
19 | #define _DM644X_CCDC_H | ||
20 | #include <media/davinci/ccdc_types.h> | ||
21 | #include <media/davinci/vpfe_types.h> | ||
22 | |||
23 | /* enum for No of pixel per line to be avg. in Black Clamping*/ | ||
24 | enum ccdc_sample_length { | ||
25 | CCDC_SAMPLE_1PIXELS, | ||
26 | CCDC_SAMPLE_2PIXELS, | ||
27 | CCDC_SAMPLE_4PIXELS, | ||
28 | CCDC_SAMPLE_8PIXELS, | ||
29 | CCDC_SAMPLE_16PIXELS | ||
30 | }; | ||
31 | |||
32 | /* enum for No of lines in Black Clamping */ | ||
33 | enum ccdc_sample_line { | ||
34 | CCDC_SAMPLE_1LINES, | ||
35 | CCDC_SAMPLE_2LINES, | ||
36 | CCDC_SAMPLE_4LINES, | ||
37 | CCDC_SAMPLE_8LINES, | ||
38 | CCDC_SAMPLE_16LINES | ||
39 | }; | ||
40 | |||
41 | /* enum for Alaw gama width */ | ||
42 | enum ccdc_gama_width { | ||
43 | CCDC_GAMMA_BITS_15_6, | ||
44 | CCDC_GAMMA_BITS_14_5, | ||
45 | CCDC_GAMMA_BITS_13_4, | ||
46 | CCDC_GAMMA_BITS_12_3, | ||
47 | CCDC_GAMMA_BITS_11_2, | ||
48 | CCDC_GAMMA_BITS_10_1, | ||
49 | CCDC_GAMMA_BITS_09_0 | ||
50 | }; | ||
51 | |||
52 | enum ccdc_data_size { | ||
53 | CCDC_DATA_16BITS, | ||
54 | CCDC_DATA_15BITS, | ||
55 | CCDC_DATA_14BITS, | ||
56 | CCDC_DATA_13BITS, | ||
57 | CCDC_DATA_12BITS, | ||
58 | CCDC_DATA_11BITS, | ||
59 | CCDC_DATA_10BITS, | ||
60 | CCDC_DATA_8BITS | ||
61 | }; | ||
62 | |||
63 | /* structure for ALaw */ | ||
64 | struct ccdc_a_law { | ||
65 | /* Enable/disable A-Law */ | ||
66 | unsigned char enable; | ||
67 | /* Gama Width Input */ | ||
68 | enum ccdc_gama_width gama_wd; | ||
69 | }; | ||
70 | |||
71 | /* structure for Black Clamping */ | ||
72 | struct ccdc_black_clamp { | ||
73 | unsigned char enable; | ||
74 | /* only if bClampEnable is TRUE */ | ||
75 | enum ccdc_sample_length sample_pixel; | ||
76 | /* only if bClampEnable is TRUE */ | ||
77 | enum ccdc_sample_line sample_ln; | ||
78 | /* only if bClampEnable is TRUE */ | ||
79 | unsigned short start_pixel; | ||
80 | /* only if bClampEnable is TRUE */ | ||
81 | unsigned short sgain; | ||
82 | /* only if bClampEnable is FALSE */ | ||
83 | unsigned short dc_sub; | ||
84 | }; | ||
85 | |||
86 | /* structure for Black Level Compensation */ | ||
87 | struct ccdc_black_compensation { | ||
88 | /* Constant value to subtract from Red component */ | ||
89 | char r; | ||
90 | /* Constant value to subtract from Gr component */ | ||
91 | char gr; | ||
92 | /* Constant value to subtract from Blue component */ | ||
93 | char b; | ||
94 | /* Constant value to subtract from Gb component */ | ||
95 | char gb; | ||
96 | }; | ||
97 | |||
98 | /* structure for fault pixel correction */ | ||
99 | struct ccdc_fault_pixel { | ||
100 | /* Enable or Disable fault pixel correction */ | ||
101 | unsigned char enable; | ||
102 | /* Number of fault pixel */ | ||
103 | unsigned short fp_num; | ||
104 | /* Address of fault pixel table */ | ||
105 | unsigned int fpc_table_addr; | ||
106 | }; | ||
107 | |||
108 | /* Structure for CCDC configuration parameters for raw capture mode passed | ||
109 | * by application | ||
110 | */ | ||
111 | struct ccdc_config_params_raw { | ||
112 | /* data size value from 8 to 16 bits */ | ||
113 | enum ccdc_data_size data_sz; | ||
114 | /* Structure for Optional A-Law */ | ||
115 | struct ccdc_a_law alaw; | ||
116 | /* Structure for Optical Black Clamp */ | ||
117 | struct ccdc_black_clamp blk_clamp; | ||
118 | /* Structure for Black Compensation */ | ||
119 | struct ccdc_black_compensation blk_comp; | ||
120 | /* Structure for Fault Pixel Module Configuration */ | ||
121 | struct ccdc_fault_pixel fault_pxl; | ||
122 | }; | ||
123 | |||
124 | |||
125 | #ifdef __KERNEL__ | ||
126 | #include <linux/io.h> | ||
127 | /* Define to enable/disable video port */ | ||
128 | #define FP_NUM_BYTES 4 | ||
129 | /* Define for extra pixel/line and extra lines/frame */ | ||
130 | #define NUM_EXTRAPIXELS 8 | ||
131 | #define NUM_EXTRALINES 8 | ||
132 | |||
133 | /* settings for commonly used video formats */ | ||
134 | #define CCDC_WIN_PAL {0, 0, 720, 576} | ||
135 | /* ntsc square pixel */ | ||
136 | #define CCDC_WIN_VGA {0, 0, (640 + NUM_EXTRAPIXELS), (480 + NUM_EXTRALINES)} | ||
137 | |||
138 | /* Structure for CCDC configuration parameters for raw capture mode */ | ||
139 | struct ccdc_params_raw { | ||
140 | /* pixel format */ | ||
141 | enum ccdc_pixfmt pix_fmt; | ||
142 | /* progressive or interlaced frame */ | ||
143 | enum ccdc_frmfmt frm_fmt; | ||
144 | /* video window */ | ||
145 | struct v4l2_rect win; | ||
146 | /* field id polarity */ | ||
147 | enum vpfe_pin_pol fid_pol; | ||
148 | /* vertical sync polarity */ | ||
149 | enum vpfe_pin_pol vd_pol; | ||
150 | /* horizontal sync polarity */ | ||
151 | enum vpfe_pin_pol hd_pol; | ||
152 | /* interleaved or separated fields */ | ||
153 | enum ccdc_buftype buf_type; | ||
154 | /* | ||
155 | * enable to store the image in inverse | ||
156 | * order in memory(bottom to top) | ||
157 | */ | ||
158 | unsigned char image_invert_enable; | ||
159 | /* configurable paramaters */ | ||
160 | struct ccdc_config_params_raw config_params; | ||
161 | }; | ||
162 | |||
163 | struct ccdc_params_ycbcr { | ||
164 | /* pixel format */ | ||
165 | enum ccdc_pixfmt pix_fmt; | ||
166 | /* progressive or interlaced frame */ | ||
167 | enum ccdc_frmfmt frm_fmt; | ||
168 | /* video window */ | ||
169 | struct v4l2_rect win; | ||
170 | /* field id polarity */ | ||
171 | enum vpfe_pin_pol fid_pol; | ||
172 | /* vertical sync polarity */ | ||
173 | enum vpfe_pin_pol vd_pol; | ||
174 | /* horizontal sync polarity */ | ||
175 | enum vpfe_pin_pol hd_pol; | ||
176 | /* enable BT.656 embedded sync mode */ | ||
177 | int bt656_enable; | ||
178 | /* cb:y:cr:y or y:cb:y:cr in memory */ | ||
179 | enum ccdc_pixorder pix_order; | ||
180 | /* interleaved or separated fields */ | ||
181 | enum ccdc_buftype buf_type; | ||
182 | }; | ||
183 | #endif | ||
184 | #endif /* _DM644X_CCDC_H */ | ||
diff --git a/include/media/davinci/vpfe_capture.h b/include/media/davinci/vpfe_capture.h new file mode 100644 index 000000000000..71d8982e13ff --- /dev/null +++ b/include/media/davinci/vpfe_capture.h | |||
@@ -0,0 +1,198 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2008-2009 Texas Instruments Inc | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License as published by | ||
6 | * the Free Software Foundation; either version 2 of the License, or | ||
7 | * (at your option) any later version. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
17 | */ | ||
18 | |||
19 | #ifndef _VPFE_CAPTURE_H | ||
20 | #define _VPFE_CAPTURE_H | ||
21 | |||
22 | #ifdef __KERNEL__ | ||
23 | |||
24 | /* Header files */ | ||
25 | #include <media/v4l2-dev.h> | ||
26 | #include <linux/videodev2.h> | ||
27 | #include <linux/clk.h> | ||
28 | #include <linux/i2c.h> | ||
29 | #include <media/v4l2-ioctl.h> | ||
30 | #include <media/v4l2-device.h> | ||
31 | #include <media/videobuf-dma-contig.h> | ||
32 | #include <media/davinci/vpfe_types.h> | ||
33 | |||
34 | #define VPFE_CAPTURE_NUM_DECODERS 5 | ||
35 | |||
36 | /* Macros */ | ||
37 | #define VPFE_MAJOR_RELEASE 0 | ||
38 | #define VPFE_MINOR_RELEASE 0 | ||
39 | #define VPFE_BUILD 1 | ||
40 | #define VPFE_CAPTURE_VERSION_CODE ((VPFE_MAJOR_RELEASE << 16) | \ | ||
41 | (VPFE_MINOR_RELEASE << 8) | \ | ||
42 | VPFE_BUILD) | ||
43 | |||
44 | #define CAPTURE_DRV_NAME "vpfe-capture" | ||
45 | |||
46 | struct vpfe_pixel_format { | ||
47 | struct v4l2_fmtdesc fmtdesc; | ||
48 | /* bytes per pixel */ | ||
49 | int bpp; | ||
50 | }; | ||
51 | |||
52 | struct vpfe_std_info { | ||
53 | int active_pixels; | ||
54 | int active_lines; | ||
55 | /* current frame format */ | ||
56 | int frame_format; | ||
57 | }; | ||
58 | |||
59 | struct vpfe_route { | ||
60 | u32 input; | ||
61 | u32 output; | ||
62 | }; | ||
63 | |||
64 | struct vpfe_subdev_info { | ||
65 | /* Sub device name */ | ||
66 | char name[32]; | ||
67 | /* Sub device group id */ | ||
68 | int grp_id; | ||
69 | /* Number of inputs supported */ | ||
70 | int num_inputs; | ||
71 | /* inputs available at the sub device */ | ||
72 | struct v4l2_input *inputs; | ||
73 | /* Sub dev routing information for each input */ | ||
74 | struct vpfe_route *routes; | ||
75 | /* check if sub dev supports routing */ | ||
76 | int can_route; | ||
77 | /* ccdc bus/interface configuration */ | ||
78 | struct vpfe_hw_if_param ccdc_if_params; | ||
79 | /* i2c subdevice board info */ | ||
80 | struct i2c_board_info board_info; | ||
81 | }; | ||
82 | |||
83 | struct vpfe_config { | ||
84 | /* Number of sub devices connected to vpfe */ | ||
85 | int num_subdevs; | ||
86 | /* information about each subdev */ | ||
87 | struct vpfe_subdev_info *sub_devs; | ||
88 | /* evm card info */ | ||
89 | char *card_name; | ||
90 | /* ccdc name */ | ||
91 | char *ccdc; | ||
92 | /* vpfe clock */ | ||
93 | struct clk *vpssclk; | ||
94 | struct clk *slaveclk; | ||
95 | }; | ||
96 | |||
97 | struct vpfe_device { | ||
98 | /* V4l2 specific parameters */ | ||
99 | /* Identifies video device for this channel */ | ||
100 | struct video_device *video_dev; | ||
101 | /* sub devices */ | ||
102 | struct v4l2_subdev **sd; | ||
103 | /* vpfe cfg */ | ||
104 | struct vpfe_config *cfg; | ||
105 | /* V4l2 device */ | ||
106 | struct v4l2_device v4l2_dev; | ||
107 | /* parent device */ | ||
108 | struct device *pdev; | ||
109 | /* Used to keep track of state of the priority */ | ||
110 | struct v4l2_prio_state prio; | ||
111 | /* number of open instances of the channel */ | ||
112 | u32 usrs; | ||
113 | /* Indicates id of the field which is being displayed */ | ||
114 | u32 field_id; | ||
115 | /* flag to indicate whether decoder is initialized */ | ||
116 | u8 initialized; | ||
117 | /* current interface type */ | ||
118 | struct vpfe_hw_if_param vpfe_if_params; | ||
119 | /* ptr to currently selected sub device */ | ||
120 | struct vpfe_subdev_info *current_subdev; | ||
121 | /* current input at the sub device */ | ||
122 | int current_input; | ||
123 | /* Keeps track of the information about the standard */ | ||
124 | struct vpfe_std_info std_info; | ||
125 | /* std index into std table */ | ||
126 | int std_index; | ||
127 | /* CCDC IRQs used when CCDC/ISIF output to SDRAM */ | ||
128 | unsigned int ccdc_irq0; | ||
129 | unsigned int ccdc_irq1; | ||
130 | /* number of buffers in fbuffers */ | ||
131 | u32 numbuffers; | ||
132 | /* List of buffer pointers for storing frames */ | ||
133 | u8 *fbuffers[VIDEO_MAX_FRAME]; | ||
134 | /* Pointer pointing to current v4l2_buffer */ | ||
135 | struct videobuf_buffer *cur_frm; | ||
136 | /* Pointer pointing to next v4l2_buffer */ | ||
137 | struct videobuf_buffer *next_frm; | ||
138 | /* | ||
139 | * This field keeps track of type of buffer exchange mechanism | ||
140 | * user has selected | ||
141 | */ | ||
142 | enum v4l2_memory memory; | ||
143 | /* Used to store pixel format */ | ||
144 | struct v4l2_format fmt; | ||
145 | /* | ||
146 | * used when IMP is chained to store the crop window which | ||
147 | * is different from the image window | ||
148 | */ | ||
149 | struct v4l2_rect crop; | ||
150 | /* Buffer queue used in video-buf */ | ||
151 | struct videobuf_queue buffer_queue; | ||
152 | /* Queue of filled frames */ | ||
153 | struct list_head dma_queue; | ||
154 | /* Used in video-buf */ | ||
155 | spinlock_t irqlock; | ||
156 | /* IRQ lock for DMA queue */ | ||
157 | spinlock_t dma_queue_lock; | ||
158 | /* lock used to access this structure */ | ||
159 | struct mutex lock; | ||
160 | /* number of users performing IO */ | ||
161 | u32 io_usrs; | ||
162 | /* Indicates whether streaming started */ | ||
163 | u8 started; | ||
164 | /* | ||
165 | * offset where second field starts from the starting of the | ||
166 | * buffer for field seperated YCbCr formats | ||
167 | */ | ||
168 | u32 field_off; | ||
169 | }; | ||
170 | |||
171 | /* File handle structure */ | ||
172 | struct vpfe_fh { | ||
173 | struct vpfe_device *vpfe_dev; | ||
174 | /* Indicates whether this file handle is doing IO */ | ||
175 | u8 io_allowed; | ||
176 | /* Used to keep track priority of this instance */ | ||
177 | enum v4l2_priority prio; | ||
178 | }; | ||
179 | |||
180 | struct vpfe_config_params { | ||
181 | u8 min_numbuffers; | ||
182 | u8 numbuffers; | ||
183 | u32 min_bufsize; | ||
184 | u32 device_bufsize; | ||
185 | }; | ||
186 | |||
187 | #endif /* End of __KERNEL__ */ | ||
188 | /** | ||
189 | * VPFE_CMD_S_CCDC_RAW_PARAMS - EXPERIMENTAL IOCTL to set raw capture params | ||
190 | * This can be used to configure modules such as defect pixel correction, | ||
191 | * color space conversion, culling etc. This is an experimental ioctl that | ||
192 | * will change in future kernels. So use this ioctl with care ! | ||
193 | * TODO: This is to be split into multiple ioctls and also explore the | ||
194 | * possibility of extending the v4l2 api to include this | ||
195 | **/ | ||
196 | #define VPFE_CMD_S_CCDC_RAW_PARAMS _IOW('V', BASE_VIDIOC_PRIVATE + 1, \ | ||
197 | void *) | ||
198 | #endif /* _DAVINCI_VPFE_H */ | ||
diff --git a/include/media/davinci/vpfe_types.h b/include/media/davinci/vpfe_types.h new file mode 100644 index 000000000000..76fb74bad08c --- /dev/null +++ b/include/media/davinci/vpfe_types.h | |||
@@ -0,0 +1,51 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2008-2009 Texas Instruments Inc | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License as published by | ||
6 | * the Free Software Foundation; either version 2 of the License, or | ||
7 | * (at your option)any later version. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
17 | */ | ||
18 | #ifndef _VPFE_TYPES_H | ||
19 | #define _VPFE_TYPES_H | ||
20 | |||
21 | #ifdef __KERNEL__ | ||
22 | |||
23 | enum vpfe_pin_pol { | ||
24 | VPFE_PINPOL_POSITIVE, | ||
25 | VPFE_PINPOL_NEGATIVE | ||
26 | }; | ||
27 | |||
28 | enum vpfe_hw_if_type { | ||
29 | /* BT656 - 8 bit */ | ||
30 | VPFE_BT656, | ||
31 | /* BT1120 - 16 bit */ | ||
32 | VPFE_BT1120, | ||
33 | /* Raw Bayer */ | ||
34 | VPFE_RAW_BAYER, | ||
35 | /* YCbCr - 8 bit with external sync */ | ||
36 | VPFE_YCBCR_SYNC_8, | ||
37 | /* YCbCr - 16 bit with external sync */ | ||
38 | VPFE_YCBCR_SYNC_16, | ||
39 | /* BT656 - 10 bit */ | ||
40 | VPFE_BT656_10BIT | ||
41 | }; | ||
42 | |||
43 | /* interface description */ | ||
44 | struct vpfe_hw_if_param { | ||
45 | enum vpfe_hw_if_type if_type; | ||
46 | enum vpfe_pin_pol hdpol; | ||
47 | enum vpfe_pin_pol vdpol; | ||
48 | }; | ||
49 | |||
50 | #endif | ||
51 | #endif | ||
diff --git a/include/media/davinci/vpss.h b/include/media/davinci/vpss.h new file mode 100644 index 000000000000..fcdff745fae2 --- /dev/null +++ b/include/media/davinci/vpss.h | |||
@@ -0,0 +1,69 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2009 Texas Instruments Inc | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License as published by | ||
6 | * the Free Software Foundation; either version 2 of the License, or | ||
7 | * (at your option) any later version. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
17 | * | ||
18 | * vpss - video processing subsystem module header file. | ||
19 | * | ||
20 | * Include this header file if a driver needs to configure vpss system | ||
21 | * module. It exports a set of library functions for video drivers to | ||
22 | * configure vpss system module functions such as clock enable/disable, | ||
23 | * vpss interrupt mux to arm, and other common vpss system module | ||
24 | * functions. | ||
25 | */ | ||
26 | #ifndef _VPSS_H | ||
27 | #define _VPSS_H | ||
28 | |||
29 | /* selector for ccdc input selection on DM355 */ | ||
30 | enum vpss_ccdc_source_sel { | ||
31 | VPSS_CCDCIN, | ||
32 | VPSS_HSSIIN | ||
33 | }; | ||
34 | |||
35 | /* Used for enable/diable VPSS Clock */ | ||
36 | enum vpss_clock_sel { | ||
37 | /* DM355/DM365 */ | ||
38 | VPSS_CCDC_CLOCK, | ||
39 | VPSS_IPIPE_CLOCK, | ||
40 | VPSS_H3A_CLOCK, | ||
41 | VPSS_CFALD_CLOCK, | ||
42 | /* | ||
43 | * When using VPSS_VENC_CLOCK_SEL in vpss_enable_clock() api | ||
44 | * following applies:- | ||
45 | * en = 0 selects ENC_CLK | ||
46 | * en = 1 selects ENC_CLK/2 | ||
47 | */ | ||
48 | VPSS_VENC_CLOCK_SEL, | ||
49 | VPSS_VPBE_CLOCK, | ||
50 | }; | ||
51 | |||
52 | /* select input to ccdc on dm355 */ | ||
53 | int vpss_select_ccdc_source(enum vpss_ccdc_source_sel src_sel); | ||
54 | /* enable/disable a vpss clock, 0 - success, -1 - failure */ | ||
55 | int vpss_enable_clock(enum vpss_clock_sel clock_sel, int en); | ||
56 | |||
57 | /* wbl reset for dm644x */ | ||
58 | enum vpss_wbl_sel { | ||
59 | VPSS_PCR_AEW_WBL_0 = 16, | ||
60 | VPSS_PCR_AF_WBL_0, | ||
61 | VPSS_PCR_RSZ4_WBL_0, | ||
62 | VPSS_PCR_RSZ3_WBL_0, | ||
63 | VPSS_PCR_RSZ2_WBL_0, | ||
64 | VPSS_PCR_RSZ1_WBL_0, | ||
65 | VPSS_PCR_PREV_WBL_0, | ||
66 | VPSS_PCR_CCDC_WBL_O, | ||
67 | }; | ||
68 | int vpss_clear_wbl_overflow(enum vpss_wbl_sel wbl_sel); | ||
69 | #endif | ||
diff --git a/include/media/ir-common.h b/include/media/ir-common.h index 9dcb632f6083..29f0e53cff94 100644 --- a/include/media/ir-common.h +++ b/include/media/ir-common.h | |||
@@ -31,8 +31,18 @@ | |||
31 | #define IR_TYPE_PD 2 /* Pulse distance encoded IR */ | 31 | #define IR_TYPE_PD 2 /* Pulse distance encoded IR */ |
32 | #define IR_TYPE_OTHER 99 | 32 | #define IR_TYPE_OTHER 99 |
33 | 33 | ||
34 | #define IR_KEYTAB_TYPE u32 | 34 | #define IR_KEYTAB_TYPE u32 |
35 | #define IR_KEYTAB_SIZE 128 // enougth for rc5, probably need more some day ... | 35 | #define IR_KEYTAB_SIZE 128 /* enougth for rc5, probably need more some day */ |
36 | |||
37 | struct ir_scancode { | ||
38 | u16 scancode; | ||
39 | u32 keycode; | ||
40 | }; | ||
41 | |||
42 | struct ir_scancode_table { | ||
43 | struct ir_scancode *scan; | ||
44 | int size; | ||
45 | }; | ||
36 | 46 | ||
37 | #define IR_KEYCODE(tab,code) (((unsigned)code < IR_KEYTAB_SIZE) \ | 47 | #define IR_KEYCODE(tab,code) (((unsigned)code < IR_KEYTAB_SIZE) \ |
38 | ? tab[code] : KEY_RESERVED) | 48 | ? tab[code] : KEY_RESERVED) |
@@ -93,7 +103,7 @@ struct card_ir { | |||
93 | }; | 103 | }; |
94 | 104 | ||
95 | void ir_input_init(struct input_dev *dev, struct ir_input_state *ir, | 105 | void ir_input_init(struct input_dev *dev, struct ir_input_state *ir, |
96 | int ir_type, IR_KEYTAB_TYPE *ir_codes); | 106 | int ir_type, struct ir_scancode_table *ir_codes); |
97 | void ir_input_nokey(struct input_dev *dev, struct ir_input_state *ir); | 107 | void ir_input_nokey(struct input_dev *dev, struct ir_input_state *ir); |
98 | void ir_input_keydown(struct input_dev *dev, struct ir_input_state *ir, | 108 | void ir_input_keydown(struct input_dev *dev, struct ir_input_state *ir, |
99 | u32 ir_key, u32 ir_raw); | 109 | u32 ir_key, u32 ir_raw); |
@@ -107,67 +117,63 @@ void ir_rc5_timer_keyup(unsigned long data); | |||
107 | 117 | ||
108 | /* Keymaps to be used by other modules */ | 118 | /* Keymaps to be used by other modules */ |
109 | 119 | ||
110 | extern IR_KEYTAB_TYPE ir_codes_empty[IR_KEYTAB_SIZE]; | 120 | extern struct ir_scancode_table ir_codes_empty_table; |
111 | extern IR_KEYTAB_TYPE ir_codes_avermedia[IR_KEYTAB_SIZE]; | 121 | extern struct ir_scancode_table ir_codes_avermedia_table; |
112 | extern IR_KEYTAB_TYPE ir_codes_avermedia_dvbt[IR_KEYTAB_SIZE]; | 122 | extern struct ir_scancode_table ir_codes_avermedia_dvbt_table; |
113 | extern IR_KEYTAB_TYPE ir_codes_avermedia_m135a[IR_KEYTAB_SIZE]; | 123 | extern struct ir_scancode_table ir_codes_avermedia_m135a_table; |
114 | extern IR_KEYTAB_TYPE ir_codes_avermedia_cardbus[IR_KEYTAB_SIZE]; | 124 | extern struct ir_scancode_table ir_codes_avermedia_cardbus_table; |
115 | extern IR_KEYTAB_TYPE ir_codes_apac_viewcomp[IR_KEYTAB_SIZE]; | 125 | extern struct ir_scancode_table ir_codes_apac_viewcomp_table; |
116 | extern IR_KEYTAB_TYPE ir_codes_pixelview[IR_KEYTAB_SIZE]; | 126 | extern struct ir_scancode_table ir_codes_pixelview_table; |
117 | extern IR_KEYTAB_TYPE ir_codes_pixelview_new[IR_KEYTAB_SIZE]; | 127 | extern struct ir_scancode_table ir_codes_pixelview_new_table; |
118 | extern IR_KEYTAB_TYPE ir_codes_nebula[IR_KEYTAB_SIZE]; | 128 | extern struct ir_scancode_table ir_codes_nebula_table; |
119 | extern IR_KEYTAB_TYPE ir_codes_dntv_live_dvb_t[IR_KEYTAB_SIZE]; | 129 | extern struct ir_scancode_table ir_codes_dntv_live_dvb_t_table; |
120 | extern IR_KEYTAB_TYPE ir_codes_iodata_bctv7e[IR_KEYTAB_SIZE]; | 130 | extern struct ir_scancode_table ir_codes_iodata_bctv7e_table; |
121 | extern IR_KEYTAB_TYPE ir_codes_adstech_dvb_t_pci[IR_KEYTAB_SIZE]; | 131 | extern struct ir_scancode_table ir_codes_adstech_dvb_t_pci_table; |
122 | extern IR_KEYTAB_TYPE ir_codes_msi_tvanywhere[IR_KEYTAB_SIZE]; | 132 | extern struct ir_scancode_table ir_codes_msi_tvanywhere_table; |
123 | extern IR_KEYTAB_TYPE ir_codes_cinergy_1400[IR_KEYTAB_SIZE]; | 133 | extern struct ir_scancode_table ir_codes_cinergy_1400_table; |
124 | extern IR_KEYTAB_TYPE ir_codes_avertv_303[IR_KEYTAB_SIZE]; | 134 | extern struct ir_scancode_table ir_codes_avertv_303_table; |
125 | extern IR_KEYTAB_TYPE ir_codes_dntv_live_dvbt_pro[IR_KEYTAB_SIZE]; | 135 | extern struct ir_scancode_table ir_codes_dntv_live_dvbt_pro_table; |
126 | extern IR_KEYTAB_TYPE ir_codes_em_terratec[IR_KEYTAB_SIZE]; | 136 | extern struct ir_scancode_table ir_codes_em_terratec_table; |
127 | extern IR_KEYTAB_TYPE ir_codes_pinnacle_grey[IR_KEYTAB_SIZE]; | 137 | extern struct ir_scancode_table ir_codes_pinnacle_grey_table; |
128 | extern IR_KEYTAB_TYPE ir_codes_flyvideo[IR_KEYTAB_SIZE]; | 138 | extern struct ir_scancode_table ir_codes_flyvideo_table; |
129 | extern IR_KEYTAB_TYPE ir_codes_flydvb[IR_KEYTAB_SIZE]; | 139 | extern struct ir_scancode_table ir_codes_flydvb_table; |
130 | extern IR_KEYTAB_TYPE ir_codes_cinergy[IR_KEYTAB_SIZE]; | 140 | extern struct ir_scancode_table ir_codes_cinergy_table; |
131 | extern IR_KEYTAB_TYPE ir_codes_eztv[IR_KEYTAB_SIZE]; | 141 | extern struct ir_scancode_table ir_codes_eztv_table; |
132 | extern IR_KEYTAB_TYPE ir_codes_avermedia[IR_KEYTAB_SIZE]; | 142 | extern struct ir_scancode_table ir_codes_avermedia_table; |
133 | extern IR_KEYTAB_TYPE ir_codes_videomate_tv_pvr[IR_KEYTAB_SIZE]; | 143 | extern struct ir_scancode_table ir_codes_videomate_tv_pvr_table; |
134 | extern IR_KEYTAB_TYPE ir_codes_manli[IR_KEYTAB_SIZE]; | 144 | extern struct ir_scancode_table ir_codes_manli_table; |
135 | extern IR_KEYTAB_TYPE ir_codes_gotview7135[IR_KEYTAB_SIZE]; | 145 | extern struct ir_scancode_table ir_codes_gotview7135_table; |
136 | extern IR_KEYTAB_TYPE ir_codes_purpletv[IR_KEYTAB_SIZE]; | 146 | extern struct ir_scancode_table ir_codes_purpletv_table; |
137 | extern IR_KEYTAB_TYPE ir_codes_pctv_sedna[IR_KEYTAB_SIZE]; | 147 | extern struct ir_scancode_table ir_codes_pctv_sedna_table; |
138 | extern IR_KEYTAB_TYPE ir_codes_pv951[IR_KEYTAB_SIZE]; | 148 | extern struct ir_scancode_table ir_codes_pv951_table; |
139 | extern IR_KEYTAB_TYPE ir_codes_rc5_tv[IR_KEYTAB_SIZE]; | 149 | extern struct ir_scancode_table ir_codes_rc5_tv_table; |
140 | extern IR_KEYTAB_TYPE ir_codes_winfast[IR_KEYTAB_SIZE]; | 150 | extern struct ir_scancode_table ir_codes_winfast_table; |
141 | extern IR_KEYTAB_TYPE ir_codes_pinnacle_color[IR_KEYTAB_SIZE]; | 151 | extern struct ir_scancode_table ir_codes_pinnacle_color_table; |
142 | extern IR_KEYTAB_TYPE ir_codes_hauppauge_new[IR_KEYTAB_SIZE]; | 152 | extern struct ir_scancode_table ir_codes_hauppauge_new_table; |
143 | extern IR_KEYTAB_TYPE ir_codes_npgtech[IR_KEYTAB_SIZE]; | 153 | extern struct ir_scancode_table ir_codes_npgtech_table; |
144 | extern IR_KEYTAB_TYPE ir_codes_norwood[IR_KEYTAB_SIZE]; | 154 | extern struct ir_scancode_table ir_codes_norwood_table; |
145 | extern IR_KEYTAB_TYPE ir_codes_proteus_2309[IR_KEYTAB_SIZE]; | 155 | extern struct ir_scancode_table ir_codes_proteus_2309_table; |
146 | extern IR_KEYTAB_TYPE ir_codes_budget_ci_old[IR_KEYTAB_SIZE]; | 156 | extern struct ir_scancode_table ir_codes_budget_ci_old_table; |
147 | extern IR_KEYTAB_TYPE ir_codes_asus_pc39[IR_KEYTAB_SIZE]; | 157 | extern struct ir_scancode_table ir_codes_asus_pc39_table; |
148 | extern IR_KEYTAB_TYPE ir_codes_encore_enltv[IR_KEYTAB_SIZE]; | 158 | extern struct ir_scancode_table ir_codes_encore_enltv_table; |
149 | extern IR_KEYTAB_TYPE ir_codes_encore_enltv2[IR_KEYTAB_SIZE]; | 159 | extern struct ir_scancode_table ir_codes_encore_enltv2_table; |
150 | extern IR_KEYTAB_TYPE ir_codes_tt_1500[IR_KEYTAB_SIZE]; | 160 | extern struct ir_scancode_table ir_codes_tt_1500_table; |
151 | extern IR_KEYTAB_TYPE ir_codes_fusionhdtv_mce[IR_KEYTAB_SIZE]; | 161 | extern struct ir_scancode_table ir_codes_fusionhdtv_mce_table; |
152 | extern IR_KEYTAB_TYPE ir_codes_behold[IR_KEYTAB_SIZE]; | 162 | extern struct ir_scancode_table ir_codes_behold_table; |
153 | extern IR_KEYTAB_TYPE ir_codes_behold_columbus[IR_KEYTAB_SIZE]; | 163 | extern struct ir_scancode_table ir_codes_behold_columbus_table; |
154 | extern IR_KEYTAB_TYPE ir_codes_pinnacle_pctv_hd[IR_KEYTAB_SIZE]; | 164 | extern struct ir_scancode_table ir_codes_pinnacle_pctv_hd_table; |
155 | extern IR_KEYTAB_TYPE ir_codes_genius_tvgo_a11mce[IR_KEYTAB_SIZE]; | 165 | extern struct ir_scancode_table ir_codes_genius_tvgo_a11mce_table; |
156 | extern IR_KEYTAB_TYPE ir_codes_powercolor_real_angel[IR_KEYTAB_SIZE]; | 166 | extern struct ir_scancode_table ir_codes_powercolor_real_angel_table; |
157 | extern IR_KEYTAB_TYPE ir_codes_avermedia_a16d[IR_KEYTAB_SIZE]; | 167 | extern struct ir_scancode_table ir_codes_avermedia_a16d_table; |
158 | extern IR_KEYTAB_TYPE ir_codes_encore_enltv_fm53[IR_KEYTAB_SIZE]; | 168 | extern struct ir_scancode_table ir_codes_encore_enltv_fm53_table; |
159 | extern IR_KEYTAB_TYPE ir_codes_real_audio_220_32_keys[IR_KEYTAB_SIZE]; | 169 | extern struct ir_scancode_table ir_codes_real_audio_220_32_keys_table; |
160 | extern IR_KEYTAB_TYPE ir_codes_msi_tvanywhere_plus[IR_KEYTAB_SIZE]; | 170 | extern struct ir_scancode_table ir_codes_msi_tvanywhere_plus_table; |
161 | extern IR_KEYTAB_TYPE ir_codes_ati_tv_wonder_hd_600[IR_KEYTAB_SIZE]; | 171 | extern struct ir_scancode_table ir_codes_ati_tv_wonder_hd_600_table; |
162 | extern IR_KEYTAB_TYPE ir_codes_kworld_plus_tv_analog[IR_KEYTAB_SIZE]; | 172 | extern struct ir_scancode_table ir_codes_kworld_plus_tv_analog_table; |
163 | extern IR_KEYTAB_TYPE ir_codes_kaiomy[IR_KEYTAB_SIZE]; | 173 | extern struct ir_scancode_table ir_codes_kaiomy_table; |
164 | extern IR_KEYTAB_TYPE ir_codes_dm1105_nec[IR_KEYTAB_SIZE]; | 174 | extern struct ir_scancode_table ir_codes_dm1105_nec_table; |
165 | extern IR_KEYTAB_TYPE ir_codes_evga_indtube[IR_KEYTAB_SIZE]; | 175 | extern struct ir_scancode_table ir_codes_evga_indtube_table; |
166 | 176 | extern struct ir_scancode_table ir_codes_terratec_cinergy_xs_table; | |
177 | extern struct ir_scancode_table ir_codes_videomate_s350_table; | ||
178 | extern struct ir_scancode_table ir_codes_gadmei_rm008z_table; | ||
167 | #endif | 179 | #endif |
168 | |||
169 | /* | ||
170 | * Local variables: | ||
171 | * c-basic-offset: 8 | ||
172 | * End: | ||
173 | */ | ||
diff --git a/include/media/ir-kbd-i2c.h b/include/media/ir-kbd-i2c.h index 3ad4ed5402fb..aaf65e8b1a40 100644 --- a/include/media/ir-kbd-i2c.h +++ b/include/media/ir-kbd-i2c.h | |||
@@ -6,7 +6,8 @@ | |||
6 | struct IR_i2c; | 6 | struct IR_i2c; |
7 | 7 | ||
8 | struct IR_i2c { | 8 | struct IR_i2c { |
9 | IR_KEYTAB_TYPE *ir_codes; | 9 | struct ir_scancode_table *ir_codes; |
10 | |||
10 | struct i2c_client *c; | 11 | struct i2c_client *c; |
11 | struct input_dev *input; | 12 | struct input_dev *input; |
12 | struct ir_input_state ir; | 13 | struct ir_input_state ir; |
@@ -20,10 +21,27 @@ struct IR_i2c { | |||
20 | int (*get_key)(struct IR_i2c*, u32*, u32*); | 21 | int (*get_key)(struct IR_i2c*, u32*, u32*); |
21 | }; | 22 | }; |
22 | 23 | ||
24 | enum ir_kbd_get_key_fn { | ||
25 | IR_KBD_GET_KEY_CUSTOM = 0, | ||
26 | IR_KBD_GET_KEY_PIXELVIEW, | ||
27 | IR_KBD_GET_KEY_PV951, | ||
28 | IR_KBD_GET_KEY_HAUP, | ||
29 | IR_KBD_GET_KEY_KNC1, | ||
30 | IR_KBD_GET_KEY_FUSIONHDTV, | ||
31 | IR_KBD_GET_KEY_HAUP_XVR, | ||
32 | IR_KBD_GET_KEY_AVERMEDIA_CARDBUS, | ||
33 | }; | ||
34 | |||
23 | /* Can be passed when instantiating an ir_video i2c device */ | 35 | /* Can be passed when instantiating an ir_video i2c device */ |
24 | struct IR_i2c_init_data { | 36 | struct IR_i2c_init_data { |
25 | IR_KEYTAB_TYPE *ir_codes; | 37 | struct ir_scancode_table *ir_codes; |
26 | const char *name; | 38 | const char *name; |
39 | int type; /* IR_TYPE_RC5, IR_TYPE_PD, etc */ | ||
40 | /* | ||
41 | * Specify either a function pointer or a value indicating one of | ||
42 | * ir_kbd_i2c's internal get_key functions | ||
43 | */ | ||
27 | int (*get_key)(struct IR_i2c*, u32*, u32*); | 44 | int (*get_key)(struct IR_i2c*, u32*, u32*); |
45 | enum ir_kbd_get_key_fn internal_get_key_func; | ||
28 | }; | 46 | }; |
29 | #endif | 47 | #endif |
diff --git a/include/media/radio-si4713.h b/include/media/radio-si4713.h new file mode 100644 index 000000000000..f6aae29c7741 --- /dev/null +++ b/include/media/radio-si4713.h | |||
@@ -0,0 +1,30 @@ | |||
1 | /* | ||
2 | * include/media/radio-si4713.h | ||
3 | * | ||
4 | * Board related data definitions for Si4713 radio transmitter chip. | ||
5 | * | ||
6 | * Copyright (c) 2009 Nokia Corporation | ||
7 | * Contact: Eduardo Valentin <eduardo.valentin@nokia.com> | ||
8 | * | ||
9 | * This file is licensed under the terms of the GNU General Public License | ||
10 | * version 2. This program is licensed "as is" without any warranty of any | ||
11 | * kind, whether express or implied. | ||
12 | * | ||
13 | */ | ||
14 | |||
15 | #ifndef RADIO_SI4713_H | ||
16 | #define RADIO_SI4713_H | ||
17 | |||
18 | #include <linux/i2c.h> | ||
19 | |||
20 | #define SI4713_NAME "radio-si4713" | ||
21 | |||
22 | /* | ||
23 | * Platform dependent definition | ||
24 | */ | ||
25 | struct radio_si4713_platform_data { | ||
26 | int i2c_bus; | ||
27 | struct i2c_board_info *subdev_board_info; | ||
28 | }; | ||
29 | |||
30 | #endif /* ifndef RADIO_SI4713_H*/ | ||
diff --git a/include/media/si4713.h b/include/media/si4713.h new file mode 100644 index 000000000000..99850a54ed09 --- /dev/null +++ b/include/media/si4713.h | |||
@@ -0,0 +1,49 @@ | |||
1 | /* | ||
2 | * include/media/si4713.h | ||
3 | * | ||
4 | * Board related data definitions for Si4713 i2c device driver. | ||
5 | * | ||
6 | * Copyright (c) 2009 Nokia Corporation | ||
7 | * Contact: Eduardo Valentin <eduardo.valentin@nokia.com> | ||
8 | * | ||
9 | * This file is licensed under the terms of the GNU General Public License | ||
10 | * version 2. This program is licensed "as is" without any warranty of any | ||
11 | * kind, whether express or implied. | ||
12 | * | ||
13 | */ | ||
14 | |||
15 | #ifndef SI4713_H | ||
16 | #define SI4713_H | ||
17 | |||
18 | /* The SI4713 I2C sensor chip has a fixed slave address of 0xc6 or 0x22. */ | ||
19 | #define SI4713_I2C_ADDR_BUSEN_HIGH 0x63 | ||
20 | #define SI4713_I2C_ADDR_BUSEN_LOW 0x11 | ||
21 | |||
22 | /* | ||
23 | * Platform dependent definition | ||
24 | */ | ||
25 | struct si4713_platform_data { | ||
26 | /* Set power state, zero is off, non-zero is on. */ | ||
27 | int (*set_power)(int power); | ||
28 | }; | ||
29 | |||
30 | /* | ||
31 | * Structure to query for Received Noise Level (RNL). | ||
32 | */ | ||
33 | struct si4713_rnl { | ||
34 | __u32 index; /* modulator index */ | ||
35 | __u32 frequency; /* frequency to peform rnl measurement */ | ||
36 | __s32 rnl; /* result of measurement in dBuV */ | ||
37 | __u32 reserved[4]; /* drivers and apps must init this to 0 */ | ||
38 | }; | ||
39 | |||
40 | /* | ||
41 | * This is the ioctl number to query for rnl. Users must pass a | ||
42 | * struct si4713_rnl pointer specifying desired frequency in 'frequency' field | ||
43 | * following driver capabilities (i.e V4L2_TUNER_CAP_LOW). | ||
44 | * Driver must return measured value in the same struture, filling 'rnl' field. | ||
45 | */ | ||
46 | #define SI4713_IOC_MEASURE_RNL _IOWR('V', BASE_VIDIOC_PRIVATE + 0, \ | ||
47 | struct si4713_rnl) | ||
48 | |||
49 | #endif /* ifndef SI4713_H*/ | ||
diff --git a/include/media/soc_camera.h b/include/media/soc_camera.h index 23ecead35e7a..3d74e60032dd 100644 --- a/include/media/soc_camera.h +++ b/include/media/soc_camera.h | |||
@@ -16,24 +16,17 @@ | |||
16 | #include <linux/pm.h> | 16 | #include <linux/pm.h> |
17 | #include <linux/videodev2.h> | 17 | #include <linux/videodev2.h> |
18 | #include <media/videobuf-core.h> | 18 | #include <media/videobuf-core.h> |
19 | #include <media/v4l2-device.h> | ||
19 | 20 | ||
20 | struct soc_camera_device { | 21 | struct soc_camera_device { |
21 | struct list_head list; | 22 | struct list_head list; |
22 | struct device dev; | 23 | struct device dev; |
23 | struct device *control; | 24 | struct device *pdev; /* Platform device */ |
24 | unsigned short width; /* Current window */ | 25 | s32 user_width; |
25 | unsigned short height; /* sizes */ | 26 | s32 user_height; |
26 | unsigned short x_min; /* Camera capabilities */ | ||
27 | unsigned short y_min; | ||
28 | unsigned short x_current; /* Current window location */ | ||
29 | unsigned short y_current; | ||
30 | unsigned short width_min; | 27 | unsigned short width_min; |
31 | unsigned short width_max; | ||
32 | unsigned short height_min; | 28 | unsigned short height_min; |
33 | unsigned short height_max; | ||
34 | unsigned short y_skip_top; /* Lines to skip at the top */ | 29 | unsigned short y_skip_top; /* Lines to skip at the top */ |
35 | unsigned short gain; | ||
36 | unsigned short exposure; | ||
37 | unsigned char iface; /* Host number */ | 30 | unsigned char iface; /* Host number */ |
38 | unsigned char devnum; /* Device number per host */ | 31 | unsigned char devnum; /* Device number per host */ |
39 | unsigned char buswidth; /* See comment in .c */ | 32 | unsigned char buswidth; /* See comment in .c */ |
@@ -46,7 +39,6 @@ struct soc_camera_device { | |||
46 | struct soc_camera_format_xlate *user_formats; | 39 | struct soc_camera_format_xlate *user_formats; |
47 | int num_user_formats; | 40 | int num_user_formats; |
48 | enum v4l2_field field; /* Preserve field over close() */ | 41 | enum v4l2_field field; /* Preserve field over close() */ |
49 | struct module *owner; | ||
50 | void *host_priv; /* Per-device host private data */ | 42 | void *host_priv; /* Per-device host private data */ |
51 | /* soc_camera.c private count. Only accessed with .video_lock held */ | 43 | /* soc_camera.c private count. Only accessed with .video_lock held */ |
52 | int use_count; | 44 | int use_count; |
@@ -59,8 +51,8 @@ struct soc_camera_file { | |||
59 | }; | 51 | }; |
60 | 52 | ||
61 | struct soc_camera_host { | 53 | struct soc_camera_host { |
54 | struct v4l2_device v4l2_dev; | ||
62 | struct list_head list; | 55 | struct list_head list; |
63 | struct device *dev; | ||
64 | unsigned char nr; /* Host number */ | 56 | unsigned char nr; /* Host number */ |
65 | void *priv; | 57 | void *priv; |
66 | const char *drv_name; | 58 | const char *drv_name; |
@@ -73,9 +65,18 @@ struct soc_camera_host_ops { | |||
73 | void (*remove)(struct soc_camera_device *); | 65 | void (*remove)(struct soc_camera_device *); |
74 | int (*suspend)(struct soc_camera_device *, pm_message_t); | 66 | int (*suspend)(struct soc_camera_device *, pm_message_t); |
75 | int (*resume)(struct soc_camera_device *); | 67 | int (*resume)(struct soc_camera_device *); |
68 | /* | ||
69 | * .get_formats() is called for each client device format, but | ||
70 | * .put_formats() is only called once. Further, if any of the calls to | ||
71 | * .get_formats() fail, .put_formats() will not be called at all, the | ||
72 | * failing .get_formats() must then clean up internally. | ||
73 | */ | ||
76 | int (*get_formats)(struct soc_camera_device *, int, | 74 | int (*get_formats)(struct soc_camera_device *, int, |
77 | struct soc_camera_format_xlate *); | 75 | struct soc_camera_format_xlate *); |
78 | int (*set_crop)(struct soc_camera_device *, struct v4l2_rect *); | 76 | void (*put_formats)(struct soc_camera_device *); |
77 | int (*cropcap)(struct soc_camera_device *, struct v4l2_cropcap *); | ||
78 | int (*get_crop)(struct soc_camera_device *, struct v4l2_crop *); | ||
79 | int (*set_crop)(struct soc_camera_device *, struct v4l2_crop *); | ||
79 | int (*set_fmt)(struct soc_camera_device *, struct v4l2_format *); | 80 | int (*set_fmt)(struct soc_camera_device *, struct v4l2_format *); |
80 | int (*try_fmt)(struct soc_camera_device *, struct v4l2_format *); | 81 | int (*try_fmt)(struct soc_camera_device *, struct v4l2_format *); |
81 | void (*init_videobuf)(struct videobuf_queue *, | 82 | void (*init_videobuf)(struct videobuf_queue *, |
@@ -83,7 +84,11 @@ struct soc_camera_host_ops { | |||
83 | int (*reqbufs)(struct soc_camera_file *, struct v4l2_requestbuffers *); | 84 | int (*reqbufs)(struct soc_camera_file *, struct v4l2_requestbuffers *); |
84 | int (*querycap)(struct soc_camera_host *, struct v4l2_capability *); | 85 | int (*querycap)(struct soc_camera_host *, struct v4l2_capability *); |
85 | int (*set_bus_param)(struct soc_camera_device *, __u32); | 86 | int (*set_bus_param)(struct soc_camera_device *, __u32); |
87 | int (*get_ctrl)(struct soc_camera_device *, struct v4l2_control *); | ||
88 | int (*set_ctrl)(struct soc_camera_device *, struct v4l2_control *); | ||
86 | unsigned int (*poll)(struct file *, poll_table *); | 89 | unsigned int (*poll)(struct file *, poll_table *); |
90 | const struct v4l2_queryctrl *controls; | ||
91 | int num_controls; | ||
87 | }; | 92 | }; |
88 | 93 | ||
89 | #define SOCAM_SENSOR_INVERT_PCLK (1 << 0) | 94 | #define SOCAM_SENSOR_INVERT_PCLK (1 << 0) |
@@ -102,6 +107,12 @@ struct soc_camera_link { | |||
102 | int i2c_adapter_id; | 107 | int i2c_adapter_id; |
103 | struct i2c_board_info *board_info; | 108 | struct i2c_board_info *board_info; |
104 | const char *module_name; | 109 | const char *module_name; |
110 | /* | ||
111 | * For non-I2C devices platform platform has to provide methods to | ||
112 | * add a device to the system and to remove | ||
113 | */ | ||
114 | int (*add_device)(struct soc_camera_link *, struct device *); | ||
115 | void (*del_device)(struct soc_camera_link *); | ||
105 | /* Optional callbacks to power on or off and reset the sensor */ | 116 | /* Optional callbacks to power on or off and reset the sensor */ |
106 | int (*power)(struct device *, int); | 117 | int (*power)(struct device *, int); |
107 | int (*reset)(struct device *); | 118 | int (*reset)(struct device *); |
@@ -115,27 +126,45 @@ struct soc_camera_link { | |||
115 | void (*free_bus)(struct soc_camera_link *); | 126 | void (*free_bus)(struct soc_camera_link *); |
116 | }; | 127 | }; |
117 | 128 | ||
118 | static inline struct soc_camera_device *to_soc_camera_dev(struct device *dev) | 129 | static inline struct soc_camera_device *to_soc_camera_dev( |
130 | const struct device *dev) | ||
119 | { | 131 | { |
120 | return container_of(dev, struct soc_camera_device, dev); | 132 | return container_of(dev, struct soc_camera_device, dev); |
121 | } | 133 | } |
122 | 134 | ||
123 | static inline struct soc_camera_host *to_soc_camera_host(struct device *dev) | 135 | static inline struct soc_camera_host *to_soc_camera_host( |
136 | const struct device *dev) | ||
124 | { | 137 | { |
125 | return dev_get_drvdata(dev); | 138 | struct v4l2_device *v4l2_dev = dev_get_drvdata(dev); |
139 | |||
140 | return container_of(v4l2_dev, struct soc_camera_host, v4l2_dev); | ||
126 | } | 141 | } |
127 | 142 | ||
128 | extern int soc_camera_host_register(struct soc_camera_host *ici); | 143 | static inline struct soc_camera_link *to_soc_camera_link( |
129 | extern void soc_camera_host_unregister(struct soc_camera_host *ici); | 144 | const struct soc_camera_device *icd) |
130 | extern int soc_camera_device_register(struct soc_camera_device *icd); | 145 | { |
131 | extern void soc_camera_device_unregister(struct soc_camera_device *icd); | 146 | return icd->dev.platform_data; |
147 | } | ||
132 | 148 | ||
133 | extern int soc_camera_video_start(struct soc_camera_device *icd); | 149 | static inline struct device *to_soc_camera_control( |
134 | extern void soc_camera_video_stop(struct soc_camera_device *icd); | 150 | const struct soc_camera_device *icd) |
151 | { | ||
152 | return dev_get_drvdata(&icd->dev); | ||
153 | } | ||
135 | 154 | ||
136 | extern const struct soc_camera_data_format *soc_camera_format_by_fourcc( | 155 | static inline struct v4l2_subdev *soc_camera_to_subdev( |
156 | const struct soc_camera_device *icd) | ||
157 | { | ||
158 | struct device *control = to_soc_camera_control(icd); | ||
159 | return dev_get_drvdata(control); | ||
160 | } | ||
161 | |||
162 | int soc_camera_host_register(struct soc_camera_host *ici); | ||
163 | void soc_camera_host_unregister(struct soc_camera_host *ici); | ||
164 | |||
165 | const struct soc_camera_data_format *soc_camera_format_by_fourcc( | ||
137 | struct soc_camera_device *icd, unsigned int fourcc); | 166 | struct soc_camera_device *icd, unsigned int fourcc); |
138 | extern const struct soc_camera_format_xlate *soc_camera_xlate_by_fourcc( | 167 | const struct soc_camera_format_xlate *soc_camera_xlate_by_fourcc( |
139 | struct soc_camera_device *icd, unsigned int fourcc); | 168 | struct soc_camera_device *icd, unsigned int fourcc); |
140 | 169 | ||
141 | struct soc_camera_data_format { | 170 | struct soc_camera_data_format { |
@@ -163,30 +192,11 @@ struct soc_camera_format_xlate { | |||
163 | }; | 192 | }; |
164 | 193 | ||
165 | struct soc_camera_ops { | 194 | struct soc_camera_ops { |
166 | struct module *owner; | ||
167 | int (*probe)(struct soc_camera_device *); | ||
168 | void (*remove)(struct soc_camera_device *); | ||
169 | int (*suspend)(struct soc_camera_device *, pm_message_t state); | 195 | int (*suspend)(struct soc_camera_device *, pm_message_t state); |
170 | int (*resume)(struct soc_camera_device *); | 196 | int (*resume)(struct soc_camera_device *); |
171 | int (*init)(struct soc_camera_device *); | ||
172 | int (*release)(struct soc_camera_device *); | ||
173 | int (*start_capture)(struct soc_camera_device *); | ||
174 | int (*stop_capture)(struct soc_camera_device *); | ||
175 | int (*set_crop)(struct soc_camera_device *, struct v4l2_rect *); | ||
176 | int (*set_fmt)(struct soc_camera_device *, struct v4l2_format *); | ||
177 | int (*try_fmt)(struct soc_camera_device *, struct v4l2_format *); | ||
178 | unsigned long (*query_bus_param)(struct soc_camera_device *); | 197 | unsigned long (*query_bus_param)(struct soc_camera_device *); |
179 | int (*set_bus_param)(struct soc_camera_device *, unsigned long); | 198 | int (*set_bus_param)(struct soc_camera_device *, unsigned long); |
180 | int (*get_chip_id)(struct soc_camera_device *, | ||
181 | struct v4l2_dbg_chip_ident *); | ||
182 | int (*set_std)(struct soc_camera_device *, v4l2_std_id *); | ||
183 | int (*enum_input)(struct soc_camera_device *, struct v4l2_input *); | 199 | int (*enum_input)(struct soc_camera_device *, struct v4l2_input *); |
184 | #ifdef CONFIG_VIDEO_ADV_DEBUG | ||
185 | int (*get_register)(struct soc_camera_device *, struct v4l2_dbg_register *); | ||
186 | int (*set_register)(struct soc_camera_device *, struct v4l2_dbg_register *); | ||
187 | #endif | ||
188 | int (*get_control)(struct soc_camera_device *, struct v4l2_control *); | ||
189 | int (*set_control)(struct soc_camera_device *, struct v4l2_control *); | ||
190 | const struct v4l2_queryctrl *controls; | 200 | const struct v4l2_queryctrl *controls; |
191 | int num_controls; | 201 | int num_controls; |
192 | }; | 202 | }; |
@@ -268,6 +278,21 @@ static inline unsigned long soc_camera_bus_param_compatible( | |||
268 | common_flags; | 278 | common_flags; |
269 | } | 279 | } |
270 | 280 | ||
281 | static inline void soc_camera_limit_side(unsigned int *start, | ||
282 | unsigned int *length, unsigned int start_min, | ||
283 | unsigned int length_min, unsigned int length_max) | ||
284 | { | ||
285 | if (*length < length_min) | ||
286 | *length = length_min; | ||
287 | else if (*length > length_max) | ||
288 | *length = length_max; | ||
289 | |||
290 | if (*start < start_min) | ||
291 | *start = start_min; | ||
292 | else if (*start > start_min + length_max - *length) | ||
293 | *start = start_min + length_max - *length; | ||
294 | } | ||
295 | |||
271 | extern unsigned long soc_camera_apply_sensor_flags(struct soc_camera_link *icl, | 296 | extern unsigned long soc_camera_apply_sensor_flags(struct soc_camera_link *icl, |
272 | unsigned long flags); | 297 | unsigned long flags); |
273 | 298 | ||
diff --git a/include/media/soc_camera_platform.h b/include/media/soc_camera_platform.h index 1d092b4678aa..bb70401b8141 100644 --- a/include/media/soc_camera_platform.h +++ b/include/media/soc_camera_platform.h | |||
@@ -12,15 +12,18 @@ | |||
12 | #define __SOC_CAMERA_H__ | 12 | #define __SOC_CAMERA_H__ |
13 | 13 | ||
14 | #include <linux/videodev2.h> | 14 | #include <linux/videodev2.h> |
15 | #include <media/soc_camera.h> | ||
16 | |||
17 | struct device; | ||
15 | 18 | ||
16 | struct soc_camera_platform_info { | 19 | struct soc_camera_platform_info { |
17 | int iface; | 20 | const char *format_name; |
18 | char *format_name; | ||
19 | unsigned long format_depth; | 21 | unsigned long format_depth; |
20 | struct v4l2_pix_format format; | 22 | struct v4l2_pix_format format; |
21 | unsigned long bus_param; | 23 | unsigned long bus_param; |
22 | void (*power)(int); | 24 | struct device *dev; |
23 | int (*set_capture)(struct soc_camera_platform_info *info, int enable); | 25 | int (*set_capture)(struct soc_camera_platform_info *info, int enable); |
26 | struct soc_camera_link link; | ||
24 | }; | 27 | }; |
25 | 28 | ||
26 | #endif /* __SOC_CAMERA_H__ */ | 29 | #endif /* __SOC_CAMERA_H__ */ |
diff --git a/include/media/tuner.h b/include/media/tuner.h index cbf97f45fbec..4d5b53ff17db 100644 --- a/include/media/tuner.h +++ b/include/media/tuner.h | |||
@@ -126,6 +126,9 @@ | |||
126 | #define TUNER_PHILIPS_FMD1216MEX_MK3 78 | 126 | #define TUNER_PHILIPS_FMD1216MEX_MK3 78 |
127 | #define TUNER_PHILIPS_FM1216MK5 79 | 127 | #define TUNER_PHILIPS_FM1216MK5 79 |
128 | #define TUNER_PHILIPS_FQ1216LME_MK3 80 /* Active loopthrough, no FM */ | 128 | #define TUNER_PHILIPS_FQ1216LME_MK3 80 /* Active loopthrough, no FM */ |
129 | #define TUNER_PARTSNIC_PTI_5NF05 81 | ||
130 | #define TUNER_PHILIPS_CU1216L 82 | ||
131 | #define TUNER_NXP_TDA18271 83 | ||
129 | 132 | ||
130 | /* tv card specific */ | 133 | /* tv card specific */ |
131 | #define TDA9887_PRESENT (1<<0) | 134 | #define TDA9887_PRESENT (1<<0) |
diff --git a/include/media/tvp514x.h b/include/media/tvp514x.h index 5e7ee968c6dc..74387e83f5b9 100644 --- a/include/media/tvp514x.h +++ b/include/media/tvp514x.h | |||
@@ -104,10 +104,6 @@ enum tvp514x_output { | |||
104 | * @ vs_polarity: VSYNC Polarity configuration for current interface. | 104 | * @ vs_polarity: VSYNC Polarity configuration for current interface. |
105 | */ | 105 | */ |
106 | struct tvp514x_platform_data { | 106 | struct tvp514x_platform_data { |
107 | char *master; | ||
108 | int (*power_set) (enum v4l2_power on); | ||
109 | int (*ifparm) (struct v4l2_ifparm *p); | ||
110 | int (*priv_data_set) (void *); | ||
111 | /* Interface control params */ | 107 | /* Interface control params */ |
112 | bool clk_polarity; | 108 | bool clk_polarity; |
113 | bool hs_polarity; | 109 | bool hs_polarity; |
diff --git a/include/media/v4l2-chip-ident.h b/include/media/v4l2-chip-ident.h index 4d7e2272c42f..cf16689adba7 100644 --- a/include/media/v4l2-chip-ident.h +++ b/include/media/v4l2-chip-ident.h | |||
@@ -60,6 +60,10 @@ enum { | |||
60 | V4L2_IDENT_OV7670 = 250, | 60 | V4L2_IDENT_OV7670 = 250, |
61 | V4L2_IDENT_OV7720 = 251, | 61 | V4L2_IDENT_OV7720 = 251, |
62 | V4L2_IDENT_OV7725 = 252, | 62 | V4L2_IDENT_OV7725 = 252, |
63 | V4L2_IDENT_OV7660 = 253, | ||
64 | V4L2_IDENT_OV9650 = 254, | ||
65 | V4L2_IDENT_OV9655 = 255, | ||
66 | V4L2_IDENT_SOI968 = 256, | ||
63 | 67 | ||
64 | /* module saa7146: reserved range 300-309 */ | 68 | /* module saa7146: reserved range 300-309 */ |
65 | V4L2_IDENT_SAA7146 = 300, | 69 | V4L2_IDENT_SAA7146 = 300, |
@@ -131,6 +135,9 @@ enum { | |||
131 | /* module adv7175: just ident 7175 */ | 135 | /* module adv7175: just ident 7175 */ |
132 | V4L2_IDENT_ADV7175 = 7175, | 136 | V4L2_IDENT_ADV7175 = 7175, |
133 | 137 | ||
138 | /* module adv7180: just ident 7180 */ | ||
139 | V4L2_IDENT_ADV7180 = 7180, | ||
140 | |||
134 | /* module saa7185: just ident 7185 */ | 141 | /* module saa7185: just ident 7185 */ |
135 | V4L2_IDENT_SAA7185 = 7185, | 142 | V4L2_IDENT_SAA7185 = 7185, |
136 | 143 | ||
@@ -155,9 +162,15 @@ enum { | |||
155 | /* module cafe_ccic, just ident 8801 */ | 162 | /* module cafe_ccic, just ident 8801 */ |
156 | V4L2_IDENT_CAFE = 8801, | 163 | V4L2_IDENT_CAFE = 8801, |
157 | 164 | ||
165 | /* module mt9v011, just ident 8243 */ | ||
166 | V4L2_IDENT_MT9V011 = 8243, | ||
167 | |||
158 | /* module tw9910: just ident 9910 */ | 168 | /* module tw9910: just ident 9910 */ |
159 | V4L2_IDENT_TW9910 = 9910, | 169 | V4L2_IDENT_TW9910 = 9910, |
160 | 170 | ||
171 | /* module sn9c20x: just ident 10000 */ | ||
172 | V4L2_IDENT_SN9C20X = 10000, | ||
173 | |||
161 | /* module msp3400: reserved range 34000-34999 and 44000-44999 */ | 174 | /* module msp3400: reserved range 34000-34999 and 44000-44999 */ |
162 | V4L2_IDENT_MSPX4XX = 34000, /* generic MSPX4XX identifier, only | 175 | V4L2_IDENT_MSPX4XX = 34000, /* generic MSPX4XX identifier, only |
163 | use internally (tveeprom.c). */ | 176 | use internally (tveeprom.c). */ |
@@ -234,6 +247,11 @@ enum { | |||
234 | V4L2_IDENT_MT9V022IX7ATC = 45010, /* No way to detect "normal" I77ATx */ | 247 | V4L2_IDENT_MT9V022IX7ATC = 45010, /* No way to detect "normal" I77ATx */ |
235 | V4L2_IDENT_MT9V022IX7ATM = 45015, /* and "lead free" IA7ATx chips */ | 248 | V4L2_IDENT_MT9V022IX7ATM = 45015, /* and "lead free" IA7ATx chips */ |
236 | V4L2_IDENT_MT9T031 = 45020, | 249 | V4L2_IDENT_MT9T031 = 45020, |
250 | V4L2_IDENT_MT9V111 = 45031, | ||
251 | V4L2_IDENT_MT9V112 = 45032, | ||
252 | |||
253 | /* HV7131R CMOS sensor: just ident 46000 */ | ||
254 | V4L2_IDENT_HV7131R = 46000, | ||
237 | 255 | ||
238 | /* module cs53132a: just ident 53132 */ | 256 | /* module cs53132a: just ident 53132 */ |
239 | V4L2_IDENT_CS53l32A = 53132, | 257 | V4L2_IDENT_CS53l32A = 53132, |
diff --git a/include/media/v4l2-common.h b/include/media/v4l2-common.h index 33a18426ab9b..1c25b10da34b 100644 --- a/include/media/v4l2-common.h +++ b/include/media/v4l2-common.h | |||
@@ -139,29 +139,23 @@ struct v4l2_subdev_ops; | |||
139 | /* Load an i2c module and return an initialized v4l2_subdev struct. | 139 | /* Load an i2c module and return an initialized v4l2_subdev struct. |
140 | Only call request_module if module_name != NULL. | 140 | Only call request_module if module_name != NULL. |
141 | The client_type argument is the name of the chip that's on the adapter. */ | 141 | The client_type argument is the name of the chip that's on the adapter. */ |
142 | struct v4l2_subdev *v4l2_i2c_new_subdev(struct v4l2_device *v4l2_dev, | 142 | struct v4l2_subdev *v4l2_i2c_new_subdev_cfg(struct v4l2_device *v4l2_dev, |
143 | struct i2c_adapter *adapter, | ||
144 | const char *module_name, const char *client_type, u8 addr); | ||
145 | /* Probe and load an i2c module and return an initialized v4l2_subdev struct. | ||
146 | Only call request_module if module_name != NULL. | ||
147 | The client_type argument is the name of the chip that's on the adapter. */ | ||
148 | struct v4l2_subdev *v4l2_i2c_new_probed_subdev(struct v4l2_device *v4l2_dev, | ||
149 | struct i2c_adapter *adapter, | 143 | struct i2c_adapter *adapter, |
150 | const char *module_name, const char *client_type, | 144 | const char *module_name, const char *client_type, |
151 | const unsigned short *addrs); | 145 | int irq, void *platform_data, |
152 | /* Like v4l2_i2c_new_probed_subdev, except probe for a single address. */ | 146 | u8 addr, const unsigned short *probe_addrs); |
153 | struct v4l2_subdev *v4l2_i2c_new_probed_subdev_addr(struct v4l2_device *v4l2_dev, | ||
154 | struct i2c_adapter *adapter, | ||
155 | const char *module_name, const char *client_type, u8 addr); | ||
156 | 147 | ||
157 | /* Load an i2c module and return an initialized v4l2_subdev struct. | 148 | /* Load an i2c module and return an initialized v4l2_subdev struct. |
158 | Only call request_module if module_name != NULL. | 149 | Only call request_module if module_name != NULL. |
159 | The client_type argument is the name of the chip that's on the adapter. */ | 150 | The client_type argument is the name of the chip that's on the adapter. */ |
160 | struct v4l2_subdev *v4l2_i2c_new_subdev_cfg(struct v4l2_device *v4l2_dev, | 151 | static inline struct v4l2_subdev *v4l2_i2c_new_subdev(struct v4l2_device *v4l2_dev, |
161 | struct i2c_adapter *adapter, | 152 | struct i2c_adapter *adapter, |
162 | const char *module_name, const char *client_type, | 153 | const char *module_name, const char *client_type, |
163 | int irq, void *platform_data, | 154 | u8 addr, const unsigned short *probe_addrs) |
164 | u8 addr, const unsigned short *probe_addrs); | 155 | { |
156 | return v4l2_i2c_new_subdev_cfg(v4l2_dev, adapter, module_name, | ||
157 | client_type, 0, NULL, addr, probe_addrs); | ||
158 | } | ||
165 | 159 | ||
166 | struct i2c_board_info; | 160 | struct i2c_board_info; |
167 | 161 | ||
diff --git a/include/media/v4l2-dev.h b/include/media/v4l2-dev.h index 2058dd45e915..73c9867d744c 100644 --- a/include/media/v4l2-dev.h +++ b/include/media/v4l2-dev.h | |||
@@ -100,8 +100,10 @@ struct video_device | |||
100 | 100 | ||
101 | Also note that vdev->minor is set to -1 if the registration failed. */ | 101 | Also note that vdev->minor is set to -1 if the registration failed. */ |
102 | int __must_check video_register_device(struct video_device *vdev, int type, int nr); | 102 | int __must_check video_register_device(struct video_device *vdev, int type, int nr); |
103 | int __must_check video_register_device_index(struct video_device *vdev, | 103 | |
104 | int type, int nr, int index); | 104 | /* Same as video_register_device, but no warning is issued if the desired |
105 | device node number was already in use. */ | ||
106 | int __must_check video_register_device_no_warn(struct video_device *vdev, int type, int nr); | ||
105 | 107 | ||
106 | /* Unregister video devices. Will do nothing if vdev == NULL or | 108 | /* Unregister video devices. Will do nothing if vdev == NULL or |
107 | vdev->minor < 0. */ | 109 | vdev->minor < 0. */ |
diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h index 5dcb36785529..d411345f244b 100644 --- a/include/media/v4l2-subdev.h +++ b/include/media/v4l2-subdev.h | |||
@@ -137,6 +137,8 @@ struct v4l2_subdev_tuner_ops { | |||
137 | int (*g_frequency)(struct v4l2_subdev *sd, struct v4l2_frequency *freq); | 137 | int (*g_frequency)(struct v4l2_subdev *sd, struct v4l2_frequency *freq); |
138 | int (*g_tuner)(struct v4l2_subdev *sd, struct v4l2_tuner *vt); | 138 | int (*g_tuner)(struct v4l2_subdev *sd, struct v4l2_tuner *vt); |
139 | int (*s_tuner)(struct v4l2_subdev *sd, struct v4l2_tuner *vt); | 139 | int (*s_tuner)(struct v4l2_subdev *sd, struct v4l2_tuner *vt); |
140 | int (*g_modulator)(struct v4l2_subdev *sd, struct v4l2_modulator *vm); | ||
141 | int (*s_modulator)(struct v4l2_subdev *sd, struct v4l2_modulator *vm); | ||
140 | int (*s_type_addr)(struct v4l2_subdev *sd, struct tuner_setup *type); | 142 | int (*s_type_addr)(struct v4l2_subdev *sd, struct tuner_setup *type); |
141 | int (*s_config)(struct v4l2_subdev *sd, const struct v4l2_priv_tun_config *config); | 143 | int (*s_config)(struct v4l2_subdev *sd, const struct v4l2_priv_tun_config *config); |
142 | int (*s_standby)(struct v4l2_subdev *sd); | 144 | int (*s_standby)(struct v4l2_subdev *sd); |
@@ -220,6 +222,9 @@ struct v4l2_subdev_video_ops { | |||
220 | int (*g_fmt)(struct v4l2_subdev *sd, struct v4l2_format *fmt); | 222 | int (*g_fmt)(struct v4l2_subdev *sd, struct v4l2_format *fmt); |
221 | int (*try_fmt)(struct v4l2_subdev *sd, struct v4l2_format *fmt); | 223 | int (*try_fmt)(struct v4l2_subdev *sd, struct v4l2_format *fmt); |
222 | int (*s_fmt)(struct v4l2_subdev *sd, struct v4l2_format *fmt); | 224 | int (*s_fmt)(struct v4l2_subdev *sd, struct v4l2_format *fmt); |
225 | int (*cropcap)(struct v4l2_subdev *sd, struct v4l2_cropcap *cc); | ||
226 | int (*g_crop)(struct v4l2_subdev *sd, struct v4l2_crop *crop); | ||
227 | int (*s_crop)(struct v4l2_subdev *sd, struct v4l2_crop *crop); | ||
223 | int (*g_parm)(struct v4l2_subdev *sd, struct v4l2_streamparm *param); | 228 | int (*g_parm)(struct v4l2_subdev *sd, struct v4l2_streamparm *param); |
224 | int (*s_parm)(struct v4l2_subdev *sd, struct v4l2_streamparm *param); | 229 | int (*s_parm)(struct v4l2_subdev *sd, struct v4l2_streamparm *param); |
225 | int (*enum_framesizes)(struct v4l2_subdev *sd, struct v4l2_frmsizeenum *fsize); | 230 | int (*enum_framesizes)(struct v4l2_subdev *sd, struct v4l2_frmsizeenum *fsize); |
diff --git a/include/net/act_api.h b/include/net/act_api.h index 565eed8fe496..c05fd717c588 100644 --- a/include/net/act_api.h +++ b/include/net/act_api.h | |||
@@ -16,7 +16,7 @@ struct tcf_common { | |||
16 | u32 tcfc_capab; | 16 | u32 tcfc_capab; |
17 | int tcfc_action; | 17 | int tcfc_action; |
18 | struct tcf_t tcfc_tm; | 18 | struct tcf_t tcfc_tm; |
19 | struct gnet_stats_basic tcfc_bstats; | 19 | struct gnet_stats_basic_packed tcfc_bstats; |
20 | struct gnet_stats_queue tcfc_qstats; | 20 | struct gnet_stats_queue tcfc_qstats; |
21 | struct gnet_stats_rate_est tcfc_rate_est; | 21 | struct gnet_stats_rate_est tcfc_rate_est; |
22 | spinlock_t tcfc_lock; | 22 | spinlock_t tcfc_lock; |
diff --git a/include/net/addrconf.h b/include/net/addrconf.h index 7b55ab215a64..0f7c37825fc1 100644 --- a/include/net/addrconf.h +++ b/include/net/addrconf.h | |||
@@ -143,6 +143,8 @@ extern int __ipv6_dev_mc_dec(struct inet6_dev *idev, const struct in6_addr *addr | |||
143 | extern int ipv6_dev_mc_dec(struct net_device *dev, const struct in6_addr *addr); | 143 | extern int ipv6_dev_mc_dec(struct net_device *dev, const struct in6_addr *addr); |
144 | extern void ipv6_mc_up(struct inet6_dev *idev); | 144 | extern void ipv6_mc_up(struct inet6_dev *idev); |
145 | extern void ipv6_mc_down(struct inet6_dev *idev); | 145 | extern void ipv6_mc_down(struct inet6_dev *idev); |
146 | extern void ipv6_mc_unmap(struct inet6_dev *idev); | ||
147 | extern void ipv6_mc_remap(struct inet6_dev *idev); | ||
146 | extern void ipv6_mc_init_dev(struct inet6_dev *idev); | 148 | extern void ipv6_mc_init_dev(struct inet6_dev *idev); |
147 | extern void ipv6_mc_destroy_dev(struct inet6_dev *idev); | 149 | extern void ipv6_mc_destroy_dev(struct inet6_dev *idev); |
148 | extern void addrconf_dad_failure(struct inet6_ifaddr *ifp); | 150 | extern void addrconf_dad_failure(struct inet6_ifaddr *ifp); |
diff --git a/include/net/ieee802154/af_ieee802154.h b/include/net/af_ieee802154.h index 0d78605fb1a6..75e64c7a2960 100644 --- a/include/net/ieee802154/af_ieee802154.h +++ b/include/net/af_ieee802154.h | |||
@@ -54,7 +54,9 @@ struct sockaddr_ieee802154 { | |||
54 | struct ieee802154_addr addr; | 54 | struct ieee802154_addr addr; |
55 | }; | 55 | }; |
56 | 56 | ||
57 | /* master device */ | 57 | /* get/setsockopt */ |
58 | #define IEEE802154_SIOC_ADD_SLAVE (SIOCDEVPRIVATE + 0) | 58 | #define SOL_IEEE802154 0 |
59 | |||
60 | #define WPAN_WANTACK 0 | ||
59 | 61 | ||
60 | #endif | 62 | #endif |
diff --git a/include/net/arp.h b/include/net/arp.h index c236270ec95e..716f43c5c98e 100644 --- a/include/net/arp.h +++ b/include/net/arp.h | |||
@@ -26,6 +26,6 @@ extern struct sk_buff *arp_create(int type, int ptype, __be32 dest_ip, | |||
26 | const unsigned char *target_hw); | 26 | const unsigned char *target_hw); |
27 | extern void arp_xmit(struct sk_buff *skb); | 27 | extern void arp_xmit(struct sk_buff *skb); |
28 | 28 | ||
29 | extern struct neigh_ops arp_broken_ops; | 29 | extern const struct neigh_ops arp_broken_ops; |
30 | 30 | ||
31 | #endif /* _ARP_H */ | 31 | #endif /* _ARP_H */ |
diff --git a/include/net/bluetooth/bluetooth.h b/include/net/bluetooth/bluetooth.h index 968166a45f86..718394e2c01e 100644 --- a/include/net/bluetooth/bluetooth.h +++ b/include/net/bluetooth/bluetooth.h | |||
@@ -138,8 +138,11 @@ struct sock *bt_accept_dequeue(struct sock *parent, struct socket *newsock); | |||
138 | struct bt_skb_cb { | 138 | struct bt_skb_cb { |
139 | __u8 pkt_type; | 139 | __u8 pkt_type; |
140 | __u8 incoming; | 140 | __u8 incoming; |
141 | __u8 tx_seq; | ||
142 | __u8 retries; | ||
143 | __u8 sar; | ||
141 | }; | 144 | }; |
142 | #define bt_cb(skb) ((struct bt_skb_cb *)(skb->cb)) | 145 | #define bt_cb(skb) ((struct bt_skb_cb *)((skb)->cb)) |
143 | 146 | ||
144 | static inline struct sk_buff *bt_skb_alloc(unsigned int len, gfp_t how) | 147 | static inline struct sk_buff *bt_skb_alloc(unsigned int len, gfp_t how) |
145 | { | 148 | { |
diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h index c4ca4228b083..7b640aeddb64 100644 --- a/include/net/bluetooth/hci_core.h +++ b/include/net/bluetooth/hci_core.h | |||
@@ -117,7 +117,7 @@ struct hci_dev { | |||
117 | struct sk_buff *sent_cmd; | 117 | struct sk_buff *sent_cmd; |
118 | struct sk_buff *reassembly[3]; | 118 | struct sk_buff *reassembly[3]; |
119 | 119 | ||
120 | struct semaphore req_lock; | 120 | struct mutex req_lock; |
121 | wait_queue_head_t req_wait_q; | 121 | wait_queue_head_t req_wait_q; |
122 | __u32 req_status; | 122 | __u32 req_status; |
123 | __u32 req_result; | 123 | __u32 req_result; |
@@ -187,6 +187,7 @@ struct hci_conn { | |||
187 | struct work_struct work_del; | 187 | struct work_struct work_del; |
188 | 188 | ||
189 | struct device dev; | 189 | struct device dev; |
190 | atomic_t devref; | ||
190 | 191 | ||
191 | struct hci_dev *hdev; | 192 | struct hci_dev *hdev; |
192 | void *l2cap_data; | 193 | void *l2cap_data; |
@@ -339,6 +340,9 @@ int hci_conn_switch_role(struct hci_conn *conn, __u8 role); | |||
339 | void hci_conn_enter_active_mode(struct hci_conn *conn); | 340 | void hci_conn_enter_active_mode(struct hci_conn *conn); |
340 | void hci_conn_enter_sniff_mode(struct hci_conn *conn); | 341 | void hci_conn_enter_sniff_mode(struct hci_conn *conn); |
341 | 342 | ||
343 | void hci_conn_hold_device(struct hci_conn *conn); | ||
344 | void hci_conn_put_device(struct hci_conn *conn); | ||
345 | |||
342 | static inline void hci_conn_hold(struct hci_conn *conn) | 346 | static inline void hci_conn_hold(struct hci_conn *conn) |
343 | { | 347 | { |
344 | atomic_inc(&conn->refcnt); | 348 | atomic_inc(&conn->refcnt); |
@@ -700,8 +704,8 @@ struct hci_sec_filter { | |||
700 | #define HCI_REQ_PEND 1 | 704 | #define HCI_REQ_PEND 1 |
701 | #define HCI_REQ_CANCELED 2 | 705 | #define HCI_REQ_CANCELED 2 |
702 | 706 | ||
703 | #define hci_req_lock(d) down(&d->req_lock) | 707 | #define hci_req_lock(d) mutex_lock(&d->req_lock) |
704 | #define hci_req_unlock(d) up(&d->req_lock) | 708 | #define hci_req_unlock(d) mutex_unlock(&d->req_lock) |
705 | 709 | ||
706 | void hci_req_complete(struct hci_dev *hdev, int result); | 710 | void hci_req_complete(struct hci_dev *hdev, int result); |
707 | 711 | ||
diff --git a/include/net/bluetooth/l2cap.h b/include/net/bluetooth/l2cap.h index e919fca1072a..9516f4b4a3c2 100644 --- a/include/net/bluetooth/l2cap.h +++ b/include/net/bluetooth/l2cap.h | |||
@@ -27,12 +27,14 @@ | |||
27 | 27 | ||
28 | /* L2CAP defaults */ | 28 | /* L2CAP defaults */ |
29 | #define L2CAP_DEFAULT_MTU 672 | 29 | #define L2CAP_DEFAULT_MTU 672 |
30 | #define L2CAP_DEFAULT_MIN_MTU 48 | ||
30 | #define L2CAP_DEFAULT_FLUSH_TO 0xffff | 31 | #define L2CAP_DEFAULT_FLUSH_TO 0xffff |
31 | #define L2CAP_DEFAULT_RX_WINDOW 1 | 32 | #define L2CAP_DEFAULT_TX_WINDOW 63 |
32 | #define L2CAP_DEFAULT_MAX_RECEIVE 1 | 33 | #define L2CAP_DEFAULT_NUM_TO_ACK (L2CAP_DEFAULT_TX_WINDOW/5) |
33 | #define L2CAP_DEFAULT_RETRANS_TO 300 /* 300 milliseconds */ | 34 | #define L2CAP_DEFAULT_MAX_TX 3 |
34 | #define L2CAP_DEFAULT_MONITOR_TO 1000 /* 1 second */ | 35 | #define L2CAP_DEFAULT_RETRANS_TO 1000 /* 1 second */ |
35 | #define L2CAP_DEFAULT_MAX_RX_APDU 0xfff7 | 36 | #define L2CAP_DEFAULT_MONITOR_TO 12000 /* 12 seconds */ |
37 | #define L2CAP_DEFAULT_MAX_PDU_SIZE 672 | ||
36 | 38 | ||
37 | #define L2CAP_CONN_TIMEOUT (40000) /* 40 seconds */ | 39 | #define L2CAP_CONN_TIMEOUT (40000) /* 40 seconds */ |
38 | #define L2CAP_INFO_TIMEOUT (4000) /* 4 seconds */ | 40 | #define L2CAP_INFO_TIMEOUT (4000) /* 4 seconds */ |
@@ -52,6 +54,7 @@ struct l2cap_options { | |||
52 | __u16 imtu; | 54 | __u16 imtu; |
53 | __u16 flush_to; | 55 | __u16 flush_to; |
54 | __u8 mode; | 56 | __u8 mode; |
57 | __u8 fcs; | ||
55 | }; | 58 | }; |
56 | 59 | ||
57 | #define L2CAP_CONNINFO 0x02 | 60 | #define L2CAP_CONNINFO 0x02 |
@@ -93,6 +96,32 @@ struct l2cap_conninfo { | |||
93 | #define L2CAP_FCS_NONE 0x00 | 96 | #define L2CAP_FCS_NONE 0x00 |
94 | #define L2CAP_FCS_CRC16 0x01 | 97 | #define L2CAP_FCS_CRC16 0x01 |
95 | 98 | ||
99 | /* L2CAP Control Field bit masks */ | ||
100 | #define L2CAP_CTRL_SAR 0xC000 | ||
101 | #define L2CAP_CTRL_REQSEQ 0x3F00 | ||
102 | #define L2CAP_CTRL_TXSEQ 0x007E | ||
103 | #define L2CAP_CTRL_RETRANS 0x0080 | ||
104 | #define L2CAP_CTRL_FINAL 0x0080 | ||
105 | #define L2CAP_CTRL_POLL 0x0010 | ||
106 | #define L2CAP_CTRL_SUPERVISE 0x000C | ||
107 | #define L2CAP_CTRL_FRAME_TYPE 0x0001 /* I- or S-Frame */ | ||
108 | |||
109 | #define L2CAP_CTRL_TXSEQ_SHIFT 1 | ||
110 | #define L2CAP_CTRL_REQSEQ_SHIFT 8 | ||
111 | #define L2CAP_CTRL_SAR_SHIFT 14 | ||
112 | |||
113 | /* L2CAP Supervisory Function */ | ||
114 | #define L2CAP_SUPER_RCV_READY 0x0000 | ||
115 | #define L2CAP_SUPER_REJECT 0x0004 | ||
116 | #define L2CAP_SUPER_RCV_NOT_READY 0x0008 | ||
117 | #define L2CAP_SUPER_SELECT_REJECT 0x000C | ||
118 | |||
119 | /* L2CAP Segmentation and Reassembly */ | ||
120 | #define L2CAP_SDU_UNSEGMENTED 0x0000 | ||
121 | #define L2CAP_SDU_START 0x4000 | ||
122 | #define L2CAP_SDU_END 0x8000 | ||
123 | #define L2CAP_SDU_CONTINUE 0xC000 | ||
124 | |||
96 | /* L2CAP structures */ | 125 | /* L2CAP structures */ |
97 | struct l2cap_hdr { | 126 | struct l2cap_hdr { |
98 | __le16 len; | 127 | __le16 len; |
@@ -190,7 +219,7 @@ struct l2cap_conf_rfc { | |||
190 | #define L2CAP_MODE_RETRANS 0x01 | 219 | #define L2CAP_MODE_RETRANS 0x01 |
191 | #define L2CAP_MODE_FLOWCTL 0x02 | 220 | #define L2CAP_MODE_FLOWCTL 0x02 |
192 | #define L2CAP_MODE_ERTM 0x03 | 221 | #define L2CAP_MODE_ERTM 0x03 |
193 | #define L2CAP_MODE_STREAM 0x04 | 222 | #define L2CAP_MODE_STREAMING 0x04 |
194 | 223 | ||
195 | struct l2cap_disconn_req { | 224 | struct l2cap_disconn_req { |
196 | __le16 dcid; | 225 | __le16 dcid; |
@@ -261,6 +290,14 @@ struct l2cap_conn { | |||
261 | 290 | ||
262 | /* ----- L2CAP channel and socket info ----- */ | 291 | /* ----- L2CAP channel and socket info ----- */ |
263 | #define l2cap_pi(sk) ((struct l2cap_pinfo *) sk) | 292 | #define l2cap_pi(sk) ((struct l2cap_pinfo *) sk) |
293 | #define TX_QUEUE(sk) (&l2cap_pi(sk)->tx_queue) | ||
294 | #define SREJ_QUEUE(sk) (&l2cap_pi(sk)->srej_queue) | ||
295 | #define SREJ_LIST(sk) (&l2cap_pi(sk)->srej_l.list) | ||
296 | |||
297 | struct srej_list { | ||
298 | __u8 tx_seq; | ||
299 | struct list_head list; | ||
300 | }; | ||
264 | 301 | ||
265 | struct l2cap_pinfo { | 302 | struct l2cap_pinfo { |
266 | struct bt_sock bt; | 303 | struct bt_sock bt; |
@@ -271,30 +308,97 @@ struct l2cap_pinfo { | |||
271 | __u16 imtu; | 308 | __u16 imtu; |
272 | __u16 omtu; | 309 | __u16 omtu; |
273 | __u16 flush_to; | 310 | __u16 flush_to; |
274 | __u8 sec_level; | 311 | __u8 mode; |
312 | __u8 num_conf_req; | ||
313 | __u8 num_conf_rsp; | ||
314 | |||
315 | __u8 fcs; | ||
316 | __u8 sec_level; | ||
275 | __u8 role_switch; | 317 | __u8 role_switch; |
276 | __u8 force_reliable; | 318 | __u8 force_reliable; |
277 | 319 | ||
278 | __u8 conf_req[64]; | 320 | __u8 conf_req[64]; |
279 | __u8 conf_len; | 321 | __u8 conf_len; |
280 | __u8 conf_state; | 322 | __u8 conf_state; |
281 | __u8 conf_retry; | 323 | __u8 conn_state; |
324 | |||
325 | __u8 next_tx_seq; | ||
326 | __u8 expected_ack_seq; | ||
327 | __u8 req_seq; | ||
328 | __u8 expected_tx_seq; | ||
329 | __u8 buffer_seq; | ||
330 | __u8 buffer_seq_srej; | ||
331 | __u8 srej_save_reqseq; | ||
332 | __u8 unacked_frames; | ||
333 | __u8 retry_count; | ||
334 | __u8 num_to_ack; | ||
335 | __u16 sdu_len; | ||
336 | __u16 partial_sdu_len; | ||
337 | struct sk_buff *sdu; | ||
282 | 338 | ||
283 | __u8 ident; | 339 | __u8 ident; |
284 | 340 | ||
341 | __u8 remote_tx_win; | ||
342 | __u8 remote_max_tx; | ||
343 | __u16 retrans_timeout; | ||
344 | __u16 monitor_timeout; | ||
345 | __u16 max_pdu_size; | ||
346 | |||
285 | __le16 sport; | 347 | __le16 sport; |
286 | 348 | ||
349 | struct timer_list retrans_timer; | ||
350 | struct timer_list monitor_timer; | ||
351 | struct sk_buff_head tx_queue; | ||
352 | struct sk_buff_head srej_queue; | ||
353 | struct srej_list srej_l; | ||
287 | struct l2cap_conn *conn; | 354 | struct l2cap_conn *conn; |
288 | struct sock *next_c; | 355 | struct sock *next_c; |
289 | struct sock *prev_c; | 356 | struct sock *prev_c; |
290 | }; | 357 | }; |
291 | 358 | ||
292 | #define L2CAP_CONF_REQ_SENT 0x01 | 359 | #define L2CAP_CONF_REQ_SENT 0x01 |
293 | #define L2CAP_CONF_INPUT_DONE 0x02 | 360 | #define L2CAP_CONF_INPUT_DONE 0x02 |
294 | #define L2CAP_CONF_OUTPUT_DONE 0x04 | 361 | #define L2CAP_CONF_OUTPUT_DONE 0x04 |
295 | #define L2CAP_CONF_CONNECT_PEND 0x80 | 362 | #define L2CAP_CONF_MTU_DONE 0x08 |
296 | 363 | #define L2CAP_CONF_MODE_DONE 0x10 | |
297 | #define L2CAP_CONF_MAX_RETRIES 2 | 364 | #define L2CAP_CONF_CONNECT_PEND 0x20 |
365 | #define L2CAP_CONF_NO_FCS_RECV 0x40 | ||
366 | #define L2CAP_CONF_STATE2_DEVICE 0x80 | ||
367 | |||
368 | #define L2CAP_CONF_MAX_CONF_REQ 2 | ||
369 | #define L2CAP_CONF_MAX_CONF_RSP 2 | ||
370 | |||
371 | #define L2CAP_CONN_SAR_SDU 0x01 | ||
372 | #define L2CAP_CONN_SREJ_SENT 0x02 | ||
373 | #define L2CAP_CONN_WAIT_F 0x04 | ||
374 | #define L2CAP_CONN_SREJ_ACT 0x08 | ||
375 | #define L2CAP_CONN_SEND_PBIT 0x10 | ||
376 | #define L2CAP_CONN_REMOTE_BUSY 0x20 | ||
377 | #define L2CAP_CONN_LOCAL_BUSY 0x40 | ||
378 | |||
379 | #define __mod_retrans_timer() mod_timer(&l2cap_pi(sk)->retrans_timer, \ | ||
380 | jiffies + msecs_to_jiffies(L2CAP_DEFAULT_RETRANS_TO)); | ||
381 | #define __mod_monitor_timer() mod_timer(&l2cap_pi(sk)->monitor_timer, \ | ||
382 | jiffies + msecs_to_jiffies(L2CAP_DEFAULT_MONITOR_TO)); | ||
383 | |||
384 | static inline int l2cap_tx_window_full(struct sock *sk) | ||
385 | { | ||
386 | struct l2cap_pinfo *pi = l2cap_pi(sk); | ||
387 | int sub; | ||
388 | |||
389 | sub = (pi->next_tx_seq - pi->expected_ack_seq) % 64; | ||
390 | |||
391 | if (sub < 0) | ||
392 | sub += 64; | ||
393 | |||
394 | return (sub == pi->remote_tx_win); | ||
395 | } | ||
396 | |||
397 | #define __get_txseq(ctrl) ((ctrl) & L2CAP_CTRL_TXSEQ) >> 1 | ||
398 | #define __get_reqseq(ctrl) ((ctrl) & L2CAP_CTRL_REQSEQ) >> 8 | ||
399 | #define __is_iframe(ctrl) !((ctrl) & L2CAP_CTRL_FRAME_TYPE) | ||
400 | #define __is_sframe(ctrl) (ctrl) & L2CAP_CTRL_FRAME_TYPE | ||
401 | #define __is_sar_start(ctrl) ((ctrl) & L2CAP_CTRL_SAR) == L2CAP_SDU_START | ||
298 | 402 | ||
299 | void l2cap_load(void); | 403 | void l2cap_load(void); |
300 | 404 | ||
diff --git a/include/net/bluetooth/rfcomm.h b/include/net/bluetooth/rfcomm.h index 80072611d26a..921d7b3c7f8d 100644 --- a/include/net/bluetooth/rfcomm.h +++ b/include/net/bluetooth/rfcomm.h | |||
@@ -29,6 +29,7 @@ | |||
29 | #define RFCOMM_CONN_TIMEOUT (HZ * 30) | 29 | #define RFCOMM_CONN_TIMEOUT (HZ * 30) |
30 | #define RFCOMM_DISC_TIMEOUT (HZ * 20) | 30 | #define RFCOMM_DISC_TIMEOUT (HZ * 20) |
31 | #define RFCOMM_AUTH_TIMEOUT (HZ * 25) | 31 | #define RFCOMM_AUTH_TIMEOUT (HZ * 25) |
32 | #define RFCOMM_IDLE_TIMEOUT (HZ * 2) | ||
32 | 33 | ||
33 | #define RFCOMM_DEFAULT_MTU 127 | 34 | #define RFCOMM_DEFAULT_MTU 127 |
34 | #define RFCOMM_DEFAULT_CREDITS 7 | 35 | #define RFCOMM_DEFAULT_CREDITS 7 |
@@ -154,6 +155,7 @@ struct rfcomm_msc { | |||
154 | struct rfcomm_session { | 155 | struct rfcomm_session { |
155 | struct list_head list; | 156 | struct list_head list; |
156 | struct socket *sock; | 157 | struct socket *sock; |
158 | struct timer_list timer; | ||
157 | unsigned long state; | 159 | unsigned long state; |
158 | unsigned long flags; | 160 | unsigned long flags; |
159 | atomic_t refcnt; | 161 | atomic_t refcnt; |
@@ -355,7 +357,17 @@ struct rfcomm_dev_list_req { | |||
355 | }; | 357 | }; |
356 | 358 | ||
357 | int rfcomm_dev_ioctl(struct sock *sk, unsigned int cmd, void __user *arg); | 359 | int rfcomm_dev_ioctl(struct sock *sk, unsigned int cmd, void __user *arg); |
360 | |||
361 | #ifdef CONFIG_BT_RFCOMM_TTY | ||
358 | int rfcomm_init_ttys(void); | 362 | int rfcomm_init_ttys(void); |
359 | void rfcomm_cleanup_ttys(void); | 363 | void rfcomm_cleanup_ttys(void); |
360 | 364 | #else | |
365 | static inline int rfcomm_init_ttys(void) | ||
366 | { | ||
367 | return 0; | ||
368 | } | ||
369 | static inline void rfcomm_cleanup_ttys(void) | ||
370 | { | ||
371 | } | ||
372 | #endif | ||
361 | #endif /* __RFCOMM_H */ | 373 | #endif /* __RFCOMM_H */ |
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h index 1a21895b732b..3d874c620219 100644 --- a/include/net/cfg80211.h +++ b/include/net/cfg80211.h | |||
@@ -80,7 +80,6 @@ enum ieee80211_channel_flags { | |||
80 | * with cfg80211. | 80 | * with cfg80211. |
81 | * | 81 | * |
82 | * @center_freq: center frequency in MHz | 82 | * @center_freq: center frequency in MHz |
83 | * @max_bandwidth: maximum allowed bandwidth for this channel, in MHz | ||
84 | * @hw_value: hardware-specific value for the channel | 83 | * @hw_value: hardware-specific value for the channel |
85 | * @flags: channel flags from &enum ieee80211_channel_flags. | 84 | * @flags: channel flags from &enum ieee80211_channel_flags. |
86 | * @orig_flags: channel flags at registration time, used by regulatory | 85 | * @orig_flags: channel flags at registration time, used by regulatory |
@@ -97,7 +96,6 @@ enum ieee80211_channel_flags { | |||
97 | struct ieee80211_channel { | 96 | struct ieee80211_channel { |
98 | enum ieee80211_band band; | 97 | enum ieee80211_band band; |
99 | u16 center_freq; | 98 | u16 center_freq; |
100 | u8 max_bandwidth; | ||
101 | u16 hw_value; | 99 | u16 hw_value; |
102 | u32 flags; | 100 | u32 flags; |
103 | int max_antenna_gain; | 101 | int max_antenna_gain; |
@@ -372,6 +370,10 @@ struct rate_info { | |||
372 | * @txrate: current unicast bitrate to this station | 370 | * @txrate: current unicast bitrate to this station |
373 | * @rx_packets: packets received from this station | 371 | * @rx_packets: packets received from this station |
374 | * @tx_packets: packets transmitted to this station | 372 | * @tx_packets: packets transmitted to this station |
373 | * @generation: generation number for nl80211 dumps. | ||
374 | * This number should increase every time the list of stations | ||
375 | * changes, i.e. when a station is added or removed, so that | ||
376 | * userspace can tell whether it got a consistent snapshot. | ||
375 | */ | 377 | */ |
376 | struct station_info { | 378 | struct station_info { |
377 | u32 filled; | 379 | u32 filled; |
@@ -385,6 +387,8 @@ struct station_info { | |||
385 | struct rate_info txrate; | 387 | struct rate_info txrate; |
386 | u32 rx_packets; | 388 | u32 rx_packets; |
387 | u32 tx_packets; | 389 | u32 tx_packets; |
390 | |||
391 | int generation; | ||
388 | }; | 392 | }; |
389 | 393 | ||
390 | /** | 394 | /** |
@@ -444,6 +448,10 @@ enum mpath_info_flags { | |||
444 | * @flags: mesh path flags | 448 | * @flags: mesh path flags |
445 | * @discovery_timeout: total mesh path discovery timeout, in msecs | 449 | * @discovery_timeout: total mesh path discovery timeout, in msecs |
446 | * @discovery_retries: mesh path discovery retries | 450 | * @discovery_retries: mesh path discovery retries |
451 | * @generation: generation number for nl80211 dumps. | ||
452 | * This number should increase every time the list of mesh paths | ||
453 | * changes, i.e. when a station is added or removed, so that | ||
454 | * userspace can tell whether it got a consistent snapshot. | ||
447 | */ | 455 | */ |
448 | struct mpath_info { | 456 | struct mpath_info { |
449 | u32 filled; | 457 | u32 filled; |
@@ -454,6 +462,8 @@ struct mpath_info { | |||
454 | u32 discovery_timeout; | 462 | u32 discovery_timeout; |
455 | u8 discovery_retries; | 463 | u8 discovery_retries; |
456 | u8 flags; | 464 | u8 flags; |
465 | |||
466 | int generation; | ||
457 | }; | 467 | }; |
458 | 468 | ||
459 | /** | 469 | /** |
@@ -538,23 +548,26 @@ struct cfg80211_ssid { | |||
538 | * @ssids: SSIDs to scan for (active scan only) | 548 | * @ssids: SSIDs to scan for (active scan only) |
539 | * @n_ssids: number of SSIDs | 549 | * @n_ssids: number of SSIDs |
540 | * @channels: channels to scan on. | 550 | * @channels: channels to scan on. |
541 | * @n_channels: number of channels for each band | 551 | * @n_channels: total number of channels to scan |
542 | * @ie: optional information element(s) to add into Probe Request or %NULL | 552 | * @ie: optional information element(s) to add into Probe Request or %NULL |
543 | * @ie_len: length of ie in octets | 553 | * @ie_len: length of ie in octets |
544 | * @wiphy: the wiphy this was for | 554 | * @wiphy: the wiphy this was for |
545 | * @ifidx: the interface index | 555 | * @dev: the interface |
546 | */ | 556 | */ |
547 | struct cfg80211_scan_request { | 557 | struct cfg80211_scan_request { |
548 | struct cfg80211_ssid *ssids; | 558 | struct cfg80211_ssid *ssids; |
549 | int n_ssids; | 559 | int n_ssids; |
550 | struct ieee80211_channel **channels; | ||
551 | u32 n_channels; | 560 | u32 n_channels; |
552 | const u8 *ie; | 561 | const u8 *ie; |
553 | size_t ie_len; | 562 | size_t ie_len; |
554 | 563 | ||
555 | /* internal */ | 564 | /* internal */ |
556 | struct wiphy *wiphy; | 565 | struct wiphy *wiphy; |
557 | int ifidx; | 566 | struct net_device *dev; |
567 | bool aborted; | ||
568 | |||
569 | /* keep last */ | ||
570 | struct ieee80211_channel *channels[0]; | ||
558 | }; | 571 | }; |
559 | 572 | ||
560 | /** | 573 | /** |
@@ -584,7 +597,6 @@ enum cfg80211_signal_type { | |||
584 | * is no guarantee that these are well-formed!) | 597 | * is no guarantee that these are well-formed!) |
585 | * @len_information_elements: total length of the information elements | 598 | * @len_information_elements: total length of the information elements |
586 | * @signal: signal strength value (type depends on the wiphy's signal_type) | 599 | * @signal: signal strength value (type depends on the wiphy's signal_type) |
587 | * @hold: BSS should not expire | ||
588 | * @free_priv: function pointer to free private data | 600 | * @free_priv: function pointer to free private data |
589 | * @priv: private area for driver use, has at least wiphy->bss_priv_size bytes | 601 | * @priv: private area for driver use, has at least wiphy->bss_priv_size bytes |
590 | */ | 602 | */ |
@@ -605,37 +617,59 @@ struct cfg80211_bss { | |||
605 | }; | 617 | }; |
606 | 618 | ||
607 | /** | 619 | /** |
620 | * ieee80211_bss_get_ie - find IE with given ID | ||
621 | * @bss: the bss to search | ||
622 | * @ie: the IE ID | ||
623 | * Returns %NULL if not found. | ||
624 | */ | ||
625 | const u8 *ieee80211_bss_get_ie(struct cfg80211_bss *bss, u8 ie); | ||
626 | |||
627 | |||
628 | /** | ||
629 | * struct cfg80211_crypto_settings - Crypto settings | ||
630 | * @wpa_versions: indicates which, if any, WPA versions are enabled | ||
631 | * (from enum nl80211_wpa_versions) | ||
632 | * @cipher_group: group key cipher suite (or 0 if unset) | ||
633 | * @n_ciphers_pairwise: number of AP supported unicast ciphers | ||
634 | * @ciphers_pairwise: unicast key cipher suites | ||
635 | * @n_akm_suites: number of AKM suites | ||
636 | * @akm_suites: AKM suites | ||
637 | * @control_port: Whether user space controls IEEE 802.1X port, i.e., | ||
638 | * sets/clears %NL80211_STA_FLAG_AUTHORIZED. If true, the driver is | ||
639 | * required to assume that the port is unauthorized until authorized by | ||
640 | * user space. Otherwise, port is marked authorized by default. | ||
641 | */ | ||
642 | struct cfg80211_crypto_settings { | ||
643 | u32 wpa_versions; | ||
644 | u32 cipher_group; | ||
645 | int n_ciphers_pairwise; | ||
646 | u32 ciphers_pairwise[NL80211_MAX_NR_CIPHER_SUITES]; | ||
647 | int n_akm_suites; | ||
648 | u32 akm_suites[NL80211_MAX_NR_AKM_SUITES]; | ||
649 | bool control_port; | ||
650 | }; | ||
651 | |||
652 | /** | ||
608 | * struct cfg80211_auth_request - Authentication request data | 653 | * struct cfg80211_auth_request - Authentication request data |
609 | * | 654 | * |
610 | * This structure provides information needed to complete IEEE 802.11 | 655 | * This structure provides information needed to complete IEEE 802.11 |
611 | * authentication. | 656 | * authentication. |
612 | * NOTE: This structure will likely change when more code from mac80211 is | 657 | * |
613 | * moved into cfg80211 so that non-mac80211 drivers can benefit from it, too. | 658 | * @bss: The BSS to authenticate with. |
614 | * Before using this in a driver that does not use mac80211, it would be better | ||
615 | * to check the status of that work and better yet, volunteer to work on it. | ||
616 | * | ||
617 | * @chan: The channel to use or %NULL if not specified (auto-select based on | ||
618 | * scan results) | ||
619 | * @peer_addr: The address of the peer STA (AP BSSID in infrastructure case); | ||
620 | * this field is required to be present; if the driver wants to help with | ||
621 | * BSS selection, it should use (yet to be added) MLME event to allow user | ||
622 | * space SME to be notified of roaming candidate, so that the SME can then | ||
623 | * use the authentication request with the recommended BSSID and whatever | ||
624 | * other data may be needed for authentication/association | ||
625 | * @ssid: SSID or %NULL if not yet available | ||
626 | * @ssid_len: Length of ssid in octets | ||
627 | * @auth_type: Authentication type (algorithm) | 659 | * @auth_type: Authentication type (algorithm) |
628 | * @ie: Extra IEs to add to Authentication frame or %NULL | 660 | * @ie: Extra IEs to add to Authentication frame or %NULL |
629 | * @ie_len: Length of ie buffer in octets | 661 | * @ie_len: Length of ie buffer in octets |
662 | * @key_len: length of WEP key for shared key authentication | ||
663 | * @key_idx: index of WEP key for shared key authentication | ||
664 | * @key: WEP key for shared key authentication | ||
630 | */ | 665 | */ |
631 | struct cfg80211_auth_request { | 666 | struct cfg80211_auth_request { |
632 | struct ieee80211_channel *chan; | 667 | struct cfg80211_bss *bss; |
633 | u8 *peer_addr; | ||
634 | const u8 *ssid; | ||
635 | size_t ssid_len; | ||
636 | enum nl80211_auth_type auth_type; | ||
637 | const u8 *ie; | 668 | const u8 *ie; |
638 | size_t ie_len; | 669 | size_t ie_len; |
670 | enum nl80211_auth_type auth_type; | ||
671 | const u8 *key; | ||
672 | u8 key_len, key_idx; | ||
639 | }; | 673 | }; |
640 | 674 | ||
641 | /** | 675 | /** |
@@ -643,35 +677,19 @@ struct cfg80211_auth_request { | |||
643 | * | 677 | * |
644 | * This structure provides information needed to complete IEEE 802.11 | 678 | * This structure provides information needed to complete IEEE 802.11 |
645 | * (re)association. | 679 | * (re)association. |
646 | * NOTE: This structure will likely change when more code from mac80211 is | 680 | * @bss: The BSS to associate with. |
647 | * moved into cfg80211 so that non-mac80211 drivers can benefit from it, too. | ||
648 | * Before using this in a driver that does not use mac80211, it would be better | ||
649 | * to check the status of that work and better yet, volunteer to work on it. | ||
650 | * | ||
651 | * @chan: The channel to use or %NULL if not specified (auto-select based on | ||
652 | * scan results) | ||
653 | * @peer_addr: The address of the peer STA (AP BSSID); this field is required | ||
654 | * to be present and the STA must be in State 2 (authenticated) with the | ||
655 | * peer STA | ||
656 | * @ssid: SSID | ||
657 | * @ssid_len: Length of ssid in octets | ||
658 | * @ie: Extra IEs to add to (Re)Association Request frame or %NULL | 681 | * @ie: Extra IEs to add to (Re)Association Request frame or %NULL |
659 | * @ie_len: Length of ie buffer in octets | 682 | * @ie_len: Length of ie buffer in octets |
660 | * @use_mfp: Use management frame protection (IEEE 802.11w) in this association | 683 | * @use_mfp: Use management frame protection (IEEE 802.11w) in this association |
661 | * @control_port: Whether user space controls IEEE 802.1X port, i.e., | 684 | * @crypto: crypto settings |
662 | * sets/clears %NL80211_STA_FLAG_AUTHORIZED. If true, the driver is | 685 | * @prev_bssid: previous BSSID, if not %NULL use reassociate frame |
663 | * required to assume that the port is unauthorized until authorized by | ||
664 | * user space. Otherwise, port is marked authorized by default. | ||
665 | */ | 686 | */ |
666 | struct cfg80211_assoc_request { | 687 | struct cfg80211_assoc_request { |
667 | struct ieee80211_channel *chan; | 688 | struct cfg80211_bss *bss; |
668 | u8 *peer_addr; | 689 | const u8 *ie, *prev_bssid; |
669 | const u8 *ssid; | ||
670 | size_t ssid_len; | ||
671 | const u8 *ie; | ||
672 | size_t ie_len; | 690 | size_t ie_len; |
691 | struct cfg80211_crypto_settings crypto; | ||
673 | bool use_mfp; | 692 | bool use_mfp; |
674 | bool control_port; | ||
675 | }; | 693 | }; |
676 | 694 | ||
677 | /** | 695 | /** |
@@ -680,16 +698,16 @@ struct cfg80211_assoc_request { | |||
680 | * This structure provides information needed to complete IEEE 802.11 | 698 | * This structure provides information needed to complete IEEE 802.11 |
681 | * deauthentication. | 699 | * deauthentication. |
682 | * | 700 | * |
683 | * @peer_addr: The address of the peer STA (AP BSSID); this field is required | 701 | * @bss: the BSS to deauthenticate from |
684 | * to be present and the STA must be authenticated with the peer STA | ||
685 | * @ie: Extra IEs to add to Deauthentication frame or %NULL | 702 | * @ie: Extra IEs to add to Deauthentication frame or %NULL |
686 | * @ie_len: Length of ie buffer in octets | 703 | * @ie_len: Length of ie buffer in octets |
704 | * @reason_code: The reason code for the deauthentication | ||
687 | */ | 705 | */ |
688 | struct cfg80211_deauth_request { | 706 | struct cfg80211_deauth_request { |
689 | u8 *peer_addr; | 707 | struct cfg80211_bss *bss; |
690 | u16 reason_code; | ||
691 | const u8 *ie; | 708 | const u8 *ie; |
692 | size_t ie_len; | 709 | size_t ie_len; |
710 | u16 reason_code; | ||
693 | }; | 711 | }; |
694 | 712 | ||
695 | /** | 713 | /** |
@@ -698,16 +716,16 @@ struct cfg80211_deauth_request { | |||
698 | * This structure provides information needed to complete IEEE 802.11 | 716 | * This structure provides information needed to complete IEEE 802.11 |
699 | * disassocation. | 717 | * disassocation. |
700 | * | 718 | * |
701 | * @peer_addr: The address of the peer STA (AP BSSID); this field is required | 719 | * @bss: the BSS to disassociate from |
702 | * to be present and the STA must be associated with the peer STA | ||
703 | * @ie: Extra IEs to add to Disassociation frame or %NULL | 720 | * @ie: Extra IEs to add to Disassociation frame or %NULL |
704 | * @ie_len: Length of ie buffer in octets | 721 | * @ie_len: Length of ie buffer in octets |
722 | * @reason_code: The reason code for the disassociation | ||
705 | */ | 723 | */ |
706 | struct cfg80211_disassoc_request { | 724 | struct cfg80211_disassoc_request { |
707 | u8 *peer_addr; | 725 | struct cfg80211_bss *bss; |
708 | u16 reason_code; | ||
709 | const u8 *ie; | 726 | const u8 *ie; |
710 | size_t ie_len; | 727 | size_t ie_len; |
728 | u16 reason_code; | ||
711 | }; | 729 | }; |
712 | 730 | ||
713 | /** | 731 | /** |
@@ -726,6 +744,8 @@ struct cfg80211_disassoc_request { | |||
726 | * @ie: information element(s) to include in the beacon | 744 | * @ie: information element(s) to include in the beacon |
727 | * @ie_len: length of that | 745 | * @ie_len: length of that |
728 | * @beacon_interval: beacon interval to use | 746 | * @beacon_interval: beacon interval to use |
747 | * @privacy: this is a protected network, keys will be configured | ||
748 | * after joining | ||
729 | */ | 749 | */ |
730 | struct cfg80211_ibss_params { | 750 | struct cfg80211_ibss_params { |
731 | u8 *ssid; | 751 | u8 *ssid; |
@@ -735,6 +755,42 @@ struct cfg80211_ibss_params { | |||
735 | u8 ssid_len, ie_len; | 755 | u8 ssid_len, ie_len; |
736 | u16 beacon_interval; | 756 | u16 beacon_interval; |
737 | bool channel_fixed; | 757 | bool channel_fixed; |
758 | bool privacy; | ||
759 | }; | ||
760 | |||
761 | /** | ||
762 | * struct cfg80211_connect_params - Connection parameters | ||
763 | * | ||
764 | * This structure provides information needed to complete IEEE 802.11 | ||
765 | * authentication and association. | ||
766 | * | ||
767 | * @channel: The channel to use or %NULL if not specified (auto-select based | ||
768 | * on scan results) | ||
769 | * @bssid: The AP BSSID or %NULL if not specified (auto-select based on scan | ||
770 | * results) | ||
771 | * @ssid: SSID | ||
772 | * @ssid_len: Length of ssid in octets | ||
773 | * @auth_type: Authentication type (algorithm) | ||
774 | * @assoc_ie: IEs for association request | ||
775 | * @assoc_ie_len: Length of assoc_ie in octets | ||
776 | * @privacy: indicates whether privacy-enabled APs should be used | ||
777 | * @crypto: crypto settings | ||
778 | * @key_len: length of WEP key for shared key authentication | ||
779 | * @key_idx: index of WEP key for shared key authentication | ||
780 | * @key: WEP key for shared key authentication | ||
781 | */ | ||
782 | struct cfg80211_connect_params { | ||
783 | struct ieee80211_channel *channel; | ||
784 | u8 *bssid; | ||
785 | u8 *ssid; | ||
786 | size_t ssid_len; | ||
787 | enum nl80211_auth_type auth_type; | ||
788 | u8 *ie; | ||
789 | size_t ie_len; | ||
790 | bool privacy; | ||
791 | struct cfg80211_crypto_settings crypto; | ||
792 | const u8 *key; | ||
793 | u8 key_len, key_idx; | ||
738 | }; | 794 | }; |
739 | 795 | ||
740 | /** | 796 | /** |
@@ -764,6 +820,26 @@ enum tx_power_setting { | |||
764 | TX_POWER_FIXED, | 820 | TX_POWER_FIXED, |
765 | }; | 821 | }; |
766 | 822 | ||
823 | /* | ||
824 | * cfg80211_bitrate_mask - masks for bitrate control | ||
825 | */ | ||
826 | struct cfg80211_bitrate_mask { | ||
827 | /* | ||
828 | * As discussed in Berlin, this struct really | ||
829 | * should look like this: | ||
830 | |||
831 | struct { | ||
832 | u32 legacy; | ||
833 | u8 mcs[IEEE80211_HT_MCS_MASK_LEN]; | ||
834 | } control[IEEE80211_NUM_BANDS]; | ||
835 | |||
836 | * Since we can always fix in-kernel users, let's keep | ||
837 | * it simpler for now: | ||
838 | */ | ||
839 | u32 fixed; /* fixed bitrate, 0 == not fixed */ | ||
840 | u32 maxrate; /* in kbps, 0 == no limit */ | ||
841 | }; | ||
842 | |||
767 | /** | 843 | /** |
768 | * struct cfg80211_ops - backend description for wireless configuration | 844 | * struct cfg80211_ops - backend description for wireless configuration |
769 | * | 845 | * |
@@ -781,7 +857,8 @@ enum tx_power_setting { | |||
781 | * @resume: wiphy device needs to be resumed | 857 | * @resume: wiphy device needs to be resumed |
782 | * | 858 | * |
783 | * @add_virtual_intf: create a new virtual interface with the given name, | 859 | * @add_virtual_intf: create a new virtual interface with the given name, |
784 | * must set the struct wireless_dev's iftype. | 860 | * must set the struct wireless_dev's iftype. Beware: You must create |
861 | * the new netdev in the wiphy's network namespace! | ||
785 | * | 862 | * |
786 | * @del_virtual_intf: remove the virtual interface determined by ifindex. | 863 | * @del_virtual_intf: remove the virtual interface determined by ifindex. |
787 | * | 864 | * |
@@ -841,6 +918,12 @@ enum tx_power_setting { | |||
841 | * @deauth: Request to deauthenticate from the specified peer | 918 | * @deauth: Request to deauthenticate from the specified peer |
842 | * @disassoc: Request to disassociate from the specified peer | 919 | * @disassoc: Request to disassociate from the specified peer |
843 | * | 920 | * |
921 | * @connect: Connect to the ESS with the specified parameters. When connected, | ||
922 | * call cfg80211_connect_result() with status code %WLAN_STATUS_SUCCESS. | ||
923 | * If the connection fails for some reason, call cfg80211_connect_result() | ||
924 | * with the status from the AP. | ||
925 | * @disconnect: Disconnect from the BSS/ESS. | ||
926 | * | ||
844 | * @join_ibss: Join the specified IBSS (or create if necessary). Once done, call | 927 | * @join_ibss: Join the specified IBSS (or create if necessary). Once done, call |
845 | * cfg80211_ibss_joined(), also call that function when changing BSSID due | 928 | * cfg80211_ibss_joined(), also call that function when changing BSSID due |
846 | * to a merge. | 929 | * to a merge. |
@@ -857,6 +940,8 @@ enum tx_power_setting { | |||
857 | * | 940 | * |
858 | * @rfkill_poll: polls the hw rfkill line, use cfg80211 reporting | 941 | * @rfkill_poll: polls the hw rfkill line, use cfg80211 reporting |
859 | * functions to adjust rfkill hw state | 942 | * functions to adjust rfkill hw state |
943 | * | ||
944 | * @testmode_cmd: run a test mode command | ||
860 | */ | 945 | */ |
861 | struct cfg80211_ops { | 946 | struct cfg80211_ops { |
862 | int (*suspend)(struct wiphy *wiphy); | 947 | int (*suspend)(struct wiphy *wiphy); |
@@ -865,8 +950,9 @@ struct cfg80211_ops { | |||
865 | int (*add_virtual_intf)(struct wiphy *wiphy, char *name, | 950 | int (*add_virtual_intf)(struct wiphy *wiphy, char *name, |
866 | enum nl80211_iftype type, u32 *flags, | 951 | enum nl80211_iftype type, u32 *flags, |
867 | struct vif_params *params); | 952 | struct vif_params *params); |
868 | int (*del_virtual_intf)(struct wiphy *wiphy, int ifindex); | 953 | int (*del_virtual_intf)(struct wiphy *wiphy, struct net_device *dev); |
869 | int (*change_virtual_intf)(struct wiphy *wiphy, int ifindex, | 954 | int (*change_virtual_intf)(struct wiphy *wiphy, |
955 | struct net_device *dev, | ||
870 | enum nl80211_iftype type, u32 *flags, | 956 | enum nl80211_iftype type, u32 *flags, |
871 | struct vif_params *params); | 957 | struct vif_params *params); |
872 | 958 | ||
@@ -939,9 +1025,16 @@ struct cfg80211_ops { | |||
939 | int (*assoc)(struct wiphy *wiphy, struct net_device *dev, | 1025 | int (*assoc)(struct wiphy *wiphy, struct net_device *dev, |
940 | struct cfg80211_assoc_request *req); | 1026 | struct cfg80211_assoc_request *req); |
941 | int (*deauth)(struct wiphy *wiphy, struct net_device *dev, | 1027 | int (*deauth)(struct wiphy *wiphy, struct net_device *dev, |
942 | struct cfg80211_deauth_request *req); | 1028 | struct cfg80211_deauth_request *req, |
1029 | void *cookie); | ||
943 | int (*disassoc)(struct wiphy *wiphy, struct net_device *dev, | 1030 | int (*disassoc)(struct wiphy *wiphy, struct net_device *dev, |
944 | struct cfg80211_disassoc_request *req); | 1031 | struct cfg80211_disassoc_request *req, |
1032 | void *cookie); | ||
1033 | |||
1034 | int (*connect)(struct wiphy *wiphy, struct net_device *dev, | ||
1035 | struct cfg80211_connect_params *sme); | ||
1036 | int (*disconnect)(struct wiphy *wiphy, struct net_device *dev, | ||
1037 | u16 reason_code); | ||
945 | 1038 | ||
946 | int (*join_ibss)(struct wiphy *wiphy, struct net_device *dev, | 1039 | int (*join_ibss)(struct wiphy *wiphy, struct net_device *dev, |
947 | struct cfg80211_ibss_params *params); | 1040 | struct cfg80211_ibss_params *params); |
@@ -953,7 +1046,23 @@ struct cfg80211_ops { | |||
953 | enum tx_power_setting type, int dbm); | 1046 | enum tx_power_setting type, int dbm); |
954 | int (*get_tx_power)(struct wiphy *wiphy, int *dbm); | 1047 | int (*get_tx_power)(struct wiphy *wiphy, int *dbm); |
955 | 1048 | ||
1049 | int (*set_wds_peer)(struct wiphy *wiphy, struct net_device *dev, | ||
1050 | u8 *addr); | ||
1051 | |||
956 | void (*rfkill_poll)(struct wiphy *wiphy); | 1052 | void (*rfkill_poll)(struct wiphy *wiphy); |
1053 | |||
1054 | #ifdef CONFIG_NL80211_TESTMODE | ||
1055 | int (*testmode_cmd)(struct wiphy *wiphy, void *data, int len); | ||
1056 | #endif | ||
1057 | |||
1058 | int (*set_bitrate_mask)(struct wiphy *wiphy, | ||
1059 | struct net_device *dev, | ||
1060 | const u8 *peer, | ||
1061 | const struct cfg80211_bitrate_mask *mask); | ||
1062 | |||
1063 | /* some temporary stuff to finish wext */ | ||
1064 | int (*set_power_mgmt)(struct wiphy *wiphy, struct net_device *dev, | ||
1065 | bool enabled, int timeout); | ||
957 | }; | 1066 | }; |
958 | 1067 | ||
959 | /* | 1068 | /* |
@@ -979,6 +1088,10 @@ struct cfg80211_ops { | |||
979 | * channels at a later time. This can be used for devices which do not | 1088 | * channels at a later time. This can be used for devices which do not |
980 | * have calibration information gauranteed for frequencies or settings | 1089 | * have calibration information gauranteed for frequencies or settings |
981 | * outside of its regulatory domain. | 1090 | * outside of its regulatory domain. |
1091 | * @disable_beacon_hints: enable this if your driver needs to ensure that | ||
1092 | * passive scan flags and beaconing flags may not be lifted by cfg80211 | ||
1093 | * due to regulatory beacon hints. For more information on beacon | ||
1094 | * hints read the documenation for regulatory_hint_found_beacon() | ||
982 | * @reg_notifier: the driver's regulatory notification callback | 1095 | * @reg_notifier: the driver's regulatory notification callback |
983 | * @regd: the driver's regulatory domain, if one was requested via | 1096 | * @regd: the driver's regulatory domain, if one was requested via |
984 | * the regulatory_hint() API. This can be used by the driver | 1097 | * the regulatory_hint() API. This can be used by the driver |
@@ -992,6 +1105,12 @@ struct cfg80211_ops { | |||
992 | * @frag_threshold: Fragmentation threshold (dot11FragmentationThreshold); | 1105 | * @frag_threshold: Fragmentation threshold (dot11FragmentationThreshold); |
993 | * -1 = fragmentation disabled, only odd values >= 256 used | 1106 | * -1 = fragmentation disabled, only odd values >= 256 used |
994 | * @rts_threshold: RTS threshold (dot11RTSThreshold); -1 = RTS/CTS disabled | 1107 | * @rts_threshold: RTS threshold (dot11RTSThreshold); -1 = RTS/CTS disabled |
1108 | * @net: the network namespace this wiphy currently lives in | ||
1109 | * @netnsok: if set to false, do not allow changing the netns of this | ||
1110 | * wiphy at all | ||
1111 | * @ps_default: default for powersave, will be set depending on the | ||
1112 | * kernel's default on wiphy_new(), but can be changed by the | ||
1113 | * driver if it has a good reason to override the default | ||
995 | */ | 1114 | */ |
996 | struct wiphy { | 1115 | struct wiphy { |
997 | /* assign these fields before you register the wiphy */ | 1116 | /* assign these fields before you register the wiphy */ |
@@ -1004,6 +1123,10 @@ struct wiphy { | |||
1004 | 1123 | ||
1005 | bool custom_regulatory; | 1124 | bool custom_regulatory; |
1006 | bool strict_regulatory; | 1125 | bool strict_regulatory; |
1126 | bool disable_beacon_hints; | ||
1127 | |||
1128 | bool netnsok; | ||
1129 | bool ps_default; | ||
1007 | 1130 | ||
1008 | enum cfg80211_signal_type signal_type; | 1131 | enum cfg80211_signal_type signal_type; |
1009 | 1132 | ||
@@ -1043,9 +1166,35 @@ struct wiphy { | |||
1043 | /* dir in debugfs: ieee80211/<wiphyname> */ | 1166 | /* dir in debugfs: ieee80211/<wiphyname> */ |
1044 | struct dentry *debugfsdir; | 1167 | struct dentry *debugfsdir; |
1045 | 1168 | ||
1169 | #ifdef CONFIG_NET_NS | ||
1170 | /* the network namespace this phy lives in currently */ | ||
1171 | struct net *_net; | ||
1172 | #endif | ||
1173 | |||
1046 | char priv[0] __attribute__((__aligned__(NETDEV_ALIGN))); | 1174 | char priv[0] __attribute__((__aligned__(NETDEV_ALIGN))); |
1047 | }; | 1175 | }; |
1048 | 1176 | ||
1177 | #ifdef CONFIG_NET_NS | ||
1178 | static inline struct net *wiphy_net(struct wiphy *wiphy) | ||
1179 | { | ||
1180 | return wiphy->_net; | ||
1181 | } | ||
1182 | |||
1183 | static inline void wiphy_net_set(struct wiphy *wiphy, struct net *net) | ||
1184 | { | ||
1185 | wiphy->_net = net; | ||
1186 | } | ||
1187 | #else | ||
1188 | static inline struct net *wiphy_net(struct wiphy *wiphy) | ||
1189 | { | ||
1190 | return &init_net; | ||
1191 | } | ||
1192 | |||
1193 | static inline void wiphy_net_set(struct wiphy *wiphy, struct net *net) | ||
1194 | { | ||
1195 | } | ||
1196 | #endif | ||
1197 | |||
1049 | /** | 1198 | /** |
1050 | * wiphy_priv - return priv from wiphy | 1199 | * wiphy_priv - return priv from wiphy |
1051 | * | 1200 | * |
@@ -1058,6 +1207,17 @@ static inline void *wiphy_priv(struct wiphy *wiphy) | |||
1058 | } | 1207 | } |
1059 | 1208 | ||
1060 | /** | 1209 | /** |
1210 | * priv_to_wiphy - return the wiphy containing the priv | ||
1211 | * | ||
1212 | * @priv: a pointer previously returned by wiphy_priv | ||
1213 | */ | ||
1214 | static inline struct wiphy *priv_to_wiphy(void *priv) | ||
1215 | { | ||
1216 | BUG_ON(!priv); | ||
1217 | return container_of(priv, struct wiphy, priv); | ||
1218 | } | ||
1219 | |||
1220 | /** | ||
1061 | * set_wiphy_dev - set device pointer for wiphy | 1221 | * set_wiphy_dev - set device pointer for wiphy |
1062 | * | 1222 | * |
1063 | * @wiphy: The wiphy whose device to bind | 1223 | * @wiphy: The wiphy whose device to bind |
@@ -1129,6 +1289,13 @@ extern void wiphy_unregister(struct wiphy *wiphy); | |||
1129 | */ | 1289 | */ |
1130 | extern void wiphy_free(struct wiphy *wiphy); | 1290 | extern void wiphy_free(struct wiphy *wiphy); |
1131 | 1291 | ||
1292 | /* internal structs */ | ||
1293 | struct cfg80211_conn; | ||
1294 | struct cfg80211_internal_bss; | ||
1295 | struct cfg80211_cached_keys; | ||
1296 | |||
1297 | #define MAX_AUTH_BSSES 4 | ||
1298 | |||
1132 | /** | 1299 | /** |
1133 | * struct wireless_dev - wireless per-netdev state | 1300 | * struct wireless_dev - wireless per-netdev state |
1134 | * | 1301 | * |
@@ -1152,22 +1319,45 @@ struct wireless_dev { | |||
1152 | struct wiphy *wiphy; | 1319 | struct wiphy *wiphy; |
1153 | enum nl80211_iftype iftype; | 1320 | enum nl80211_iftype iftype; |
1154 | 1321 | ||
1155 | /* private to the generic wireless code */ | 1322 | /* the remainder of this struct should be private to cfg80211 */ |
1156 | struct list_head list; | 1323 | struct list_head list; |
1157 | struct net_device *netdev; | 1324 | struct net_device *netdev; |
1158 | 1325 | ||
1159 | /* currently used for IBSS - might be rearranged in the future */ | 1326 | struct mutex mtx; |
1160 | struct cfg80211_bss *current_bss; | 1327 | |
1161 | u8 bssid[ETH_ALEN]; | 1328 | struct work_struct cleanup_work; |
1329 | |||
1330 | /* currently used for IBSS and SME - might be rearranged later */ | ||
1162 | u8 ssid[IEEE80211_MAX_SSID_LEN]; | 1331 | u8 ssid[IEEE80211_MAX_SSID_LEN]; |
1163 | u8 ssid_len; | 1332 | u8 ssid_len; |
1333 | enum { | ||
1334 | CFG80211_SME_IDLE, | ||
1335 | CFG80211_SME_CONNECTING, | ||
1336 | CFG80211_SME_CONNECTED, | ||
1337 | } sme_state; | ||
1338 | struct cfg80211_conn *conn; | ||
1339 | struct cfg80211_cached_keys *connect_keys; | ||
1340 | |||
1341 | struct list_head event_list; | ||
1342 | spinlock_t event_lock; | ||
1343 | |||
1344 | struct cfg80211_internal_bss *authtry_bsses[MAX_AUTH_BSSES]; | ||
1345 | struct cfg80211_internal_bss *auth_bsses[MAX_AUTH_BSSES]; | ||
1346 | struct cfg80211_internal_bss *current_bss; /* associated / joined */ | ||
1164 | 1347 | ||
1165 | #ifdef CONFIG_WIRELESS_EXT | 1348 | #ifdef CONFIG_WIRELESS_EXT |
1166 | /* wext data */ | 1349 | /* wext data */ |
1167 | struct { | 1350 | struct { |
1168 | struct cfg80211_ibss_params ibss; | 1351 | struct cfg80211_ibss_params ibss; |
1169 | u8 bssid[ETH_ALEN]; | 1352 | struct cfg80211_connect_params connect; |
1353 | struct cfg80211_cached_keys *keys; | ||
1354 | u8 *ie; | ||
1355 | size_t ie_len; | ||
1356 | u8 bssid[ETH_ALEN], prev_bssid[ETH_ALEN]; | ||
1357 | u8 ssid[IEEE80211_MAX_SSID_LEN]; | ||
1170 | s8 default_key, default_mgmt_key; | 1358 | s8 default_key, default_mgmt_key; |
1359 | bool ps, prev_bssid_valid; | ||
1360 | int ps_timeout; | ||
1171 | } wext; | 1361 | } wext; |
1172 | #endif | 1362 | #endif |
1173 | }; | 1363 | }; |
@@ -1347,20 +1537,6 @@ unsigned int cfg80211_classify8021d(struct sk_buff *skb); | |||
1347 | extern int regulatory_hint(struct wiphy *wiphy, const char *alpha2); | 1537 | extern int regulatory_hint(struct wiphy *wiphy, const char *alpha2); |
1348 | 1538 | ||
1349 | /** | 1539 | /** |
1350 | * regulatory_hint_11d - hints a country IE as a regulatory domain | ||
1351 | * @wiphy: the wireless device giving the hint (used only for reporting | ||
1352 | * conflicts) | ||
1353 | * @country_ie: pointer to the country IE | ||
1354 | * @country_ie_len: length of the country IE | ||
1355 | * | ||
1356 | * We will intersect the rd with the what CRDA tells us should apply | ||
1357 | * for the alpha2 this country IE belongs to, this prevents APs from | ||
1358 | * sending us incorrect or outdated information against a country. | ||
1359 | */ | ||
1360 | extern void regulatory_hint_11d(struct wiphy *wiphy, | ||
1361 | u8 *country_ie, | ||
1362 | u8 country_ie_len); | ||
1363 | /** | ||
1364 | * wiphy_apply_custom_regulatory - apply a custom driver regulatory domain | 1540 | * wiphy_apply_custom_regulatory - apply a custom driver regulatory domain |
1365 | * @wiphy: the wireless device we want to process the regulatory domain on | 1541 | * @wiphy: the wireless device we want to process the regulatory domain on |
1366 | * @regd: the custom regulatory domain to use for this wiphy | 1542 | * @regd: the custom regulatory domain to use for this wiphy |
@@ -1428,27 +1604,34 @@ int cfg80211_wext_siwmlme(struct net_device *dev, | |||
1428 | int cfg80211_wext_giwrange(struct net_device *dev, | 1604 | int cfg80211_wext_giwrange(struct net_device *dev, |
1429 | struct iw_request_info *info, | 1605 | struct iw_request_info *info, |
1430 | struct iw_point *data, char *extra); | 1606 | struct iw_point *data, char *extra); |
1431 | int cfg80211_ibss_wext_siwfreq(struct net_device *dev, | 1607 | int cfg80211_wext_siwgenie(struct net_device *dev, |
1432 | struct iw_request_info *info, | 1608 | struct iw_request_info *info, |
1433 | struct iw_freq *freq, char *extra); | 1609 | struct iw_point *data, char *extra); |
1434 | int cfg80211_ibss_wext_giwfreq(struct net_device *dev, | 1610 | int cfg80211_wext_siwauth(struct net_device *dev, |
1435 | struct iw_request_info *info, | 1611 | struct iw_request_info *info, |
1436 | struct iw_freq *freq, char *extra); | 1612 | struct iw_param *data, char *extra); |
1437 | int cfg80211_ibss_wext_siwessid(struct net_device *dev, | 1613 | int cfg80211_wext_giwauth(struct net_device *dev, |
1438 | struct iw_request_info *info, | 1614 | struct iw_request_info *info, |
1439 | struct iw_point *data, char *ssid); | 1615 | struct iw_param *data, char *extra); |
1440 | int cfg80211_ibss_wext_giwessid(struct net_device *dev, | ||
1441 | struct iw_request_info *info, | ||
1442 | struct iw_point *data, char *ssid); | ||
1443 | int cfg80211_ibss_wext_siwap(struct net_device *dev, | ||
1444 | struct iw_request_info *info, | ||
1445 | struct sockaddr *ap_addr, char *extra); | ||
1446 | int cfg80211_ibss_wext_giwap(struct net_device *dev, | ||
1447 | struct iw_request_info *info, | ||
1448 | struct sockaddr *ap_addr, char *extra); | ||
1449 | 1616 | ||
1450 | struct ieee80211_channel *cfg80211_wext_freq(struct wiphy *wiphy, | 1617 | int cfg80211_wext_siwfreq(struct net_device *dev, |
1451 | struct iw_freq *freq); | 1618 | struct iw_request_info *info, |
1619 | struct iw_freq *freq, char *extra); | ||
1620 | int cfg80211_wext_giwfreq(struct net_device *dev, | ||
1621 | struct iw_request_info *info, | ||
1622 | struct iw_freq *freq, char *extra); | ||
1623 | int cfg80211_wext_siwessid(struct net_device *dev, | ||
1624 | struct iw_request_info *info, | ||
1625 | struct iw_point *data, char *ssid); | ||
1626 | int cfg80211_wext_giwessid(struct net_device *dev, | ||
1627 | struct iw_request_info *info, | ||
1628 | struct iw_point *data, char *ssid); | ||
1629 | int cfg80211_wext_siwrate(struct net_device *dev, | ||
1630 | struct iw_request_info *info, | ||
1631 | struct iw_param *rate, char *extra); | ||
1632 | int cfg80211_wext_giwrate(struct net_device *dev, | ||
1633 | struct iw_request_info *info, | ||
1634 | struct iw_param *rate, char *extra); | ||
1452 | 1635 | ||
1453 | int cfg80211_wext_siwrts(struct net_device *dev, | 1636 | int cfg80211_wext_siwrts(struct net_device *dev, |
1454 | struct iw_request_info *info, | 1637 | struct iw_request_info *info, |
@@ -1483,6 +1666,21 @@ int cfg80211_wext_siwtxpower(struct net_device *dev, | |||
1483 | int cfg80211_wext_giwtxpower(struct net_device *dev, | 1666 | int cfg80211_wext_giwtxpower(struct net_device *dev, |
1484 | struct iw_request_info *info, | 1667 | struct iw_request_info *info, |
1485 | union iwreq_data *data, char *keybuf); | 1668 | union iwreq_data *data, char *keybuf); |
1669 | struct iw_statistics *cfg80211_wireless_stats(struct net_device *dev); | ||
1670 | |||
1671 | int cfg80211_wext_siwpower(struct net_device *dev, | ||
1672 | struct iw_request_info *info, | ||
1673 | struct iw_param *wrq, char *extra); | ||
1674 | int cfg80211_wext_giwpower(struct net_device *dev, | ||
1675 | struct iw_request_info *info, | ||
1676 | struct iw_param *wrq, char *extra); | ||
1677 | |||
1678 | int cfg80211_wext_siwap(struct net_device *dev, | ||
1679 | struct iw_request_info *info, | ||
1680 | struct sockaddr *ap_addr, char *extra); | ||
1681 | int cfg80211_wext_giwap(struct net_device *dev, | ||
1682 | struct iw_request_info *info, | ||
1683 | struct sockaddr *ap_addr, char *extra); | ||
1486 | 1684 | ||
1487 | /* | 1685 | /* |
1488 | * callbacks for asynchronous cfg80211 methods, notification | 1686 | * callbacks for asynchronous cfg80211 methods, notification |
@@ -1564,7 +1762,7 @@ void cfg80211_unlink_bss(struct wiphy *wiphy, struct cfg80211_bss *bss); | |||
1564 | * This function is called whenever an authentication has been processed in | 1762 | * This function is called whenever an authentication has been processed in |
1565 | * station mode. The driver is required to call either this function or | 1763 | * station mode. The driver is required to call either this function or |
1566 | * cfg80211_send_auth_timeout() to indicate the result of cfg80211_ops::auth() | 1764 | * cfg80211_send_auth_timeout() to indicate the result of cfg80211_ops::auth() |
1567 | * call. | 1765 | * call. This function may sleep. |
1568 | */ | 1766 | */ |
1569 | void cfg80211_send_rx_auth(struct net_device *dev, const u8 *buf, size_t len); | 1767 | void cfg80211_send_rx_auth(struct net_device *dev, const u8 *buf, size_t len); |
1570 | 1768 | ||
@@ -1572,6 +1770,8 @@ void cfg80211_send_rx_auth(struct net_device *dev, const u8 *buf, size_t len); | |||
1572 | * cfg80211_send_auth_timeout - notification of timed out authentication | 1770 | * cfg80211_send_auth_timeout - notification of timed out authentication |
1573 | * @dev: network device | 1771 | * @dev: network device |
1574 | * @addr: The MAC address of the device with which the authentication timed out | 1772 | * @addr: The MAC address of the device with which the authentication timed out |
1773 | * | ||
1774 | * This function may sleep. | ||
1575 | */ | 1775 | */ |
1576 | void cfg80211_send_auth_timeout(struct net_device *dev, const u8 *addr); | 1776 | void cfg80211_send_auth_timeout(struct net_device *dev, const u8 *addr); |
1577 | 1777 | ||
@@ -1584,7 +1784,7 @@ void cfg80211_send_auth_timeout(struct net_device *dev, const u8 *addr); | |||
1584 | * This function is called whenever a (re)association response has been | 1784 | * This function is called whenever a (re)association response has been |
1585 | * processed in station mode. The driver is required to call either this | 1785 | * processed in station mode. The driver is required to call either this |
1586 | * function or cfg80211_send_assoc_timeout() to indicate the result of | 1786 | * function or cfg80211_send_assoc_timeout() to indicate the result of |
1587 | * cfg80211_ops::assoc() call. | 1787 | * cfg80211_ops::assoc() call. This function may sleep. |
1588 | */ | 1788 | */ |
1589 | void cfg80211_send_rx_assoc(struct net_device *dev, const u8 *buf, size_t len); | 1789 | void cfg80211_send_rx_assoc(struct net_device *dev, const u8 *buf, size_t len); |
1590 | 1790 | ||
@@ -1592,6 +1792,8 @@ void cfg80211_send_rx_assoc(struct net_device *dev, const u8 *buf, size_t len); | |||
1592 | * cfg80211_send_assoc_timeout - notification of timed out association | 1792 | * cfg80211_send_assoc_timeout - notification of timed out association |
1593 | * @dev: network device | 1793 | * @dev: network device |
1594 | * @addr: The MAC address of the device with which the association timed out | 1794 | * @addr: The MAC address of the device with which the association timed out |
1795 | * | ||
1796 | * This function may sleep. | ||
1595 | */ | 1797 | */ |
1596 | void cfg80211_send_assoc_timeout(struct net_device *dev, const u8 *addr); | 1798 | void cfg80211_send_assoc_timeout(struct net_device *dev, const u8 *addr); |
1597 | 1799 | ||
@@ -1600,41 +1802,30 @@ void cfg80211_send_assoc_timeout(struct net_device *dev, const u8 *addr); | |||
1600 | * @dev: network device | 1802 | * @dev: network device |
1601 | * @buf: deauthentication frame (header + body) | 1803 | * @buf: deauthentication frame (header + body) |
1602 | * @len: length of the frame data | 1804 | * @len: length of the frame data |
1805 | * @cookie: cookie from ->deauth if called within that callback, | ||
1806 | * %NULL otherwise | ||
1603 | * | 1807 | * |
1604 | * This function is called whenever deauthentication has been processed in | 1808 | * This function is called whenever deauthentication has been processed in |
1605 | * station mode. This includes both received deauthentication frames and | 1809 | * station mode. This includes both received deauthentication frames and |
1606 | * locally generated ones. | 1810 | * locally generated ones. This function may sleep. |
1607 | */ | 1811 | */ |
1608 | void cfg80211_send_deauth(struct net_device *dev, const u8 *buf, size_t len); | 1812 | void cfg80211_send_deauth(struct net_device *dev, const u8 *buf, size_t len, |
1813 | void *cookie); | ||
1609 | 1814 | ||
1610 | /** | 1815 | /** |
1611 | * cfg80211_send_disassoc - notification of processed disassociation | 1816 | * cfg80211_send_disassoc - notification of processed disassociation |
1612 | * @dev: network device | 1817 | * @dev: network device |
1613 | * @buf: disassociation response frame (header + body) | 1818 | * @buf: disassociation response frame (header + body) |
1614 | * @len: length of the frame data | 1819 | * @len: length of the frame data |
1820 | * @cookie: cookie from ->disassoc if called within that callback, | ||
1821 | * %NULL otherwise | ||
1615 | * | 1822 | * |
1616 | * This function is called whenever disassociation has been processed in | 1823 | * This function is called whenever disassociation has been processed in |
1617 | * station mode. This includes both received disassociation frames and locally | 1824 | * station mode. This includes both received disassociation frames and locally |
1618 | * generated ones. | 1825 | * generated ones. This function may sleep. |
1619 | */ | ||
1620 | void cfg80211_send_disassoc(struct net_device *dev, const u8 *buf, size_t len); | ||
1621 | |||
1622 | /** | ||
1623 | * cfg80211_hold_bss - exclude bss from expiration | ||
1624 | * @bss: bss which should not expire | ||
1625 | * | ||
1626 | * In a case when the BSS is not updated but it shouldn't expire this | ||
1627 | * function can be used to mark the BSS to be excluded from expiration. | ||
1628 | */ | ||
1629 | void cfg80211_hold_bss(struct cfg80211_bss *bss); | ||
1630 | |||
1631 | /** | ||
1632 | * cfg80211_unhold_bss - remove expiration exception from the BSS | ||
1633 | * @bss: bss which can expire again | ||
1634 | * | ||
1635 | * This function marks the BSS to be expirable again. | ||
1636 | */ | 1826 | */ |
1637 | void cfg80211_unhold_bss(struct cfg80211_bss *bss); | 1827 | void cfg80211_send_disassoc(struct net_device *dev, const u8 *buf, size_t len, |
1828 | void *cookie); | ||
1638 | 1829 | ||
1639 | /** | 1830 | /** |
1640 | * cfg80211_michael_mic_failure - notification of Michael MIC failure (TKIP) | 1831 | * cfg80211_michael_mic_failure - notification of Michael MIC failure (TKIP) |
@@ -1643,6 +1834,7 @@ void cfg80211_unhold_bss(struct cfg80211_bss *bss); | |||
1643 | * @key_type: The key type that the received frame used | 1834 | * @key_type: The key type that the received frame used |
1644 | * @key_id: Key identifier (0..3) | 1835 | * @key_id: Key identifier (0..3) |
1645 | * @tsc: The TSC value of the frame that generated the MIC failure (6 octets) | 1836 | * @tsc: The TSC value of the frame that generated the MIC failure (6 octets) |
1837 | * @gfp: allocation flags | ||
1646 | * | 1838 | * |
1647 | * This function is called whenever the local MAC detects a MIC failure in a | 1839 | * This function is called whenever the local MAC detects a MIC failure in a |
1648 | * received frame. This matches with MLME-MICHAELMICFAILURE.indication() | 1840 | * received frame. This matches with MLME-MICHAELMICFAILURE.indication() |
@@ -1650,7 +1842,7 @@ void cfg80211_unhold_bss(struct cfg80211_bss *bss); | |||
1650 | */ | 1842 | */ |
1651 | void cfg80211_michael_mic_failure(struct net_device *dev, const u8 *addr, | 1843 | void cfg80211_michael_mic_failure(struct net_device *dev, const u8 *addr, |
1652 | enum nl80211_key_type key_type, int key_id, | 1844 | enum nl80211_key_type key_type, int key_id, |
1653 | const u8 *tsc); | 1845 | const u8 *tsc, gfp_t gfp); |
1654 | 1846 | ||
1655 | /** | 1847 | /** |
1656 | * cfg80211_ibss_joined - notify cfg80211 that device joined an IBSS | 1848 | * cfg80211_ibss_joined - notify cfg80211 that device joined an IBSS |
@@ -1687,4 +1879,137 @@ void wiphy_rfkill_start_polling(struct wiphy *wiphy); | |||
1687 | */ | 1879 | */ |
1688 | void wiphy_rfkill_stop_polling(struct wiphy *wiphy); | 1880 | void wiphy_rfkill_stop_polling(struct wiphy *wiphy); |
1689 | 1881 | ||
1882 | #ifdef CONFIG_NL80211_TESTMODE | ||
1883 | /** | ||
1884 | * cfg80211_testmode_alloc_reply_skb - allocate testmode reply | ||
1885 | * @wiphy: the wiphy | ||
1886 | * @approxlen: an upper bound of the length of the data that will | ||
1887 | * be put into the skb | ||
1888 | * | ||
1889 | * This function allocates and pre-fills an skb for a reply to | ||
1890 | * the testmode command. Since it is intended for a reply, calling | ||
1891 | * it outside of the @testmode_cmd operation is invalid. | ||
1892 | * | ||
1893 | * The returned skb (or %NULL if any errors happen) is pre-filled | ||
1894 | * with the wiphy index and set up in a way that any data that is | ||
1895 | * put into the skb (with skb_put(), nla_put() or similar) will end | ||
1896 | * up being within the %NL80211_ATTR_TESTDATA attribute, so all that | ||
1897 | * needs to be done with the skb is adding data for the corresponding | ||
1898 | * userspace tool which can then read that data out of the testdata | ||
1899 | * attribute. You must not modify the skb in any other way. | ||
1900 | * | ||
1901 | * When done, call cfg80211_testmode_reply() with the skb and return | ||
1902 | * its error code as the result of the @testmode_cmd operation. | ||
1903 | */ | ||
1904 | struct sk_buff *cfg80211_testmode_alloc_reply_skb(struct wiphy *wiphy, | ||
1905 | int approxlen); | ||
1906 | |||
1907 | /** | ||
1908 | * cfg80211_testmode_reply - send the reply skb | ||
1909 | * @skb: The skb, must have been allocated with | ||
1910 | * cfg80211_testmode_alloc_reply_skb() | ||
1911 | * | ||
1912 | * Returns an error code or 0 on success, since calling this | ||
1913 | * function will usually be the last thing before returning | ||
1914 | * from the @testmode_cmd you should return the error code. | ||
1915 | * Note that this function consumes the skb regardless of the | ||
1916 | * return value. | ||
1917 | */ | ||
1918 | int cfg80211_testmode_reply(struct sk_buff *skb); | ||
1919 | |||
1920 | /** | ||
1921 | * cfg80211_testmode_alloc_event_skb - allocate testmode event | ||
1922 | * @wiphy: the wiphy | ||
1923 | * @approxlen: an upper bound of the length of the data that will | ||
1924 | * be put into the skb | ||
1925 | * @gfp: allocation flags | ||
1926 | * | ||
1927 | * This function allocates and pre-fills an skb for an event on the | ||
1928 | * testmode multicast group. | ||
1929 | * | ||
1930 | * The returned skb (or %NULL if any errors happen) is set up in the | ||
1931 | * same way as with cfg80211_testmode_alloc_reply_skb() but prepared | ||
1932 | * for an event. As there, you should simply add data to it that will | ||
1933 | * then end up in the %NL80211_ATTR_TESTDATA attribute. Again, you must | ||
1934 | * not modify the skb in any other way. | ||
1935 | * | ||
1936 | * When done filling the skb, call cfg80211_testmode_event() with the | ||
1937 | * skb to send the event. | ||
1938 | */ | ||
1939 | struct sk_buff *cfg80211_testmode_alloc_event_skb(struct wiphy *wiphy, | ||
1940 | int approxlen, gfp_t gfp); | ||
1941 | |||
1942 | /** | ||
1943 | * cfg80211_testmode_event - send the event | ||
1944 | * @skb: The skb, must have been allocated with | ||
1945 | * cfg80211_testmode_alloc_event_skb() | ||
1946 | * @gfp: allocation flags | ||
1947 | * | ||
1948 | * This function sends the given @skb, which must have been allocated | ||
1949 | * by cfg80211_testmode_alloc_event_skb(), as an event. It always | ||
1950 | * consumes it. | ||
1951 | */ | ||
1952 | void cfg80211_testmode_event(struct sk_buff *skb, gfp_t gfp); | ||
1953 | |||
1954 | #define CFG80211_TESTMODE_CMD(cmd) .testmode_cmd = (cmd), | ||
1955 | #else | ||
1956 | #define CFG80211_TESTMODE_CMD(cmd) | ||
1957 | #endif | ||
1958 | |||
1959 | /** | ||
1960 | * cfg80211_connect_result - notify cfg80211 of connection result | ||
1961 | * | ||
1962 | * @dev: network device | ||
1963 | * @bssid: the BSSID of the AP | ||
1964 | * @req_ie: association request IEs (maybe be %NULL) | ||
1965 | * @req_ie_len: association request IEs length | ||
1966 | * @resp_ie: association response IEs (may be %NULL) | ||
1967 | * @resp_ie_len: assoc response IEs length | ||
1968 | * @status: status code, 0 for successful connection, use | ||
1969 | * %WLAN_STATUS_UNSPECIFIED_FAILURE if your device cannot give you | ||
1970 | * the real status code for failures. | ||
1971 | * @gfp: allocation flags | ||
1972 | * | ||
1973 | * It should be called by the underlying driver whenever connect() has | ||
1974 | * succeeded. | ||
1975 | */ | ||
1976 | void cfg80211_connect_result(struct net_device *dev, const u8 *bssid, | ||
1977 | const u8 *req_ie, size_t req_ie_len, | ||
1978 | const u8 *resp_ie, size_t resp_ie_len, | ||
1979 | u16 status, gfp_t gfp); | ||
1980 | |||
1981 | /** | ||
1982 | * cfg80211_roamed - notify cfg80211 of roaming | ||
1983 | * | ||
1984 | * @dev: network device | ||
1985 | * @bssid: the BSSID of the new AP | ||
1986 | * @req_ie: association request IEs (maybe be %NULL) | ||
1987 | * @req_ie_len: association request IEs length | ||
1988 | * @resp_ie: association response IEs (may be %NULL) | ||
1989 | * @resp_ie_len: assoc response IEs length | ||
1990 | * @gfp: allocation flags | ||
1991 | * | ||
1992 | * It should be called by the underlying driver whenever it roamed | ||
1993 | * from one AP to another while connected. | ||
1994 | */ | ||
1995 | void cfg80211_roamed(struct net_device *dev, const u8 *bssid, | ||
1996 | const u8 *req_ie, size_t req_ie_len, | ||
1997 | const u8 *resp_ie, size_t resp_ie_len, gfp_t gfp); | ||
1998 | |||
1999 | /** | ||
2000 | * cfg80211_disconnected - notify cfg80211 that connection was dropped | ||
2001 | * | ||
2002 | * @dev: network device | ||
2003 | * @ie: information elements of the deauth/disassoc frame (may be %NULL) | ||
2004 | * @ie_len: length of IEs | ||
2005 | * @reason: reason code for the disconnection, set it to 0 if unknown | ||
2006 | * @gfp: allocation flags | ||
2007 | * | ||
2008 | * After it calls this function, the driver should enter an idle state | ||
2009 | * and not try to connect to any AP any more. | ||
2010 | */ | ||
2011 | void cfg80211_disconnected(struct net_device *dev, u16 reason, | ||
2012 | u8 *ie, size_t ie_len, gfp_t gfp); | ||
2013 | |||
2014 | |||
1690 | #endif /* __NET_CFG80211_H */ | 2015 | #endif /* __NET_CFG80211_H */ |
diff --git a/include/net/dcbnl.h b/include/net/dcbnl.h index 775cfc8055be..b36ac7e0914d 100644 --- a/include/net/dcbnl.h +++ b/include/net/dcbnl.h | |||
@@ -48,6 +48,8 @@ struct dcbnl_rtnl_ops { | |||
48 | void (*setbcncfg)(struct net_device *, int, u32); | 48 | void (*setbcncfg)(struct net_device *, int, u32); |
49 | void (*getbcnrp)(struct net_device *, int, u8 *); | 49 | void (*getbcnrp)(struct net_device *, int, u8 *); |
50 | void (*setbcnrp)(struct net_device *, int, u8); | 50 | void (*setbcnrp)(struct net_device *, int, u8); |
51 | u8 (*setapp)(struct net_device *, u8, u16, u8); | ||
52 | u8 (*getapp)(struct net_device *, u8, u16); | ||
51 | }; | 53 | }; |
52 | 54 | ||
53 | #endif /* __NET_DCBNL_H__ */ | 55 | #endif /* __NET_DCBNL_H__ */ |
diff --git a/include/net/dst.h b/include/net/dst.h index 7fc409c19b37..5a900ddcf10d 100644 --- a/include/net/dst.h +++ b/include/net/dst.h | |||
@@ -8,6 +8,7 @@ | |||
8 | #ifndef _NET_DST_H | 8 | #ifndef _NET_DST_H |
9 | #define _NET_DST_H | 9 | #define _NET_DST_H |
10 | 10 | ||
11 | #include <net/dst_ops.h> | ||
11 | #include <linux/netdevice.h> | 12 | #include <linux/netdevice.h> |
12 | #include <linux/rtnetlink.h> | 13 | #include <linux/rtnetlink.h> |
13 | #include <linux/rcupdate.h> | 14 | #include <linux/rcupdate.h> |
@@ -102,28 +103,6 @@ struct dst_entry | |||
102 | }; | 103 | }; |
103 | }; | 104 | }; |
104 | 105 | ||
105 | |||
106 | struct dst_ops | ||
107 | { | ||
108 | unsigned short family; | ||
109 | __be16 protocol; | ||
110 | unsigned gc_thresh; | ||
111 | |||
112 | int (*gc)(struct dst_ops *ops); | ||
113 | struct dst_entry * (*check)(struct dst_entry *, __u32 cookie); | ||
114 | void (*destroy)(struct dst_entry *); | ||
115 | void (*ifdown)(struct dst_entry *, | ||
116 | struct net_device *dev, int how); | ||
117 | struct dst_entry * (*negative_advice)(struct dst_entry *); | ||
118 | void (*link_failure)(struct sk_buff *); | ||
119 | void (*update_pmtu)(struct dst_entry *dst, u32 mtu); | ||
120 | int (*local_out)(struct sk_buff *skb); | ||
121 | |||
122 | atomic_t entries; | ||
123 | struct kmem_cache *kmem_cachep; | ||
124 | struct net *dst_net; | ||
125 | }; | ||
126 | |||
127 | #ifdef __KERNEL__ | 106 | #ifdef __KERNEL__ |
128 | 107 | ||
129 | static inline u32 | 108 | static inline u32 |
diff --git a/include/net/dst_ops.h b/include/net/dst_ops.h new file mode 100644 index 000000000000..d1ff9b7e99b8 --- /dev/null +++ b/include/net/dst_ops.h | |||
@@ -0,0 +1,28 @@ | |||
1 | #ifndef _NET_DST_OPS_H | ||
2 | #define _NET_DST_OPS_H | ||
3 | #include <linux/types.h> | ||
4 | |||
5 | struct dst_entry; | ||
6 | struct kmem_cachep; | ||
7 | struct net_device; | ||
8 | struct sk_buff; | ||
9 | |||
10 | struct dst_ops { | ||
11 | unsigned short family; | ||
12 | __be16 protocol; | ||
13 | unsigned gc_thresh; | ||
14 | |||
15 | int (*gc)(struct dst_ops *ops); | ||
16 | struct dst_entry * (*check)(struct dst_entry *, __u32 cookie); | ||
17 | void (*destroy)(struct dst_entry *); | ||
18 | void (*ifdown)(struct dst_entry *, | ||
19 | struct net_device *dev, int how); | ||
20 | struct dst_entry * (*negative_advice)(struct dst_entry *); | ||
21 | void (*link_failure)(struct sk_buff *); | ||
22 | void (*update_pmtu)(struct dst_entry *dst, u32 mtu); | ||
23 | int (*local_out)(struct sk_buff *skb); | ||
24 | |||
25 | atomic_t entries; | ||
26 | struct kmem_cache *kmem_cachep; | ||
27 | }; | ||
28 | #endif | ||
diff --git a/include/net/gen_stats.h b/include/net/gen_stats.h index d136b5240ef2..c1488553e349 100644 --- a/include/net/gen_stats.h +++ b/include/net/gen_stats.h | |||
@@ -28,7 +28,7 @@ extern int gnet_stats_start_copy_compat(struct sk_buff *skb, int type, | |||
28 | spinlock_t *lock, struct gnet_dump *d); | 28 | spinlock_t *lock, struct gnet_dump *d); |
29 | 29 | ||
30 | extern int gnet_stats_copy_basic(struct gnet_dump *d, | 30 | extern int gnet_stats_copy_basic(struct gnet_dump *d, |
31 | struct gnet_stats_basic *b); | 31 | struct gnet_stats_basic_packed *b); |
32 | extern int gnet_stats_copy_rate_est(struct gnet_dump *d, | 32 | extern int gnet_stats_copy_rate_est(struct gnet_dump *d, |
33 | struct gnet_stats_rate_est *r); | 33 | struct gnet_stats_rate_est *r); |
34 | extern int gnet_stats_copy_queue(struct gnet_dump *d, | 34 | extern int gnet_stats_copy_queue(struct gnet_dump *d, |
@@ -37,14 +37,14 @@ extern int gnet_stats_copy_app(struct gnet_dump *d, void *st, int len); | |||
37 | 37 | ||
38 | extern int gnet_stats_finish_copy(struct gnet_dump *d); | 38 | extern int gnet_stats_finish_copy(struct gnet_dump *d); |
39 | 39 | ||
40 | extern int gen_new_estimator(struct gnet_stats_basic *bstats, | 40 | extern int gen_new_estimator(struct gnet_stats_basic_packed *bstats, |
41 | struct gnet_stats_rate_est *rate_est, | 41 | struct gnet_stats_rate_est *rate_est, |
42 | spinlock_t *stats_lock, struct nlattr *opt); | 42 | spinlock_t *stats_lock, struct nlattr *opt); |
43 | extern void gen_kill_estimator(struct gnet_stats_basic *bstats, | 43 | extern void gen_kill_estimator(struct gnet_stats_basic_packed *bstats, |
44 | struct gnet_stats_rate_est *rate_est); | 44 | struct gnet_stats_rate_est *rate_est); |
45 | extern int gen_replace_estimator(struct gnet_stats_basic *bstats, | 45 | extern int gen_replace_estimator(struct gnet_stats_basic_packed *bstats, |
46 | struct gnet_stats_rate_est *rate_est, | 46 | struct gnet_stats_rate_est *rate_est, |
47 | spinlock_t *stats_lock, struct nlattr *opt); | 47 | spinlock_t *stats_lock, struct nlattr *opt); |
48 | extern bool gen_estimator_active(const struct gnet_stats_basic *bstats, | 48 | extern bool gen_estimator_active(const struct gnet_stats_basic_packed *bstats, |
49 | const struct gnet_stats_rate_est *rate_est); | 49 | const struct gnet_stats_rate_est *rate_est); |
50 | #endif | 50 | #endif |
diff --git a/include/net/genetlink.h b/include/net/genetlink.h index 1b0e3ee4ddd8..2a1c06874c42 100644 --- a/include/net/genetlink.h +++ b/include/net/genetlink.h | |||
@@ -3,6 +3,7 @@ | |||
3 | 3 | ||
4 | #include <linux/genetlink.h> | 4 | #include <linux/genetlink.h> |
5 | #include <net/netlink.h> | 5 | #include <net/netlink.h> |
6 | #include <net/net_namespace.h> | ||
6 | 7 | ||
7 | /** | 8 | /** |
8 | * struct genl_multicast_group - generic netlink multicast group | 9 | * struct genl_multicast_group - generic netlink multicast group |
@@ -27,6 +28,8 @@ struct genl_multicast_group | |||
27 | * @name: name of family | 28 | * @name: name of family |
28 | * @version: protocol version | 29 | * @version: protocol version |
29 | * @maxattr: maximum number of attributes supported | 30 | * @maxattr: maximum number of attributes supported |
31 | * @netnsok: set to true if the family can handle network | ||
32 | * namespaces and should be presented in all of them | ||
30 | * @attrbuf: buffer to store parsed attributes | 33 | * @attrbuf: buffer to store parsed attributes |
31 | * @ops_list: list of all assigned operations | 34 | * @ops_list: list of all assigned operations |
32 | * @family_list: family list | 35 | * @family_list: family list |
@@ -39,6 +42,7 @@ struct genl_family | |||
39 | char name[GENL_NAMSIZ]; | 42 | char name[GENL_NAMSIZ]; |
40 | unsigned int version; | 43 | unsigned int version; |
41 | unsigned int maxattr; | 44 | unsigned int maxattr; |
45 | bool netnsok; | ||
42 | struct nlattr ** attrbuf; /* private */ | 46 | struct nlattr ** attrbuf; /* private */ |
43 | struct list_head ops_list; /* private */ | 47 | struct list_head ops_list; /* private */ |
44 | struct list_head family_list; /* private */ | 48 | struct list_head family_list; /* private */ |
@@ -62,8 +66,32 @@ struct genl_info | |||
62 | struct genlmsghdr * genlhdr; | 66 | struct genlmsghdr * genlhdr; |
63 | void * userhdr; | 67 | void * userhdr; |
64 | struct nlattr ** attrs; | 68 | struct nlattr ** attrs; |
69 | #ifdef CONFIG_NET_NS | ||
70 | struct net * _net; | ||
71 | #endif | ||
65 | }; | 72 | }; |
66 | 73 | ||
74 | #ifdef CONFIG_NET_NS | ||
75 | static inline struct net *genl_info_net(struct genl_info *info) | ||
76 | { | ||
77 | return info->_net; | ||
78 | } | ||
79 | |||
80 | static inline void genl_info_net_set(struct genl_info *info, struct net *net) | ||
81 | { | ||
82 | info->_net = net; | ||
83 | } | ||
84 | #else | ||
85 | static inline struct net *genl_info_net(struct genl_info *info) | ||
86 | { | ||
87 | return &init_net; | ||
88 | } | ||
89 | |||
90 | static inline void genl_info_net_set(struct genl_info *info, struct net *net) | ||
91 | { | ||
92 | } | ||
93 | #endif | ||
94 | |||
67 | /** | 95 | /** |
68 | * struct genl_ops - generic netlink operations | 96 | * struct genl_ops - generic netlink operations |
69 | * @cmd: command identifier | 97 | * @cmd: command identifier |
@@ -98,8 +126,6 @@ extern int genl_register_mc_group(struct genl_family *family, | |||
98 | extern void genl_unregister_mc_group(struct genl_family *family, | 126 | extern void genl_unregister_mc_group(struct genl_family *family, |
99 | struct genl_multicast_group *grp); | 127 | struct genl_multicast_group *grp); |
100 | 128 | ||
101 | extern struct sock *genl_sock; | ||
102 | |||
103 | /** | 129 | /** |
104 | * genlmsg_put - Add generic netlink header to netlink message | 130 | * genlmsg_put - Add generic netlink header to netlink message |
105 | * @skb: socket buffer holding the message | 131 | * @skb: socket buffer holding the message |
@@ -170,7 +196,21 @@ static inline void genlmsg_cancel(struct sk_buff *skb, void *hdr) | |||
170 | } | 196 | } |
171 | 197 | ||
172 | /** | 198 | /** |
173 | * genlmsg_multicast - multicast a netlink message | 199 | * genlmsg_multicast_netns - multicast a netlink message to a specific netns |
200 | * @net: the net namespace | ||
201 | * @skb: netlink message as socket buffer | ||
202 | * @pid: own netlink pid to avoid sending to yourself | ||
203 | * @group: multicast group id | ||
204 | * @flags: allocation flags | ||
205 | */ | ||
206 | static inline int genlmsg_multicast_netns(struct net *net, struct sk_buff *skb, | ||
207 | u32 pid, unsigned int group, gfp_t flags) | ||
208 | { | ||
209 | return nlmsg_multicast(net->genl_sock, skb, pid, group, flags); | ||
210 | } | ||
211 | |||
212 | /** | ||
213 | * genlmsg_multicast - multicast a netlink message to the default netns | ||
174 | * @skb: netlink message as socket buffer | 214 | * @skb: netlink message as socket buffer |
175 | * @pid: own netlink pid to avoid sending to yourself | 215 | * @pid: own netlink pid to avoid sending to yourself |
176 | * @group: multicast group id | 216 | * @group: multicast group id |
@@ -179,17 +219,29 @@ static inline void genlmsg_cancel(struct sk_buff *skb, void *hdr) | |||
179 | static inline int genlmsg_multicast(struct sk_buff *skb, u32 pid, | 219 | static inline int genlmsg_multicast(struct sk_buff *skb, u32 pid, |
180 | unsigned int group, gfp_t flags) | 220 | unsigned int group, gfp_t flags) |
181 | { | 221 | { |
182 | return nlmsg_multicast(genl_sock, skb, pid, group, flags); | 222 | return genlmsg_multicast_netns(&init_net, skb, pid, group, flags); |
183 | } | 223 | } |
184 | 224 | ||
185 | /** | 225 | /** |
226 | * genlmsg_multicast_allns - multicast a netlink message to all net namespaces | ||
227 | * @skb: netlink message as socket buffer | ||
228 | * @pid: own netlink pid to avoid sending to yourself | ||
229 | * @group: multicast group id | ||
230 | * @flags: allocation flags | ||
231 | * | ||
232 | * This function must hold the RTNL or rcu_read_lock(). | ||
233 | */ | ||
234 | int genlmsg_multicast_allns(struct sk_buff *skb, u32 pid, | ||
235 | unsigned int group, gfp_t flags); | ||
236 | |||
237 | /** | ||
186 | * genlmsg_unicast - unicast a netlink message | 238 | * genlmsg_unicast - unicast a netlink message |
187 | * @skb: netlink message as socket buffer | 239 | * @skb: netlink message as socket buffer |
188 | * @pid: netlink pid of the destination socket | 240 | * @pid: netlink pid of the destination socket |
189 | */ | 241 | */ |
190 | static inline int genlmsg_unicast(struct sk_buff *skb, u32 pid) | 242 | static inline int genlmsg_unicast(struct net *net, struct sk_buff *skb, u32 pid) |
191 | { | 243 | { |
192 | return nlmsg_unicast(genl_sock, skb, pid); | 244 | return nlmsg_unicast(net->genl_sock, skb, pid); |
193 | } | 245 | } |
194 | 246 | ||
195 | /** | 247 | /** |
@@ -199,7 +251,7 @@ static inline int genlmsg_unicast(struct sk_buff *skb, u32 pid) | |||
199 | */ | 251 | */ |
200 | static inline int genlmsg_reply(struct sk_buff *skb, struct genl_info *info) | 252 | static inline int genlmsg_reply(struct sk_buff *skb, struct genl_info *info) |
201 | { | 253 | { |
202 | return genlmsg_unicast(skb, info->snd_pid); | 254 | return genlmsg_unicast(genl_info_net(info), skb, info->snd_pid); |
203 | } | 255 | } |
204 | 256 | ||
205 | /** | 257 | /** |
diff --git a/include/net/ieee802154/mac_def.h b/include/net/ieee802154.h index 8cb684635650..d52685defb11 100644 --- a/include/net/ieee802154/mac_def.h +++ b/include/net/ieee802154.h | |||
@@ -23,8 +23,8 @@ | |||
23 | * Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> | 23 | * Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> |
24 | */ | 24 | */ |
25 | 25 | ||
26 | #ifndef IEEE802154_MAC_DEF_H | 26 | #ifndef NET_IEEE802154_H |
27 | #define IEEE802154_MAC_DEF_H | 27 | #define NET_IEEE802154_H |
28 | 28 | ||
29 | #define IEEE802154_FC_TYPE_BEACON 0x0 /* Frame is beacon */ | 29 | #define IEEE802154_FC_TYPE_BEACON 0x0 /* Frame is beacon */ |
30 | #define IEEE802154_FC_TYPE_DATA 0x1 /* Frame is data */ | 30 | #define IEEE802154_FC_TYPE_DATA 0x1 /* Frame is data */ |
diff --git a/include/net/ieee802154/nl802154.h b/include/net/ieee802154/nl802154.h deleted file mode 100644 index 78efcdf52b59..000000000000 --- a/include/net/ieee802154/nl802154.h +++ /dev/null | |||
@@ -1,41 +0,0 @@ | |||
1 | /* | ||
2 | * nl802154.h | ||
3 | * | ||
4 | * Copyright (C) 2007, 2008, 2009 Siemens AG | ||
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 | ||
8 | * as published by the Free Software Foundation. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License along | ||
16 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #ifndef IEEE802154_NL_H | ||
22 | #define IEEE802154_NL_H | ||
23 | |||
24 | struct net_device; | ||
25 | struct ieee802154_addr; | ||
26 | |||
27 | int ieee802154_nl_assoc_indic(struct net_device *dev, | ||
28 | struct ieee802154_addr *addr, u8 cap); | ||
29 | int ieee802154_nl_assoc_confirm(struct net_device *dev, | ||
30 | u16 short_addr, u8 status); | ||
31 | int ieee802154_nl_disassoc_indic(struct net_device *dev, | ||
32 | struct ieee802154_addr *addr, u8 reason); | ||
33 | int ieee802154_nl_disassoc_confirm(struct net_device *dev, | ||
34 | u8 status); | ||
35 | int ieee802154_nl_scan_confirm(struct net_device *dev, | ||
36 | u8 status, u8 scan_type, u32 unscanned, | ||
37 | u8 *edl/*, struct list_head *pan_desc_list */); | ||
38 | int ieee802154_nl_beacon_indic(struct net_device *dev, u16 panid, | ||
39 | u16 coord_addr); | ||
40 | |||
41 | #endif | ||
diff --git a/include/net/ieee802154/netdevice.h b/include/net/ieee802154_netdev.h index e2506af3e7c8..5dc6a61952de 100644 --- a/include/net/ieee802154/netdevice.h +++ b/include/net/ieee802154_netdev.h | |||
@@ -80,7 +80,7 @@ static inline int mac_cb_type(struct sk_buff *skb) | |||
80 | struct ieee802154_mlme_ops { | 80 | struct ieee802154_mlme_ops { |
81 | int (*assoc_req)(struct net_device *dev, | 81 | int (*assoc_req)(struct net_device *dev, |
82 | struct ieee802154_addr *addr, | 82 | struct ieee802154_addr *addr, |
83 | u8 channel, u8 cap); | 83 | u8 channel, u8 page, u8 cap); |
84 | int (*assoc_resp)(struct net_device *dev, | 84 | int (*assoc_resp)(struct net_device *dev, |
85 | struct ieee802154_addr *addr, | 85 | struct ieee802154_addr *addr, |
86 | u16 short_addr, u8 status); | 86 | u16 short_addr, u8 status); |
@@ -89,10 +89,10 @@ struct ieee802154_mlme_ops { | |||
89 | u8 reason); | 89 | u8 reason); |
90 | int (*start_req)(struct net_device *dev, | 90 | int (*start_req)(struct net_device *dev, |
91 | struct ieee802154_addr *addr, | 91 | struct ieee802154_addr *addr, |
92 | u8 channel, u8 bcn_ord, u8 sf_ord, | 92 | u8 channel, u8 page, u8 bcn_ord, u8 sf_ord, |
93 | u8 pan_coord, u8 blx, u8 coord_realign); | 93 | u8 pan_coord, u8 blx, u8 coord_realign); |
94 | int (*scan_req)(struct net_device *dev, | 94 | int (*scan_req)(struct net_device *dev, |
95 | u8 type, u32 channels, u8 duration); | 95 | u8 type, u32 channels, u8 page, u8 duration); |
96 | 96 | ||
97 | /* | 97 | /* |
98 | * FIXME: these should become the part of PIB/MIB interface. | 98 | * FIXME: these should become the part of PIB/MIB interface. |
diff --git a/include/net/ip6_fib.h b/include/net/ip6_fib.h index 7c5c0f79168a..15b492a9aa79 100644 --- a/include/net/ip6_fib.h +++ b/include/net/ip6_fib.h | |||
@@ -22,6 +22,12 @@ | |||
22 | #include <net/flow.h> | 22 | #include <net/flow.h> |
23 | #include <net/netlink.h> | 23 | #include <net/netlink.h> |
24 | 24 | ||
25 | #ifdef CONFIG_IPV6_MULTIPLE_TABLES | ||
26 | #define FIB6_TABLE_HASHSZ 256 | ||
27 | #else | ||
28 | #define FIB6_TABLE_HASHSZ 1 | ||
29 | #endif | ||
30 | |||
25 | struct rt6_info; | 31 | struct rt6_info; |
26 | 32 | ||
27 | struct fib6_config | 33 | struct fib6_config |
diff --git a/include/net/ip_vs.h b/include/net/ip_vs.h index bbae1e87efcd..98978e73f666 100644 --- a/include/net/ip_vs.h +++ b/include/net/ip_vs.h | |||
@@ -99,47 +99,47 @@ static inline const char *ip_vs_dbg_addr(int af, char *buf, size_t buf_len, | |||
99 | return &buf[*idx - len]; | 99 | return &buf[*idx - len]; |
100 | } | 100 | } |
101 | 101 | ||
102 | #define IP_VS_DBG_BUF(level, msg...) \ | 102 | #define IP_VS_DBG_BUF(level, msg, ...) \ |
103 | do { \ | 103 | do { \ |
104 | char ip_vs_dbg_buf[160]; \ | 104 | char ip_vs_dbg_buf[160]; \ |
105 | int ip_vs_dbg_idx = 0; \ | 105 | int ip_vs_dbg_idx = 0; \ |
106 | if (level <= ip_vs_get_debug_level()) \ | 106 | if (level <= ip_vs_get_debug_level()) \ |
107 | printk(KERN_DEBUG "IPVS: " msg); \ | 107 | printk(KERN_DEBUG pr_fmt(msg), ##__VA_ARGS__); \ |
108 | } while (0) | 108 | } while (0) |
109 | #define IP_VS_ERR_BUF(msg...) \ | 109 | #define IP_VS_ERR_BUF(msg...) \ |
110 | do { \ | 110 | do { \ |
111 | char ip_vs_dbg_buf[160]; \ | 111 | char ip_vs_dbg_buf[160]; \ |
112 | int ip_vs_dbg_idx = 0; \ | 112 | int ip_vs_dbg_idx = 0; \ |
113 | printk(KERN_ERR "IPVS: " msg); \ | 113 | pr_err(msg); \ |
114 | } while (0) | 114 | } while (0) |
115 | 115 | ||
116 | /* Only use from within IP_VS_DBG_BUF() or IP_VS_ERR_BUF macros */ | 116 | /* Only use from within IP_VS_DBG_BUF() or IP_VS_ERR_BUF macros */ |
117 | #define IP_VS_DBG_ADDR(af, addr) \ | 117 | #define IP_VS_DBG_ADDR(af, addr) \ |
118 | ip_vs_dbg_addr(af, ip_vs_dbg_buf, \ | 118 | ip_vs_dbg_addr(af, ip_vs_dbg_buf, \ |
119 | sizeof(ip_vs_dbg_buf), addr, \ | 119 | sizeof(ip_vs_dbg_buf), addr, \ |
120 | &ip_vs_dbg_idx) | 120 | &ip_vs_dbg_idx) |
121 | 121 | ||
122 | #define IP_VS_DBG(level, msg...) \ | 122 | #define IP_VS_DBG(level, msg, ...) \ |
123 | do { \ | 123 | do { \ |
124 | if (level <= ip_vs_get_debug_level()) \ | 124 | if (level <= ip_vs_get_debug_level()) \ |
125 | printk(KERN_DEBUG "IPVS: " msg); \ | 125 | printk(KERN_DEBUG pr_fmt(msg), ##__VA_ARGS__); \ |
126 | } while (0) | 126 | } while (0) |
127 | #define IP_VS_DBG_RL(msg...) \ | 127 | #define IP_VS_DBG_RL(msg, ...) \ |
128 | do { \ | 128 | do { \ |
129 | if (net_ratelimit()) \ | 129 | if (net_ratelimit()) \ |
130 | printk(KERN_DEBUG "IPVS: " msg); \ | 130 | printk(KERN_DEBUG pr_fmt(msg), ##__VA_ARGS__); \ |
131 | } while (0) | 131 | } while (0) |
132 | #define IP_VS_DBG_PKT(level, pp, skb, ofs, msg) \ | 132 | #define IP_VS_DBG_PKT(level, pp, skb, ofs, msg) \ |
133 | do { \ | 133 | do { \ |
134 | if (level <= ip_vs_get_debug_level()) \ | 134 | if (level <= ip_vs_get_debug_level()) \ |
135 | pp->debug_packet(pp, skb, ofs, msg); \ | 135 | pp->debug_packet(pp, skb, ofs, msg); \ |
136 | } while (0) | 136 | } while (0) |
137 | #define IP_VS_DBG_RL_PKT(level, pp, skb, ofs, msg) \ | 137 | #define IP_VS_DBG_RL_PKT(level, pp, skb, ofs, msg) \ |
138 | do { \ | 138 | do { \ |
139 | if (level <= ip_vs_get_debug_level() && \ | 139 | if (level <= ip_vs_get_debug_level() && \ |
140 | net_ratelimit()) \ | 140 | net_ratelimit()) \ |
141 | pp->debug_packet(pp, skb, ofs, msg); \ | 141 | pp->debug_packet(pp, skb, ofs, msg); \ |
142 | } while (0) | 142 | } while (0) |
143 | #else /* NO DEBUGGING at ALL */ | 143 | #else /* NO DEBUGGING at ALL */ |
144 | #define IP_VS_DBG_BUF(level, msg...) do {} while (0) | 144 | #define IP_VS_DBG_BUF(level, msg...) do {} while (0) |
145 | #define IP_VS_ERR_BUF(msg...) do {} while (0) | 145 | #define IP_VS_ERR_BUF(msg...) do {} while (0) |
@@ -150,29 +150,27 @@ static inline const char *ip_vs_dbg_addr(int af, char *buf, size_t buf_len, | |||
150 | #endif | 150 | #endif |
151 | 151 | ||
152 | #define IP_VS_BUG() BUG() | 152 | #define IP_VS_BUG() BUG() |
153 | #define IP_VS_ERR(msg...) printk(KERN_ERR "IPVS: " msg) | 153 | #define IP_VS_ERR_RL(msg, ...) \ |
154 | #define IP_VS_INFO(msg...) printk(KERN_INFO "IPVS: " msg) | 154 | do { \ |
155 | #define IP_VS_WARNING(msg...) \ | 155 | if (net_ratelimit()) \ |
156 | printk(KERN_WARNING "IPVS: " msg) | 156 | pr_err(msg, ##__VA_ARGS__); \ |
157 | #define IP_VS_ERR_RL(msg...) \ | 157 | } while (0) |
158 | do { \ | ||
159 | if (net_ratelimit()) \ | ||
160 | printk(KERN_ERR "IPVS: " msg); \ | ||
161 | } while (0) | ||
162 | 158 | ||
163 | #ifdef CONFIG_IP_VS_DEBUG | 159 | #ifdef CONFIG_IP_VS_DEBUG |
164 | #define EnterFunction(level) \ | 160 | #define EnterFunction(level) \ |
165 | do { \ | 161 | do { \ |
166 | if (level <= ip_vs_get_debug_level()) \ | 162 | if (level <= ip_vs_get_debug_level()) \ |
167 | printk(KERN_DEBUG "Enter: %s, %s line %i\n", \ | 163 | printk(KERN_DEBUG \ |
168 | __func__, __FILE__, __LINE__); \ | 164 | pr_fmt("Enter: %s, %s line %i\n"), \ |
169 | } while (0) | 165 | __func__, __FILE__, __LINE__); \ |
170 | #define LeaveFunction(level) \ | 166 | } while (0) |
171 | do { \ | 167 | #define LeaveFunction(level) \ |
172 | if (level <= ip_vs_get_debug_level()) \ | 168 | do { \ |
173 | printk(KERN_DEBUG "Leave: %s, %s line %i\n", \ | 169 | if (level <= ip_vs_get_debug_level()) \ |
174 | __func__, __FILE__, __LINE__); \ | 170 | printk(KERN_DEBUG \ |
175 | } while (0) | 171 | pr_fmt("Leave: %s, %s line %i\n"), \ |
172 | __func__, __FILE__, __LINE__); \ | ||
173 | } while (0) | ||
176 | #else | 174 | #else |
177 | #define EnterFunction(level) do {} while (0) | 175 | #define EnterFunction(level) do {} while (0) |
178 | #define LeaveFunction(level) do {} while (0) | 176 | #define LeaveFunction(level) do {} while (0) |
@@ -740,7 +738,8 @@ extern void ip_vs_protocol_cleanup(void); | |||
740 | extern void ip_vs_protocol_timeout_change(int flags); | 738 | extern void ip_vs_protocol_timeout_change(int flags); |
741 | extern int *ip_vs_create_timeout_table(int *table, int size); | 739 | extern int *ip_vs_create_timeout_table(int *table, int size); |
742 | extern int | 740 | extern int |
743 | ip_vs_set_state_timeout(int *table, int num, char **names, char *name, int to); | 741 | ip_vs_set_state_timeout(int *table, int num, const char *const *names, |
742 | const char *name, int to); | ||
744 | extern void | 743 | extern void |
745 | ip_vs_tcpudp_debug_packet(struct ip_vs_protocol *pp, const struct sk_buff *skb, | 744 | ip_vs_tcpudp_debug_packet(struct ip_vs_protocol *pp, const struct sk_buff *skb, |
746 | int offset, const char *msg); | 745 | int offset, const char *msg); |
diff --git a/include/net/ipv6.h b/include/net/ipv6.h index f27fd83d67d8..ad9a51130254 100644 --- a/include/net/ipv6.h +++ b/include/net/ipv6.h | |||
@@ -441,6 +441,18 @@ static inline int ipv6_addr_diff(const struct in6_addr *a1, const struct in6_add | |||
441 | return __ipv6_addr_diff(a1, a2, sizeof(struct in6_addr)); | 441 | return __ipv6_addr_diff(a1, a2, sizeof(struct in6_addr)); |
442 | } | 442 | } |
443 | 443 | ||
444 | static __inline__ void ipv6_select_ident(struct frag_hdr *fhdr) | ||
445 | { | ||
446 | static u32 ipv6_fragmentation_id = 1; | ||
447 | static DEFINE_SPINLOCK(ip6_id_lock); | ||
448 | |||
449 | spin_lock_bh(&ip6_id_lock); | ||
450 | fhdr->identification = htonl(ipv6_fragmentation_id); | ||
451 | if (++ipv6_fragmentation_id == 0) | ||
452 | ipv6_fragmentation_id = 1; | ||
453 | spin_unlock_bh(&ip6_id_lock); | ||
454 | } | ||
455 | |||
444 | /* | 456 | /* |
445 | * Prototypes exported by ipv6 | 457 | * Prototypes exported by ipv6 |
446 | */ | 458 | */ |
diff --git a/include/net/irda/ircomm_event.h b/include/net/irda/ircomm_event.h index c290447872d1..bc0c6f31f1c6 100644 --- a/include/net/irda/ircomm_event.h +++ b/include/net/irda/ircomm_event.h | |||
@@ -74,7 +74,7 @@ struct ircomm_info { | |||
74 | struct qos_info *qos; | 74 | struct qos_info *qos; |
75 | }; | 75 | }; |
76 | 76 | ||
77 | extern char *ircomm_state[]; | 77 | extern const char *const ircomm_state[]; |
78 | 78 | ||
79 | struct ircomm_cb; /* Forward decl. */ | 79 | struct ircomm_cb; /* Forward decl. */ |
80 | 80 | ||
diff --git a/include/net/irda/ircomm_tty_attach.h b/include/net/irda/ircomm_tty_attach.h index f91a5695aa44..0a63bbb972d7 100644 --- a/include/net/irda/ircomm_tty_attach.h +++ b/include/net/irda/ircomm_tty_attach.h | |||
@@ -66,8 +66,8 @@ struct ircomm_tty_info { | |||
66 | __u8 dlsap_sel; | 66 | __u8 dlsap_sel; |
67 | }; | 67 | }; |
68 | 68 | ||
69 | extern char *ircomm_state[]; | 69 | extern const char *const ircomm_state[]; |
70 | extern char *ircomm_tty_state[]; | 70 | extern const char *const ircomm_tty_state[]; |
71 | 71 | ||
72 | int ircomm_tty_do_event(struct ircomm_tty_cb *self, IRCOMM_TTY_EVENT event, | 72 | int ircomm_tty_do_event(struct ircomm_tty_cb *self, IRCOMM_TTY_EVENT event, |
73 | struct sk_buff *skb, struct ircomm_tty_info *info); | 73 | struct sk_buff *skb, struct ircomm_tty_info *info); |
diff --git a/include/net/irda/irlap_event.h b/include/net/irda/irlap_event.h index 2ae2e119ef4b..4c90824c50fb 100644 --- a/include/net/irda/irlap_event.h +++ b/include/net/irda/irlap_event.h | |||
@@ -120,7 +120,7 @@ typedef enum { /* FIXME check the two first reason codes */ | |||
120 | LAP_PRIMARY_CONFLICT, | 120 | LAP_PRIMARY_CONFLICT, |
121 | } LAP_REASON; | 121 | } LAP_REASON; |
122 | 122 | ||
123 | extern const char *irlap_state[]; | 123 | extern const char *const irlap_state[]; |
124 | 124 | ||
125 | void irlap_do_event(struct irlap_cb *self, IRLAP_EVENT event, | 125 | void irlap_do_event(struct irlap_cb *self, IRLAP_EVENT event, |
126 | struct sk_buff *skb, struct irlap_info *info); | 126 | struct sk_buff *skb, struct irlap_info *info); |
diff --git a/include/net/irda/irlmp_event.h b/include/net/irda/irlmp_event.h index e03ae4ae3963..9e4ec17a7449 100644 --- a/include/net/irda/irlmp_event.h +++ b/include/net/irda/irlmp_event.h | |||
@@ -79,8 +79,8 @@ typedef enum { | |||
79 | LM_LAP_IDLE_TIMEOUT, | 79 | LM_LAP_IDLE_TIMEOUT, |
80 | } IRLMP_EVENT; | 80 | } IRLMP_EVENT; |
81 | 81 | ||
82 | extern const char *irlmp_state[]; | 82 | extern const char *const irlmp_state[]; |
83 | extern const char *irlsap_state[]; | 83 | extern const char *const irlsap_state[]; |
84 | 84 | ||
85 | void irlmp_watchdog_timer_expired(void *data); | 85 | void irlmp_watchdog_timer_expired(void *data); |
86 | void irlmp_discovery_timer_expired(void *data); | 86 | void irlmp_discovery_timer_expired(void *data); |
diff --git a/include/net/iw_handler.h b/include/net/iw_handler.h index 51b9a37de991..e9054a283fde 100644 --- a/include/net/iw_handler.h +++ b/include/net/iw_handler.h | |||
@@ -416,13 +416,13 @@ struct iw_spy_data | |||
416 | * data (i.e. valid as long as struct net_device exist, same locking rules). | 416 | * data (i.e. valid as long as struct net_device exist, same locking rules). |
417 | */ | 417 | */ |
418 | /* Forward declaration */ | 418 | /* Forward declaration */ |
419 | struct ieee80211_device; | 419 | struct libipw_device; |
420 | /* The struct */ | 420 | /* The struct */ |
421 | struct iw_public_data { | 421 | struct iw_public_data { |
422 | /* Driver enhanced spy support */ | 422 | /* Driver enhanced spy support */ |
423 | struct iw_spy_data * spy_data; | 423 | struct iw_spy_data * spy_data; |
424 | /* Structure managed by the in-kernel IEEE 802.11 layer */ | 424 | /* Legacy structure managed by the ipw2x00-specific IEEE 802.11 layer */ |
425 | struct ieee80211_device * ieee80211; | 425 | struct libipw_device * libipw; |
426 | }; | 426 | }; |
427 | 427 | ||
428 | /**************************** PROTOTYPES ****************************/ | 428 | /**************************** PROTOTYPES ****************************/ |
@@ -443,7 +443,7 @@ extern int dev_get_wireless_info(char * buffer, char **start, off_t offset, | |||
443 | extern void wireless_send_event(struct net_device * dev, | 443 | extern void wireless_send_event(struct net_device * dev, |
444 | unsigned int cmd, | 444 | unsigned int cmd, |
445 | union iwreq_data * wrqu, | 445 | union iwreq_data * wrqu, |
446 | char * extra); | 446 | const char * extra); |
447 | 447 | ||
448 | /* We may need a function to send a stream of events to user space. | 448 | /* We may need a function to send a stream of events to user space. |
449 | * More on that later... */ | 449 | * More on that later... */ |
diff --git a/include/net/mac80211.h b/include/net/mac80211.h index c06104476973..466859b285e1 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h | |||
@@ -73,6 +73,21 @@ | |||
73 | */ | 73 | */ |
74 | 74 | ||
75 | /** | 75 | /** |
76 | * DOC: mac80211 workqueue | ||
77 | * | ||
78 | * mac80211 provides its own workqueue for drivers and internal mac80211 use. | ||
79 | * The workqueue is a single threaded workqueue and can only be accessed by | ||
80 | * helpers for sanity checking. Drivers must ensure all work added onto the | ||
81 | * mac80211 workqueue should be cancelled on the driver stop() callback. | ||
82 | * | ||
83 | * mac80211 will flushed the workqueue upon interface removal and during | ||
84 | * suspend. | ||
85 | * | ||
86 | * All work performed on the mac80211 workqueue must not acquire the RTNL lock. | ||
87 | * | ||
88 | */ | ||
89 | |||
90 | /** | ||
76 | * enum ieee80211_max_queues - maximum number of queues | 91 | * enum ieee80211_max_queues - maximum number of queues |
77 | * | 92 | * |
78 | * @IEEE80211_MAX_QUEUES: Maximum number of regular device queues. | 93 | * @IEEE80211_MAX_QUEUES: Maximum number of regular device queues. |
@@ -224,7 +239,14 @@ struct ieee80211_bss_conf { | |||
224 | * @IEEE80211_TX_CTL_AMPDU: this frame should be sent as part of an A-MPDU | 239 | * @IEEE80211_TX_CTL_AMPDU: this frame should be sent as part of an A-MPDU |
225 | * @IEEE80211_TX_CTL_INJECTED: Frame was injected, internal to mac80211. | 240 | * @IEEE80211_TX_CTL_INJECTED: Frame was injected, internal to mac80211. |
226 | * @IEEE80211_TX_STAT_TX_FILTERED: The frame was not transmitted | 241 | * @IEEE80211_TX_STAT_TX_FILTERED: The frame was not transmitted |
227 | * because the destination STA was in powersave mode. | 242 | * because the destination STA was in powersave mode. Note that to |
243 | * avoid race conditions, the filter must be set by the hardware or | ||
244 | * firmware upon receiving a frame that indicates that the station | ||
245 | * went to sleep (must be done on device to filter frames already on | ||
246 | * the queue) and may only be unset after mac80211 gives the OK for | ||
247 | * that by setting the IEEE80211_TX_CTL_CLEAR_PS_FILT (see above), | ||
248 | * since only then is it guaranteed that no more frames are in the | ||
249 | * hardware queue. | ||
228 | * @IEEE80211_TX_STAT_ACK: Frame was acknowledged | 250 | * @IEEE80211_TX_STAT_ACK: Frame was acknowledged |
229 | * @IEEE80211_TX_STAT_AMPDU: The frame was aggregated, so status | 251 | * @IEEE80211_TX_STAT_AMPDU: The frame was aggregated, so status |
230 | * is for the whole aggregation. | 252 | * is for the whole aggregation. |
@@ -241,6 +263,15 @@ struct ieee80211_bss_conf { | |||
241 | * it can be sent out. | 263 | * it can be sent out. |
242 | * @IEEE80211_TX_INTFL_RETRIED: completely internal to mac80211, | 264 | * @IEEE80211_TX_INTFL_RETRIED: completely internal to mac80211, |
243 | * used to indicate that a frame was already retried due to PS | 265 | * used to indicate that a frame was already retried due to PS |
266 | * @IEEE80211_TX_INTFL_DONT_ENCRYPT: completely internal to mac80211, | ||
267 | * used to indicate frame should not be encrypted | ||
268 | * @IEEE80211_TX_CTL_PSPOLL_RESPONSE: (internal?) | ||
269 | * This frame is a response to a PS-poll frame and should be sent | ||
270 | * although the station is in powersave mode. | ||
271 | * @IEEE80211_TX_CTL_MORE_FRAMES: More frames will be passed to the | ||
272 | * transmit function after the current frame, this can be used | ||
273 | * by drivers to kick the DMA queue only if unset or when the | ||
274 | * queue gets full. | ||
244 | */ | 275 | */ |
245 | enum mac80211_tx_control_flags { | 276 | enum mac80211_tx_control_flags { |
246 | IEEE80211_TX_CTL_REQ_TX_STATUS = BIT(0), | 277 | IEEE80211_TX_CTL_REQ_TX_STATUS = BIT(0), |
@@ -259,6 +290,9 @@ enum mac80211_tx_control_flags { | |||
259 | IEEE80211_TX_INTFL_RCALGO = BIT(13), | 290 | IEEE80211_TX_INTFL_RCALGO = BIT(13), |
260 | IEEE80211_TX_INTFL_NEED_TXPROCESSING = BIT(14), | 291 | IEEE80211_TX_INTFL_NEED_TXPROCESSING = BIT(14), |
261 | IEEE80211_TX_INTFL_RETRIED = BIT(15), | 292 | IEEE80211_TX_INTFL_RETRIED = BIT(15), |
293 | IEEE80211_TX_INTFL_DONT_ENCRYPT = BIT(16), | ||
294 | IEEE80211_TX_CTL_PSPOLL_RESPONSE = BIT(17), | ||
295 | IEEE80211_TX_CTL_MORE_FRAMES = BIT(18), | ||
262 | }; | 296 | }; |
263 | 297 | ||
264 | /** | 298 | /** |
@@ -316,6 +350,21 @@ enum mac80211_rate_control_flags { | |||
316 | * | 350 | * |
317 | * When used for transmit status reporting, the driver should | 351 | * When used for transmit status reporting, the driver should |
318 | * always report the rate along with the flags it used. | 352 | * always report the rate along with the flags it used. |
353 | * | ||
354 | * &struct ieee80211_tx_info contains an array of these structs | ||
355 | * in the control information, and it will be filled by the rate | ||
356 | * control algorithm according to what should be sent. For example, | ||
357 | * if this array contains, in the format { <idx>, <count> } the | ||
358 | * information | ||
359 | * { 3, 2 }, { 2, 2 }, { 1, 4 }, { -1, 0 }, { -1, 0 } | ||
360 | * then this means that the frame should be transmitted | ||
361 | * up to twice at rate 3, up to twice at rate 2, and up to four | ||
362 | * times at rate 1 if it doesn't get acknowledged. Say it gets | ||
363 | * acknowledged by the peer after the fifth attempt, the status | ||
364 | * information should then contain | ||
365 | * { 3, 2 }, { 2, 2 }, { 1, 1 }, { -1, 0 } ... | ||
366 | * since it was transmitted twice at rate 3, twice at rate 2 | ||
367 | * and once at rate 1 after which we received an acknowledgement. | ||
319 | */ | 368 | */ |
320 | struct ieee80211_tx_rate { | 369 | struct ieee80211_tx_rate { |
321 | s8 idx; | 370 | s8 idx; |
@@ -397,6 +446,11 @@ static inline struct ieee80211_tx_info *IEEE80211_SKB_CB(struct sk_buff *skb) | |||
397 | return (struct ieee80211_tx_info *)skb->cb; | 446 | return (struct ieee80211_tx_info *)skb->cb; |
398 | } | 447 | } |
399 | 448 | ||
449 | static inline struct ieee80211_rx_status *IEEE80211_SKB_RXCB(struct sk_buff *skb) | ||
450 | { | ||
451 | return (struct ieee80211_rx_status *)skb->cb; | ||
452 | } | ||
453 | |||
400 | /** | 454 | /** |
401 | * ieee80211_tx_info_clear_status - clear TX status | 455 | * ieee80211_tx_info_clear_status - clear TX status |
402 | * | 456 | * |
@@ -478,7 +532,7 @@ enum mac80211_rx_flags { | |||
478 | * | 532 | * |
479 | * The low-level driver should provide this information (the subset | 533 | * The low-level driver should provide this information (the subset |
480 | * supported by hardware) to the 802.11 code with each received | 534 | * supported by hardware) to the 802.11 code with each received |
481 | * frame. | 535 | * frame, in the skb's control buffer (cb). |
482 | * | 536 | * |
483 | * @mactime: value in microseconds of the 64-bit Time Synchronization Function | 537 | * @mactime: value in microseconds of the 64-bit Time Synchronization Function |
484 | * (TSF) timer when the first data symbol (MPDU) arrived at the hardware. | 538 | * (TSF) timer when the first data symbol (MPDU) arrived at the hardware. |
@@ -529,7 +583,6 @@ enum ieee80211_conf_flags { | |||
529 | /** | 583 | /** |
530 | * enum ieee80211_conf_changed - denotes which configuration changed | 584 | * enum ieee80211_conf_changed - denotes which configuration changed |
531 | * | 585 | * |
532 | * @_IEEE80211_CONF_CHANGE_RADIO_ENABLED: DEPRECATED | ||
533 | * @IEEE80211_CONF_CHANGE_LISTEN_INTERVAL: the listen interval changed | 586 | * @IEEE80211_CONF_CHANGE_LISTEN_INTERVAL: the listen interval changed |
534 | * @IEEE80211_CONF_CHANGE_RADIOTAP: the radiotap flag changed | 587 | * @IEEE80211_CONF_CHANGE_RADIOTAP: the radiotap flag changed |
535 | * @IEEE80211_CONF_CHANGE_PS: the PS flag or dynamic PS timeout changed | 588 | * @IEEE80211_CONF_CHANGE_PS: the PS flag or dynamic PS timeout changed |
@@ -539,7 +592,6 @@ enum ieee80211_conf_flags { | |||
539 | * @IEEE80211_CONF_CHANGE_IDLE: Idle flag changed | 592 | * @IEEE80211_CONF_CHANGE_IDLE: Idle flag changed |
540 | */ | 593 | */ |
541 | enum ieee80211_conf_changed { | 594 | enum ieee80211_conf_changed { |
542 | _IEEE80211_CONF_CHANGE_RADIO_ENABLED = BIT(0), | ||
543 | IEEE80211_CONF_CHANGE_LISTEN_INTERVAL = BIT(2), | 595 | IEEE80211_CONF_CHANGE_LISTEN_INTERVAL = BIT(2), |
544 | IEEE80211_CONF_CHANGE_RADIOTAP = BIT(3), | 596 | IEEE80211_CONF_CHANGE_RADIOTAP = BIT(3), |
545 | IEEE80211_CONF_CHANGE_PS = BIT(4), | 597 | IEEE80211_CONF_CHANGE_PS = BIT(4), |
@@ -549,14 +601,6 @@ enum ieee80211_conf_changed { | |||
549 | IEEE80211_CONF_CHANGE_IDLE = BIT(8), | 601 | IEEE80211_CONF_CHANGE_IDLE = BIT(8), |
550 | }; | 602 | }; |
551 | 603 | ||
552 | static inline __deprecated enum ieee80211_conf_changed | ||
553 | __IEEE80211_CONF_CHANGE_RADIO_ENABLED(void) | ||
554 | { | ||
555 | return _IEEE80211_CONF_CHANGE_RADIO_ENABLED; | ||
556 | } | ||
557 | #define IEEE80211_CONF_CHANGE_RADIO_ENABLED \ | ||
558 | __IEEE80211_CONF_CHANGE_RADIO_ENABLED() | ||
559 | |||
560 | /** | 604 | /** |
561 | * struct ieee80211_conf - configuration of the device | 605 | * struct ieee80211_conf - configuration of the device |
562 | * | 606 | * |
@@ -564,9 +608,6 @@ __IEEE80211_CONF_CHANGE_RADIO_ENABLED(void) | |||
564 | * | 608 | * |
565 | * @flags: configuration flags defined above | 609 | * @flags: configuration flags defined above |
566 | * | 610 | * |
567 | * @radio_enabled: when zero, driver is required to switch off the radio. | ||
568 | * @beacon_int: DEPRECATED, DO NOT USE | ||
569 | * | ||
570 | * @listen_interval: listen interval in units of beacon interval | 611 | * @listen_interval: listen interval in units of beacon interval |
571 | * @max_sleep_period: the maximum number of beacon intervals to sleep for | 612 | * @max_sleep_period: the maximum number of beacon intervals to sleep for |
572 | * before checking the beacon for a TIM bit (managed mode only); this | 613 | * before checking the beacon for a TIM bit (managed mode only); this |
@@ -590,13 +631,11 @@ __IEEE80211_CONF_CHANGE_RADIO_ENABLED(void) | |||
590 | * number of transmissions not the number of retries | 631 | * number of transmissions not the number of retries |
591 | */ | 632 | */ |
592 | struct ieee80211_conf { | 633 | struct ieee80211_conf { |
593 | int __deprecated beacon_int; | ||
594 | u32 flags; | 634 | u32 flags; |
595 | int power_level, dynamic_ps_timeout; | 635 | int power_level, dynamic_ps_timeout; |
596 | int max_sleep_period; | 636 | int max_sleep_period; |
597 | 637 | ||
598 | u16 listen_interval; | 638 | u16 listen_interval; |
599 | bool __deprecated radio_enabled; | ||
600 | 639 | ||
601 | u8 long_frame_max_tx_count, short_frame_max_tx_count; | 640 | u8 long_frame_max_tx_count, short_frame_max_tx_count; |
602 | 641 | ||
@@ -901,12 +940,6 @@ enum ieee80211_hw_flags { | |||
901 | * | 940 | * |
902 | * @conf: &struct ieee80211_conf, device configuration, don't use. | 941 | * @conf: &struct ieee80211_conf, device configuration, don't use. |
903 | * | 942 | * |
904 | * @workqueue: single threaded workqueue available for driver use, | ||
905 | * allocated by mac80211 on registration and flushed when an | ||
906 | * interface is removed. | ||
907 | * NOTICE: All work performed on this workqueue must not | ||
908 | * acquire the RTNL lock. | ||
909 | * | ||
910 | * @priv: pointer to private area that was allocated for driver use | 943 | * @priv: pointer to private area that was allocated for driver use |
911 | * along with this structure. | 944 | * along with this structure. |
912 | * | 945 | * |
@@ -942,7 +975,6 @@ enum ieee80211_hw_flags { | |||
942 | struct ieee80211_hw { | 975 | struct ieee80211_hw { |
943 | struct ieee80211_conf conf; | 976 | struct ieee80211_conf conf; |
944 | struct wiphy *wiphy; | 977 | struct wiphy *wiphy; |
945 | struct workqueue_struct *workqueue; | ||
946 | const char *rate_control_algorithm; | 978 | const char *rate_control_algorithm; |
947 | void *priv; | 979 | void *priv; |
948 | u32 flags; | 980 | u32 flags; |
@@ -1172,10 +1204,13 @@ ieee80211_get_alt_retry_rate(const struct ieee80211_hw *hw, | |||
1172 | * the driver's configure_filter() function which frames should be | 1204 | * the driver's configure_filter() function which frames should be |
1173 | * passed to mac80211 and which should be filtered out. | 1205 | * passed to mac80211 and which should be filtered out. |
1174 | * | 1206 | * |
1175 | * The configure_filter() callback is invoked with the parameters | 1207 | * Before configure_filter() is invoked, the prepare_multicast() |
1176 | * @mc_count and @mc_list for the combined multicast address list | 1208 | * callback is invoked with the parameters @mc_count and @mc_list |
1177 | * of all virtual interfaces, @changed_flags telling which flags | 1209 | * for the combined multicast address list of all virtual interfaces. |
1178 | * were changed and @total_flags with the new flag states. | 1210 | * It's use is optional, and it returns a u64 that is passed to |
1211 | * configure_filter(). Additionally, configure_filter() has the | ||
1212 | * arguments @changed_flags telling which flags were changed and | ||
1213 | * @total_flags with the new flag states. | ||
1179 | * | 1214 | * |
1180 | * If your device has no multicast address filters your driver will | 1215 | * If your device has no multicast address filters your driver will |
1181 | * need to check both the %FIF_ALLMULTI flag and the @mc_count | 1216 | * need to check both the %FIF_ALLMULTI flag and the @mc_count |
@@ -1224,10 +1259,13 @@ ieee80211_get_alt_retry_rate(const struct ieee80211_hw *hw, | |||
1224 | * mac80211 needs to do and the amount of CPU wakeups, so you should | 1259 | * mac80211 needs to do and the amount of CPU wakeups, so you should |
1225 | * honour this flag if possible. | 1260 | * honour this flag if possible. |
1226 | * | 1261 | * |
1227 | * @FIF_CONTROL: pass control frames, if PROMISC_IN_BSS is not set then | 1262 | * @FIF_CONTROL: pass control frames (except for PS Poll), if PROMISC_IN_BSS |
1228 | * only those addressed to this station | 1263 | * is not set then only those addressed to this station. |
1229 | * | 1264 | * |
1230 | * @FIF_OTHER_BSS: pass frames destined to other BSSes | 1265 | * @FIF_OTHER_BSS: pass frames destined to other BSSes |
1266 | * | ||
1267 | * @FIF_PSPOLL: pass PS Poll frames, if PROMISC_IN_BSS is not set then only | ||
1268 | * those addressed to this station. | ||
1231 | */ | 1269 | */ |
1232 | enum ieee80211_filter_flags { | 1270 | enum ieee80211_filter_flags { |
1233 | FIF_PROMISC_IN_BSS = 1<<0, | 1271 | FIF_PROMISC_IN_BSS = 1<<0, |
@@ -1237,6 +1275,7 @@ enum ieee80211_filter_flags { | |||
1237 | FIF_BCN_PRBRESP_PROMISC = 1<<4, | 1275 | FIF_BCN_PRBRESP_PROMISC = 1<<4, |
1238 | FIF_CONTROL = 1<<5, | 1276 | FIF_CONTROL = 1<<5, |
1239 | FIF_OTHER_BSS = 1<<6, | 1277 | FIF_OTHER_BSS = 1<<6, |
1278 | FIF_PSPOLL = 1<<7, | ||
1240 | }; | 1279 | }; |
1241 | 1280 | ||
1242 | /** | 1281 | /** |
@@ -1289,7 +1328,8 @@ enum ieee80211_ampdu_mlme_action { | |||
1289 | * is disabled. This should turn off the hardware (at least | 1328 | * is disabled. This should turn off the hardware (at least |
1290 | * it must turn off frame reception.) | 1329 | * it must turn off frame reception.) |
1291 | * May be called right after add_interface if that rejects | 1330 | * May be called right after add_interface if that rejects |
1292 | * an interface. | 1331 | * an interface. If you added any work onto the mac80211 workqueue |
1332 | * you should ensure to cancel it on this callback. | ||
1293 | * Must be implemented. | 1333 | * Must be implemented. |
1294 | * | 1334 | * |
1295 | * @add_interface: Called when a netdevice attached to the hardware is | 1335 | * @add_interface: Called when a netdevice attached to the hardware is |
@@ -1323,9 +1363,13 @@ enum ieee80211_ampdu_mlme_action { | |||
1323 | * for association indication. The @changed parameter indicates which | 1363 | * for association indication. The @changed parameter indicates which |
1324 | * of the bss parameters has changed when a call is made. | 1364 | * of the bss parameters has changed when a call is made. |
1325 | * | 1365 | * |
1366 | * @prepare_multicast: Prepare for multicast filter configuration. | ||
1367 | * This callback is optional, and its return value is passed | ||
1368 | * to configure_filter(). This callback must be atomic. | ||
1369 | * | ||
1326 | * @configure_filter: Configure the device's RX filter. | 1370 | * @configure_filter: Configure the device's RX filter. |
1327 | * See the section "Frame filtering" for more information. | 1371 | * See the section "Frame filtering" for more information. |
1328 | * This callback must be implemented and atomic. | 1372 | * This callback must be implemented. |
1329 | * | 1373 | * |
1330 | * @set_tim: Set TIM bit. mac80211 calls this function when a TIM bit | 1374 | * @set_tim: Set TIM bit. mac80211 calls this function when a TIM bit |
1331 | * must be set or cleared for a given STA. Must be atomic. | 1375 | * must be set or cleared for a given STA. Must be atomic. |
@@ -1411,6 +1455,8 @@ enum ieee80211_ampdu_mlme_action { | |||
1411 | * @rfkill_poll: Poll rfkill hardware state. If you need this, you also | 1455 | * @rfkill_poll: Poll rfkill hardware state. If you need this, you also |
1412 | * need to set wiphy->rfkill_poll to %true before registration, | 1456 | * need to set wiphy->rfkill_poll to %true before registration, |
1413 | * and need to call wiphy_rfkill_set_hw_state() in the callback. | 1457 | * and need to call wiphy_rfkill_set_hw_state() in the callback. |
1458 | * | ||
1459 | * @testmode_cmd: Implement a cfg80211 test mode command. | ||
1414 | */ | 1460 | */ |
1415 | struct ieee80211_ops { | 1461 | struct ieee80211_ops { |
1416 | int (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb); | 1462 | int (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb); |
@@ -1425,10 +1471,12 @@ struct ieee80211_ops { | |||
1425 | struct ieee80211_vif *vif, | 1471 | struct ieee80211_vif *vif, |
1426 | struct ieee80211_bss_conf *info, | 1472 | struct ieee80211_bss_conf *info, |
1427 | u32 changed); | 1473 | u32 changed); |
1474 | u64 (*prepare_multicast)(struct ieee80211_hw *hw, | ||
1475 | int mc_count, struct dev_addr_list *mc_list); | ||
1428 | void (*configure_filter)(struct ieee80211_hw *hw, | 1476 | void (*configure_filter)(struct ieee80211_hw *hw, |
1429 | unsigned int changed_flags, | 1477 | unsigned int changed_flags, |
1430 | unsigned int *total_flags, | 1478 | unsigned int *total_flags, |
1431 | int mc_count, struct dev_addr_list *mc_list); | 1479 | u64 multicast); |
1432 | int (*set_tim)(struct ieee80211_hw *hw, struct ieee80211_sta *sta, | 1480 | int (*set_tim)(struct ieee80211_hw *hw, struct ieee80211_sta *sta, |
1433 | bool set); | 1481 | bool set); |
1434 | int (*set_key)(struct ieee80211_hw *hw, enum set_key_cmd cmd, | 1482 | int (*set_key)(struct ieee80211_hw *hw, enum set_key_cmd cmd, |
@@ -1461,6 +1509,9 @@ struct ieee80211_ops { | |||
1461 | struct ieee80211_sta *sta, u16 tid, u16 *ssn); | 1509 | struct ieee80211_sta *sta, u16 tid, u16 *ssn); |
1462 | 1510 | ||
1463 | void (*rfkill_poll)(struct ieee80211_hw *hw); | 1511 | void (*rfkill_poll)(struct ieee80211_hw *hw); |
1512 | #ifdef CONFIG_NL80211_TESTMODE | ||
1513 | int (*testmode_cmd)(struct ieee80211_hw *hw, void *data, int len); | ||
1514 | #endif | ||
1464 | }; | 1515 | }; |
1465 | 1516 | ||
1466 | /** | 1517 | /** |
@@ -1606,10 +1657,6 @@ void ieee80211_free_hw(struct ieee80211_hw *hw); | |||
1606 | */ | 1657 | */ |
1607 | void ieee80211_restart_hw(struct ieee80211_hw *hw); | 1658 | void ieee80211_restart_hw(struct ieee80211_hw *hw); |
1608 | 1659 | ||
1609 | /* trick to avoid symbol clashes with the ieee80211 subsystem */ | ||
1610 | void __ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb, | ||
1611 | struct ieee80211_rx_status *status); | ||
1612 | |||
1613 | /** | 1660 | /** |
1614 | * ieee80211_rx - receive frame | 1661 | * ieee80211_rx - receive frame |
1615 | * | 1662 | * |
@@ -1624,14 +1671,8 @@ void __ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb, | |||
1624 | * | 1671 | * |
1625 | * @hw: the hardware this frame came in on | 1672 | * @hw: the hardware this frame came in on |
1626 | * @skb: the buffer to receive, owned by mac80211 after this call | 1673 | * @skb: the buffer to receive, owned by mac80211 after this call |
1627 | * @status: status of this frame; the status pointer need not be valid | ||
1628 | * after this function returns | ||
1629 | */ | 1674 | */ |
1630 | static inline void ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb, | 1675 | void ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb); |
1631 | struct ieee80211_rx_status *status) | ||
1632 | { | ||
1633 | __ieee80211_rx(hw, skb, status); | ||
1634 | } | ||
1635 | 1676 | ||
1636 | /** | 1677 | /** |
1637 | * ieee80211_rx_irqsafe - receive frame | 1678 | * ieee80211_rx_irqsafe - receive frame |
@@ -1644,13 +1685,8 @@ static inline void ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb, | |||
1644 | * | 1685 | * |
1645 | * @hw: the hardware this frame came in on | 1686 | * @hw: the hardware this frame came in on |
1646 | * @skb: the buffer to receive, owned by mac80211 after this call | 1687 | * @skb: the buffer to receive, owned by mac80211 after this call |
1647 | * @status: status of this frame; the status pointer need not be valid | ||
1648 | * after this function returns and is not freed by mac80211, | ||
1649 | * it is recommended that it points to a stack area | ||
1650 | */ | 1688 | */ |
1651 | void ieee80211_rx_irqsafe(struct ieee80211_hw *hw, | 1689 | void ieee80211_rx_irqsafe(struct ieee80211_hw *hw, struct sk_buff *skb); |
1652 | struct sk_buff *skb, | ||
1653 | struct ieee80211_rx_status *status); | ||
1654 | 1690 | ||
1655 | /** | 1691 | /** |
1656 | * ieee80211_tx_status - transmit status callback | 1692 | * ieee80211_tx_status - transmit status callback |
@@ -1917,6 +1953,31 @@ void ieee80211_iterate_active_interfaces_atomic(struct ieee80211_hw *hw, | |||
1917 | void *data); | 1953 | void *data); |
1918 | 1954 | ||
1919 | /** | 1955 | /** |
1956 | * ieee80211_queue_work - add work onto the mac80211 workqueue | ||
1957 | * | ||
1958 | * Drivers and mac80211 use this to add work onto the mac80211 workqueue. | ||
1959 | * This helper ensures drivers are not queueing work when they should not be. | ||
1960 | * | ||
1961 | * @hw: the hardware struct for the interface we are adding work for | ||
1962 | * @work: the work we want to add onto the mac80211 workqueue | ||
1963 | */ | ||
1964 | void ieee80211_queue_work(struct ieee80211_hw *hw, struct work_struct *work); | ||
1965 | |||
1966 | /** | ||
1967 | * ieee80211_queue_delayed_work - add work onto the mac80211 workqueue | ||
1968 | * | ||
1969 | * Drivers and mac80211 use this to queue delayed work onto the mac80211 | ||
1970 | * workqueue. | ||
1971 | * | ||
1972 | * @hw: the hardware struct for the interface we are adding work for | ||
1973 | * @dwork: delayable work to queue onto the mac80211 workqueue | ||
1974 | * @delay: number of jiffies to wait before queueing | ||
1975 | */ | ||
1976 | void ieee80211_queue_delayed_work(struct ieee80211_hw *hw, | ||
1977 | struct delayed_work *dwork, | ||
1978 | unsigned long delay); | ||
1979 | |||
1980 | /** | ||
1920 | * ieee80211_start_tx_ba_session - Start a tx Block Ack session. | 1981 | * ieee80211_start_tx_ba_session - Start a tx Block Ack session. |
1921 | * @hw: pointer as obtained from ieee80211_alloc_hw(). | 1982 | * @hw: pointer as obtained from ieee80211_alloc_hw(). |
1922 | * @ra: receiver address of the BA session recipient | 1983 | * @ra: receiver address of the BA session recipient |
@@ -2090,6 +2151,29 @@ static inline int rate_supported(struct ieee80211_sta *sta, | |||
2090 | return (sta == NULL || sta->supp_rates[band] & BIT(index)); | 2151 | return (sta == NULL || sta->supp_rates[band] & BIT(index)); |
2091 | } | 2152 | } |
2092 | 2153 | ||
2154 | /** | ||
2155 | * rate_control_send_low - helper for drivers for management/no-ack frames | ||
2156 | * | ||
2157 | * Rate control algorithms that agree to use the lowest rate to | ||
2158 | * send management frames and NO_ACK data with the respective hw | ||
2159 | * retries should use this in the beginning of their mac80211 get_rate | ||
2160 | * callback. If true is returned the rate control can simply return. | ||
2161 | * If false is returned we guarantee that sta and sta and priv_sta is | ||
2162 | * not null. | ||
2163 | * | ||
2164 | * Rate control algorithms wishing to do more intelligent selection of | ||
2165 | * rate for multicast/broadcast frames may choose to not use this. | ||
2166 | * | ||
2167 | * @sta: &struct ieee80211_sta pointer to the target destination. Note | ||
2168 | * that this may be null. | ||
2169 | * @priv_sta: private rate control structure. This may be null. | ||
2170 | * @txrc: rate control information we sholud populate for mac80211. | ||
2171 | */ | ||
2172 | bool rate_control_send_low(struct ieee80211_sta *sta, | ||
2173 | void *priv_sta, | ||
2174 | struct ieee80211_tx_rate_control *txrc); | ||
2175 | |||
2176 | |||
2093 | static inline s8 | 2177 | static inline s8 |
2094 | rate_lowest_index(struct ieee80211_supported_band *sband, | 2178 | rate_lowest_index(struct ieee80211_supported_band *sband, |
2095 | struct ieee80211_sta *sta) | 2179 | struct ieee80211_sta *sta) |
@@ -2106,6 +2190,17 @@ rate_lowest_index(struct ieee80211_supported_band *sband, | |||
2106 | return 0; | 2190 | return 0; |
2107 | } | 2191 | } |
2108 | 2192 | ||
2193 | static inline | ||
2194 | bool rate_usable_index_exists(struct ieee80211_supported_band *sband, | ||
2195 | struct ieee80211_sta *sta) | ||
2196 | { | ||
2197 | unsigned int i; | ||
2198 | |||
2199 | for (i = 0; i < sband->n_bitrates; i++) | ||
2200 | if (rate_supported(sta, sband->band, i)) | ||
2201 | return true; | ||
2202 | return false; | ||
2203 | } | ||
2109 | 2204 | ||
2110 | int ieee80211_rate_control_register(struct rate_control_ops *ops); | 2205 | int ieee80211_rate_control_register(struct rate_control_ops *ops); |
2111 | void ieee80211_rate_control_unregister(struct rate_control_ops *ops); | 2206 | void ieee80211_rate_control_unregister(struct rate_control_ops *ops); |
diff --git a/include/net/neighbour.h b/include/net/neighbour.h index d8d790e56d3d..3817fda82a80 100644 --- a/include/net/neighbour.h +++ b/include/net/neighbour.h | |||
@@ -24,6 +24,7 @@ | |||
24 | 24 | ||
25 | #include <linux/err.h> | 25 | #include <linux/err.h> |
26 | #include <linux/sysctl.h> | 26 | #include <linux/sysctl.h> |
27 | #include <linux/workqueue.h> | ||
27 | #include <net/rtnetlink.h> | 28 | #include <net/rtnetlink.h> |
28 | 29 | ||
29 | /* | 30 | /* |
@@ -117,7 +118,7 @@ struct neighbour | |||
117 | int (*output)(struct sk_buff *skb); | 118 | int (*output)(struct sk_buff *skb); |
118 | struct sk_buff_head arp_queue; | 119 | struct sk_buff_head arp_queue; |
119 | struct timer_list timer; | 120 | struct timer_list timer; |
120 | struct neigh_ops *ops; | 121 | const struct neigh_ops *ops; |
121 | u8 primary_key[0]; | 122 | u8 primary_key[0]; |
122 | }; | 123 | }; |
123 | 124 | ||
@@ -167,7 +168,7 @@ struct neigh_table | |||
167 | int gc_thresh2; | 168 | int gc_thresh2; |
168 | int gc_thresh3; | 169 | int gc_thresh3; |
169 | unsigned long last_flush; | 170 | unsigned long last_flush; |
170 | struct timer_list gc_timer; | 171 | struct delayed_work gc_work; |
171 | struct timer_list proxy_timer; | 172 | struct timer_list proxy_timer; |
172 | struct sk_buff_head proxy_queue; | 173 | struct sk_buff_head proxy_queue; |
173 | atomic_t entries; | 174 | atomic_t entries; |
@@ -178,7 +179,6 @@ struct neigh_table | |||
178 | struct neighbour **hash_buckets; | 179 | struct neighbour **hash_buckets; |
179 | unsigned int hash_mask; | 180 | unsigned int hash_mask; |
180 | __u32 hash_rnd; | 181 | __u32 hash_rnd; |
181 | unsigned int hash_chain_gc; | ||
182 | struct pneigh_entry **phash_buckets; | 182 | struct pneigh_entry **phash_buckets; |
183 | }; | 183 | }; |
184 | 184 | ||
diff --git a/include/net/net_namespace.h b/include/net/net_namespace.h index ded434b032a4..a1202841aadd 100644 --- a/include/net/net_namespace.h +++ b/include/net/net_namespace.h | |||
@@ -26,6 +26,7 @@ struct net_device; | |||
26 | struct sock; | 26 | struct sock; |
27 | struct ctl_table_header; | 27 | struct ctl_table_header; |
28 | struct net_generic; | 28 | struct net_generic; |
29 | struct sock; | ||
29 | 30 | ||
30 | struct net { | 31 | struct net { |
31 | atomic_t count; /* To decided when the network | 32 | atomic_t count; /* To decided when the network |
@@ -57,6 +58,7 @@ struct net { | |||
57 | spinlock_t rules_mod_lock; | 58 | spinlock_t rules_mod_lock; |
58 | 59 | ||
59 | struct sock *rtnl; /* rtnetlink socket */ | 60 | struct sock *rtnl; /* rtnetlink socket */ |
61 | struct sock *genl_sock; | ||
60 | 62 | ||
61 | struct netns_core core; | 63 | struct netns_core core; |
62 | struct netns_mib mib; | 64 | struct netns_mib mib; |
@@ -78,6 +80,9 @@ struct net { | |||
78 | #ifdef CONFIG_XFRM | 80 | #ifdef CONFIG_XFRM |
79 | struct netns_xfrm xfrm; | 81 | struct netns_xfrm xfrm; |
80 | #endif | 82 | #endif |
83 | #ifdef CONFIG_WIRELESS_EXT | ||
84 | struct sk_buff_head wext_nlevents; | ||
85 | #endif | ||
81 | struct net_generic *gen; | 86 | struct net_generic *gen; |
82 | }; | 87 | }; |
83 | 88 | ||
@@ -106,6 +111,8 @@ static inline struct net *copy_net_ns(unsigned long flags, struct net *net_ns) | |||
106 | 111 | ||
107 | extern struct list_head net_namespace_list; | 112 | extern struct list_head net_namespace_list; |
108 | 113 | ||
114 | extern struct net *get_net_ns_by_pid(pid_t pid); | ||
115 | |||
109 | #ifdef CONFIG_NET_NS | 116 | #ifdef CONFIG_NET_NS |
110 | extern void __put_net(struct net *net); | 117 | extern void __put_net(struct net *net); |
111 | 118 | ||
@@ -208,6 +215,9 @@ static inline struct net *read_pnet(struct net * const *pnet) | |||
208 | #define for_each_net(VAR) \ | 215 | #define for_each_net(VAR) \ |
209 | list_for_each_entry(VAR, &net_namespace_list, list) | 216 | list_for_each_entry(VAR, &net_namespace_list, list) |
210 | 217 | ||
218 | #define for_each_net_rcu(VAR) \ | ||
219 | list_for_each_entry_rcu(VAR, &net_namespace_list, list) | ||
220 | |||
211 | #ifdef CONFIG_NET_NS | 221 | #ifdef CONFIG_NET_NS |
212 | #define __net_init | 222 | #define __net_init |
213 | #define __net_exit | 223 | #define __net_exit |
@@ -229,13 +239,15 @@ struct pernet_operations { | |||
229 | * needs per network namespace operations use device pernet operations, | 239 | * needs per network namespace operations use device pernet operations, |
230 | * otherwise use pernet subsys operations. | 240 | * otherwise use pernet subsys operations. |
231 | * | 241 | * |
232 | * This is critically important. Most of the network code cleanup | 242 | * Network interfaces need to be removed from a dying netns _before_ |
233 | * runs with the assumption that dev_remove_pack has been called so no | 243 | * subsys notifiers can be called, as most of the network code cleanup |
234 | * new packets will arrive during and after the cleanup functions have | 244 | * (which is done from subsys notifiers) runs with the assumption that |
235 | * been called. dev_remove_pack is not per namespace so instead the | 245 | * dev_remove_pack has been called so no new packets will arrive during |
236 | * guarantee of no more packets arriving in a network namespace is | 246 | * and after the cleanup functions have been called. dev_remove_pack |
237 | * provided by ensuring that all network devices and all sockets have | 247 | * is not per namespace so instead the guarantee of no more packets |
238 | * left the network namespace before the cleanup methods are called. | 248 | * arriving in a network namespace is provided by ensuring that all |
249 | * network devices and all sockets have left the network namespace | ||
250 | * before the cleanup methods are called. | ||
239 | * | 251 | * |
240 | * For the longest time the ipv4 icmp code was registered as a pernet | 252 | * For the longest time the ipv4 icmp code was registered as a pernet |
241 | * device which caused kernel oops, and panics during network | 253 | * device which caused kernel oops, and panics during network |
diff --git a/include/net/netfilter/nf_conntrack.h b/include/net/netfilter/nf_conntrack.h index a632689b61b4..cbdd6284996d 100644 --- a/include/net/netfilter/nf_conntrack.h +++ b/include/net/netfilter/nf_conntrack.h | |||
@@ -258,8 +258,8 @@ static inline bool nf_ct_kill(struct nf_conn *ct) | |||
258 | /* Update TCP window tracking data when NAT mangles the packet */ | 258 | /* Update TCP window tracking data when NAT mangles the packet */ |
259 | extern void nf_conntrack_tcp_update(const struct sk_buff *skb, | 259 | extern void nf_conntrack_tcp_update(const struct sk_buff *skb, |
260 | unsigned int dataoff, | 260 | unsigned int dataoff, |
261 | struct nf_conn *ct, | 261 | struct nf_conn *ct, int dir, |
262 | int dir); | 262 | s16 offset); |
263 | 263 | ||
264 | /* Fake conntrack entry for untracked connections */ | 264 | /* Fake conntrack entry for untracked connections */ |
265 | extern struct nf_conn nf_conntrack_untracked; | 265 | extern struct nf_conn nf_conntrack_untracked; |
diff --git a/include/net/netfilter/nf_nat_core.h b/include/net/netfilter/nf_nat_core.h index 58684066388c..33602ab66190 100644 --- a/include/net/netfilter/nf_nat_core.h +++ b/include/net/netfilter/nf_nat_core.h | |||
@@ -31,6 +31,6 @@ struct nlattr; | |||
31 | extern int | 31 | extern int |
32 | (*nfnetlink_parse_nat_setup_hook)(struct nf_conn *ct, | 32 | (*nfnetlink_parse_nat_setup_hook)(struct nf_conn *ct, |
33 | enum nf_nat_manip_type manip, | 33 | enum nf_nat_manip_type manip, |
34 | struct nlattr *attr); | 34 | const struct nlattr *attr); |
35 | 35 | ||
36 | #endif /* _NF_NAT_CORE_H */ | 36 | #endif /* _NF_NAT_CORE_H */ |
diff --git a/include/net/netfilter/xt_rateest.h b/include/net/netfilter/xt_rateest.h index 65d594dffbff..ddbf37e19616 100644 --- a/include/net/netfilter/xt_rateest.h +++ b/include/net/netfilter/xt_rateest.h | |||
@@ -8,7 +8,7 @@ struct xt_rateest { | |||
8 | spinlock_t lock; | 8 | spinlock_t lock; |
9 | struct gnet_estimator params; | 9 | struct gnet_estimator params; |
10 | struct gnet_stats_rate_est rstats; | 10 | struct gnet_stats_rate_est rstats; |
11 | struct gnet_stats_basic bstats; | 11 | struct gnet_stats_basic_packed bstats; |
12 | }; | 12 | }; |
13 | 13 | ||
14 | extern struct xt_rateest *xt_rateest_lookup(const char *name); | 14 | extern struct xt_rateest *xt_rateest_lookup(const char *name); |
diff --git a/include/net/netlink.h b/include/net/netlink.h index 007bdb07dabb..a63b2192ac1c 100644 --- a/include/net/netlink.h +++ b/include/net/netlink.h | |||
@@ -365,7 +365,7 @@ static inline struct nlmsghdr *nlmsg_next(struct nlmsghdr *nlh, int *remaining) | |||
365 | * | 365 | * |
366 | * See nla_parse() | 366 | * See nla_parse() |
367 | */ | 367 | */ |
368 | static inline int nlmsg_parse(struct nlmsghdr *nlh, int hdrlen, | 368 | static inline int nlmsg_parse(const struct nlmsghdr *nlh, int hdrlen, |
369 | struct nlattr *tb[], int maxtype, | 369 | struct nlattr *tb[], int maxtype, |
370 | const struct nla_policy *policy) | 370 | const struct nla_policy *policy) |
371 | { | 371 | { |
@@ -414,7 +414,7 @@ static inline int nlmsg_validate(struct nlmsghdr *nlh, int hdrlen, int maxtype, | |||
414 | * | 414 | * |
415 | * Returns 1 if a report back to the application is requested. | 415 | * Returns 1 if a report back to the application is requested. |
416 | */ | 416 | */ |
417 | static inline int nlmsg_report(struct nlmsghdr *nlh) | 417 | static inline int nlmsg_report(const struct nlmsghdr *nlh) |
418 | { | 418 | { |
419 | return !!(nlh->nlmsg_flags & NLM_F_ECHO); | 419 | return !!(nlh->nlmsg_flags & NLM_F_ECHO); |
420 | } | 420 | } |
diff --git a/include/net/netns/ipv6.h b/include/net/netns/ipv6.h index afab4e4cbac7..dfeb2d7c425b 100644 --- a/include/net/netns/ipv6.h +++ b/include/net/netns/ipv6.h | |||
@@ -6,6 +6,7 @@ | |||
6 | 6 | ||
7 | #ifndef __NETNS_IPV6_H__ | 7 | #ifndef __NETNS_IPV6_H__ |
8 | #define __NETNS_IPV6_H__ | 8 | #define __NETNS_IPV6_H__ |
9 | #include <net/dst_ops.h> | ||
9 | 10 | ||
10 | struct ctl_table_header; | 11 | struct ctl_table_header; |
11 | 12 | ||
@@ -42,7 +43,7 @@ struct netns_ipv6 { | |||
42 | struct timer_list ip6_fib_timer; | 43 | struct timer_list ip6_fib_timer; |
43 | struct hlist_head *fib_table_hash; | 44 | struct hlist_head *fib_table_hash; |
44 | struct fib6_table *fib6_main_tbl; | 45 | struct fib6_table *fib6_main_tbl; |
45 | struct dst_ops *ip6_dst_ops; | 46 | struct dst_ops ip6_dst_ops; |
46 | unsigned int ip6_rt_gc_expire; | 47 | unsigned int ip6_rt_gc_expire; |
47 | unsigned long ip6_rt_last_gc; | 48 | unsigned long ip6_rt_last_gc; |
48 | #ifdef CONFIG_IPV6_MULTIPLE_TABLES | 49 | #ifdef CONFIG_IPV6_MULTIPLE_TABLES |
diff --git a/include/net/netns/x_tables.h b/include/net/netns/x_tables.h index 9554a644a8f8..591db7d657a3 100644 --- a/include/net/netns/x_tables.h +++ b/include/net/netns/x_tables.h | |||
@@ -8,8 +8,11 @@ struct ebt_table; | |||
8 | 8 | ||
9 | struct netns_xt { | 9 | struct netns_xt { |
10 | struct list_head tables[NFPROTO_NUMPROTO]; | 10 | struct list_head tables[NFPROTO_NUMPROTO]; |
11 | #if defined(CONFIG_BRIDGE_NF_EBTABLES) || \ | ||
12 | defined(CONFIG_BRIDGE_NF_EBTABLES_MODULE) | ||
11 | struct ebt_table *broute_table; | 13 | struct ebt_table *broute_table; |
12 | struct ebt_table *frame_filter; | 14 | struct ebt_table *frame_filter; |
13 | struct ebt_table *frame_nat; | 15 | struct ebt_table *frame_nat; |
16 | #endif | ||
14 | }; | 17 | }; |
15 | #endif | 18 | #endif |
diff --git a/include/net/nl802154.h b/include/net/nl802154.h new file mode 100644 index 000000000000..99d2ba1c7e03 --- /dev/null +++ b/include/net/nl802154.h | |||
@@ -0,0 +1,126 @@ | |||
1 | /* | ||
2 | * nl802154.h | ||
3 | * | ||
4 | * Copyright (C) 2007, 2008, 2009 Siemens AG | ||
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 | ||
8 | * as published by the Free Software Foundation. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License along | ||
16 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #ifndef IEEE802154_NL_H | ||
22 | #define IEEE802154_NL_H | ||
23 | |||
24 | struct net_device; | ||
25 | struct ieee802154_addr; | ||
26 | |||
27 | /** | ||
28 | * ieee802154_nl_assoc_indic - Notify userland of an association request. | ||
29 | * @dev: The network device on which this association request was | ||
30 | * received. | ||
31 | * @addr: The address of the device requesting association. | ||
32 | * @cap: The capability information field from the device. | ||
33 | * | ||
34 | * This informs a userland coordinator of a device requesting to | ||
35 | * associate with the PAN controlled by the coordinator. | ||
36 | * | ||
37 | * Note: This is in section 7.3.1 of the IEEE 802.15.4-2006 document. | ||
38 | */ | ||
39 | int ieee802154_nl_assoc_indic(struct net_device *dev, | ||
40 | struct ieee802154_addr *addr, u8 cap); | ||
41 | |||
42 | /** | ||
43 | * ieee802154_nl_assoc_confirm - Notify userland of association. | ||
44 | * @dev: The device which has completed association. | ||
45 | * @short_addr: The short address assigned to the device. | ||
46 | * @status: The status of the association. | ||
47 | * | ||
48 | * Inform userland of the result of an association request. If the | ||
49 | * association request included asking the coordinator to allocate | ||
50 | * a short address then it is returned in @short_addr. | ||
51 | * | ||
52 | * Note: This is in section 7.3.2 of the IEEE 802.15.4 document. | ||
53 | */ | ||
54 | int ieee802154_nl_assoc_confirm(struct net_device *dev, | ||
55 | u16 short_addr, u8 status); | ||
56 | |||
57 | /** | ||
58 | * ieee802154_nl_disassoc_indic - Notify userland of disassociation. | ||
59 | * @dev: The device on which disassociation was indicated. | ||
60 | * @addr: The device which is disassociating. | ||
61 | * @reason: The reason for the disassociation. | ||
62 | * | ||
63 | * Inform userland that a device has disassociated from the network. | ||
64 | * | ||
65 | * Note: This is in section 7.3.3 of the IEEE 802.15.4 document. | ||
66 | */ | ||
67 | int ieee802154_nl_disassoc_indic(struct net_device *dev, | ||
68 | struct ieee802154_addr *addr, u8 reason); | ||
69 | |||
70 | /** | ||
71 | * ieee802154_nl_disassoc_confirm - Notify userland of disassociation | ||
72 | * completion. | ||
73 | * @dev: The device on which disassociation was ordered. | ||
74 | * @status: The result of the disassociation. | ||
75 | * | ||
76 | * Inform userland of the result of requesting that a device | ||
77 | * disassociate, or the result of requesting that we disassociate from | ||
78 | * a PAN managed by another coordinator. | ||
79 | * | ||
80 | * Note: This is in section 7.1.4.3 of the IEEE 802.15.4 document. | ||
81 | */ | ||
82 | int ieee802154_nl_disassoc_confirm(struct net_device *dev, | ||
83 | u8 status); | ||
84 | |||
85 | /** | ||
86 | * ieee802154_nl_scan_confirm - Notify userland of completion of scan. | ||
87 | * @dev: The device which was instructed to scan. | ||
88 | * @status: The status of the scan operation. | ||
89 | * @scan_type: What type of scan was performed. | ||
90 | * @unscanned: Any channels that the device was unable to scan. | ||
91 | * @edl: The energy levels (if a passive scan). | ||
92 | * | ||
93 | * | ||
94 | * Note: This is in section 7.1.11 of the IEEE 802.15.4 document. | ||
95 | * Note: This API does not permit the return of an active scan result. | ||
96 | */ | ||
97 | int ieee802154_nl_scan_confirm(struct net_device *dev, | ||
98 | u8 status, u8 scan_type, u32 unscanned, u8 page, | ||
99 | u8 *edl/*, struct list_head *pan_desc_list */); | ||
100 | |||
101 | /** | ||
102 | * ieee802154_nl_beacon_indic - Notify userland of a received beacon. | ||
103 | * @dev: The device on which a beacon was received. | ||
104 | * @panid: The PAN of the coordinator. | ||
105 | * @coord_addr: The short address of the coordinator on that PAN. | ||
106 | * | ||
107 | * Note: This is in section 7.1.5 of the IEEE 802.15.4 document. | ||
108 | * Note: This API does not provide extended information such as what | ||
109 | * channel the PAN is on or what the LQI of the beacon frame was on | ||
110 | * receipt. | ||
111 | * Note: This API cannot indicate a beacon frame for a coordinator | ||
112 | * operating in long addressing mode. | ||
113 | */ | ||
114 | int ieee802154_nl_beacon_indic(struct net_device *dev, u16 panid, | ||
115 | u16 coord_addr); | ||
116 | |||
117 | /** | ||
118 | * ieee802154_nl_start_confirm - Notify userland of completion of start. | ||
119 | * @dev: The device which was instructed to scan. | ||
120 | * @status: The status of the scan operation. | ||
121 | * | ||
122 | * Note: This is in section 7.1.14 of the IEEE 802.15.4 document. | ||
123 | */ | ||
124 | int ieee802154_nl_start_confirm(struct net_device *dev, u8 status); | ||
125 | |||
126 | #endif | ||
diff --git a/include/net/phonet/pn_dev.h b/include/net/phonet/pn_dev.h index 29d126736611..44c923c9e21d 100644 --- a/include/net/phonet/pn_dev.h +++ b/include/net/phonet/pn_dev.h | |||
@@ -49,4 +49,6 @@ void phonet_address_notify(int event, struct net_device *dev, u8 addr); | |||
49 | 49 | ||
50 | #define PN_NO_ADDR 0xff | 50 | #define PN_NO_ADDR 0xff |
51 | 51 | ||
52 | extern const struct file_operations pn_sock_seq_fops; | ||
53 | |||
52 | #endif | 54 | #endif |
diff --git a/include/net/pkt_sched.h b/include/net/pkt_sched.h index 82a3191375f5..f911ec7598ef 100644 --- a/include/net/pkt_sched.h +++ b/include/net/pkt_sched.h | |||
@@ -87,6 +87,9 @@ extern struct qdisc_rate_table *qdisc_get_rtab(struct tc_ratespec *r, | |||
87 | extern void qdisc_put_rtab(struct qdisc_rate_table *tab); | 87 | extern void qdisc_put_rtab(struct qdisc_rate_table *tab); |
88 | extern void qdisc_put_stab(struct qdisc_size_table *tab); | 88 | extern void qdisc_put_stab(struct qdisc_size_table *tab); |
89 | extern void qdisc_warn_nonwc(char *txt, struct Qdisc *qdisc); | 89 | extern void qdisc_warn_nonwc(char *txt, struct Qdisc *qdisc); |
90 | extern int sch_direct_xmit(struct sk_buff *skb, struct Qdisc *q, | ||
91 | struct net_device *dev, struct netdev_queue *txq, | ||
92 | spinlock_t *root_lock); | ||
90 | 93 | ||
91 | extern void __qdisc_run(struct Qdisc *q); | 94 | extern void __qdisc_run(struct Qdisc *q); |
92 | 95 | ||
diff --git a/include/net/protocol.h b/include/net/protocol.h index 1089d5aabd49..60249e51b669 100644 --- a/include/net/protocol.h +++ b/include/net/protocol.h | |||
@@ -94,21 +94,20 @@ struct inet_protosw { | |||
94 | #define INET_PROTOSW_PERMANENT 0x02 /* Permanent protocols are unremovable. */ | 94 | #define INET_PROTOSW_PERMANENT 0x02 /* Permanent protocols are unremovable. */ |
95 | #define INET_PROTOSW_ICSK 0x04 /* Is this an inet_connection_sock? */ | 95 | #define INET_PROTOSW_ICSK 0x04 /* Is this an inet_connection_sock? */ |
96 | 96 | ||
97 | extern struct net_protocol *inet_protocol_base; | 97 | extern const struct net_protocol *inet_protos[MAX_INET_PROTOS]; |
98 | extern struct net_protocol *inet_protos[MAX_INET_PROTOS]; | ||
99 | 98 | ||
100 | #if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE) | 99 | #if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE) |
101 | extern struct inet6_protocol *inet6_protos[MAX_INET_PROTOS]; | 100 | extern const struct inet6_protocol *inet6_protos[MAX_INET_PROTOS]; |
102 | #endif | 101 | #endif |
103 | 102 | ||
104 | extern int inet_add_protocol(struct net_protocol *prot, unsigned char num); | 103 | extern int inet_add_protocol(const struct net_protocol *prot, unsigned char num); |
105 | extern int inet_del_protocol(struct net_protocol *prot, unsigned char num); | 104 | extern int inet_del_protocol(const struct net_protocol *prot, unsigned char num); |
106 | extern void inet_register_protosw(struct inet_protosw *p); | 105 | extern void inet_register_protosw(struct inet_protosw *p); |
107 | extern void inet_unregister_protosw(struct inet_protosw *p); | 106 | extern void inet_unregister_protosw(struct inet_protosw *p); |
108 | 107 | ||
109 | #if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE) | 108 | #if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE) |
110 | extern int inet6_add_protocol(struct inet6_protocol *prot, unsigned char num); | 109 | extern int inet6_add_protocol(const struct inet6_protocol *prot, unsigned char num); |
111 | extern int inet6_del_protocol(struct inet6_protocol *prot, unsigned char num); | 110 | extern int inet6_del_protocol(const struct inet6_protocol *prot, unsigned char num); |
112 | extern int inet6_register_protosw(struct inet_protosw *p); | 111 | extern int inet6_register_protosw(struct inet_protosw *p); |
113 | extern void inet6_unregister_protosw(struct inet_protosw *p); | 112 | extern void inet6_unregister_protosw(struct inet_protosw *p); |
114 | #endif | 113 | #endif |
diff --git a/include/net/rose.h b/include/net/rose.h index cbd5364b2c8a..5ba9f02731eb 100644 --- a/include/net/rose.h +++ b/include/net/rose.h | |||
@@ -156,7 +156,7 @@ extern int sysctl_rose_maximum_vcs; | |||
156 | extern int sysctl_rose_window_size; | 156 | extern int sysctl_rose_window_size; |
157 | extern int rosecmp(rose_address *, rose_address *); | 157 | extern int rosecmp(rose_address *, rose_address *); |
158 | extern int rosecmpm(rose_address *, rose_address *, unsigned short); | 158 | extern int rosecmpm(rose_address *, rose_address *, unsigned short); |
159 | extern const char *rose2asc(const rose_address *); | 159 | extern char *rose2asc(char *buf, const rose_address *); |
160 | extern struct sock *rose_find_socket(unsigned int, struct rose_neigh *); | 160 | extern struct sock *rose_find_socket(unsigned int, struct rose_neigh *); |
161 | extern void rose_kill_by_neigh(struct rose_neigh *); | 161 | extern void rose_kill_by_neigh(struct rose_neigh *); |
162 | extern unsigned int rose_new_lci(struct rose_neigh *); | 162 | extern unsigned int rose_new_lci(struct rose_neigh *); |
diff --git a/include/net/rtnetlink.h b/include/net/rtnetlink.h index 3c1895e54b7f..c3aa044d3fc3 100644 --- a/include/net/rtnetlink.h +++ b/include/net/rtnetlink.h | |||
@@ -14,7 +14,7 @@ extern void rtnl_register(int protocol, int msgtype, | |||
14 | extern int rtnl_unregister(int protocol, int msgtype); | 14 | extern int rtnl_unregister(int protocol, int msgtype); |
15 | extern void rtnl_unregister_all(int protocol); | 15 | extern void rtnl_unregister_all(int protocol); |
16 | 16 | ||
17 | static inline int rtnl_msg_family(struct nlmsghdr *nlh) | 17 | static inline int rtnl_msg_family(const struct nlmsghdr *nlh) |
18 | { | 18 | { |
19 | if (nlmsg_len(nlh) >= sizeof(struct rtgenmsg)) | 19 | if (nlmsg_len(nlh) >= sizeof(struct rtgenmsg)) |
20 | return ((struct rtgenmsg *) nlmsg_data(nlh))->rtgen_family; | 20 | return ((struct rtgenmsg *) nlmsg_data(nlh))->rtgen_family; |
@@ -70,6 +70,9 @@ struct rtnl_link_ops { | |||
70 | size_t (*get_xstats_size)(const struct net_device *dev); | 70 | size_t (*get_xstats_size)(const struct net_device *dev); |
71 | int (*fill_xstats)(struct sk_buff *skb, | 71 | int (*fill_xstats)(struct sk_buff *skb, |
72 | const struct net_device *dev); | 72 | const struct net_device *dev); |
73 | int (*get_tx_queues)(struct net *net, struct nlattr *tb[], | ||
74 | unsigned int *tx_queues, | ||
75 | unsigned int *real_tx_queues); | ||
73 | }; | 76 | }; |
74 | 77 | ||
75 | extern int __rtnl_link_register(struct rtnl_link_ops *ops); | 78 | extern int __rtnl_link_register(struct rtnl_link_ops *ops); |
diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h index 964ffa0d8815..c33180dd42b4 100644 --- a/include/net/sch_generic.h +++ b/include/net/sch_generic.h | |||
@@ -45,6 +45,8 @@ struct Qdisc | |||
45 | #define TCQ_F_BUILTIN 1 | 45 | #define TCQ_F_BUILTIN 1 |
46 | #define TCQ_F_THROTTLED 2 | 46 | #define TCQ_F_THROTTLED 2 |
47 | #define TCQ_F_INGRESS 4 | 47 | #define TCQ_F_INGRESS 4 |
48 | #define TCQ_F_CAN_BYPASS 8 | ||
49 | #define TCQ_F_MQROOT 16 | ||
48 | #define TCQ_F_WARN_NONWC (1 << 16) | 50 | #define TCQ_F_WARN_NONWC (1 << 16) |
49 | int padded; | 51 | int padded; |
50 | struct Qdisc_ops *ops; | 52 | struct Qdisc_ops *ops; |
@@ -72,13 +74,14 @@ struct Qdisc | |||
72 | */ | 74 | */ |
73 | unsigned long state; | 75 | unsigned long state; |
74 | struct sk_buff_head q; | 76 | struct sk_buff_head q; |
75 | struct gnet_stats_basic bstats; | 77 | struct gnet_stats_basic_packed bstats; |
76 | struct gnet_stats_queue qstats; | 78 | struct gnet_stats_queue qstats; |
77 | }; | 79 | }; |
78 | 80 | ||
79 | struct Qdisc_class_ops | 81 | struct Qdisc_class_ops |
80 | { | 82 | { |
81 | /* Child qdisc manipulation */ | 83 | /* Child qdisc manipulation */ |
84 | struct netdev_queue * (*select_queue)(struct Qdisc *, struct tcmsg *); | ||
82 | int (*graft)(struct Qdisc *, unsigned long cl, | 85 | int (*graft)(struct Qdisc *, unsigned long cl, |
83 | struct Qdisc *, struct Qdisc **); | 86 | struct Qdisc *, struct Qdisc **); |
84 | struct Qdisc * (*leaf)(struct Qdisc *, unsigned long cl); | 87 | struct Qdisc * (*leaf)(struct Qdisc *, unsigned long cl); |
@@ -121,6 +124,7 @@ struct Qdisc_ops | |||
121 | void (*reset)(struct Qdisc *); | 124 | void (*reset)(struct Qdisc *); |
122 | void (*destroy)(struct Qdisc *); | 125 | void (*destroy)(struct Qdisc *); |
123 | int (*change)(struct Qdisc *, struct nlattr *arg); | 126 | int (*change)(struct Qdisc *, struct nlattr *arg); |
127 | void (*attach)(struct Qdisc *); | ||
124 | 128 | ||
125 | int (*dump)(struct Qdisc *, struct sk_buff *); | 129 | int (*dump)(struct Qdisc *, struct sk_buff *); |
126 | int (*dump_stats)(struct Qdisc *, struct gnet_dump *); | 130 | int (*dump_stats)(struct Qdisc *, struct gnet_dump *); |
@@ -182,6 +186,11 @@ struct qdisc_skb_cb { | |||
182 | char data[]; | 186 | char data[]; |
183 | }; | 187 | }; |
184 | 188 | ||
189 | static inline int qdisc_qlen(struct Qdisc *q) | ||
190 | { | ||
191 | return q->q.qlen; | ||
192 | } | ||
193 | |||
185 | static inline struct qdisc_skb_cb *qdisc_skb_cb(struct sk_buff *skb) | 194 | static inline struct qdisc_skb_cb *qdisc_skb_cb(struct sk_buff *skb) |
186 | { | 195 | { |
187 | return (struct qdisc_skb_cb *)skb->cb; | 196 | return (struct qdisc_skb_cb *)skb->cb; |
@@ -249,6 +258,8 @@ static inline void sch_tree_unlock(struct Qdisc *q) | |||
249 | 258 | ||
250 | extern struct Qdisc noop_qdisc; | 259 | extern struct Qdisc noop_qdisc; |
251 | extern struct Qdisc_ops noop_qdisc_ops; | 260 | extern struct Qdisc_ops noop_qdisc_ops; |
261 | extern struct Qdisc_ops pfifo_fast_ops; | ||
262 | extern struct Qdisc_ops mq_qdisc_ops; | ||
252 | 263 | ||
253 | struct Qdisc_class_common | 264 | struct Qdisc_class_common |
254 | { | 265 | { |
@@ -296,6 +307,8 @@ extern void dev_init_scheduler(struct net_device *dev); | |||
296 | extern void dev_shutdown(struct net_device *dev); | 307 | extern void dev_shutdown(struct net_device *dev); |
297 | extern void dev_activate(struct net_device *dev); | 308 | extern void dev_activate(struct net_device *dev); |
298 | extern void dev_deactivate(struct net_device *dev); | 309 | extern void dev_deactivate(struct net_device *dev); |
310 | extern struct Qdisc *dev_graft_qdisc(struct netdev_queue *dev_queue, | ||
311 | struct Qdisc *qdisc); | ||
299 | extern void qdisc_reset(struct Qdisc *qdisc); | 312 | extern void qdisc_reset(struct Qdisc *qdisc); |
300 | extern void qdisc_destroy(struct Qdisc *qdisc); | 313 | extern void qdisc_destroy(struct Qdisc *qdisc); |
301 | extern void qdisc_tree_decrease_qlen(struct Qdisc *qdisc, unsigned int n); | 314 | extern void qdisc_tree_decrease_qlen(struct Qdisc *qdisc, unsigned int n); |
@@ -387,13 +400,18 @@ static inline int qdisc_enqueue_root(struct sk_buff *skb, struct Qdisc *sch) | |||
387 | return qdisc_enqueue(skb, sch) & NET_XMIT_MASK; | 400 | return qdisc_enqueue(skb, sch) & NET_XMIT_MASK; |
388 | } | 401 | } |
389 | 402 | ||
403 | static inline void __qdisc_update_bstats(struct Qdisc *sch, unsigned int len) | ||
404 | { | ||
405 | sch->bstats.bytes += len; | ||
406 | sch->bstats.packets++; | ||
407 | } | ||
408 | |||
390 | static inline int __qdisc_enqueue_tail(struct sk_buff *skb, struct Qdisc *sch, | 409 | static inline int __qdisc_enqueue_tail(struct sk_buff *skb, struct Qdisc *sch, |
391 | struct sk_buff_head *list) | 410 | struct sk_buff_head *list) |
392 | { | 411 | { |
393 | __skb_queue_tail(list, skb); | 412 | __skb_queue_tail(list, skb); |
394 | sch->qstats.backlog += qdisc_pkt_len(skb); | 413 | sch->qstats.backlog += qdisc_pkt_len(skb); |
395 | sch->bstats.bytes += qdisc_pkt_len(skb); | 414 | __qdisc_update_bstats(sch, qdisc_pkt_len(skb)); |
396 | sch->bstats.packets++; | ||
397 | 415 | ||
398 | return NET_XMIT_SUCCESS; | 416 | return NET_XMIT_SUCCESS; |
399 | } | 417 | } |
diff --git a/include/net/scm.h b/include/net/scm.h index f45bb6eca7d4..cf48c800e926 100644 --- a/include/net/scm.h +++ b/include/net/scm.h | |||
@@ -26,7 +26,6 @@ struct scm_cookie | |||
26 | #ifdef CONFIG_SECURITY_NETWORK | 26 | #ifdef CONFIG_SECURITY_NETWORK |
27 | u32 secid; /* Passed security ID */ | 27 | u32 secid; /* Passed security ID */ |
28 | #endif | 28 | #endif |
29 | unsigned long seq; /* Connection seqno */ | ||
30 | }; | 29 | }; |
31 | 30 | ||
32 | extern void scm_detach_fds(struct msghdr *msg, struct scm_cookie *scm); | 31 | extern void scm_detach_fds(struct msghdr *msg, struct scm_cookie *scm); |
@@ -59,7 +58,6 @@ static __inline__ int scm_send(struct socket *sock, struct msghdr *msg, | |||
59 | scm->creds.gid = current_gid(); | 58 | scm->creds.gid = current_gid(); |
60 | scm->creds.pid = task_tgid_vnr(p); | 59 | scm->creds.pid = task_tgid_vnr(p); |
61 | scm->fp = NULL; | 60 | scm->fp = NULL; |
62 | scm->seq = 0; | ||
63 | unix_get_peersec_dgram(sock, scm); | 61 | unix_get_peersec_dgram(sock, scm); |
64 | if (msg->msg_controllen <= 0) | 62 | if (msg->msg_controllen <= 0) |
65 | return 0; | 63 | return 0; |
diff --git a/include/net/sctp/command.h b/include/net/sctp/command.h index 3b966802e05d..8be5135ff7aa 100644 --- a/include/net/sctp/command.h +++ b/include/net/sctp/command.h | |||
@@ -106,6 +106,7 @@ typedef enum { | |||
106 | SCTP_CMD_ASSOC_SHKEY, /* generate the association shared keys */ | 106 | SCTP_CMD_ASSOC_SHKEY, /* generate the association shared keys */ |
107 | SCTP_CMD_T1_RETRAN, /* Mark for retransmission after T1 timeout */ | 107 | SCTP_CMD_T1_RETRAN, /* Mark for retransmission after T1 timeout */ |
108 | SCTP_CMD_UPDATE_INITTAG, /* Update peer inittag */ | 108 | SCTP_CMD_UPDATE_INITTAG, /* Update peer inittag */ |
109 | SCTP_CMD_SEND_MSG, /* Send the whole use message */ | ||
109 | SCTP_CMD_LAST | 110 | SCTP_CMD_LAST |
110 | } sctp_verb_t; | 111 | } sctp_verb_t; |
111 | 112 | ||
@@ -139,6 +140,7 @@ typedef union { | |||
139 | struct sctp_ulpevent *ulpevent; | 140 | struct sctp_ulpevent *ulpevent; |
140 | struct sctp_packet *packet; | 141 | struct sctp_packet *packet; |
141 | sctp_sackhdr_t *sackh; | 142 | sctp_sackhdr_t *sackh; |
143 | struct sctp_datamsg *msg; | ||
142 | } sctp_arg_t; | 144 | } sctp_arg_t; |
143 | 145 | ||
144 | /* We are simulating ML type constructors here. | 146 | /* We are simulating ML type constructors here. |
@@ -188,6 +190,7 @@ SCTP_ARG_CONSTRUCTOR(PEER_INIT, sctp_init_chunk_t *, init) | |||
188 | SCTP_ARG_CONSTRUCTOR(ULPEVENT, struct sctp_ulpevent *, ulpevent) | 190 | SCTP_ARG_CONSTRUCTOR(ULPEVENT, struct sctp_ulpevent *, ulpevent) |
189 | SCTP_ARG_CONSTRUCTOR(PACKET, struct sctp_packet *, packet) | 191 | SCTP_ARG_CONSTRUCTOR(PACKET, struct sctp_packet *, packet) |
190 | SCTP_ARG_CONSTRUCTOR(SACKH, sctp_sackhdr_t *, sackh) | 192 | SCTP_ARG_CONSTRUCTOR(SACKH, sctp_sackhdr_t *, sackh) |
193 | SCTP_ARG_CONSTRUCTOR(DATAMSG, struct sctp_datamsg *, msg) | ||
191 | 194 | ||
192 | typedef struct { | 195 | typedef struct { |
193 | sctp_arg_t obj; | 196 | sctp_arg_t obj; |
diff --git a/include/net/sctp/constants.h b/include/net/sctp/constants.h index b05b0557211f..58f714a3b670 100644 --- a/include/net/sctp/constants.h +++ b/include/net/sctp/constants.h | |||
@@ -231,7 +231,7 @@ typedef enum { | |||
231 | SCTP_SS_LISTENING = TCP_LISTEN, | 231 | SCTP_SS_LISTENING = TCP_LISTEN, |
232 | SCTP_SS_ESTABLISHING = TCP_SYN_SENT, | 232 | SCTP_SS_ESTABLISHING = TCP_SYN_SENT, |
233 | SCTP_SS_ESTABLISHED = TCP_ESTABLISHED, | 233 | SCTP_SS_ESTABLISHED = TCP_ESTABLISHED, |
234 | SCTP_SS_DISCONNECTING = TCP_CLOSING, | 234 | SCTP_SS_CLOSING = TCP_CLOSING, |
235 | } sctp_sock_state_t; | 235 | } sctp_sock_state_t; |
236 | 236 | ||
237 | /* These functions map various type to printable names. */ | 237 | /* These functions map various type to printable names. */ |
@@ -241,7 +241,9 @@ const char *sctp_tname(const sctp_subtype_t); /* timeouts */ | |||
241 | const char *sctp_pname(const sctp_subtype_t); /* primitives */ | 241 | const char *sctp_pname(const sctp_subtype_t); /* primitives */ |
242 | 242 | ||
243 | /* This is a table of printable names of sctp_state_t's. */ | 243 | /* This is a table of printable names of sctp_state_t's. */ |
244 | extern const char *sctp_state_tbl[], *sctp_evttype_tbl[], *sctp_status_tbl[]; | 244 | extern const char *const sctp_state_tbl[]; |
245 | extern const char *const sctp_evttype_tbl[]; | ||
246 | extern const char *const sctp_status_tbl[]; | ||
245 | 247 | ||
246 | /* Maximum chunk length considering padding requirements. */ | 248 | /* Maximum chunk length considering padding requirements. */ |
247 | enum { SCTP_MAX_CHUNK_LEN = ((1<<16) - sizeof(__u32)) }; | 249 | enum { SCTP_MAX_CHUNK_LEN = ((1<<16) - sizeof(__u32)) }; |
@@ -361,6 +363,13 @@ typedef enum { | |||
361 | SCTP_SCOPE_UNUSABLE, /* IPv4 unusable addresses */ | 363 | SCTP_SCOPE_UNUSABLE, /* IPv4 unusable addresses */ |
362 | } sctp_scope_t; | 364 | } sctp_scope_t; |
363 | 365 | ||
366 | typedef enum { | ||
367 | SCTP_SCOPE_POLICY_DISABLE, /* Disable IPv4 address scoping */ | ||
368 | SCTP_SCOPE_POLICY_ENABLE, /* Enable IPv4 address scoping */ | ||
369 | SCTP_SCOPE_POLICY_PRIVATE, /* Follow draft but allow IPv4 private addresses */ | ||
370 | SCTP_SCOPE_POLICY_LINK, /* Follow draft but allow IPv4 link local addresses */ | ||
371 | } sctp_scope_policy_t; | ||
372 | |||
364 | /* Based on IPv4 scoping <draft-stewart-tsvwg-sctp-ipv4-00.txt>, | 373 | /* Based on IPv4 scoping <draft-stewart-tsvwg-sctp-ipv4-00.txt>, |
365 | * SCTP IPv4 unusable addresses: 0.0.0.0/8, 224.0.0.0/4, 198.18.0.0/24, | 374 | * SCTP IPv4 unusable addresses: 0.0.0.0/8, 224.0.0.0/4, 198.18.0.0/24, |
366 | * 192.88.99.0/24. | 375 | * 192.88.99.0/24. |
diff --git a/include/net/sctp/sctp.h b/include/net/sctp/sctp.h index d16a304cbed4..8a6d5297de16 100644 --- a/include/net/sctp/sctp.h +++ b/include/net/sctp/sctp.h | |||
@@ -486,15 +486,16 @@ static inline __s32 sctp_jitter(__u32 rto) | |||
486 | } | 486 | } |
487 | 487 | ||
488 | /* Break down data chunks at this point. */ | 488 | /* Break down data chunks at this point. */ |
489 | static inline int sctp_frag_point(const struct sctp_sock *sp, int pmtu) | 489 | static inline int sctp_frag_point(const struct sctp_association *asoc, int pmtu) |
490 | { | 490 | { |
491 | struct sctp_sock *sp = sctp_sk(asoc->base.sk); | ||
491 | int frag = pmtu; | 492 | int frag = pmtu; |
492 | 493 | ||
493 | frag -= sp->pf->af->net_header_len; | 494 | frag -= sp->pf->af->net_header_len; |
494 | frag -= sizeof(struct sctphdr) + sizeof(struct sctp_data_chunk); | 495 | frag -= sizeof(struct sctphdr) + sizeof(struct sctp_data_chunk); |
495 | 496 | ||
496 | if (sp->user_frag) | 497 | if (asoc->user_frag) |
497 | frag = min_t(int, frag, sp->user_frag); | 498 | frag = min_t(int, frag, asoc->user_frag); |
498 | 499 | ||
499 | frag = min_t(int, frag, SCTP_MAX_CHUNK_LEN); | 500 | frag = min_t(int, frag, SCTP_MAX_CHUNK_LEN); |
500 | 501 | ||
diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h index edfcacf3250e..42d00ced5eb8 100644 --- a/include/net/sctp/structs.h +++ b/include/net/sctp/structs.h | |||
@@ -219,6 +219,15 @@ extern struct sctp_globals { | |||
219 | /* Flag to idicate if SCTP-AUTH is enabled */ | 219 | /* Flag to idicate if SCTP-AUTH is enabled */ |
220 | int auth_enable; | 220 | int auth_enable; |
221 | 221 | ||
222 | /* | ||
223 | * Policy to control SCTP IPv4 address scoping | ||
224 | * 0 - Disable IPv4 address scoping | ||
225 | * 1 - Enable IPv4 address scoping | ||
226 | * 2 - Selectively allow only IPv4 private addresses | ||
227 | * 3 - Selectively allow only IPv4 link local address | ||
228 | */ | ||
229 | int ipv4_scope_policy; | ||
230 | |||
222 | /* Flag to indicate whether computing and verifying checksum | 231 | /* Flag to indicate whether computing and verifying checksum |
223 | * is disabled. */ | 232 | * is disabled. */ |
224 | int checksum_disable; | 233 | int checksum_disable; |
@@ -252,6 +261,7 @@ extern struct sctp_globals { | |||
252 | #define sctp_port_hashtable (sctp_globals.port_hashtable) | 261 | #define sctp_port_hashtable (sctp_globals.port_hashtable) |
253 | #define sctp_local_addr_list (sctp_globals.local_addr_list) | 262 | #define sctp_local_addr_list (sctp_globals.local_addr_list) |
254 | #define sctp_local_addr_lock (sctp_globals.addr_list_lock) | 263 | #define sctp_local_addr_lock (sctp_globals.addr_list_lock) |
264 | #define sctp_scope_policy (sctp_globals.ipv4_scope_policy) | ||
255 | #define sctp_addip_enable (sctp_globals.addip_enable) | 265 | #define sctp_addip_enable (sctp_globals.addip_enable) |
256 | #define sctp_addip_noauth (sctp_globals.addip_noauth_enable) | 266 | #define sctp_addip_noauth (sctp_globals.addip_noauth_enable) |
257 | #define sctp_prsctp_enable (sctp_globals.prsctp_enable) | 267 | #define sctp_prsctp_enable (sctp_globals.prsctp_enable) |
@@ -628,7 +638,7 @@ struct sctp_datamsg { | |||
628 | /* Chunks waiting to be submitted to lower layer. */ | 638 | /* Chunks waiting to be submitted to lower layer. */ |
629 | struct list_head chunks; | 639 | struct list_head chunks; |
630 | /* Chunks that have been transmitted. */ | 640 | /* Chunks that have been transmitted. */ |
631 | struct list_head track; | 641 | size_t msg_size; |
632 | /* Reference counting. */ | 642 | /* Reference counting. */ |
633 | atomic_t refcnt; | 643 | atomic_t refcnt; |
634 | /* When is this message no longer interesting to the peer? */ | 644 | /* When is this message no longer interesting to the peer? */ |
@@ -643,6 +653,7 @@ struct sctp_datamsg { | |||
643 | struct sctp_datamsg *sctp_datamsg_from_user(struct sctp_association *, | 653 | struct sctp_datamsg *sctp_datamsg_from_user(struct sctp_association *, |
644 | struct sctp_sndrcvinfo *, | 654 | struct sctp_sndrcvinfo *, |
645 | struct msghdr *, int len); | 655 | struct msghdr *, int len); |
656 | void sctp_datamsg_free(struct sctp_datamsg *); | ||
646 | void sctp_datamsg_put(struct sctp_datamsg *); | 657 | void sctp_datamsg_put(struct sctp_datamsg *); |
647 | void sctp_chunk_fail(struct sctp_chunk *, int error); | 658 | void sctp_chunk_fail(struct sctp_chunk *, int error); |
648 | int sctp_chunk_abandoned(struct sctp_chunk *); | 659 | int sctp_chunk_abandoned(struct sctp_chunk *); |
@@ -811,22 +822,12 @@ struct sctp_packet { | |||
811 | /* pointer to the auth chunk for this packet */ | 822 | /* pointer to the auth chunk for this packet */ |
812 | struct sctp_chunk *auth; | 823 | struct sctp_chunk *auth; |
813 | 824 | ||
814 | /* This packet contains a COOKIE-ECHO chunk. */ | 825 | u8 has_cookie_echo:1, /* This packet contains a COOKIE-ECHO chunk. */ |
815 | __u8 has_cookie_echo; | 826 | has_sack:1, /* This packet contains a SACK chunk. */ |
816 | 827 | has_auth:1, /* This packet contains an AUTH chunk */ | |
817 | /* This packet contains a SACK chunk. */ | 828 | has_data:1, /* This packet contains at least 1 DATA chunk */ |
818 | __u8 has_sack; | 829 | ipfragok:1, /* So let ip fragment this packet */ |
819 | 830 | malloced:1; /* Is it malloced? */ | |
820 | /* This packet contains an AUTH chunk */ | ||
821 | __u8 has_auth; | ||
822 | |||
823 | /* This packet contains at least 1 DATA chunk */ | ||
824 | __u8 has_data; | ||
825 | |||
826 | /* SCTP cannot fragment this packet. So let ip fragment it. */ | ||
827 | __u8 ipfragok; | ||
828 | |||
829 | __u8 malloced; | ||
830 | }; | 831 | }; |
831 | 832 | ||
832 | struct sctp_packet *sctp_packet_init(struct sctp_packet *, | 833 | struct sctp_packet *sctp_packet_init(struct sctp_packet *, |
@@ -1567,13 +1568,13 @@ struct sctp_association { | |||
1567 | __u32 sack_cnt; | 1568 | __u32 sack_cnt; |
1568 | 1569 | ||
1569 | /* These are capabilities which our peer advertised. */ | 1570 | /* These are capabilities which our peer advertised. */ |
1570 | __u8 ecn_capable; /* Can peer do ECN? */ | 1571 | __u8 ecn_capable:1, /* Can peer do ECN? */ |
1571 | __u8 ipv4_address; /* Peer understands IPv4 addresses? */ | 1572 | ipv4_address:1, /* Peer understands IPv4 addresses? */ |
1572 | __u8 ipv6_address; /* Peer understands IPv6 addresses? */ | 1573 | ipv6_address:1, /* Peer understands IPv6 addresses? */ |
1573 | __u8 hostname_address;/* Peer understands DNS addresses? */ | 1574 | hostname_address:1, /* Peer understands DNS addresses? */ |
1574 | __u8 asconf_capable; /* Does peer support ADDIP? */ | 1575 | asconf_capable:1, /* Does peer support ADDIP? */ |
1575 | __u8 prsctp_capable; /* Can peer do PR-SCTP? */ | 1576 | prsctp_capable:1, /* Can peer do PR-SCTP? */ |
1576 | __u8 auth_capable; /* Is peer doing SCTP-AUTH? */ | 1577 | auth_capable:1; /* Is peer doing SCTP-AUTH? */ |
1577 | 1578 | ||
1578 | __u32 adaptation_ind; /* Adaptation Code point. */ | 1579 | __u32 adaptation_ind; /* Adaptation Code point. */ |
1579 | 1580 | ||
@@ -1738,6 +1739,12 @@ struct sctp_association { | |||
1738 | */ | 1739 | */ |
1739 | __u32 rwnd_over; | 1740 | __u32 rwnd_over; |
1740 | 1741 | ||
1742 | /* Keeps treack of rwnd pressure. This happens when we have | ||
1743 | * a window, but not recevie buffer (i.e small packets). This one | ||
1744 | * is releases slowly (1 PMTU at a time ). | ||
1745 | */ | ||
1746 | __u32 rwnd_press; | ||
1747 | |||
1741 | /* This is the sndbuf size in use for the association. | 1748 | /* This is the sndbuf size in use for the association. |
1742 | * This corresponds to the sndbuf size for the association, | 1749 | * This corresponds to the sndbuf size for the association, |
1743 | * as specified in the sk->sndbuf. | 1750 | * as specified in the sk->sndbuf. |
@@ -1756,6 +1763,7 @@ struct sctp_association { | |||
1756 | 1763 | ||
1757 | /* The message size at which SCTP fragmentation will occur. */ | 1764 | /* The message size at which SCTP fragmentation will occur. */ |
1758 | __u32 frag_point; | 1765 | __u32 frag_point; |
1766 | __u32 user_frag; | ||
1759 | 1767 | ||
1760 | /* Counter used to count INIT errors. */ | 1768 | /* Counter used to count INIT errors. */ |
1761 | int init_err_counter; | 1769 | int init_err_counter; |
@@ -1905,11 +1913,8 @@ struct sctp_association { | |||
1905 | 1913 | ||
1906 | __u16 active_key_id; | 1914 | __u16 active_key_id; |
1907 | 1915 | ||
1908 | /* Need to send an ECNE Chunk? */ | 1916 | __u8 need_ecne:1, /* Need to send an ECNE Chunk? */ |
1909 | char need_ecne; | 1917 | temp:1; /* Is it a temporary association? */ |
1910 | |||
1911 | /* Is it a temporary association? */ | ||
1912 | char temp; | ||
1913 | }; | 1918 | }; |
1914 | 1919 | ||
1915 | 1920 | ||
diff --git a/include/net/sctp/user.h b/include/net/sctp/user.h index 1580c04f68bc..be2334aaf52e 100644 --- a/include/net/sctp/user.h +++ b/include/net/sctp/user.h | |||
@@ -210,12 +210,6 @@ enum sctp_sinfo_flags { | |||
210 | }; | 210 | }; |
211 | 211 | ||
212 | 212 | ||
213 | typedef union { | ||
214 | __u8 raw; | ||
215 | struct sctp_initmsg init; | ||
216 | struct sctp_sndrcvinfo sndrcv; | ||
217 | } sctp_cmsg_data_t; | ||
218 | |||
219 | /* These are cmsg_types. */ | 213 | /* These are cmsg_types. */ |
220 | typedef enum sctp_cmsg_type { | 214 | typedef enum sctp_cmsg_type { |
221 | SCTP_INIT, /* 5.2.1 SCTP Initiation Structure */ | 215 | SCTP_INIT, /* 5.2.1 SCTP Initiation Structure */ |
diff --git a/include/net/sock.h b/include/net/sock.h index 352f06bbd7a9..950409dcec3d 100644 --- a/include/net/sock.h +++ b/include/net/sock.h | |||
@@ -54,6 +54,7 @@ | |||
54 | 54 | ||
55 | #include <linux/filter.h> | 55 | #include <linux/filter.h> |
56 | #include <linux/rculist_nulls.h> | 56 | #include <linux/rculist_nulls.h> |
57 | #include <linux/poll.h> | ||
57 | 58 | ||
58 | #include <asm/atomic.h> | 59 | #include <asm/atomic.h> |
59 | #include <net/dst.h> | 60 | #include <net/dst.h> |
@@ -103,15 +104,15 @@ struct net; | |||
103 | 104 | ||
104 | /** | 105 | /** |
105 | * struct sock_common - minimal network layer representation of sockets | 106 | * struct sock_common - minimal network layer representation of sockets |
107 | * @skc_node: main hash linkage for various protocol lookup tables | ||
108 | * @skc_nulls_node: main hash linkage for UDP/UDP-Lite protocol | ||
109 | * @skc_refcnt: reference count | ||
110 | * @skc_hash: hash value used with various protocol lookup tables | ||
106 | * @skc_family: network address family | 111 | * @skc_family: network address family |
107 | * @skc_state: Connection state | 112 | * @skc_state: Connection state |
108 | * @skc_reuse: %SO_REUSEADDR setting | 113 | * @skc_reuse: %SO_REUSEADDR setting |
109 | * @skc_bound_dev_if: bound device index if != 0 | 114 | * @skc_bound_dev_if: bound device index if != 0 |
110 | * @skc_node: main hash linkage for various protocol lookup tables | ||
111 | * @skc_nulls_node: main hash linkage for UDP/UDP-Lite protocol | ||
112 | * @skc_bind_node: bind hash linkage for various protocol lookup tables | 115 | * @skc_bind_node: bind hash linkage for various protocol lookup tables |
113 | * @skc_refcnt: reference count | ||
114 | * @skc_hash: hash value used with various protocol lookup tables | ||
115 | * @skc_prot: protocol handlers inside a network family | 116 | * @skc_prot: protocol handlers inside a network family |
116 | * @skc_net: reference to the network namespace of this socket | 117 | * @skc_net: reference to the network namespace of this socket |
117 | * | 118 | * |
@@ -119,17 +120,21 @@ struct net; | |||
119 | * for struct sock and struct inet_timewait_sock. | 120 | * for struct sock and struct inet_timewait_sock. |
120 | */ | 121 | */ |
121 | struct sock_common { | 122 | struct sock_common { |
122 | unsigned short skc_family; | 123 | /* |
123 | volatile unsigned char skc_state; | 124 | * first fields are not copied in sock_copy() |
124 | unsigned char skc_reuse; | 125 | */ |
125 | int skc_bound_dev_if; | ||
126 | union { | 126 | union { |
127 | struct hlist_node skc_node; | 127 | struct hlist_node skc_node; |
128 | struct hlist_nulls_node skc_nulls_node; | 128 | struct hlist_nulls_node skc_nulls_node; |
129 | }; | 129 | }; |
130 | struct hlist_node skc_bind_node; | ||
131 | atomic_t skc_refcnt; | 130 | atomic_t skc_refcnt; |
131 | |||
132 | unsigned int skc_hash; | 132 | unsigned int skc_hash; |
133 | unsigned short skc_family; | ||
134 | volatile unsigned char skc_state; | ||
135 | unsigned char skc_reuse; | ||
136 | int skc_bound_dev_if; | ||
137 | struct hlist_node skc_bind_node; | ||
133 | struct proto *skc_prot; | 138 | struct proto *skc_prot; |
134 | #ifdef CONFIG_NET_NS | 139 | #ifdef CONFIG_NET_NS |
135 | struct net *skc_net; | 140 | struct net *skc_net; |
@@ -207,15 +212,17 @@ struct sock { | |||
207 | * don't add nothing before this first member (__sk_common) --acme | 212 | * don't add nothing before this first member (__sk_common) --acme |
208 | */ | 213 | */ |
209 | struct sock_common __sk_common; | 214 | struct sock_common __sk_common; |
215 | #define sk_node __sk_common.skc_node | ||
216 | #define sk_nulls_node __sk_common.skc_nulls_node | ||
217 | #define sk_refcnt __sk_common.skc_refcnt | ||
218 | |||
219 | #define sk_copy_start __sk_common.skc_hash | ||
220 | #define sk_hash __sk_common.skc_hash | ||
210 | #define sk_family __sk_common.skc_family | 221 | #define sk_family __sk_common.skc_family |
211 | #define sk_state __sk_common.skc_state | 222 | #define sk_state __sk_common.skc_state |
212 | #define sk_reuse __sk_common.skc_reuse | 223 | #define sk_reuse __sk_common.skc_reuse |
213 | #define sk_bound_dev_if __sk_common.skc_bound_dev_if | 224 | #define sk_bound_dev_if __sk_common.skc_bound_dev_if |
214 | #define sk_node __sk_common.skc_node | ||
215 | #define sk_nulls_node __sk_common.skc_nulls_node | ||
216 | #define sk_bind_node __sk_common.skc_bind_node | 225 | #define sk_bind_node __sk_common.skc_bind_node |
217 | #define sk_refcnt __sk_common.skc_refcnt | ||
218 | #define sk_hash __sk_common.skc_hash | ||
219 | #define sk_prot __sk_common.skc_prot | 226 | #define sk_prot __sk_common.skc_prot |
220 | #define sk_net __sk_common.skc_net | 227 | #define sk_net __sk_common.skc_net |
221 | kmemcheck_bitfield_begin(flags); | 228 | kmemcheck_bitfield_begin(flags); |
@@ -1241,6 +1248,74 @@ static inline int sk_has_allocations(const struct sock *sk) | |||
1241 | return sk_wmem_alloc_get(sk) || sk_rmem_alloc_get(sk); | 1248 | return sk_wmem_alloc_get(sk) || sk_rmem_alloc_get(sk); |
1242 | } | 1249 | } |
1243 | 1250 | ||
1251 | /** | ||
1252 | * sk_has_sleeper - check if there are any waiting processes | ||
1253 | * @sk: socket | ||
1254 | * | ||
1255 | * Returns true if socket has waiting processes | ||
1256 | * | ||
1257 | * The purpose of the sk_has_sleeper and sock_poll_wait is to wrap the memory | ||
1258 | * barrier call. They were added due to the race found within the tcp code. | ||
1259 | * | ||
1260 | * Consider following tcp code paths: | ||
1261 | * | ||
1262 | * CPU1 CPU2 | ||
1263 | * | ||
1264 | * sys_select receive packet | ||
1265 | * ... ... | ||
1266 | * __add_wait_queue update tp->rcv_nxt | ||
1267 | * ... ... | ||
1268 | * tp->rcv_nxt check sock_def_readable | ||
1269 | * ... { | ||
1270 | * schedule ... | ||
1271 | * if (sk->sk_sleep && waitqueue_active(sk->sk_sleep)) | ||
1272 | * wake_up_interruptible(sk->sk_sleep) | ||
1273 | * ... | ||
1274 | * } | ||
1275 | * | ||
1276 | * The race for tcp fires when the __add_wait_queue changes done by CPU1 stay | ||
1277 | * in its cache, and so does the tp->rcv_nxt update on CPU2 side. The CPU1 | ||
1278 | * could then endup calling schedule and sleep forever if there are no more | ||
1279 | * data on the socket. | ||
1280 | * | ||
1281 | * The sk_has_sleeper is always called right after a call to read_lock, so we | ||
1282 | * can use smp_mb__after_lock barrier. | ||
1283 | */ | ||
1284 | static inline int sk_has_sleeper(struct sock *sk) | ||
1285 | { | ||
1286 | /* | ||
1287 | * We need to be sure we are in sync with the | ||
1288 | * add_wait_queue modifications to the wait queue. | ||
1289 | * | ||
1290 | * This memory barrier is paired in the sock_poll_wait. | ||
1291 | */ | ||
1292 | smp_mb__after_lock(); | ||
1293 | return sk->sk_sleep && waitqueue_active(sk->sk_sleep); | ||
1294 | } | ||
1295 | |||
1296 | /** | ||
1297 | * sock_poll_wait - place memory barrier behind the poll_wait call. | ||
1298 | * @filp: file | ||
1299 | * @wait_address: socket wait queue | ||
1300 | * @p: poll_table | ||
1301 | * | ||
1302 | * See the comments in the sk_has_sleeper function. | ||
1303 | */ | ||
1304 | static inline void sock_poll_wait(struct file *filp, | ||
1305 | wait_queue_head_t *wait_address, poll_table *p) | ||
1306 | { | ||
1307 | if (p && wait_address) { | ||
1308 | poll_wait(filp, wait_address, p); | ||
1309 | /* | ||
1310 | * We need to be sure we are in sync with the | ||
1311 | * socket flags modification. | ||
1312 | * | ||
1313 | * This memory barrier is paired in the sk_has_sleeper. | ||
1314 | */ | ||
1315 | smp_mb(); | ||
1316 | } | ||
1317 | } | ||
1318 | |||
1244 | /* | 1319 | /* |
1245 | * Queue a received datagram if it will fit. Stream and sequenced | 1320 | * Queue a received datagram if it will fit. Stream and sequenced |
1246 | * protocols can't normally use this as they need to fit buffers in | 1321 | * protocols can't normally use this as they need to fit buffers in |
diff --git a/include/net/tcp.h b/include/net/tcp.h index 19f4150f4d4d..56b76027b85e 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h | |||
@@ -469,6 +469,7 @@ extern void __tcp_push_pending_frames(struct sock *sk, unsigned int cur_mss, | |||
469 | int nonagle); | 469 | int nonagle); |
470 | extern int tcp_may_send_now(struct sock *sk); | 470 | extern int tcp_may_send_now(struct sock *sk); |
471 | extern int tcp_retransmit_skb(struct sock *, struct sk_buff *); | 471 | extern int tcp_retransmit_skb(struct sock *, struct sk_buff *); |
472 | extern void tcp_retransmit_timer(struct sock *sk); | ||
472 | extern void tcp_xmit_retransmit_queue(struct sock *); | 473 | extern void tcp_xmit_retransmit_queue(struct sock *); |
473 | extern void tcp_simple_retransmit(struct sock *); | 474 | extern void tcp_simple_retransmit(struct sock *); |
474 | extern int tcp_trim_head(struct sock *, struct sk_buff *, u32); | 475 | extern int tcp_trim_head(struct sock *, struct sk_buff *, u32); |
@@ -521,6 +522,17 @@ extern int tcp_mtu_to_mss(struct sock *sk, int pmtu); | |||
521 | extern int tcp_mss_to_mtu(struct sock *sk, int mss); | 522 | extern int tcp_mss_to_mtu(struct sock *sk, int mss); |
522 | extern void tcp_mtup_init(struct sock *sk); | 523 | extern void tcp_mtup_init(struct sock *sk); |
523 | 524 | ||
525 | static inline void tcp_bound_rto(const struct sock *sk) | ||
526 | { | ||
527 | if (inet_csk(sk)->icsk_rto > TCP_RTO_MAX) | ||
528 | inet_csk(sk)->icsk_rto = TCP_RTO_MAX; | ||
529 | } | ||
530 | |||
531 | static inline u32 __tcp_set_rto(const struct tcp_sock *tp) | ||
532 | { | ||
533 | return (tp->srtt >> 3) + tp->rttvar; | ||
534 | } | ||
535 | |||
524 | static inline void __tcp_fast_path_on(struct tcp_sock *tp, u32 snd_wnd) | 536 | static inline void __tcp_fast_path_on(struct tcp_sock *tp, u32 snd_wnd) |
525 | { | 537 | { |
526 | tp->pred_flags = htonl((tp->tcp_header_len << 26) | | 538 | tp->pred_flags = htonl((tp->tcp_header_len << 26) | |
@@ -781,6 +793,13 @@ static inline unsigned int tcp_packets_in_flight(const struct tcp_sock *tp) | |||
781 | return tp->packets_out - tcp_left_out(tp) + tp->retrans_out; | 793 | return tp->packets_out - tcp_left_out(tp) + tp->retrans_out; |
782 | } | 794 | } |
783 | 795 | ||
796 | #define TCP_INFINITE_SSTHRESH 0x7fffffff | ||
797 | |||
798 | static inline bool tcp_in_initial_slowstart(const struct tcp_sock *tp) | ||
799 | { | ||
800 | return tp->snd_ssthresh >= TCP_INFINITE_SSTHRESH; | ||
801 | } | ||
802 | |||
784 | /* If cwnd > ssthresh, we may raise ssthresh to be half-way to cwnd. | 803 | /* If cwnd > ssthresh, we may raise ssthresh to be half-way to cwnd. |
785 | * The exception is rate halving phase, when cwnd is decreasing towards | 804 | * The exception is rate halving phase, when cwnd is decreasing towards |
786 | * ssthresh. | 805 | * ssthresh. |
@@ -1007,6 +1026,11 @@ static inline int keepalive_time_when(const struct tcp_sock *tp) | |||
1007 | return tp->keepalive_time ? : sysctl_tcp_keepalive_time; | 1026 | return tp->keepalive_time ? : sysctl_tcp_keepalive_time; |
1008 | } | 1027 | } |
1009 | 1028 | ||
1029 | static inline int keepalive_probes(const struct tcp_sock *tp) | ||
1030 | { | ||
1031 | return tp->keepalive_probes ? : sysctl_tcp_keepalive_probes; | ||
1032 | } | ||
1033 | |||
1010 | static inline int tcp_fin_time(const struct sock *sk) | 1034 | static inline int tcp_fin_time(const struct sock *sk) |
1011 | { | 1035 | { |
1012 | int fin_timeout = tcp_sk(sk)->linger2 ? : sysctl_tcp_fin_timeout; | 1036 | int fin_timeout = tcp_sk(sk)->linger2 ? : sysctl_tcp_fin_timeout; |
@@ -1169,7 +1193,7 @@ extern int tcp_v4_md5_do_del(struct sock *sk, | |||
1169 | #define tcp_twsk_md5_key(twsk) NULL | 1193 | #define tcp_twsk_md5_key(twsk) NULL |
1170 | #endif | 1194 | #endif |
1171 | 1195 | ||
1172 | extern struct tcp_md5sig_pool **tcp_alloc_md5sig_pool(void); | 1196 | extern struct tcp_md5sig_pool **tcp_alloc_md5sig_pool(struct sock *); |
1173 | extern void tcp_free_md5sig_pool(void); | 1197 | extern void tcp_free_md5sig_pool(void); |
1174 | 1198 | ||
1175 | extern struct tcp_md5sig_pool *__tcp_get_md5sig_pool(int cpu); | 1199 | extern struct tcp_md5sig_pool *__tcp_get_md5sig_pool(int cpu); |
@@ -1235,6 +1259,29 @@ static inline struct sk_buff *tcp_write_queue_prev(struct sock *sk, struct sk_bu | |||
1235 | #define tcp_for_write_queue_from_safe(skb, tmp, sk) \ | 1259 | #define tcp_for_write_queue_from_safe(skb, tmp, sk) \ |
1236 | skb_queue_walk_from_safe(&(sk)->sk_write_queue, skb, tmp) | 1260 | skb_queue_walk_from_safe(&(sk)->sk_write_queue, skb, tmp) |
1237 | 1261 | ||
1262 | /* This function calculates a "timeout" which is equivalent to the timeout of a | ||
1263 | * TCP connection after "boundary" unsucessful, exponentially backed-off | ||
1264 | * retransmissions with an initial RTO of TCP_RTO_MIN. | ||
1265 | */ | ||
1266 | static inline bool retransmits_timed_out(const struct sock *sk, | ||
1267 | unsigned int boundary) | ||
1268 | { | ||
1269 | unsigned int timeout, linear_backoff_thresh; | ||
1270 | |||
1271 | if (!inet_csk(sk)->icsk_retransmits) | ||
1272 | return false; | ||
1273 | |||
1274 | linear_backoff_thresh = ilog2(TCP_RTO_MAX/TCP_RTO_MIN); | ||
1275 | |||
1276 | if (boundary <= linear_backoff_thresh) | ||
1277 | timeout = ((2 << boundary) - 1) * TCP_RTO_MIN; | ||
1278 | else | ||
1279 | timeout = ((2 << linear_backoff_thresh) - 1) * TCP_RTO_MIN + | ||
1280 | (boundary - linear_backoff_thresh) * TCP_RTO_MAX; | ||
1281 | |||
1282 | return (tcp_time_stamp - tcp_sk(sk)->retrans_stamp) >= timeout; | ||
1283 | } | ||
1284 | |||
1238 | static inline struct sk_buff *tcp_send_head(struct sock *sk) | 1285 | static inline struct sk_buff *tcp_send_head(struct sock *sk) |
1239 | { | 1286 | { |
1240 | return sk->sk_send_head; | 1287 | return sk->sk_send_head; |
@@ -1425,6 +1472,11 @@ struct tcp_request_sock_ops { | |||
1425 | #ifdef CONFIG_TCP_MD5SIG | 1472 | #ifdef CONFIG_TCP_MD5SIG |
1426 | struct tcp_md5sig_key *(*md5_lookup) (struct sock *sk, | 1473 | struct tcp_md5sig_key *(*md5_lookup) (struct sock *sk, |
1427 | struct request_sock *req); | 1474 | struct request_sock *req); |
1475 | int (*calc_md5_hash) (char *location, | ||
1476 | struct tcp_md5sig_key *md5, | ||
1477 | struct sock *sk, | ||
1478 | struct request_sock *req, | ||
1479 | struct sk_buff *skb); | ||
1428 | #endif | 1480 | #endif |
1429 | }; | 1481 | }; |
1430 | 1482 | ||
diff --git a/include/net/transp_v6.h b/include/net/transp_v6.h index bfb240c6cf79..d65381cad0fc 100644 --- a/include/net/transp_v6.h +++ b/include/net/transp_v6.h | |||
@@ -51,7 +51,7 @@ extern int datagram_send_ctl(struct net *net, | |||
51 | /* | 51 | /* |
52 | * address family specific functions | 52 | * address family specific functions |
53 | */ | 53 | */ |
54 | extern struct inet_connection_sock_af_ops ipv4_specific; | 54 | extern const struct inet_connection_sock_af_ops ipv4_specific; |
55 | 55 | ||
56 | extern void inet6_destroy_sock(struct sock *sk); | 56 | extern void inet6_destroy_sock(struct sock *sk); |
57 | 57 | ||
diff --git a/include/net/udp.h b/include/net/udp.h index 90e6ce56be65..5fb029f817a3 100644 --- a/include/net/udp.h +++ b/include/net/udp.h | |||
@@ -207,4 +207,7 @@ extern void udp4_proc_exit(void); | |||
207 | #endif | 207 | #endif |
208 | 208 | ||
209 | extern void udp_init(void); | 209 | extern void udp_init(void); |
210 | |||
211 | extern int udp4_ufo_send_check(struct sk_buff *skb); | ||
212 | extern struct sk_buff *udp4_ufo_fragment(struct sk_buff *skb, int features); | ||
210 | #endif /* _UDP_H */ | 213 | #endif /* _UDP_H */ |
diff --git a/include/net/wpan-phy.h b/include/net/wpan-phy.h new file mode 100644 index 000000000000..547b1e271ac9 --- /dev/null +++ b/include/net/wpan-phy.h | |||
@@ -0,0 +1,63 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2007, 2008, 2009 Siemens AG | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License version 2 | ||
6 | * as published by the Free Software Foundation. | ||
7 | * | ||
8 | * This program is distributed in the hope that it will be useful, | ||
9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
11 | * GNU General Public License for more details. | ||
12 | * | ||
13 | * You should have received a copy of the GNU General Public License along | ||
14 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
15 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
16 | * | ||
17 | * Written by: | ||
18 | * Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> | ||
19 | */ | ||
20 | |||
21 | #ifndef WPAN_PHY_H | ||
22 | #define WPAN_PHY_H | ||
23 | |||
24 | #include <linux/netdevice.h> | ||
25 | #include <linux/mutex.h> | ||
26 | |||
27 | struct wpan_phy { | ||
28 | struct mutex pib_lock; | ||
29 | |||
30 | /* | ||
31 | * This is a PIB acording to 802.15.4-2006. | ||
32 | * We do not provide timing-related variables, as they | ||
33 | * aren't used outside of driver | ||
34 | */ | ||
35 | u8 current_channel; | ||
36 | u8 current_page; | ||
37 | u32 channels_supported; | ||
38 | u8 transmit_power; | ||
39 | u8 cca_mode; | ||
40 | |||
41 | struct device dev; | ||
42 | int idx; | ||
43 | |||
44 | char priv[0] __attribute__((__aligned__(NETDEV_ALIGN))); | ||
45 | }; | ||
46 | |||
47 | struct wpan_phy *wpan_phy_alloc(size_t priv_size); | ||
48 | int wpan_phy_register(struct device *parent, struct wpan_phy *phy); | ||
49 | void wpan_phy_unregister(struct wpan_phy *phy); | ||
50 | void wpan_phy_free(struct wpan_phy *phy); | ||
51 | |||
52 | static inline void *wpan_phy_priv(struct wpan_phy *phy) | ||
53 | { | ||
54 | BUG_ON(!phy); | ||
55 | return &phy->priv; | ||
56 | } | ||
57 | |||
58 | struct wpan_phy *wpan_phy_find(const char *str); | ||
59 | static inline const char *wpan_phy_name(struct wpan_phy *phy) | ||
60 | { | ||
61 | return dev_name(&phy->dev); | ||
62 | } | ||
63 | #endif | ||
diff --git a/include/net/xfrm.h b/include/net/xfrm.h index 9e3a3f4c1f60..223e90a44824 100644 --- a/include/net/xfrm.h +++ b/include/net/xfrm.h | |||
@@ -1280,7 +1280,7 @@ struct xfrm6_tunnel { | |||
1280 | }; | 1280 | }; |
1281 | 1281 | ||
1282 | extern void xfrm_init(void); | 1282 | extern void xfrm_init(void); |
1283 | extern void xfrm4_init(void); | 1283 | extern void xfrm4_init(int rt_hash_size); |
1284 | extern int xfrm_state_init(struct net *net); | 1284 | extern int xfrm_state_init(struct net *net); |
1285 | extern void xfrm_state_fini(struct net *net); | 1285 | extern void xfrm_state_fini(struct net *net); |
1286 | extern void xfrm4_state_init(void); | 1286 | extern void xfrm4_state_init(void); |
diff --git a/include/pcmcia/ss.h b/include/pcmcia/ss.h index 9b4ac9385f5d..9a3b49865173 100644 --- a/include/pcmcia/ss.h +++ b/include/pcmcia/ss.h | |||
@@ -90,14 +90,14 @@ typedef struct pccard_io_map { | |||
90 | u_char map; | 90 | u_char map; |
91 | u_char flags; | 91 | u_char flags; |
92 | u_short speed; | 92 | u_short speed; |
93 | u_int start, stop; | 93 | phys_addr_t start, stop; |
94 | } pccard_io_map; | 94 | } pccard_io_map; |
95 | 95 | ||
96 | typedef struct pccard_mem_map { | 96 | typedef struct pccard_mem_map { |
97 | u_char map; | 97 | u_char map; |
98 | u_char flags; | 98 | u_char flags; |
99 | u_short speed; | 99 | u_short speed; |
100 | u_long static_start; | 100 | phys_addr_t static_start; |
101 | u_int card_start; | 101 | u_int card_start; |
102 | struct resource *res; | 102 | struct resource *res; |
103 | } pccard_mem_map; | 103 | } pccard_mem_map; |
diff --git a/include/rdma/ib_cm.h b/include/rdma/ib_cm.h index 938858304300..c8f94e8db69c 100644 --- a/include/rdma/ib_cm.h +++ b/include/rdma/ib_cm.h | |||
@@ -482,7 +482,7 @@ int ib_send_cm_rej(struct ib_cm_id *cm_id, | |||
482 | * message. | 482 | * message. |
483 | * @cm_id: Connection identifier associated with the connection message. | 483 | * @cm_id: Connection identifier associated with the connection message. |
484 | * @service_timeout: The lower 5-bits specify the maximum time required for | 484 | * @service_timeout: The lower 5-bits specify the maximum time required for |
485 | * the sender to reply to to the connection message. The upper 3-bits | 485 | * the sender to reply to the connection message. The upper 3-bits |
486 | * specify additional control flags. | 486 | * specify additional control flags. |
487 | * @private_data: Optional user-defined private data sent with the | 487 | * @private_data: Optional user-defined private data sent with the |
488 | * message receipt acknowledgement. | 488 | * message receipt acknowledgement. |
diff --git a/include/scsi/fc/fc_fc2.h b/include/scsi/fc/fc_fc2.h index cff8a8c22f50..f87777d0d5bd 100644 --- a/include/scsi/fc/fc_fc2.h +++ b/include/scsi/fc/fc_fc2.h | |||
@@ -92,8 +92,7 @@ struct fc_esb { | |||
92 | __u8 _esb_resvd[4]; | 92 | __u8 _esb_resvd[4]; |
93 | __u8 esb_service_params[112]; /* TBD */ | 93 | __u8 esb_service_params[112]; /* TBD */ |
94 | __u8 esb_seq_status[8]; /* sequence statuses, 8 bytes each */ | 94 | __u8 esb_seq_status[8]; /* sequence statuses, 8 bytes each */ |
95 | } __attribute__((packed));; | 95 | } __attribute__((packed)); |
96 | |||
97 | 96 | ||
98 | /* | 97 | /* |
99 | * Define expected size for ASSERTs. | 98 | * Define expected size for ASSERTs. |
diff --git a/include/scsi/fc/fc_gs.h b/include/scsi/fc/fc_gs.h index ffab0272c65a..324dd0e3c622 100644 --- a/include/scsi/fc/fc_gs.h +++ b/include/scsi/fc/fc_gs.h | |||
@@ -87,6 +87,7 @@ enum fc_ct_explan { | |||
87 | FC_FS_EXP_PNAM = 0x02, /* port name not registered */ | 87 | FC_FS_EXP_PNAM = 0x02, /* port name not registered */ |
88 | FC_FS_EXP_NNAM = 0x03, /* node name not registered */ | 88 | FC_FS_EXP_NNAM = 0x03, /* node name not registered */ |
89 | FC_FS_EXP_COS = 0x04, /* class of service not registered */ | 89 | FC_FS_EXP_COS = 0x04, /* class of service not registered */ |
90 | FC_FS_EXP_FTNR = 0x07, /* FC-4 types not registered */ | ||
90 | /* definitions not complete */ | 91 | /* definitions not complete */ |
91 | }; | 92 | }; |
92 | 93 | ||
diff --git a/include/scsi/fc_encode.h b/include/scsi/fc_encode.h index a0ff61c3e935..27dad703824f 100644 --- a/include/scsi/fc_encode.h +++ b/include/scsi/fc_encode.h | |||
@@ -32,6 +32,7 @@ struct fc_ct_req { | |||
32 | struct fc_ns_gid_ft gid; | 32 | struct fc_ns_gid_ft gid; |
33 | struct fc_ns_rn_id rn; | 33 | struct fc_ns_rn_id rn; |
34 | struct fc_ns_rft rft; | 34 | struct fc_ns_rft rft; |
35 | struct fc_ns_fid fid; | ||
35 | } payload; | 36 | } payload; |
36 | }; | 37 | }; |
37 | 38 | ||
@@ -57,6 +58,23 @@ static inline void fc_fill_fc_hdr(struct fc_frame *fp, enum fc_rctl r_ctl, | |||
57 | } | 58 | } |
58 | 59 | ||
59 | /** | 60 | /** |
61 | * fc_adisc_fill() - Fill in adisc request frame | ||
62 | * @lport: local port. | ||
63 | * @fp: fc frame where payload will be placed. | ||
64 | */ | ||
65 | static inline void fc_adisc_fill(struct fc_lport *lport, struct fc_frame *fp) | ||
66 | { | ||
67 | struct fc_els_adisc *adisc; | ||
68 | |||
69 | adisc = fc_frame_payload_get(fp, sizeof(*adisc)); | ||
70 | memset(adisc, 0, sizeof(*adisc)); | ||
71 | adisc->adisc_cmd = ELS_ADISC; | ||
72 | put_unaligned_be64(lport->wwpn, &adisc->adisc_wwpn); | ||
73 | put_unaligned_be64(lport->wwnn, &adisc->adisc_wwnn); | ||
74 | hton24(adisc->adisc_port_id, fc_host_port_id(lport->host)); | ||
75 | } | ||
76 | |||
77 | /** | ||
60 | * fc_ct_hdr_fill- fills ct header and reset ct payload | 78 | * fc_ct_hdr_fill- fills ct header and reset ct payload |
61 | * returns pointer to ct request. | 79 | * returns pointer to ct request. |
62 | */ | 80 | */ |
@@ -77,10 +95,17 @@ static inline struct fc_ct_req *fc_ct_hdr_fill(const struct fc_frame *fp, | |||
77 | } | 95 | } |
78 | 96 | ||
79 | /** | 97 | /** |
80 | * fc_ct_fill - Fill in a name service request frame | 98 | * fc_ct_fill() - Fill in a name service request frame |
99 | * @lport: local port. | ||
100 | * @fc_id: FC_ID of non-destination rport for GPN_ID and similar inquiries. | ||
101 | * @fp: frame to contain payload. | ||
102 | * @op: CT opcode. | ||
103 | * @r_ctl: pointer to FC header R_CTL. | ||
104 | * @fh_type: pointer to FC-4 type. | ||
81 | */ | 105 | */ |
82 | static inline int fc_ct_fill(struct fc_lport *lport, struct fc_frame *fp, | 106 | static inline int fc_ct_fill(struct fc_lport *lport, |
83 | unsigned int op, enum fc_rctl *r_ctl, u32 *did, | 107 | u32 fc_id, struct fc_frame *fp, |
108 | unsigned int op, enum fc_rctl *r_ctl, | ||
84 | enum fc_fh_type *fh_type) | 109 | enum fc_fh_type *fh_type) |
85 | { | 110 | { |
86 | struct fc_ct_req *ct; | 111 | struct fc_ct_req *ct; |
@@ -91,6 +116,11 @@ static inline int fc_ct_fill(struct fc_lport *lport, struct fc_frame *fp, | |||
91 | ct->payload.gid.fn_fc4_type = FC_TYPE_FCP; | 116 | ct->payload.gid.fn_fc4_type = FC_TYPE_FCP; |
92 | break; | 117 | break; |
93 | 118 | ||
119 | case FC_NS_GPN_ID: | ||
120 | ct = fc_ct_hdr_fill(fp, op, sizeof(struct fc_ns_fid)); | ||
121 | hton24(ct->payload.fid.fp_fid, fc_id); | ||
122 | break; | ||
123 | |||
94 | case FC_NS_RFT_ID: | 124 | case FC_NS_RFT_ID: |
95 | ct = fc_ct_hdr_fill(fp, op, sizeof(struct fc_ns_rft)); | 125 | ct = fc_ct_hdr_fill(fp, op, sizeof(struct fc_ns_rft)); |
96 | hton24(ct->payload.rft.fid.fp_fid, | 126 | hton24(ct->payload.rft.fid.fp_fid, |
@@ -110,7 +140,6 @@ static inline int fc_ct_fill(struct fc_lport *lport, struct fc_frame *fp, | |||
110 | return -EINVAL; | 140 | return -EINVAL; |
111 | } | 141 | } |
112 | *r_ctl = FC_RCTL_DD_UNSOL_CTL; | 142 | *r_ctl = FC_RCTL_DD_UNSOL_CTL; |
113 | *did = FC_FID_DIR_SERV; | ||
114 | *fh_type = FC_TYPE_CT; | 143 | *fh_type = FC_TYPE_CT; |
115 | return 0; | 144 | return 0; |
116 | } | 145 | } |
@@ -249,51 +278,42 @@ static inline void fc_scr_fill(struct fc_lport *lport, struct fc_frame *fp) | |||
249 | /** | 278 | /** |
250 | * fc_els_fill - Fill in an ELS request frame | 279 | * fc_els_fill - Fill in an ELS request frame |
251 | */ | 280 | */ |
252 | static inline int fc_els_fill(struct fc_lport *lport, struct fc_rport *rport, | 281 | static inline int fc_els_fill(struct fc_lport *lport, |
282 | u32 did, | ||
253 | struct fc_frame *fp, unsigned int op, | 283 | struct fc_frame *fp, unsigned int op, |
254 | enum fc_rctl *r_ctl, u32 *did, enum fc_fh_type *fh_type) | 284 | enum fc_rctl *r_ctl, enum fc_fh_type *fh_type) |
255 | { | 285 | { |
256 | switch (op) { | 286 | switch (op) { |
287 | case ELS_ADISC: | ||
288 | fc_adisc_fill(lport, fp); | ||
289 | break; | ||
290 | |||
257 | case ELS_PLOGI: | 291 | case ELS_PLOGI: |
258 | fc_plogi_fill(lport, fp, ELS_PLOGI); | 292 | fc_plogi_fill(lport, fp, ELS_PLOGI); |
259 | *did = rport->port_id; | ||
260 | break; | 293 | break; |
261 | 294 | ||
262 | case ELS_FLOGI: | 295 | case ELS_FLOGI: |
263 | fc_flogi_fill(lport, fp); | 296 | fc_flogi_fill(lport, fp); |
264 | *did = FC_FID_FLOGI; | ||
265 | break; | 297 | break; |
266 | 298 | ||
267 | case ELS_LOGO: | 299 | case ELS_LOGO: |
268 | fc_logo_fill(lport, fp); | 300 | fc_logo_fill(lport, fp); |
269 | *did = FC_FID_FLOGI; | ||
270 | /* | ||
271 | * if rport is valid then it | ||
272 | * is port logo, therefore | ||
273 | * set did to rport id. | ||
274 | */ | ||
275 | if (rport) | ||
276 | *did = rport->port_id; | ||
277 | break; | 301 | break; |
278 | 302 | ||
279 | case ELS_RTV: | 303 | case ELS_RTV: |
280 | fc_rtv_fill(lport, fp); | 304 | fc_rtv_fill(lport, fp); |
281 | *did = rport->port_id; | ||
282 | break; | 305 | break; |
283 | 306 | ||
284 | case ELS_REC: | 307 | case ELS_REC: |
285 | fc_rec_fill(lport, fp); | 308 | fc_rec_fill(lport, fp); |
286 | *did = rport->port_id; | ||
287 | break; | 309 | break; |
288 | 310 | ||
289 | case ELS_PRLI: | 311 | case ELS_PRLI: |
290 | fc_prli_fill(lport, fp); | 312 | fc_prli_fill(lport, fp); |
291 | *did = rport->port_id; | ||
292 | break; | 313 | break; |
293 | 314 | ||
294 | case ELS_SCR: | 315 | case ELS_SCR: |
295 | fc_scr_fill(lport, fp); | 316 | fc_scr_fill(lport, fp); |
296 | *did = FC_FID_FCTRL; | ||
297 | break; | 317 | break; |
298 | 318 | ||
299 | default: | 319 | default: |
diff --git a/include/scsi/fc_frame.h b/include/scsi/fc_frame.h index 59511057cee0..c35d2383cc26 100644 --- a/include/scsi/fc_frame.h +++ b/include/scsi/fc_frame.h | |||
@@ -37,13 +37,6 @@ | |||
37 | #define FC_FRAME_HEADROOM 32 /* headroom for VLAN + FCoE headers */ | 37 | #define FC_FRAME_HEADROOM 32 /* headroom for VLAN + FCoE headers */ |
38 | #define FC_FRAME_TAILROOM 8 /* trailer space for FCoE */ | 38 | #define FC_FRAME_TAILROOM 8 /* trailer space for FCoE */ |
39 | 39 | ||
40 | /* | ||
41 | * Information about an individual fibre channel frame received or to be sent. | ||
42 | * The buffer may be in up to 4 additional non-contiguous sections, | ||
43 | * but the linear section must hold the frame header. | ||
44 | */ | ||
45 | #define FC_FRAME_SG_LEN 4 /* scatter/gather list maximum length */ | ||
46 | |||
47 | #define fp_skb(fp) (&((fp)->skb)) | 40 | #define fp_skb(fp) (&((fp)->skb)) |
48 | #define fr_hdr(fp) ((fp)->skb.data) | 41 | #define fr_hdr(fp) ((fp)->skb.data) |
49 | #define fr_len(fp) ((fp)->skb.len) | 42 | #define fr_len(fp) ((fp)->skb.len) |
diff --git a/include/scsi/iscsi_if.h b/include/scsi/iscsi_if.h index 4426f00da5ff..d67dda2b6aa0 100644 --- a/include/scsi/iscsi_if.h +++ b/include/scsi/iscsi_if.h | |||
@@ -262,6 +262,7 @@ enum iscsi_err { | |||
262 | ISCSI_ERR_NO_SCSI_CMD = ISCSI_ERR_BASE + 17, | 262 | ISCSI_ERR_NO_SCSI_CMD = ISCSI_ERR_BASE + 17, |
263 | ISCSI_ERR_INVALID_HOST = ISCSI_ERR_BASE + 18, | 263 | ISCSI_ERR_INVALID_HOST = ISCSI_ERR_BASE + 18, |
264 | ISCSI_ERR_XMIT_FAILED = ISCSI_ERR_BASE + 19, | 264 | ISCSI_ERR_XMIT_FAILED = ISCSI_ERR_BASE + 19, |
265 | ISCSI_ERR_TCP_CONN_CLOSE = ISCSI_ERR_BASE + 20, | ||
265 | }; | 266 | }; |
266 | 267 | ||
267 | /* | 268 | /* |
diff --git a/include/scsi/libfc.h b/include/scsi/libfc.h index b92584a8843a..65dc9aacbf70 100644 --- a/include/scsi/libfc.h +++ b/include/scsi/libfc.h | |||
@@ -51,55 +51,49 @@ do { \ | |||
51 | do { \ | 51 | do { \ |
52 | CMD; \ | 52 | CMD; \ |
53 | } while (0); \ | 53 | } while (0); \ |
54 | } while (0); | 54 | } while (0) |
55 | 55 | ||
56 | #define FC_LIBFC_DBG(fmt, args...) \ | 56 | #define FC_LIBFC_DBG(fmt, args...) \ |
57 | FC_CHECK_LOGGING(FC_LIBFC_LOGGING, \ | 57 | FC_CHECK_LOGGING(FC_LIBFC_LOGGING, \ |
58 | printk(KERN_INFO "libfc: " fmt, ##args);) | 58 | printk(KERN_INFO "libfc: " fmt, ##args)) |
59 | 59 | ||
60 | #define FC_LPORT_DBG(lport, fmt, args...) \ | 60 | #define FC_LPORT_DBG(lport, fmt, args...) \ |
61 | FC_CHECK_LOGGING(FC_LPORT_LOGGING, \ | 61 | FC_CHECK_LOGGING(FC_LPORT_LOGGING, \ |
62 | printk(KERN_INFO "lport: %6x: " fmt, \ | 62 | printk(KERN_INFO "host%u: lport %6x: " fmt, \ |
63 | fc_host_port_id(lport->host), ##args);) | 63 | (lport)->host->host_no, \ |
64 | fc_host_port_id((lport)->host), ##args)) | ||
64 | 65 | ||
65 | #define FC_DISC_DBG(disc, fmt, args...) \ | 66 | #define FC_DISC_DBG(disc, fmt, args...) \ |
66 | FC_CHECK_LOGGING(FC_DISC_LOGGING, \ | 67 | FC_CHECK_LOGGING(FC_DISC_LOGGING, \ |
67 | printk(KERN_INFO "disc: %6x: " fmt, \ | 68 | printk(KERN_INFO "host%u: disc: " fmt, \ |
68 | fc_host_port_id(disc->lport->host), \ | 69 | (disc)->lport->host->host_no, \ |
69 | ##args);) | 70 | ##args)) |
70 | 71 | ||
71 | #define FC_RPORT_DBG(rport, fmt, args...) \ | 72 | #define FC_RPORT_ID_DBG(lport, port_id, fmt, args...) \ |
72 | do { \ | ||
73 | struct fc_rport_libfc_priv *rdata = rport->dd_data; \ | ||
74 | struct fc_lport *lport = rdata->local_port; \ | ||
75 | FC_CHECK_LOGGING(FC_RPORT_LOGGING, \ | 73 | FC_CHECK_LOGGING(FC_RPORT_LOGGING, \ |
76 | printk(KERN_INFO "rport: %6x: %6x: " fmt, \ | 74 | printk(KERN_INFO "host%u: rport %6x: " fmt, \ |
77 | fc_host_port_id(lport->host), \ | 75 | (lport)->host->host_no, \ |
78 | rport->port_id, ##args);) \ | 76 | (port_id), ##args)) |
79 | } while (0); | 77 | |
78 | #define FC_RPORT_DBG(rdata, fmt, args...) \ | ||
79 | FC_RPORT_ID_DBG((rdata)->local_port, (rdata)->ids.port_id, fmt, ##args) | ||
80 | 80 | ||
81 | #define FC_FCP_DBG(pkt, fmt, args...) \ | 81 | #define FC_FCP_DBG(pkt, fmt, args...) \ |
82 | FC_CHECK_LOGGING(FC_FCP_LOGGING, \ | 82 | FC_CHECK_LOGGING(FC_FCP_LOGGING, \ |
83 | printk(KERN_INFO "fcp: %6x: %6x: " fmt, \ | 83 | printk(KERN_INFO "host%u: fcp: %6x: " fmt, \ |
84 | fc_host_port_id(pkt->lp->host), \ | 84 | (pkt)->lp->host->host_no, \ |
85 | pkt->rport->port_id, ##args);) | 85 | pkt->rport->port_id, ##args)) |
86 | |||
87 | #define FC_EM_DBG(em, fmt, args...) \ | ||
88 | FC_CHECK_LOGGING(FC_EM_LOGGING, \ | ||
89 | printk(KERN_INFO "em: %6x: " fmt, \ | ||
90 | fc_host_port_id(em->lp->host), \ | ||
91 | ##args);) | ||
92 | 86 | ||
93 | #define FC_EXCH_DBG(exch, fmt, args...) \ | 87 | #define FC_EXCH_DBG(exch, fmt, args...) \ |
94 | FC_CHECK_LOGGING(FC_EXCH_LOGGING, \ | 88 | FC_CHECK_LOGGING(FC_EXCH_LOGGING, \ |
95 | printk(KERN_INFO "exch: %6x: %4x: " fmt, \ | 89 | printk(KERN_INFO "host%u: xid %4x: " fmt, \ |
96 | fc_host_port_id(exch->lp->host), \ | 90 | (exch)->lp->host->host_no, \ |
97 | exch->xid, ##args);) | 91 | exch->xid, ##args)) |
98 | 92 | ||
99 | #define FC_SCSI_DBG(lport, fmt, args...) \ | 93 | #define FC_SCSI_DBG(lport, fmt, args...) \ |
100 | FC_CHECK_LOGGING(FC_SCSI_LOGGING, \ | 94 | FC_CHECK_LOGGING(FC_SCSI_LOGGING, \ |
101 | printk(KERN_INFO "scsi: %6x: " fmt, \ | 95 | printk(KERN_INFO "host%u: scsi: " fmt, \ |
102 | fc_host_port_id(lport->host), ##args);) | 96 | (lport)->host->host_no, ##args)) |
103 | 97 | ||
104 | /* | 98 | /* |
105 | * libfc error codes | 99 | * libfc error codes |
@@ -125,7 +119,7 @@ do { \ | |||
125 | * FC HBA status | 119 | * FC HBA status |
126 | */ | 120 | */ |
127 | enum fc_lport_state { | 121 | enum fc_lport_state { |
128 | LPORT_ST_NONE = 0, | 122 | LPORT_ST_DISABLED = 0, |
129 | LPORT_ST_FLOGI, | 123 | LPORT_ST_FLOGI, |
130 | LPORT_ST_DNS, | 124 | LPORT_ST_DNS, |
131 | LPORT_ST_RPN_ID, | 125 | LPORT_ST_RPN_ID, |
@@ -143,53 +137,74 @@ enum fc_disc_event { | |||
143 | }; | 137 | }; |
144 | 138 | ||
145 | enum fc_rport_state { | 139 | enum fc_rport_state { |
146 | RPORT_ST_NONE = 0, | ||
147 | RPORT_ST_INIT, /* initialized */ | 140 | RPORT_ST_INIT, /* initialized */ |
148 | RPORT_ST_PLOGI, /* waiting for PLOGI completion */ | 141 | RPORT_ST_PLOGI, /* waiting for PLOGI completion */ |
149 | RPORT_ST_PRLI, /* waiting for PRLI completion */ | 142 | RPORT_ST_PRLI, /* waiting for PRLI completion */ |
150 | RPORT_ST_RTV, /* waiting for RTV completion */ | 143 | RPORT_ST_RTV, /* waiting for RTV completion */ |
151 | RPORT_ST_READY, /* ready for use */ | 144 | RPORT_ST_READY, /* ready for use */ |
152 | RPORT_ST_LOGO, /* port logout sent */ | 145 | RPORT_ST_LOGO, /* port logout sent */ |
153 | }; | 146 | RPORT_ST_ADISC, /* Discover Address sent */ |
154 | 147 | RPORT_ST_DELETE, /* port being deleted */ | |
155 | enum fc_rport_trans_state { | ||
156 | FC_PORTSTATE_ROGUE, | ||
157 | FC_PORTSTATE_REAL, | ||
158 | }; | 148 | }; |
159 | 149 | ||
160 | /** | 150 | /** |
161 | * struct fc_disc_port - temporary discovery port to hold rport identifiers | 151 | * struct fc_disc_port - temporary discovery port to hold rport identifiers |
162 | * @lp: Fibre Channel host port instance | 152 | * @lp: Fibre Channel host port instance |
163 | * @peers: node for list management during discovery and RSCN processing | 153 | * @peers: Node for list management during discovery and RSCN processing |
164 | * @ids: identifiers structure to pass to fc_remote_port_add() | 154 | * @rport_work: Work struct for starting the rport state machine |
165 | * @rport_work: work struct for starting the rport state machine | 155 | * @port_id: Port ID of the discovered port |
166 | */ | 156 | */ |
167 | struct fc_disc_port { | 157 | struct fc_disc_port { |
168 | struct fc_lport *lp; | 158 | struct fc_lport *lp; |
169 | struct list_head peers; | 159 | struct list_head peers; |
170 | struct fc_rport_identifiers ids; | ||
171 | struct work_struct rport_work; | 160 | struct work_struct rport_work; |
161 | u32 port_id; | ||
172 | }; | 162 | }; |
173 | 163 | ||
174 | enum fc_rport_event { | 164 | enum fc_rport_event { |
175 | RPORT_EV_NONE = 0, | 165 | RPORT_EV_NONE = 0, |
176 | RPORT_EV_CREATED, | 166 | RPORT_EV_READY, |
177 | RPORT_EV_FAILED, | 167 | RPORT_EV_FAILED, |
178 | RPORT_EV_STOP, | 168 | RPORT_EV_STOP, |
179 | RPORT_EV_LOGO | 169 | RPORT_EV_LOGO |
180 | }; | 170 | }; |
181 | 171 | ||
172 | struct fc_rport_priv; | ||
173 | |||
182 | struct fc_rport_operations { | 174 | struct fc_rport_operations { |
183 | void (*event_callback)(struct fc_lport *, struct fc_rport *, | 175 | void (*event_callback)(struct fc_lport *, struct fc_rport_priv *, |
184 | enum fc_rport_event); | 176 | enum fc_rport_event); |
185 | }; | 177 | }; |
186 | 178 | ||
187 | /** | 179 | /** |
188 | * struct fc_rport_libfc_priv - libfc internal information about a remote port | 180 | * struct fc_rport_libfc_priv - libfc internal information about a remote port |
189 | * @local_port: Fibre Channel host port instance | 181 | * @local_port: Fibre Channel host port instance |
182 | * @rp_state: indicates READY for I/O or DELETE when blocked. | ||
183 | * @flags: REC and RETRY supported flags | ||
184 | * @e_d_tov: error detect timeout value (in msec) | ||
185 | * @r_a_tov: resource allocation timeout value (in msec) | ||
186 | */ | ||
187 | struct fc_rport_libfc_priv { | ||
188 | struct fc_lport *local_port; | ||
189 | enum fc_rport_state rp_state; | ||
190 | u16 flags; | ||
191 | #define FC_RP_FLAGS_REC_SUPPORTED (1 << 0) | ||
192 | #define FC_RP_FLAGS_RETRY (1 << 1) | ||
193 | unsigned int e_d_tov; | ||
194 | unsigned int r_a_tov; | ||
195 | }; | ||
196 | |||
197 | /** | ||
198 | * struct fc_rport_priv - libfc rport and discovery info about a remote port | ||
199 | * @local_port: Fibre Channel host port instance | ||
200 | * @rport: transport remote port | ||
201 | * @kref: reference counter | ||
190 | * @rp_state: state tracks progress of PLOGI, PRLI, and RTV exchanges | 202 | * @rp_state: state tracks progress of PLOGI, PRLI, and RTV exchanges |
203 | * @ids: remote port identifiers and roles | ||
191 | * @flags: REC and RETRY supported flags | 204 | * @flags: REC and RETRY supported flags |
192 | * @max_seq: maximum number of concurrent sequences | 205 | * @max_seq: maximum number of concurrent sequences |
206 | * @disc_id: discovery identifier | ||
207 | * @maxframe_size: maximum frame size | ||
193 | * @retries: retry count in current state | 208 | * @retries: retry count in current state |
194 | * @e_d_tov: error detect timeout value (in msec) | 209 | * @e_d_tov: error detect timeout value (in msec) |
195 | * @r_a_tov: resource allocation timeout value (in msec) | 210 | * @r_a_tov: resource allocation timeout value (in msec) |
@@ -197,38 +212,28 @@ struct fc_rport_operations { | |||
197 | * @retry_work: | 212 | * @retry_work: |
198 | * @event_callback: Callback for rport READY, FAILED or LOGO | 213 | * @event_callback: Callback for rport READY, FAILED or LOGO |
199 | */ | 214 | */ |
200 | struct fc_rport_libfc_priv { | 215 | struct fc_rport_priv { |
201 | struct fc_lport *local_port; | 216 | struct fc_lport *local_port; |
217 | struct fc_rport *rport; | ||
218 | struct kref kref; | ||
202 | enum fc_rport_state rp_state; | 219 | enum fc_rport_state rp_state; |
220 | struct fc_rport_identifiers ids; | ||
203 | u16 flags; | 221 | u16 flags; |
204 | #define FC_RP_FLAGS_REC_SUPPORTED (1 << 0) | ||
205 | #define FC_RP_FLAGS_RETRY (1 << 1) | ||
206 | u16 max_seq; | 222 | u16 max_seq; |
223 | u16 disc_id; | ||
224 | u16 maxframe_size; | ||
207 | unsigned int retries; | 225 | unsigned int retries; |
208 | unsigned int e_d_tov; | 226 | unsigned int e_d_tov; |
209 | unsigned int r_a_tov; | 227 | unsigned int r_a_tov; |
210 | enum fc_rport_trans_state trans_state; | ||
211 | struct mutex rp_mutex; | 228 | struct mutex rp_mutex; |
212 | struct delayed_work retry_work; | 229 | struct delayed_work retry_work; |
213 | enum fc_rport_event event; | 230 | enum fc_rport_event event; |
214 | struct fc_rport_operations *ops; | 231 | struct fc_rport_operations *ops; |
215 | struct list_head peers; | 232 | struct list_head peers; |
216 | struct work_struct event_work; | 233 | struct work_struct event_work; |
234 | u32 supported_classes; | ||
217 | }; | 235 | }; |
218 | 236 | ||
219 | #define PRIV_TO_RPORT(x) \ | ||
220 | (struct fc_rport *)((void *)x - sizeof(struct fc_rport)); | ||
221 | #define RPORT_TO_PRIV(x) \ | ||
222 | (struct fc_rport_libfc_priv *)((void *)x + sizeof(struct fc_rport)); | ||
223 | |||
224 | struct fc_rport *fc_rport_rogue_create(struct fc_disc_port *); | ||
225 | |||
226 | static inline void fc_rport_set_name(struct fc_rport *rport, u64 wwpn, u64 wwnn) | ||
227 | { | ||
228 | rport->node_name = wwnn; | ||
229 | rport->port_name = wwpn; | ||
230 | } | ||
231 | |||
232 | /* | 237 | /* |
233 | * fcoe stats structure | 238 | * fcoe stats structure |
234 | */ | 239 | */ |
@@ -344,6 +349,8 @@ static inline bool fc_fcp_is_read(const struct fc_fcp_pkt *fsp) | |||
344 | */ | 349 | */ |
345 | 350 | ||
346 | struct fc_exch_mgr; | 351 | struct fc_exch_mgr; |
352 | struct fc_exch_mgr_anchor; | ||
353 | extern u16 fc_cpu_mask; /* cpu mask for possible cpus */ | ||
347 | 354 | ||
348 | /* | 355 | /* |
349 | * Sequence. | 356 | * Sequence. |
@@ -368,6 +375,7 @@ struct fc_seq { | |||
368 | */ | 375 | */ |
369 | struct fc_exch { | 376 | struct fc_exch { |
370 | struct fc_exch_mgr *em; /* exchange manager */ | 377 | struct fc_exch_mgr *em; /* exchange manager */ |
378 | struct fc_exch_pool *pool; /* per cpu exches pool */ | ||
371 | u32 state; /* internal driver state */ | 379 | u32 state; /* internal driver state */ |
372 | u16 xid; /* our exchange ID */ | 380 | u16 xid; /* our exchange ID */ |
373 | struct list_head ex_list; /* free or busy list linkage */ | 381 | struct list_head ex_list; /* free or busy list linkage */ |
@@ -415,7 +423,7 @@ struct libfc_function_template { | |||
415 | * STATUS: OPTIONAL | 423 | * STATUS: OPTIONAL |
416 | */ | 424 | */ |
417 | struct fc_seq *(*elsct_send)(struct fc_lport *lport, | 425 | struct fc_seq *(*elsct_send)(struct fc_lport *lport, |
418 | struct fc_rport *rport, | 426 | u32 did, |
419 | struct fc_frame *fp, | 427 | struct fc_frame *fp, |
420 | unsigned int op, | 428 | unsigned int op, |
421 | void (*resp)(struct fc_seq *, | 429 | void (*resp)(struct fc_seq *, |
@@ -519,25 +527,6 @@ struct libfc_function_template { | |||
519 | void (*exch_done)(struct fc_seq *sp); | 527 | void (*exch_done)(struct fc_seq *sp); |
520 | 528 | ||
521 | /* | 529 | /* |
522 | * Assigns a EM and a free XID for an new exchange and then | ||
523 | * allocates a new exchange and sequence pair. | ||
524 | * The fp can be used to determine free XID. | ||
525 | * | ||
526 | * STATUS: OPTIONAL | ||
527 | */ | ||
528 | struct fc_exch *(*exch_get)(struct fc_lport *lp, struct fc_frame *fp); | ||
529 | |||
530 | /* | ||
531 | * Release previously assigned XID by exch_get API. | ||
532 | * The LLD may implement this if XID is assigned by LLD | ||
533 | * in exch_get(). | ||
534 | * | ||
535 | * STATUS: OPTIONAL | ||
536 | */ | ||
537 | void (*exch_put)(struct fc_lport *lp, struct fc_exch_mgr *mp, | ||
538 | u16 ex_id); | ||
539 | |||
540 | /* | ||
541 | * Start a new sequence on the same exchange/sequence tuple. | 530 | * Start a new sequence on the same exchange/sequence tuple. |
542 | * | 531 | * |
543 | * STATUS: OPTIONAL | 532 | * STATUS: OPTIONAL |
@@ -577,9 +566,11 @@ struct libfc_function_template { | |||
577 | int (*lport_reset)(struct fc_lport *); | 566 | int (*lport_reset)(struct fc_lport *); |
578 | 567 | ||
579 | /* | 568 | /* |
580 | * Create a remote port | 569 | * Create a remote port with a given port ID |
570 | * | ||
571 | * STATUS: OPTIONAL | ||
581 | */ | 572 | */ |
582 | struct fc_rport *(*rport_create)(struct fc_disc_port *); | 573 | struct fc_rport_priv *(*rport_create)(struct fc_lport *, u32); |
583 | 574 | ||
584 | /* | 575 | /* |
585 | * Initiates the RP state machine. It is called from the LP module. | 576 | * Initiates the RP state machine. It is called from the LP module. |
@@ -592,7 +583,7 @@ struct libfc_function_template { | |||
592 | * | 583 | * |
593 | * STATUS: OPTIONAL | 584 | * STATUS: OPTIONAL |
594 | */ | 585 | */ |
595 | int (*rport_login)(struct fc_rport *rport); | 586 | int (*rport_login)(struct fc_rport_priv *); |
596 | 587 | ||
597 | /* | 588 | /* |
598 | * Logoff, and remove the rport from the transport if | 589 | * Logoff, and remove the rport from the transport if |
@@ -600,7 +591,7 @@ struct libfc_function_template { | |||
600 | * | 591 | * |
601 | * STATUS: OPTIONAL | 592 | * STATUS: OPTIONAL |
602 | */ | 593 | */ |
603 | int (*rport_logoff)(struct fc_rport *rport); | 594 | int (*rport_logoff)(struct fc_rport_priv *); |
604 | 595 | ||
605 | /* | 596 | /* |
606 | * Recieve a request from a remote port. | 597 | * Recieve a request from a remote port. |
@@ -608,14 +599,20 @@ struct libfc_function_template { | |||
608 | * STATUS: OPTIONAL | 599 | * STATUS: OPTIONAL |
609 | */ | 600 | */ |
610 | void (*rport_recv_req)(struct fc_seq *, struct fc_frame *, | 601 | void (*rport_recv_req)(struct fc_seq *, struct fc_frame *, |
611 | struct fc_rport *); | 602 | struct fc_lport *); |
612 | 603 | ||
613 | /* | 604 | /* |
614 | * lookup an rport by it's port ID. | 605 | * lookup an rport by it's port ID. |
615 | * | 606 | * |
616 | * STATUS: OPTIONAL | 607 | * STATUS: OPTIONAL |
617 | */ | 608 | */ |
618 | struct fc_rport *(*rport_lookup)(const struct fc_lport *, u32); | 609 | struct fc_rport_priv *(*rport_lookup)(const struct fc_lport *, u32); |
610 | |||
611 | /* | ||
612 | * Destroy an rport after final kref_put(). | ||
613 | * The argument is a pointer to the kref inside the fc_rport_priv. | ||
614 | */ | ||
615 | void (*rport_destroy)(struct kref *); | ||
619 | 616 | ||
620 | /* | 617 | /* |
621 | * Send a fcp cmd from fsp pkt. | 618 | * Send a fcp cmd from fsp pkt. |
@@ -681,18 +678,16 @@ struct libfc_function_template { | |||
681 | /* information used by the discovery layer */ | 678 | /* information used by the discovery layer */ |
682 | struct fc_disc { | 679 | struct fc_disc { |
683 | unsigned char retry_count; | 680 | unsigned char retry_count; |
684 | unsigned char delay; | ||
685 | unsigned char pending; | 681 | unsigned char pending; |
686 | unsigned char requested; | 682 | unsigned char requested; |
687 | unsigned short seq_count; | 683 | unsigned short seq_count; |
688 | unsigned char buf_len; | 684 | unsigned char buf_len; |
689 | enum fc_disc_event event; | 685 | u16 disc_id; |
690 | 686 | ||
691 | void (*disc_callback)(struct fc_lport *, | 687 | void (*disc_callback)(struct fc_lport *, |
692 | enum fc_disc_event); | 688 | enum fc_disc_event); |
693 | 689 | ||
694 | struct list_head rports; | 690 | struct list_head rports; |
695 | struct list_head rogue_rports; | ||
696 | struct fc_lport *lport; | 691 | struct fc_lport *lport; |
697 | struct mutex disc_mutex; | 692 | struct mutex disc_mutex; |
698 | struct fc_gpn_ft_resp partial_buf; /* partial name buffer */ | 693 | struct fc_gpn_ft_resp partial_buf; /* partial name buffer */ |
@@ -704,9 +699,9 @@ struct fc_lport { | |||
704 | 699 | ||
705 | /* Associations */ | 700 | /* Associations */ |
706 | struct Scsi_Host *host; | 701 | struct Scsi_Host *host; |
707 | struct fc_exch_mgr *emp; | 702 | struct list_head ema_list; |
708 | struct fc_rport *dns_rp; | 703 | struct fc_rport_priv *dns_rp; |
709 | struct fc_rport *ptp_rp; | 704 | struct fc_rport_priv *ptp_rp; |
710 | void *scsi_priv; | 705 | void *scsi_priv; |
711 | struct fc_disc disc; | 706 | struct fc_disc disc; |
712 | 707 | ||
@@ -960,6 +955,28 @@ int fc_elsct_init(struct fc_lport *lp); | |||
960 | int fc_exch_init(struct fc_lport *lp); | 955 | int fc_exch_init(struct fc_lport *lp); |
961 | 956 | ||
962 | /* | 957 | /* |
958 | * Adds Exchange Manager (EM) mp to lport. | ||
959 | * | ||
960 | * Adds specified mp to lport using struct fc_exch_mgr_anchor, | ||
961 | * the struct fc_exch_mgr_anchor allows same EM sharing by | ||
962 | * more than one lport with their specified match function, | ||
963 | * the match function is used in allocating exchange from | ||
964 | * added mp. | ||
965 | */ | ||
966 | struct fc_exch_mgr_anchor *fc_exch_mgr_add(struct fc_lport *lport, | ||
967 | struct fc_exch_mgr *mp, | ||
968 | bool (*match)(struct fc_frame *)); | ||
969 | |||
970 | /* | ||
971 | * Deletes Exchange Manager (EM) from lport by removing | ||
972 | * its anchor ema from lport. | ||
973 | * | ||
974 | * If removed anchor ema was the last user of its associated EM | ||
975 | * then also destroys associated EM. | ||
976 | */ | ||
977 | void fc_exch_mgr_del(struct fc_exch_mgr_anchor *ema); | ||
978 | |||
979 | /* | ||
963 | * Allocates an Exchange Manager (EM). | 980 | * Allocates an Exchange Manager (EM). |
964 | * | 981 | * |
965 | * The EM manages exchanges for their allocation and | 982 | * The EM manages exchanges for their allocation and |
@@ -974,27 +991,25 @@ int fc_exch_init(struct fc_lport *lp); | |||
974 | * a new exchange. | 991 | * a new exchange. |
975 | * The LLD may choose to have multiple EMs, | 992 | * The LLD may choose to have multiple EMs, |
976 | * e.g. one EM instance per CPU receive thread in LLD. | 993 | * e.g. one EM instance per CPU receive thread in LLD. |
977 | * The LLD can use exch_get() of struct libfc_function_template | ||
978 | * to specify XID for a new exchange within | ||
979 | * a specified EM instance. | ||
980 | * | 994 | * |
981 | * The em_idx to uniquely identify an EM instance. | 995 | * Specified match function is used in allocating exchanges |
996 | * from newly allocated EM. | ||
982 | */ | 997 | */ |
983 | struct fc_exch_mgr *fc_exch_mgr_alloc(struct fc_lport *lp, | 998 | struct fc_exch_mgr *fc_exch_mgr_alloc(struct fc_lport *lp, |
984 | enum fc_class class, | 999 | enum fc_class class, |
985 | u16 min_xid, | 1000 | u16 min_xid, |
986 | u16 max_xid); | 1001 | u16 max_xid, |
1002 | bool (*match)(struct fc_frame *)); | ||
987 | 1003 | ||
988 | /* | 1004 | /* |
989 | * Free an exchange manager. | 1005 | * Free all exchange managers of a lport. |
990 | */ | 1006 | */ |
991 | void fc_exch_mgr_free(struct fc_exch_mgr *mp); | 1007 | void fc_exch_mgr_free(struct fc_lport *lport); |
992 | 1008 | ||
993 | /* | 1009 | /* |
994 | * Receive a frame on specified local port and exchange manager. | 1010 | * Receive a frame on specified local port and exchange manager. |
995 | */ | 1011 | */ |
996 | void fc_exch_recv(struct fc_lport *lp, struct fc_exch_mgr *mp, | 1012 | void fc_exch_recv(struct fc_lport *lp, struct fc_frame *fp); |
997 | struct fc_frame *fp); | ||
998 | 1013 | ||
999 | /* | 1014 | /* |
1000 | * This function is for exch_seq_send function pointer in | 1015 | * This function is for exch_seq_send function pointer in |
@@ -1036,28 +1051,20 @@ int fc_seq_exch_abort(const struct fc_seq *req_sp, unsigned int timer_msec); | |||
1036 | void fc_exch_done(struct fc_seq *sp); | 1051 | void fc_exch_done(struct fc_seq *sp); |
1037 | 1052 | ||
1038 | /* | 1053 | /* |
1039 | * Assigns a EM and XID for a frame and then allocates | ||
1040 | * a new exchange and sequence pair. | ||
1041 | * The fp can be used to determine free XID. | ||
1042 | */ | ||
1043 | struct fc_exch *fc_exch_get(struct fc_lport *lp, struct fc_frame *fp); | ||
1044 | |||
1045 | /* | ||
1046 | * Allocate a new exchange and sequence pair. | 1054 | * Allocate a new exchange and sequence pair. |
1047 | * if ex_id is zero then next free exchange id | ||
1048 | * from specified exchange manger mp will be assigned. | ||
1049 | */ | 1055 | */ |
1050 | struct fc_exch *fc_exch_alloc(struct fc_exch_mgr *mp, | 1056 | struct fc_exch *fc_exch_alloc(struct fc_lport *lport, struct fc_frame *fp); |
1051 | struct fc_frame *fp, u16 ex_id); | ||
1052 | /* | 1057 | /* |
1053 | * Start a new sequence on the same exchange as the supplied sequence. | 1058 | * Start a new sequence on the same exchange as the supplied sequence. |
1054 | */ | 1059 | */ |
1055 | struct fc_seq *fc_seq_start_next(struct fc_seq *sp); | 1060 | struct fc_seq *fc_seq_start_next(struct fc_seq *sp); |
1056 | 1061 | ||
1062 | |||
1057 | /* | 1063 | /* |
1058 | * Reset an exchange manager, completing all sequences and exchanges. | 1064 | * Reset all EMs of a lport, releasing its all sequences and |
1059 | * If s_id is non-zero, reset only exchanges originating from that FID. | 1065 | * exchanges. If sid is non-zero, then reset only exchanges |
1060 | * If d_id is non-zero, reset only exchanges sending to that FID. | 1066 | * we sourced from that FID. If did is non-zero, reset only |
1067 | * exchanges destined to that FID. | ||
1061 | */ | 1068 | */ |
1062 | void fc_exch_mgr_reset(struct fc_lport *, u32 s_id, u32 d_id); | 1069 | void fc_exch_mgr_reset(struct fc_lport *, u32 s_id, u32 d_id); |
1063 | 1070 | ||
@@ -1078,4 +1085,9 @@ void fc_destroy_exch_mgr(void); | |||
1078 | int fc_setup_rport(void); | 1085 | int fc_setup_rport(void); |
1079 | void fc_destroy_rport(void); | 1086 | void fc_destroy_rport(void); |
1080 | 1087 | ||
1088 | /* | ||
1089 | * Internal libfc functions. | ||
1090 | */ | ||
1091 | const char *fc_els_resp_type(struct fc_frame *); | ||
1092 | |||
1081 | #endif /* _LIBFC_H_ */ | 1093 | #endif /* _LIBFC_H_ */ |
diff --git a/include/scsi/libiscsi.h b/include/scsi/libiscsi.h index 61afeb59a836..887e57e3e223 100644 --- a/include/scsi/libiscsi.h +++ b/include/scsi/libiscsi.h | |||
@@ -390,6 +390,7 @@ extern void iscsi_session_failure(struct iscsi_session *session, | |||
390 | extern int iscsi_conn_get_param(struct iscsi_cls_conn *cls_conn, | 390 | extern int iscsi_conn_get_param(struct iscsi_cls_conn *cls_conn, |
391 | enum iscsi_param param, char *buf); | 391 | enum iscsi_param param, char *buf); |
392 | extern void iscsi_suspend_tx(struct iscsi_conn *conn); | 392 | extern void iscsi_suspend_tx(struct iscsi_conn *conn); |
393 | extern void iscsi_suspend_queue(struct iscsi_conn *conn); | ||
393 | extern void iscsi_conn_queue_work(struct iscsi_conn *conn); | 394 | extern void iscsi_conn_queue_work(struct iscsi_conn *conn); |
394 | 395 | ||
395 | #define iscsi_conn_printk(prefix, _c, fmt, a...) \ | 396 | #define iscsi_conn_printk(prefix, _c, fmt, a...) \ |
@@ -415,6 +416,8 @@ extern struct iscsi_task *iscsi_itt_to_task(struct iscsi_conn *, itt_t); | |||
415 | extern void iscsi_requeue_task(struct iscsi_task *task); | 416 | extern void iscsi_requeue_task(struct iscsi_task *task); |
416 | extern void iscsi_put_task(struct iscsi_task *task); | 417 | extern void iscsi_put_task(struct iscsi_task *task); |
417 | extern void __iscsi_get_task(struct iscsi_task *task); | 418 | extern void __iscsi_get_task(struct iscsi_task *task); |
419 | extern void iscsi_complete_scsi_task(struct iscsi_task *task, | ||
420 | uint32_t exp_cmdsn, uint32_t max_cmdsn); | ||
418 | 421 | ||
419 | /* | 422 | /* |
420 | * generic helpers | 423 | * generic helpers |
diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h index 3f566af3f101..9af48cbf0036 100644 --- a/include/scsi/scsi_device.h +++ b/include/scsi/scsi_device.h | |||
@@ -187,10 +187,13 @@ struct scsi_device_handler { | |||
187 | void (*detach)(struct scsi_device *); | 187 | void (*detach)(struct scsi_device *); |
188 | int (*activate)(struct scsi_device *); | 188 | int (*activate)(struct scsi_device *); |
189 | int (*prep_fn)(struct scsi_device *, struct request *); | 189 | int (*prep_fn)(struct scsi_device *, struct request *); |
190 | int (*set_params)(struct scsi_device *, const char *); | ||
190 | }; | 191 | }; |
191 | 192 | ||
192 | struct scsi_dh_data { | 193 | struct scsi_dh_data { |
193 | struct scsi_device_handler *scsi_dh; | 194 | struct scsi_device_handler *scsi_dh; |
195 | struct scsi_device *sdev; | ||
196 | struct kref kref; | ||
194 | char buf[0]; | 197 | char buf[0]; |
195 | }; | 198 | }; |
196 | 199 | ||
diff --git a/include/scsi/scsi_dh.h b/include/scsi/scsi_dh.h index 33efce20c26c..ff2407405b42 100644 --- a/include/scsi/scsi_dh.h +++ b/include/scsi/scsi_dh.h | |||
@@ -60,6 +60,7 @@ extern int scsi_dh_activate(struct request_queue *); | |||
60 | extern int scsi_dh_handler_exist(const char *); | 60 | extern int scsi_dh_handler_exist(const char *); |
61 | extern int scsi_dh_attach(struct request_queue *, const char *); | 61 | extern int scsi_dh_attach(struct request_queue *, const char *); |
62 | extern void scsi_dh_detach(struct request_queue *); | 62 | extern void scsi_dh_detach(struct request_queue *); |
63 | extern int scsi_dh_set_params(struct request_queue *, const char *); | ||
63 | #else | 64 | #else |
64 | static inline int scsi_dh_activate(struct request_queue *req) | 65 | static inline int scsi_dh_activate(struct request_queue *req) |
65 | { | 66 | { |
@@ -77,4 +78,8 @@ static inline void scsi_dh_detach(struct request_queue *q) | |||
77 | { | 78 | { |
78 | return; | 79 | return; |
79 | } | 80 | } |
81 | static inline int scsi_dh_set_params(struct request_queue *req, const char *params) | ||
82 | { | ||
83 | return -SCSI_DH_NOSYS; | ||
84 | } | ||
80 | #endif | 85 | #endif |
diff --git a/include/sound/ac97_codec.h b/include/sound/ac97_codec.h index 251fc1cd5002..3dae3f799b9b 100644 --- a/include/sound/ac97_codec.h +++ b/include/sound/ac97_codec.h | |||
@@ -32,6 +32,9 @@ | |||
32 | #include "control.h" | 32 | #include "control.h" |
33 | #include "info.h" | 33 | #include "info.h" |
34 | 34 | ||
35 | /* maximum number of devices on the AC97 bus */ | ||
36 | #define AC97_BUS_MAX_DEVICES 4 | ||
37 | |||
35 | /* | 38 | /* |
36 | * AC'97 codec registers | 39 | * AC'97 codec registers |
37 | */ | 40 | */ |
@@ -642,4 +645,10 @@ int snd_ac97_pcm_double_rate_rules(struct snd_pcm_runtime *runtime); | |||
642 | /* ad hoc AC97 device driver access */ | 645 | /* ad hoc AC97 device driver access */ |
643 | extern struct bus_type ac97_bus_type; | 646 | extern struct bus_type ac97_bus_type; |
644 | 647 | ||
648 | /* AC97 platform_data adding function */ | ||
649 | static inline void snd_ac97_dev_add_pdata(struct snd_ac97 *ac97, void *data) | ||
650 | { | ||
651 | ac97->dev.platform_data = data; | ||
652 | } | ||
653 | |||
645 | #endif /* __SOUND_AC97_CODEC_H */ | 654 | #endif /* __SOUND_AC97_CODEC_H */ |
diff --git a/include/sound/asound.h b/include/sound/asound.h index 82aed3f47534..1f57bb92eb5a 100644 --- a/include/sound/asound.h +++ b/include/sound/asound.h | |||
@@ -138,7 +138,7 @@ struct snd_hwdep_dsp_image { | |||
138 | * * | 138 | * * |
139 | *****************************************************************************/ | 139 | *****************************************************************************/ |
140 | 140 | ||
141 | #define SNDRV_PCM_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 9) | 141 | #define SNDRV_PCM_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 10) |
142 | 142 | ||
143 | typedef unsigned long snd_pcm_uframes_t; | 143 | typedef unsigned long snd_pcm_uframes_t; |
144 | typedef signed long snd_pcm_sframes_t; | 144 | typedef signed long snd_pcm_sframes_t; |
diff --git a/include/sound/core.h b/include/sound/core.h index 309cb9659a05..a61499c22b0b 100644 --- a/include/sound/core.h +++ b/include/sound/core.h | |||
@@ -93,15 +93,6 @@ struct snd_device { | |||
93 | 93 | ||
94 | #define snd_device(n) list_entry(n, struct snd_device, list) | 94 | #define snd_device(n) list_entry(n, struct snd_device, list) |
95 | 95 | ||
96 | /* monitor files for graceful shutdown (hotplug) */ | ||
97 | |||
98 | struct snd_monitor_file { | ||
99 | struct file *file; | ||
100 | const struct file_operations *disconnected_f_op; | ||
101 | struct list_head shutdown_list; /* still need to shutdown */ | ||
102 | struct list_head list; /* link of monitor files */ | ||
103 | }; | ||
104 | |||
105 | /* main structure for soundcard */ | 96 | /* main structure for soundcard */ |
106 | 97 | ||
107 | struct snd_card { | 98 | struct snd_card { |
@@ -311,9 +302,7 @@ int snd_component_add(struct snd_card *card, const char *component); | |||
311 | int snd_card_file_add(struct snd_card *card, struct file *file); | 302 | int snd_card_file_add(struct snd_card *card, struct file *file); |
312 | int snd_card_file_remove(struct snd_card *card, struct file *file); | 303 | int snd_card_file_remove(struct snd_card *card, struct file *file); |
313 | 304 | ||
314 | #ifndef snd_card_set_dev | ||
315 | #define snd_card_set_dev(card, devptr) ((card)->dev = (devptr)) | 305 | #define snd_card_set_dev(card, devptr) ((card)->dev = (devptr)) |
316 | #endif | ||
317 | 306 | ||
318 | /* device.c */ | 307 | /* device.c */ |
319 | 308 | ||
@@ -340,18 +329,17 @@ unsigned int snd_dma_pointer(unsigned long dma, unsigned int size); | |||
340 | struct resource; | 329 | struct resource; |
341 | void release_and_free_resource(struct resource *res); | 330 | void release_and_free_resource(struct resource *res); |
342 | 331 | ||
343 | #ifdef CONFIG_SND_VERBOSE_PRINTK | ||
344 | void snd_verbose_printk(const char *file, int line, const char *format, ...) | ||
345 | __attribute__ ((format (printf, 3, 4))); | ||
346 | #endif | ||
347 | #if defined(CONFIG_SND_DEBUG) && defined(CONFIG_SND_VERBOSE_PRINTK) | ||
348 | void snd_verbose_printd(const char *file, int line, const char *format, ...) | ||
349 | __attribute__ ((format (printf, 3, 4))); | ||
350 | #endif | ||
351 | |||
352 | /* --- */ | 332 | /* --- */ |
353 | 333 | ||
354 | #ifdef CONFIG_SND_VERBOSE_PRINTK | 334 | #if defined(CONFIG_SND_DEBUG) || defined(CONFIG_SND_VERBOSE_PRINTK) |
335 | void __snd_printk(unsigned int level, const char *file, int line, | ||
336 | const char *format, ...) | ||
337 | __attribute__ ((format (printf, 4, 5))); | ||
338 | #else | ||
339 | #define __snd_printk(level, file, line, format, args...) \ | ||
340 | printk(format, ##args) | ||
341 | #endif | ||
342 | |||
355 | /** | 343 | /** |
356 | * snd_printk - printk wrapper | 344 | * snd_printk - printk wrapper |
357 | * @fmt: format string | 345 | * @fmt: format string |
@@ -360,15 +348,9 @@ void snd_verbose_printd(const char *file, int line, const char *format, ...) | |||
360 | * when configured with CONFIG_SND_VERBOSE_PRINTK. | 348 | * when configured with CONFIG_SND_VERBOSE_PRINTK. |
361 | */ | 349 | */ |
362 | #define snd_printk(fmt, args...) \ | 350 | #define snd_printk(fmt, args...) \ |
363 | snd_verbose_printk(__FILE__, __LINE__, fmt ,##args) | 351 | __snd_printk(0, __FILE__, __LINE__, fmt, ##args) |
364 | #else | ||
365 | #define snd_printk(fmt, args...) \ | ||
366 | printk(fmt ,##args) | ||
367 | #endif | ||
368 | 352 | ||
369 | #ifdef CONFIG_SND_DEBUG | 353 | #ifdef CONFIG_SND_DEBUG |
370 | |||
371 | #ifdef CONFIG_SND_VERBOSE_PRINTK | ||
372 | /** | 354 | /** |
373 | * snd_printd - debug printk | 355 | * snd_printd - debug printk |
374 | * @fmt: format string | 356 | * @fmt: format string |
@@ -377,11 +359,7 @@ void snd_verbose_printd(const char *file, int line, const char *format, ...) | |||
377 | * Ignored when CONFIG_SND_DEBUG is not set. | 359 | * Ignored when CONFIG_SND_DEBUG is not set. |
378 | */ | 360 | */ |
379 | #define snd_printd(fmt, args...) \ | 361 | #define snd_printd(fmt, args...) \ |
380 | snd_verbose_printd(__FILE__, __LINE__, fmt ,##args) | 362 | __snd_printk(1, __FILE__, __LINE__, fmt, ##args) |
381 | #else | ||
382 | #define snd_printd(fmt, args...) \ | ||
383 | printk(fmt ,##args) | ||
384 | #endif | ||
385 | 363 | ||
386 | /** | 364 | /** |
387 | * snd_BUG - give a BUG warning message and stack trace | 365 | * snd_BUG - give a BUG warning message and stack trace |
@@ -428,9 +406,10 @@ static inline int __snd_bug_on(int cond) | |||
428 | * Works like snd_printk() for debugging purposes. | 406 | * Works like snd_printk() for debugging purposes. |
429 | * Ignored when CONFIG_SND_DEBUG_VERBOSE is not set. | 407 | * Ignored when CONFIG_SND_DEBUG_VERBOSE is not set. |
430 | */ | 408 | */ |
431 | #define snd_printdd(format, args...) snd_printk(format, ##args) | 409 | #define snd_printdd(format, args...) \ |
410 | __snd_printk(2, __FILE__, __LINE__, format, ##args) | ||
432 | #else | 411 | #else |
433 | #define snd_printdd(format, args...) /* nothing */ | 412 | #define snd_printdd(format, args...) do { } while (0) |
434 | #endif | 413 | #endif |
435 | 414 | ||
436 | 415 | ||
@@ -438,12 +417,10 @@ static inline int __snd_bug_on(int cond) | |||
438 | 417 | ||
439 | /* for easier backward-porting */ | 418 | /* for easier backward-porting */ |
440 | #if defined(CONFIG_GAMEPORT) || defined(CONFIG_GAMEPORT_MODULE) | 419 | #if defined(CONFIG_GAMEPORT) || defined(CONFIG_GAMEPORT_MODULE) |
441 | #ifndef gameport_set_dev_parent | ||
442 | #define gameport_set_dev_parent(gp,xdev) ((gp)->dev.parent = (xdev)) | 420 | #define gameport_set_dev_parent(gp,xdev) ((gp)->dev.parent = (xdev)) |
443 | #define gameport_set_port_data(gp,r) ((gp)->port_data = (r)) | 421 | #define gameport_set_port_data(gp,r) ((gp)->port_data = (r)) |
444 | #define gameport_get_port_data(gp) (gp)->port_data | 422 | #define gameport_get_port_data(gp) (gp)->port_data |
445 | #endif | 423 | #endif |
446 | #endif | ||
447 | 424 | ||
448 | /* PCI quirk list helper */ | 425 | /* PCI quirk list helper */ |
449 | struct snd_pci_quirk { | 426 | struct snd_pci_quirk { |
diff --git a/include/sound/info.h b/include/sound/info.h index 7c2ee1a21b00..112e8949e1a7 100644 --- a/include/sound/info.h +++ b/include/sound/info.h | |||
@@ -110,13 +110,13 @@ void snd_card_info_read_oss(struct snd_info_buffer *buffer); | |||
110 | static inline void snd_card_info_read_oss(struct snd_info_buffer *buffer) {} | 110 | static inline void snd_card_info_read_oss(struct snd_info_buffer *buffer) {} |
111 | #endif | 111 | #endif |
112 | 112 | ||
113 | int snd_iprintf(struct snd_info_buffer *buffer, char *fmt, ...) \ | 113 | int snd_iprintf(struct snd_info_buffer *buffer, const char *fmt, ...) \ |
114 | __attribute__ ((format (printf, 2, 3))); | 114 | __attribute__ ((format (printf, 2, 3))); |
115 | int snd_info_init(void); | 115 | int snd_info_init(void); |
116 | int snd_info_done(void); | 116 | int snd_info_done(void); |
117 | 117 | ||
118 | int snd_info_get_line(struct snd_info_buffer *buffer, char *line, int len); | 118 | int snd_info_get_line(struct snd_info_buffer *buffer, char *line, int len); |
119 | char *snd_info_get_str(char *dest, char *src, int len); | 119 | const char *snd_info_get_str(char *dest, const char *src, int len); |
120 | struct snd_info_entry *snd_info_create_module_entry(struct module *module, | 120 | struct snd_info_entry *snd_info_create_module_entry(struct module *module, |
121 | const char *name, | 121 | const char *name, |
122 | struct snd_info_entry *parent); | 122 | struct snd_info_entry *parent); |
diff --git a/include/sound/memalloc.h b/include/sound/memalloc.h index 7ccce94a5255..c42506212649 100644 --- a/include/sound/memalloc.h +++ b/include/sound/memalloc.h | |||
@@ -47,7 +47,11 @@ struct snd_dma_device { | |||
47 | #define SNDRV_DMA_TYPE_UNKNOWN 0 /* not defined */ | 47 | #define SNDRV_DMA_TYPE_UNKNOWN 0 /* not defined */ |
48 | #define SNDRV_DMA_TYPE_CONTINUOUS 1 /* continuous no-DMA memory */ | 48 | #define SNDRV_DMA_TYPE_CONTINUOUS 1 /* continuous no-DMA memory */ |
49 | #define SNDRV_DMA_TYPE_DEV 2 /* generic device continuous */ | 49 | #define SNDRV_DMA_TYPE_DEV 2 /* generic device continuous */ |
50 | #ifdef CONFIG_SND_DMA_SGBUF | ||
50 | #define SNDRV_DMA_TYPE_DEV_SG 3 /* generic device SG-buffer */ | 51 | #define SNDRV_DMA_TYPE_DEV_SG 3 /* generic device SG-buffer */ |
52 | #else | ||
53 | #define SNDRV_DMA_TYPE_DEV_SG SNDRV_DMA_TYPE_DEV /* no SG-buf support */ | ||
54 | #endif | ||
51 | 55 | ||
52 | /* | 56 | /* |
53 | * info for buffer allocation | 57 | * info for buffer allocation |
@@ -60,6 +64,7 @@ struct snd_dma_buffer { | |||
60 | void *private_data; /* private for allocator; don't touch */ | 64 | void *private_data; /* private for allocator; don't touch */ |
61 | }; | 65 | }; |
62 | 66 | ||
67 | #ifdef CONFIG_SND_DMA_SGBUF | ||
63 | /* | 68 | /* |
64 | * Scatter-Gather generic device pages | 69 | * Scatter-Gather generic device pages |
65 | */ | 70 | */ |
@@ -107,6 +112,7 @@ static inline void *snd_sgbuf_get_ptr(struct snd_sg_buf *sgbuf, size_t offset) | |||
107 | { | 112 | { |
108 | return sgbuf->table[offset >> PAGE_SHIFT].buf + offset % PAGE_SIZE; | 113 | return sgbuf->table[offset >> PAGE_SHIFT].buf + offset % PAGE_SIZE; |
109 | } | 114 | } |
115 | #endif /* CONFIG_SND_DMA_SGBUF */ | ||
110 | 116 | ||
111 | /* allocate/release a buffer */ | 117 | /* allocate/release a buffer */ |
112 | int snd_dma_alloc_pages(int type, struct device *dev, size_t size, | 118 | int snd_dma_alloc_pages(int type, struct device *dev, size_t size, |
diff --git a/include/sound/pcm.h b/include/sound/pcm.h index 23893523dc8c..de6d981de5d6 100644 --- a/include/sound/pcm.h +++ b/include/sound/pcm.h | |||
@@ -902,6 +902,7 @@ int snd_pcm_lib_preallocate_pages_for_all(struct snd_pcm *pcm, | |||
902 | int snd_pcm_lib_malloc_pages(struct snd_pcm_substream *substream, size_t size); | 902 | int snd_pcm_lib_malloc_pages(struct snd_pcm_substream *substream, size_t size); |
903 | int snd_pcm_lib_free_pages(struct snd_pcm_substream *substream); | 903 | int snd_pcm_lib_free_pages(struct snd_pcm_substream *substream); |
904 | 904 | ||
905 | #ifdef CONFIG_SND_DMA_SGBUF | ||
905 | /* | 906 | /* |
906 | * SG-buffer handling | 907 | * SG-buffer handling |
907 | */ | 908 | */ |
@@ -927,6 +928,28 @@ struct page *snd_pcm_sgbuf_ops_page(struct snd_pcm_substream *substream, | |||
927 | unsigned int snd_pcm_sgbuf_get_chunk_size(struct snd_pcm_substream *substream, | 928 | unsigned int snd_pcm_sgbuf_get_chunk_size(struct snd_pcm_substream *substream, |
928 | unsigned int ofs, unsigned int size); | 929 | unsigned int ofs, unsigned int size); |
929 | 930 | ||
931 | #else /* !SND_DMA_SGBUF */ | ||
932 | /* | ||
933 | * fake using a continuous buffer | ||
934 | */ | ||
935 | static inline dma_addr_t | ||
936 | snd_pcm_sgbuf_get_addr(struct snd_pcm_substream *substream, unsigned int ofs) | ||
937 | { | ||
938 | return substream->runtime->dma_addr + ofs; | ||
939 | } | ||
940 | |||
941 | static inline void * | ||
942 | snd_pcm_sgbuf_get_ptr(struct snd_pcm_substream *substream, unsigned int ofs) | ||
943 | { | ||
944 | return substream->runtime->dma_area + ofs; | ||
945 | } | ||
946 | |||
947 | #define snd_pcm_sgbuf_ops_page NULL | ||
948 | |||
949 | #define snd_pcm_sgbuf_get_chunk_size(subs, ofs, size) (size) | ||
950 | |||
951 | #endif /* SND_DMA_SGBUF */ | ||
952 | |||
930 | /* handle mmap counter - PCM mmap callback should handle this counter properly */ | 953 | /* handle mmap counter - PCM mmap callback should handle this counter properly */ |
931 | static inline void snd_pcm_mmap_data_open(struct vm_area_struct *area) | 954 | static inline void snd_pcm_mmap_data_open(struct vm_area_struct *area) |
932 | { | 955 | { |
@@ -965,4 +988,6 @@ static inline void snd_pcm_limit_isa_dma_size(int dma, size_t *max) | |||
965 | 988 | ||
966 | #define PCM_RUNTIME_CHECK(sub) snd_BUG_ON(!(sub) || !(sub)->runtime) | 989 | #define PCM_RUNTIME_CHECK(sub) snd_BUG_ON(!(sub) || !(sub)->runtime) |
967 | 990 | ||
991 | const char *snd_pcm_format_name(snd_pcm_format_t format); | ||
992 | |||
968 | #endif /* __SOUND_PCM_H */ | 993 | #endif /* __SOUND_PCM_H */ |
diff --git a/include/sound/sh_fsi.h b/include/sound/sh_fsi.h new file mode 100644 index 000000000000..c0227361a876 --- /dev/null +++ b/include/sound/sh_fsi.h | |||
@@ -0,0 +1,83 @@ | |||
1 | #ifndef __SOUND_FSI_H | ||
2 | #define __SOUND_FSI_H | ||
3 | |||
4 | /* | ||
5 | * Fifo-attached Serial Interface (FSI) support for SH7724 | ||
6 | * | ||
7 | * Copyright (C) 2009 Renesas Solutions Corp. | ||
8 | * Kuninori Morimoto <morimoto.kuninori@renesas.com> | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify | ||
11 | * it under the terms of the GNU General Public License version 2 as | ||
12 | * published by the Free Software Foundation. | ||
13 | */ | ||
14 | |||
15 | /* flags format | ||
16 | |||
17 | * 0xABCDEEFF | ||
18 | * | ||
19 | * A: channel size for TDM (input) | ||
20 | * B: channel size for TDM (ooutput) | ||
21 | * C: inversion | ||
22 | * D: mode | ||
23 | * E: input format | ||
24 | * F: output format | ||
25 | */ | ||
26 | |||
27 | #include <linux/clk.h> | ||
28 | #include <sound/soc.h> | ||
29 | |||
30 | /* TDM channel */ | ||
31 | #define SH_FSI_SET_CH_I(x) ((x & 0xF) << 28) | ||
32 | #define SH_FSI_SET_CH_O(x) ((x & 0xF) << 24) | ||
33 | |||
34 | #define SH_FSI_CH_IMASK 0xF0000000 | ||
35 | #define SH_FSI_CH_OMASK 0x0F000000 | ||
36 | #define SH_FSI_GET_CH_I(x) ((x & SH_FSI_CH_IMASK) >> 28) | ||
37 | #define SH_FSI_GET_CH_O(x) ((x & SH_FSI_CH_OMASK) >> 24) | ||
38 | |||
39 | /* clock inversion */ | ||
40 | #define SH_FSI_INVERSION_MASK 0x00F00000 | ||
41 | #define SH_FSI_LRM_INV (1 << 20) | ||
42 | #define SH_FSI_BRM_INV (1 << 21) | ||
43 | #define SH_FSI_LRS_INV (1 << 22) | ||
44 | #define SH_FSI_BRS_INV (1 << 23) | ||
45 | |||
46 | /* mode */ | ||
47 | #define SH_FSI_MODE_MASK 0x000F0000 | ||
48 | #define SH_FSI_IN_SLAVE_MODE (1 << 16) /* default master mode */ | ||
49 | #define SH_FSI_OUT_SLAVE_MODE (1 << 17) /* default master mode */ | ||
50 | |||
51 | /* DI format */ | ||
52 | #define SH_FSI_FMT_MASK 0x000000FF | ||
53 | #define SH_FSI_IFMT(x) (((SH_FSI_FMT_ ## x) & SH_FSI_FMT_MASK) << 8) | ||
54 | #define SH_FSI_OFMT(x) (((SH_FSI_FMT_ ## x) & SH_FSI_FMT_MASK) << 0) | ||
55 | #define SH_FSI_GET_IFMT(x) ((x >> 8) & SH_FSI_FMT_MASK) | ||
56 | #define SH_FSI_GET_OFMT(x) ((x >> 0) & SH_FSI_FMT_MASK) | ||
57 | |||
58 | #define SH_FSI_FMT_MONO (1 << 0) | ||
59 | #define SH_FSI_FMT_MONO_DELAY (1 << 1) | ||
60 | #define SH_FSI_FMT_PCM (1 << 2) | ||
61 | #define SH_FSI_FMT_I2S (1 << 3) | ||
62 | #define SH_FSI_FMT_TDM (1 << 4) | ||
63 | #define SH_FSI_FMT_TDM_DELAY (1 << 5) | ||
64 | |||
65 | #define SH_FSI_IFMT_TDM_CH(x) \ | ||
66 | (SH_FSI_IFMT(TDM) | SH_FSI_SET_CH_I(x)) | ||
67 | #define SH_FSI_IFMT_TDM_DELAY_CH(x) \ | ||
68 | (SH_FSI_IFMT(TDM_DELAY) | SH_FSI_SET_CH_I(x)) | ||
69 | |||
70 | #define SH_FSI_OFMT_TDM_CH(x) \ | ||
71 | (SH_FSI_OFMT(TDM) | SH_FSI_SET_CH_O(x)) | ||
72 | #define SH_FSI_OFMT_TDM_DELAY_CH(x) \ | ||
73 | (SH_FSI_OFMT(TDM_DELAY) | SH_FSI_SET_CH_O(x)) | ||
74 | |||
75 | struct sh_fsi_platform_info { | ||
76 | unsigned long porta_flags; | ||
77 | unsigned long portb_flags; | ||
78 | }; | ||
79 | |||
80 | extern struct snd_soc_dai fsi_soc_dai[2]; | ||
81 | extern struct snd_soc_platform fsi_soc_platform; | ||
82 | |||
83 | #endif /* __SOUND_FSI_H */ | ||
diff --git a/include/sound/soc-dai.h b/include/sound/soc-dai.h index 352d7eee9b6d..97ca9af414dc 100644 --- a/include/sound/soc-dai.h +++ b/include/sound/soc-dai.h | |||
@@ -27,8 +27,8 @@ struct snd_pcm_substream; | |||
27 | #define SND_SOC_DAIFMT_I2S 0 /* I2S mode */ | 27 | #define SND_SOC_DAIFMT_I2S 0 /* I2S mode */ |
28 | #define SND_SOC_DAIFMT_RIGHT_J 1 /* Right Justified mode */ | 28 | #define SND_SOC_DAIFMT_RIGHT_J 1 /* Right Justified mode */ |
29 | #define SND_SOC_DAIFMT_LEFT_J 2 /* Left Justified mode */ | 29 | #define SND_SOC_DAIFMT_LEFT_J 2 /* Left Justified mode */ |
30 | #define SND_SOC_DAIFMT_DSP_A 3 /* L data msb after FRM LRC */ | 30 | #define SND_SOC_DAIFMT_DSP_A 3 /* L data MSB after FRM LRC */ |
31 | #define SND_SOC_DAIFMT_DSP_B 4 /* L data msb during FRM LRC */ | 31 | #define SND_SOC_DAIFMT_DSP_B 4 /* L data MSB during FRM LRC */ |
32 | #define SND_SOC_DAIFMT_AC97 5 /* AC97 */ | 32 | #define SND_SOC_DAIFMT_AC97 5 /* AC97 */ |
33 | 33 | ||
34 | /* left and right justified also known as MSB and LSB respectively */ | 34 | /* left and right justified also known as MSB and LSB respectively */ |
@@ -38,7 +38,7 @@ struct snd_pcm_substream; | |||
38 | /* | 38 | /* |
39 | * DAI Clock gating. | 39 | * DAI Clock gating. |
40 | * | 40 | * |
41 | * DAI bit clocks can be be gated (disabled) when not the DAI is not | 41 | * DAI bit clocks can be be gated (disabled) when the DAI is not |
42 | * sending or receiving PCM data in a frame. This can be used to save power. | 42 | * sending or receiving PCM data in a frame. This can be used to save power. |
43 | */ | 43 | */ |
44 | #define SND_SOC_DAIFMT_CONT (0 << 4) /* continuous clock */ | 44 | #define SND_SOC_DAIFMT_CONT (0 << 4) /* continuous clock */ |
@@ -51,21 +51,21 @@ struct snd_pcm_substream; | |||
51 | * format. | 51 | * format. |
52 | */ | 52 | */ |
53 | #define SND_SOC_DAIFMT_NB_NF (0 << 8) /* normal bit clock + frame */ | 53 | #define SND_SOC_DAIFMT_NB_NF (0 << 8) /* normal bit clock + frame */ |
54 | #define SND_SOC_DAIFMT_NB_IF (1 << 8) /* normal bclk + inv frm */ | 54 | #define SND_SOC_DAIFMT_NB_IF (1 << 8) /* normal BCLK + inv FRM */ |
55 | #define SND_SOC_DAIFMT_IB_NF (2 << 8) /* invert bclk + nor frm */ | 55 | #define SND_SOC_DAIFMT_IB_NF (2 << 8) /* invert BCLK + nor FRM */ |
56 | #define SND_SOC_DAIFMT_IB_IF (3 << 8) /* invert bclk + frm */ | 56 | #define SND_SOC_DAIFMT_IB_IF (3 << 8) /* invert BCLK + FRM */ |
57 | 57 | ||
58 | /* | 58 | /* |
59 | * DAI hardware clock masters. | 59 | * DAI hardware clock masters. |
60 | * | 60 | * |
61 | * This is wrt the codec, the inverse is true for the interface | 61 | * This is wrt the codec, the inverse is true for the interface |
62 | * i.e. if the codec is clk and frm master then the interface is | 62 | * i.e. if the codec is clk and FRM master then the interface is |
63 | * clk and frame slave. | 63 | * clk and frame slave. |
64 | */ | 64 | */ |
65 | #define SND_SOC_DAIFMT_CBM_CFM (0 << 12) /* codec clk & frm master */ | 65 | #define SND_SOC_DAIFMT_CBM_CFM (0 << 12) /* codec clk & FRM master */ |
66 | #define SND_SOC_DAIFMT_CBS_CFM (1 << 12) /* codec clk slave & frm master */ | 66 | #define SND_SOC_DAIFMT_CBS_CFM (1 << 12) /* codec clk slave & FRM master */ |
67 | #define SND_SOC_DAIFMT_CBM_CFS (2 << 12) /* codec clk master & frame slave */ | 67 | #define SND_SOC_DAIFMT_CBM_CFS (2 << 12) /* codec clk master & frame slave */ |
68 | #define SND_SOC_DAIFMT_CBS_CFS (3 << 12) /* codec clk & frm slave */ | 68 | #define SND_SOC_DAIFMT_CBS_CFS (3 << 12) /* codec clk & FRM slave */ |
69 | 69 | ||
70 | #define SND_SOC_DAIFMT_FORMAT_MASK 0x000f | 70 | #define SND_SOC_DAIFMT_FORMAT_MASK 0x000f |
71 | #define SND_SOC_DAIFMT_CLOCK_MASK 0x00f0 | 71 | #define SND_SOC_DAIFMT_CLOCK_MASK 0x00f0 |
@@ -78,7 +78,13 @@ struct snd_pcm_substream; | |||
78 | #define SND_SOC_CLOCK_IN 0 | 78 | #define SND_SOC_CLOCK_IN 0 |
79 | #define SND_SOC_CLOCK_OUT 1 | 79 | #define SND_SOC_CLOCK_OUT 1 |
80 | 80 | ||
81 | #define SND_SOC_STD_AC97_FMTS (SNDRV_PCM_FMTBIT_S16_LE |\ | 81 | #define SND_SOC_STD_AC97_FMTS (SNDRV_PCM_FMTBIT_S8 |\ |
82 | SNDRV_PCM_FMTBIT_S16_LE |\ | ||
83 | SNDRV_PCM_FMTBIT_S16_BE |\ | ||
84 | SNDRV_PCM_FMTBIT_S20_3LE |\ | ||
85 | SNDRV_PCM_FMTBIT_S20_3BE |\ | ||
86 | SNDRV_PCM_FMTBIT_S24_3LE |\ | ||
87 | SNDRV_PCM_FMTBIT_S24_3BE |\ | ||
82 | SNDRV_PCM_FMTBIT_S32_LE |\ | 88 | SNDRV_PCM_FMTBIT_S32_LE |\ |
83 | SNDRV_PCM_FMTBIT_S32_BE) | 89 | SNDRV_PCM_FMTBIT_S32_BE) |
84 | 90 | ||
@@ -106,7 +112,7 @@ int snd_soc_dai_set_pll(struct snd_soc_dai *dai, | |||
106 | int snd_soc_dai_set_fmt(struct snd_soc_dai *dai, unsigned int fmt); | 112 | int snd_soc_dai_set_fmt(struct snd_soc_dai *dai, unsigned int fmt); |
107 | 113 | ||
108 | int snd_soc_dai_set_tdm_slot(struct snd_soc_dai *dai, | 114 | int snd_soc_dai_set_tdm_slot(struct snd_soc_dai *dai, |
109 | unsigned int mask, int slots); | 115 | unsigned int tx_mask, unsigned int rx_mask, int slots, int slot_width); |
110 | 116 | ||
111 | int snd_soc_dai_set_tristate(struct snd_soc_dai *dai, int tristate); | 117 | int snd_soc_dai_set_tristate(struct snd_soc_dai *dai, int tristate); |
112 | 118 | ||
@@ -116,12 +122,12 @@ int snd_soc_dai_digital_mute(struct snd_soc_dai *dai, int mute); | |||
116 | /* | 122 | /* |
117 | * Digital Audio Interface. | 123 | * Digital Audio Interface. |
118 | * | 124 | * |
119 | * Describes the Digital Audio Interface in terms of it's ALSA, DAI and AC97 | 125 | * Describes the Digital Audio Interface in terms of its ALSA, DAI and AC97 |
120 | * operations an capabilities. Codec and platfom drivers will register a this | 126 | * operations and capabilities. Codec and platform drivers will register this |
121 | * structure for every DAI they have. | 127 | * structure for every DAI they have. |
122 | * | 128 | * |
123 | * This structure covers the clocking, formating and ALSA operations for each | 129 | * This structure covers the clocking, formating and ALSA operations for each |
124 | * interface a | 130 | * interface. |
125 | */ | 131 | */ |
126 | struct snd_soc_dai_ops { | 132 | struct snd_soc_dai_ops { |
127 | /* | 133 | /* |
@@ -140,7 +146,8 @@ struct snd_soc_dai_ops { | |||
140 | */ | 146 | */ |
141 | int (*set_fmt)(struct snd_soc_dai *dai, unsigned int fmt); | 147 | int (*set_fmt)(struct snd_soc_dai *dai, unsigned int fmt); |
142 | int (*set_tdm_slot)(struct snd_soc_dai *dai, | 148 | int (*set_tdm_slot)(struct snd_soc_dai *dai, |
143 | unsigned int mask, int slots); | 149 | unsigned int tx_mask, unsigned int rx_mask, |
150 | int slots, int slot_width); | ||
144 | int (*set_tristate)(struct snd_soc_dai *dai, int tristate); | 151 | int (*set_tristate)(struct snd_soc_dai *dai, int tristate); |
145 | 152 | ||
146 | /* | 153 | /* |
@@ -179,6 +186,7 @@ struct snd_soc_dai { | |||
179 | int ac97_control; | 186 | int ac97_control; |
180 | 187 | ||
181 | struct device *dev; | 188 | struct device *dev; |
189 | void *ac97_pdata; /* platform_data for the ac97 codec */ | ||
182 | 190 | ||
183 | /* DAI callbacks */ | 191 | /* DAI callbacks */ |
184 | int (*probe)(struct platform_device *pdev, | 192 | int (*probe)(struct platform_device *pdev, |
diff --git a/include/sound/soc-dapm.h b/include/sound/soc-dapm.h index ec8a45f9a069..c1410e3191e3 100644 --- a/include/sound/soc-dapm.h +++ b/include/sound/soc-dapm.h | |||
@@ -137,6 +137,12 @@ | |||
137 | .event_flags = SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD} | 137 | .event_flags = SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD} |
138 | 138 | ||
139 | /* stream domain */ | 139 | /* stream domain */ |
140 | #define SND_SOC_DAPM_AIF_IN(wname, stname, wslot, wreg, wshift, winvert) \ | ||
141 | { .id = snd_soc_dapm_aif_in, .name = wname, .sname = stname, \ | ||
142 | .reg = wreg, .shift = wshift, .invert = winvert } | ||
143 | #define SND_SOC_DAPM_AIF_OUT(wname, stname, wslot, wreg, wshift, winvert) \ | ||
144 | { .id = snd_soc_dapm_aif_out, .name = wname, .sname = stname, \ | ||
145 | .reg = wreg, .shift = wshift, .invert = winvert } | ||
140 | #define SND_SOC_DAPM_DAC(wname, stname, wreg, wshift, winvert) \ | 146 | #define SND_SOC_DAPM_DAC(wname, stname, wreg, wshift, winvert) \ |
141 | { .id = snd_soc_dapm_dac, .name = wname, .sname = stname, .reg = wreg, \ | 147 | { .id = snd_soc_dapm_dac, .name = wname, .sname = stname, .reg = wreg, \ |
142 | .shift = wshift, .invert = winvert} | 148 | .shift = wshift, .invert = winvert} |
@@ -279,9 +285,11 @@ int snd_soc_dapm_add_routes(struct snd_soc_codec *codec, | |||
279 | /* dapm events */ | 285 | /* dapm events */ |
280 | int snd_soc_dapm_stream_event(struct snd_soc_codec *codec, char *stream, | 286 | int snd_soc_dapm_stream_event(struct snd_soc_codec *codec, char *stream, |
281 | int event); | 287 | int event); |
288 | void snd_soc_dapm_shutdown(struct snd_soc_device *socdev); | ||
282 | 289 | ||
283 | /* dapm sys fs - used by the core */ | 290 | /* dapm sys fs - used by the core */ |
284 | int snd_soc_dapm_sys_add(struct device *dev); | 291 | int snd_soc_dapm_sys_add(struct device *dev); |
292 | void snd_soc_dapm_debugfs_init(struct snd_soc_codec *codec); | ||
285 | 293 | ||
286 | /* dapm audio pin control and status */ | 294 | /* dapm audio pin control and status */ |
287 | int snd_soc_dapm_enable_pin(struct snd_soc_codec *codec, const char *pin); | 295 | int snd_soc_dapm_enable_pin(struct snd_soc_codec *codec, const char *pin); |
@@ -311,6 +319,8 @@ enum snd_soc_dapm_type { | |||
311 | snd_soc_dapm_pre, /* machine specific pre widget - exec first */ | 319 | snd_soc_dapm_pre, /* machine specific pre widget - exec first */ |
312 | snd_soc_dapm_post, /* machine specific post widget - exec last */ | 320 | snd_soc_dapm_post, /* machine specific post widget - exec last */ |
313 | snd_soc_dapm_supply, /* power/clock supply */ | 321 | snd_soc_dapm_supply, /* power/clock supply */ |
322 | snd_soc_dapm_aif_in, /* audio interface input */ | ||
323 | snd_soc_dapm_aif_out, /* audio interface output */ | ||
314 | }; | 324 | }; |
315 | 325 | ||
316 | /* | 326 | /* |
diff --git a/include/sound/soc.h b/include/sound/soc.h index cf6111d72b17..475cb7ed6bec 100644 --- a/include/sound/soc.h +++ b/include/sound/soc.h | |||
@@ -135,6 +135,28 @@ | |||
135 | .info = snd_soc_info_volsw, \ | 135 | .info = snd_soc_info_volsw, \ |
136 | .get = xhandler_get, .put = xhandler_put, \ | 136 | .get = xhandler_get, .put = xhandler_put, \ |
137 | .private_value = SOC_SINGLE_VALUE(xreg, xshift, xmax, xinvert) } | 137 | .private_value = SOC_SINGLE_VALUE(xreg, xshift, xmax, xinvert) } |
138 | #define SOC_DOUBLE_EXT_TLV(xname, xreg, shift_left, shift_right, xmax, xinvert,\ | ||
139 | xhandler_get, xhandler_put, tlv_array) \ | ||
140 | { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \ | ||
141 | .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ | \ | ||
142 | SNDRV_CTL_ELEM_ACCESS_READWRITE, \ | ||
143 | .tlv.p = (tlv_array), \ | ||
144 | .info = snd_soc_info_volsw, \ | ||
145 | .get = xhandler_get, .put = xhandler_put, \ | ||
146 | .private_value = (unsigned long)&(struct soc_mixer_control) \ | ||
147 | {.reg = xreg, .shift = shift_left, .rshift = shift_right, \ | ||
148 | .max = xmax, .invert = xinvert} } | ||
149 | #define SOC_DOUBLE_R_EXT_TLV(xname, reg_left, reg_right, xshift, xmax, xinvert,\ | ||
150 | xhandler_get, xhandler_put, tlv_array) \ | ||
151 | { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \ | ||
152 | .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ | \ | ||
153 | SNDRV_CTL_ELEM_ACCESS_READWRITE, \ | ||
154 | .tlv.p = (tlv_array), \ | ||
155 | .info = snd_soc_info_volsw_2r, \ | ||
156 | .get = xhandler_get, .put = xhandler_put, \ | ||
157 | .private_value = (unsigned long)&(struct soc_mixer_control) \ | ||
158 | {.reg = reg_left, .rreg = reg_right, .shift = xshift, \ | ||
159 | .max = xmax, .invert = xinvert} } | ||
138 | #define SOC_SINGLE_BOOL_EXT(xname, xdata, xhandler_get, xhandler_put) \ | 160 | #define SOC_SINGLE_BOOL_EXT(xname, xdata, xhandler_get, xhandler_put) \ |
139 | { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ | 161 | { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ |
140 | .info = snd_soc_info_bool_ext, \ | 162 | .info = snd_soc_info_bool_ext, \ |
@@ -183,14 +205,28 @@ struct snd_soc_jack_gpio; | |||
183 | #endif | 205 | #endif |
184 | 206 | ||
185 | typedef int (*hw_write_t)(void *,const char* ,int); | 207 | typedef int (*hw_write_t)(void *,const char* ,int); |
186 | typedef int (*hw_read_t)(void *,char* ,int); | ||
187 | 208 | ||
188 | extern struct snd_ac97_bus_ops soc_ac97_ops; | 209 | extern struct snd_ac97_bus_ops soc_ac97_ops; |
189 | 210 | ||
211 | enum snd_soc_control_type { | ||
212 | SND_SOC_CUSTOM, | ||
213 | SND_SOC_I2C, | ||
214 | SND_SOC_SPI, | ||
215 | }; | ||
216 | |||
190 | int snd_soc_register_platform(struct snd_soc_platform *platform); | 217 | int snd_soc_register_platform(struct snd_soc_platform *platform); |
191 | void snd_soc_unregister_platform(struct snd_soc_platform *platform); | 218 | void snd_soc_unregister_platform(struct snd_soc_platform *platform); |
192 | int snd_soc_register_codec(struct snd_soc_codec *codec); | 219 | int snd_soc_register_codec(struct snd_soc_codec *codec); |
193 | void snd_soc_unregister_codec(struct snd_soc_codec *codec); | 220 | void snd_soc_unregister_codec(struct snd_soc_codec *codec); |
221 | int snd_soc_codec_volatile_register(struct snd_soc_codec *codec, int reg); | ||
222 | int snd_soc_codec_set_cache_io(struct snd_soc_codec *codec, | ||
223 | int addr_bits, int data_bits, | ||
224 | enum snd_soc_control_type control); | ||
225 | |||
226 | #ifdef CONFIG_PM | ||
227 | int snd_soc_suspend_device(struct device *dev); | ||
228 | int snd_soc_resume_device(struct device *dev); | ||
229 | #endif | ||
194 | 230 | ||
195 | /* pcm <-> DAI connect */ | 231 | /* pcm <-> DAI connect */ |
196 | void snd_soc_free_pcms(struct snd_soc_device *socdev); | 232 | void snd_soc_free_pcms(struct snd_soc_device *socdev); |
@@ -216,9 +252,9 @@ void snd_soc_jack_free_gpios(struct snd_soc_jack *jack, int count, | |||
216 | 252 | ||
217 | /* codec register bit access */ | 253 | /* codec register bit access */ |
218 | int snd_soc_update_bits(struct snd_soc_codec *codec, unsigned short reg, | 254 | int snd_soc_update_bits(struct snd_soc_codec *codec, unsigned short reg, |
219 | unsigned short mask, unsigned short value); | 255 | unsigned int mask, unsigned int value); |
220 | int snd_soc_test_bits(struct snd_soc_codec *codec, unsigned short reg, | 256 | int snd_soc_test_bits(struct snd_soc_codec *codec, unsigned short reg, |
221 | unsigned short mask, unsigned short value); | 257 | unsigned int mask, unsigned int value); |
222 | 258 | ||
223 | int snd_soc_new_ac97_codec(struct snd_soc_codec *codec, | 259 | int snd_soc_new_ac97_codec(struct snd_soc_codec *codec, |
224 | struct snd_ac97_bus_ops *ops, int num); | 260 | struct snd_ac97_bus_ops *ops, int num); |
@@ -356,8 +392,10 @@ struct snd_soc_codec { | |||
356 | int (*write)(struct snd_soc_codec *, unsigned int, unsigned int); | 392 | int (*write)(struct snd_soc_codec *, unsigned int, unsigned int); |
357 | int (*display_register)(struct snd_soc_codec *, char *, | 393 | int (*display_register)(struct snd_soc_codec *, char *, |
358 | size_t, unsigned int); | 394 | size_t, unsigned int); |
395 | int (*volatile_register)(unsigned int); | ||
396 | int (*readable_register)(unsigned int); | ||
359 | hw_write_t hw_write; | 397 | hw_write_t hw_write; |
360 | hw_read_t hw_read; | 398 | unsigned int (*hw_read)(struct snd_soc_codec *, unsigned int); |
361 | void *reg_cache; | 399 | void *reg_cache; |
362 | short reg_cache_size; | 400 | short reg_cache_size; |
363 | short reg_cache_step; | 401 | short reg_cache_step; |
@@ -369,8 +407,6 @@ struct snd_soc_codec { | |||
369 | enum snd_soc_bias_level bias_level; | 407 | enum snd_soc_bias_level bias_level; |
370 | enum snd_soc_bias_level suspend_bias_level; | 408 | enum snd_soc_bias_level suspend_bias_level; |
371 | struct delayed_work delayed_work; | 409 | struct delayed_work delayed_work; |
372 | struct list_head up_list; | ||
373 | struct list_head down_list; | ||
374 | 410 | ||
375 | /* codec DAI's */ | 411 | /* codec DAI's */ |
376 | struct snd_soc_dai *dai; | 412 | struct snd_soc_dai *dai; |
@@ -379,6 +415,7 @@ struct snd_soc_codec { | |||
379 | #ifdef CONFIG_DEBUG_FS | 415 | #ifdef CONFIG_DEBUG_FS |
380 | struct dentry *debugfs_reg; | 416 | struct dentry *debugfs_reg; |
381 | struct dentry *debugfs_pop_time; | 417 | struct dentry *debugfs_pop_time; |
418 | struct dentry *debugfs_dapm; | ||
382 | #endif | 419 | #endif |
383 | }; | 420 | }; |
384 | 421 | ||
diff --git a/include/sound/tlv.h b/include/sound/tlv.h index d136ea2181ed..9fd5b19ccf5c 100644 --- a/include/sound/tlv.h +++ b/include/sound/tlv.h | |||
@@ -35,6 +35,8 @@ | |||
35 | #define SNDRV_CTL_TLVT_DB_SCALE 1 /* dB scale */ | 35 | #define SNDRV_CTL_TLVT_DB_SCALE 1 /* dB scale */ |
36 | #define SNDRV_CTL_TLVT_DB_LINEAR 2 /* linear volume */ | 36 | #define SNDRV_CTL_TLVT_DB_LINEAR 2 /* linear volume */ |
37 | #define SNDRV_CTL_TLVT_DB_RANGE 3 /* dB range container */ | 37 | #define SNDRV_CTL_TLVT_DB_RANGE 3 /* dB range container */ |
38 | #define SNDRV_CTL_TLVT_DB_MINMAX 4 /* dB scale with min/max */ | ||
39 | #define SNDRV_CTL_TLVT_DB_MINMAX_MUTE 5 /* dB scale with min/max with mute */ | ||
38 | 40 | ||
39 | #define TLV_DB_SCALE_ITEM(min, step, mute) \ | 41 | #define TLV_DB_SCALE_ITEM(min, step, mute) \ |
40 | SNDRV_CTL_TLVT_DB_SCALE, 2 * sizeof(unsigned int), \ | 42 | SNDRV_CTL_TLVT_DB_SCALE, 2 * sizeof(unsigned int), \ |
@@ -42,6 +44,18 @@ | |||
42 | #define DECLARE_TLV_DB_SCALE(name, min, step, mute) \ | 44 | #define DECLARE_TLV_DB_SCALE(name, min, step, mute) \ |
43 | unsigned int name[] = { TLV_DB_SCALE_ITEM(min, step, mute) } | 45 | unsigned int name[] = { TLV_DB_SCALE_ITEM(min, step, mute) } |
44 | 46 | ||
47 | /* dB scale specified with min/max values instead of step */ | ||
48 | #define TLV_DB_MINMAX_ITEM(min_dB, max_dB) \ | ||
49 | SNDRV_CTL_TLVT_DB_MINMAX, 2 * sizeof(unsigned int), \ | ||
50 | (min_dB), (max_dB) | ||
51 | #define TLV_DB_MINMAX_MUTE_ITEM(min_dB, max_dB) \ | ||
52 | SNDRV_CTL_TLVT_DB_MINMAX_MUTE, 2 * sizeof(unsigned int), \ | ||
53 | (min_dB), (max_dB) | ||
54 | #define DECLARE_TLV_DB_MINMAX(name, min_dB, max_dB) \ | ||
55 | unsigned int name[] = { TLV_DB_MINMAX_ITEM(min_dB, max_dB) } | ||
56 | #define DECLARE_TLV_DB_MINMAX_MUTE(name, min_dB, max_dB) \ | ||
57 | unsigned int name[] = { TLV_DB_MINMAX_MUTE_ITEM(min_dB, max_dB) } | ||
58 | |||
45 | /* linear volume between min_dB and max_dB (.01dB unit) */ | 59 | /* linear volume between min_dB and max_dB (.01dB unit) */ |
46 | #define TLV_DB_LINEAR_ITEM(min_dB, max_dB) \ | 60 | #define TLV_DB_LINEAR_ITEM(min_dB, max_dB) \ |
47 | SNDRV_CTL_TLVT_DB_LINEAR, 2 * sizeof(unsigned int), \ | 61 | SNDRV_CTL_TLVT_DB_LINEAR, 2 * sizeof(unsigned int), \ |
diff --git a/include/sound/uda1380.h b/include/sound/uda1380.h new file mode 100644 index 000000000000..381319c7000c --- /dev/null +++ b/include/sound/uda1380.h | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | * UDA1380 ALSA SoC Codec driver | ||
3 | * | ||
4 | * Copyright 2009 Philipp Zabel | ||
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 | |||
11 | #ifndef __UDA1380_H | ||
12 | #define __UDA1380_H | ||
13 | |||
14 | struct uda1380_platform_data { | ||
15 | int gpio_power; | ||
16 | int gpio_reset; | ||
17 | int dac_clk; | ||
18 | #define UDA1380_DAC_CLK_SYSCLK 0 | ||
19 | #define UDA1380_DAC_CLK_WSPLL 1 | ||
20 | }; | ||
21 | |||
22 | #endif /* __UDA1380_H */ | ||
diff --git a/include/sound/version.h b/include/sound/version.h index 456f1359e1c0..22939142dd23 100644 --- a/include/sound/version.h +++ b/include/sound/version.h | |||
@@ -1,3 +1,3 @@ | |||
1 | /* include/version.h */ | 1 | /* include/version.h */ |
2 | #define CONFIG_SND_VERSION "1.0.20" | 2 | #define CONFIG_SND_VERSION "1.0.21" |
3 | #define CONFIG_SND_DATE "" | 3 | #define CONFIG_SND_DATE "" |
diff --git a/include/sound/wm8993.h b/include/sound/wm8993.h new file mode 100644 index 000000000000..9c661f2f8cda --- /dev/null +++ b/include/sound/wm8993.h | |||
@@ -0,0 +1,44 @@ | |||
1 | /* | ||
2 | * linux/sound/wm8993.h -- Platform data for WM8993 | ||
3 | * | ||
4 | * Copyright 2009 Wolfson Microelectronics. PLC. | ||
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 | |||
11 | #ifndef __LINUX_SND_WM8993_H | ||
12 | #define __LINUX_SND_WM8993_H | ||
13 | |||
14 | /* Note that EQ1 only contains the enable/disable bit so will be | ||
15 | ignored but is included for simplicity. | ||
16 | */ | ||
17 | struct wm8993_retune_mobile_setting { | ||
18 | const char *name; | ||
19 | unsigned int rate; | ||
20 | u16 config[24]; | ||
21 | }; | ||
22 | |||
23 | struct wm8993_platform_data { | ||
24 | struct wm8993_retune_mobile_setting *retune_configs; | ||
25 | int num_retune_configs; | ||
26 | |||
27 | /* LINEOUT can be differential or single ended */ | ||
28 | unsigned int lineout1_diff:1; | ||
29 | unsigned int lineout2_diff:1; | ||
30 | |||
31 | /* Common mode feedback */ | ||
32 | unsigned int lineout1fb:1; | ||
33 | unsigned int lineout2fb:1; | ||
34 | |||
35 | /* Microphone biases: 0=0.9*AVDD1 1=0.65*AVVD1 */ | ||
36 | unsigned int micbias1_lvl:1; | ||
37 | unsigned int micbias2_lvl:1; | ||
38 | |||
39 | /* Jack detect threashold levels, see datasheet for values */ | ||
40 | unsigned int jd_scthr:2; | ||
41 | unsigned int jd_thr:2; | ||
42 | }; | ||
43 | |||
44 | #endif | ||
diff --git a/include/sound/ymfpci.h b/include/sound/ymfpci.h index 05ead6698434..444cd6ba0ba7 100644 --- a/include/sound/ymfpci.h +++ b/include/sound/ymfpci.h | |||
@@ -331,6 +331,7 @@ struct snd_ymfpci { | |||
331 | struct snd_ac97 *ac97; | 331 | struct snd_ac97 *ac97; |
332 | struct snd_rawmidi *rawmidi; | 332 | struct snd_rawmidi *rawmidi; |
333 | struct snd_timer *timer; | 333 | struct snd_timer *timer; |
334 | unsigned int timer_ticks; | ||
334 | 335 | ||
335 | struct pci_dev *pci; | 336 | struct pci_dev *pci; |
336 | struct snd_card *card; | 337 | struct snd_card *card; |
diff --git a/include/trace/define_trace.h b/include/trace/define_trace.h index f7a7ae1e8f90..2a4b3bf74033 100644 --- a/include/trace/define_trace.h +++ b/include/trace/define_trace.h | |||
@@ -26,6 +26,11 @@ | |||
26 | #define TRACE_EVENT(name, proto, args, tstruct, assign, print) \ | 26 | #define TRACE_EVENT(name, proto, args, tstruct, assign, print) \ |
27 | DEFINE_TRACE(name) | 27 | DEFINE_TRACE(name) |
28 | 28 | ||
29 | #undef TRACE_EVENT_FN | ||
30 | #define TRACE_EVENT_FN(name, proto, args, tstruct, \ | ||
31 | assign, print, reg, unreg) \ | ||
32 | DEFINE_TRACE_FN(name, reg, unreg) | ||
33 | |||
29 | #undef DECLARE_TRACE | 34 | #undef DECLARE_TRACE |
30 | #define DECLARE_TRACE(name, proto, args) \ | 35 | #define DECLARE_TRACE(name, proto, args) \ |
31 | DEFINE_TRACE(name) | 36 | DEFINE_TRACE(name) |
@@ -56,6 +61,8 @@ | |||
56 | #include <trace/ftrace.h> | 61 | #include <trace/ftrace.h> |
57 | #endif | 62 | #endif |
58 | 63 | ||
64 | #undef TRACE_EVENT | ||
65 | #undef TRACE_EVENT_FN | ||
59 | #undef TRACE_HEADER_MULTI_READ | 66 | #undef TRACE_HEADER_MULTI_READ |
60 | 67 | ||
61 | /* Only undef what we defined in this file */ | 68 | /* Only undef what we defined in this file */ |
diff --git a/include/trace/events/block.h b/include/trace/events/block.h index d6b05f42dd44..d86af94691c2 100644 --- a/include/trace/events/block.h +++ b/include/trace/events/block.h | |||
@@ -1,3 +1,6 @@ | |||
1 | #undef TRACE_SYSTEM | ||
2 | #define TRACE_SYSTEM block | ||
3 | |||
1 | #if !defined(_TRACE_BLOCK_H) || defined(TRACE_HEADER_MULTI_READ) | 4 | #if !defined(_TRACE_BLOCK_H) || defined(TRACE_HEADER_MULTI_READ) |
2 | #define _TRACE_BLOCK_H | 5 | #define _TRACE_BLOCK_H |
3 | 6 | ||
@@ -5,9 +8,6 @@ | |||
5 | #include <linux/blkdev.h> | 8 | #include <linux/blkdev.h> |
6 | #include <linux/tracepoint.h> | 9 | #include <linux/tracepoint.h> |
7 | 10 | ||
8 | #undef TRACE_SYSTEM | ||
9 | #define TRACE_SYSTEM block | ||
10 | |||
11 | TRACE_EVENT(block_rq_abort, | 11 | TRACE_EVENT(block_rq_abort, |
12 | 12 | ||
13 | TP_PROTO(struct request_queue *q, struct request *rq), | 13 | TP_PROTO(struct request_queue *q, struct request *rq), |
@@ -171,6 +171,7 @@ TRACE_EVENT(block_rq_complete, | |||
171 | (unsigned long long)__entry->sector, | 171 | (unsigned long long)__entry->sector, |
172 | __entry->nr_sector, __entry->errors) | 172 | __entry->nr_sector, __entry->errors) |
173 | ); | 173 | ); |
174 | |||
174 | TRACE_EVENT(block_bio_bounce, | 175 | TRACE_EVENT(block_bio_bounce, |
175 | 176 | ||
176 | TP_PROTO(struct request_queue *q, struct bio *bio), | 177 | TP_PROTO(struct request_queue *q, struct bio *bio), |
@@ -186,7 +187,8 @@ TRACE_EVENT(block_bio_bounce, | |||
186 | ), | 187 | ), |
187 | 188 | ||
188 | TP_fast_assign( | 189 | TP_fast_assign( |
189 | __entry->dev = bio->bi_bdev->bd_dev; | 190 | __entry->dev = bio->bi_bdev ? |
191 | bio->bi_bdev->bd_dev : 0; | ||
190 | __entry->sector = bio->bi_sector; | 192 | __entry->sector = bio->bi_sector; |
191 | __entry->nr_sector = bio->bi_size >> 9; | 193 | __entry->nr_sector = bio->bi_size >> 9; |
192 | blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_size); | 194 | blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_size); |
diff --git a/include/trace/events/ext4.h b/include/trace/events/ext4.h index acf4cc9cd36d..c1bd8f1e8b94 100644 --- a/include/trace/events/ext4.h +++ b/include/trace/events/ext4.h | |||
@@ -1,14 +1,19 @@ | |||
1 | #if !defined(_TRACE_EXT4_H) || defined(TRACE_HEADER_MULTI_READ) | ||
2 | #define _TRACE_EXT4_H | ||
3 | |||
4 | #undef TRACE_SYSTEM | 1 | #undef TRACE_SYSTEM |
5 | #define TRACE_SYSTEM ext4 | 2 | #define TRACE_SYSTEM ext4 |
6 | 3 | ||
4 | #if !defined(_TRACE_EXT4_H) || defined(TRACE_HEADER_MULTI_READ) | ||
5 | #define _TRACE_EXT4_H | ||
6 | |||
7 | #include <linux/writeback.h> | 7 | #include <linux/writeback.h> |
8 | #include "../../../fs/ext4/ext4.h" | ||
9 | #include "../../../fs/ext4/mballoc.h" | ||
10 | #include <linux/tracepoint.h> | 8 | #include <linux/tracepoint.h> |
11 | 9 | ||
10 | struct ext4_allocation_context; | ||
11 | struct ext4_allocation_request; | ||
12 | struct ext4_prealloc_space; | ||
13 | struct ext4_inode_info; | ||
14 | |||
15 | #define EXT4_I(inode) (container_of(inode, struct ext4_inode_info, vfs_inode)) | ||
16 | |||
12 | TRACE_EVENT(ext4_free_inode, | 17 | TRACE_EVENT(ext4_free_inode, |
13 | TP_PROTO(struct inode *inode), | 18 | TP_PROTO(struct inode *inode), |
14 | 19 | ||
@@ -33,8 +38,9 @@ TRACE_EVENT(ext4_free_inode, | |||
33 | ), | 38 | ), |
34 | 39 | ||
35 | TP_printk("dev %s ino %lu mode %d uid %u gid %u blocks %llu", | 40 | TP_printk("dev %s ino %lu mode %d uid %u gid %u blocks %llu", |
36 | jbd2_dev_to_name(__entry->dev), __entry->ino, __entry->mode, | 41 | jbd2_dev_to_name(__entry->dev), (unsigned long) __entry->ino, |
37 | __entry->uid, __entry->gid, __entry->blocks) | 42 | __entry->mode, __entry->uid, __entry->gid, |
43 | (unsigned long long) __entry->blocks) | ||
38 | ); | 44 | ); |
39 | 45 | ||
40 | TRACE_EVENT(ext4_request_inode, | 46 | TRACE_EVENT(ext4_request_inode, |
@@ -55,7 +61,8 @@ TRACE_EVENT(ext4_request_inode, | |||
55 | ), | 61 | ), |
56 | 62 | ||
57 | TP_printk("dev %s dir %lu mode %d", | 63 | TP_printk("dev %s dir %lu mode %d", |
58 | jbd2_dev_to_name(__entry->dev), __entry->dir, __entry->mode) | 64 | jbd2_dev_to_name(__entry->dev), (unsigned long) __entry->dir, |
65 | __entry->mode) | ||
59 | ); | 66 | ); |
60 | 67 | ||
61 | TRACE_EVENT(ext4_allocate_inode, | 68 | TRACE_EVENT(ext4_allocate_inode, |
@@ -78,7 +85,8 @@ TRACE_EVENT(ext4_allocate_inode, | |||
78 | ), | 85 | ), |
79 | 86 | ||
80 | TP_printk("dev %s ino %lu dir %lu mode %d", | 87 | TP_printk("dev %s ino %lu dir %lu mode %d", |
81 | jbd2_dev_to_name(__entry->dev), __entry->ino, __entry->dir, __entry->mode) | 88 | jbd2_dev_to_name(__entry->dev), (unsigned long) __entry->ino, |
89 | (unsigned long) __entry->dir, __entry->mode) | ||
82 | ); | 90 | ); |
83 | 91 | ||
84 | TRACE_EVENT(ext4_write_begin, | 92 | TRACE_EVENT(ext4_write_begin, |
@@ -105,8 +113,8 @@ TRACE_EVENT(ext4_write_begin, | |||
105 | ), | 113 | ), |
106 | 114 | ||
107 | TP_printk("dev %s ino %lu pos %llu len %u flags %u", | 115 | TP_printk("dev %s ino %lu pos %llu len %u flags %u", |
108 | jbd2_dev_to_name(__entry->dev), __entry->ino, __entry->pos, __entry->len, | 116 | jbd2_dev_to_name(__entry->dev), (unsigned long) __entry->ino, |
109 | __entry->flags) | 117 | __entry->pos, __entry->len, __entry->flags) |
110 | ); | 118 | ); |
111 | 119 | ||
112 | TRACE_EVENT(ext4_ordered_write_end, | 120 | TRACE_EVENT(ext4_ordered_write_end, |
@@ -132,8 +140,8 @@ TRACE_EVENT(ext4_ordered_write_end, | |||
132 | ), | 140 | ), |
133 | 141 | ||
134 | TP_printk("dev %s ino %lu pos %llu len %u copied %u", | 142 | TP_printk("dev %s ino %lu pos %llu len %u copied %u", |
135 | jbd2_dev_to_name(__entry->dev), __entry->ino, __entry->pos, __entry->len, | 143 | jbd2_dev_to_name(__entry->dev), (unsigned long) __entry->ino, |
136 | __entry->copied) | 144 | __entry->pos, __entry->len, __entry->copied) |
137 | ); | 145 | ); |
138 | 146 | ||
139 | TRACE_EVENT(ext4_writeback_write_end, | 147 | TRACE_EVENT(ext4_writeback_write_end, |
@@ -159,8 +167,8 @@ TRACE_EVENT(ext4_writeback_write_end, | |||
159 | ), | 167 | ), |
160 | 168 | ||
161 | TP_printk("dev %s ino %lu pos %llu len %u copied %u", | 169 | TP_printk("dev %s ino %lu pos %llu len %u copied %u", |
162 | jbd2_dev_to_name(__entry->dev), __entry->ino, __entry->pos, __entry->len, | 170 | jbd2_dev_to_name(__entry->dev), (unsigned long) __entry->ino, |
163 | __entry->copied) | 171 | __entry->pos, __entry->len, __entry->copied) |
164 | ); | 172 | ); |
165 | 173 | ||
166 | TRACE_EVENT(ext4_journalled_write_end, | 174 | TRACE_EVENT(ext4_journalled_write_end, |
@@ -185,11 +193,11 @@ TRACE_EVENT(ext4_journalled_write_end, | |||
185 | ), | 193 | ), |
186 | 194 | ||
187 | TP_printk("dev %s ino %lu pos %llu len %u copied %u", | 195 | TP_printk("dev %s ino %lu pos %llu len %u copied %u", |
188 | jbd2_dev_to_name(__entry->dev), __entry->ino, __entry->pos, __entry->len, | 196 | jbd2_dev_to_name(__entry->dev), (unsigned long) __entry->ino, |
189 | __entry->copied) | 197 | __entry->pos, __entry->len, __entry->copied) |
190 | ); | 198 | ); |
191 | 199 | ||
192 | TRACE_EVENT(ext4_da_writepage, | 200 | TRACE_EVENT(ext4_writepage, |
193 | TP_PROTO(struct inode *inode, struct page *page), | 201 | TP_PROTO(struct inode *inode, struct page *page), |
194 | 202 | ||
195 | TP_ARGS(inode, page), | 203 | TP_ARGS(inode, page), |
@@ -208,7 +216,8 @@ TRACE_EVENT(ext4_da_writepage, | |||
208 | ), | 216 | ), |
209 | 217 | ||
210 | TP_printk("dev %s ino %lu page_index %lu", | 218 | TP_printk("dev %s ino %lu page_index %lu", |
211 | jbd2_dev_to_name(__entry->dev), __entry->ino, __entry->index) | 219 | jbd2_dev_to_name(__entry->dev), (unsigned long) __entry->ino, |
220 | __entry->index) | ||
212 | ); | 221 | ); |
213 | 222 | ||
214 | TRACE_EVENT(ext4_da_writepages, | 223 | TRACE_EVENT(ext4_da_writepages, |
@@ -226,7 +235,6 @@ TRACE_EVENT(ext4_da_writepages, | |||
226 | __field( char, nonblocking ) | 235 | __field( char, nonblocking ) |
227 | __field( char, for_kupdate ) | 236 | __field( char, for_kupdate ) |
228 | __field( char, for_reclaim ) | 237 | __field( char, for_reclaim ) |
229 | __field( char, for_writepages ) | ||
230 | __field( char, range_cyclic ) | 238 | __field( char, range_cyclic ) |
231 | ), | 239 | ), |
232 | 240 | ||
@@ -240,16 +248,50 @@ TRACE_EVENT(ext4_da_writepages, | |||
240 | __entry->nonblocking = wbc->nonblocking; | 248 | __entry->nonblocking = wbc->nonblocking; |
241 | __entry->for_kupdate = wbc->for_kupdate; | 249 | __entry->for_kupdate = wbc->for_kupdate; |
242 | __entry->for_reclaim = wbc->for_reclaim; | 250 | __entry->for_reclaim = wbc->for_reclaim; |
243 | __entry->for_writepages = wbc->for_writepages; | ||
244 | __entry->range_cyclic = wbc->range_cyclic; | 251 | __entry->range_cyclic = wbc->range_cyclic; |
245 | ), | 252 | ), |
246 | 253 | ||
247 | TP_printk("dev %s ino %lu nr_t_write %ld pages_skipped %ld range_start %llu range_end %llu nonblocking %d for_kupdate %d for_reclaim %d for_writepages %d range_cyclic %d", | 254 | TP_printk("dev %s ino %lu nr_to_write %ld pages_skipped %ld range_start %llu range_end %llu nonblocking %d for_kupdate %d for_reclaim %d range_cyclic %d", |
248 | jbd2_dev_to_name(__entry->dev), __entry->ino, __entry->nr_to_write, | 255 | jbd2_dev_to_name(__entry->dev), |
256 | (unsigned long) __entry->ino, __entry->nr_to_write, | ||
249 | __entry->pages_skipped, __entry->range_start, | 257 | __entry->pages_skipped, __entry->range_start, |
250 | __entry->range_end, __entry->nonblocking, | 258 | __entry->range_end, __entry->nonblocking, |
251 | __entry->for_kupdate, __entry->for_reclaim, | 259 | __entry->for_kupdate, __entry->for_reclaim, |
252 | __entry->for_writepages, __entry->range_cyclic) | 260 | __entry->range_cyclic) |
261 | ); | ||
262 | |||
263 | TRACE_EVENT(ext4_da_write_pages, | ||
264 | TP_PROTO(struct inode *inode, struct mpage_da_data *mpd), | ||
265 | |||
266 | TP_ARGS(inode, mpd), | ||
267 | |||
268 | TP_STRUCT__entry( | ||
269 | __field( dev_t, dev ) | ||
270 | __field( ino_t, ino ) | ||
271 | __field( __u64, b_blocknr ) | ||
272 | __field( __u32, b_size ) | ||
273 | __field( __u32, b_state ) | ||
274 | __field( unsigned long, first_page ) | ||
275 | __field( int, io_done ) | ||
276 | __field( int, pages_written ) | ||
277 | ), | ||
278 | |||
279 | TP_fast_assign( | ||
280 | __entry->dev = inode->i_sb->s_dev; | ||
281 | __entry->ino = inode->i_ino; | ||
282 | __entry->b_blocknr = mpd->b_blocknr; | ||
283 | __entry->b_size = mpd->b_size; | ||
284 | __entry->b_state = mpd->b_state; | ||
285 | __entry->first_page = mpd->first_page; | ||
286 | __entry->io_done = mpd->io_done; | ||
287 | __entry->pages_written = mpd->pages_written; | ||
288 | ), | ||
289 | |||
290 | TP_printk("dev %s ino %lu b_blocknr %llu b_size %u b_state 0x%04x first_page %lu io_done %d pages_written %d", | ||
291 | jbd2_dev_to_name(__entry->dev), (unsigned long) __entry->ino, | ||
292 | __entry->b_blocknr, __entry->b_size, | ||
293 | __entry->b_state, __entry->first_page, | ||
294 | __entry->io_done, __entry->pages_written) | ||
253 | ); | 295 | ); |
254 | 296 | ||
255 | TRACE_EVENT(ext4_da_writepages_result, | 297 | TRACE_EVENT(ext4_da_writepages_result, |
@@ -281,7 +323,8 @@ TRACE_EVENT(ext4_da_writepages_result, | |||
281 | ), | 323 | ), |
282 | 324 | ||
283 | TP_printk("dev %s ino %lu ret %d pages_written %d pages_skipped %ld congestion %d more_io %d no_nrwrite_index_update %d", | 325 | TP_printk("dev %s ino %lu ret %d pages_written %d pages_skipped %ld congestion %d more_io %d no_nrwrite_index_update %d", |
284 | jbd2_dev_to_name(__entry->dev), __entry->ino, __entry->ret, | 326 | jbd2_dev_to_name(__entry->dev), |
327 | (unsigned long) __entry->ino, __entry->ret, | ||
285 | __entry->pages_written, __entry->pages_skipped, | 328 | __entry->pages_written, __entry->pages_skipped, |
286 | __entry->encountered_congestion, __entry->more_io, | 329 | __entry->encountered_congestion, __entry->more_io, |
287 | __entry->no_nrwrite_index_update) | 330 | __entry->no_nrwrite_index_update) |
@@ -310,8 +353,8 @@ TRACE_EVENT(ext4_da_write_begin, | |||
310 | ), | 353 | ), |
311 | 354 | ||
312 | TP_printk("dev %s ino %lu pos %llu len %u flags %u", | 355 | TP_printk("dev %s ino %lu pos %llu len %u flags %u", |
313 | jbd2_dev_to_name(__entry->dev), __entry->ino, __entry->pos, __entry->len, | 356 | jbd2_dev_to_name(__entry->dev), (unsigned long) __entry->ino, |
314 | __entry->flags) | 357 | __entry->pos, __entry->len, __entry->flags) |
315 | ); | 358 | ); |
316 | 359 | ||
317 | TRACE_EVENT(ext4_da_write_end, | 360 | TRACE_EVENT(ext4_da_write_end, |
@@ -337,51 +380,8 @@ TRACE_EVENT(ext4_da_write_end, | |||
337 | ), | 380 | ), |
338 | 381 | ||
339 | TP_printk("dev %s ino %lu pos %llu len %u copied %u", | 382 | TP_printk("dev %s ino %lu pos %llu len %u copied %u", |
340 | jbd2_dev_to_name(__entry->dev), __entry->ino, __entry->pos, __entry->len, | 383 | jbd2_dev_to_name(__entry->dev), (unsigned long) __entry->ino, |
341 | __entry->copied) | 384 | __entry->pos, __entry->len, __entry->copied) |
342 | ); | ||
343 | |||
344 | TRACE_EVENT(ext4_normal_writepage, | ||
345 | TP_PROTO(struct inode *inode, struct page *page), | ||
346 | |||
347 | TP_ARGS(inode, page), | ||
348 | |||
349 | TP_STRUCT__entry( | ||
350 | __field( dev_t, dev ) | ||
351 | __field( ino_t, ino ) | ||
352 | __field( pgoff_t, index ) | ||
353 | ), | ||
354 | |||
355 | TP_fast_assign( | ||
356 | __entry->dev = inode->i_sb->s_dev; | ||
357 | __entry->ino = inode->i_ino; | ||
358 | __entry->index = page->index; | ||
359 | ), | ||
360 | |||
361 | TP_printk("dev %s ino %lu page_index %lu", | ||
362 | jbd2_dev_to_name(__entry->dev), __entry->ino, __entry->index) | ||
363 | ); | ||
364 | |||
365 | TRACE_EVENT(ext4_journalled_writepage, | ||
366 | TP_PROTO(struct inode *inode, struct page *page), | ||
367 | |||
368 | TP_ARGS(inode, page), | ||
369 | |||
370 | TP_STRUCT__entry( | ||
371 | __field( dev_t, dev ) | ||
372 | __field( ino_t, ino ) | ||
373 | __field( pgoff_t, index ) | ||
374 | |||
375 | ), | ||
376 | |||
377 | TP_fast_assign( | ||
378 | __entry->dev = inode->i_sb->s_dev; | ||
379 | __entry->ino = inode->i_ino; | ||
380 | __entry->index = page->index; | ||
381 | ), | ||
382 | |||
383 | TP_printk("dev %s ino %lu page_index %lu", | ||
384 | jbd2_dev_to_name(__entry->dev), __entry->ino, __entry->index) | ||
385 | ); | 385 | ); |
386 | 386 | ||
387 | TRACE_EVENT(ext4_discard_blocks, | 387 | TRACE_EVENT(ext4_discard_blocks, |
@@ -431,8 +431,8 @@ TRACE_EVENT(ext4_mb_new_inode_pa, | |||
431 | ), | 431 | ), |
432 | 432 | ||
433 | TP_printk("dev %s ino %lu pstart %llu len %u lstart %llu", | 433 | TP_printk("dev %s ino %lu pstart %llu len %u lstart %llu", |
434 | jbd2_dev_to_name(__entry->dev), __entry->ino, __entry->pa_pstart, | 434 | jbd2_dev_to_name(__entry->dev), (unsigned long) __entry->ino, |
435 | __entry->pa_len, __entry->pa_lstart) | 435 | __entry->pa_pstart, __entry->pa_len, __entry->pa_lstart) |
436 | ); | 436 | ); |
437 | 437 | ||
438 | TRACE_EVENT(ext4_mb_new_group_pa, | 438 | TRACE_EVENT(ext4_mb_new_group_pa, |
@@ -459,8 +459,8 @@ TRACE_EVENT(ext4_mb_new_group_pa, | |||
459 | ), | 459 | ), |
460 | 460 | ||
461 | TP_printk("dev %s ino %lu pstart %llu len %u lstart %llu", | 461 | TP_printk("dev %s ino %lu pstart %llu len %u lstart %llu", |
462 | jbd2_dev_to_name(__entry->dev), __entry->ino, __entry->pa_pstart, | 462 | jbd2_dev_to_name(__entry->dev), (unsigned long) __entry->ino, |
463 | __entry->pa_len, __entry->pa_lstart) | 463 | __entry->pa_pstart, __entry->pa_len, __entry->pa_lstart) |
464 | ); | 464 | ); |
465 | 465 | ||
466 | TRACE_EVENT(ext4_mb_release_inode_pa, | 466 | TRACE_EVENT(ext4_mb_release_inode_pa, |
@@ -486,8 +486,8 @@ TRACE_EVENT(ext4_mb_release_inode_pa, | |||
486 | ), | 486 | ), |
487 | 487 | ||
488 | TP_printk("dev %s ino %lu block %llu count %u", | 488 | TP_printk("dev %s ino %lu block %llu count %u", |
489 | jbd2_dev_to_name(__entry->dev), __entry->ino, __entry->block, | 489 | jbd2_dev_to_name(__entry->dev), (unsigned long) __entry->ino, |
490 | __entry->count) | 490 | __entry->block, __entry->count) |
491 | ); | 491 | ); |
492 | 492 | ||
493 | TRACE_EVENT(ext4_mb_release_group_pa, | 493 | TRACE_EVENT(ext4_mb_release_group_pa, |
@@ -532,7 +532,7 @@ TRACE_EVENT(ext4_discard_preallocations, | |||
532 | ), | 532 | ), |
533 | 533 | ||
534 | TP_printk("dev %s ino %lu", | 534 | TP_printk("dev %s ino %lu", |
535 | jbd2_dev_to_name(__entry->dev), __entry->ino) | 535 | jbd2_dev_to_name(__entry->dev), (unsigned long) __entry->ino) |
536 | ); | 536 | ); |
537 | 537 | ||
538 | TRACE_EVENT(ext4_mb_discard_preallocations, | 538 | TRACE_EVENT(ext4_mb_discard_preallocations, |
@@ -587,8 +587,8 @@ TRACE_EVENT(ext4_request_blocks, | |||
587 | ), | 587 | ), |
588 | 588 | ||
589 | TP_printk("dev %s ino %lu flags %u len %u lblk %llu goal %llu lleft %llu lright %llu pleft %llu pright %llu ", | 589 | TP_printk("dev %s ino %lu flags %u len %u lblk %llu goal %llu lleft %llu lright %llu pleft %llu pright %llu ", |
590 | jbd2_dev_to_name(__entry->dev), __entry->ino, __entry->flags, | 590 | jbd2_dev_to_name(__entry->dev), (unsigned long) __entry->ino, |
591 | __entry->len, | 591 | __entry->flags, __entry->len, |
592 | (unsigned long long) __entry->logical, | 592 | (unsigned long long) __entry->logical, |
593 | (unsigned long long) __entry->goal, | 593 | (unsigned long long) __entry->goal, |
594 | (unsigned long long) __entry->lleft, | 594 | (unsigned long long) __entry->lleft, |
@@ -631,8 +631,8 @@ TRACE_EVENT(ext4_allocate_blocks, | |||
631 | ), | 631 | ), |
632 | 632 | ||
633 | TP_printk("dev %s ino %lu flags %u len %u block %llu lblk %llu goal %llu lleft %llu lright %llu pleft %llu pright %llu ", | 633 | TP_printk("dev %s ino %lu flags %u len %u block %llu lblk %llu goal %llu lleft %llu lright %llu pleft %llu pright %llu ", |
634 | jbd2_dev_to_name(__entry->dev), __entry->ino, __entry->flags, | 634 | jbd2_dev_to_name(__entry->dev), (unsigned long) __entry->ino, |
635 | __entry->len, __entry->block, | 635 | __entry->flags, __entry->len, __entry->block, |
636 | (unsigned long long) __entry->logical, | 636 | (unsigned long long) __entry->logical, |
637 | (unsigned long long) __entry->goal, | 637 | (unsigned long long) __entry->goal, |
638 | (unsigned long long) __entry->lleft, | 638 | (unsigned long long) __entry->lleft, |
@@ -665,8 +665,8 @@ TRACE_EVENT(ext4_free_blocks, | |||
665 | ), | 665 | ), |
666 | 666 | ||
667 | TP_printk("dev %s ino %lu block %llu count %lu metadata %d", | 667 | TP_printk("dev %s ino %lu block %llu count %lu metadata %d", |
668 | jbd2_dev_to_name(__entry->dev), __entry->ino, __entry->block, | 668 | jbd2_dev_to_name(__entry->dev), (unsigned long) __entry->ino, |
669 | __entry->count, __entry->metadata) | 669 | __entry->block, __entry->count, __entry->metadata) |
670 | ); | 670 | ); |
671 | 671 | ||
672 | TRACE_EVENT(ext4_sync_file, | 672 | TRACE_EVENT(ext4_sync_file, |
@@ -689,8 +689,8 @@ TRACE_EVENT(ext4_sync_file, | |||
689 | ), | 689 | ), |
690 | 690 | ||
691 | TP_printk("dev %s ino %ld parent %ld datasync %d ", | 691 | TP_printk("dev %s ino %ld parent %ld datasync %d ", |
692 | jbd2_dev_to_name(__entry->dev), __entry->ino, __entry->parent, | 692 | jbd2_dev_to_name(__entry->dev), (unsigned long) __entry->ino, |
693 | __entry->datasync) | 693 | (unsigned long) __entry->parent, __entry->datasync) |
694 | ); | 694 | ); |
695 | 695 | ||
696 | TRACE_EVENT(ext4_sync_fs, | 696 | TRACE_EVENT(ext4_sync_fs, |
@@ -713,6 +713,30 @@ TRACE_EVENT(ext4_sync_fs, | |||
713 | __entry->wait) | 713 | __entry->wait) |
714 | ); | 714 | ); |
715 | 715 | ||
716 | TRACE_EVENT(ext4_alloc_da_blocks, | ||
717 | TP_PROTO(struct inode *inode), | ||
718 | |||
719 | TP_ARGS(inode), | ||
720 | |||
721 | TP_STRUCT__entry( | ||
722 | __field( dev_t, dev ) | ||
723 | __field( ino_t, ino ) | ||
724 | __field( unsigned int, data_blocks ) | ||
725 | __field( unsigned int, meta_blocks ) | ||
726 | ), | ||
727 | |||
728 | TP_fast_assign( | ||
729 | __entry->dev = inode->i_sb->s_dev; | ||
730 | __entry->ino = inode->i_ino; | ||
731 | __entry->data_blocks = EXT4_I(inode)->i_reserved_data_blocks; | ||
732 | __entry->meta_blocks = EXT4_I(inode)->i_reserved_meta_blocks; | ||
733 | ), | ||
734 | |||
735 | TP_printk("dev %s ino %lu data_blocks %u meta_blocks %u", | ||
736 | jbd2_dev_to_name(__entry->dev), (unsigned long) __entry->ino, | ||
737 | __entry->data_blocks, __entry->meta_blocks) | ||
738 | ); | ||
739 | |||
716 | #endif /* _TRACE_EXT4_H */ | 740 | #endif /* _TRACE_EXT4_H */ |
717 | 741 | ||
718 | /* This part must be outside protection */ | 742 | /* This part must be outside protection */ |
diff --git a/include/trace/events/irq.h b/include/trace/events/irq.h index b0c7ede55eb1..b89f9db4a404 100644 --- a/include/trace/events/irq.h +++ b/include/trace/events/irq.h | |||
@@ -1,23 +1,24 @@ | |||
1 | #undef TRACE_SYSTEM | ||
2 | #define TRACE_SYSTEM irq | ||
3 | |||
1 | #if !defined(_TRACE_IRQ_H) || defined(TRACE_HEADER_MULTI_READ) | 4 | #if !defined(_TRACE_IRQ_H) || defined(TRACE_HEADER_MULTI_READ) |
2 | #define _TRACE_IRQ_H | 5 | #define _TRACE_IRQ_H |
3 | 6 | ||
4 | #include <linux/tracepoint.h> | 7 | #include <linux/tracepoint.h> |
5 | #include <linux/interrupt.h> | 8 | #include <linux/interrupt.h> |
6 | 9 | ||
7 | #undef TRACE_SYSTEM | ||
8 | #define TRACE_SYSTEM irq | ||
9 | |||
10 | #define softirq_name(sirq) { sirq##_SOFTIRQ, #sirq } | 10 | #define softirq_name(sirq) { sirq##_SOFTIRQ, #sirq } |
11 | #define show_softirq_name(val) \ | 11 | #define show_softirq_name(val) \ |
12 | __print_symbolic(val, \ | 12 | __print_symbolic(val, \ |
13 | softirq_name(HI), \ | 13 | softirq_name(HI), \ |
14 | softirq_name(TIMER), \ | 14 | softirq_name(TIMER), \ |
15 | softirq_name(NET_TX), \ | 15 | softirq_name(NET_TX), \ |
16 | softirq_name(NET_RX), \ | 16 | softirq_name(NET_RX), \ |
17 | softirq_name(BLOCK), \ | 17 | softirq_name(BLOCK), \ |
18 | softirq_name(TASKLET), \ | 18 | softirq_name(BLOCK_IOPOLL), \ |
19 | softirq_name(SCHED), \ | 19 | softirq_name(TASKLET), \ |
20 | softirq_name(HRTIMER), \ | 20 | softirq_name(SCHED), \ |
21 | softirq_name(HRTIMER), \ | ||
21 | softirq_name(RCU)) | 22 | softirq_name(RCU)) |
22 | 23 | ||
23 | /** | 24 | /** |
diff --git a/include/trace/events/jbd2.h b/include/trace/events/jbd2.h index 845b0b4b48fd..b851f0b4701c 100644 --- a/include/trace/events/jbd2.h +++ b/include/trace/events/jbd2.h | |||
@@ -1,12 +1,12 @@ | |||
1 | #undef TRACE_SYSTEM | ||
2 | #define TRACE_SYSTEM jbd2 | ||
3 | |||
1 | #if !defined(_TRACE_JBD2_H) || defined(TRACE_HEADER_MULTI_READ) | 4 | #if !defined(_TRACE_JBD2_H) || defined(TRACE_HEADER_MULTI_READ) |
2 | #define _TRACE_JBD2_H | 5 | #define _TRACE_JBD2_H |
3 | 6 | ||
4 | #include <linux/jbd2.h> | 7 | #include <linux/jbd2.h> |
5 | #include <linux/tracepoint.h> | 8 | #include <linux/tracepoint.h> |
6 | 9 | ||
7 | #undef TRACE_SYSTEM | ||
8 | #define TRACE_SYSTEM jbd2 | ||
9 | |||
10 | TRACE_EVENT(jbd2_checkpoint, | 10 | TRACE_EVENT(jbd2_checkpoint, |
11 | 11 | ||
12 | TP_PROTO(journal_t *journal, int result), | 12 | TP_PROTO(journal_t *journal, int result), |
@@ -159,7 +159,7 @@ TRACE_EVENT(jbd2_submit_inode_data, | |||
159 | ), | 159 | ), |
160 | 160 | ||
161 | TP_printk("dev %s ino %lu", | 161 | TP_printk("dev %s ino %lu", |
162 | jbd2_dev_to_name(__entry->dev), __entry->ino) | 162 | jbd2_dev_to_name(__entry->dev), (unsigned long) __entry->ino) |
163 | ); | 163 | ); |
164 | 164 | ||
165 | #endif /* _TRACE_JBD2_H */ | 165 | #endif /* _TRACE_JBD2_H */ |
diff --git a/include/trace/events/kmem.h b/include/trace/events/kmem.h index 9baba50d6512..eaf46bdd18a5 100644 --- a/include/trace/events/kmem.h +++ b/include/trace/events/kmem.h | |||
@@ -1,12 +1,12 @@ | |||
1 | #undef TRACE_SYSTEM | ||
2 | #define TRACE_SYSTEM kmem | ||
3 | |||
1 | #if !defined(_TRACE_KMEM_H) || defined(TRACE_HEADER_MULTI_READ) | 4 | #if !defined(_TRACE_KMEM_H) || defined(TRACE_HEADER_MULTI_READ) |
2 | #define _TRACE_KMEM_H | 5 | #define _TRACE_KMEM_H |
3 | 6 | ||
4 | #include <linux/types.h> | 7 | #include <linux/types.h> |
5 | #include <linux/tracepoint.h> | 8 | #include <linux/tracepoint.h> |
6 | 9 | ||
7 | #undef TRACE_SYSTEM | ||
8 | #define TRACE_SYSTEM kmem | ||
9 | |||
10 | /* | 10 | /* |
11 | * The order of these masks is important. Matching masks will be seen | 11 | * The order of these masks is important. Matching masks will be seen |
12 | * first and the left over flags will end up showing by themselves. | 12 | * first and the left over flags will end up showing by themselves. |
@@ -225,6 +225,169 @@ TRACE_EVENT(kmem_cache_free, | |||
225 | 225 | ||
226 | TP_printk("call_site=%lx ptr=%p", __entry->call_site, __entry->ptr) | 226 | TP_printk("call_site=%lx ptr=%p", __entry->call_site, __entry->ptr) |
227 | ); | 227 | ); |
228 | |||
229 | TRACE_EVENT(mm_page_free_direct, | ||
230 | |||
231 | TP_PROTO(struct page *page, unsigned int order), | ||
232 | |||
233 | TP_ARGS(page, order), | ||
234 | |||
235 | TP_STRUCT__entry( | ||
236 | __field( struct page *, page ) | ||
237 | __field( unsigned int, order ) | ||
238 | ), | ||
239 | |||
240 | TP_fast_assign( | ||
241 | __entry->page = page; | ||
242 | __entry->order = order; | ||
243 | ), | ||
244 | |||
245 | TP_printk("page=%p pfn=%lu order=%d", | ||
246 | __entry->page, | ||
247 | page_to_pfn(__entry->page), | ||
248 | __entry->order) | ||
249 | ); | ||
250 | |||
251 | TRACE_EVENT(mm_pagevec_free, | ||
252 | |||
253 | TP_PROTO(struct page *page, int cold), | ||
254 | |||
255 | TP_ARGS(page, cold), | ||
256 | |||
257 | TP_STRUCT__entry( | ||
258 | __field( struct page *, page ) | ||
259 | __field( int, cold ) | ||
260 | ), | ||
261 | |||
262 | TP_fast_assign( | ||
263 | __entry->page = page; | ||
264 | __entry->cold = cold; | ||
265 | ), | ||
266 | |||
267 | TP_printk("page=%p pfn=%lu order=0 cold=%d", | ||
268 | __entry->page, | ||
269 | page_to_pfn(__entry->page), | ||
270 | __entry->cold) | ||
271 | ); | ||
272 | |||
273 | TRACE_EVENT(mm_page_alloc, | ||
274 | |||
275 | TP_PROTO(struct page *page, unsigned int order, | ||
276 | gfp_t gfp_flags, int migratetype), | ||
277 | |||
278 | TP_ARGS(page, order, gfp_flags, migratetype), | ||
279 | |||
280 | TP_STRUCT__entry( | ||
281 | __field( struct page *, page ) | ||
282 | __field( unsigned int, order ) | ||
283 | __field( gfp_t, gfp_flags ) | ||
284 | __field( int, migratetype ) | ||
285 | ), | ||
286 | |||
287 | TP_fast_assign( | ||
288 | __entry->page = page; | ||
289 | __entry->order = order; | ||
290 | __entry->gfp_flags = gfp_flags; | ||
291 | __entry->migratetype = migratetype; | ||
292 | ), | ||
293 | |||
294 | TP_printk("page=%p pfn=%lu order=%d migratetype=%d gfp_flags=%s", | ||
295 | __entry->page, | ||
296 | page_to_pfn(__entry->page), | ||
297 | __entry->order, | ||
298 | __entry->migratetype, | ||
299 | show_gfp_flags(__entry->gfp_flags)) | ||
300 | ); | ||
301 | |||
302 | TRACE_EVENT(mm_page_alloc_zone_locked, | ||
303 | |||
304 | TP_PROTO(struct page *page, unsigned int order, int migratetype), | ||
305 | |||
306 | TP_ARGS(page, order, migratetype), | ||
307 | |||
308 | TP_STRUCT__entry( | ||
309 | __field( struct page *, page ) | ||
310 | __field( unsigned int, order ) | ||
311 | __field( int, migratetype ) | ||
312 | ), | ||
313 | |||
314 | TP_fast_assign( | ||
315 | __entry->page = page; | ||
316 | __entry->order = order; | ||
317 | __entry->migratetype = migratetype; | ||
318 | ), | ||
319 | |||
320 | TP_printk("page=%p pfn=%lu order=%u migratetype=%d percpu_refill=%d", | ||
321 | __entry->page, | ||
322 | page_to_pfn(__entry->page), | ||
323 | __entry->order, | ||
324 | __entry->migratetype, | ||
325 | __entry->order == 0) | ||
326 | ); | ||
327 | |||
328 | TRACE_EVENT(mm_page_pcpu_drain, | ||
329 | |||
330 | TP_PROTO(struct page *page, int order, int migratetype), | ||
331 | |||
332 | TP_ARGS(page, order, migratetype), | ||
333 | |||
334 | TP_STRUCT__entry( | ||
335 | __field( struct page *, page ) | ||
336 | __field( int, order ) | ||
337 | __field( int, migratetype ) | ||
338 | ), | ||
339 | |||
340 | TP_fast_assign( | ||
341 | __entry->page = page; | ||
342 | __entry->order = order; | ||
343 | __entry->migratetype = migratetype; | ||
344 | ), | ||
345 | |||
346 | TP_printk("page=%p pfn=%lu order=%d migratetype=%d", | ||
347 | __entry->page, | ||
348 | page_to_pfn(__entry->page), | ||
349 | __entry->order, | ||
350 | __entry->migratetype) | ||
351 | ); | ||
352 | |||
353 | TRACE_EVENT(mm_page_alloc_extfrag, | ||
354 | |||
355 | TP_PROTO(struct page *page, | ||
356 | int alloc_order, int fallback_order, | ||
357 | int alloc_migratetype, int fallback_migratetype), | ||
358 | |||
359 | TP_ARGS(page, | ||
360 | alloc_order, fallback_order, | ||
361 | alloc_migratetype, fallback_migratetype), | ||
362 | |||
363 | TP_STRUCT__entry( | ||
364 | __field( struct page *, page ) | ||
365 | __field( int, alloc_order ) | ||
366 | __field( int, fallback_order ) | ||
367 | __field( int, alloc_migratetype ) | ||
368 | __field( int, fallback_migratetype ) | ||
369 | ), | ||
370 | |||
371 | TP_fast_assign( | ||
372 | __entry->page = page; | ||
373 | __entry->alloc_order = alloc_order; | ||
374 | __entry->fallback_order = fallback_order; | ||
375 | __entry->alloc_migratetype = alloc_migratetype; | ||
376 | __entry->fallback_migratetype = fallback_migratetype; | ||
377 | ), | ||
378 | |||
379 | TP_printk("page=%p pfn=%lu alloc_order=%d fallback_order=%d pageblock_order=%d alloc_migratetype=%d fallback_migratetype=%d fragmenting=%d change_ownership=%d", | ||
380 | __entry->page, | ||
381 | page_to_pfn(__entry->page), | ||
382 | __entry->alloc_order, | ||
383 | __entry->fallback_order, | ||
384 | pageblock_order, | ||
385 | __entry->alloc_migratetype, | ||
386 | __entry->fallback_migratetype, | ||
387 | __entry->fallback_order < pageblock_order, | ||
388 | __entry->alloc_migratetype == __entry->fallback_migratetype) | ||
389 | ); | ||
390 | |||
228 | #endif /* _TRACE_KMEM_H */ | 391 | #endif /* _TRACE_KMEM_H */ |
229 | 392 | ||
230 | /* This part must be outside protection */ | 393 | /* This part must be outside protection */ |
diff --git a/include/trace/events/kvm.h b/include/trace/events/kvm.h new file mode 100644 index 000000000000..dbe108455275 --- /dev/null +++ b/include/trace/events/kvm.h | |||
@@ -0,0 +1,151 @@ | |||
1 | #if !defined(_TRACE_KVM_MAIN_H) || defined(TRACE_HEADER_MULTI_READ) | ||
2 | #define _TRACE_KVM_MAIN_H | ||
3 | |||
4 | #include <linux/tracepoint.h> | ||
5 | |||
6 | #undef TRACE_SYSTEM | ||
7 | #define TRACE_SYSTEM kvm | ||
8 | #define TRACE_INCLUDE_FILE kvm | ||
9 | |||
10 | #if defined(__KVM_HAVE_IOAPIC) | ||
11 | TRACE_EVENT(kvm_set_irq, | ||
12 | TP_PROTO(unsigned int gsi, int level, int irq_source_id), | ||
13 | TP_ARGS(gsi, level, irq_source_id), | ||
14 | |||
15 | TP_STRUCT__entry( | ||
16 | __field( unsigned int, gsi ) | ||
17 | __field( int, level ) | ||
18 | __field( int, irq_source_id ) | ||
19 | ), | ||
20 | |||
21 | TP_fast_assign( | ||
22 | __entry->gsi = gsi; | ||
23 | __entry->level = level; | ||
24 | __entry->irq_source_id = irq_source_id; | ||
25 | ), | ||
26 | |||
27 | TP_printk("gsi %u level %d source %d", | ||
28 | __entry->gsi, __entry->level, __entry->irq_source_id) | ||
29 | ); | ||
30 | |||
31 | #define kvm_deliver_mode \ | ||
32 | {0x0, "Fixed"}, \ | ||
33 | {0x1, "LowPrio"}, \ | ||
34 | {0x2, "SMI"}, \ | ||
35 | {0x3, "Res3"}, \ | ||
36 | {0x4, "NMI"}, \ | ||
37 | {0x5, "INIT"}, \ | ||
38 | {0x6, "SIPI"}, \ | ||
39 | {0x7, "ExtINT"} | ||
40 | |||
41 | TRACE_EVENT(kvm_ioapic_set_irq, | ||
42 | TP_PROTO(__u64 e, int pin, bool coalesced), | ||
43 | TP_ARGS(e, pin, coalesced), | ||
44 | |||
45 | TP_STRUCT__entry( | ||
46 | __field( __u64, e ) | ||
47 | __field( int, pin ) | ||
48 | __field( bool, coalesced ) | ||
49 | ), | ||
50 | |||
51 | TP_fast_assign( | ||
52 | __entry->e = e; | ||
53 | __entry->pin = pin; | ||
54 | __entry->coalesced = coalesced; | ||
55 | ), | ||
56 | |||
57 | TP_printk("pin %u dst %x vec=%u (%s|%s|%s%s)%s", | ||
58 | __entry->pin, (u8)(__entry->e >> 56), (u8)__entry->e, | ||
59 | __print_symbolic((__entry->e >> 8 & 0x7), kvm_deliver_mode), | ||
60 | (__entry->e & (1<<11)) ? "logical" : "physical", | ||
61 | (__entry->e & (1<<15)) ? "level" : "edge", | ||
62 | (__entry->e & (1<<16)) ? "|masked" : "", | ||
63 | __entry->coalesced ? " (coalesced)" : "") | ||
64 | ); | ||
65 | |||
66 | TRACE_EVENT(kvm_msi_set_irq, | ||
67 | TP_PROTO(__u64 address, __u64 data), | ||
68 | TP_ARGS(address, data), | ||
69 | |||
70 | TP_STRUCT__entry( | ||
71 | __field( __u64, address ) | ||
72 | __field( __u64, data ) | ||
73 | ), | ||
74 | |||
75 | TP_fast_assign( | ||
76 | __entry->address = address; | ||
77 | __entry->data = data; | ||
78 | ), | ||
79 | |||
80 | TP_printk("dst %u vec %x (%s|%s|%s%s)", | ||
81 | (u8)(__entry->address >> 12), (u8)__entry->data, | ||
82 | __print_symbolic((__entry->data >> 8 & 0x7), kvm_deliver_mode), | ||
83 | (__entry->address & (1<<2)) ? "logical" : "physical", | ||
84 | (__entry->data & (1<<15)) ? "level" : "edge", | ||
85 | (__entry->address & (1<<3)) ? "|rh" : "") | ||
86 | ); | ||
87 | |||
88 | #define kvm_irqchips \ | ||
89 | {KVM_IRQCHIP_PIC_MASTER, "PIC master"}, \ | ||
90 | {KVM_IRQCHIP_PIC_SLAVE, "PIC slave"}, \ | ||
91 | {KVM_IRQCHIP_IOAPIC, "IOAPIC"} | ||
92 | |||
93 | TRACE_EVENT(kvm_ack_irq, | ||
94 | TP_PROTO(unsigned int irqchip, unsigned int pin), | ||
95 | TP_ARGS(irqchip, pin), | ||
96 | |||
97 | TP_STRUCT__entry( | ||
98 | __field( unsigned int, irqchip ) | ||
99 | __field( unsigned int, pin ) | ||
100 | ), | ||
101 | |||
102 | TP_fast_assign( | ||
103 | __entry->irqchip = irqchip; | ||
104 | __entry->pin = pin; | ||
105 | ), | ||
106 | |||
107 | TP_printk("irqchip %s pin %u", | ||
108 | __print_symbolic(__entry->irqchip, kvm_irqchips), | ||
109 | __entry->pin) | ||
110 | ); | ||
111 | |||
112 | |||
113 | |||
114 | #endif /* defined(__KVM_HAVE_IOAPIC) */ | ||
115 | |||
116 | #define KVM_TRACE_MMIO_READ_UNSATISFIED 0 | ||
117 | #define KVM_TRACE_MMIO_READ 1 | ||
118 | #define KVM_TRACE_MMIO_WRITE 2 | ||
119 | |||
120 | #define kvm_trace_symbol_mmio \ | ||
121 | { KVM_TRACE_MMIO_READ_UNSATISFIED, "unsatisfied-read" }, \ | ||
122 | { KVM_TRACE_MMIO_READ, "read" }, \ | ||
123 | { KVM_TRACE_MMIO_WRITE, "write" } | ||
124 | |||
125 | TRACE_EVENT(kvm_mmio, | ||
126 | TP_PROTO(int type, int len, u64 gpa, u64 val), | ||
127 | TP_ARGS(type, len, gpa, val), | ||
128 | |||
129 | TP_STRUCT__entry( | ||
130 | __field( u32, type ) | ||
131 | __field( u32, len ) | ||
132 | __field( u64, gpa ) | ||
133 | __field( u64, val ) | ||
134 | ), | ||
135 | |||
136 | TP_fast_assign( | ||
137 | __entry->type = type; | ||
138 | __entry->len = len; | ||
139 | __entry->gpa = gpa; | ||
140 | __entry->val = val; | ||
141 | ), | ||
142 | |||
143 | TP_printk("mmio %s len %u gpa 0x%llx val 0x%llx", | ||
144 | __print_symbolic(__entry->type, kvm_trace_symbol_mmio), | ||
145 | __entry->len, __entry->gpa, __entry->val) | ||
146 | ); | ||
147 | |||
148 | #endif /* _TRACE_KVM_MAIN_H */ | ||
149 | |||
150 | /* This part must be outside protection */ | ||
151 | #include <trace/define_trace.h> | ||
diff --git a/include/trace/events/lockdep.h b/include/trace/events/lockdep.h index 0e956c9dfd7e..bcf1d209a00d 100644 --- a/include/trace/events/lockdep.h +++ b/include/trace/events/lockdep.h | |||
@@ -1,12 +1,12 @@ | |||
1 | #undef TRACE_SYSTEM | ||
2 | #define TRACE_SYSTEM lockdep | ||
3 | |||
1 | #if !defined(_TRACE_LOCKDEP_H) || defined(TRACE_HEADER_MULTI_READ) | 4 | #if !defined(_TRACE_LOCKDEP_H) || defined(TRACE_HEADER_MULTI_READ) |
2 | #define _TRACE_LOCKDEP_H | 5 | #define _TRACE_LOCKDEP_H |
3 | 6 | ||
4 | #include <linux/lockdep.h> | 7 | #include <linux/lockdep.h> |
5 | #include <linux/tracepoint.h> | 8 | #include <linux/tracepoint.h> |
6 | 9 | ||
7 | #undef TRACE_SYSTEM | ||
8 | #define TRACE_SYSTEM lockdep | ||
9 | |||
10 | #ifdef CONFIG_LOCKDEP | 10 | #ifdef CONFIG_LOCKDEP |
11 | 11 | ||
12 | TRACE_EVENT(lock_acquire, | 12 | TRACE_EVENT(lock_acquire, |
diff --git a/include/trace/events/module.h b/include/trace/events/module.h new file mode 100644 index 000000000000..84160fb18478 --- /dev/null +++ b/include/trace/events/module.h | |||
@@ -0,0 +1,126 @@ | |||
1 | #undef TRACE_SYSTEM | ||
2 | #define TRACE_SYSTEM module | ||
3 | |||
4 | #if !defined(_TRACE_MODULE_H) || defined(TRACE_HEADER_MULTI_READ) | ||
5 | #define _TRACE_MODULE_H | ||
6 | |||
7 | #include <linux/tracepoint.h> | ||
8 | |||
9 | #ifdef CONFIG_MODULES | ||
10 | |||
11 | struct module; | ||
12 | |||
13 | #define show_module_flags(flags) __print_flags(flags, "", \ | ||
14 | { (1UL << TAINT_PROPRIETARY_MODULE), "P" }, \ | ||
15 | { (1UL << TAINT_FORCED_MODULE), "F" }, \ | ||
16 | { (1UL << TAINT_CRAP), "C" }) | ||
17 | |||
18 | TRACE_EVENT(module_load, | ||
19 | |||
20 | TP_PROTO(struct module *mod), | ||
21 | |||
22 | TP_ARGS(mod), | ||
23 | |||
24 | TP_STRUCT__entry( | ||
25 | __field( unsigned int, taints ) | ||
26 | __string( name, mod->name ) | ||
27 | ), | ||
28 | |||
29 | TP_fast_assign( | ||
30 | __entry->taints = mod->taints; | ||
31 | __assign_str(name, mod->name); | ||
32 | ), | ||
33 | |||
34 | TP_printk("%s %s", __get_str(name), show_module_flags(__entry->taints)) | ||
35 | ); | ||
36 | |||
37 | TRACE_EVENT(module_free, | ||
38 | |||
39 | TP_PROTO(struct module *mod), | ||
40 | |||
41 | TP_ARGS(mod), | ||
42 | |||
43 | TP_STRUCT__entry( | ||
44 | __string( name, mod->name ) | ||
45 | ), | ||
46 | |||
47 | TP_fast_assign( | ||
48 | __assign_str(name, mod->name); | ||
49 | ), | ||
50 | |||
51 | TP_printk("%s", __get_str(name)) | ||
52 | ); | ||
53 | |||
54 | TRACE_EVENT(module_get, | ||
55 | |||
56 | TP_PROTO(struct module *mod, unsigned long ip, int refcnt), | ||
57 | |||
58 | TP_ARGS(mod, ip, refcnt), | ||
59 | |||
60 | TP_STRUCT__entry( | ||
61 | __field( unsigned long, ip ) | ||
62 | __field( int, refcnt ) | ||
63 | __string( name, mod->name ) | ||
64 | ), | ||
65 | |||
66 | TP_fast_assign( | ||
67 | __entry->ip = ip; | ||
68 | __entry->refcnt = refcnt; | ||
69 | __assign_str(name, mod->name); | ||
70 | ), | ||
71 | |||
72 | TP_printk("%s call_site=%pf refcnt=%d", | ||
73 | __get_str(name), (void *)__entry->ip, __entry->refcnt) | ||
74 | ); | ||
75 | |||
76 | TRACE_EVENT(module_put, | ||
77 | |||
78 | TP_PROTO(struct module *mod, unsigned long ip, int refcnt), | ||
79 | |||
80 | TP_ARGS(mod, ip, refcnt), | ||
81 | |||
82 | TP_STRUCT__entry( | ||
83 | __field( unsigned long, ip ) | ||
84 | __field( int, refcnt ) | ||
85 | __string( name, mod->name ) | ||
86 | ), | ||
87 | |||
88 | TP_fast_assign( | ||
89 | __entry->ip = ip; | ||
90 | __entry->refcnt = refcnt; | ||
91 | __assign_str(name, mod->name); | ||
92 | ), | ||
93 | |||
94 | TP_printk("%s call_site=%pf refcnt=%d", | ||
95 | __get_str(name), (void *)__entry->ip, __entry->refcnt) | ||
96 | ); | ||
97 | |||
98 | TRACE_EVENT(module_request, | ||
99 | |||
100 | TP_PROTO(char *name, bool wait, unsigned long ip), | ||
101 | |||
102 | TP_ARGS(name, wait, ip), | ||
103 | |||
104 | TP_STRUCT__entry( | ||
105 | __field( bool, wait ) | ||
106 | __field( unsigned long, ip ) | ||
107 | __string( name, name ) | ||
108 | ), | ||
109 | |||
110 | TP_fast_assign( | ||
111 | __entry->wait = wait; | ||
112 | __entry->ip = ip; | ||
113 | __assign_str(name, name); | ||
114 | ), | ||
115 | |||
116 | TP_printk("%s wait=%d call_site=%pf", | ||
117 | __get_str(name), (int)__entry->wait, (void *)__entry->ip) | ||
118 | ); | ||
119 | |||
120 | #endif /* CONFIG_MODULES */ | ||
121 | |||
122 | #endif /* _TRACE_MODULE_H */ | ||
123 | |||
124 | /* This part must be outside protection */ | ||
125 | #include <trace/define_trace.h> | ||
126 | |||
diff --git a/include/trace/events/power.h b/include/trace/events/power.h new file mode 100644 index 000000000000..ea6d579261ad --- /dev/null +++ b/include/trace/events/power.h | |||
@@ -0,0 +1,81 @@ | |||
1 | #undef TRACE_SYSTEM | ||
2 | #define TRACE_SYSTEM power | ||
3 | |||
4 | #if !defined(_TRACE_POWER_H) || defined(TRACE_HEADER_MULTI_READ) | ||
5 | #define _TRACE_POWER_H | ||
6 | |||
7 | #include <linux/ktime.h> | ||
8 | #include <linux/tracepoint.h> | ||
9 | |||
10 | #ifndef _TRACE_POWER_ENUM_ | ||
11 | #define _TRACE_POWER_ENUM_ | ||
12 | enum { | ||
13 | POWER_NONE = 0, | ||
14 | POWER_CSTATE = 1, | ||
15 | POWER_PSTATE = 2, | ||
16 | }; | ||
17 | #endif | ||
18 | |||
19 | |||
20 | |||
21 | TRACE_EVENT(power_start, | ||
22 | |||
23 | TP_PROTO(unsigned int type, unsigned int state), | ||
24 | |||
25 | TP_ARGS(type, state), | ||
26 | |||
27 | TP_STRUCT__entry( | ||
28 | __field( u64, type ) | ||
29 | __field( u64, state ) | ||
30 | ), | ||
31 | |||
32 | TP_fast_assign( | ||
33 | __entry->type = type; | ||
34 | __entry->state = state; | ||
35 | ), | ||
36 | |||
37 | TP_printk("type=%lu state=%lu", (unsigned long)__entry->type, (unsigned long)__entry->state) | ||
38 | ); | ||
39 | |||
40 | TRACE_EVENT(power_end, | ||
41 | |||
42 | TP_PROTO(int dummy), | ||
43 | |||
44 | TP_ARGS(dummy), | ||
45 | |||
46 | TP_STRUCT__entry( | ||
47 | __field( u64, dummy ) | ||
48 | ), | ||
49 | |||
50 | TP_fast_assign( | ||
51 | __entry->dummy = 0xffff; | ||
52 | ), | ||
53 | |||
54 | TP_printk("dummy=%lu", (unsigned long)__entry->dummy) | ||
55 | |||
56 | ); | ||
57 | |||
58 | |||
59 | TRACE_EVENT(power_frequency, | ||
60 | |||
61 | TP_PROTO(unsigned int type, unsigned int state), | ||
62 | |||
63 | TP_ARGS(type, state), | ||
64 | |||
65 | TP_STRUCT__entry( | ||
66 | __field( u64, type ) | ||
67 | __field( u64, state ) | ||
68 | ), | ||
69 | |||
70 | TP_fast_assign( | ||
71 | __entry->type = type; | ||
72 | __entry->state = state; | ||
73 | ), | ||
74 | |||
75 | TP_printk("type=%lu state=%lu", (unsigned long)__entry->type, (unsigned long) __entry->state) | ||
76 | ); | ||
77 | |||
78 | #endif /* _TRACE_POWER_H */ | ||
79 | |||
80 | /* This part must be outside protection */ | ||
81 | #include <trace/define_trace.h> | ||
diff --git a/include/trace/events/sched.h b/include/trace/events/sched.h index 24ab5bcff7b2..4069c43f4187 100644 --- a/include/trace/events/sched.h +++ b/include/trace/events/sched.h | |||
@@ -1,12 +1,12 @@ | |||
1 | #undef TRACE_SYSTEM | ||
2 | #define TRACE_SYSTEM sched | ||
3 | |||
1 | #if !defined(_TRACE_SCHED_H) || defined(TRACE_HEADER_MULTI_READ) | 4 | #if !defined(_TRACE_SCHED_H) || defined(TRACE_HEADER_MULTI_READ) |
2 | #define _TRACE_SCHED_H | 5 | #define _TRACE_SCHED_H |
3 | 6 | ||
4 | #include <linux/sched.h> | 7 | #include <linux/sched.h> |
5 | #include <linux/tracepoint.h> | 8 | #include <linux/tracepoint.h> |
6 | 9 | ||
7 | #undef TRACE_SYSTEM | ||
8 | #define TRACE_SYSTEM sched | ||
9 | |||
10 | /* | 10 | /* |
11 | * Tracepoint for calling kthread_stop, performed to end a kthread: | 11 | * Tracepoint for calling kthread_stop, performed to end a kthread: |
12 | */ | 12 | */ |
@@ -94,6 +94,7 @@ TRACE_EVENT(sched_wakeup, | |||
94 | __field( pid_t, pid ) | 94 | __field( pid_t, pid ) |
95 | __field( int, prio ) | 95 | __field( int, prio ) |
96 | __field( int, success ) | 96 | __field( int, success ) |
97 | __field( int, cpu ) | ||
97 | ), | 98 | ), |
98 | 99 | ||
99 | TP_fast_assign( | 100 | TP_fast_assign( |
@@ -101,11 +102,12 @@ TRACE_EVENT(sched_wakeup, | |||
101 | __entry->pid = p->pid; | 102 | __entry->pid = p->pid; |
102 | __entry->prio = p->prio; | 103 | __entry->prio = p->prio; |
103 | __entry->success = success; | 104 | __entry->success = success; |
105 | __entry->cpu = task_cpu(p); | ||
104 | ), | 106 | ), |
105 | 107 | ||
106 | TP_printk("task %s:%d [%d] success=%d", | 108 | TP_printk("task %s:%d [%d] success=%d [%03d]", |
107 | __entry->comm, __entry->pid, __entry->prio, | 109 | __entry->comm, __entry->pid, __entry->prio, |
108 | __entry->success) | 110 | __entry->success, __entry->cpu) |
109 | ); | 111 | ); |
110 | 112 | ||
111 | /* | 113 | /* |
@@ -125,6 +127,7 @@ TRACE_EVENT(sched_wakeup_new, | |||
125 | __field( pid_t, pid ) | 127 | __field( pid_t, pid ) |
126 | __field( int, prio ) | 128 | __field( int, prio ) |
127 | __field( int, success ) | 129 | __field( int, success ) |
130 | __field( int, cpu ) | ||
128 | ), | 131 | ), |
129 | 132 | ||
130 | TP_fast_assign( | 133 | TP_fast_assign( |
@@ -132,11 +135,12 @@ TRACE_EVENT(sched_wakeup_new, | |||
132 | __entry->pid = p->pid; | 135 | __entry->pid = p->pid; |
133 | __entry->prio = p->prio; | 136 | __entry->prio = p->prio; |
134 | __entry->success = success; | 137 | __entry->success = success; |
138 | __entry->cpu = task_cpu(p); | ||
135 | ), | 139 | ), |
136 | 140 | ||
137 | TP_printk("task %s:%d [%d] success=%d", | 141 | TP_printk("task %s:%d [%d] success=%d [%03d]", |
138 | __entry->comm, __entry->pid, __entry->prio, | 142 | __entry->comm, __entry->pid, __entry->prio, |
139 | __entry->success) | 143 | __entry->success, __entry->cpu) |
140 | ); | 144 | ); |
141 | 145 | ||
142 | /* | 146 | /* |
@@ -340,6 +344,134 @@ TRACE_EVENT(sched_signal_send, | |||
340 | __entry->sig, __entry->comm, __entry->pid) | 344 | __entry->sig, __entry->comm, __entry->pid) |
341 | ); | 345 | ); |
342 | 346 | ||
347 | /* | ||
348 | * XXX the below sched_stat tracepoints only apply to SCHED_OTHER/BATCH/IDLE | ||
349 | * adding sched_stat support to SCHED_FIFO/RR would be welcome. | ||
350 | */ | ||
351 | |||
352 | /* | ||
353 | * Tracepoint for accounting wait time (time the task is runnable | ||
354 | * but not actually running due to scheduler contention). | ||
355 | */ | ||
356 | TRACE_EVENT(sched_stat_wait, | ||
357 | |||
358 | TP_PROTO(struct task_struct *tsk, u64 delay), | ||
359 | |||
360 | TP_ARGS(tsk, delay), | ||
361 | |||
362 | TP_STRUCT__entry( | ||
363 | __array( char, comm, TASK_COMM_LEN ) | ||
364 | __field( pid_t, pid ) | ||
365 | __field( u64, delay ) | ||
366 | ), | ||
367 | |||
368 | TP_fast_assign( | ||
369 | memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN); | ||
370 | __entry->pid = tsk->pid; | ||
371 | __entry->delay = delay; | ||
372 | ) | ||
373 | TP_perf_assign( | ||
374 | __perf_count(delay); | ||
375 | ), | ||
376 | |||
377 | TP_printk("task: %s:%d wait: %Lu [ns]", | ||
378 | __entry->comm, __entry->pid, | ||
379 | (unsigned long long)__entry->delay) | ||
380 | ); | ||
381 | |||
382 | /* | ||
383 | * Tracepoint for accounting runtime (time the task is executing | ||
384 | * on a CPU). | ||
385 | */ | ||
386 | TRACE_EVENT(sched_stat_runtime, | ||
387 | |||
388 | TP_PROTO(struct task_struct *tsk, u64 runtime, u64 vruntime), | ||
389 | |||
390 | TP_ARGS(tsk, runtime, vruntime), | ||
391 | |||
392 | TP_STRUCT__entry( | ||
393 | __array( char, comm, TASK_COMM_LEN ) | ||
394 | __field( pid_t, pid ) | ||
395 | __field( u64, runtime ) | ||
396 | __field( u64, vruntime ) | ||
397 | ), | ||
398 | |||
399 | TP_fast_assign( | ||
400 | memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN); | ||
401 | __entry->pid = tsk->pid; | ||
402 | __entry->runtime = runtime; | ||
403 | __entry->vruntime = vruntime; | ||
404 | ) | ||
405 | TP_perf_assign( | ||
406 | __perf_count(runtime); | ||
407 | ), | ||
408 | |||
409 | TP_printk("task: %s:%d runtime: %Lu [ns], vruntime: %Lu [ns]", | ||
410 | __entry->comm, __entry->pid, | ||
411 | (unsigned long long)__entry->runtime, | ||
412 | (unsigned long long)__entry->vruntime) | ||
413 | ); | ||
414 | |||
415 | /* | ||
416 | * Tracepoint for accounting sleep time (time the task is not runnable, | ||
417 | * including iowait, see below). | ||
418 | */ | ||
419 | TRACE_EVENT(sched_stat_sleep, | ||
420 | |||
421 | TP_PROTO(struct task_struct *tsk, u64 delay), | ||
422 | |||
423 | TP_ARGS(tsk, delay), | ||
424 | |||
425 | TP_STRUCT__entry( | ||
426 | __array( char, comm, TASK_COMM_LEN ) | ||
427 | __field( pid_t, pid ) | ||
428 | __field( u64, delay ) | ||
429 | ), | ||
430 | |||
431 | TP_fast_assign( | ||
432 | memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN); | ||
433 | __entry->pid = tsk->pid; | ||
434 | __entry->delay = delay; | ||
435 | ) | ||
436 | TP_perf_assign( | ||
437 | __perf_count(delay); | ||
438 | ), | ||
439 | |||
440 | TP_printk("task: %s:%d sleep: %Lu [ns]", | ||
441 | __entry->comm, __entry->pid, | ||
442 | (unsigned long long)__entry->delay) | ||
443 | ); | ||
444 | |||
445 | /* | ||
446 | * Tracepoint for accounting iowait time (time the task is not runnable | ||
447 | * due to waiting on IO to complete). | ||
448 | */ | ||
449 | TRACE_EVENT(sched_stat_iowait, | ||
450 | |||
451 | TP_PROTO(struct task_struct *tsk, u64 delay), | ||
452 | |||
453 | TP_ARGS(tsk, delay), | ||
454 | |||
455 | TP_STRUCT__entry( | ||
456 | __array( char, comm, TASK_COMM_LEN ) | ||
457 | __field( pid_t, pid ) | ||
458 | __field( u64, delay ) | ||
459 | ), | ||
460 | |||
461 | TP_fast_assign( | ||
462 | memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN); | ||
463 | __entry->pid = tsk->pid; | ||
464 | __entry->delay = delay; | ||
465 | ) | ||
466 | TP_perf_assign( | ||
467 | __perf_count(delay); | ||
468 | ), | ||
469 | |||
470 | TP_printk("task: %s:%d iowait: %Lu [ns]", | ||
471 | __entry->comm, __entry->pid, | ||
472 | (unsigned long long)__entry->delay) | ||
473 | ); | ||
474 | |||
343 | #endif /* _TRACE_SCHED_H */ | 475 | #endif /* _TRACE_SCHED_H */ |
344 | 476 | ||
345 | /* This part must be outside protection */ | 477 | /* This part must be outside protection */ |
diff --git a/include/trace/events/skb.h b/include/trace/events/skb.h index 1e8fabb57c06..4b2be6dc76f0 100644 --- a/include/trace/events/skb.h +++ b/include/trace/events/skb.h | |||
@@ -1,12 +1,13 @@ | |||
1 | #undef TRACE_SYSTEM | ||
2 | #define TRACE_SYSTEM skb | ||
3 | |||
1 | #if !defined(_TRACE_SKB_H) || defined(TRACE_HEADER_MULTI_READ) | 4 | #if !defined(_TRACE_SKB_H) || defined(TRACE_HEADER_MULTI_READ) |
2 | #define _TRACE_SKB_H | 5 | #define _TRACE_SKB_H |
3 | 6 | ||
4 | #include <linux/skbuff.h> | 7 | #include <linux/skbuff.h> |
8 | #include <linux/netdevice.h> | ||
5 | #include <linux/tracepoint.h> | 9 | #include <linux/tracepoint.h> |
6 | 10 | ||
7 | #undef TRACE_SYSTEM | ||
8 | #define TRACE_SYSTEM skb | ||
9 | |||
10 | /* | 11 | /* |
11 | * Tracepoint for free an sk_buff: | 12 | * Tracepoint for free an sk_buff: |
12 | */ | 13 | */ |
@@ -34,6 +35,25 @@ TRACE_EVENT(kfree_skb, | |||
34 | __entry->skbaddr, __entry->protocol, __entry->location) | 35 | __entry->skbaddr, __entry->protocol, __entry->location) |
35 | ); | 36 | ); |
36 | 37 | ||
38 | TRACE_EVENT(skb_copy_datagram_iovec, | ||
39 | |||
40 | TP_PROTO(const struct sk_buff *skb, int len), | ||
41 | |||
42 | TP_ARGS(skb, len), | ||
43 | |||
44 | TP_STRUCT__entry( | ||
45 | __field( const void *, skbaddr ) | ||
46 | __field( int, len ) | ||
47 | ), | ||
48 | |||
49 | TP_fast_assign( | ||
50 | __entry->skbaddr = skb; | ||
51 | __entry->len = len; | ||
52 | ), | ||
53 | |||
54 | TP_printk("skbaddr=%p len=%d", __entry->skbaddr, __entry->len) | ||
55 | ); | ||
56 | |||
37 | #endif /* _TRACE_SKB_H */ | 57 | #endif /* _TRACE_SKB_H */ |
38 | 58 | ||
39 | /* This part must be outside protection */ | 59 | /* This part must be outside protection */ |
diff --git a/include/trace/events/syscalls.h b/include/trace/events/syscalls.h new file mode 100644 index 000000000000..397dff2dbd5a --- /dev/null +++ b/include/trace/events/syscalls.h | |||
@@ -0,0 +1,70 @@ | |||
1 | #undef TRACE_SYSTEM | ||
2 | #define TRACE_SYSTEM syscalls | ||
3 | |||
4 | #if !defined(_TRACE_EVENTS_SYSCALLS_H) || defined(TRACE_HEADER_MULTI_READ) | ||
5 | #define _TRACE_EVENTS_SYSCALLS_H | ||
6 | |||
7 | #include <linux/tracepoint.h> | ||
8 | |||
9 | #include <asm/ptrace.h> | ||
10 | #include <asm/syscall.h> | ||
11 | |||
12 | |||
13 | #ifdef CONFIG_HAVE_SYSCALL_TRACEPOINTS | ||
14 | |||
15 | extern void syscall_regfunc(void); | ||
16 | extern void syscall_unregfunc(void); | ||
17 | |||
18 | TRACE_EVENT_FN(sys_enter, | ||
19 | |||
20 | TP_PROTO(struct pt_regs *regs, long id), | ||
21 | |||
22 | TP_ARGS(regs, id), | ||
23 | |||
24 | TP_STRUCT__entry( | ||
25 | __field( long, id ) | ||
26 | __array( unsigned long, args, 6 ) | ||
27 | ), | ||
28 | |||
29 | TP_fast_assign( | ||
30 | __entry->id = id; | ||
31 | syscall_get_arguments(current, regs, 0, 6, __entry->args); | ||
32 | ), | ||
33 | |||
34 | TP_printk("NR %ld (%lx, %lx, %lx, %lx, %lx, %lx)", | ||
35 | __entry->id, | ||
36 | __entry->args[0], __entry->args[1], __entry->args[2], | ||
37 | __entry->args[3], __entry->args[4], __entry->args[5]), | ||
38 | |||
39 | syscall_regfunc, syscall_unregfunc | ||
40 | ); | ||
41 | |||
42 | TRACE_EVENT_FN(sys_exit, | ||
43 | |||
44 | TP_PROTO(struct pt_regs *regs, long ret), | ||
45 | |||
46 | TP_ARGS(regs, ret), | ||
47 | |||
48 | TP_STRUCT__entry( | ||
49 | __field( long, id ) | ||
50 | __field( long, ret ) | ||
51 | ), | ||
52 | |||
53 | TP_fast_assign( | ||
54 | __entry->id = syscall_get_nr(current, regs); | ||
55 | __entry->ret = ret; | ||
56 | ), | ||
57 | |||
58 | TP_printk("NR %ld = %ld", | ||
59 | __entry->id, __entry->ret), | ||
60 | |||
61 | syscall_regfunc, syscall_unregfunc | ||
62 | ); | ||
63 | |||
64 | #endif /* CONFIG_HAVE_SYSCALL_TRACEPOINTS */ | ||
65 | |||
66 | #endif /* _TRACE_EVENTS_SYSCALLS_H */ | ||
67 | |||
68 | /* This part must be outside protection */ | ||
69 | #include <trace/define_trace.h> | ||
70 | |||
diff --git a/include/trace/events/workqueue.h b/include/trace/events/workqueue.h index 035f1bff288e..fcfd9a1e4b96 100644 --- a/include/trace/events/workqueue.h +++ b/include/trace/events/workqueue.h | |||
@@ -1,3 +1,6 @@ | |||
1 | #undef TRACE_SYSTEM | ||
2 | #define TRACE_SYSTEM workqueue | ||
3 | |||
1 | #if !defined(_TRACE_WORKQUEUE_H) || defined(TRACE_HEADER_MULTI_READ) | 4 | #if !defined(_TRACE_WORKQUEUE_H) || defined(TRACE_HEADER_MULTI_READ) |
2 | #define _TRACE_WORKQUEUE_H | 5 | #define _TRACE_WORKQUEUE_H |
3 | 6 | ||
@@ -5,9 +8,6 @@ | |||
5 | #include <linux/sched.h> | 8 | #include <linux/sched.h> |
6 | #include <linux/tracepoint.h> | 9 | #include <linux/tracepoint.h> |
7 | 10 | ||
8 | #undef TRACE_SYSTEM | ||
9 | #define TRACE_SYSTEM workqueue | ||
10 | |||
11 | TRACE_EVENT(workqueue_insertion, | 11 | TRACE_EVENT(workqueue_insertion, |
12 | 12 | ||
13 | TP_PROTO(struct task_struct *wq_thread, struct work_struct *work), | 13 | TP_PROTO(struct task_struct *wq_thread, struct work_struct *work), |
diff --git a/include/trace/ftrace.h b/include/trace/ftrace.h index 1867553c61e5..cc0d9667e182 100644 --- a/include/trace/ftrace.h +++ b/include/trace/ftrace.h | |||
@@ -21,11 +21,14 @@ | |||
21 | #undef __field | 21 | #undef __field |
22 | #define __field(type, item) type item; | 22 | #define __field(type, item) type item; |
23 | 23 | ||
24 | #undef __field_ext | ||
25 | #define __field_ext(type, item, filter_type) type item; | ||
26 | |||
24 | #undef __array | 27 | #undef __array |
25 | #define __array(type, item, len) type item[len]; | 28 | #define __array(type, item, len) type item[len]; |
26 | 29 | ||
27 | #undef __dynamic_array | 30 | #undef __dynamic_array |
28 | #define __dynamic_array(type, item, len) unsigned short __data_loc_##item; | 31 | #define __dynamic_array(type, item, len) u32 __data_loc_##item; |
29 | 32 | ||
30 | #undef __string | 33 | #undef __string |
31 | #define __string(item, src) __dynamic_array(char, item, -1) | 34 | #define __string(item, src) __dynamic_array(char, item, -1) |
@@ -42,6 +45,16 @@ | |||
42 | }; \ | 45 | }; \ |
43 | static struct ftrace_event_call event_##name | 46 | static struct ftrace_event_call event_##name |
44 | 47 | ||
48 | #undef __cpparg | ||
49 | #define __cpparg(arg...) arg | ||
50 | |||
51 | /* Callbacks are meaningless to ftrace. */ | ||
52 | #undef TRACE_EVENT_FN | ||
53 | #define TRACE_EVENT_FN(name, proto, args, tstruct, \ | ||
54 | assign, print, reg, unreg) \ | ||
55 | TRACE_EVENT(name, __cpparg(proto), __cpparg(args), \ | ||
56 | __cpparg(tstruct), __cpparg(assign), __cpparg(print)) \ | ||
57 | |||
45 | #include TRACE_INCLUDE(TRACE_INCLUDE_FILE) | 58 | #include TRACE_INCLUDE(TRACE_INCLUDE_FILE) |
46 | 59 | ||
47 | 60 | ||
@@ -51,23 +64,27 @@ | |||
51 | * Include the following: | 64 | * Include the following: |
52 | * | 65 | * |
53 | * struct ftrace_data_offsets_<call> { | 66 | * struct ftrace_data_offsets_<call> { |
54 | * int <item1>; | 67 | * u32 <item1>; |
55 | * int <item2>; | 68 | * u32 <item2>; |
56 | * [...] | 69 | * [...] |
57 | * }; | 70 | * }; |
58 | * | 71 | * |
59 | * The __dynamic_array() macro will create each int <item>, this is | 72 | * The __dynamic_array() macro will create each u32 <item>, this is |
60 | * to keep the offset of each array from the beginning of the event. | 73 | * to keep the offset of each array from the beginning of the event. |
74 | * The size of an array is also encoded, in the higher 16 bits of <item>. | ||
61 | */ | 75 | */ |
62 | 76 | ||
63 | #undef __field | 77 | #undef __field |
64 | #define __field(type, item); | 78 | #define __field(type, item) |
79 | |||
80 | #undef __field_ext | ||
81 | #define __field_ext(type, item, filter_type) | ||
65 | 82 | ||
66 | #undef __array | 83 | #undef __array |
67 | #define __array(type, item, len) | 84 | #define __array(type, item, len) |
68 | 85 | ||
69 | #undef __dynamic_array | 86 | #undef __dynamic_array |
70 | #define __dynamic_array(type, item, len) int item; | 87 | #define __dynamic_array(type, item, len) u32 item; |
71 | 88 | ||
72 | #undef __string | 89 | #undef __string |
73 | #define __string(item, src) __dynamic_array(char, item, -1) | 90 | #define __string(item, src) __dynamic_array(char, item, -1) |
@@ -109,6 +126,9 @@ | |||
109 | if (!ret) \ | 126 | if (!ret) \ |
110 | return 0; | 127 | return 0; |
111 | 128 | ||
129 | #undef __field_ext | ||
130 | #define __field_ext(type, item, filter_type) __field(type, item) | ||
131 | |||
112 | #undef __array | 132 | #undef __array |
113 | #define __array(type, item, len) \ | 133 | #define __array(type, item, len) \ |
114 | ret = trace_seq_printf(s, "\tfield:" #type " " #item "[" #len "];\t" \ | 134 | ret = trace_seq_printf(s, "\tfield:" #type " " #item "[" #len "];\t" \ |
@@ -120,7 +140,7 @@ | |||
120 | 140 | ||
121 | #undef __dynamic_array | 141 | #undef __dynamic_array |
122 | #define __dynamic_array(type, item, len) \ | 142 | #define __dynamic_array(type, item, len) \ |
123 | ret = trace_seq_printf(s, "\tfield:__data_loc " #item ";\t" \ | 143 | ret = trace_seq_printf(s, "\tfield:__data_loc " #type "[] " #item ";\t"\ |
124 | "offset:%u;\tsize:%u;\n", \ | 144 | "offset:%u;\tsize:%u;\n", \ |
125 | (unsigned int)offsetof(typeof(field), \ | 145 | (unsigned int)offsetof(typeof(field), \ |
126 | __data_loc_##item), \ | 146 | __data_loc_##item), \ |
@@ -144,10 +164,14 @@ | |||
144 | #undef TP_fast_assign | 164 | #undef TP_fast_assign |
145 | #define TP_fast_assign(args...) args | 165 | #define TP_fast_assign(args...) args |
146 | 166 | ||
167 | #undef TP_perf_assign | ||
168 | #define TP_perf_assign(args...) | ||
169 | |||
147 | #undef TRACE_EVENT | 170 | #undef TRACE_EVENT |
148 | #define TRACE_EVENT(call, proto, args, tstruct, func, print) \ | 171 | #define TRACE_EVENT(call, proto, args, tstruct, func, print) \ |
149 | static int \ | 172 | static int \ |
150 | ftrace_format_##call(struct trace_seq *s) \ | 173 | ftrace_format_##call(struct ftrace_event_call *unused, \ |
174 | struct trace_seq *s) \ | ||
151 | { \ | 175 | { \ |
152 | struct ftrace_raw_##call field __attribute__((unused)); \ | 176 | struct ftrace_raw_##call field __attribute__((unused)); \ |
153 | int ret = 0; \ | 177 | int ret = 0; \ |
@@ -207,7 +231,7 @@ ftrace_format_##call(struct trace_seq *s) \ | |||
207 | 231 | ||
208 | #undef __get_dynamic_array | 232 | #undef __get_dynamic_array |
209 | #define __get_dynamic_array(field) \ | 233 | #define __get_dynamic_array(field) \ |
210 | ((void *)__entry + __entry->__data_loc_##field) | 234 | ((void *)__entry + (__entry->__data_loc_##field & 0xffff)) |
211 | 235 | ||
212 | #undef __get_str | 236 | #undef __get_str |
213 | #define __get_str(field) (char *)__get_dynamic_array(field) | 237 | #define __get_str(field) (char *)__get_dynamic_array(field) |
@@ -215,9 +239,9 @@ ftrace_format_##call(struct trace_seq *s) \ | |||
215 | #undef __print_flags | 239 | #undef __print_flags |
216 | #define __print_flags(flag, delim, flag_array...) \ | 240 | #define __print_flags(flag, delim, flag_array...) \ |
217 | ({ \ | 241 | ({ \ |
218 | static const struct trace_print_flags flags[] = \ | 242 | static const struct trace_print_flags __flags[] = \ |
219 | { flag_array, { -1, NULL }}; \ | 243 | { flag_array, { -1, NULL }}; \ |
220 | ftrace_print_flags_seq(p, delim, flag, flags); \ | 244 | ftrace_print_flags_seq(p, delim, flag, __flags); \ |
221 | }) | 245 | }) |
222 | 246 | ||
223 | #undef __print_symbolic | 247 | #undef __print_symbolic |
@@ -230,7 +254,7 @@ ftrace_format_##call(struct trace_seq *s) \ | |||
230 | 254 | ||
231 | #undef TRACE_EVENT | 255 | #undef TRACE_EVENT |
232 | #define TRACE_EVENT(call, proto, args, tstruct, assign, print) \ | 256 | #define TRACE_EVENT(call, proto, args, tstruct, assign, print) \ |
233 | enum print_line_t \ | 257 | static enum print_line_t \ |
234 | ftrace_raw_output_##call(struct trace_iterator *iter, int flags) \ | 258 | ftrace_raw_output_##call(struct trace_iterator *iter, int flags) \ |
235 | { \ | 259 | { \ |
236 | struct trace_seq *s = &iter->seq; \ | 260 | struct trace_seq *s = &iter->seq; \ |
@@ -260,46 +284,48 @@ ftrace_raw_output_##call(struct trace_iterator *iter, int flags) \ | |||
260 | 284 | ||
261 | #include TRACE_INCLUDE(TRACE_INCLUDE_FILE) | 285 | #include TRACE_INCLUDE(TRACE_INCLUDE_FILE) |
262 | 286 | ||
263 | #undef __field | 287 | #undef __field_ext |
264 | #define __field(type, item) \ | 288 | #define __field_ext(type, item, filter_type) \ |
265 | ret = trace_define_field(event_call, #type, #item, \ | 289 | ret = trace_define_field(event_call, #type, #item, \ |
266 | offsetof(typeof(field), item), \ | 290 | offsetof(typeof(field), item), \ |
267 | sizeof(field.item), is_signed_type(type)); \ | 291 | sizeof(field.item), \ |
292 | is_signed_type(type), filter_type); \ | ||
268 | if (ret) \ | 293 | if (ret) \ |
269 | return ret; | 294 | return ret; |
270 | 295 | ||
296 | #undef __field | ||
297 | #define __field(type, item) __field_ext(type, item, FILTER_OTHER) | ||
298 | |||
271 | #undef __array | 299 | #undef __array |
272 | #define __array(type, item, len) \ | 300 | #define __array(type, item, len) \ |
273 | BUILD_BUG_ON(len > MAX_FILTER_STR_VAL); \ | 301 | BUILD_BUG_ON(len > MAX_FILTER_STR_VAL); \ |
274 | ret = trace_define_field(event_call, #type "[" #len "]", #item, \ | 302 | ret = trace_define_field(event_call, #type "[" #len "]", #item, \ |
275 | offsetof(typeof(field), item), \ | 303 | offsetof(typeof(field), item), \ |
276 | sizeof(field.item), 0); \ | 304 | sizeof(field.item), 0, FILTER_OTHER); \ |
277 | if (ret) \ | 305 | if (ret) \ |
278 | return ret; | 306 | return ret; |
279 | 307 | ||
280 | #undef __dynamic_array | 308 | #undef __dynamic_array |
281 | #define __dynamic_array(type, item, len) \ | 309 | #define __dynamic_array(type, item, len) \ |
282 | ret = trace_define_field(event_call, "__data_loc" "[" #type "]", #item,\ | 310 | ret = trace_define_field(event_call, "__data_loc " #type "[]", #item, \ |
283 | offsetof(typeof(field), __data_loc_##item), \ | 311 | offsetof(typeof(field), __data_loc_##item), \ |
284 | sizeof(field.__data_loc_##item), 0); | 312 | sizeof(field.__data_loc_##item), 0, \ |
313 | FILTER_OTHER); | ||
285 | 314 | ||
286 | #undef __string | 315 | #undef __string |
287 | #define __string(item, src) __dynamic_array(char, item, -1) | 316 | #define __string(item, src) __dynamic_array(char, item, -1) |
288 | 317 | ||
289 | #undef TRACE_EVENT | 318 | #undef TRACE_EVENT |
290 | #define TRACE_EVENT(call, proto, args, tstruct, func, print) \ | 319 | #define TRACE_EVENT(call, proto, args, tstruct, func, print) \ |
291 | int \ | 320 | static int \ |
292 | ftrace_define_fields_##call(void) \ | 321 | ftrace_define_fields_##call(struct ftrace_event_call *event_call) \ |
293 | { \ | 322 | { \ |
294 | struct ftrace_raw_##call field; \ | 323 | struct ftrace_raw_##call field; \ |
295 | struct ftrace_event_call *event_call = &event_##call; \ | ||
296 | int ret; \ | 324 | int ret; \ |
297 | \ | 325 | \ |
298 | __common_field(int, type, 1); \ | 326 | ret = trace_define_common_fields(event_call); \ |
299 | __common_field(unsigned char, flags, 0); \ | 327 | if (ret) \ |
300 | __common_field(unsigned char, preempt_count, 0); \ | 328 | return ret; \ |
301 | __common_field(int, pid, 1); \ | ||
302 | __common_field(int, tgid, 1); \ | ||
303 | \ | 329 | \ |
304 | tstruct; \ | 330 | tstruct; \ |
305 | \ | 331 | \ |
@@ -318,6 +344,9 @@ ftrace_define_fields_##call(void) \ | |||
318 | #undef __field | 344 | #undef __field |
319 | #define __field(type, item) | 345 | #define __field(type, item) |
320 | 346 | ||
347 | #undef __field_ext | ||
348 | #define __field_ext(type, item, filter_type) | ||
349 | |||
321 | #undef __array | 350 | #undef __array |
322 | #define __array(type, item, len) | 351 | #define __array(type, item, len) |
323 | 352 | ||
@@ -325,6 +354,7 @@ ftrace_define_fields_##call(void) \ | |||
325 | #define __dynamic_array(type, item, len) \ | 354 | #define __dynamic_array(type, item, len) \ |
326 | __data_offsets->item = __data_size + \ | 355 | __data_offsets->item = __data_size + \ |
327 | offsetof(typeof(*entry), __data); \ | 356 | offsetof(typeof(*entry), __data); \ |
357 | __data_offsets->item |= (len * sizeof(type)) << 16; \ | ||
328 | __data_size += (len) * sizeof(type); | 358 | __data_size += (len) * sizeof(type); |
329 | 359 | ||
330 | #undef __string | 360 | #undef __string |
@@ -345,6 +375,44 @@ static inline int ftrace_get_offsets_##call( \ | |||
345 | 375 | ||
346 | #include TRACE_INCLUDE(TRACE_INCLUDE_FILE) | 376 | #include TRACE_INCLUDE(TRACE_INCLUDE_FILE) |
347 | 377 | ||
378 | #ifdef CONFIG_EVENT_PROFILE | ||
379 | |||
380 | /* | ||
381 | * Generate the functions needed for tracepoint perf_event support. | ||
382 | * | ||
383 | * NOTE: The insertion profile callback (ftrace_profile_<call>) is defined later | ||
384 | * | ||
385 | * static int ftrace_profile_enable_<call>(void) | ||
386 | * { | ||
387 | * return register_trace_<call>(ftrace_profile_<call>); | ||
388 | * } | ||
389 | * | ||
390 | * static void ftrace_profile_disable_<call>(void) | ||
391 | * { | ||
392 | * unregister_trace_<call>(ftrace_profile_<call>); | ||
393 | * } | ||
394 | * | ||
395 | */ | ||
396 | |||
397 | #undef TRACE_EVENT | ||
398 | #define TRACE_EVENT(call, proto, args, tstruct, assign, print) \ | ||
399 | \ | ||
400 | static void ftrace_profile_##call(proto); \ | ||
401 | \ | ||
402 | static int ftrace_profile_enable_##call(void) \ | ||
403 | { \ | ||
404 | return register_trace_##call(ftrace_profile_##call); \ | ||
405 | } \ | ||
406 | \ | ||
407 | static void ftrace_profile_disable_##call(void) \ | ||
408 | { \ | ||
409 | unregister_trace_##call(ftrace_profile_##call); \ | ||
410 | } | ||
411 | |||
412 | #include TRACE_INCLUDE(TRACE_INCLUDE_FILE) | ||
413 | |||
414 | #endif | ||
415 | |||
348 | /* | 416 | /* |
349 | * Stage 4 of the trace events. | 417 | * Stage 4 of the trace events. |
350 | * | 418 | * |
@@ -380,13 +448,15 @@ static inline int ftrace_get_offsets_##call( \ | |||
380 | * { | 448 | * { |
381 | * struct ring_buffer_event *event; | 449 | * struct ring_buffer_event *event; |
382 | * struct ftrace_raw_<call> *entry; <-- defined in stage 1 | 450 | * struct ftrace_raw_<call> *entry; <-- defined in stage 1 |
451 | * struct ring_buffer *buffer; | ||
383 | * unsigned long irq_flags; | 452 | * unsigned long irq_flags; |
384 | * int pc; | 453 | * int pc; |
385 | * | 454 | * |
386 | * local_save_flags(irq_flags); | 455 | * local_save_flags(irq_flags); |
387 | * pc = preempt_count(); | 456 | * pc = preempt_count(); |
388 | * | 457 | * |
389 | * event = trace_current_buffer_lock_reserve(event_<call>.id, | 458 | * event = trace_current_buffer_lock_reserve(&buffer, |
459 | * event_<call>.id, | ||
390 | * sizeof(struct ftrace_raw_<call>), | 460 | * sizeof(struct ftrace_raw_<call>), |
391 | * irq_flags, pc); | 461 | * irq_flags, pc); |
392 | * if (!event) | 462 | * if (!event) |
@@ -396,7 +466,7 @@ static inline int ftrace_get_offsets_##call( \ | |||
396 | * <assign>; <-- Here we assign the entries by the __field and | 466 | * <assign>; <-- Here we assign the entries by the __field and |
397 | * __array macros. | 467 | * __array macros. |
398 | * | 468 | * |
399 | * trace_current_buffer_unlock_commit(event, irq_flags, pc); | 469 | * trace_current_buffer_unlock_commit(buffer, event, irq_flags, pc); |
400 | * } | 470 | * } |
401 | * | 471 | * |
402 | * static int ftrace_raw_reg_event_<call>(void) | 472 | * static int ftrace_raw_reg_event_<call>(void) |
@@ -447,28 +517,6 @@ static inline int ftrace_get_offsets_##call( \ | |||
447 | #define TP_FMT(fmt, args...) fmt "\n", ##args | 517 | #define TP_FMT(fmt, args...) fmt "\n", ##args |
448 | 518 | ||
449 | #ifdef CONFIG_EVENT_PROFILE | 519 | #ifdef CONFIG_EVENT_PROFILE |
450 | #define _TRACE_PROFILE(call, proto, args) \ | ||
451 | static void ftrace_profile_##call(proto) \ | ||
452 | { \ | ||
453 | extern void perf_tpcounter_event(int); \ | ||
454 | perf_tpcounter_event(event_##call.id); \ | ||
455 | } \ | ||
456 | \ | ||
457 | static int ftrace_profile_enable_##call(struct ftrace_event_call *event_call) \ | ||
458 | { \ | ||
459 | int ret = 0; \ | ||
460 | \ | ||
461 | if (!atomic_inc_return(&event_call->profile_count)) \ | ||
462 | ret = register_trace_##call(ftrace_profile_##call); \ | ||
463 | \ | ||
464 | return ret; \ | ||
465 | } \ | ||
466 | \ | ||
467 | static void ftrace_profile_disable_##call(struct ftrace_event_call *event_call)\ | ||
468 | { \ | ||
469 | if (atomic_add_negative(-1, &event_call->profile_count)) \ | ||
470 | unregister_trace_##call(ftrace_profile_##call); \ | ||
471 | } | ||
472 | 520 | ||
473 | #define _TRACE_PROFILE_INIT(call) \ | 521 | #define _TRACE_PROFILE_INIT(call) \ |
474 | .profile_count = ATOMIC_INIT(-1), \ | 522 | .profile_count = ATOMIC_INIT(-1), \ |
@@ -476,7 +524,6 @@ static void ftrace_profile_disable_##call(struct ftrace_event_call *event_call)\ | |||
476 | .profile_disable = ftrace_profile_disable_##call, | 524 | .profile_disable = ftrace_profile_disable_##call, |
477 | 525 | ||
478 | #else | 526 | #else |
479 | #define _TRACE_PROFILE(call, proto, args) | ||
480 | #define _TRACE_PROFILE_INIT(call) | 527 | #define _TRACE_PROFILE_INIT(call) |
481 | #endif | 528 | #endif |
482 | 529 | ||
@@ -502,7 +549,6 @@ static void ftrace_profile_disable_##call(struct ftrace_event_call *event_call)\ | |||
502 | 549 | ||
503 | #undef TRACE_EVENT | 550 | #undef TRACE_EVENT |
504 | #define TRACE_EVENT(call, proto, args, tstruct, assign, print) \ | 551 | #define TRACE_EVENT(call, proto, args, tstruct, assign, print) \ |
505 | _TRACE_PROFILE(call, PARAMS(proto), PARAMS(args)) \ | ||
506 | \ | 552 | \ |
507 | static struct ftrace_event_call event_##call; \ | 553 | static struct ftrace_event_call event_##call; \ |
508 | \ | 554 | \ |
@@ -512,6 +558,7 @@ static void ftrace_raw_event_##call(proto) \ | |||
512 | struct ftrace_event_call *event_call = &event_##call; \ | 558 | struct ftrace_event_call *event_call = &event_##call; \ |
513 | struct ring_buffer_event *event; \ | 559 | struct ring_buffer_event *event; \ |
514 | struct ftrace_raw_##call *entry; \ | 560 | struct ftrace_raw_##call *entry; \ |
561 | struct ring_buffer *buffer; \ | ||
515 | unsigned long irq_flags; \ | 562 | unsigned long irq_flags; \ |
516 | int __data_size; \ | 563 | int __data_size; \ |
517 | int pc; \ | 564 | int pc; \ |
@@ -521,7 +568,8 @@ static void ftrace_raw_event_##call(proto) \ | |||
521 | \ | 568 | \ |
522 | __data_size = ftrace_get_offsets_##call(&__data_offsets, args); \ | 569 | __data_size = ftrace_get_offsets_##call(&__data_offsets, args); \ |
523 | \ | 570 | \ |
524 | event = trace_current_buffer_lock_reserve(event_##call.id, \ | 571 | event = trace_current_buffer_lock_reserve(&buffer, \ |
572 | event_##call.id, \ | ||
525 | sizeof(*entry) + __data_size, \ | 573 | sizeof(*entry) + __data_size, \ |
526 | irq_flags, pc); \ | 574 | irq_flags, pc); \ |
527 | if (!event) \ | 575 | if (!event) \ |
@@ -533,11 +581,12 @@ static void ftrace_raw_event_##call(proto) \ | |||
533 | \ | 581 | \ |
534 | { assign; } \ | 582 | { assign; } \ |
535 | \ | 583 | \ |
536 | if (!filter_current_check_discard(event_call, entry, event)) \ | 584 | if (!filter_current_check_discard(buffer, event_call, entry, event)) \ |
537 | trace_nowake_buffer_unlock_commit(event, irq_flags, pc); \ | 585 | trace_nowake_buffer_unlock_commit(buffer, \ |
586 | event, irq_flags, pc); \ | ||
538 | } \ | 587 | } \ |
539 | \ | 588 | \ |
540 | static int ftrace_raw_reg_event_##call(void) \ | 589 | static int ftrace_raw_reg_event_##call(void *ptr) \ |
541 | { \ | 590 | { \ |
542 | int ret; \ | 591 | int ret; \ |
543 | \ | 592 | \ |
@@ -548,7 +597,7 @@ static int ftrace_raw_reg_event_##call(void) \ | |||
548 | return ret; \ | 597 | return ret; \ |
549 | } \ | 598 | } \ |
550 | \ | 599 | \ |
551 | static void ftrace_raw_unreg_event_##call(void) \ | 600 | static void ftrace_raw_unreg_event_##call(void *ptr) \ |
552 | { \ | 601 | { \ |
553 | unregister_trace_##call(ftrace_raw_event_##call); \ | 602 | unregister_trace_##call(ftrace_raw_event_##call); \ |
554 | } \ | 603 | } \ |
@@ -566,7 +615,6 @@ static int ftrace_raw_init_event_##call(void) \ | |||
566 | return -ENODEV; \ | 615 | return -ENODEV; \ |
567 | event_##call.id = id; \ | 616 | event_##call.id = id; \ |
568 | INIT_LIST_HEAD(&event_##call.fields); \ | 617 | INIT_LIST_HEAD(&event_##call.fields); \ |
569 | init_preds(&event_##call); \ | ||
570 | return 0; \ | 618 | return 0; \ |
571 | } \ | 619 | } \ |
572 | \ | 620 | \ |
@@ -586,6 +634,137 @@ __attribute__((section("_ftrace_events"))) event_##call = { \ | |||
586 | 634 | ||
587 | #include TRACE_INCLUDE(TRACE_INCLUDE_FILE) | 635 | #include TRACE_INCLUDE(TRACE_INCLUDE_FILE) |
588 | 636 | ||
589 | #undef _TRACE_PROFILE | 637 | /* |
638 | * Define the insertion callback to profile events | ||
639 | * | ||
640 | * The job is very similar to ftrace_raw_event_<call> except that we don't | ||
641 | * insert in the ring buffer but in a perf counter. | ||
642 | * | ||
643 | * static void ftrace_profile_<call>(proto) | ||
644 | * { | ||
645 | * struct ftrace_data_offsets_<call> __maybe_unused __data_offsets; | ||
646 | * struct ftrace_event_call *event_call = &event_<call>; | ||
647 | * extern void perf_tp_event(int, u64, u64, void *, int); | ||
648 | * struct ftrace_raw_##call *entry; | ||
649 | * u64 __addr = 0, __count = 1; | ||
650 | * unsigned long irq_flags; | ||
651 | * struct trace_entry *ent; | ||
652 | * int __entry_size; | ||
653 | * int __data_size; | ||
654 | * int __cpu | ||
655 | * int pc; | ||
656 | * | ||
657 | * pc = preempt_count(); | ||
658 | * | ||
659 | * __data_size = ftrace_get_offsets_<call>(&__data_offsets, args); | ||
660 | * | ||
661 | * // Below we want to get the aligned size by taking into account | ||
662 | * // the u32 field that will later store the buffer size | ||
663 | * __entry_size = ALIGN(__data_size + sizeof(*entry) + sizeof(u32), | ||
664 | * sizeof(u64)); | ||
665 | * __entry_size -= sizeof(u32); | ||
666 | * | ||
667 | * // Protect the non nmi buffer | ||
668 | * // This also protects the rcu read side | ||
669 | * local_irq_save(irq_flags); | ||
670 | * __cpu = smp_processor_id(); | ||
671 | * | ||
672 | * if (in_nmi()) | ||
673 | * raw_data = rcu_dereference(trace_profile_buf_nmi); | ||
674 | * else | ||
675 | * raw_data = rcu_dereference(trace_profile_buf); | ||
676 | * | ||
677 | * if (!raw_data) | ||
678 | * goto end; | ||
679 | * | ||
680 | * raw_data = per_cpu_ptr(raw_data, __cpu); | ||
681 | * | ||
682 | * //zero dead bytes from alignment to avoid stack leak to userspace: | ||
683 | * *(u64 *)(&raw_data[__entry_size - sizeof(u64)]) = 0ULL; | ||
684 | * entry = (struct ftrace_raw_<call> *)raw_data; | ||
685 | * ent = &entry->ent; | ||
686 | * tracing_generic_entry_update(ent, irq_flags, pc); | ||
687 | * ent->type = event_call->id; | ||
688 | * | ||
689 | * <tstruct> <- do some jobs with dynamic arrays | ||
690 | * | ||
691 | * <assign> <- affect our values | ||
692 | * | ||
693 | * perf_tp_event(event_call->id, __addr, __count, entry, | ||
694 | * __entry_size); <- submit them to perf counter | ||
695 | * | ||
696 | * } | ||
697 | */ | ||
698 | |||
699 | #ifdef CONFIG_EVENT_PROFILE | ||
700 | |||
701 | #undef __perf_addr | ||
702 | #define __perf_addr(a) __addr = (a) | ||
703 | |||
704 | #undef __perf_count | ||
705 | #define __perf_count(c) __count = (c) | ||
706 | |||
707 | #undef TRACE_EVENT | ||
708 | #define TRACE_EVENT(call, proto, args, tstruct, assign, print) \ | ||
709 | static void ftrace_profile_##call(proto) \ | ||
710 | { \ | ||
711 | struct ftrace_data_offsets_##call __maybe_unused __data_offsets;\ | ||
712 | struct ftrace_event_call *event_call = &event_##call; \ | ||
713 | extern void perf_tp_event(int, u64, u64, void *, int); \ | ||
714 | struct ftrace_raw_##call *entry; \ | ||
715 | u64 __addr = 0, __count = 1; \ | ||
716 | unsigned long irq_flags; \ | ||
717 | struct trace_entry *ent; \ | ||
718 | int __entry_size; \ | ||
719 | int __data_size; \ | ||
720 | char *raw_data; \ | ||
721 | int __cpu; \ | ||
722 | int pc; \ | ||
723 | \ | ||
724 | pc = preempt_count(); \ | ||
725 | \ | ||
726 | __data_size = ftrace_get_offsets_##call(&__data_offsets, args); \ | ||
727 | __entry_size = ALIGN(__data_size + sizeof(*entry) + sizeof(u32),\ | ||
728 | sizeof(u64)); \ | ||
729 | __entry_size -= sizeof(u32); \ | ||
730 | \ | ||
731 | if (WARN_ONCE(__entry_size > FTRACE_MAX_PROFILE_SIZE, \ | ||
732 | "profile buffer not large enough")) \ | ||
733 | return; \ | ||
734 | \ | ||
735 | local_irq_save(irq_flags); \ | ||
736 | __cpu = smp_processor_id(); \ | ||
737 | \ | ||
738 | if (in_nmi()) \ | ||
739 | raw_data = rcu_dereference(trace_profile_buf_nmi); \ | ||
740 | else \ | ||
741 | raw_data = rcu_dereference(trace_profile_buf); \ | ||
742 | \ | ||
743 | if (!raw_data) \ | ||
744 | goto end; \ | ||
745 | \ | ||
746 | raw_data = per_cpu_ptr(raw_data, __cpu); \ | ||
747 | \ | ||
748 | *(u64 *)(&raw_data[__entry_size - sizeof(u64)]) = 0ULL; \ | ||
749 | entry = (struct ftrace_raw_##call *)raw_data; \ | ||
750 | ent = &entry->ent; \ | ||
751 | tracing_generic_entry_update(ent, irq_flags, pc); \ | ||
752 | ent->type = event_call->id; \ | ||
753 | \ | ||
754 | tstruct \ | ||
755 | \ | ||
756 | { assign; } \ | ||
757 | \ | ||
758 | perf_tp_event(event_call->id, __addr, __count, entry, \ | ||
759 | __entry_size); \ | ||
760 | \ | ||
761 | end: \ | ||
762 | local_irq_restore(irq_flags); \ | ||
763 | \ | ||
764 | } | ||
765 | |||
766 | #include TRACE_INCLUDE(TRACE_INCLUDE_FILE) | ||
767 | #endif /* CONFIG_EVENT_PROFILE */ | ||
768 | |||
590 | #undef _TRACE_PROFILE_INIT | 769 | #undef _TRACE_PROFILE_INIT |
591 | 770 | ||
diff --git a/include/trace/syscall.h b/include/trace/syscall.h index 8cfe515cbc47..5dc283ba5ae0 100644 --- a/include/trace/syscall.h +++ b/include/trace/syscall.h | |||
@@ -1,8 +1,13 @@ | |||
1 | #ifndef _TRACE_SYSCALL_H | 1 | #ifndef _TRACE_SYSCALL_H |
2 | #define _TRACE_SYSCALL_H | 2 | #define _TRACE_SYSCALL_H |
3 | 3 | ||
4 | #include <linux/tracepoint.h> | ||
5 | #include <linux/unistd.h> | ||
6 | #include <linux/ftrace_event.h> | ||
7 | |||
4 | #include <asm/ptrace.h> | 8 | #include <asm/ptrace.h> |
5 | 9 | ||
10 | |||
6 | /* | 11 | /* |
7 | * A syscall entry in the ftrace syscalls array. | 12 | * A syscall entry in the ftrace syscalls array. |
8 | * | 13 | * |
@@ -10,26 +15,49 @@ | |||
10 | * @nb_args: number of parameters it takes | 15 | * @nb_args: number of parameters it takes |
11 | * @types: list of types as strings | 16 | * @types: list of types as strings |
12 | * @args: list of args as strings (args[i] matches types[i]) | 17 | * @args: list of args as strings (args[i] matches types[i]) |
18 | * @enter_id: associated ftrace enter event id | ||
19 | * @exit_id: associated ftrace exit event id | ||
20 | * @enter_event: associated syscall_enter trace event | ||
21 | * @exit_event: associated syscall_exit trace event | ||
13 | */ | 22 | */ |
14 | struct syscall_metadata { | 23 | struct syscall_metadata { |
15 | const char *name; | 24 | const char *name; |
16 | int nb_args; | 25 | int nb_args; |
17 | const char **types; | 26 | const char **types; |
18 | const char **args; | 27 | const char **args; |
28 | int enter_id; | ||
29 | int exit_id; | ||
30 | |||
31 | struct ftrace_event_call *enter_event; | ||
32 | struct ftrace_event_call *exit_event; | ||
19 | }; | 33 | }; |
20 | 34 | ||
21 | #ifdef CONFIG_FTRACE_SYSCALLS | 35 | #ifdef CONFIG_FTRACE_SYSCALLS |
22 | extern void arch_init_ftrace_syscalls(void); | ||
23 | extern struct syscall_metadata *syscall_nr_to_meta(int nr); | 36 | extern struct syscall_metadata *syscall_nr_to_meta(int nr); |
24 | extern void start_ftrace_syscalls(void); | 37 | extern int syscall_name_to_nr(char *name); |
25 | extern void stop_ftrace_syscalls(void); | 38 | void set_syscall_enter_id(int num, int id); |
26 | extern void ftrace_syscall_enter(struct pt_regs *regs); | 39 | void set_syscall_exit_id(int num, int id); |
27 | extern void ftrace_syscall_exit(struct pt_regs *regs); | 40 | extern struct trace_event event_syscall_enter; |
28 | #else | 41 | extern struct trace_event event_syscall_exit; |
29 | static inline void start_ftrace_syscalls(void) { } | 42 | extern int reg_event_syscall_enter(void *ptr); |
30 | static inline void stop_ftrace_syscalls(void) { } | 43 | extern void unreg_event_syscall_enter(void *ptr); |
31 | static inline void ftrace_syscall_enter(struct pt_regs *regs) { } | 44 | extern int reg_event_syscall_exit(void *ptr); |
32 | static inline void ftrace_syscall_exit(struct pt_regs *regs) { } | 45 | extern void unreg_event_syscall_exit(void *ptr); |
46 | extern int syscall_enter_format(struct ftrace_event_call *call, | ||
47 | struct trace_seq *s); | ||
48 | extern int syscall_exit_format(struct ftrace_event_call *call, | ||
49 | struct trace_seq *s); | ||
50 | extern int syscall_enter_define_fields(struct ftrace_event_call *call); | ||
51 | extern int syscall_exit_define_fields(struct ftrace_event_call *call); | ||
52 | enum print_line_t print_syscall_enter(struct trace_iterator *iter, int flags); | ||
53 | enum print_line_t print_syscall_exit(struct trace_iterator *iter, int flags); | ||
54 | #endif | ||
55 | #ifdef CONFIG_EVENT_PROFILE | ||
56 | int reg_prof_syscall_enter(char *name); | ||
57 | void unreg_prof_syscall_enter(char *name); | ||
58 | int reg_prof_syscall_exit(char *name); | ||
59 | void unreg_prof_syscall_exit(char *name); | ||
60 | |||
33 | #endif | 61 | #endif |
34 | 62 | ||
35 | #endif /* _TRACE_SYSCALL_H */ | 63 | #endif /* _TRACE_SYSCALL_H */ |