diff options
Diffstat (limited to 'include')
260 files changed, 6050 insertions, 1502 deletions
diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h index b0d62820ada1..9e6e1c6eb60a 100644 --- a/include/acpi/acpi_bus.h +++ b/include/acpi/acpi_bus.h | |||
@@ -440,8 +440,8 @@ static inline int acpi_pm_device_sleep_wake(struct device *dev, bool enable) | |||
440 | 440 | ||
441 | #else /* CONFIG_ACPI */ | 441 | #else /* CONFIG_ACPI */ |
442 | 442 | ||
443 | static int register_acpi_bus_type(struct acpi_bus_type *bus) { return 0; } | 443 | static inline int register_acpi_bus_type(void *bus) { return 0; } |
444 | static int unregister_acpi_bus_type(struct acpi_bus_type *bus) { return 0; } | 444 | static inline int unregister_acpi_bus_type(void *bus) { return 0; } |
445 | 445 | ||
446 | #endif /* CONFIG_ACPI */ | 446 | #endif /* CONFIG_ACPI */ |
447 | 447 | ||
diff --git a/include/asm-generic/Kbuild b/include/asm-generic/Kbuild index 53f91b1ae53a..2c85a0f647b7 100644 --- a/include/asm-generic/Kbuild +++ b/include/asm-generic/Kbuild | |||
@@ -8,6 +8,7 @@ header-y += int-ll64.h | |||
8 | header-y += ioctl.h | 8 | header-y += ioctl.h |
9 | header-y += ioctls.h | 9 | header-y += ioctls.h |
10 | header-y += ipcbuf.h | 10 | header-y += ipcbuf.h |
11 | header-y += kvm_para.h | ||
11 | header-y += mman-common.h | 12 | header-y += mman-common.h |
12 | header-y += mman.h | 13 | header-y += mman.h |
13 | header-y += msgbuf.h | 14 | header-y += msgbuf.h |
diff --git a/include/asm-generic/bitsperlong.h b/include/asm-generic/bitsperlong.h index 4ae54e07de83..a7b0914348fd 100644 --- a/include/asm-generic/bitsperlong.h +++ b/include/asm-generic/bitsperlong.h | |||
@@ -28,5 +28,9 @@ | |||
28 | #error Inconsistent word size. Check asm/bitsperlong.h | 28 | #error Inconsistent word size. Check asm/bitsperlong.h |
29 | #endif | 29 | #endif |
30 | 30 | ||
31 | #ifndef BITS_PER_LONG_LONG | ||
32 | #define BITS_PER_LONG_LONG 64 | ||
33 | #endif | ||
34 | |||
31 | #endif /* __KERNEL__ */ | 35 | #endif /* __KERNEL__ */ |
32 | #endif /* __ASM_GENERIC_BITS_PER_LONG */ | 36 | #endif /* __ASM_GENERIC_BITS_PER_LONG */ |
diff --git a/include/asm-generic/dma-coherent.h b/include/asm-generic/dma-coherent.h index 85a3ffaa0242..abfb2682de7f 100644 --- a/include/asm-generic/dma-coherent.h +++ b/include/asm-generic/dma-coherent.h | |||
@@ -3,13 +3,15 @@ | |||
3 | 3 | ||
4 | #ifdef CONFIG_HAVE_GENERIC_DMA_COHERENT | 4 | #ifdef CONFIG_HAVE_GENERIC_DMA_COHERENT |
5 | /* | 5 | /* |
6 | * These two functions are only for dma allocator. | 6 | * These three functions are only for dma allocator. |
7 | * Don't use them in device drivers. | 7 | * Don't use them in device drivers. |
8 | */ | 8 | */ |
9 | int dma_alloc_from_coherent(struct device *dev, ssize_t size, | 9 | int dma_alloc_from_coherent(struct device *dev, ssize_t size, |
10 | dma_addr_t *dma_handle, void **ret); | 10 | dma_addr_t *dma_handle, void **ret); |
11 | int dma_release_from_coherent(struct device *dev, int order, void *vaddr); | 11 | int dma_release_from_coherent(struct device *dev, int order, void *vaddr); |
12 | 12 | ||
13 | int dma_mmap_from_coherent(struct device *dev, struct vm_area_struct *vma, | ||
14 | void *cpu_addr, size_t size, int *ret); | ||
13 | /* | 15 | /* |
14 | * Standard interface | 16 | * Standard interface |
15 | */ | 17 | */ |
diff --git a/include/asm-generic/dma-contiguous.h b/include/asm-generic/dma-contiguous.h new file mode 100644 index 000000000000..c544356b374b --- /dev/null +++ b/include/asm-generic/dma-contiguous.h | |||
@@ -0,0 +1,28 @@ | |||
1 | #ifndef ASM_DMA_CONTIGUOUS_H | ||
2 | #define ASM_DMA_CONTIGUOUS_H | ||
3 | |||
4 | #ifdef __KERNEL__ | ||
5 | #ifdef CONFIG_CMA | ||
6 | |||
7 | #include <linux/device.h> | ||
8 | #include <linux/dma-contiguous.h> | ||
9 | |||
10 | static inline struct cma *dev_get_cma_area(struct device *dev) | ||
11 | { | ||
12 | if (dev && dev->cma_area) | ||
13 | return dev->cma_area; | ||
14 | return dma_contiguous_default_area; | ||
15 | } | ||
16 | |||
17 | static inline void dev_set_cma_area(struct device *dev, struct cma *cma) | ||
18 | { | ||
19 | if (dev) | ||
20 | dev->cma_area = cma; | ||
21 | if (!dev || !dma_contiguous_default_area) | ||
22 | dma_contiguous_default_area = cma; | ||
23 | } | ||
24 | |||
25 | #endif | ||
26 | #endif | ||
27 | |||
28 | #endif | ||
diff --git a/include/asm-generic/gpio.h b/include/asm-generic/gpio.h index 5f52690c3c8f..365ea09ed3b0 100644 --- a/include/asm-generic/gpio.h +++ b/include/asm-generic/gpio.h | |||
@@ -142,9 +142,9 @@ extern int __must_check gpiochip_reserve(int start, int ngpio); | |||
142 | /* add/remove chips */ | 142 | /* add/remove chips */ |
143 | extern int gpiochip_add(struct gpio_chip *chip); | 143 | extern int gpiochip_add(struct gpio_chip *chip); |
144 | extern int __must_check gpiochip_remove(struct gpio_chip *chip); | 144 | extern int __must_check gpiochip_remove(struct gpio_chip *chip); |
145 | extern struct gpio_chip *gpiochip_find(const void *data, | 145 | extern struct gpio_chip *gpiochip_find(void *data, |
146 | int (*match)(struct gpio_chip *chip, | 146 | int (*match)(struct gpio_chip *chip, |
147 | const void *data)); | 147 | void *data)); |
148 | 148 | ||
149 | 149 | ||
150 | /* Always use the library code for GPIO management calls, | 150 | /* Always use the library code for GPIO management calls, |
@@ -179,6 +179,8 @@ extern void gpio_free_array(const struct gpio *array, size_t num); | |||
179 | 179 | ||
180 | /* bindings for managed devices that want to request gpios */ | 180 | /* bindings for managed devices that want to request gpios */ |
181 | int devm_gpio_request(struct device *dev, unsigned gpio, const char *label); | 181 | int devm_gpio_request(struct device *dev, unsigned gpio, const char *label); |
182 | int devm_gpio_request_one(struct device *dev, unsigned gpio, | ||
183 | unsigned long flags, const char *label); | ||
182 | void devm_gpio_free(struct device *dev, unsigned int gpio); | 184 | void devm_gpio_free(struct device *dev, unsigned int gpio); |
183 | 185 | ||
184 | #ifdef CONFIG_GPIO_SYSFS | 186 | #ifdef CONFIG_GPIO_SYSFS |
diff --git a/include/asm-generic/kvm_para.h b/include/asm-generic/kvm_para.h new file mode 100644 index 000000000000..5cba37f9eae1 --- /dev/null +++ b/include/asm-generic/kvm_para.h | |||
@@ -0,0 +1,22 @@ | |||
1 | #ifndef _ASM_GENERIC_KVM_PARA_H | ||
2 | #define _ASM_GENERIC_KVM_PARA_H | ||
3 | |||
4 | #ifdef __KERNEL__ | ||
5 | |||
6 | /* | ||
7 | * This function is used by architectures that support kvm to avoid issuing | ||
8 | * false soft lockup messages. | ||
9 | */ | ||
10 | static inline bool kvm_check_and_clear_guest_paused(void) | ||
11 | { | ||
12 | return false; | ||
13 | } | ||
14 | |||
15 | static inline unsigned int kvm_arch_para_features(void) | ||
16 | { | ||
17 | return 0; | ||
18 | } | ||
19 | |||
20 | #endif /* _KERNEL__ */ | ||
21 | |||
22 | #endif | ||
diff --git a/include/asm-generic/pgtable.h b/include/asm-generic/pgtable.h index 125c54e98517..6f2b45a9b6bc 100644 --- a/include/asm-generic/pgtable.h +++ b/include/asm-generic/pgtable.h | |||
@@ -158,9 +158,8 @@ static inline void pmdp_set_wrprotect(struct mm_struct *mm, | |||
158 | #endif | 158 | #endif |
159 | 159 | ||
160 | #ifndef __HAVE_ARCH_PMDP_SPLITTING_FLUSH | 160 | #ifndef __HAVE_ARCH_PMDP_SPLITTING_FLUSH |
161 | extern pmd_t pmdp_splitting_flush(struct vm_area_struct *vma, | 161 | extern void pmdp_splitting_flush(struct vm_area_struct *vma, |
162 | unsigned long address, | 162 | unsigned long address, pmd_t *pmdp); |
163 | pmd_t *pmdp); | ||
164 | #endif | 163 | #endif |
165 | 164 | ||
166 | #ifndef __HAVE_ARCH_PTE_SAME | 165 | #ifndef __HAVE_ARCH_PTE_SAME |
@@ -446,6 +445,18 @@ static inline int pmd_write(pmd_t pmd) | |||
446 | #endif /* __HAVE_ARCH_PMD_WRITE */ | 445 | #endif /* __HAVE_ARCH_PMD_WRITE */ |
447 | #endif /* CONFIG_TRANSPARENT_HUGEPAGE */ | 446 | #endif /* CONFIG_TRANSPARENT_HUGEPAGE */ |
448 | 447 | ||
448 | #ifndef pmd_read_atomic | ||
449 | static inline pmd_t pmd_read_atomic(pmd_t *pmdp) | ||
450 | { | ||
451 | /* | ||
452 | * Depend on compiler for an atomic pmd read. NOTE: this is | ||
453 | * only going to work, if the pmdval_t isn't larger than | ||
454 | * an unsigned long. | ||
455 | */ | ||
456 | return *pmdp; | ||
457 | } | ||
458 | #endif | ||
459 | |||
449 | /* | 460 | /* |
450 | * This function is meant to be used by sites walking pagetables with | 461 | * This function is meant to be used by sites walking pagetables with |
451 | * the mmap_sem hold in read mode to protect against MADV_DONTNEED and | 462 | * the mmap_sem hold in read mode to protect against MADV_DONTNEED and |
@@ -459,11 +470,17 @@ static inline int pmd_write(pmd_t pmd) | |||
459 | * undefined so behaving like if the pmd was none is safe (because it | 470 | * undefined so behaving like if the pmd was none is safe (because it |
460 | * can return none anyway). The compiler level barrier() is critically | 471 | * can return none anyway). The compiler level barrier() is critically |
461 | * important to compute the two checks atomically on the same pmdval. | 472 | * important to compute the two checks atomically on the same pmdval. |
473 | * | ||
474 | * For 32bit kernels with a 64bit large pmd_t this automatically takes | ||
475 | * care of reading the pmd atomically to avoid SMP race conditions | ||
476 | * against pmd_populate() when the mmap_sem is hold for reading by the | ||
477 | * caller (a special atomic read not done by "gcc" as in the generic | ||
478 | * version above, is also needed when THP is disabled because the page | ||
479 | * fault can populate the pmd from under us). | ||
462 | */ | 480 | */ |
463 | static inline int pmd_none_or_trans_huge_or_clear_bad(pmd_t *pmd) | 481 | static inline int pmd_none_or_trans_huge_or_clear_bad(pmd_t *pmd) |
464 | { | 482 | { |
465 | /* depend on compiler for an atomic pmd read */ | 483 | pmd_t pmdval = pmd_read_atomic(pmd); |
466 | pmd_t pmdval = *pmd; | ||
467 | /* | 484 | /* |
468 | * The barrier will stabilize the pmdval in a register or on | 485 | * The barrier will stabilize the pmdval in a register or on |
469 | * the stack so that it will stop changing under the code. | 486 | * the stack so that it will stop changing under the code. |
diff --git a/include/asm-generic/posix_types.h b/include/asm-generic/posix_types.h index 91d44bd4dde3..fe74fccf18db 100644 --- a/include/asm-generic/posix_types.h +++ b/include/asm-generic/posix_types.h | |||
@@ -23,10 +23,6 @@ typedef __kernel_ulong_t __kernel_ino_t; | |||
23 | typedef unsigned int __kernel_mode_t; | 23 | typedef unsigned int __kernel_mode_t; |
24 | #endif | 24 | #endif |
25 | 25 | ||
26 | #ifndef __kernel_nlink_t | ||
27 | typedef __kernel_ulong_t __kernel_nlink_t; | ||
28 | #endif | ||
29 | |||
30 | #ifndef __kernel_pid_t | 26 | #ifndef __kernel_pid_t |
31 | typedef int __kernel_pid_t; | 27 | typedef int __kernel_pid_t; |
32 | #endif | 28 | #endif |
diff --git a/include/asm-generic/word-at-a-time.h b/include/asm-generic/word-at-a-time.h new file mode 100644 index 000000000000..3f21f1b72e45 --- /dev/null +++ b/include/asm-generic/word-at-a-time.h | |||
@@ -0,0 +1,52 @@ | |||
1 | #ifndef _ASM_WORD_AT_A_TIME_H | ||
2 | #define _ASM_WORD_AT_A_TIME_H | ||
3 | |||
4 | /* | ||
5 | * This says "generic", but it's actually big-endian only. | ||
6 | * Little-endian can use more efficient versions of these | ||
7 | * interfaces, see for example | ||
8 | * arch/x86/include/asm/word-at-a-time.h | ||
9 | * for those. | ||
10 | */ | ||
11 | |||
12 | #include <linux/kernel.h> | ||
13 | |||
14 | struct word_at_a_time { | ||
15 | const unsigned long high_bits, low_bits; | ||
16 | }; | ||
17 | |||
18 | #define WORD_AT_A_TIME_CONSTANTS { REPEAT_BYTE(0xfe) + 1, REPEAT_BYTE(0x7f) } | ||
19 | |||
20 | /* Bit set in the bytes that have a zero */ | ||
21 | static inline long prep_zero_mask(unsigned long val, unsigned long rhs, const struct word_at_a_time *c) | ||
22 | { | ||
23 | unsigned long mask = (val & c->low_bits) + c->low_bits; | ||
24 | return ~(mask | rhs); | ||
25 | } | ||
26 | |||
27 | #define create_zero_mask(mask) (mask) | ||
28 | |||
29 | static inline long find_zero(unsigned long mask) | ||
30 | { | ||
31 | long byte = 0; | ||
32 | #ifdef CONFIG_64BIT | ||
33 | if (mask >> 32) | ||
34 | mask >>= 32; | ||
35 | else | ||
36 | byte = 4; | ||
37 | #endif | ||
38 | if (mask >> 16) | ||
39 | mask >>= 16; | ||
40 | else | ||
41 | byte += 2; | ||
42 | return (mask >> 8) ? byte : byte + 1; | ||
43 | } | ||
44 | |||
45 | static inline bool has_zero(unsigned long val, unsigned long *data, const struct word_at_a_time *c) | ||
46 | { | ||
47 | unsigned long rhs = val | c->low_bits; | ||
48 | *data = rhs; | ||
49 | return (val + c->high_bits) & ~rhs; | ||
50 | } | ||
51 | |||
52 | #endif /* _ASM_WORD_AT_A_TIME_H */ | ||
diff --git a/include/drm/drm.h b/include/drm/drm.h index 64ff02d5b730..e51035a3757f 100644 --- a/include/drm/drm.h +++ b/include/drm/drm.h | |||
@@ -730,6 +730,8 @@ struct drm_prime_handle { | |||
730 | #define DRM_IOCTL_MODE_GETPLANE DRM_IOWR(0xB6, struct drm_mode_get_plane) | 730 | #define DRM_IOCTL_MODE_GETPLANE DRM_IOWR(0xB6, struct drm_mode_get_plane) |
731 | #define DRM_IOCTL_MODE_SETPLANE DRM_IOWR(0xB7, struct drm_mode_set_plane) | 731 | #define DRM_IOCTL_MODE_SETPLANE DRM_IOWR(0xB7, struct drm_mode_set_plane) |
732 | #define DRM_IOCTL_MODE_ADDFB2 DRM_IOWR(0xB8, struct drm_mode_fb_cmd2) | 732 | #define DRM_IOCTL_MODE_ADDFB2 DRM_IOWR(0xB8, struct drm_mode_fb_cmd2) |
733 | #define DRM_IOCTL_MODE_OBJ_GETPROPERTIES DRM_IOWR(0xB9, struct drm_mode_obj_get_properties) | ||
734 | #define DRM_IOCTL_MODE_OBJ_SETPROPERTY DRM_IOWR(0xBA, struct drm_mode_obj_set_property) | ||
733 | 735 | ||
734 | /** | 736 | /** |
735 | * Device specific ioctls should only be in their respective headers | 737 | * Device specific ioctls should only be in their respective headers |
@@ -775,6 +777,10 @@ struct drm_event_vblank { | |||
775 | #define DRM_CAP_VBLANK_HIGH_CRTC 0x2 | 777 | #define DRM_CAP_VBLANK_HIGH_CRTC 0x2 |
776 | #define DRM_CAP_DUMB_PREFERRED_DEPTH 0x3 | 778 | #define DRM_CAP_DUMB_PREFERRED_DEPTH 0x3 |
777 | #define DRM_CAP_DUMB_PREFER_SHADOW 0x4 | 779 | #define DRM_CAP_DUMB_PREFER_SHADOW 0x4 |
780 | #define DRM_CAP_PRIME 0x5 | ||
781 | |||
782 | #define DRM_PRIME_CAP_IMPORT 0x1 | ||
783 | #define DRM_PRIME_CAP_EXPORT 0x2 | ||
778 | 784 | ||
779 | /* typedef area */ | 785 | /* typedef area */ |
780 | #ifndef __KERNEL__ | 786 | #ifndef __KERNEL__ |
diff --git a/include/drm/drmP.h b/include/drm/drmP.h index dd731043fecd..31ad880ca2ef 100644 --- a/include/drm/drmP.h +++ b/include/drm/drmP.h | |||
@@ -755,11 +755,11 @@ struct drm_driver { | |||
755 | * @dev: DRM device | 755 | * @dev: DRM device |
756 | * @crtc: counter to fetch | 756 | * @crtc: counter to fetch |
757 | * | 757 | * |
758 | * Driver callback for fetching a raw hardware vblank counter | 758 | * Driver callback for fetching a raw hardware vblank counter for @crtc. |
759 | * for @crtc. If a device doesn't have a hardware counter, the | 759 | * If a device doesn't have a hardware counter, the driver can simply |
760 | * driver can simply return the value of drm_vblank_count and | 760 | * return the value of drm_vblank_count. The DRM core will account for |
761 | * make the enable_vblank() and disable_vblank() hooks into no-ops, | 761 | * missed vblank events while interrupts where disabled based on system |
762 | * leaving interrupts enabled at all times. | 762 | * timestamps. |
763 | * | 763 | * |
764 | * Wraparound handling and loss of events due to modesetting is dealt | 764 | * Wraparound handling and loss of events due to modesetting is dealt |
765 | * with in the DRM core code. | 765 | * with in the DRM core code. |
@@ -941,7 +941,7 @@ struct drm_driver { | |||
941 | uint32_t handle); | 941 | uint32_t handle); |
942 | 942 | ||
943 | /* Driver private ops for this object */ | 943 | /* Driver private ops for this object */ |
944 | struct vm_operations_struct *gem_vm_ops; | 944 | const struct vm_operations_struct *gem_vm_ops; |
945 | 945 | ||
946 | int major; | 946 | int major; |
947 | int minor; | 947 | int minor; |
@@ -1309,8 +1309,8 @@ extern int drm_release(struct inode *inode, struct file *filp); | |||
1309 | /* Mapping support (drm_vm.h) */ | 1309 | /* Mapping support (drm_vm.h) */ |
1310 | extern int drm_mmap(struct file *filp, struct vm_area_struct *vma); | 1310 | extern int drm_mmap(struct file *filp, struct vm_area_struct *vma); |
1311 | extern int drm_mmap_locked(struct file *filp, struct vm_area_struct *vma); | 1311 | extern int drm_mmap_locked(struct file *filp, struct vm_area_struct *vma); |
1312 | extern void drm_vm_open_locked(struct vm_area_struct *vma); | 1312 | extern void drm_vm_open_locked(struct drm_device *dev, struct vm_area_struct *vma); |
1313 | extern void drm_vm_close_locked(struct vm_area_struct *vma); | 1313 | extern void drm_vm_close_locked(struct drm_device *dev, struct vm_area_struct *vma); |
1314 | extern unsigned int drm_poll(struct file *filp, struct poll_table_struct *wait); | 1314 | extern unsigned int drm_poll(struct file *filp, struct poll_table_struct *wait); |
1315 | 1315 | ||
1316 | /* Memory management support (drm_memory.h) */ | 1316 | /* Memory management support (drm_memory.h) */ |
@@ -1378,6 +1378,7 @@ extern int drm_remove_magic(struct drm_master *master, drm_magic_t magic); | |||
1378 | 1378 | ||
1379 | /* Cache management (drm_cache.c) */ | 1379 | /* Cache management (drm_cache.c) */ |
1380 | void drm_clflush_pages(struct page *pages[], unsigned long num_pages); | 1380 | void drm_clflush_pages(struct page *pages[], unsigned long num_pages); |
1381 | void drm_clflush_virt_range(char *addr, unsigned long length); | ||
1381 | 1382 | ||
1382 | /* Locking IOCTL support (drm_lock.h) */ | 1383 | /* Locking IOCTL support (drm_lock.h) */ |
1383 | extern int drm_lock(struct drm_device *dev, void *data, | 1384 | extern int drm_lock(struct drm_device *dev, void *data, |
@@ -1557,6 +1558,8 @@ extern int drm_prime_handle_to_fd_ioctl(struct drm_device *dev, void *data, | |||
1557 | extern int drm_prime_fd_to_handle_ioctl(struct drm_device *dev, void *data, | 1558 | extern int drm_prime_fd_to_handle_ioctl(struct drm_device *dev, void *data, |
1558 | struct drm_file *file_priv); | 1559 | struct drm_file *file_priv); |
1559 | 1560 | ||
1561 | extern int drm_prime_sg_to_page_addr_arrays(struct sg_table *sgt, struct page **pages, | ||
1562 | dma_addr_t *addrs, int max_pages); | ||
1560 | extern struct sg_table *drm_prime_pages_to_sg(struct page **pages, int nr_pages); | 1563 | extern struct sg_table *drm_prime_pages_to_sg(struct page **pages, int nr_pages); |
1561 | extern void drm_prime_gem_destroy(struct drm_gem_object *obj, struct sg_table *sg); | 1564 | extern void drm_prime_gem_destroy(struct drm_gem_object *obj, struct sg_table *sg); |
1562 | 1565 | ||
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index e250eda4e3a8..bac55c215113 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h | |||
@@ -36,6 +36,7 @@ | |||
36 | struct drm_device; | 36 | struct drm_device; |
37 | struct drm_mode_set; | 37 | struct drm_mode_set; |
38 | struct drm_framebuffer; | 38 | struct drm_framebuffer; |
39 | struct drm_object_properties; | ||
39 | 40 | ||
40 | 41 | ||
41 | #define DRM_MODE_OBJECT_CRTC 0xcccccccc | 42 | #define DRM_MODE_OBJECT_CRTC 0xcccccccc |
@@ -50,6 +51,14 @@ struct drm_framebuffer; | |||
50 | struct drm_mode_object { | 51 | struct drm_mode_object { |
51 | uint32_t id; | 52 | uint32_t id; |
52 | uint32_t type; | 53 | uint32_t type; |
54 | struct drm_object_properties *properties; | ||
55 | }; | ||
56 | |||
57 | #define DRM_OBJECT_MAX_PROPERTY 24 | ||
58 | struct drm_object_properties { | ||
59 | int count; | ||
60 | uint32_t ids[DRM_OBJECT_MAX_PROPERTY]; | ||
61 | uint64_t values[DRM_OBJECT_MAX_PROPERTY]; | ||
53 | }; | 62 | }; |
54 | 63 | ||
55 | /* | 64 | /* |
@@ -285,19 +294,16 @@ struct drm_plane; | |||
285 | 294 | ||
286 | /** | 295 | /** |
287 | * drm_crtc_funcs - control CRTCs for a given device | 296 | * drm_crtc_funcs - control CRTCs for a given device |
288 | * @reset: reset CRTC after state has been invalidate (e.g. resume) | ||
289 | * @dpms: control display power levels | ||
290 | * @save: save CRTC state | 297 | * @save: save CRTC state |
291 | * @resore: restore CRTC state | 298 | * @restore: restore CRTC state |
292 | * @lock: lock the CRTC | 299 | * @reset: reset CRTC after state has been invalidate (e.g. resume) |
293 | * @unlock: unlock the CRTC | 300 | * @cursor_set: setup the cursor |
294 | * @shadow_allocate: allocate shadow pixmap | 301 | * @cursor_move: move the cursor |
295 | * @shadow_create: create shadow pixmap for rotation support | ||
296 | * @shadow_destroy: free shadow pixmap | ||
297 | * @mode_fixup: fixup proposed mode | ||
298 | * @mode_set: set the desired mode on the CRTC | ||
299 | * @gamma_set: specify color ramp for CRTC | 302 | * @gamma_set: specify color ramp for CRTC |
300 | * @destroy: deinit and free object. | 303 | * @destroy: deinit and free object |
304 | * @set_property: called when a property is changed | ||
305 | * @set_config: apply a new CRTC configuration | ||
306 | * @page_flip: initiate a page flip | ||
301 | * | 307 | * |
302 | * The drm_crtc_funcs structure is the central CRTC management structure | 308 | * The drm_crtc_funcs structure is the central CRTC management structure |
303 | * in the DRM. Each CRTC controls one or more connectors (note that the name | 309 | * in the DRM. Each CRTC controls one or more connectors (note that the name |
@@ -341,6 +347,9 @@ struct drm_crtc_funcs { | |||
341 | int (*page_flip)(struct drm_crtc *crtc, | 347 | int (*page_flip)(struct drm_crtc *crtc, |
342 | struct drm_framebuffer *fb, | 348 | struct drm_framebuffer *fb, |
343 | struct drm_pending_vblank_event *event); | 349 | struct drm_pending_vblank_event *event); |
350 | |||
351 | int (*set_property)(struct drm_crtc *crtc, | ||
352 | struct drm_property *property, uint64_t val); | ||
344 | }; | 353 | }; |
345 | 354 | ||
346 | /** | 355 | /** |
@@ -360,6 +369,7 @@ struct drm_crtc_funcs { | |||
360 | * @framedur_ns: precise line timing | 369 | * @framedur_ns: precise line timing |
361 | * @pixeldur_ns: precise pixel timing | 370 | * @pixeldur_ns: precise pixel timing |
362 | * @helper_private: mid-layer private data | 371 | * @helper_private: mid-layer private data |
372 | * @properties: property tracking for this CRTC | ||
363 | * | 373 | * |
364 | * Each CRTC may have one or more connectors associated with it. This structure | 374 | * Each CRTC may have one or more connectors associated with it. This structure |
365 | * allows the CRTC to be controlled. | 375 | * allows the CRTC to be controlled. |
@@ -395,6 +405,8 @@ struct drm_crtc { | |||
395 | 405 | ||
396 | /* if you are using the helper */ | 406 | /* if you are using the helper */ |
397 | void *helper_private; | 407 | void *helper_private; |
408 | |||
409 | struct drm_object_properties properties; | ||
398 | }; | 410 | }; |
399 | 411 | ||
400 | 412 | ||
@@ -404,11 +416,8 @@ struct drm_crtc { | |||
404 | * @save: save connector state | 416 | * @save: save connector state |
405 | * @restore: restore connector state | 417 | * @restore: restore connector state |
406 | * @reset: reset connector after state has been invalidate (e.g. resume) | 418 | * @reset: reset connector after state has been invalidate (e.g. resume) |
407 | * @mode_valid: is this mode valid on the given connector? | ||
408 | * @mode_fixup: try to fixup proposed mode for this connector | ||
409 | * @mode_set: set this mode | ||
410 | * @detect: is this connector active? | 419 | * @detect: is this connector active? |
411 | * @get_modes: get mode list for this connector | 420 | * @fill_modes: fill mode list for this connector |
412 | * @set_property: property for this connector may need update | 421 | * @set_property: property for this connector may need update |
413 | * @destroy: make object go away | 422 | * @destroy: make object go away |
414 | * @force: notify the driver the connector is forced on | 423 | * @force: notify the driver the connector is forced on |
@@ -451,7 +460,6 @@ struct drm_encoder_funcs { | |||
451 | }; | 460 | }; |
452 | 461 | ||
453 | #define DRM_CONNECTOR_MAX_UMODES 16 | 462 | #define DRM_CONNECTOR_MAX_UMODES 16 |
454 | #define DRM_CONNECTOR_MAX_PROPERTY 16 | ||
455 | #define DRM_CONNECTOR_LEN 32 | 463 | #define DRM_CONNECTOR_LEN 32 |
456 | #define DRM_CONNECTOR_MAX_ENCODER 3 | 464 | #define DRM_CONNECTOR_MAX_ENCODER 3 |
457 | 465 | ||
@@ -520,8 +528,7 @@ enum drm_connector_force { | |||
520 | * @funcs: connector control functions | 528 | * @funcs: connector control functions |
521 | * @user_modes: user added mode list | 529 | * @user_modes: user added mode list |
522 | * @edid_blob_ptr: DRM property containing EDID if present | 530 | * @edid_blob_ptr: DRM property containing EDID if present |
523 | * @property_ids: property tracking for this connector | 531 | * @properties: property tracking for this connector |
524 | * @property_values: value pointers or data for properties | ||
525 | * @polled: a %DRM_CONNECTOR_POLL_<foo> value for core driven polling | 532 | * @polled: a %DRM_CONNECTOR_POLL_<foo> value for core driven polling |
526 | * @dpms: current dpms state | 533 | * @dpms: current dpms state |
527 | * @helper_private: mid-layer private data | 534 | * @helper_private: mid-layer private data |
@@ -565,8 +572,7 @@ struct drm_connector { | |||
565 | 572 | ||
566 | struct list_head user_modes; | 573 | struct list_head user_modes; |
567 | struct drm_property_blob *edid_blob_ptr; | 574 | struct drm_property_blob *edid_blob_ptr; |
568 | u32 property_ids[DRM_CONNECTOR_MAX_PROPERTY]; | 575 | struct drm_object_properties properties; |
569 | uint64_t property_values[DRM_CONNECTOR_MAX_PROPERTY]; | ||
570 | 576 | ||
571 | uint8_t polled; /* DRM_CONNECTOR_POLL_* */ | 577 | uint8_t polled; /* DRM_CONNECTOR_POLL_* */ |
572 | 578 | ||
@@ -595,6 +601,7 @@ struct drm_connector { | |||
595 | * @update_plane: update the plane configuration | 601 | * @update_plane: update the plane configuration |
596 | * @disable_plane: shut down the plane | 602 | * @disable_plane: shut down the plane |
597 | * @destroy: clean up plane resources | 603 | * @destroy: clean up plane resources |
604 | * @set_property: called when a property is changed | ||
598 | */ | 605 | */ |
599 | struct drm_plane_funcs { | 606 | struct drm_plane_funcs { |
600 | int (*update_plane)(struct drm_plane *plane, | 607 | int (*update_plane)(struct drm_plane *plane, |
@@ -605,6 +612,9 @@ struct drm_plane_funcs { | |||
605 | uint32_t src_w, uint32_t src_h); | 612 | uint32_t src_w, uint32_t src_h); |
606 | int (*disable_plane)(struct drm_plane *plane); | 613 | int (*disable_plane)(struct drm_plane *plane); |
607 | void (*destroy)(struct drm_plane *plane); | 614 | void (*destroy)(struct drm_plane *plane); |
615 | |||
616 | int (*set_property)(struct drm_plane *plane, | ||
617 | struct drm_property *property, uint64_t val); | ||
608 | }; | 618 | }; |
609 | 619 | ||
610 | /** | 620 | /** |
@@ -622,6 +632,7 @@ struct drm_plane_funcs { | |||
622 | * @enabled: enabled flag | 632 | * @enabled: enabled flag |
623 | * @funcs: helper functions | 633 | * @funcs: helper functions |
624 | * @helper_private: storage for drver layer | 634 | * @helper_private: storage for drver layer |
635 | * @properties: property tracking for this plane | ||
625 | */ | 636 | */ |
626 | struct drm_plane { | 637 | struct drm_plane { |
627 | struct drm_device *dev; | 638 | struct drm_device *dev; |
@@ -644,6 +655,8 @@ struct drm_plane { | |||
644 | 655 | ||
645 | const struct drm_plane_funcs *funcs; | 656 | const struct drm_plane_funcs *funcs; |
646 | void *helper_private; | 657 | void *helper_private; |
658 | |||
659 | struct drm_object_properties properties; | ||
647 | }; | 660 | }; |
648 | 661 | ||
649 | /** | 662 | /** |
@@ -761,7 +774,7 @@ struct drm_mode_config { | |||
761 | 774 | ||
762 | int min_width, min_height; | 775 | int min_width, min_height; |
763 | int max_width, max_height; | 776 | int max_width, max_height; |
764 | struct drm_mode_config_funcs *funcs; | 777 | const struct drm_mode_config_funcs *funcs; |
765 | resource_size_t fb_base; | 778 | resource_size_t fb_base; |
766 | 779 | ||
767 | /* output poll support */ | 780 | /* output poll support */ |
@@ -898,6 +911,12 @@ extern int drm_connector_property_set_value(struct drm_connector *connector, | |||
898 | extern int drm_connector_property_get_value(struct drm_connector *connector, | 911 | extern int drm_connector_property_get_value(struct drm_connector *connector, |
899 | struct drm_property *property, | 912 | struct drm_property *property, |
900 | uint64_t *value); | 913 | uint64_t *value); |
914 | extern int drm_object_property_set_value(struct drm_mode_object *obj, | ||
915 | struct drm_property *property, | ||
916 | uint64_t val); | ||
917 | extern int drm_object_property_get_value(struct drm_mode_object *obj, | ||
918 | struct drm_property *property, | ||
919 | uint64_t *value); | ||
901 | extern struct drm_display_mode *drm_crtc_mode_create(struct drm_device *dev); | 920 | extern struct drm_display_mode *drm_crtc_mode_create(struct drm_device *dev); |
902 | extern void drm_framebuffer_set_object(struct drm_device *dev, | 921 | extern void drm_framebuffer_set_object(struct drm_device *dev, |
903 | unsigned long handle); | 922 | unsigned long handle); |
@@ -910,14 +929,21 @@ extern int drmfb_remove(struct drm_device *dev, struct drm_framebuffer *fb); | |||
910 | extern void drm_crtc_probe_connector_modes(struct drm_device *dev, int maxX, int maxY); | 929 | extern void drm_crtc_probe_connector_modes(struct drm_device *dev, int maxX, int maxY); |
911 | extern bool drm_crtc_in_use(struct drm_crtc *crtc); | 930 | extern bool drm_crtc_in_use(struct drm_crtc *crtc); |
912 | 931 | ||
913 | extern int drm_connector_attach_property(struct drm_connector *connector, | 932 | extern void drm_connector_attach_property(struct drm_connector *connector, |
914 | struct drm_property *property, uint64_t init_val); | 933 | struct drm_property *property, uint64_t init_val); |
934 | extern void drm_object_attach_property(struct drm_mode_object *obj, | ||
935 | struct drm_property *property, | ||
936 | uint64_t init_val); | ||
915 | extern struct drm_property *drm_property_create(struct drm_device *dev, int flags, | 937 | extern struct drm_property *drm_property_create(struct drm_device *dev, int flags, |
916 | const char *name, int num_values); | 938 | const char *name, int num_values); |
917 | extern struct drm_property *drm_property_create_enum(struct drm_device *dev, int flags, | 939 | extern struct drm_property *drm_property_create_enum(struct drm_device *dev, int flags, |
918 | const char *name, | 940 | const char *name, |
919 | const struct drm_prop_enum_list *props, | 941 | const struct drm_prop_enum_list *props, |
920 | int num_values); | 942 | int num_values); |
943 | struct drm_property *drm_property_create_bitmask(struct drm_device *dev, | ||
944 | int flags, const char *name, | ||
945 | const struct drm_prop_enum_list *props, | ||
946 | int num_values); | ||
921 | struct drm_property *drm_property_create_range(struct drm_device *dev, int flags, | 947 | struct drm_property *drm_property_create_range(struct drm_device *dev, int flags, |
922 | const char *name, | 948 | const char *name, |
923 | uint64_t min, uint64_t max); | 949 | uint64_t min, uint64_t max); |
@@ -1012,10 +1038,11 @@ extern int drm_add_modes_noedid(struct drm_connector *connector, | |||
1012 | int hdisplay, int vdisplay); | 1038 | int hdisplay, int vdisplay); |
1013 | 1039 | ||
1014 | extern int drm_edid_header_is_valid(const u8 *raw_edid); | 1040 | extern int drm_edid_header_is_valid(const u8 *raw_edid); |
1015 | extern bool drm_edid_block_valid(u8 *raw_edid); | 1041 | extern bool drm_edid_block_valid(u8 *raw_edid, int block); |
1016 | extern bool drm_edid_is_valid(struct edid *edid); | 1042 | extern bool drm_edid_is_valid(struct edid *edid); |
1017 | struct drm_display_mode *drm_mode_find_dmt(struct drm_device *dev, | 1043 | struct drm_display_mode *drm_mode_find_dmt(struct drm_device *dev, |
1018 | int hsize, int vsize, int fresh); | 1044 | int hsize, int vsize, int fresh, |
1045 | bool rb); | ||
1019 | 1046 | ||
1020 | extern int drm_mode_create_dumb_ioctl(struct drm_device *dev, | 1047 | extern int drm_mode_create_dumb_ioctl(struct drm_device *dev, |
1021 | void *data, struct drm_file *file_priv); | 1048 | void *data, struct drm_file *file_priv); |
@@ -1023,7 +1050,16 @@ extern int drm_mode_mmap_dumb_ioctl(struct drm_device *dev, | |||
1023 | void *data, struct drm_file *file_priv); | 1050 | void *data, struct drm_file *file_priv); |
1024 | extern int drm_mode_destroy_dumb_ioctl(struct drm_device *dev, | 1051 | extern int drm_mode_destroy_dumb_ioctl(struct drm_device *dev, |
1025 | void *data, struct drm_file *file_priv); | 1052 | void *data, struct drm_file *file_priv); |
1053 | extern int drm_mode_obj_get_properties_ioctl(struct drm_device *dev, void *data, | ||
1054 | struct drm_file *file_priv); | ||
1055 | extern int drm_mode_obj_set_property_ioctl(struct drm_device *dev, void *data, | ||
1056 | struct drm_file *file_priv); | ||
1026 | 1057 | ||
1027 | extern void drm_fb_get_bpp_depth(uint32_t format, unsigned int *depth, | 1058 | extern void drm_fb_get_bpp_depth(uint32_t format, unsigned int *depth, |
1028 | int *bpp); | 1059 | int *bpp); |
1060 | extern int drm_format_num_planes(uint32_t format); | ||
1061 | extern int drm_format_plane_cpp(uint32_t format, int plane); | ||
1062 | extern int drm_format_horz_chroma_subsampling(uint32_t format); | ||
1063 | extern int drm_format_vert_chroma_subsampling(uint32_t format); | ||
1064 | |||
1029 | #endif /* __DRM_CRTC_H__ */ | 1065 | #endif /* __DRM_CRTC_H__ */ |
diff --git a/include/drm/drm_crtc_helper.h b/include/drm/drm_crtc_helper.h index 37515d1afab3..7988e55c98d0 100644 --- a/include/drm/drm_crtc_helper.h +++ b/include/drm/drm_crtc_helper.h | |||
@@ -44,6 +44,13 @@ enum mode_set_atomic { | |||
44 | ENTER_ATOMIC_MODE_SET, | 44 | ENTER_ATOMIC_MODE_SET, |
45 | }; | 45 | }; |
46 | 46 | ||
47 | /** | ||
48 | * drm_crtc_helper_funcs - helper operations for CRTCs | ||
49 | * @mode_fixup: try to fixup proposed mode for this connector | ||
50 | * @mode_set: set this mode | ||
51 | * | ||
52 | * The helper operations are called by the mid-layer CRTC helper. | ||
53 | */ | ||
47 | struct drm_crtc_helper_funcs { | 54 | struct drm_crtc_helper_funcs { |
48 | /* | 55 | /* |
49 | * Control power levels on the CRTC. If the mode passed in is | 56 | * Control power levels on the CRTC. If the mode passed in is |
@@ -76,6 +83,13 @@ struct drm_crtc_helper_funcs { | |||
76 | void (*disable)(struct drm_crtc *crtc); | 83 | void (*disable)(struct drm_crtc *crtc); |
77 | }; | 84 | }; |
78 | 85 | ||
86 | /** | ||
87 | * drm_encoder_helper_funcs - helper operations for encoders | ||
88 | * @mode_fixup: try to fixup proposed mode for this connector | ||
89 | * @mode_set: set this mode | ||
90 | * | ||
91 | * The helper operations are called by the mid-layer CRTC helper. | ||
92 | */ | ||
79 | struct drm_encoder_helper_funcs { | 93 | struct drm_encoder_helper_funcs { |
80 | void (*dpms)(struct drm_encoder *encoder, int mode); | 94 | void (*dpms)(struct drm_encoder *encoder, int mode); |
81 | void (*save)(struct drm_encoder *encoder); | 95 | void (*save)(struct drm_encoder *encoder); |
@@ -97,6 +111,13 @@ struct drm_encoder_helper_funcs { | |||
97 | void (*disable)(struct drm_encoder *encoder); | 111 | void (*disable)(struct drm_encoder *encoder); |
98 | }; | 112 | }; |
99 | 113 | ||
114 | /** | ||
115 | * drm_connector_helper_funcs - helper operations for connectors | ||
116 | * @get_modes: get mode list for this connector | ||
117 | * @mode_valid: is this mode valid on the given connector? | ||
118 | * | ||
119 | * The helper operations are called by the mid-layer CRTC helper. | ||
120 | */ | ||
100 | struct drm_connector_helper_funcs { | 121 | struct drm_connector_helper_funcs { |
101 | int (*get_modes)(struct drm_connector *connector); | 122 | int (*get_modes)(struct drm_connector *connector); |
102 | int (*mode_valid)(struct drm_connector *connector, | 123 | int (*mode_valid)(struct drm_connector *connector, |
@@ -145,6 +166,4 @@ extern void drm_helper_hpd_irq_event(struct drm_device *dev); | |||
145 | extern void drm_kms_helper_poll_disable(struct drm_device *dev); | 166 | extern void drm_kms_helper_poll_disable(struct drm_device *dev); |
146 | extern void drm_kms_helper_poll_enable(struct drm_device *dev); | 167 | extern void drm_kms_helper_poll_enable(struct drm_device *dev); |
147 | 168 | ||
148 | extern int drm_format_num_planes(uint32_t format); | ||
149 | |||
150 | #endif | 169 | #endif |
diff --git a/include/drm/drm_dp_helper.h b/include/drm/drm_dp_helper.h index 93df2d72750b..1744b18c06b3 100644 --- a/include/drm/drm_dp_helper.h +++ b/include/drm/drm_dp_helper.h | |||
@@ -72,6 +72,10 @@ | |||
72 | 72 | ||
73 | #define DP_MAIN_LINK_CHANNEL_CODING 0x006 | 73 | #define DP_MAIN_LINK_CHANNEL_CODING 0x006 |
74 | 74 | ||
75 | #define DP_DOWN_STREAM_PORT_COUNT 0x007 | ||
76 | #define DP_PORT_COUNT_MASK 0x0f | ||
77 | #define DP_OUI_SUPPORT (1 << 7) | ||
78 | |||
75 | #define DP_EDP_CONFIGURATION_CAP 0x00d | 79 | #define DP_EDP_CONFIGURATION_CAP 0x00d |
76 | #define DP_TRAINING_AUX_RD_INTERVAL 0x00e | 80 | #define DP_TRAINING_AUX_RD_INTERVAL 0x00e |
77 | 81 | ||
@@ -213,6 +217,10 @@ | |||
213 | # define DP_TEST_NAK (1 << 1) | 217 | # define DP_TEST_NAK (1 << 1) |
214 | # define DP_TEST_EDID_CHECKSUM_WRITE (1 << 2) | 218 | # define DP_TEST_EDID_CHECKSUM_WRITE (1 << 2) |
215 | 219 | ||
220 | #define DP_SOURCE_OUI 0x300 | ||
221 | #define DP_SINK_OUI 0x400 | ||
222 | #define DP_BRANCH_OUI 0x500 | ||
223 | |||
216 | #define DP_SET_POWER 0x600 | 224 | #define DP_SET_POWER 0x600 |
217 | # define DP_SET_POWER_D0 0x1 | 225 | # define DP_SET_POWER_D0 0x1 |
218 | # define DP_SET_POWER_D3 0x2 | 226 | # define DP_SET_POWER_D3 0x2 |
diff --git a/include/drm/drm_edid.h b/include/drm/drm_edid.h index bcb9a66baa8c..0cac551c5347 100644 --- a/include/drm/drm_edid.h +++ b/include/drm/drm_edid.h | |||
@@ -90,12 +90,26 @@ struct detailed_data_monitor_range { | |||
90 | u8 min_hfreq_khz; | 90 | u8 min_hfreq_khz; |
91 | u8 max_hfreq_khz; | 91 | u8 max_hfreq_khz; |
92 | u8 pixel_clock_mhz; /* need to multiply by 10 */ | 92 | u8 pixel_clock_mhz; /* need to multiply by 10 */ |
93 | __le16 sec_gtf_toggle; /* A000=use above, 20=use below */ | 93 | u8 flags; |
94 | u8 hfreq_start_khz; /* need to multiply by 2 */ | 94 | union { |
95 | u8 c; /* need to divide by 2 */ | 95 | struct { |
96 | __le16 m; | 96 | u8 reserved; |
97 | u8 k; | 97 | u8 hfreq_start_khz; /* need to multiply by 2 */ |
98 | u8 j; /* need to divide by 2 */ | 98 | u8 c; /* need to divide by 2 */ |
99 | __le16 m; | ||
100 | u8 k; | ||
101 | u8 j; /* need to divide by 2 */ | ||
102 | } __attribute__((packed)) gtf2; | ||
103 | struct { | ||
104 | u8 version; | ||
105 | u8 data1; /* high 6 bits: extra clock resolution */ | ||
106 | u8 data2; /* plus low 2 of above: max hactive */ | ||
107 | u8 supported_aspects; | ||
108 | u8 flags; /* preferred aspect and blanking support */ | ||
109 | u8 supported_scalings; | ||
110 | u8 preferred_refresh; | ||
111 | } __attribute__((packed)) cvt; | ||
112 | } formula; | ||
99 | } __attribute__((packed)); | 113 | } __attribute__((packed)); |
100 | 114 | ||
101 | struct detailed_data_wpindex { | 115 | struct detailed_data_wpindex { |
diff --git a/include/drm/drm_fixed.h b/include/drm/drm_fixed.h index 4a08a664ff1f..0ead502e17d2 100644 --- a/include/drm/drm_fixed.h +++ b/include/drm/drm_fixed.h | |||
@@ -37,6 +37,7 @@ typedef union dfixed { | |||
37 | #define dfixed_init(A) { .full = dfixed_const((A)) } | 37 | #define dfixed_init(A) { .full = dfixed_const((A)) } |
38 | #define dfixed_init_half(A) { .full = dfixed_const_half((A)) } | 38 | #define dfixed_init_half(A) { .full = dfixed_const_half((A)) } |
39 | #define dfixed_trunc(A) ((A).full >> 12) | 39 | #define dfixed_trunc(A) ((A).full >> 12) |
40 | #define dfixed_frac(A) ((A).full & ((1 << 12) - 1)) | ||
40 | 41 | ||
41 | static inline u32 dfixed_floor(fixed20_12 A) | 42 | static inline u32 dfixed_floor(fixed20_12 A) |
42 | { | 43 | { |
diff --git a/include/drm/drm_mem_util.h b/include/drm/drm_mem_util.h index 6bd325fedc87..19a240446fca 100644 --- a/include/drm/drm_mem_util.h +++ b/include/drm/drm_mem_util.h | |||
@@ -31,7 +31,7 @@ | |||
31 | 31 | ||
32 | static __inline__ void *drm_calloc_large(size_t nmemb, size_t size) | 32 | static __inline__ void *drm_calloc_large(size_t nmemb, size_t size) |
33 | { | 33 | { |
34 | if (size != 0 && nmemb > ULONG_MAX / size) | 34 | if (size != 0 && nmemb > SIZE_MAX / size) |
35 | return NULL; | 35 | return NULL; |
36 | 36 | ||
37 | if (size * nmemb <= PAGE_SIZE) | 37 | if (size * nmemb <= PAGE_SIZE) |
@@ -44,7 +44,7 @@ static __inline__ void *drm_calloc_large(size_t nmemb, size_t size) | |||
44 | /* Modeled after cairo's malloc_ab, it's like calloc but without the zeroing. */ | 44 | /* Modeled after cairo's malloc_ab, it's like calloc but without the zeroing. */ |
45 | static __inline__ void *drm_malloc_ab(size_t nmemb, size_t size) | 45 | static __inline__ void *drm_malloc_ab(size_t nmemb, size_t size) |
46 | { | 46 | { |
47 | if (size != 0 && nmemb > ULONG_MAX / size) | 47 | if (size != 0 && nmemb > SIZE_MAX / size) |
48 | return NULL; | 48 | return NULL; |
49 | 49 | ||
50 | if (size * nmemb <= PAGE_SIZE) | 50 | if (size * nmemb <= PAGE_SIZE) |
diff --git a/include/drm/drm_mode.h b/include/drm/drm_mode.h index 4a0aae38e160..5581980b14f6 100644 --- a/include/drm/drm_mode.h +++ b/include/drm/drm_mode.h | |||
@@ -230,6 +230,7 @@ struct drm_mode_get_connector { | |||
230 | #define DRM_MODE_PROP_IMMUTABLE (1<<2) | 230 | #define DRM_MODE_PROP_IMMUTABLE (1<<2) |
231 | #define DRM_MODE_PROP_ENUM (1<<3) /* enumerated type with text strings */ | 231 | #define DRM_MODE_PROP_ENUM (1<<3) /* enumerated type with text strings */ |
232 | #define DRM_MODE_PROP_BLOB (1<<4) | 232 | #define DRM_MODE_PROP_BLOB (1<<4) |
233 | #define DRM_MODE_PROP_BITMASK (1<<5) /* bitmask of enumerated types */ | ||
233 | 234 | ||
234 | struct drm_mode_property_enum { | 235 | struct drm_mode_property_enum { |
235 | __u64 value; | 236 | __u64 value; |
@@ -254,6 +255,21 @@ struct drm_mode_connector_set_property { | |||
254 | __u32 connector_id; | 255 | __u32 connector_id; |
255 | }; | 256 | }; |
256 | 257 | ||
258 | struct drm_mode_obj_get_properties { | ||
259 | __u64 props_ptr; | ||
260 | __u64 prop_values_ptr; | ||
261 | __u32 count_props; | ||
262 | __u32 obj_id; | ||
263 | __u32 obj_type; | ||
264 | }; | ||
265 | |||
266 | struct drm_mode_obj_set_property { | ||
267 | __u64 value; | ||
268 | __u32 prop_id; | ||
269 | __u32 obj_id; | ||
270 | __u32 obj_type; | ||
271 | }; | ||
272 | |||
257 | struct drm_mode_get_blob { | 273 | struct drm_mode_get_blob { |
258 | __u32 blob_id; | 274 | __u32 blob_id; |
259 | __u32 length; | 275 | __u32 length; |
diff --git a/include/drm/drm_pciids.h b/include/drm/drm_pciids.h index 58d0bdab68dd..81368ab6c611 100644 --- a/include/drm/drm_pciids.h +++ b/include/drm/drm_pciids.h | |||
@@ -181,6 +181,7 @@ | |||
181 | {0x1002, 0x6747, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TURKS|RADEON_NEW_MEMMAP}, \ | 181 | {0x1002, 0x6747, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TURKS|RADEON_NEW_MEMMAP}, \ |
182 | {0x1002, 0x6748, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TURKS|RADEON_NEW_MEMMAP}, \ | 182 | {0x1002, 0x6748, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TURKS|RADEON_NEW_MEMMAP}, \ |
183 | {0x1002, 0x6749, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TURKS|RADEON_NEW_MEMMAP}, \ | 183 | {0x1002, 0x6749, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TURKS|RADEON_NEW_MEMMAP}, \ |
184 | {0x1002, 0x674A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TURKS|RADEON_NEW_MEMMAP}, \ | ||
184 | {0x1002, 0x6750, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TURKS|RADEON_NEW_MEMMAP}, \ | 185 | {0x1002, 0x6750, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TURKS|RADEON_NEW_MEMMAP}, \ |
185 | {0x1002, 0x6751, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TURKS|RADEON_NEW_MEMMAP}, \ | 186 | {0x1002, 0x6751, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TURKS|RADEON_NEW_MEMMAP}, \ |
186 | {0x1002, 0x6758, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TURKS|RADEON_NEW_MEMMAP}, \ | 187 | {0x1002, 0x6758, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TURKS|RADEON_NEW_MEMMAP}, \ |
@@ -198,6 +199,7 @@ | |||
198 | {0x1002, 0x6767, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAICOS|RADEON_NEW_MEMMAP}, \ | 199 | {0x1002, 0x6767, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAICOS|RADEON_NEW_MEMMAP}, \ |
199 | {0x1002, 0x6768, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAICOS|RADEON_NEW_MEMMAP}, \ | 200 | {0x1002, 0x6768, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAICOS|RADEON_NEW_MEMMAP}, \ |
200 | {0x1002, 0x6770, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAICOS|RADEON_NEW_MEMMAP}, \ | 201 | {0x1002, 0x6770, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAICOS|RADEON_NEW_MEMMAP}, \ |
202 | {0x1002, 0x6771, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAICOS|RADEON_NEW_MEMMAP}, \ | ||
201 | {0x1002, 0x6772, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAICOS|RADEON_NEW_MEMMAP}, \ | 203 | {0x1002, 0x6772, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAICOS|RADEON_NEW_MEMMAP}, \ |
202 | {0x1002, 0x6778, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAICOS|RADEON_NEW_MEMMAP}, \ | 204 | {0x1002, 0x6778, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAICOS|RADEON_NEW_MEMMAP}, \ |
203 | {0x1002, 0x6779, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAICOS|RADEON_NEW_MEMMAP}, \ | 205 | {0x1002, 0x6779, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAICOS|RADEON_NEW_MEMMAP}, \ |
@@ -229,10 +231,11 @@ | |||
229 | {0x1002, 0x6827, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | 231 | {0x1002, 0x6827, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ |
230 | {0x1002, 0x6828, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_NEW_MEMMAP}, \ | 232 | {0x1002, 0x6828, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_NEW_MEMMAP}, \ |
231 | {0x1002, 0x6829, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_NEW_MEMMAP}, \ | 233 | {0x1002, 0x6829, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_NEW_MEMMAP}, \ |
234 | {0x1002, 0x682B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
232 | {0x1002, 0x682D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | 235 | {0x1002, 0x682D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ |
233 | {0x1002, 0x682F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | 236 | {0x1002, 0x682F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ |
234 | {0x1002, 0x6830, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_NEW_MEMMAP}, \ | 237 | {0x1002, 0x6830, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ |
235 | {0x1002, 0x6831, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_NEW_MEMMAP}, \ | 238 | {0x1002, 0x6831, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ |
236 | {0x1002, 0x6837, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_NEW_MEMMAP}, \ | 239 | {0x1002, 0x6837, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_NEW_MEMMAP}, \ |
237 | {0x1002, 0x6838, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_NEW_MEMMAP}, \ | 240 | {0x1002, 0x6838, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_NEW_MEMMAP}, \ |
238 | {0x1002, 0x6839, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_NEW_MEMMAP}, \ | 241 | {0x1002, 0x6839, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_NEW_MEMMAP}, \ |
@@ -531,6 +534,7 @@ | |||
531 | {0x1002, 0x9645, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_SUMO2|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ | 534 | {0x1002, 0x9645, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_SUMO2|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ |
532 | {0x1002, 0x9647, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_SUMO|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP},\ | 535 | {0x1002, 0x9647, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_SUMO|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP},\ |
533 | {0x1002, 0x9648, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_SUMO|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP},\ | 536 | {0x1002, 0x9648, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_SUMO|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP},\ |
537 | {0x1002, 0x9649, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_SUMO|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP},\ | ||
534 | {0x1002, 0x964a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_SUMO|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ | 538 | {0x1002, 0x964a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_SUMO|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ |
535 | {0x1002, 0x964b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_SUMO|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ | 539 | {0x1002, 0x964b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_SUMO|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ |
536 | {0x1002, 0x964c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_SUMO|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ | 540 | {0x1002, 0x964c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_SUMO|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ |
@@ -550,6 +554,7 @@ | |||
550 | {0x1002, 0x9807, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PALM|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ | 554 | {0x1002, 0x9807, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PALM|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ |
551 | {0x1002, 0x9808, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PALM|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ | 555 | {0x1002, 0x9808, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PALM|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ |
552 | {0x1002, 0x9809, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PALM|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ | 556 | {0x1002, 0x9809, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PALM|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ |
557 | {0x1002, 0x980A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PALM|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ | ||
553 | {0x1002, 0x9900, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ | 558 | {0x1002, 0x9900, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ |
554 | {0x1002, 0x9901, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ | 559 | {0x1002, 0x9901, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ |
555 | {0x1002, 0x9903, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ | 560 | {0x1002, 0x9903, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ |
@@ -561,11 +566,19 @@ | |||
561 | {0x1002, 0x9909, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ | 566 | {0x1002, 0x9909, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ |
562 | {0x1002, 0x990A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ | 567 | {0x1002, 0x990A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ |
563 | {0x1002, 0x990F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ | 568 | {0x1002, 0x990F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ |
569 | {0x1002, 0x9910, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ | ||
570 | {0x1002, 0x9913, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ | ||
571 | {0x1002, 0x9917, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ | ||
572 | {0x1002, 0x9918, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ | ||
573 | {0x1002, 0x9919, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ | ||
564 | {0x1002, 0x9990, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ | 574 | {0x1002, 0x9990, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ |
565 | {0x1002, 0x9991, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ | 575 | {0x1002, 0x9991, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ |
566 | {0x1002, 0x9992, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ | 576 | {0x1002, 0x9992, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ |
567 | {0x1002, 0x9993, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ | 577 | {0x1002, 0x9993, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ |
568 | {0x1002, 0x9994, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ | 578 | {0x1002, 0x9994, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ |
579 | {0x1002, 0x99A0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ | ||
580 | {0x1002, 0x99A2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ | ||
581 | {0x1002, 0x99A4, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ | ||
569 | {0, 0, 0} | 582 | {0, 0, 0} |
570 | 583 | ||
571 | #define r128_PCI_IDS \ | 584 | #define r128_PCI_IDS \ |
diff --git a/include/drm/exynos_drm.h b/include/drm/exynos_drm.h index e478de4e5d56..68733587e700 100644 --- a/include/drm/exynos_drm.h +++ b/include/drm/exynos_drm.h | |||
@@ -29,6 +29,8 @@ | |||
29 | #ifndef _EXYNOS_DRM_H_ | 29 | #ifndef _EXYNOS_DRM_H_ |
30 | #define _EXYNOS_DRM_H_ | 30 | #define _EXYNOS_DRM_H_ |
31 | 31 | ||
32 | #include "drm.h" | ||
33 | |||
32 | /** | 34 | /** |
33 | * User-desired buffer creation information structure. | 35 | * User-desired buffer creation information structure. |
34 | * | 36 | * |
@@ -62,6 +64,7 @@ struct drm_exynos_gem_map_off { | |||
62 | * A structure for mapping buffer. | 64 | * A structure for mapping buffer. |
63 | * | 65 | * |
64 | * @handle: a handle to gem object created. | 66 | * @handle: a handle to gem object created. |
67 | * @pad: just padding to be 64-bit aligned. | ||
65 | * @size: memory size to be mapped. | 68 | * @size: memory size to be mapped. |
66 | * @mapped: having user virtual address mmaped. | 69 | * @mapped: having user virtual address mmaped. |
67 | * - this variable would be filled by exynos gem module | 70 | * - this variable would be filled by exynos gem module |
@@ -70,11 +73,27 @@ struct drm_exynos_gem_map_off { | |||
70 | */ | 73 | */ |
71 | struct drm_exynos_gem_mmap { | 74 | struct drm_exynos_gem_mmap { |
72 | unsigned int handle; | 75 | unsigned int handle; |
73 | unsigned int size; | 76 | unsigned int pad; |
77 | uint64_t size; | ||
74 | uint64_t mapped; | 78 | uint64_t mapped; |
75 | }; | 79 | }; |
76 | 80 | ||
77 | /** | 81 | /** |
82 | * A structure to gem information. | ||
83 | * | ||
84 | * @handle: a handle to gem object created. | ||
85 | * @flags: flag value including memory type and cache attribute and | ||
86 | * this value would be set by driver. | ||
87 | * @size: size to memory region allocated by gem and this size would | ||
88 | * be set by driver. | ||
89 | */ | ||
90 | struct drm_exynos_gem_info { | ||
91 | unsigned int handle; | ||
92 | unsigned int flags; | ||
93 | uint64_t size; | ||
94 | }; | ||
95 | |||
96 | /** | ||
78 | * A structure for user connection request of virtual display. | 97 | * A structure for user connection request of virtual display. |
79 | * | 98 | * |
80 | * @connection: indicate whether doing connetion or not by user. | 99 | * @connection: indicate whether doing connetion or not by user. |
@@ -95,18 +114,64 @@ struct drm_exynos_plane_set_zpos { | |||
95 | 114 | ||
96 | /* memory type definitions. */ | 115 | /* memory type definitions. */ |
97 | enum e_drm_exynos_gem_mem_type { | 116 | enum e_drm_exynos_gem_mem_type { |
117 | /* Physically Continuous memory and used as default. */ | ||
118 | EXYNOS_BO_CONTIG = 0 << 0, | ||
98 | /* Physically Non-Continuous memory. */ | 119 | /* Physically Non-Continuous memory. */ |
99 | EXYNOS_BO_NONCONTIG = 1 << 0, | 120 | EXYNOS_BO_NONCONTIG = 1 << 0, |
100 | EXYNOS_BO_MASK = EXYNOS_BO_NONCONTIG | 121 | /* non-cachable mapping and used as default. */ |
122 | EXYNOS_BO_NONCACHABLE = 0 << 1, | ||
123 | /* cachable mapping. */ | ||
124 | EXYNOS_BO_CACHABLE = 1 << 1, | ||
125 | /* write-combine mapping. */ | ||
126 | EXYNOS_BO_WC = 1 << 2, | ||
127 | EXYNOS_BO_MASK = EXYNOS_BO_NONCONTIG | EXYNOS_BO_CACHABLE | | ||
128 | EXYNOS_BO_WC | ||
129 | }; | ||
130 | |||
131 | struct drm_exynos_g2d_get_ver { | ||
132 | __u32 major; | ||
133 | __u32 minor; | ||
134 | }; | ||
135 | |||
136 | struct drm_exynos_g2d_cmd { | ||
137 | __u32 offset; | ||
138 | __u32 data; | ||
139 | }; | ||
140 | |||
141 | enum drm_exynos_g2d_event_type { | ||
142 | G2D_EVENT_NOT, | ||
143 | G2D_EVENT_NONSTOP, | ||
144 | G2D_EVENT_STOP, /* not yet */ | ||
145 | }; | ||
146 | |||
147 | struct drm_exynos_g2d_set_cmdlist { | ||
148 | __u64 cmd; | ||
149 | __u64 cmd_gem; | ||
150 | __u32 cmd_nr; | ||
151 | __u32 cmd_gem_nr; | ||
152 | |||
153 | /* for g2d event */ | ||
154 | __u64 event_type; | ||
155 | __u64 user_data; | ||
156 | }; | ||
157 | |||
158 | struct drm_exynos_g2d_exec { | ||
159 | __u64 async; | ||
101 | }; | 160 | }; |
102 | 161 | ||
103 | #define DRM_EXYNOS_GEM_CREATE 0x00 | 162 | #define DRM_EXYNOS_GEM_CREATE 0x00 |
104 | #define DRM_EXYNOS_GEM_MAP_OFFSET 0x01 | 163 | #define DRM_EXYNOS_GEM_MAP_OFFSET 0x01 |
105 | #define DRM_EXYNOS_GEM_MMAP 0x02 | 164 | #define DRM_EXYNOS_GEM_MMAP 0x02 |
106 | /* Reserved 0x03 ~ 0x05 for exynos specific gem ioctl */ | 165 | /* Reserved 0x03 ~ 0x05 for exynos specific gem ioctl */ |
166 | #define DRM_EXYNOS_GEM_GET 0x04 | ||
107 | #define DRM_EXYNOS_PLANE_SET_ZPOS 0x06 | 167 | #define DRM_EXYNOS_PLANE_SET_ZPOS 0x06 |
108 | #define DRM_EXYNOS_VIDI_CONNECTION 0x07 | 168 | #define DRM_EXYNOS_VIDI_CONNECTION 0x07 |
109 | 169 | ||
170 | /* G2D */ | ||
171 | #define DRM_EXYNOS_G2D_GET_VER 0x20 | ||
172 | #define DRM_EXYNOS_G2D_SET_CMDLIST 0x21 | ||
173 | #define DRM_EXYNOS_G2D_EXEC 0x22 | ||
174 | |||
110 | #define DRM_IOCTL_EXYNOS_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + \ | 175 | #define DRM_IOCTL_EXYNOS_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + \ |
111 | DRM_EXYNOS_GEM_CREATE, struct drm_exynos_gem_create) | 176 | DRM_EXYNOS_GEM_CREATE, struct drm_exynos_gem_create) |
112 | 177 | ||
@@ -116,12 +181,34 @@ enum e_drm_exynos_gem_mem_type { | |||
116 | #define DRM_IOCTL_EXYNOS_GEM_MMAP DRM_IOWR(DRM_COMMAND_BASE + \ | 181 | #define DRM_IOCTL_EXYNOS_GEM_MMAP DRM_IOWR(DRM_COMMAND_BASE + \ |
117 | DRM_EXYNOS_GEM_MMAP, struct drm_exynos_gem_mmap) | 182 | DRM_EXYNOS_GEM_MMAP, struct drm_exynos_gem_mmap) |
118 | 183 | ||
184 | #define DRM_IOCTL_EXYNOS_GEM_GET DRM_IOWR(DRM_COMMAND_BASE + \ | ||
185 | DRM_EXYNOS_GEM_GET, struct drm_exynos_gem_info) | ||
186 | |||
119 | #define DRM_IOCTL_EXYNOS_PLANE_SET_ZPOS DRM_IOWR(DRM_COMMAND_BASE + \ | 187 | #define DRM_IOCTL_EXYNOS_PLANE_SET_ZPOS DRM_IOWR(DRM_COMMAND_BASE + \ |
120 | DRM_EXYNOS_PLANE_SET_ZPOS, struct drm_exynos_plane_set_zpos) | 188 | DRM_EXYNOS_PLANE_SET_ZPOS, struct drm_exynos_plane_set_zpos) |
121 | 189 | ||
122 | #define DRM_IOCTL_EXYNOS_VIDI_CONNECTION DRM_IOWR(DRM_COMMAND_BASE + \ | 190 | #define DRM_IOCTL_EXYNOS_VIDI_CONNECTION DRM_IOWR(DRM_COMMAND_BASE + \ |
123 | DRM_EXYNOS_VIDI_CONNECTION, struct drm_exynos_vidi_connection) | 191 | DRM_EXYNOS_VIDI_CONNECTION, struct drm_exynos_vidi_connection) |
124 | 192 | ||
193 | #define DRM_IOCTL_EXYNOS_G2D_GET_VER DRM_IOWR(DRM_COMMAND_BASE + \ | ||
194 | DRM_EXYNOS_G2D_GET_VER, struct drm_exynos_g2d_get_ver) | ||
195 | #define DRM_IOCTL_EXYNOS_G2D_SET_CMDLIST DRM_IOWR(DRM_COMMAND_BASE + \ | ||
196 | DRM_EXYNOS_G2D_SET_CMDLIST, struct drm_exynos_g2d_set_cmdlist) | ||
197 | #define DRM_IOCTL_EXYNOS_G2D_EXEC DRM_IOWR(DRM_COMMAND_BASE + \ | ||
198 | DRM_EXYNOS_G2D_EXEC, struct drm_exynos_g2d_exec) | ||
199 | |||
200 | /* EXYNOS specific events */ | ||
201 | #define DRM_EXYNOS_G2D_EVENT 0x80000000 | ||
202 | |||
203 | struct drm_exynos_g2d_event { | ||
204 | struct drm_event base; | ||
205 | __u64 user_data; | ||
206 | __u32 tv_sec; | ||
207 | __u32 tv_usec; | ||
208 | __u32 cmdlist_no; | ||
209 | __u32 reserved; | ||
210 | }; | ||
211 | |||
125 | #ifdef __KERNEL__ | 212 | #ifdef __KERNEL__ |
126 | 213 | ||
127 | /** | 214 | /** |
@@ -169,16 +256,14 @@ struct exynos_drm_common_hdmi_pd { | |||
169 | /** | 256 | /** |
170 | * Platform Specific Structure for DRM based HDMI core. | 257 | * Platform Specific Structure for DRM based HDMI core. |
171 | * | 258 | * |
172 | * @timing: default video mode for initializing | ||
173 | * @default_win: default window layer number to be used for UI. | ||
174 | * @bpp: default bit per pixel. | ||
175 | * @is_v13: set if hdmi version 13 is. | 259 | * @is_v13: set if hdmi version 13 is. |
260 | * @cfg_hpd: function pointer to configure hdmi hotplug detection pin | ||
261 | * @get_hpd: function pointer to get value of hdmi hotplug detection pin | ||
176 | */ | 262 | */ |
177 | struct exynos_drm_hdmi_pdata { | 263 | struct exynos_drm_hdmi_pdata { |
178 | struct fb_videomode timing; | 264 | bool is_v13; |
179 | unsigned int default_win; | 265 | void (*cfg_hpd)(bool external); |
180 | unsigned int bpp; | 266 | int (*get_hpd)(void); |
181 | unsigned int is_v13:1; | ||
182 | }; | 267 | }; |
183 | 268 | ||
184 | #endif /* __KERNEL__ */ | 269 | #endif /* __KERNEL__ */ |
diff --git a/include/drm/i915_drm.h b/include/drm/i915_drm.h index da929bb5b788..f3f82242bf1d 100644 --- a/include/drm/i915_drm.h +++ b/include/drm/i915_drm.h | |||
@@ -296,7 +296,8 @@ typedef struct drm_i915_irq_wait { | |||
296 | #define I915_PARAM_HAS_EXEC_CONSTANTS 14 | 296 | #define I915_PARAM_HAS_EXEC_CONSTANTS 14 |
297 | #define I915_PARAM_HAS_RELAXED_DELTA 15 | 297 | #define I915_PARAM_HAS_RELAXED_DELTA 15 |
298 | #define I915_PARAM_HAS_GEN7_SOL_RESET 16 | 298 | #define I915_PARAM_HAS_GEN7_SOL_RESET 16 |
299 | #define I915_PARAM_HAS_LLC 17 | 299 | #define I915_PARAM_HAS_LLC 17 |
300 | #define I915_PARAM_HAS_ALIASING_PPGTT 18 | ||
300 | 301 | ||
301 | typedef struct drm_i915_getparam { | 302 | typedef struct drm_i915_getparam { |
302 | int param; | 303 | int param; |
diff --git a/include/drm/radeon_drm.h b/include/drm/radeon_drm.h index 7c491b4bcf65..58056865b8e9 100644 --- a/include/drm/radeon_drm.h +++ b/include/drm/radeon_drm.h | |||
@@ -926,7 +926,6 @@ struct drm_radeon_cs_chunk { | |||
926 | }; | 926 | }; |
927 | 927 | ||
928 | /* drm_radeon_cs_reloc.flags */ | 928 | /* drm_radeon_cs_reloc.flags */ |
929 | #define RADEON_RELOC_DONT_SYNC 0x01 | ||
930 | 929 | ||
931 | struct drm_radeon_cs_reloc { | 930 | struct drm_radeon_cs_reloc { |
932 | uint32_t handle; | 931 | uint32_t handle; |
diff --git a/include/drm/ttm/ttm_bo_api.h b/include/drm/ttm/ttm_bo_api.h index 974c8f801c39..e15f2a89a270 100644 --- a/include/drm/ttm/ttm_bo_api.h +++ b/include/drm/ttm/ttm_bo_api.h | |||
@@ -124,11 +124,15 @@ struct ttm_mem_reg { | |||
124 | * | 124 | * |
125 | * @ttm_bo_type_kernel: These buffers are like ttm_bo_type_device buffers, | 125 | * @ttm_bo_type_kernel: These buffers are like ttm_bo_type_device buffers, |
126 | * but they cannot be accessed from user-space. For kernel-only use. | 126 | * but they cannot be accessed from user-space. For kernel-only use. |
127 | * | ||
128 | * @ttm_bo_type_sg: Buffer made from dmabuf sg table shared with another | ||
129 | * driver. | ||
127 | */ | 130 | */ |
128 | 131 | ||
129 | enum ttm_bo_type { | 132 | enum ttm_bo_type { |
130 | ttm_bo_type_device, | 133 | ttm_bo_type_device, |
131 | ttm_bo_type_kernel | 134 | ttm_bo_type_kernel, |
135 | ttm_bo_type_sg | ||
132 | }; | 136 | }; |
133 | 137 | ||
134 | struct ttm_tt; | 138 | struct ttm_tt; |
@@ -271,6 +275,8 @@ struct ttm_buffer_object { | |||
271 | 275 | ||
272 | unsigned long offset; | 276 | unsigned long offset; |
273 | uint32_t cur_placement; | 277 | uint32_t cur_placement; |
278 | |||
279 | struct sg_table *sg; | ||
274 | }; | 280 | }; |
275 | 281 | ||
276 | /** | 282 | /** |
@@ -503,6 +509,7 @@ extern int ttm_bo_init(struct ttm_bo_device *bdev, | |||
503 | bool interrubtible, | 509 | bool interrubtible, |
504 | struct file *persistent_swap_storage, | 510 | struct file *persistent_swap_storage, |
505 | size_t acc_size, | 511 | size_t acc_size, |
512 | struct sg_table *sg, | ||
506 | void (*destroy) (struct ttm_buffer_object *)); | 513 | void (*destroy) (struct ttm_buffer_object *)); |
507 | 514 | ||
508 | /** | 515 | /** |
diff --git a/include/drm/ttm/ttm_bo_driver.h b/include/drm/ttm/ttm_bo_driver.h index d43e892307ff..a05f1b55714d 100644 --- a/include/drm/ttm/ttm_bo_driver.h +++ b/include/drm/ttm/ttm_bo_driver.h | |||
@@ -81,6 +81,7 @@ struct ttm_backend_func { | |||
81 | #define TTM_PAGE_FLAG_PERSISTENT_SWAP (1 << 5) | 81 | #define TTM_PAGE_FLAG_PERSISTENT_SWAP (1 << 5) |
82 | #define TTM_PAGE_FLAG_ZERO_ALLOC (1 << 6) | 82 | #define TTM_PAGE_FLAG_ZERO_ALLOC (1 << 6) |
83 | #define TTM_PAGE_FLAG_DMA32 (1 << 7) | 83 | #define TTM_PAGE_FLAG_DMA32 (1 << 7) |
84 | #define TTM_PAGE_FLAG_SG (1 << 8) | ||
84 | 85 | ||
85 | enum ttm_caching_state { | 86 | enum ttm_caching_state { |
86 | tt_uncached, | 87 | tt_uncached, |
@@ -116,6 +117,7 @@ struct ttm_tt { | |||
116 | struct page **pages; | 117 | struct page **pages; |
117 | uint32_t page_flags; | 118 | uint32_t page_flags; |
118 | unsigned long num_pages; | 119 | unsigned long num_pages; |
120 | struct sg_table *sg; /* for SG objects via dma-buf */ | ||
119 | struct ttm_bo_global *glob; | 121 | struct ttm_bo_global *glob; |
120 | struct ttm_backend *be; | 122 | struct ttm_backend *be; |
121 | struct file *swap_storage; | 123 | struct file *swap_storage; |
diff --git a/include/linux/Kbuild b/include/linux/Kbuild index 39737839ce29..8760be30b375 100644 --- a/include/linux/Kbuild +++ b/include/linux/Kbuild | |||
@@ -225,6 +225,8 @@ header-y += kd.h | |||
225 | header-y += kdev_t.h | 225 | header-y += kdev_t.h |
226 | header-y += kernel.h | 226 | header-y += kernel.h |
227 | header-y += kernelcapi.h | 227 | header-y += kernelcapi.h |
228 | header-y += kernel-page-flags.h | ||
229 | header-y += kexec.h | ||
228 | header-y += keyboard.h | 230 | header-y += keyboard.h |
229 | header-y += keyctl.h | 231 | header-y += keyctl.h |
230 | header-y += l2tp.h | 232 | header-y += l2tp.h |
@@ -270,6 +272,7 @@ header-y += netfilter_ipv4.h | |||
270 | header-y += netfilter_ipv6.h | 272 | header-y += netfilter_ipv6.h |
271 | header-y += netlink.h | 273 | header-y += netlink.h |
272 | header-y += netrom.h | 274 | header-y += netrom.h |
275 | header-y += nfc.h | ||
273 | header-y += nfs.h | 276 | header-y += nfs.h |
274 | header-y += nfs2.h | 277 | header-y += nfs2.h |
275 | header-y += nfs3.h | 278 | header-y += nfs3.h |
@@ -383,6 +386,7 @@ header-y += utime.h | |||
383 | header-y += utsname.h | 386 | header-y += utsname.h |
384 | header-y += uuid.h | 387 | header-y += uuid.h |
385 | header-y += uvcvideo.h | 388 | header-y += uvcvideo.h |
389 | header-y += v4l2-dv-timings.h | ||
386 | header-y += v4l2-mediabus.h | 390 | header-y += v4l2-mediabus.h |
387 | header-y += v4l2-subdev.h | 391 | header-y += v4l2-subdev.h |
388 | header-y += veth.h | 392 | header-y += veth.h |
diff --git a/include/linux/amba/pl08x.h b/include/linux/amba/pl08x.h index e64ce2cfee99..02549017212a 100644 --- a/include/linux/amba/pl08x.h +++ b/include/linux/amba/pl08x.h | |||
@@ -92,6 +92,8 @@ struct pl08x_bus_data { | |||
92 | * right now | 92 | * right now |
93 | * @serving: the virtual channel currently being served by this physical | 93 | * @serving: the virtual channel currently being served by this physical |
94 | * channel | 94 | * channel |
95 | * @locked: channel unavailable for the system, e.g. dedicated to secure | ||
96 | * world | ||
95 | */ | 97 | */ |
96 | struct pl08x_phy_chan { | 98 | struct pl08x_phy_chan { |
97 | unsigned int id; | 99 | unsigned int id; |
@@ -99,6 +101,7 @@ struct pl08x_phy_chan { | |||
99 | spinlock_t lock; | 101 | spinlock_t lock; |
100 | int signal; | 102 | int signal; |
101 | struct pl08x_dma_chan *serving; | 103 | struct pl08x_dma_chan *serving; |
104 | bool locked; | ||
102 | }; | 105 | }; |
103 | 106 | ||
104 | /** | 107 | /** |
diff --git a/include/linux/apple_bl.h b/include/linux/apple_bl.h index 47bedc0eee69..0a95e730fcea 100644 --- a/include/linux/apple_bl.h +++ b/include/linux/apple_bl.h | |||
@@ -5,7 +5,7 @@ | |||
5 | #ifndef _LINUX_APPLE_BL_H | 5 | #ifndef _LINUX_APPLE_BL_H |
6 | #define _LINUX_APPLE_BL_H | 6 | #define _LINUX_APPLE_BL_H |
7 | 7 | ||
8 | #ifdef CONFIG_BACKLIGHT_APPLE | 8 | #if defined(CONFIG_BACKLIGHT_APPLE) || defined(CONFIG_BACKLIGHT_APPLE_MODULE) |
9 | 9 | ||
10 | extern int apple_bl_register(void); | 10 | extern int apple_bl_register(void); |
11 | extern void apple_bl_unregister(void); | 11 | extern void apple_bl_unregister(void); |
diff --git a/include/linux/basic_mmio_gpio.h b/include/linux/basic_mmio_gpio.h index feb912196745..1c504ca5bdb3 100644 --- a/include/linux/basic_mmio_gpio.h +++ b/include/linux/basic_mmio_gpio.h | |||
@@ -67,6 +67,10 @@ int bgpio_remove(struct bgpio_chip *bgc); | |||
67 | int bgpio_init(struct bgpio_chip *bgc, struct device *dev, | 67 | int bgpio_init(struct bgpio_chip *bgc, struct device *dev, |
68 | unsigned long sz, void __iomem *dat, void __iomem *set, | 68 | unsigned long sz, void __iomem *dat, void __iomem *set, |
69 | void __iomem *clr, void __iomem *dirout, void __iomem *dirin, | 69 | void __iomem *clr, void __iomem *dirout, void __iomem *dirin, |
70 | bool big_endian); | 70 | unsigned long flags); |
71 | |||
72 | #define BGPIOF_BIG_ENDIAN BIT(0) | ||
73 | #define BGPIOF_UNREADABLE_REG_SET BIT(1) /* reg_set is unreadable */ | ||
74 | #define BGPIOF_UNREADABLE_REG_DIR BIT(2) /* reg_dir is unreadable */ | ||
71 | 75 | ||
72 | #endif /* __BASIC_MMIO_GPIO_H */ | 76 | #endif /* __BASIC_MMIO_GPIO_H */ |
diff --git a/include/linux/bcma/bcma.h b/include/linux/bcma/bcma.h index 98bb2901d7b7..8deaf6d050c3 100644 --- a/include/linux/bcma/bcma.h +++ b/include/linux/bcma/bcma.h | |||
@@ -26,6 +26,11 @@ struct bcma_chipinfo { | |||
26 | u8 pkg; | 26 | u8 pkg; |
27 | }; | 27 | }; |
28 | 28 | ||
29 | struct bcma_boardinfo { | ||
30 | u16 vendor; | ||
31 | u16 type; | ||
32 | }; | ||
33 | |||
29 | enum bcma_clkmode { | 34 | enum bcma_clkmode { |
30 | BCMA_CLKMODE_FAST, | 35 | BCMA_CLKMODE_FAST, |
31 | BCMA_CLKMODE_DYNAMIC, | 36 | BCMA_CLKMODE_DYNAMIC, |
@@ -199,6 +204,8 @@ struct bcma_bus { | |||
199 | 204 | ||
200 | struct bcma_chipinfo chipinfo; | 205 | struct bcma_chipinfo chipinfo; |
201 | 206 | ||
207 | struct bcma_boardinfo boardinfo; | ||
208 | |||
202 | struct bcma_device *mapped_core; | 209 | struct bcma_device *mapped_core; |
203 | struct list_head cores; | 210 | struct list_head cores; |
204 | u8 nr_cores; | 211 | u8 nr_cores; |
diff --git a/include/linux/bcma/bcma_driver_pci.h b/include/linux/bcma/bcma_driver_pci.h index 46c71e27d31f..41da581e1612 100644 --- a/include/linux/bcma/bcma_driver_pci.h +++ b/include/linux/bcma/bcma_driver_pci.h | |||
@@ -87,6 +87,13 @@ struct pci_dev; | |||
87 | #define BCMA_CORE_PCI_PCICFG2 0x0600 /* PCI config space 2 (rev >= 8) */ | 87 | #define BCMA_CORE_PCI_PCICFG2 0x0600 /* PCI config space 2 (rev >= 8) */ |
88 | #define BCMA_CORE_PCI_PCICFG3 0x0700 /* PCI config space 3 (rev >= 8) */ | 88 | #define BCMA_CORE_PCI_PCICFG3 0x0700 /* PCI config space 3 (rev >= 8) */ |
89 | #define BCMA_CORE_PCI_SPROM(wordoffset) (0x0800 + ((wordoffset) * 2)) /* SPROM shadow area (72 bytes) */ | 89 | #define BCMA_CORE_PCI_SPROM(wordoffset) (0x0800 + ((wordoffset) * 2)) /* SPROM shadow area (72 bytes) */ |
90 | #define BCMA_CORE_PCI_SPROM_PI_OFFSET 0 /* first word */ | ||
91 | #define BCMA_CORE_PCI_SPROM_PI_MASK 0xf000 /* bit 15:12 */ | ||
92 | #define BCMA_CORE_PCI_SPROM_PI_SHIFT 12 /* bit 15:12 */ | ||
93 | #define BCMA_CORE_PCI_SPROM_MISC_CONFIG 5 /* word 5 */ | ||
94 | #define BCMA_CORE_PCI_SPROM_L23READY_EXIT_NOPERST 0x8000 /* bit 15 */ | ||
95 | #define BCMA_CORE_PCI_SPROM_CLKREQ_OFFSET_REV5 20 /* word 20 for srom rev <= 5 */ | ||
96 | #define BCMA_CORE_PCI_SPROM_CLKREQ_ENB 0x0800 /* bit 11 */ | ||
90 | 97 | ||
91 | /* SBtoPCIx */ | 98 | /* SBtoPCIx */ |
92 | #define BCMA_CORE_PCI_SBTOPCI_MEM 0x00000000 | 99 | #define BCMA_CORE_PCI_SBTOPCI_MEM 0x00000000 |
@@ -133,6 +140,7 @@ struct pci_dev; | |||
133 | #define BCMA_CORE_PCI_DLLP_LRREG 0x120 /* Link Replay */ | 140 | #define BCMA_CORE_PCI_DLLP_LRREG 0x120 /* Link Replay */ |
134 | #define BCMA_CORE_PCI_DLLP_LACKTOREG 0x124 /* Link Ack Timeout */ | 141 | #define BCMA_CORE_PCI_DLLP_LACKTOREG 0x124 /* Link Ack Timeout */ |
135 | #define BCMA_CORE_PCI_DLLP_PMTHRESHREG 0x128 /* Power Management Threshold */ | 142 | #define BCMA_CORE_PCI_DLLP_PMTHRESHREG 0x128 /* Power Management Threshold */ |
143 | #define BCMA_CORE_PCI_ASPMTIMER_EXTEND 0x01000000 /* > rev7: enable extend ASPM timer */ | ||
136 | #define BCMA_CORE_PCI_DLLP_RTRYWPREG 0x12C /* Retry buffer write ptr */ | 144 | #define BCMA_CORE_PCI_DLLP_RTRYWPREG 0x12C /* Retry buffer write ptr */ |
137 | #define BCMA_CORE_PCI_DLLP_RTRYRPREG 0x130 /* Retry buffer Read ptr */ | 145 | #define BCMA_CORE_PCI_DLLP_RTRYRPREG 0x130 /* Retry buffer Read ptr */ |
138 | #define BCMA_CORE_PCI_DLLP_RTRYPPREG 0x134 /* Retry buffer Purged ptr */ | 146 | #define BCMA_CORE_PCI_DLLP_RTRYPPREG 0x134 /* Retry buffer Purged ptr */ |
@@ -201,12 +209,15 @@ struct bcma_drv_pci { | |||
201 | }; | 209 | }; |
202 | 210 | ||
203 | /* Register access */ | 211 | /* Register access */ |
212 | #define pcicore_read16(pc, offset) bcma_read16((pc)->core, offset) | ||
204 | #define pcicore_read32(pc, offset) bcma_read32((pc)->core, offset) | 213 | #define pcicore_read32(pc, offset) bcma_read32((pc)->core, offset) |
214 | #define pcicore_write16(pc, offset, val) bcma_write16((pc)->core, offset, val) | ||
205 | #define pcicore_write32(pc, offset, val) bcma_write32((pc)->core, offset, val) | 215 | #define pcicore_write32(pc, offset, val) bcma_write32((pc)->core, offset, val) |
206 | 216 | ||
207 | extern void __devinit bcma_core_pci_init(struct bcma_drv_pci *pc); | 217 | extern void __devinit bcma_core_pci_init(struct bcma_drv_pci *pc); |
208 | extern int bcma_core_pci_irq_ctl(struct bcma_drv_pci *pc, | 218 | extern int bcma_core_pci_irq_ctl(struct bcma_drv_pci *pc, |
209 | struct bcma_device *core, bool enable); | 219 | struct bcma_device *core, bool enable); |
220 | extern void bcma_core_pci_extend_L1timer(struct bcma_drv_pci *pc, bool extend); | ||
210 | 221 | ||
211 | extern int bcma_core_pci_pcibios_map_irq(const struct pci_dev *dev); | 222 | extern int bcma_core_pci_pcibios_map_irq(const struct pci_dev *dev); |
212 | extern int bcma_core_pci_plat_dev_init(struct pci_dev *dev); | 223 | extern int bcma_core_pci_plat_dev_init(struct pci_dev *dev); |
diff --git a/include/linux/bio.h b/include/linux/bio.h index 4d94eb8bcbcc..26435890dc87 100644 --- a/include/linux/bio.h +++ b/include/linux/bio.h | |||
@@ -269,6 +269,14 @@ extern struct bio_vec *bvec_alloc_bs(gfp_t, int, unsigned long *, struct bio_set | |||
269 | extern void bvec_free_bs(struct bio_set *, struct bio_vec *, unsigned int); | 269 | extern void bvec_free_bs(struct bio_set *, struct bio_vec *, unsigned int); |
270 | extern unsigned int bvec_nr_vecs(unsigned short idx); | 270 | extern unsigned int bvec_nr_vecs(unsigned short idx); |
271 | 271 | ||
272 | #ifdef CONFIG_BLK_CGROUP | ||
273 | int bio_associate_current(struct bio *bio); | ||
274 | void bio_disassociate_task(struct bio *bio); | ||
275 | #else /* CONFIG_BLK_CGROUP */ | ||
276 | static inline int bio_associate_current(struct bio *bio) { return -ENOENT; } | ||
277 | static inline void bio_disassociate_task(struct bio *bio) { } | ||
278 | #endif /* CONFIG_BLK_CGROUP */ | ||
279 | |||
272 | /* | 280 | /* |
273 | * bio_set is used to allow other portions of the IO system to | 281 | * bio_set is used to allow other portions of the IO system to |
274 | * allocate their own private memory pools for bio and iovec structures. | 282 | * allocate their own private memory pools for bio and iovec structures. |
diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h index 4053cbd4490e..0edb65dd8edd 100644 --- a/include/linux/blk_types.h +++ b/include/linux/blk_types.h | |||
@@ -14,6 +14,8 @@ struct bio; | |||
14 | struct bio_integrity_payload; | 14 | struct bio_integrity_payload; |
15 | struct page; | 15 | struct page; |
16 | struct block_device; | 16 | struct block_device; |
17 | struct io_context; | ||
18 | struct cgroup_subsys_state; | ||
17 | typedef void (bio_end_io_t) (struct bio *, int); | 19 | typedef void (bio_end_io_t) (struct bio *, int); |
18 | typedef void (bio_destructor_t) (struct bio *); | 20 | typedef void (bio_destructor_t) (struct bio *); |
19 | 21 | ||
@@ -66,6 +68,14 @@ struct bio { | |||
66 | bio_end_io_t *bi_end_io; | 68 | bio_end_io_t *bi_end_io; |
67 | 69 | ||
68 | void *bi_private; | 70 | void *bi_private; |
71 | #ifdef CONFIG_BLK_CGROUP | ||
72 | /* | ||
73 | * Optional ioc and css associated with this bio. Put on bio | ||
74 | * release. Read comment on top of bio_associate_current(). | ||
75 | */ | ||
76 | struct io_context *bi_ioc; | ||
77 | struct cgroup_subsys_state *bi_css; | ||
78 | #endif | ||
69 | #if defined(CONFIG_BLK_DEV_INTEGRITY) | 79 | #if defined(CONFIG_BLK_DEV_INTEGRITY) |
70 | struct bio_integrity_payload *bi_integrity; /* data integrity */ | 80 | struct bio_integrity_payload *bi_integrity; /* data integrity */ |
71 | #endif | 81 | #endif |
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 4d4ac24a263e..ba43f408baa3 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
@@ -32,10 +32,17 @@ struct blk_trace; | |||
32 | struct request; | 32 | struct request; |
33 | struct sg_io_hdr; | 33 | struct sg_io_hdr; |
34 | struct bsg_job; | 34 | struct bsg_job; |
35 | struct blkcg_gq; | ||
35 | 36 | ||
36 | #define BLKDEV_MIN_RQ 4 | 37 | #define BLKDEV_MIN_RQ 4 |
37 | #define BLKDEV_MAX_RQ 128 /* Default maximum */ | 38 | #define BLKDEV_MAX_RQ 128 /* Default maximum */ |
38 | 39 | ||
40 | /* | ||
41 | * Maximum number of blkcg policies allowed to be registered concurrently. | ||
42 | * Defined here to simplify include dependency. | ||
43 | */ | ||
44 | #define BLKCG_MAX_POLS 2 | ||
45 | |||
39 | struct request; | 46 | struct request; |
40 | typedef void (rq_end_io_fn)(struct request *, int); | 47 | typedef void (rq_end_io_fn)(struct request *, int); |
41 | 48 | ||
@@ -363,6 +370,11 @@ struct request_queue { | |||
363 | struct list_head timeout_list; | 370 | struct list_head timeout_list; |
364 | 371 | ||
365 | struct list_head icq_list; | 372 | struct list_head icq_list; |
373 | #ifdef CONFIG_BLK_CGROUP | ||
374 | DECLARE_BITMAP (blkcg_pols, BLKCG_MAX_POLS); | ||
375 | struct blkcg_gq *root_blkg; | ||
376 | struct list_head blkg_list; | ||
377 | #endif | ||
366 | 378 | ||
367 | struct queue_limits limits; | 379 | struct queue_limits limits; |
368 | 380 | ||
@@ -390,12 +402,17 @@ struct request_queue { | |||
390 | 402 | ||
391 | struct mutex sysfs_lock; | 403 | struct mutex sysfs_lock; |
392 | 404 | ||
405 | int bypass_depth; | ||
406 | |||
393 | #if defined(CONFIG_BLK_DEV_BSG) | 407 | #if defined(CONFIG_BLK_DEV_BSG) |
394 | bsg_job_fn *bsg_job_fn; | 408 | bsg_job_fn *bsg_job_fn; |
395 | int bsg_job_size; | 409 | int bsg_job_size; |
396 | struct bsg_class_device bsg_dev; | 410 | struct bsg_class_device bsg_dev; |
397 | #endif | 411 | #endif |
398 | 412 | ||
413 | #ifdef CONFIG_BLK_CGROUP | ||
414 | struct list_head all_q_node; | ||
415 | #endif | ||
399 | #ifdef CONFIG_BLK_DEV_THROTTLING | 416 | #ifdef CONFIG_BLK_DEV_THROTTLING |
400 | /* Throttle data */ | 417 | /* Throttle data */ |
401 | struct throtl_data *td; | 418 | struct throtl_data *td; |
@@ -407,7 +424,7 @@ struct request_queue { | |||
407 | #define QUEUE_FLAG_SYNCFULL 3 /* read queue has been filled */ | 424 | #define QUEUE_FLAG_SYNCFULL 3 /* read queue has been filled */ |
408 | #define QUEUE_FLAG_ASYNCFULL 4 /* write queue has been filled */ | 425 | #define QUEUE_FLAG_ASYNCFULL 4 /* write queue has been filled */ |
409 | #define QUEUE_FLAG_DEAD 5 /* queue being torn down */ | 426 | #define QUEUE_FLAG_DEAD 5 /* queue being torn down */ |
410 | #define QUEUE_FLAG_ELVSWITCH 6 /* don't use elevator, just do FIFO */ | 427 | #define QUEUE_FLAG_BYPASS 6 /* act as dumb FIFO queue */ |
411 | #define QUEUE_FLAG_BIDI 7 /* queue supports bidi requests */ | 428 | #define QUEUE_FLAG_BIDI 7 /* queue supports bidi requests */ |
412 | #define QUEUE_FLAG_NOMERGES 8 /* disable merge attempts */ | 429 | #define QUEUE_FLAG_NOMERGES 8 /* disable merge attempts */ |
413 | #define QUEUE_FLAG_SAME_COMP 9 /* complete on same CPU-group */ | 430 | #define QUEUE_FLAG_SAME_COMP 9 /* complete on same CPU-group */ |
@@ -491,6 +508,7 @@ static inline void queue_flag_clear(unsigned int flag, struct request_queue *q) | |||
491 | #define blk_queue_tagged(q) test_bit(QUEUE_FLAG_QUEUED, &(q)->queue_flags) | 508 | #define blk_queue_tagged(q) test_bit(QUEUE_FLAG_QUEUED, &(q)->queue_flags) |
492 | #define blk_queue_stopped(q) test_bit(QUEUE_FLAG_STOPPED, &(q)->queue_flags) | 509 | #define blk_queue_stopped(q) test_bit(QUEUE_FLAG_STOPPED, &(q)->queue_flags) |
493 | #define blk_queue_dead(q) test_bit(QUEUE_FLAG_DEAD, &(q)->queue_flags) | 510 | #define blk_queue_dead(q) test_bit(QUEUE_FLAG_DEAD, &(q)->queue_flags) |
511 | #define blk_queue_bypass(q) test_bit(QUEUE_FLAG_BYPASS, &(q)->queue_flags) | ||
494 | #define blk_queue_nomerges(q) test_bit(QUEUE_FLAG_NOMERGES, &(q)->queue_flags) | 512 | #define blk_queue_nomerges(q) test_bit(QUEUE_FLAG_NOMERGES, &(q)->queue_flags) |
495 | #define blk_queue_noxmerges(q) \ | 513 | #define blk_queue_noxmerges(q) \ |
496 | test_bit(QUEUE_FLAG_NOXMERGES, &(q)->queue_flags) | 514 | test_bit(QUEUE_FLAG_NOXMERGES, &(q)->queue_flags) |
diff --git a/include/linux/bootmem.h b/include/linux/bootmem.h index 66d3e954eb6c..324fe08ea3b1 100644 --- a/include/linux/bootmem.h +++ b/include/linux/bootmem.h | |||
@@ -135,9 +135,6 @@ extern void *__alloc_bootmem_low_node(pg_data_t *pgdat, | |||
135 | extern int reserve_bootmem_generic(unsigned long addr, unsigned long size, | 135 | extern int reserve_bootmem_generic(unsigned long addr, unsigned long size, |
136 | int flags); | 136 | int flags); |
137 | 137 | ||
138 | extern void *alloc_bootmem_section(unsigned long size, | ||
139 | unsigned long section_nr); | ||
140 | |||
141 | #ifdef CONFIG_HAVE_ARCH_ALLOC_REMAP | 138 | #ifdef CONFIG_HAVE_ARCH_ALLOC_REMAP |
142 | extern void *alloc_remap(int nid, unsigned long size); | 139 | extern void *alloc_remap(int nid, unsigned long size); |
143 | #else | 140 | #else |
@@ -154,7 +151,8 @@ extern void *alloc_large_system_hash(const char *tablename, | |||
154 | int flags, | 151 | int flags, |
155 | unsigned int *_hash_shift, | 152 | unsigned int *_hash_shift, |
156 | unsigned int *_hash_mask, | 153 | unsigned int *_hash_mask, |
157 | unsigned long limit); | 154 | unsigned long low_limit, |
155 | unsigned long high_limit); | ||
158 | 156 | ||
159 | #define HASH_EARLY 0x00000001 /* Allocating during early boot? */ | 157 | #define HASH_EARLY 0x00000001 /* Allocating during early boot? */ |
160 | #define HASH_SMALL 0x00000002 /* sub-page allocation allowed, min | 158 | #define HASH_SMALL 0x00000002 /* sub-page allocation allowed, min |
diff --git a/include/linux/bug.h b/include/linux/bug.h index 72961c39576a..aaac4bba6f5c 100644 --- a/include/linux/bug.h +++ b/include/linux/bug.h | |||
@@ -30,6 +30,13 @@ struct pt_regs; | |||
30 | #define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); })) | 30 | #define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); })) |
31 | #define BUILD_BUG_ON_NULL(e) ((void *)sizeof(struct { int:-!!(e); })) | 31 | #define BUILD_BUG_ON_NULL(e) ((void *)sizeof(struct { int:-!!(e); })) |
32 | 32 | ||
33 | /* | ||
34 | * BUILD_BUG_ON_INVALID() permits the compiler to check the validity of the | ||
35 | * expression but avoids the generation of any code, even if that expression | ||
36 | * has side-effects. | ||
37 | */ | ||
38 | #define BUILD_BUG_ON_INVALID(e) ((void)(sizeof((__force long)(e)))) | ||
39 | |||
33 | /** | 40 | /** |
34 | * BUILD_BUG_ON - break compile if a condition is true. | 41 | * BUILD_BUG_ON - break compile if a condition is true. |
35 | * @condition: the condition which the compiler should know is false. | 42 | * @condition: the condition which the compiler should know is false. |
diff --git a/include/linux/ceph/auth.h b/include/linux/ceph/auth.h index aa13392a7efb..d4080f309b56 100644 --- a/include/linux/ceph/auth.h +++ b/include/linux/ceph/auth.h | |||
@@ -14,6 +14,14 @@ | |||
14 | struct ceph_auth_client; | 14 | struct ceph_auth_client; |
15 | struct ceph_authorizer; | 15 | struct ceph_authorizer; |
16 | 16 | ||
17 | struct ceph_auth_handshake { | ||
18 | struct ceph_authorizer *authorizer; | ||
19 | void *authorizer_buf; | ||
20 | size_t authorizer_buf_len; | ||
21 | void *authorizer_reply_buf; | ||
22 | size_t authorizer_reply_buf_len; | ||
23 | }; | ||
24 | |||
17 | struct ceph_auth_client_ops { | 25 | struct ceph_auth_client_ops { |
18 | const char *name; | 26 | const char *name; |
19 | 27 | ||
@@ -43,9 +51,7 @@ struct ceph_auth_client_ops { | |||
43 | * the response to authenticate the service. | 51 | * the response to authenticate the service. |
44 | */ | 52 | */ |
45 | int (*create_authorizer)(struct ceph_auth_client *ac, int peer_type, | 53 | int (*create_authorizer)(struct ceph_auth_client *ac, int peer_type, |
46 | struct ceph_authorizer **a, | 54 | struct ceph_auth_handshake *auth); |
47 | void **buf, size_t *len, | ||
48 | void **reply_buf, size_t *reply_len); | ||
49 | int (*verify_authorizer_reply)(struct ceph_auth_client *ac, | 55 | int (*verify_authorizer_reply)(struct ceph_auth_client *ac, |
50 | struct ceph_authorizer *a, size_t len); | 56 | struct ceph_authorizer *a, size_t len); |
51 | void (*destroy_authorizer)(struct ceph_auth_client *ac, | 57 | void (*destroy_authorizer)(struct ceph_auth_client *ac, |
diff --git a/include/linux/ceph/ceph_fs.h b/include/linux/ceph/ceph_fs.h index b8c60694b2b0..e81ab30d4896 100644 --- a/include/linux/ceph/ceph_fs.h +++ b/include/linux/ceph/ceph_fs.h | |||
@@ -65,7 +65,7 @@ struct ceph_file_layout { | |||
65 | __le32 fl_object_stripe_unit; /* UNUSED. for per-object parity, if any */ | 65 | __le32 fl_object_stripe_unit; /* UNUSED. for per-object parity, if any */ |
66 | 66 | ||
67 | /* object -> pg layout */ | 67 | /* object -> pg layout */ |
68 | __le32 fl_pg_preferred; /* preferred primary for pg (-1 for none) */ | 68 | __le32 fl_unused; /* unused; used to be preferred primary (-1) */ |
69 | __le32 fl_pg_pool; /* namespace, crush ruleset, rep level */ | 69 | __le32 fl_pg_pool; /* namespace, crush ruleset, rep level */ |
70 | } __attribute__ ((packed)); | 70 | } __attribute__ ((packed)); |
71 | 71 | ||
@@ -384,7 +384,7 @@ union ceph_mds_request_args { | |||
384 | __le32 stripe_count; /* ... */ | 384 | __le32 stripe_count; /* ... */ |
385 | __le32 object_size; | 385 | __le32 object_size; |
386 | __le32 file_replication; | 386 | __le32 file_replication; |
387 | __le32 preferred; | 387 | __le32 unused; /* used to be preferred osd */ |
388 | } __attribute__ ((packed)) open; | 388 | } __attribute__ ((packed)) open; |
389 | struct { | 389 | struct { |
390 | __le32 flags; | 390 | __le32 flags; |
diff --git a/include/linux/ceph/decode.h b/include/linux/ceph/decode.h index 220ae21e819b..d8615dee5808 100644 --- a/include/linux/ceph/decode.h +++ b/include/linux/ceph/decode.h | |||
@@ -46,9 +46,14 @@ static inline void ceph_decode_copy(void **p, void *pv, size_t n) | |||
46 | /* | 46 | /* |
47 | * bounds check input. | 47 | * bounds check input. |
48 | */ | 48 | */ |
49 | static inline int ceph_has_room(void **p, void *end, size_t n) | ||
50 | { | ||
51 | return end >= *p && n <= end - *p; | ||
52 | } | ||
53 | |||
49 | #define ceph_decode_need(p, end, n, bad) \ | 54 | #define ceph_decode_need(p, end, n, bad) \ |
50 | do { \ | 55 | do { \ |
51 | if (unlikely(*(p) + (n) > (end))) \ | 56 | if (!likely(ceph_has_room(p, end, n))) \ |
52 | goto bad; \ | 57 | goto bad; \ |
53 | } while (0) | 58 | } while (0) |
54 | 59 | ||
@@ -167,7 +172,7 @@ static inline void ceph_encode_string(void **p, void *end, | |||
167 | 172 | ||
168 | #define ceph_encode_need(p, end, n, bad) \ | 173 | #define ceph_encode_need(p, end, n, bad) \ |
169 | do { \ | 174 | do { \ |
170 | if (unlikely(*(p) + (n) > (end))) \ | 175 | if (!likely(ceph_has_room(p, end, n))) \ |
171 | goto bad; \ | 176 | goto bad; \ |
172 | } while (0) | 177 | } while (0) |
173 | 178 | ||
diff --git a/include/linux/ceph/messenger.h b/include/linux/ceph/messenger.h index 3bff047f6b0f..2521a95fa6d9 100644 --- a/include/linux/ceph/messenger.h +++ b/include/linux/ceph/messenger.h | |||
@@ -25,9 +25,9 @@ struct ceph_connection_operations { | |||
25 | void (*dispatch) (struct ceph_connection *con, struct ceph_msg *m); | 25 | void (*dispatch) (struct ceph_connection *con, struct ceph_msg *m); |
26 | 26 | ||
27 | /* authorize an outgoing connection */ | 27 | /* authorize an outgoing connection */ |
28 | int (*get_authorizer) (struct ceph_connection *con, | 28 | struct ceph_auth_handshake *(*get_authorizer) ( |
29 | void **buf, int *len, int *proto, | 29 | struct ceph_connection *con, |
30 | void **reply_buf, int *reply_len, int force_new); | 30 | int *proto, int force_new); |
31 | int (*verify_authorizer_reply) (struct ceph_connection *con, int len); | 31 | int (*verify_authorizer_reply) (struct ceph_connection *con, int len); |
32 | int (*invalidate_authorizer)(struct ceph_connection *con); | 32 | int (*invalidate_authorizer)(struct ceph_connection *con); |
33 | 33 | ||
diff --git a/include/linux/ceph/osd_client.h b/include/linux/ceph/osd_client.h index 7c05ac202d90..cedfb1a8434a 100644 --- a/include/linux/ceph/osd_client.h +++ b/include/linux/ceph/osd_client.h | |||
@@ -6,9 +6,10 @@ | |||
6 | #include <linux/mempool.h> | 6 | #include <linux/mempool.h> |
7 | #include <linux/rbtree.h> | 7 | #include <linux/rbtree.h> |
8 | 8 | ||
9 | #include "types.h" | 9 | #include <linux/ceph/types.h> |
10 | #include "osdmap.h" | 10 | #include <linux/ceph/osdmap.h> |
11 | #include "messenger.h" | 11 | #include <linux/ceph/messenger.h> |
12 | #include <linux/ceph/auth.h> | ||
12 | 13 | ||
13 | /* | 14 | /* |
14 | * Maximum object name size | 15 | * Maximum object name size |
@@ -40,9 +41,7 @@ struct ceph_osd { | |||
40 | struct list_head o_requests; | 41 | struct list_head o_requests; |
41 | struct list_head o_linger_requests; | 42 | struct list_head o_linger_requests; |
42 | struct list_head o_osd_lru; | 43 | struct list_head o_osd_lru; |
43 | struct ceph_authorizer *o_authorizer; | 44 | struct ceph_auth_handshake o_auth; |
44 | void *o_authorizer_buf, *o_authorizer_reply_buf; | ||
45 | size_t o_authorizer_buf_len, o_authorizer_reply_buf_len; | ||
46 | unsigned long lru_ttl; | 45 | unsigned long lru_ttl; |
47 | int o_marked_for_keepalive; | 46 | int o_marked_for_keepalive; |
48 | struct list_head o_keepalive_item; | 47 | struct list_head o_keepalive_item; |
diff --git a/include/linux/ceph/osdmap.h b/include/linux/ceph/osdmap.h index ba4c205cbb01..311ef8d6aa9e 100644 --- a/include/linux/ceph/osdmap.h +++ b/include/linux/ceph/osdmap.h | |||
@@ -65,8 +65,6 @@ struct ceph_osdmap { | |||
65 | #define ceph_file_layout_cas_hash(l) ((__s32)le32_to_cpu((l).fl_cas_hash)) | 65 | #define ceph_file_layout_cas_hash(l) ((__s32)le32_to_cpu((l).fl_cas_hash)) |
66 | #define ceph_file_layout_object_su(l) \ | 66 | #define ceph_file_layout_object_su(l) \ |
67 | ((__s32)le32_to_cpu((l).fl_object_stripe_unit)) | 67 | ((__s32)le32_to_cpu((l).fl_object_stripe_unit)) |
68 | #define ceph_file_layout_pg_preferred(l) \ | ||
69 | ((__s32)le32_to_cpu((l).fl_pg_preferred)) | ||
70 | #define ceph_file_layout_pg_pool(l) \ | 68 | #define ceph_file_layout_pg_pool(l) \ |
71 | ((__s32)le32_to_cpu((l).fl_pg_pool)) | 69 | ((__s32)le32_to_cpu((l).fl_pg_pool)) |
72 | 70 | ||
diff --git a/include/linux/clk-private.h b/include/linux/clk-private.h index 5e4312b6f5cc..eb3f84bc5325 100644 --- a/include/linux/clk-private.h +++ b/include/linux/clk-private.h | |||
@@ -30,7 +30,7 @@ struct clk { | |||
30 | const struct clk_ops *ops; | 30 | const struct clk_ops *ops; |
31 | struct clk_hw *hw; | 31 | struct clk_hw *hw; |
32 | struct clk *parent; | 32 | struct clk *parent; |
33 | char **parent_names; | 33 | const char **parent_names; |
34 | struct clk **parents; | 34 | struct clk **parents; |
35 | u8 num_parents; | 35 | u8 num_parents; |
36 | unsigned long rate; | 36 | unsigned long rate; |
@@ -55,12 +55,22 @@ struct clk { | |||
55 | * alternative macro for static initialization | 55 | * alternative macro for static initialization |
56 | */ | 56 | */ |
57 | 57 | ||
58 | extern struct clk_ops clk_fixed_rate_ops; | 58 | #define DEFINE_CLK(_name, _ops, _flags, _parent_names, \ |
59 | _parents) \ | ||
60 | static struct clk _name = { \ | ||
61 | .name = #_name, \ | ||
62 | .ops = &_ops, \ | ||
63 | .hw = &_name##_hw.hw, \ | ||
64 | .parent_names = _parent_names, \ | ||
65 | .num_parents = ARRAY_SIZE(_parent_names), \ | ||
66 | .parents = _parents, \ | ||
67 | .flags = _flags, \ | ||
68 | } | ||
59 | 69 | ||
60 | #define DEFINE_CLK_FIXED_RATE(_name, _flags, _rate, \ | 70 | #define DEFINE_CLK_FIXED_RATE(_name, _flags, _rate, \ |
61 | _fixed_rate_flags) \ | 71 | _fixed_rate_flags) \ |
62 | static struct clk _name; \ | 72 | static struct clk _name; \ |
63 | static char *_name##_parent_names[] = {}; \ | 73 | static const char *_name##_parent_names[] = {}; \ |
64 | static struct clk_fixed_rate _name##_hw = { \ | 74 | static struct clk_fixed_rate _name##_hw = { \ |
65 | .hw = { \ | 75 | .hw = { \ |
66 | .clk = &_name, \ | 76 | .clk = &_name, \ |
@@ -68,23 +78,14 @@ extern struct clk_ops clk_fixed_rate_ops; | |||
68 | .fixed_rate = _rate, \ | 78 | .fixed_rate = _rate, \ |
69 | .flags = _fixed_rate_flags, \ | 79 | .flags = _fixed_rate_flags, \ |
70 | }; \ | 80 | }; \ |
71 | static struct clk _name = { \ | 81 | DEFINE_CLK(_name, clk_fixed_rate_ops, _flags, \ |
72 | .name = #_name, \ | 82 | _name##_parent_names, NULL); |
73 | .ops = &clk_fixed_rate_ops, \ | ||
74 | .hw = &_name##_hw.hw, \ | ||
75 | .parent_names = _name##_parent_names, \ | ||
76 | .num_parents = \ | ||
77 | ARRAY_SIZE(_name##_parent_names), \ | ||
78 | .flags = _flags, \ | ||
79 | }; | ||
80 | |||
81 | extern struct clk_ops clk_gate_ops; | ||
82 | 83 | ||
83 | #define DEFINE_CLK_GATE(_name, _parent_name, _parent_ptr, \ | 84 | #define DEFINE_CLK_GATE(_name, _parent_name, _parent_ptr, \ |
84 | _flags, _reg, _bit_idx, \ | 85 | _flags, _reg, _bit_idx, \ |
85 | _gate_flags, _lock) \ | 86 | _gate_flags, _lock) \ |
86 | static struct clk _name; \ | 87 | static struct clk _name; \ |
87 | static char *_name##_parent_names[] = { \ | 88 | static const char *_name##_parent_names[] = { \ |
88 | _parent_name, \ | 89 | _parent_name, \ |
89 | }; \ | 90 | }; \ |
90 | static struct clk *_name##_parents[] = { \ | 91 | static struct clk *_name##_parents[] = { \ |
@@ -99,24 +100,14 @@ extern struct clk_ops clk_gate_ops; | |||
99 | .flags = _gate_flags, \ | 100 | .flags = _gate_flags, \ |
100 | .lock = _lock, \ | 101 | .lock = _lock, \ |
101 | }; \ | 102 | }; \ |
102 | static struct clk _name = { \ | 103 | DEFINE_CLK(_name, clk_gate_ops, _flags, \ |
103 | .name = #_name, \ | 104 | _name##_parent_names, _name##_parents); |
104 | .ops = &clk_gate_ops, \ | ||
105 | .hw = &_name##_hw.hw, \ | ||
106 | .parent_names = _name##_parent_names, \ | ||
107 | .num_parents = \ | ||
108 | ARRAY_SIZE(_name##_parent_names), \ | ||
109 | .parents = _name##_parents, \ | ||
110 | .flags = _flags, \ | ||
111 | }; | ||
112 | |||
113 | extern struct clk_ops clk_divider_ops; | ||
114 | 105 | ||
115 | #define DEFINE_CLK_DIVIDER(_name, _parent_name, _parent_ptr, \ | 106 | #define DEFINE_CLK_DIVIDER(_name, _parent_name, _parent_ptr, \ |
116 | _flags, _reg, _shift, _width, \ | 107 | _flags, _reg, _shift, _width, \ |
117 | _divider_flags, _lock) \ | 108 | _divider_flags, _lock) \ |
118 | static struct clk _name; \ | 109 | static struct clk _name; \ |
119 | static char *_name##_parent_names[] = { \ | 110 | static const char *_name##_parent_names[] = { \ |
120 | _parent_name, \ | 111 | _parent_name, \ |
121 | }; \ | 112 | }; \ |
122 | static struct clk *_name##_parents[] = { \ | 113 | static struct clk *_name##_parents[] = { \ |
@@ -132,18 +123,8 @@ extern struct clk_ops clk_divider_ops; | |||
132 | .flags = _divider_flags, \ | 123 | .flags = _divider_flags, \ |
133 | .lock = _lock, \ | 124 | .lock = _lock, \ |
134 | }; \ | 125 | }; \ |
135 | static struct clk _name = { \ | 126 | DEFINE_CLK(_name, clk_divider_ops, _flags, \ |
136 | .name = #_name, \ | 127 | _name##_parent_names, _name##_parents); |
137 | .ops = &clk_divider_ops, \ | ||
138 | .hw = &_name##_hw.hw, \ | ||
139 | .parent_names = _name##_parent_names, \ | ||
140 | .num_parents = \ | ||
141 | ARRAY_SIZE(_name##_parent_names), \ | ||
142 | .parents = _name##_parents, \ | ||
143 | .flags = _flags, \ | ||
144 | }; | ||
145 | |||
146 | extern struct clk_ops clk_mux_ops; | ||
147 | 128 | ||
148 | #define DEFINE_CLK_MUX(_name, _parent_names, _parents, _flags, \ | 129 | #define DEFINE_CLK_MUX(_name, _parent_names, _parents, _flags, \ |
149 | _reg, _shift, _width, \ | 130 | _reg, _shift, _width, \ |
@@ -159,16 +140,28 @@ extern struct clk_ops clk_mux_ops; | |||
159 | .flags = _mux_flags, \ | 140 | .flags = _mux_flags, \ |
160 | .lock = _lock, \ | 141 | .lock = _lock, \ |
161 | }; \ | 142 | }; \ |
162 | static struct clk _name = { \ | 143 | DEFINE_CLK(_name, clk_mux_ops, _flags, _parent_names, \ |
163 | .name = #_name, \ | 144 | _parents); |
164 | .ops = &clk_mux_ops, \ | 145 | |
165 | .hw = &_name##_hw.hw, \ | 146 | #define DEFINE_CLK_FIXED_FACTOR(_name, _parent_name, \ |
166 | .parent_names = _parent_names, \ | 147 | _parent_ptr, _flags, \ |
167 | .num_parents = \ | 148 | _mult, _div) \ |
168 | ARRAY_SIZE(_parent_names), \ | 149 | static struct clk _name; \ |
169 | .parents = _parents, \ | 150 | static const char *_name##_parent_names[] = { \ |
170 | .flags = _flags, \ | 151 | _parent_name, \ |
171 | }; | 152 | }; \ |
153 | static struct clk *_name##_parents[] = { \ | ||
154 | _parent_ptr, \ | ||
155 | }; \ | ||
156 | static struct clk_fixed_factor _name##_hw = { \ | ||
157 | .hw = { \ | ||
158 | .clk = &_name, \ | ||
159 | }, \ | ||
160 | .mult = _mult, \ | ||
161 | .div = _div, \ | ||
162 | }; \ | ||
163 | DEFINE_CLK(_name, clk_fixed_factor_ops, _flags, \ | ||
164 | _name##_parent_names, _name##_parents); | ||
172 | 165 | ||
173 | /** | 166 | /** |
174 | * __clk_init - initialize the data structures in a struct clk | 167 | * __clk_init - initialize the data structures in a struct clk |
@@ -189,8 +182,12 @@ extern struct clk_ops clk_mux_ops; | |||
189 | * | 182 | * |
190 | * It is not necessary to call clk_register if __clk_init is used directly with | 183 | * It is not necessary to call clk_register if __clk_init is used directly with |
191 | * statically initialized clock data. | 184 | * statically initialized clock data. |
185 | * | ||
186 | * Returns 0 on success, otherwise an error code. | ||
192 | */ | 187 | */ |
193 | void __clk_init(struct device *dev, struct clk *clk); | 188 | int __clk_init(struct device *dev, struct clk *clk); |
189 | |||
190 | struct clk *__clk_register(struct device *dev, struct clk_hw *hw); | ||
194 | 191 | ||
195 | #endif /* CONFIG_COMMON_CLK */ | 192 | #endif /* CONFIG_COMMON_CLK */ |
196 | #endif /* CLK_PRIVATE_H */ | 193 | #endif /* CLK_PRIVATE_H */ |
diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h index 5508897ad376..4a0b483986c3 100644 --- a/include/linux/clk-provider.h +++ b/include/linux/clk-provider.h | |||
@@ -15,19 +15,6 @@ | |||
15 | 15 | ||
16 | #ifdef CONFIG_COMMON_CLK | 16 | #ifdef CONFIG_COMMON_CLK |
17 | 17 | ||
18 | /** | ||
19 | * struct clk_hw - handle for traversing from a struct clk to its corresponding | ||
20 | * hardware-specific structure. struct clk_hw should be declared within struct | ||
21 | * clk_foo and then referenced by the struct clk instance that uses struct | ||
22 | * clk_foo's clk_ops | ||
23 | * | ||
24 | * clk: pointer to the struct clk instance that points back to this struct | ||
25 | * clk_hw instance | ||
26 | */ | ||
27 | struct clk_hw { | ||
28 | struct clk *clk; | ||
29 | }; | ||
30 | |||
31 | /* | 18 | /* |
32 | * flags used across common struct clk. these flags should only affect the | 19 | * flags used across common struct clk. these flags should only affect the |
33 | * top-level framework. custom flags for dealing with hardware specifics | 20 | * top-level framework. custom flags for dealing with hardware specifics |
@@ -39,6 +26,8 @@ struct clk_hw { | |||
39 | #define CLK_IGNORE_UNUSED BIT(3) /* do not gate even if unused */ | 26 | #define CLK_IGNORE_UNUSED BIT(3) /* do not gate even if unused */ |
40 | #define CLK_IS_ROOT BIT(4) /* root clk, has no parent */ | 27 | #define CLK_IS_ROOT BIT(4) /* root clk, has no parent */ |
41 | 28 | ||
29 | struct clk_hw; | ||
30 | |||
42 | /** | 31 | /** |
43 | * struct clk_ops - Callback operations for hardware clocks; these are to | 32 | * struct clk_ops - Callback operations for hardware clocks; these are to |
44 | * be provided by the clock implementation, and will be called by drivers | 33 | * be provided by the clock implementation, and will be called by drivers |
@@ -88,19 +77,11 @@ struct clk_hw { | |||
88 | * array index into the value programmed into the hardware. | 77 | * array index into the value programmed into the hardware. |
89 | * Returns 0 on success, -EERROR otherwise. | 78 | * Returns 0 on success, -EERROR otherwise. |
90 | * | 79 | * |
91 | * @set_rate: Change the rate of this clock. If this callback returns | 80 | * @set_rate: Change the rate of this clock. The requested rate is specified |
92 | * CLK_SET_RATE_PARENT, the rate change will be propagated to the | 81 | * by the second argument, which should typically be the return |
93 | * parent clock (which may propagate again if the parent clock | 82 | * of .round_rate call. The third argument gives the parent rate |
94 | * also sets this flag). The requested rate of the parent is | 83 | * which is likely helpful for most .set_rate implementation. |
95 | * passed back from the callback in the second 'unsigned long *' | 84 | * Returns 0 on success, -EERROR otherwise. |
96 | * argument. Note that it is up to the hardware clock's set_rate | ||
97 | * implementation to insure that clocks do not run out of spec | ||
98 | * when propgating the call to set_rate up to the parent. One way | ||
99 | * to do this is to gate the clock (via clk_disable and/or | ||
100 | * clk_unprepare) before calling clk_set_rate, then ungating it | ||
101 | * afterward. If your clock also has the CLK_GATE_SET_RATE flag | ||
102 | * set then this will insure safety. Returns 0 on success, | ||
103 | * -EERROR otherwise. | ||
104 | * | 85 | * |
105 | * The clk_enable/clk_disable and clk_prepare/clk_unprepare pairs allow | 86 | * The clk_enable/clk_disable and clk_prepare/clk_unprepare pairs allow |
106 | * implementations to split any work between atomic (enable) and sleepable | 87 | * implementations to split any work between atomic (enable) and sleepable |
@@ -125,10 +106,46 @@ struct clk_ops { | |||
125 | unsigned long *); | 106 | unsigned long *); |
126 | int (*set_parent)(struct clk_hw *hw, u8 index); | 107 | int (*set_parent)(struct clk_hw *hw, u8 index); |
127 | u8 (*get_parent)(struct clk_hw *hw); | 108 | u8 (*get_parent)(struct clk_hw *hw); |
128 | int (*set_rate)(struct clk_hw *hw, unsigned long); | 109 | int (*set_rate)(struct clk_hw *hw, unsigned long, |
110 | unsigned long); | ||
129 | void (*init)(struct clk_hw *hw); | 111 | void (*init)(struct clk_hw *hw); |
130 | }; | 112 | }; |
131 | 113 | ||
114 | /** | ||
115 | * struct clk_init_data - holds init data that's common to all clocks and is | ||
116 | * shared between the clock provider and the common clock framework. | ||
117 | * | ||
118 | * @name: clock name | ||
119 | * @ops: operations this clock supports | ||
120 | * @parent_names: array of string names for all possible parents | ||
121 | * @num_parents: number of possible parents | ||
122 | * @flags: framework-level hints and quirks | ||
123 | */ | ||
124 | struct clk_init_data { | ||
125 | const char *name; | ||
126 | const struct clk_ops *ops; | ||
127 | const char **parent_names; | ||
128 | u8 num_parents; | ||
129 | unsigned long flags; | ||
130 | }; | ||
131 | |||
132 | /** | ||
133 | * struct clk_hw - handle for traversing from a struct clk to its corresponding | ||
134 | * hardware-specific structure. struct clk_hw should be declared within struct | ||
135 | * clk_foo and then referenced by the struct clk instance that uses struct | ||
136 | * clk_foo's clk_ops | ||
137 | * | ||
138 | * @clk: pointer to the struct clk instance that points back to this struct | ||
139 | * clk_hw instance | ||
140 | * | ||
141 | * @init: pointer to struct clk_init_data that contains the init data shared | ||
142 | * with the common clock framework. | ||
143 | */ | ||
144 | struct clk_hw { | ||
145 | struct clk *clk; | ||
146 | struct clk_init_data *init; | ||
147 | }; | ||
148 | |||
132 | /* | 149 | /* |
133 | * DOC: Basic clock implementations common to many platforms | 150 | * DOC: Basic clock implementations common to many platforms |
134 | * | 151 | * |
@@ -149,6 +166,7 @@ struct clk_fixed_rate { | |||
149 | u8 flags; | 166 | u8 flags; |
150 | }; | 167 | }; |
151 | 168 | ||
169 | extern const struct clk_ops clk_fixed_rate_ops; | ||
152 | struct clk *clk_register_fixed_rate(struct device *dev, const char *name, | 170 | struct clk *clk_register_fixed_rate(struct device *dev, const char *name, |
153 | const char *parent_name, unsigned long flags, | 171 | const char *parent_name, unsigned long flags, |
154 | unsigned long fixed_rate); | 172 | unsigned long fixed_rate); |
@@ -165,7 +183,7 @@ struct clk *clk_register_fixed_rate(struct device *dev, const char *name, | |||
165 | * Clock which can gate its output. Implements .enable & .disable | 183 | * Clock which can gate its output. Implements .enable & .disable |
166 | * | 184 | * |
167 | * Flags: | 185 | * Flags: |
168 | * CLK_GATE_SET_DISABLE - by default this clock sets the bit at bit_idx to | 186 | * CLK_GATE_SET_TO_DISABLE - by default this clock sets the bit at bit_idx to |
169 | * enable the clock. Setting this flag does the opposite: setting the bit | 187 | * enable the clock. Setting this flag does the opposite: setting the bit |
170 | * disable the clock and clearing it enables the clock | 188 | * disable the clock and clearing it enables the clock |
171 | */ | 189 | */ |
@@ -175,11 +193,11 @@ struct clk_gate { | |||
175 | u8 bit_idx; | 193 | u8 bit_idx; |
176 | u8 flags; | 194 | u8 flags; |
177 | spinlock_t *lock; | 195 | spinlock_t *lock; |
178 | char *parent[1]; | ||
179 | }; | 196 | }; |
180 | 197 | ||
181 | #define CLK_GATE_SET_TO_DISABLE BIT(0) | 198 | #define CLK_GATE_SET_TO_DISABLE BIT(0) |
182 | 199 | ||
200 | extern const struct clk_ops clk_gate_ops; | ||
183 | struct clk *clk_register_gate(struct device *dev, const char *name, | 201 | struct clk *clk_register_gate(struct device *dev, const char *name, |
184 | const char *parent_name, unsigned long flags, | 202 | const char *parent_name, unsigned long flags, |
185 | void __iomem *reg, u8 bit_idx, | 203 | void __iomem *reg, u8 bit_idx, |
@@ -212,12 +230,12 @@ struct clk_divider { | |||
212 | u8 width; | 230 | u8 width; |
213 | u8 flags; | 231 | u8 flags; |
214 | spinlock_t *lock; | 232 | spinlock_t *lock; |
215 | char *parent[1]; | ||
216 | }; | 233 | }; |
217 | 234 | ||
218 | #define CLK_DIVIDER_ONE_BASED BIT(0) | 235 | #define CLK_DIVIDER_ONE_BASED BIT(0) |
219 | #define CLK_DIVIDER_POWER_OF_TWO BIT(1) | 236 | #define CLK_DIVIDER_POWER_OF_TWO BIT(1) |
220 | 237 | ||
238 | extern const struct clk_ops clk_divider_ops; | ||
221 | struct clk *clk_register_divider(struct device *dev, const char *name, | 239 | struct clk *clk_register_divider(struct device *dev, const char *name, |
222 | const char *parent_name, unsigned long flags, | 240 | const char *parent_name, unsigned long flags, |
223 | void __iomem *reg, u8 shift, u8 width, | 241 | void __iomem *reg, u8 shift, u8 width, |
@@ -238,7 +256,7 @@ struct clk *clk_register_divider(struct device *dev, const char *name, | |||
238 | * | 256 | * |
239 | * Flags: | 257 | * Flags: |
240 | * CLK_MUX_INDEX_ONE - register index starts at 1, not 0 | 258 | * CLK_MUX_INDEX_ONE - register index starts at 1, not 0 |
241 | * CLK_MUX_INDEX_BITWISE - register index is a single bit (power of two) | 259 | * CLK_MUX_INDEX_BIT - register index is a single bit (power of two) |
242 | */ | 260 | */ |
243 | struct clk_mux { | 261 | struct clk_mux { |
244 | struct clk_hw hw; | 262 | struct clk_hw hw; |
@@ -252,29 +270,49 @@ struct clk_mux { | |||
252 | #define CLK_MUX_INDEX_ONE BIT(0) | 270 | #define CLK_MUX_INDEX_ONE BIT(0) |
253 | #define CLK_MUX_INDEX_BIT BIT(1) | 271 | #define CLK_MUX_INDEX_BIT BIT(1) |
254 | 272 | ||
273 | extern const struct clk_ops clk_mux_ops; | ||
255 | struct clk *clk_register_mux(struct device *dev, const char *name, | 274 | struct clk *clk_register_mux(struct device *dev, const char *name, |
256 | char **parent_names, u8 num_parents, unsigned long flags, | 275 | const char **parent_names, u8 num_parents, unsigned long flags, |
257 | void __iomem *reg, u8 shift, u8 width, | 276 | void __iomem *reg, u8 shift, u8 width, |
258 | u8 clk_mux_flags, spinlock_t *lock); | 277 | u8 clk_mux_flags, spinlock_t *lock); |
259 | 278 | ||
260 | /** | 279 | /** |
280 | * struct clk_fixed_factor - fixed multiplier and divider clock | ||
281 | * | ||
282 | * @hw: handle between common and hardware-specific interfaces | ||
283 | * @mult: multiplier | ||
284 | * @div: divider | ||
285 | * | ||
286 | * Clock with a fixed multiplier and divider. The output frequency is the | ||
287 | * parent clock rate divided by div and multiplied by mult. | ||
288 | * Implements .recalc_rate, .set_rate and .round_rate | ||
289 | */ | ||
290 | |||
291 | struct clk_fixed_factor { | ||
292 | struct clk_hw hw; | ||
293 | unsigned int mult; | ||
294 | unsigned int div; | ||
295 | }; | ||
296 | |||
297 | extern struct clk_ops clk_fixed_factor_ops; | ||
298 | struct clk *clk_register_fixed_factor(struct device *dev, const char *name, | ||
299 | const char *parent_name, unsigned long flags, | ||
300 | unsigned int mult, unsigned int div); | ||
301 | |||
302 | /** | ||
261 | * clk_register - allocate a new clock, register it and return an opaque cookie | 303 | * clk_register - allocate a new clock, register it and return an opaque cookie |
262 | * @dev: device that is registering this clock | 304 | * @dev: device that is registering this clock |
263 | * @name: clock name | ||
264 | * @ops: operations this clock supports | ||
265 | * @hw: link to hardware-specific clock data | 305 | * @hw: link to hardware-specific clock data |
266 | * @parent_names: array of string names for all possible parents | ||
267 | * @num_parents: number of possible parents | ||
268 | * @flags: framework-level hints and quirks | ||
269 | * | 306 | * |
270 | * clk_register is the primary interface for populating the clock tree with new | 307 | * clk_register is the primary interface for populating the clock tree with new |
271 | * clock nodes. It returns a pointer to the newly allocated struct clk which | 308 | * clock nodes. It returns a pointer to the newly allocated struct clk which |
272 | * cannot be dereferenced by driver code but may be used in conjuction with the | 309 | * cannot be dereferenced by driver code but may be used in conjuction with the |
273 | * rest of the clock API. | 310 | * rest of the clock API. In the event of an error clk_register will return an |
311 | * error code; drivers must test for an error code after calling clk_register. | ||
274 | */ | 312 | */ |
275 | struct clk *clk_register(struct device *dev, const char *name, | 313 | struct clk *clk_register(struct device *dev, struct clk_hw *hw); |
276 | const struct clk_ops *ops, struct clk_hw *hw, | 314 | |
277 | char **parent_names, u8 num_parents, unsigned long flags); | 315 | void clk_unregister(struct clk *clk); |
278 | 316 | ||
279 | /* helper functions */ | 317 | /* helper functions */ |
280 | const char *__clk_get_name(struct clk *clk); | 318 | const char *__clk_get_name(struct clk *clk); |
diff --git a/include/linux/clk.h b/include/linux/clk.h index 70cf722ac3af..ad5c43e8ae8a 100644 --- a/include/linux/clk.h +++ b/include/linux/clk.h | |||
@@ -81,7 +81,7 @@ int clk_notifier_register(struct clk *clk, struct notifier_block *nb); | |||
81 | 81 | ||
82 | int clk_notifier_unregister(struct clk *clk, struct notifier_block *nb); | 82 | int clk_notifier_unregister(struct clk *clk, struct notifier_block *nb); |
83 | 83 | ||
84 | #endif /* !CONFIG_COMMON_CLK */ | 84 | #endif |
85 | 85 | ||
86 | /** | 86 | /** |
87 | * clk_get - lookup and obtain a reference to a clock producer. | 87 | * clk_get - lookup and obtain a reference to a clock producer. |
@@ -252,7 +252,7 @@ void devm_clk_put(struct device *dev, struct clk *clk); | |||
252 | * Returns rounded clock rate in Hz, or negative errno. | 252 | * Returns rounded clock rate in Hz, or negative errno. |
253 | */ | 253 | */ |
254 | long clk_round_rate(struct clk *clk, unsigned long rate); | 254 | long clk_round_rate(struct clk *clk, unsigned long rate); |
255 | 255 | ||
256 | /** | 256 | /** |
257 | * clk_set_rate - set the clock rate for a clock source | 257 | * clk_set_rate - set the clock rate for a clock source |
258 | * @clk: clock source | 258 | * @clk: clock source |
@@ -261,7 +261,7 @@ long clk_round_rate(struct clk *clk, unsigned long rate); | |||
261 | * Returns success (0) or negative errno. | 261 | * Returns success (0) or negative errno. |
262 | */ | 262 | */ |
263 | int clk_set_rate(struct clk *clk, unsigned long rate); | 263 | int clk_set_rate(struct clk *clk, unsigned long rate); |
264 | 264 | ||
265 | /** | 265 | /** |
266 | * clk_set_parent - set the parent clock source for this clock | 266 | * clk_set_parent - set the parent clock source for this clock |
267 | * @clk: clock source | 267 | * @clk: clock source |
diff --git a/include/linux/clockchips.h b/include/linux/clockchips.h index 81e803e90aa4..acba894374a1 100644 --- a/include/linux/clockchips.h +++ b/include/linux/clockchips.h | |||
@@ -132,6 +132,7 @@ extern u64 clockevent_delta2ns(unsigned long latch, | |||
132 | struct clock_event_device *evt); | 132 | struct clock_event_device *evt); |
133 | extern void clockevents_register_device(struct clock_event_device *dev); | 133 | extern void clockevents_register_device(struct clock_event_device *dev); |
134 | 134 | ||
135 | extern void clockevents_config(struct clock_event_device *dev, u32 freq); | ||
135 | extern void clockevents_config_and_register(struct clock_event_device *dev, | 136 | extern void clockevents_config_and_register(struct clock_event_device *dev, |
136 | u32 freq, unsigned long min_delta, | 137 | u32 freq, unsigned long min_delta, |
137 | unsigned long max_delta); | 138 | unsigned long max_delta); |
diff --git a/include/linux/compat.h b/include/linux/compat.h index 5d46217f84ad..4e890394ef99 100644 --- a/include/linux/compat.h +++ b/include/linux/compat.h | |||
@@ -577,8 +577,7 @@ extern ssize_t compat_rw_copy_check_uvector(int type, | |||
577 | const struct compat_iovec __user *uvector, | 577 | const struct compat_iovec __user *uvector, |
578 | unsigned long nr_segs, | 578 | unsigned long nr_segs, |
579 | unsigned long fast_segs, struct iovec *fast_pointer, | 579 | unsigned long fast_segs, struct iovec *fast_pointer, |
580 | struct iovec **ret_pointer, | 580 | struct iovec **ret_pointer); |
581 | int check_access); | ||
582 | 581 | ||
583 | extern void __user *compat_alloc_user_space(unsigned long len); | 582 | extern void __user *compat_alloc_user_space(unsigned long len); |
584 | 583 | ||
diff --git a/include/linux/cpu.h b/include/linux/cpu.h index 7230bb59a06f..2e9b9ebbeb78 100644 --- a/include/linux/cpu.h +++ b/include/linux/cpu.h | |||
@@ -177,6 +177,7 @@ extern void put_online_cpus(void); | |||
177 | #define hotcpu_notifier(fn, pri) cpu_notifier(fn, pri) | 177 | #define hotcpu_notifier(fn, pri) cpu_notifier(fn, pri) |
178 | #define register_hotcpu_notifier(nb) register_cpu_notifier(nb) | 178 | #define register_hotcpu_notifier(nb) register_cpu_notifier(nb) |
179 | #define unregister_hotcpu_notifier(nb) unregister_cpu_notifier(nb) | 179 | #define unregister_hotcpu_notifier(nb) unregister_cpu_notifier(nb) |
180 | void clear_tasks_mm_cpumask(int cpu); | ||
180 | int cpu_down(unsigned int cpu); | 181 | int cpu_down(unsigned int cpu); |
181 | 182 | ||
182 | #ifdef CONFIG_ARCH_CPU_PROBE_RELEASE | 183 | #ifdef CONFIG_ARCH_CPU_PROBE_RELEASE |
diff --git a/include/linux/cred.h b/include/linux/cred.h index 917dc5aeb1d4..ebbed2ce6637 100644 --- a/include/linux/cred.h +++ b/include/linux/cred.h | |||
@@ -277,17 +277,13 @@ static inline void put_cred(const struct cred *_cred) | |||
277 | * @task: The task to query | 277 | * @task: The task to query |
278 | * | 278 | * |
279 | * Access the objective credentials of a task. The caller must hold the RCU | 279 | * Access the objective credentials of a task. The caller must hold the RCU |
280 | * readlock or the task must be dead and unable to change its own credentials. | 280 | * readlock. |
281 | * | 281 | * |
282 | * The result of this function should not be passed directly to get_cred(); | 282 | * The result of this function should not be passed directly to get_cred(); |
283 | * rather get_task_cred() should be used instead. | 283 | * rather get_task_cred() should be used instead. |
284 | */ | 284 | */ |
285 | #define __task_cred(task) \ | 285 | #define __task_cred(task) \ |
286 | ({ \ | 286 | rcu_dereference((task)->real_cred) |
287 | const struct task_struct *__t = (task); \ | ||
288 | rcu_dereference_check(__t->real_cred, \ | ||
289 | task_is_dead(__t)); \ | ||
290 | }) | ||
291 | 287 | ||
292 | /** | 288 | /** |
293 | * get_current_cred - Get the current task's subjective credentials | 289 | * get_current_cred - Get the current task's subjective credentials |
diff --git a/include/linux/crush/crush.h b/include/linux/crush/crush.h index 97e435b191f4..7c4750811b96 100644 --- a/include/linux/crush/crush.h +++ b/include/linux/crush/crush.h | |||
@@ -151,16 +151,6 @@ struct crush_map { | |||
151 | struct crush_bucket **buckets; | 151 | struct crush_bucket **buckets; |
152 | struct crush_rule **rules; | 152 | struct crush_rule **rules; |
153 | 153 | ||
154 | /* | ||
155 | * Parent pointers to identify the parent bucket a device or | ||
156 | * bucket in the hierarchy. If an item appears more than | ||
157 | * once, this is the _last_ time it appeared (where buckets | ||
158 | * are processed in bucket id order, from -1 on down to | ||
159 | * -max_buckets. | ||
160 | */ | ||
161 | __u32 *bucket_parents; | ||
162 | __u32 *device_parents; | ||
163 | |||
164 | __s32 max_buckets; | 154 | __s32 max_buckets; |
165 | __u32 max_rules; | 155 | __u32 max_rules; |
166 | __s32 max_devices; | 156 | __s32 max_devices; |
@@ -168,8 +158,7 @@ struct crush_map { | |||
168 | 158 | ||
169 | 159 | ||
170 | /* crush.c */ | 160 | /* crush.c */ |
171 | extern int crush_get_bucket_item_weight(struct crush_bucket *b, int pos); | 161 | extern int crush_get_bucket_item_weight(const struct crush_bucket *b, int pos); |
172 | extern void crush_calc_parents(struct crush_map *map); | ||
173 | extern void crush_destroy_bucket_uniform(struct crush_bucket_uniform *b); | 162 | extern void crush_destroy_bucket_uniform(struct crush_bucket_uniform *b); |
174 | extern void crush_destroy_bucket_list(struct crush_bucket_list *b); | 163 | extern void crush_destroy_bucket_list(struct crush_bucket_list *b); |
175 | extern void crush_destroy_bucket_tree(struct crush_bucket_tree *b); | 164 | extern void crush_destroy_bucket_tree(struct crush_bucket_tree *b); |
@@ -177,4 +166,9 @@ extern void crush_destroy_bucket_straw(struct crush_bucket_straw *b); | |||
177 | extern void crush_destroy_bucket(struct crush_bucket *b); | 166 | extern void crush_destroy_bucket(struct crush_bucket *b); |
178 | extern void crush_destroy(struct crush_map *map); | 167 | extern void crush_destroy(struct crush_map *map); |
179 | 168 | ||
169 | static inline int crush_calc_tree_node(int i) | ||
170 | { | ||
171 | return ((i+1) << 1)-1; | ||
172 | } | ||
173 | |||
180 | #endif | 174 | #endif |
diff --git a/include/linux/crush/mapper.h b/include/linux/crush/mapper.h index c46b99c18bb0..71d79f44a7d0 100644 --- a/include/linux/crush/mapper.h +++ b/include/linux/crush/mapper.h | |||
@@ -10,11 +10,10 @@ | |||
10 | 10 | ||
11 | #include "crush.h" | 11 | #include "crush.h" |
12 | 12 | ||
13 | extern int crush_find_rule(struct crush_map *map, int pool, int type, int size); | 13 | extern int crush_find_rule(const struct crush_map *map, int ruleset, int type, int size); |
14 | extern int crush_do_rule(struct crush_map *map, | 14 | extern int crush_do_rule(const struct crush_map *map, |
15 | int ruleno, | 15 | int ruleno, |
16 | int x, int *result, int result_max, | 16 | int x, int *result, int result_max, |
17 | int forcefeed, /* -1 for none */ | 17 | const __u32 *weights); |
18 | __u32 *weights); | ||
19 | 18 | ||
20 | #endif | 19 | #endif |
diff --git a/include/linux/debugfs.h b/include/linux/debugfs.h index ae36b72c22f3..66c434f5dd1e 100644 --- a/include/linux/debugfs.h +++ b/include/linux/debugfs.h | |||
@@ -93,6 +93,10 @@ struct dentry *debugfs_create_regset32(const char *name, umode_t mode, | |||
93 | int debugfs_print_regs32(struct seq_file *s, const struct debugfs_reg32 *regs, | 93 | int debugfs_print_regs32(struct seq_file *s, const struct debugfs_reg32 *regs, |
94 | int nregs, void __iomem *base, char *prefix); | 94 | int nregs, void __iomem *base, char *prefix); |
95 | 95 | ||
96 | struct dentry *debugfs_create_u32_array(const char *name, umode_t mode, | ||
97 | struct dentry *parent, | ||
98 | u32 *array, u32 elements); | ||
99 | |||
96 | bool debugfs_initialized(void); | 100 | bool debugfs_initialized(void); |
97 | 101 | ||
98 | #else | 102 | #else |
@@ -219,6 +223,13 @@ static inline bool debugfs_initialized(void) | |||
219 | return false; | 223 | return false; |
220 | } | 224 | } |
221 | 225 | ||
226 | static inline struct dentry *debugfs_create_u32_array(const char *name, umode_t mode, | ||
227 | struct dentry *parent, | ||
228 | u32 *array, u32 elements) | ||
229 | { | ||
230 | return ERR_PTR(-ENODEV); | ||
231 | } | ||
232 | |||
222 | #endif | 233 | #endif |
223 | 234 | ||
224 | #endif | 235 | #endif |
diff --git a/include/linux/device.h b/include/linux/device.h index e04f5776f6d0..161d96241b1b 100644 --- a/include/linux/device.h +++ b/include/linux/device.h | |||
@@ -667,6 +667,10 @@ struct device { | |||
667 | 667 | ||
668 | struct dma_coherent_mem *dma_mem; /* internal for coherent mem | 668 | struct dma_coherent_mem *dma_mem; /* internal for coherent mem |
669 | override */ | 669 | override */ |
670 | #ifdef CONFIG_CMA | ||
671 | struct cma *cma_area; /* contiguous memory area for dma | ||
672 | allocations */ | ||
673 | #endif | ||
670 | /* arch specific additions */ | 674 | /* arch specific additions */ |
671 | struct dev_archdata archdata; | 675 | struct dev_archdata archdata; |
672 | 676 | ||
diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h index 3efbfc2145c3..eb48f3816df9 100644 --- a/include/linux/dma-buf.h +++ b/include/linux/dma-buf.h | |||
@@ -61,6 +61,13 @@ struct dma_buf_attachment; | |||
61 | * This Callback must not sleep. | 61 | * This Callback must not sleep. |
62 | * @kmap: maps a page from the buffer into kernel address space. | 62 | * @kmap: maps a page from the buffer into kernel address space. |
63 | * @kunmap: [optional] unmaps a page from the buffer. | 63 | * @kunmap: [optional] unmaps a page from the buffer. |
64 | * @mmap: used to expose the backing storage to userspace. Note that the | ||
65 | * mapping needs to be coherent - if the exporter doesn't directly | ||
66 | * support this, it needs to fake coherency by shooting down any ptes | ||
67 | * when transitioning away from the cpu domain. | ||
68 | * @vmap: [optional] creates a virtual mapping for the buffer into kernel | ||
69 | * address space. Same restrictions as for vmap and friends apply. | ||
70 | * @vunmap: [optional] unmaps a vmap from the buffer | ||
64 | */ | 71 | */ |
65 | struct dma_buf_ops { | 72 | struct dma_buf_ops { |
66 | int (*attach)(struct dma_buf *, struct device *, | 73 | int (*attach)(struct dma_buf *, struct device *, |
@@ -92,6 +99,11 @@ struct dma_buf_ops { | |||
92 | void (*kunmap_atomic)(struct dma_buf *, unsigned long, void *); | 99 | void (*kunmap_atomic)(struct dma_buf *, unsigned long, void *); |
93 | void *(*kmap)(struct dma_buf *, unsigned long); | 100 | void *(*kmap)(struct dma_buf *, unsigned long); |
94 | void (*kunmap)(struct dma_buf *, unsigned long, void *); | 101 | void (*kunmap)(struct dma_buf *, unsigned long, void *); |
102 | |||
103 | int (*mmap)(struct dma_buf *, struct vm_area_struct *vma); | ||
104 | |||
105 | void *(*vmap)(struct dma_buf *); | ||
106 | void (*vunmap)(struct dma_buf *, void *vaddr); | ||
95 | }; | 107 | }; |
96 | 108 | ||
97 | /** | 109 | /** |
@@ -167,6 +179,11 @@ void *dma_buf_kmap_atomic(struct dma_buf *, unsigned long); | |||
167 | void dma_buf_kunmap_atomic(struct dma_buf *, unsigned long, void *); | 179 | void dma_buf_kunmap_atomic(struct dma_buf *, unsigned long, void *); |
168 | void *dma_buf_kmap(struct dma_buf *, unsigned long); | 180 | void *dma_buf_kmap(struct dma_buf *, unsigned long); |
169 | void dma_buf_kunmap(struct dma_buf *, unsigned long, void *); | 181 | void dma_buf_kunmap(struct dma_buf *, unsigned long, void *); |
182 | |||
183 | int dma_buf_mmap(struct dma_buf *, struct vm_area_struct *, | ||
184 | unsigned long); | ||
185 | void *dma_buf_vmap(struct dma_buf *); | ||
186 | void dma_buf_vunmap(struct dma_buf *, void *vaddr); | ||
170 | #else | 187 | #else |
171 | 188 | ||
172 | static inline struct dma_buf_attachment *dma_buf_attach(struct dma_buf *dmabuf, | 189 | static inline struct dma_buf_attachment *dma_buf_attach(struct dma_buf *dmabuf, |
@@ -248,6 +265,22 @@ static inline void dma_buf_kunmap(struct dma_buf *dmabuf, | |||
248 | unsigned long pnum, void *vaddr) | 265 | unsigned long pnum, void *vaddr) |
249 | { | 266 | { |
250 | } | 267 | } |
268 | |||
269 | static inline int dma_buf_mmap(struct dma_buf *dmabuf, | ||
270 | struct vm_area_struct *vma, | ||
271 | unsigned long pgoff) | ||
272 | { | ||
273 | return -ENODEV; | ||
274 | } | ||
275 | |||
276 | static inline void *dma_buf_vmap(struct dma_buf *dmabuf) | ||
277 | { | ||
278 | return NULL; | ||
279 | } | ||
280 | |||
281 | static inline void dma_buf_vunmap(struct dma_buf *dmabuf, void *vaddr) | ||
282 | { | ||
283 | } | ||
251 | #endif /* CONFIG_DMA_SHARED_BUFFER */ | 284 | #endif /* CONFIG_DMA_SHARED_BUFFER */ |
252 | 285 | ||
253 | #endif /* __DMA_BUF_H__ */ | 286 | #endif /* __DMA_BUF_H__ */ |
diff --git a/include/linux/dma-contiguous.h b/include/linux/dma-contiguous.h new file mode 100644 index 000000000000..2f303e4b7ed3 --- /dev/null +++ b/include/linux/dma-contiguous.h | |||
@@ -0,0 +1,110 @@ | |||
1 | #ifndef __LINUX_CMA_H | ||
2 | #define __LINUX_CMA_H | ||
3 | |||
4 | /* | ||
5 | * Contiguous Memory Allocator for DMA mapping framework | ||
6 | * Copyright (c) 2010-2011 by Samsung Electronics. | ||
7 | * Written by: | ||
8 | * Marek Szyprowski <m.szyprowski@samsung.com> | ||
9 | * Michal Nazarewicz <mina86@mina86.com> | ||
10 | * | ||
11 | * This program is free software; you can redistribute it and/or | ||
12 | * modify it under the terms of the GNU General Public License as | ||
13 | * published by the Free Software Foundation; either version 2 of the | ||
14 | * License or (at your optional) any later version of the license. | ||
15 | */ | ||
16 | |||
17 | /* | ||
18 | * Contiguous Memory Allocator | ||
19 | * | ||
20 | * The Contiguous Memory Allocator (CMA) makes it possible to | ||
21 | * allocate big contiguous chunks of memory after the system has | ||
22 | * booted. | ||
23 | * | ||
24 | * Why is it needed? | ||
25 | * | ||
26 | * Various devices on embedded systems have no scatter-getter and/or | ||
27 | * IO map support and require contiguous blocks of memory to | ||
28 | * operate. They include devices such as cameras, hardware video | ||
29 | * coders, etc. | ||
30 | * | ||
31 | * Such devices often require big memory buffers (a full HD frame | ||
32 | * is, for instance, more then 2 mega pixels large, i.e. more than 6 | ||
33 | * MB of memory), which makes mechanisms such as kmalloc() or | ||
34 | * alloc_page() ineffective. | ||
35 | * | ||
36 | * At the same time, a solution where a big memory region is | ||
37 | * reserved for a device is suboptimal since often more memory is | ||
38 | * reserved then strictly required and, moreover, the memory is | ||
39 | * inaccessible to page system even if device drivers don't use it. | ||
40 | * | ||
41 | * CMA tries to solve this issue by operating on memory regions | ||
42 | * where only movable pages can be allocated from. This way, kernel | ||
43 | * can use the memory for pagecache and when device driver requests | ||
44 | * it, allocated pages can be migrated. | ||
45 | * | ||
46 | * Driver usage | ||
47 | * | ||
48 | * CMA should not be used by the device drivers directly. It is | ||
49 | * only a helper framework for dma-mapping subsystem. | ||
50 | * | ||
51 | * For more information, see kernel-docs in drivers/base/dma-contiguous.c | ||
52 | */ | ||
53 | |||
54 | #ifdef __KERNEL__ | ||
55 | |||
56 | struct cma; | ||
57 | struct page; | ||
58 | struct device; | ||
59 | |||
60 | #ifdef CONFIG_CMA | ||
61 | |||
62 | /* | ||
63 | * There is always at least global CMA area and a few optional device | ||
64 | * private areas configured in kernel .config. | ||
65 | */ | ||
66 | #define MAX_CMA_AREAS (1 + CONFIG_CMA_AREAS) | ||
67 | |||
68 | extern struct cma *dma_contiguous_default_area; | ||
69 | |||
70 | void dma_contiguous_reserve(phys_addr_t addr_limit); | ||
71 | int dma_declare_contiguous(struct device *dev, unsigned long size, | ||
72 | phys_addr_t base, phys_addr_t limit); | ||
73 | |||
74 | struct page *dma_alloc_from_contiguous(struct device *dev, int count, | ||
75 | unsigned int order); | ||
76 | bool dma_release_from_contiguous(struct device *dev, struct page *pages, | ||
77 | int count); | ||
78 | |||
79 | #else | ||
80 | |||
81 | #define MAX_CMA_AREAS (0) | ||
82 | |||
83 | static inline void dma_contiguous_reserve(phys_addr_t limit) { } | ||
84 | |||
85 | static inline | ||
86 | int dma_declare_contiguous(struct device *dev, unsigned long size, | ||
87 | phys_addr_t base, phys_addr_t limit) | ||
88 | { | ||
89 | return -ENOSYS; | ||
90 | } | ||
91 | |||
92 | static inline | ||
93 | struct page *dma_alloc_from_contiguous(struct device *dev, int count, | ||
94 | unsigned int order) | ||
95 | { | ||
96 | return NULL; | ||
97 | } | ||
98 | |||
99 | static inline | ||
100 | bool dma_release_from_contiguous(struct device *dev, struct page *pages, | ||
101 | int count) | ||
102 | { | ||
103 | return false; | ||
104 | } | ||
105 | |||
106 | #endif | ||
107 | |||
108 | #endif | ||
109 | |||
110 | #endif | ||
diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h index f9a2e5e67a54..56377df39124 100644 --- a/include/linux/dmaengine.h +++ b/include/linux/dmaengine.h | |||
@@ -615,11 +615,13 @@ static inline int dmaengine_slave_config(struct dma_chan *chan, | |||
615 | } | 615 | } |
616 | 616 | ||
617 | static inline struct dma_async_tx_descriptor *dmaengine_prep_slave_single( | 617 | static inline struct dma_async_tx_descriptor *dmaengine_prep_slave_single( |
618 | struct dma_chan *chan, void *buf, size_t len, | 618 | struct dma_chan *chan, dma_addr_t buf, size_t len, |
619 | enum dma_transfer_direction dir, unsigned long flags) | 619 | enum dma_transfer_direction dir, unsigned long flags) |
620 | { | 620 | { |
621 | struct scatterlist sg; | 621 | struct scatterlist sg; |
622 | sg_init_one(&sg, buf, len); | 622 | sg_init_table(&sg, 1); |
623 | sg_dma_address(&sg) = buf; | ||
624 | sg_dma_len(&sg) = len; | ||
623 | 625 | ||
624 | return chan->device->device_prep_slave_sg(chan, &sg, 1, | 626 | return chan->device->device_prep_slave_sg(chan, &sg, 1, |
625 | dir, flags, NULL); | 627 | dir, flags, NULL); |
@@ -633,6 +635,18 @@ static inline struct dma_async_tx_descriptor *dmaengine_prep_slave_sg( | |||
633 | dir, flags, NULL); | 635 | dir, flags, NULL); |
634 | } | 636 | } |
635 | 637 | ||
638 | #ifdef CONFIG_RAPIDIO_DMA_ENGINE | ||
639 | struct rio_dma_ext; | ||
640 | static inline struct dma_async_tx_descriptor *dmaengine_prep_rio_sg( | ||
641 | struct dma_chan *chan, struct scatterlist *sgl, unsigned int sg_len, | ||
642 | enum dma_transfer_direction dir, unsigned long flags, | ||
643 | struct rio_dma_ext *rio_ext) | ||
644 | { | ||
645 | return chan->device->device_prep_slave_sg(chan, sgl, sg_len, | ||
646 | dir, flags, rio_ext); | ||
647 | } | ||
648 | #endif | ||
649 | |||
636 | static inline struct dma_async_tx_descriptor *dmaengine_prep_dma_cyclic( | 650 | static inline struct dma_async_tx_descriptor *dmaengine_prep_dma_cyclic( |
637 | struct dma_chan *chan, dma_addr_t buf_addr, size_t buf_len, | 651 | struct dma_chan *chan, dma_addr_t buf_addr, size_t buf_len, |
638 | size_t period_len, enum dma_transfer_direction dir) | 652 | size_t period_len, enum dma_transfer_direction dir) |
diff --git a/include/linux/drbd.h b/include/linux/drbd.h index 9e5f5607eba3..47e3d4850584 100644 --- a/include/linux/drbd.h +++ b/include/linux/drbd.h | |||
@@ -53,7 +53,7 @@ | |||
53 | 53 | ||
54 | 54 | ||
55 | extern const char *drbd_buildtag(void); | 55 | extern const char *drbd_buildtag(void); |
56 | #define REL_VERSION "8.3.11" | 56 | #define REL_VERSION "8.3.13" |
57 | #define API_VERSION 88 | 57 | #define API_VERSION 88 |
58 | #define PRO_VERSION_MIN 86 | 58 | #define PRO_VERSION_MIN 86 |
59 | #define PRO_VERSION_MAX 96 | 59 | #define PRO_VERSION_MAX 96 |
@@ -112,8 +112,8 @@ enum drbd_ret_code { | |||
112 | ERR_OPEN_MD_DISK = 105, | 112 | ERR_OPEN_MD_DISK = 105, |
113 | ERR_DISK_NOT_BDEV = 107, | 113 | ERR_DISK_NOT_BDEV = 107, |
114 | ERR_MD_NOT_BDEV = 108, | 114 | ERR_MD_NOT_BDEV = 108, |
115 | ERR_DISK_TO_SMALL = 111, | 115 | ERR_DISK_TOO_SMALL = 111, |
116 | ERR_MD_DISK_TO_SMALL = 112, | 116 | ERR_MD_DISK_TOO_SMALL = 112, |
117 | ERR_BDCLAIM_DISK = 114, | 117 | ERR_BDCLAIM_DISK = 114, |
118 | ERR_BDCLAIM_MD_DISK = 115, | 118 | ERR_BDCLAIM_MD_DISK = 115, |
119 | ERR_MD_IDX_INVALID = 116, | 119 | ERR_MD_IDX_INVALID = 116, |
diff --git a/include/linux/drbd_limits.h b/include/linux/drbd_limits.h index 447c36752385..fb670bf603f7 100644 --- a/include/linux/drbd_limits.h +++ b/include/linux/drbd_limits.h | |||
@@ -48,6 +48,11 @@ | |||
48 | #define DRBD_TIMEOUT_MAX 600 | 48 | #define DRBD_TIMEOUT_MAX 600 |
49 | #define DRBD_TIMEOUT_DEF 60 /* 6 seconds */ | 49 | #define DRBD_TIMEOUT_DEF 60 /* 6 seconds */ |
50 | 50 | ||
51 | /* If backing disk takes longer than disk_timeout, mark the disk as failed */ | ||
52 | #define DRBD_DISK_TIMEOUT_MIN 0 /* 0 = disabled */ | ||
53 | #define DRBD_DISK_TIMEOUT_MAX 6000 /* 10 Minutes */ | ||
54 | #define DRBD_DISK_TIMEOUT_DEF 0 /* disabled */ | ||
55 | |||
51 | /* active connection retries when C_WF_CONNECTION */ | 56 | /* active connection retries when C_WF_CONNECTION */ |
52 | #define DRBD_CONNECT_INT_MIN 1 | 57 | #define DRBD_CONNECT_INT_MIN 1 |
53 | #define DRBD_CONNECT_INT_MAX 120 | 58 | #define DRBD_CONNECT_INT_MAX 120 |
@@ -60,7 +65,7 @@ | |||
60 | 65 | ||
61 | /* timeout for the ping packets.*/ | 66 | /* timeout for the ping packets.*/ |
62 | #define DRBD_PING_TIMEO_MIN 1 | 67 | #define DRBD_PING_TIMEO_MIN 1 |
63 | #define DRBD_PING_TIMEO_MAX 100 | 68 | #define DRBD_PING_TIMEO_MAX 300 |
64 | #define DRBD_PING_TIMEO_DEF 5 | 69 | #define DRBD_PING_TIMEO_DEF 5 |
65 | 70 | ||
66 | /* max number of write requests between write barriers */ | 71 | /* max number of write requests between write barriers */ |
diff --git a/include/linux/drbd_nl.h b/include/linux/drbd_nl.h index ab6159e4fcf0..a8706f08ab36 100644 --- a/include/linux/drbd_nl.h +++ b/include/linux/drbd_nl.h | |||
@@ -31,9 +31,12 @@ NL_PACKET(disk_conf, 3, | |||
31 | NL_INTEGER( 56, T_MAY_IGNORE, max_bio_bvecs) | 31 | NL_INTEGER( 56, T_MAY_IGNORE, max_bio_bvecs) |
32 | NL_BIT( 57, T_MAY_IGNORE, no_disk_barrier) | 32 | NL_BIT( 57, T_MAY_IGNORE, no_disk_barrier) |
33 | NL_BIT( 58, T_MAY_IGNORE, no_disk_drain) | 33 | NL_BIT( 58, T_MAY_IGNORE, no_disk_drain) |
34 | NL_INTEGER( 89, T_MAY_IGNORE, disk_timeout) | ||
34 | ) | 35 | ) |
35 | 36 | ||
36 | NL_PACKET(detach, 4, ) | 37 | NL_PACKET(detach, 4, |
38 | NL_BIT( 88, T_MANDATORY, detach_force) | ||
39 | ) | ||
37 | 40 | ||
38 | NL_PACKET(net_conf, 5, | 41 | NL_PACKET(net_conf, 5, |
39 | NL_STRING( 8, T_MANDATORY, my_addr, 128) | 42 | NL_STRING( 8, T_MANDATORY, my_addr, 128) |
diff --git a/include/linux/dvb/frontend.h b/include/linux/dvb/frontend.h index cb4428ab81ed..f50d4058c5fb 100644 --- a/include/linux/dvb/frontend.h +++ b/include/linux/dvb/frontend.h | |||
@@ -320,7 +320,24 @@ struct dvb_frontend_event { | |||
320 | 320 | ||
321 | #define DTV_ENUM_DELSYS 44 | 321 | #define DTV_ENUM_DELSYS 44 |
322 | 322 | ||
323 | #define DTV_MAX_COMMAND DTV_ENUM_DELSYS | 323 | /* ATSC-MH */ |
324 | #define DTV_ATSCMH_FIC_VER 45 | ||
325 | #define DTV_ATSCMH_PARADE_ID 46 | ||
326 | #define DTV_ATSCMH_NOG 47 | ||
327 | #define DTV_ATSCMH_TNOG 48 | ||
328 | #define DTV_ATSCMH_SGN 49 | ||
329 | #define DTV_ATSCMH_PRC 50 | ||
330 | #define DTV_ATSCMH_RS_FRAME_MODE 51 | ||
331 | #define DTV_ATSCMH_RS_FRAME_ENSEMBLE 52 | ||
332 | #define DTV_ATSCMH_RS_CODE_MODE_PRI 53 | ||
333 | #define DTV_ATSCMH_RS_CODE_MODE_SEC 54 | ||
334 | #define DTV_ATSCMH_SCCC_BLOCK_MODE 55 | ||
335 | #define DTV_ATSCMH_SCCC_CODE_MODE_A 56 | ||
336 | #define DTV_ATSCMH_SCCC_CODE_MODE_B 57 | ||
337 | #define DTV_ATSCMH_SCCC_CODE_MODE_C 58 | ||
338 | #define DTV_ATSCMH_SCCC_CODE_MODE_D 59 | ||
339 | |||
340 | #define DTV_MAX_COMMAND DTV_ATSCMH_SCCC_CODE_MODE_D | ||
324 | 341 | ||
325 | typedef enum fe_pilot { | 342 | typedef enum fe_pilot { |
326 | PILOT_ON, | 343 | PILOT_ON, |
@@ -360,6 +377,38 @@ typedef enum fe_delivery_system { | |||
360 | 377 | ||
361 | #define SYS_DVBC_ANNEX_AC SYS_DVBC_ANNEX_A | 378 | #define SYS_DVBC_ANNEX_AC SYS_DVBC_ANNEX_A |
362 | 379 | ||
380 | /* ATSC-MH */ | ||
381 | |||
382 | enum atscmh_sccc_block_mode { | ||
383 | ATSCMH_SCCC_BLK_SEP = 0, | ||
384 | ATSCMH_SCCC_BLK_COMB = 1, | ||
385 | ATSCMH_SCCC_BLK_RES = 2, | ||
386 | }; | ||
387 | |||
388 | enum atscmh_sccc_code_mode { | ||
389 | ATSCMH_SCCC_CODE_HLF = 0, | ||
390 | ATSCMH_SCCC_CODE_QTR = 1, | ||
391 | ATSCMH_SCCC_CODE_RES = 2, | ||
392 | }; | ||
393 | |||
394 | enum atscmh_rs_frame_ensemble { | ||
395 | ATSCMH_RSFRAME_ENS_PRI = 0, | ||
396 | ATSCMH_RSFRAME_ENS_SEC = 1, | ||
397 | }; | ||
398 | |||
399 | enum atscmh_rs_frame_mode { | ||
400 | ATSCMH_RSFRAME_PRI_ONLY = 0, | ||
401 | ATSCMH_RSFRAME_PRI_SEC = 1, | ||
402 | ATSCMH_RSFRAME_RES = 2, | ||
403 | }; | ||
404 | |||
405 | enum atscmh_rs_code_mode { | ||
406 | ATSCMH_RSCODE_211_187 = 0, | ||
407 | ATSCMH_RSCODE_223_187 = 1, | ||
408 | ATSCMH_RSCODE_235_187 = 2, | ||
409 | ATSCMH_RSCODE_RES = 3, | ||
410 | }; | ||
411 | |||
363 | 412 | ||
364 | struct dtv_cmds_h { | 413 | struct dtv_cmds_h { |
365 | char *name; /* A display name for debugging purposes */ | 414 | char *name; /* A display name for debugging purposes */ |
diff --git a/include/linux/dvb/version.h b/include/linux/dvb/version.h index 0559e2bd38f9..43d9e8d462d4 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 5 | 27 | #define DVB_API_VERSION_MINOR 6 |
28 | 28 | ||
29 | #endif /*_DVBVERSION_H_*/ | 29 | #endif /*_DVBVERSION_H_*/ |
diff --git a/include/linux/edac.h b/include/linux/edac.h index c621d762bb2c..91ba3bae42ee 100644 --- a/include/linux/edac.h +++ b/include/linux/edac.h | |||
@@ -71,6 +71,25 @@ enum dev_type { | |||
71 | #define DEV_FLAG_X64 BIT(DEV_X64) | 71 | #define DEV_FLAG_X64 BIT(DEV_X64) |
72 | 72 | ||
73 | /** | 73 | /** |
74 | * enum hw_event_mc_err_type - type of the detected error | ||
75 | * | ||
76 | * @HW_EVENT_ERR_CORRECTED: Corrected Error - Indicates that an ECC | ||
77 | * corrected error was detected | ||
78 | * @HW_EVENT_ERR_UNCORRECTED: Uncorrected Error - Indicates an error that | ||
79 | * can't be corrected by ECC, but it is not | ||
80 | * fatal (maybe it is on an unused memory area, | ||
81 | * or the memory controller could recover from | ||
82 | * it for example, by re-trying the operation). | ||
83 | * @HW_EVENT_ERR_FATAL: Fatal Error - Uncorrected error that could not | ||
84 | * be recovered. | ||
85 | */ | ||
86 | enum hw_event_mc_err_type { | ||
87 | HW_EVENT_ERR_CORRECTED, | ||
88 | HW_EVENT_ERR_UNCORRECTED, | ||
89 | HW_EVENT_ERR_FATAL, | ||
90 | }; | ||
91 | |||
92 | /** | ||
74 | * enum mem_type - memory types. For a more detailed reference, please see | 93 | * enum mem_type - memory types. For a more detailed reference, please see |
75 | * http://en.wikipedia.org/wiki/DRAM | 94 | * http://en.wikipedia.org/wiki/DRAM |
76 | * | 95 | * |
@@ -313,38 +332,141 @@ enum scrub_type { | |||
313 | */ | 332 | */ |
314 | 333 | ||
315 | /** | 334 | /** |
335 | * enum edac_mc_layer - memory controller hierarchy layer | ||
336 | * | ||
337 | * @EDAC_MC_LAYER_BRANCH: memory layer is named "branch" | ||
338 | * @EDAC_MC_LAYER_CHANNEL: memory layer is named "channel" | ||
339 | * @EDAC_MC_LAYER_SLOT: memory layer is named "slot" | ||
340 | * @EDAC_MC_LAYER_CHIP_SELECT: memory layer is named "chip select" | ||
341 | * | ||
342 | * This enum is used by the drivers to tell edac_mc_sysfs what name should | ||
343 | * be used when describing a memory stick location. | ||
344 | */ | ||
345 | enum edac_mc_layer_type { | ||
346 | EDAC_MC_LAYER_BRANCH, | ||
347 | EDAC_MC_LAYER_CHANNEL, | ||
348 | EDAC_MC_LAYER_SLOT, | ||
349 | EDAC_MC_LAYER_CHIP_SELECT, | ||
350 | }; | ||
351 | |||
352 | /** | ||
353 | * struct edac_mc_layer - describes the memory controller hierarchy | ||
354 | * @layer: layer type | ||
355 | * @size: number of components per layer. For example, | ||
356 | * if the channel layer has two channels, size = 2 | ||
357 | * @is_virt_csrow: This layer is part of the "csrow" when old API | ||
358 | * compatibility mode is enabled. Otherwise, it is | ||
359 | * a channel | ||
360 | */ | ||
361 | struct edac_mc_layer { | ||
362 | enum edac_mc_layer_type type; | ||
363 | unsigned size; | ||
364 | bool is_virt_csrow; | ||
365 | }; | ||
366 | |||
367 | /* | ||
368 | * Maximum number of layers used by the memory controller to uniquely | ||
369 | * identify a single memory stick. | ||
370 | * NOTE: Changing this constant requires not only to change the constant | ||
371 | * below, but also to change the existing code at the core, as there are | ||
372 | * some code there that are optimized for 3 layers. | ||
373 | */ | ||
374 | #define EDAC_MAX_LAYERS 3 | ||
375 | |||
376 | /** | ||
377 | * EDAC_DIMM_PTR - Macro responsible to find a pointer inside a pointer array | ||
378 | * for the element given by [layer0,layer1,layer2] position | ||
379 | * | ||
380 | * @layers: a struct edac_mc_layer array, describing how many elements | ||
381 | * were allocated for each layer | ||
382 | * @var: name of the var where we want to get the pointer | ||
383 | * (like mci->dimms) | ||
384 | * @n_layers: Number of layers at the @layers array | ||
385 | * @layer0: layer0 position | ||
386 | * @layer1: layer1 position. Unused if n_layers < 2 | ||
387 | * @layer2: layer2 position. Unused if n_layers < 3 | ||
388 | * | ||
389 | * For 1 layer, this macro returns &var[layer0] | ||
390 | * For 2 layers, this macro is similar to allocate a bi-dimensional array | ||
391 | * and to return "&var[layer0][layer1]" | ||
392 | * For 3 layers, this macro is similar to allocate a tri-dimensional array | ||
393 | * and to return "&var[layer0][layer1][layer2]" | ||
394 | * | ||
395 | * A loop could be used here to make it more generic, but, as we only have | ||
396 | * 3 layers, this is a little faster. | ||
397 | * By design, layers can never be 0 or more than 3. If that ever happens, | ||
398 | * a NULL is returned, causing an OOPS during the memory allocation routine, | ||
399 | * with would point to the developer that he's doing something wrong. | ||
400 | */ | ||
401 | #define EDAC_DIMM_PTR(layers, var, nlayers, layer0, layer1, layer2) ({ \ | ||
402 | typeof(var) __p; \ | ||
403 | if ((nlayers) == 1) \ | ||
404 | __p = &var[layer0]; \ | ||
405 | else if ((nlayers) == 2) \ | ||
406 | __p = &var[(layer1) + ((layers[1]).size * (layer0))]; \ | ||
407 | else if ((nlayers) == 3) \ | ||
408 | __p = &var[(layer2) + ((layers[2]).size * ((layer1) + \ | ||
409 | ((layers[1]).size * (layer0))))]; \ | ||
410 | else \ | ||
411 | __p = NULL; \ | ||
412 | __p; \ | ||
413 | }) | ||
414 | |||
415 | |||
416 | /* FIXME: add the proper per-location error counts */ | ||
417 | struct dimm_info { | ||
418 | char label[EDAC_MC_LABEL_LEN + 1]; /* DIMM label on motherboard */ | ||
419 | |||
420 | /* Memory location data */ | ||
421 | unsigned location[EDAC_MAX_LAYERS]; | ||
422 | |||
423 | struct mem_ctl_info *mci; /* the parent */ | ||
424 | |||
425 | u32 grain; /* granularity of reported error in bytes */ | ||
426 | enum dev_type dtype; /* memory device type */ | ||
427 | enum mem_type mtype; /* memory dimm type */ | ||
428 | enum edac_type edac_mode; /* EDAC mode for this dimm */ | ||
429 | |||
430 | u32 nr_pages; /* number of pages on this dimm */ | ||
431 | |||
432 | unsigned csrow, cschannel; /* Points to the old API data */ | ||
433 | }; | ||
434 | |||
435 | /** | ||
316 | * struct rank_info - contains the information for one DIMM rank | 436 | * struct rank_info - contains the information for one DIMM rank |
317 | * | 437 | * |
318 | * @chan_idx: channel number where the rank is (typically, 0 or 1) | 438 | * @chan_idx: channel number where the rank is (typically, 0 or 1) |
319 | * @ce_count: number of correctable errors for this rank | 439 | * @ce_count: number of correctable errors for this rank |
320 | * @label: DIMM label. Different ranks for the same DIMM should be | ||
321 | * filled, on userspace, with the same label. | ||
322 | * FIXME: The core currently won't enforce it. | ||
323 | * @csrow: A pointer to the chip select row structure (the parent | 440 | * @csrow: A pointer to the chip select row structure (the parent |
324 | * structure). The location of the rank is given by | 441 | * structure). The location of the rank is given by |
325 | * the (csrow->csrow_idx, chan_idx) vector. | 442 | * the (csrow->csrow_idx, chan_idx) vector. |
443 | * @dimm: A pointer to the DIMM structure, where the DIMM label | ||
444 | * information is stored. | ||
445 | * | ||
446 | * FIXME: Currently, the EDAC core model will assume one DIMM per rank. | ||
447 | * This is a bad assumption, but it makes this patch easier. Later | ||
448 | * patches in this series will fix this issue. | ||
326 | */ | 449 | */ |
327 | struct rank_info { | 450 | struct rank_info { |
328 | int chan_idx; | 451 | int chan_idx; |
329 | u32 ce_count; | 452 | struct csrow_info *csrow; |
330 | char label[EDAC_MC_LABEL_LEN + 1]; | 453 | struct dimm_info *dimm; |
331 | struct csrow_info *csrow; /* the parent */ | 454 | |
455 | u32 ce_count; /* Correctable Errors for this csrow */ | ||
332 | }; | 456 | }; |
333 | 457 | ||
334 | struct csrow_info { | 458 | struct csrow_info { |
335 | unsigned long first_page; /* first page number in dimm */ | 459 | /* Used only by edac_mc_find_csrow_by_page() */ |
336 | unsigned long last_page; /* last page number in dimm */ | 460 | unsigned long first_page; /* first page number in csrow */ |
461 | unsigned long last_page; /* last page number in csrow */ | ||
337 | unsigned long page_mask; /* used for interleaving - | 462 | unsigned long page_mask; /* used for interleaving - |
338 | * 0UL for non intlv | 463 | * 0UL for non intlv */ |
339 | */ | 464 | |
340 | u32 nr_pages; /* number of pages in csrow */ | 465 | int csrow_idx; /* the chip-select row */ |
341 | u32 grain; /* granularity of reported error in bytes */ | 466 | |
342 | int csrow_idx; /* the chip-select row */ | ||
343 | enum dev_type dtype; /* memory device type */ | ||
344 | u32 ue_count; /* Uncorrectable Errors for this csrow */ | 467 | u32 ue_count; /* Uncorrectable Errors for this csrow */ |
345 | u32 ce_count; /* Correctable Errors for this csrow */ | 468 | u32 ce_count; /* Correctable Errors for this csrow */ |
346 | enum mem_type mtype; /* memory csrow type */ | 469 | |
347 | enum edac_type edac_mode; /* EDAC mode for this csrow */ | ||
348 | struct mem_ctl_info *mci; /* the parent */ | 470 | struct mem_ctl_info *mci; /* the parent */ |
349 | 471 | ||
350 | struct kobject kobj; /* sysfs kobject for this csrow */ | 472 | struct kobject kobj; /* sysfs kobject for this csrow */ |
@@ -426,8 +548,20 @@ struct mem_ctl_info { | |||
426 | unsigned long (*ctl_page_to_phys) (struct mem_ctl_info * mci, | 548 | unsigned long (*ctl_page_to_phys) (struct mem_ctl_info * mci, |
427 | unsigned long page); | 549 | unsigned long page); |
428 | int mc_idx; | 550 | int mc_idx; |
429 | int nr_csrows; | ||
430 | struct csrow_info *csrows; | 551 | struct csrow_info *csrows; |
552 | unsigned nr_csrows, num_cschannel; | ||
553 | |||
554 | /* Memory Controller hierarchy */ | ||
555 | unsigned n_layers; | ||
556 | struct edac_mc_layer *layers; | ||
557 | bool mem_is_per_rank; | ||
558 | |||
559 | /* | ||
560 | * DIMM info. Will eventually remove the entire csrows_info some day | ||
561 | */ | ||
562 | unsigned tot_dimms; | ||
563 | struct dimm_info *dimms; | ||
564 | |||
431 | /* | 565 | /* |
432 | * FIXME - what about controllers on other busses? - IDs must be | 566 | * FIXME - what about controllers on other busses? - IDs must be |
433 | * unique. dev pointer should be sufficiently unique, but | 567 | * unique. dev pointer should be sufficiently unique, but |
@@ -440,12 +574,16 @@ struct mem_ctl_info { | |||
440 | const char *dev_name; | 574 | const char *dev_name; |
441 | char proc_name[MC_PROC_NAME_MAX_LEN + 1]; | 575 | char proc_name[MC_PROC_NAME_MAX_LEN + 1]; |
442 | void *pvt_info; | 576 | void *pvt_info; |
443 | u32 ue_noinfo_count; /* Uncorrectable Errors w/o info */ | ||
444 | u32 ce_noinfo_count; /* Correctable Errors w/o info */ | ||
445 | u32 ue_count; /* Total Uncorrectable Errors for this MC */ | ||
446 | u32 ce_count; /* Total Correctable Errors for this MC */ | ||
447 | unsigned long start_time; /* mci load start time (in jiffies) */ | 577 | unsigned long start_time; /* mci load start time (in jiffies) */ |
448 | 578 | ||
579 | /* | ||
580 | * drivers shouldn't access those fields directly, as the core | ||
581 | * already handles that. | ||
582 | */ | ||
583 | u32 ce_noinfo_count, ue_noinfo_count; | ||
584 | u32 ue_mc, ce_mc; | ||
585 | u32 *ce_per_layer[EDAC_MAX_LAYERS], *ue_per_layer[EDAC_MAX_LAYERS]; | ||
586 | |||
449 | struct completion complete; | 587 | struct completion complete; |
450 | 588 | ||
451 | /* edac sysfs device control */ | 589 | /* edac sysfs device control */ |
@@ -458,7 +596,7 @@ struct mem_ctl_info { | |||
458 | * by the low level driver. | 596 | * by the low level driver. |
459 | * | 597 | * |
460 | * Set by the low level driver to provide attributes at the | 598 | * Set by the low level driver to provide attributes at the |
461 | * controller level, same level as 'ue_count' and 'ce_count' above. | 599 | * controller level. |
462 | * An array of structures, NULL terminated | 600 | * An array of structures, NULL terminated |
463 | * | 601 | * |
464 | * If attributes are desired, then set to array of attributes | 602 | * If attributes are desired, then set to array of attributes |
diff --git a/include/linux/elevator.h b/include/linux/elevator.h index 7d4e0356f329..c03af7687bb4 100644 --- a/include/linux/elevator.h +++ b/include/linux/elevator.h | |||
@@ -28,12 +28,13 @@ typedef int (elevator_may_queue_fn) (struct request_queue *, int); | |||
28 | 28 | ||
29 | typedef void (elevator_init_icq_fn) (struct io_cq *); | 29 | typedef void (elevator_init_icq_fn) (struct io_cq *); |
30 | typedef void (elevator_exit_icq_fn) (struct io_cq *); | 30 | typedef void (elevator_exit_icq_fn) (struct io_cq *); |
31 | typedef int (elevator_set_req_fn) (struct request_queue *, struct request *, gfp_t); | 31 | typedef int (elevator_set_req_fn) (struct request_queue *, struct request *, |
32 | struct bio *, gfp_t); | ||
32 | typedef void (elevator_put_req_fn) (struct request *); | 33 | typedef void (elevator_put_req_fn) (struct request *); |
33 | typedef void (elevator_activate_req_fn) (struct request_queue *, struct request *); | 34 | typedef void (elevator_activate_req_fn) (struct request_queue *, struct request *); |
34 | typedef void (elevator_deactivate_req_fn) (struct request_queue *, struct request *); | 35 | typedef void (elevator_deactivate_req_fn) (struct request_queue *, struct request *); |
35 | 36 | ||
36 | typedef void *(elevator_init_fn) (struct request_queue *); | 37 | typedef int (elevator_init_fn) (struct request_queue *); |
37 | typedef void (elevator_exit_fn) (struct elevator_queue *); | 38 | typedef void (elevator_exit_fn) (struct elevator_queue *); |
38 | 39 | ||
39 | struct elevator_ops | 40 | struct elevator_ops |
@@ -129,7 +130,8 @@ extern void elv_unregister_queue(struct request_queue *q); | |||
129 | extern int elv_may_queue(struct request_queue *, int); | 130 | extern int elv_may_queue(struct request_queue *, int); |
130 | extern void elv_abort_queue(struct request_queue *); | 131 | extern void elv_abort_queue(struct request_queue *); |
131 | extern void elv_completed_request(struct request_queue *, struct request *); | 132 | extern void elv_completed_request(struct request_queue *, struct request *); |
132 | extern int elv_set_request(struct request_queue *, struct request *, gfp_t); | 133 | extern int elv_set_request(struct request_queue *q, struct request *rq, |
134 | struct bio *bio, gfp_t gfp_mask); | ||
133 | extern void elv_put_request(struct request_queue *, struct request *); | 135 | extern void elv_put_request(struct request_queue *, struct request *); |
134 | extern void elv_drain_elevator(struct request_queue *); | 136 | extern void elv_drain_elevator(struct request_queue *); |
135 | 137 | ||
diff --git a/include/linux/errno.h b/include/linux/errno.h index 2d09bfa5c262..e0de516374da 100644 --- a/include/linux/errno.h +++ b/include/linux/errno.h | |||
@@ -17,6 +17,7 @@ | |||
17 | #define ENOIOCTLCMD 515 /* No ioctl command */ | 17 | #define ENOIOCTLCMD 515 /* No ioctl command */ |
18 | #define ERESTART_RESTARTBLOCK 516 /* restart by calling sys_restart_syscall */ | 18 | #define ERESTART_RESTARTBLOCK 516 /* restart by calling sys_restart_syscall */ |
19 | #define EPROBE_DEFER 517 /* Driver requests probe retry */ | 19 | #define EPROBE_DEFER 517 /* Driver requests probe retry */ |
20 | #define EOPENSTALE 518 /* open found a stale dentry */ | ||
20 | 21 | ||
21 | /* Defined for the NFSv3 protocol */ | 22 | /* Defined for the NFSv3 protocol */ |
22 | #define EBADHANDLE 521 /* Illegal NFS file handle */ | 23 | #define EBADHANDLE 521 /* Illegal NFS file handle */ |
diff --git a/include/linux/eventfd.h b/include/linux/eventfd.h index 91bb4f27238c..3c3ef19a625a 100644 --- a/include/linux/eventfd.h +++ b/include/linux/eventfd.h | |||
@@ -34,7 +34,7 @@ void eventfd_ctx_put(struct eventfd_ctx *ctx); | |||
34 | struct file *eventfd_fget(int fd); | 34 | struct file *eventfd_fget(int fd); |
35 | struct eventfd_ctx *eventfd_ctx_fdget(int fd); | 35 | struct eventfd_ctx *eventfd_ctx_fdget(int fd); |
36 | struct eventfd_ctx *eventfd_ctx_fileget(struct file *file); | 36 | struct eventfd_ctx *eventfd_ctx_fileget(struct file *file); |
37 | int eventfd_signal(struct eventfd_ctx *ctx, int n); | 37 | __u64 eventfd_signal(struct eventfd_ctx *ctx, __u64 n); |
38 | ssize_t eventfd_ctx_read(struct eventfd_ctx *ctx, int no_wait, __u64 *cnt); | 38 | ssize_t eventfd_ctx_read(struct eventfd_ctx *ctx, int no_wait, __u64 *cnt); |
39 | int eventfd_ctx_remove_wait_queue(struct eventfd_ctx *ctx, wait_queue_t *wait, | 39 | int eventfd_ctx_remove_wait_queue(struct eventfd_ctx *ctx, wait_queue_t *wait, |
40 | __u64 *cnt); | 40 | __u64 *cnt); |
diff --git a/include/linux/exportfs.h b/include/linux/exportfs.h index 3a4cef5322dc..12291a7ee275 100644 --- a/include/linux/exportfs.h +++ b/include/linux/exportfs.h | |||
@@ -165,8 +165,8 @@ struct fid { | |||
165 | */ | 165 | */ |
166 | 166 | ||
167 | struct export_operations { | 167 | struct export_operations { |
168 | int (*encode_fh)(struct dentry *de, __u32 *fh, int *max_len, | 168 | int (*encode_fh)(struct inode *inode, __u32 *fh, int *max_len, |
169 | int connectable); | 169 | struct inode *parent); |
170 | struct dentry * (*fh_to_dentry)(struct super_block *sb, struct fid *fid, | 170 | struct dentry * (*fh_to_dentry)(struct super_block *sb, struct fid *fid, |
171 | int fh_len, int fh_type); | 171 | int fh_len, int fh_type); |
172 | struct dentry * (*fh_to_parent)(struct super_block *sb, struct fid *fid, | 172 | struct dentry * (*fh_to_parent)(struct super_block *sb, struct fid *fid, |
diff --git a/include/linux/fb.h b/include/linux/fb.h index d31cb682e173..ac3f1c605843 100644 --- a/include/linux/fb.h +++ b/include/linux/fb.h | |||
@@ -554,6 +554,10 @@ struct fb_cursor_user { | |||
554 | #define FB_EVENT_FB_UNBIND 0x0E | 554 | #define FB_EVENT_FB_UNBIND 0x0E |
555 | /* CONSOLE-SPECIFIC: remap all consoles to new fb - for vga switcheroo */ | 555 | /* CONSOLE-SPECIFIC: remap all consoles to new fb - for vga switcheroo */ |
556 | #define FB_EVENT_REMAP_ALL_CONSOLE 0x0F | 556 | #define FB_EVENT_REMAP_ALL_CONSOLE 0x0F |
557 | /* A hardware display blank early change occured */ | ||
558 | #define FB_EARLY_EVENT_BLANK 0x10 | ||
559 | /* A hardware display blank revert early change occured */ | ||
560 | #define FB_R_EARLY_EVENT_BLANK 0x11 | ||
557 | 561 | ||
558 | struct fb_event { | 562 | struct fb_event { |
559 | struct fb_info *info; | 563 | struct fb_info *info; |
@@ -607,6 +611,7 @@ struct fb_deferred_io { | |||
607 | struct mutex lock; /* mutex that protects the page list */ | 611 | struct mutex lock; /* mutex that protects the page list */ |
608 | struct list_head pagelist; /* list of touched pages */ | 612 | struct list_head pagelist; /* list of touched pages */ |
609 | /* callback */ | 613 | /* callback */ |
614 | void (*first_io)(struct fb_info *info); | ||
610 | void (*deferred_io)(struct fb_info *info, struct list_head *pagelist); | 615 | void (*deferred_io)(struct fb_info *info, struct list_head *pagelist); |
611 | }; | 616 | }; |
612 | #endif | 617 | #endif |
diff --git a/include/linux/firewire.h b/include/linux/firewire.h index e83c24af358a..7edcf1031718 100644 --- a/include/linux/firewire.h +++ b/include/linux/firewire.h | |||
@@ -349,6 +349,7 @@ int fw_cancel_transaction(struct fw_card *card, | |||
349 | int fw_run_transaction(struct fw_card *card, int tcode, int destination_id, | 349 | int fw_run_transaction(struct fw_card *card, int tcode, int destination_id, |
350 | int generation, int speed, unsigned long long offset, | 350 | int generation, int speed, unsigned long long offset, |
351 | void *payload, size_t length); | 351 | void *payload, size_t length); |
352 | const char *fw_rcode_string(int rcode); | ||
352 | 353 | ||
353 | static inline int fw_stream_packet_destination_id(int tag, int channel, int sy) | 354 | static inline int fw_stream_packet_destination_id(int tag, int channel, int sy) |
354 | { | 355 | { |
@@ -406,6 +407,7 @@ struct fw_iso_buffer { | |||
406 | enum dma_data_direction direction; | 407 | enum dma_data_direction direction; |
407 | struct page **pages; | 408 | struct page **pages; |
408 | int page_count; | 409 | int page_count; |
410 | int page_count_mapped; | ||
409 | }; | 411 | }; |
410 | 412 | ||
411 | int fw_iso_buffer_init(struct fw_iso_buffer *buffer, struct fw_card *card, | 413 | int fw_iso_buffer_init(struct fw_iso_buffer *buffer, struct fw_card *card, |
diff --git a/include/linux/fixp-arith.h b/include/linux/fixp-arith.h new file mode 100644 index 000000000000..3089d7382325 --- /dev/null +++ b/include/linux/fixp-arith.h | |||
@@ -0,0 +1,87 @@ | |||
1 | #ifndef _FIXP_ARITH_H | ||
2 | #define _FIXP_ARITH_H | ||
3 | |||
4 | /* | ||
5 | * Simplistic fixed-point arithmetics. | ||
6 | * Hmm, I'm probably duplicating some code :( | ||
7 | * | ||
8 | * Copyright (c) 2002 Johann Deneux | ||
9 | */ | ||
10 | |||
11 | /* | ||
12 | * This program is free software; you can redistribute it and/or modify | ||
13 | * it under the terms of the GNU General Public License as published by | ||
14 | * the Free Software Foundation; either version 2 of the License, or | ||
15 | * (at your option) any later version. | ||
16 | * | ||
17 | * This program is distributed in the hope that it will be useful, | ||
18 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
20 | * GNU General Public License for more details. | ||
21 | * | ||
22 | * You should have received a copy of the GNU General Public License | ||
23 | * along with this program; if not, write to the Free Software | ||
24 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
25 | * | ||
26 | * Should you need to contact me, the author, you can do so by | ||
27 | * e-mail - mail your message to <johann.deneux@gmail.com> | ||
28 | */ | ||
29 | |||
30 | #include <linux/types.h> | ||
31 | |||
32 | /* The type representing fixed-point values */ | ||
33 | typedef s16 fixp_t; | ||
34 | |||
35 | #define FRAC_N 8 | ||
36 | #define FRAC_MASK ((1<<FRAC_N)-1) | ||
37 | |||
38 | /* Not to be used directly. Use fixp_{cos,sin} */ | ||
39 | static const fixp_t cos_table[46] = { | ||
40 | 0x0100, 0x00FF, 0x00FF, 0x00FE, 0x00FD, 0x00FC, 0x00FA, 0x00F8, | ||
41 | 0x00F6, 0x00F3, 0x00F0, 0x00ED, 0x00E9, 0x00E6, 0x00E2, 0x00DD, | ||
42 | 0x00D9, 0x00D4, 0x00CF, 0x00C9, 0x00C4, 0x00BE, 0x00B8, 0x00B1, | ||
43 | 0x00AB, 0x00A4, 0x009D, 0x0096, 0x008F, 0x0087, 0x0080, 0x0078, | ||
44 | 0x0070, 0x0068, 0x005F, 0x0057, 0x004F, 0x0046, 0x003D, 0x0035, | ||
45 | 0x002C, 0x0023, 0x001A, 0x0011, 0x0008, 0x0000 | ||
46 | }; | ||
47 | |||
48 | |||
49 | /* a: 123 -> 123.0 */ | ||
50 | static inline fixp_t fixp_new(s16 a) | ||
51 | { | ||
52 | return a<<FRAC_N; | ||
53 | } | ||
54 | |||
55 | /* a: 0xFFFF -> -1.0 | ||
56 | 0x8000 -> 1.0 | ||
57 | 0x0000 -> 0.0 | ||
58 | */ | ||
59 | static inline fixp_t fixp_new16(s16 a) | ||
60 | { | ||
61 | return ((s32)a)>>(16-FRAC_N); | ||
62 | } | ||
63 | |||
64 | static inline fixp_t fixp_cos(unsigned int degrees) | ||
65 | { | ||
66 | int quadrant = (degrees / 90) & 3; | ||
67 | unsigned int i = degrees % 90; | ||
68 | |||
69 | if (quadrant == 1 || quadrant == 3) | ||
70 | i = 90 - i; | ||
71 | |||
72 | i >>= 1; | ||
73 | |||
74 | return (quadrant == 1 || quadrant == 2)? -cos_table[i] : cos_table[i]; | ||
75 | } | ||
76 | |||
77 | static inline fixp_t fixp_sin(unsigned int degrees) | ||
78 | { | ||
79 | return -fixp_cos(degrees + 90); | ||
80 | } | ||
81 | |||
82 | static inline fixp_t fixp_mult(fixp_t a, fixp_t b) | ||
83 | { | ||
84 | return ((s32)(a*b))>>FRAC_N; | ||
85 | } | ||
86 | |||
87 | #endif | ||
diff --git a/include/linux/frontswap.h b/include/linux/frontswap.h new file mode 100644 index 000000000000..0e4e2eec5c1d --- /dev/null +++ b/include/linux/frontswap.h | |||
@@ -0,0 +1,127 @@ | |||
1 | #ifndef _LINUX_FRONTSWAP_H | ||
2 | #define _LINUX_FRONTSWAP_H | ||
3 | |||
4 | #include <linux/swap.h> | ||
5 | #include <linux/mm.h> | ||
6 | #include <linux/bitops.h> | ||
7 | |||
8 | struct frontswap_ops { | ||
9 | void (*init)(unsigned); | ||
10 | int (*store)(unsigned, pgoff_t, struct page *); | ||
11 | int (*load)(unsigned, pgoff_t, struct page *); | ||
12 | void (*invalidate_page)(unsigned, pgoff_t); | ||
13 | void (*invalidate_area)(unsigned); | ||
14 | }; | ||
15 | |||
16 | extern bool frontswap_enabled; | ||
17 | extern struct frontswap_ops | ||
18 | frontswap_register_ops(struct frontswap_ops *ops); | ||
19 | extern void frontswap_shrink(unsigned long); | ||
20 | extern unsigned long frontswap_curr_pages(void); | ||
21 | extern void frontswap_writethrough(bool); | ||
22 | |||
23 | extern void __frontswap_init(unsigned type); | ||
24 | extern int __frontswap_store(struct page *page); | ||
25 | extern int __frontswap_load(struct page *page); | ||
26 | extern void __frontswap_invalidate_page(unsigned, pgoff_t); | ||
27 | extern void __frontswap_invalidate_area(unsigned); | ||
28 | |||
29 | #ifdef CONFIG_FRONTSWAP | ||
30 | |||
31 | static inline bool frontswap_test(struct swap_info_struct *sis, pgoff_t offset) | ||
32 | { | ||
33 | bool ret = false; | ||
34 | |||
35 | if (frontswap_enabled && sis->frontswap_map) | ||
36 | ret = test_bit(offset, sis->frontswap_map); | ||
37 | return ret; | ||
38 | } | ||
39 | |||
40 | static inline void frontswap_set(struct swap_info_struct *sis, pgoff_t offset) | ||
41 | { | ||
42 | if (frontswap_enabled && sis->frontswap_map) | ||
43 | set_bit(offset, sis->frontswap_map); | ||
44 | } | ||
45 | |||
46 | static inline void frontswap_clear(struct swap_info_struct *sis, pgoff_t offset) | ||
47 | { | ||
48 | if (frontswap_enabled && sis->frontswap_map) | ||
49 | clear_bit(offset, sis->frontswap_map); | ||
50 | } | ||
51 | |||
52 | static inline void frontswap_map_set(struct swap_info_struct *p, | ||
53 | unsigned long *map) | ||
54 | { | ||
55 | p->frontswap_map = map; | ||
56 | } | ||
57 | |||
58 | static inline unsigned long *frontswap_map_get(struct swap_info_struct *p) | ||
59 | { | ||
60 | return p->frontswap_map; | ||
61 | } | ||
62 | #else | ||
63 | /* all inline routines become no-ops and all externs are ignored */ | ||
64 | |||
65 | #define frontswap_enabled (0) | ||
66 | |||
67 | static inline bool frontswap_test(struct swap_info_struct *sis, pgoff_t offset) | ||
68 | { | ||
69 | return false; | ||
70 | } | ||
71 | |||
72 | static inline void frontswap_set(struct swap_info_struct *sis, pgoff_t offset) | ||
73 | { | ||
74 | } | ||
75 | |||
76 | static inline void frontswap_clear(struct swap_info_struct *sis, pgoff_t offset) | ||
77 | { | ||
78 | } | ||
79 | |||
80 | static inline void frontswap_map_set(struct swap_info_struct *p, | ||
81 | unsigned long *map) | ||
82 | { | ||
83 | } | ||
84 | |||
85 | static inline unsigned long *frontswap_map_get(struct swap_info_struct *p) | ||
86 | { | ||
87 | return NULL; | ||
88 | } | ||
89 | #endif | ||
90 | |||
91 | static inline int frontswap_store(struct page *page) | ||
92 | { | ||
93 | int ret = -1; | ||
94 | |||
95 | if (frontswap_enabled) | ||
96 | ret = __frontswap_store(page); | ||
97 | return ret; | ||
98 | } | ||
99 | |||
100 | static inline int frontswap_load(struct page *page) | ||
101 | { | ||
102 | int ret = -1; | ||
103 | |||
104 | if (frontswap_enabled) | ||
105 | ret = __frontswap_load(page); | ||
106 | return ret; | ||
107 | } | ||
108 | |||
109 | static inline void frontswap_invalidate_page(unsigned type, pgoff_t offset) | ||
110 | { | ||
111 | if (frontswap_enabled) | ||
112 | __frontswap_invalidate_page(type, offset); | ||
113 | } | ||
114 | |||
115 | static inline void frontswap_invalidate_area(unsigned type) | ||
116 | { | ||
117 | if (frontswap_enabled) | ||
118 | __frontswap_invalidate_area(type); | ||
119 | } | ||
120 | |||
121 | static inline void frontswap_init(unsigned type) | ||
122 | { | ||
123 | if (frontswap_enabled) | ||
124 | __frontswap_init(type); | ||
125 | } | ||
126 | |||
127 | #endif /* _LINUX_FRONTSWAP_H */ | ||
diff --git a/include/linux/fs.h b/include/linux/fs.h index c0e53372b082..17fd887c798f 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
@@ -173,6 +173,15 @@ struct inodes_stat_t { | |||
173 | #define WRITE_FUA (WRITE | REQ_SYNC | REQ_NOIDLE | REQ_FUA) | 173 | #define WRITE_FUA (WRITE | REQ_SYNC | REQ_NOIDLE | REQ_FUA) |
174 | #define WRITE_FLUSH_FUA (WRITE | REQ_SYNC | REQ_NOIDLE | REQ_FLUSH | REQ_FUA) | 174 | #define WRITE_FLUSH_FUA (WRITE | REQ_SYNC | REQ_NOIDLE | REQ_FLUSH | REQ_FUA) |
175 | 175 | ||
176 | |||
177 | /* | ||
178 | * Flag for rw_copy_check_uvector and compat_rw_copy_check_uvector | ||
179 | * that indicates that they should check the contents of the iovec are | ||
180 | * valid, but not check the memory that the iovec elements | ||
181 | * points too. | ||
182 | */ | ||
183 | #define CHECK_IOVEC_ONLY -1 | ||
184 | |||
176 | #define SEL_IN 1 | 185 | #define SEL_IN 1 |
177 | #define SEL_OUT 2 | 186 | #define SEL_OUT 2 |
178 | #define SEL_EX 4 | 187 | #define SEL_EX 4 |
@@ -793,13 +802,14 @@ struct inode { | |||
793 | unsigned int __i_nlink; | 802 | unsigned int __i_nlink; |
794 | }; | 803 | }; |
795 | dev_t i_rdev; | 804 | dev_t i_rdev; |
805 | loff_t i_size; | ||
796 | struct timespec i_atime; | 806 | struct timespec i_atime; |
797 | struct timespec i_mtime; | 807 | struct timespec i_mtime; |
798 | struct timespec i_ctime; | 808 | struct timespec i_ctime; |
799 | spinlock_t i_lock; /* i_blocks, i_bytes, maybe i_size */ | 809 | spinlock_t i_lock; /* i_blocks, i_bytes, maybe i_size */ |
800 | unsigned short i_bytes; | 810 | unsigned short i_bytes; |
811 | unsigned int i_blkbits; | ||
801 | blkcnt_t i_blocks; | 812 | blkcnt_t i_blocks; |
802 | loff_t i_size; | ||
803 | 813 | ||
804 | #ifdef __NEED_I_SIZE_ORDERED | 814 | #ifdef __NEED_I_SIZE_ORDERED |
805 | seqcount_t i_size_seqcount; | 815 | seqcount_t i_size_seqcount; |
@@ -819,9 +829,8 @@ struct inode { | |||
819 | struct list_head i_dentry; | 829 | struct list_head i_dentry; |
820 | struct rcu_head i_rcu; | 830 | struct rcu_head i_rcu; |
821 | }; | 831 | }; |
822 | atomic_t i_count; | ||
823 | unsigned int i_blkbits; | ||
824 | u64 i_version; | 832 | u64 i_version; |
833 | atomic_t i_count; | ||
825 | atomic_t i_dio_count; | 834 | atomic_t i_dio_count; |
826 | atomic_t i_writecount; | 835 | atomic_t i_writecount; |
827 | const struct file_operations *i_fop; /* former ->i_op->default_file_ops */ | 836 | const struct file_operations *i_fop; /* former ->i_op->default_file_ops */ |
@@ -1681,9 +1690,9 @@ struct inode_operations { | |||
1681 | ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t); | 1690 | ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t); |
1682 | ssize_t (*listxattr) (struct dentry *, char *, size_t); | 1691 | ssize_t (*listxattr) (struct dentry *, char *, size_t); |
1683 | int (*removexattr) (struct dentry *, const char *); | 1692 | int (*removexattr) (struct dentry *, const char *); |
1684 | void (*truncate_range)(struct inode *, loff_t, loff_t); | ||
1685 | int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start, | 1693 | int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start, |
1686 | u64 len); | 1694 | u64 len); |
1695 | int (*update_time)(struct inode *, struct timespec *, int); | ||
1687 | } ____cacheline_aligned; | 1696 | } ____cacheline_aligned; |
1688 | 1697 | ||
1689 | struct seq_file; | 1698 | struct seq_file; |
@@ -1691,8 +1700,7 @@ struct seq_file; | |||
1691 | ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector, | 1700 | ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector, |
1692 | unsigned long nr_segs, unsigned long fast_segs, | 1701 | unsigned long nr_segs, unsigned long fast_segs, |
1693 | struct iovec *fast_pointer, | 1702 | struct iovec *fast_pointer, |
1694 | struct iovec **ret_pointer, | 1703 | struct iovec **ret_pointer); |
1695 | int check_access); | ||
1696 | 1704 | ||
1697 | extern ssize_t vfs_read(struct file *, char __user *, size_t, loff_t *); | 1705 | extern ssize_t vfs_read(struct file *, char __user *, size_t, loff_t *); |
1698 | extern ssize_t vfs_write(struct file *, const char __user *, size_t, loff_t *); | 1706 | extern ssize_t vfs_write(struct file *, const char __user *, size_t, loff_t *); |
@@ -1764,8 +1772,8 @@ struct super_operations { | |||
1764 | * I_FREEING Set when inode is about to be freed but still has dirty | 1772 | * I_FREEING Set when inode is about to be freed but still has dirty |
1765 | * pages or buffers attached or the inode itself is still | 1773 | * pages or buffers attached or the inode itself is still |
1766 | * dirty. | 1774 | * dirty. |
1767 | * I_CLEAR Added by end_writeback(). In this state the inode is clean | 1775 | * I_CLEAR Added by clear_inode(). In this state the inode is |
1768 | * and can be destroyed. Inode keeps I_FREEING. | 1776 | * clean and can be destroyed. Inode keeps I_FREEING. |
1769 | * | 1777 | * |
1770 | * Inodes that are I_WILL_FREE, I_FREEING or I_CLEAR are | 1778 | * Inodes that are I_WILL_FREE, I_FREEING or I_CLEAR are |
1771 | * prohibited for many purposes. iget() must wait for | 1779 | * prohibited for many purposes. iget() must wait for |
@@ -1773,9 +1781,10 @@ struct super_operations { | |||
1773 | * anew. Other functions will just ignore such inodes, | 1781 | * anew. Other functions will just ignore such inodes, |
1774 | * if appropriate. I_NEW is used for waiting. | 1782 | * if appropriate. I_NEW is used for waiting. |
1775 | * | 1783 | * |
1776 | * I_SYNC Synchonized write of dirty inode data. The bits is | 1784 | * I_SYNC Writeback of inode is running. The bit is set during |
1777 | * set during data writeback, and cleared with a wakeup | 1785 | * data writeback, and cleared with a wakeup on the bit |
1778 | * on the bit address once it is done. | 1786 | * address once it is done. The bit is also used to pin |
1787 | * the inode in memory for flusher thread. | ||
1779 | * | 1788 | * |
1780 | * I_REFERENCED Marks the inode as recently references on the LRU list. | 1789 | * I_REFERENCED Marks the inode as recently references on the LRU list. |
1781 | * | 1790 | * |
@@ -1842,6 +1851,13 @@ static inline void inode_inc_iversion(struct inode *inode) | |||
1842 | spin_unlock(&inode->i_lock); | 1851 | spin_unlock(&inode->i_lock); |
1843 | } | 1852 | } |
1844 | 1853 | ||
1854 | enum file_time_flags { | ||
1855 | S_ATIME = 1, | ||
1856 | S_MTIME = 2, | ||
1857 | S_CTIME = 4, | ||
1858 | S_VERSION = 8, | ||
1859 | }; | ||
1860 | |||
1845 | extern void touch_atime(struct path *); | 1861 | extern void touch_atime(struct path *); |
1846 | static inline void file_accessed(struct file *file) | 1862 | static inline void file_accessed(struct file *file) |
1847 | { | 1863 | { |
@@ -2349,7 +2365,7 @@ extern unsigned int get_next_ino(void); | |||
2349 | 2365 | ||
2350 | extern void __iget(struct inode * inode); | 2366 | extern void __iget(struct inode * inode); |
2351 | extern void iget_failed(struct inode *); | 2367 | extern void iget_failed(struct inode *); |
2352 | extern void end_writeback(struct inode *); | 2368 | extern void clear_inode(struct inode *); |
2353 | extern void __destroy_inode(struct inode *); | 2369 | extern void __destroy_inode(struct inode *); |
2354 | extern struct inode *new_inode_pseudo(struct super_block *sb); | 2370 | extern struct inode *new_inode_pseudo(struct super_block *sb); |
2355 | extern struct inode *new_inode(struct super_block *sb); | 2371 | extern struct inode *new_inode(struct super_block *sb); |
@@ -2453,8 +2469,6 @@ enum { | |||
2453 | }; | 2469 | }; |
2454 | 2470 | ||
2455 | void dio_end_io(struct bio *bio, int error); | 2471 | void dio_end_io(struct bio *bio, int error); |
2456 | void inode_dio_wait(struct inode *inode); | ||
2457 | void inode_dio_done(struct inode *inode); | ||
2458 | 2472 | ||
2459 | ssize_t __blockdev_direct_IO(int rw, struct kiocb *iocb, struct inode *inode, | 2473 | ssize_t __blockdev_direct_IO(int rw, struct kiocb *iocb, struct inode *inode, |
2460 | struct block_device *bdev, const struct iovec *iov, loff_t offset, | 2474 | struct block_device *bdev, const struct iovec *iov, loff_t offset, |
@@ -2469,12 +2483,11 @@ static inline ssize_t blockdev_direct_IO(int rw, struct kiocb *iocb, | |||
2469 | offset, nr_segs, get_block, NULL, NULL, | 2483 | offset, nr_segs, get_block, NULL, NULL, |
2470 | DIO_LOCKING | DIO_SKIP_HOLES); | 2484 | DIO_LOCKING | DIO_SKIP_HOLES); |
2471 | } | 2485 | } |
2472 | #else | ||
2473 | static inline void inode_dio_wait(struct inode *inode) | ||
2474 | { | ||
2475 | } | ||
2476 | #endif | 2486 | #endif |
2477 | 2487 | ||
2488 | void inode_dio_wait(struct inode *inode); | ||
2489 | void inode_dio_done(struct inode *inode); | ||
2490 | |||
2478 | extern const struct file_operations generic_ro_fops; | 2491 | extern const struct file_operations generic_ro_fops; |
2479 | 2492 | ||
2480 | #define special_file(m) (S_ISCHR(m)||S_ISBLK(m)||S_ISFIFO(m)||S_ISSOCK(m)) | 2493 | #define special_file(m) (S_ISCHR(m)||S_ISBLK(m)||S_ISFIFO(m)||S_ISSOCK(m)) |
@@ -2578,7 +2591,7 @@ extern int inode_change_ok(const struct inode *, struct iattr *); | |||
2578 | extern int inode_newsize_ok(const struct inode *, loff_t offset); | 2591 | extern int inode_newsize_ok(const struct inode *, loff_t offset); |
2579 | extern void setattr_copy(struct inode *inode, const struct iattr *attr); | 2592 | extern void setattr_copy(struct inode *inode, const struct iattr *attr); |
2580 | 2593 | ||
2581 | extern void file_update_time(struct file *file); | 2594 | extern int file_update_time(struct file *file); |
2582 | 2595 | ||
2583 | extern int generic_show_options(struct seq_file *m, struct dentry *root); | 2596 | extern int generic_show_options(struct seq_file *m, struct dentry *root); |
2584 | extern void save_mount_options(struct super_block *sb, char *options); | 2597 | extern void save_mount_options(struct super_block *sb, char *options); |
diff --git a/include/linux/fsl/mxs-dma.h b/include/linux/fsl/mxs-dma.h index 203d7c4a3e11..55d870238399 100644 --- a/include/linux/fsl/mxs-dma.h +++ b/include/linux/fsl/mxs-dma.h | |||
@@ -15,14 +15,6 @@ struct mxs_dma_data { | |||
15 | int chan_irq; | 15 | int chan_irq; |
16 | }; | 16 | }; |
17 | 17 | ||
18 | static inline int mxs_dma_is_apbh(struct dma_chan *chan) | 18 | extern int mxs_dma_is_apbh(struct dma_chan *chan); |
19 | { | 19 | extern int mxs_dma_is_apbx(struct dma_chan *chan); |
20 | return !strcmp(dev_name(chan->device->dev), "mxs-dma-apbh"); | ||
21 | } | ||
22 | |||
23 | static inline int mxs_dma_is_apbx(struct dma_chan *chan) | ||
24 | { | ||
25 | return !strcmp(dev_name(chan->device->dev), "mxs-dma-apbx"); | ||
26 | } | ||
27 | |||
28 | #endif /* __MACH_MXS_DMA_H__ */ | 20 | #endif /* __MACH_MXS_DMA_H__ */ |
diff --git a/include/linux/fsnotify_backend.h b/include/linux/fsnotify_backend.h index 91d0e0a34ef3..63d966d5c2ea 100644 --- a/include/linux/fsnotify_backend.h +++ b/include/linux/fsnotify_backend.h | |||
@@ -60,7 +60,7 @@ | |||
60 | #define FS_EVENTS_POSS_ON_CHILD (FS_ACCESS | FS_MODIFY | FS_ATTRIB |\ | 60 | #define FS_EVENTS_POSS_ON_CHILD (FS_ACCESS | FS_MODIFY | FS_ATTRIB |\ |
61 | FS_CLOSE_WRITE | FS_CLOSE_NOWRITE | FS_OPEN |\ | 61 | FS_CLOSE_WRITE | FS_CLOSE_NOWRITE | FS_OPEN |\ |
62 | FS_MOVED_FROM | FS_MOVED_TO | FS_CREATE |\ | 62 | FS_MOVED_FROM | FS_MOVED_TO | FS_CREATE |\ |
63 | FS_DELETE) | 63 | FS_DELETE | FS_OPEN_PERM | FS_ACCESS_PERM) |
64 | 64 | ||
65 | #define FS_MOVE (FS_MOVED_FROM | FS_MOVED_TO) | 65 | #define FS_MOVE (FS_MOVED_FROM | FS_MOVED_TO) |
66 | 66 | ||
diff --git a/include/linux/fuse.h b/include/linux/fuse.h index 8f2ab8fef929..9303348965fb 100644 --- a/include/linux/fuse.h +++ b/include/linux/fuse.h | |||
@@ -54,6 +54,9 @@ | |||
54 | * 7.18 | 54 | * 7.18 |
55 | * - add FUSE_IOCTL_DIR flag | 55 | * - add FUSE_IOCTL_DIR flag |
56 | * - add FUSE_NOTIFY_DELETE | 56 | * - add FUSE_NOTIFY_DELETE |
57 | * | ||
58 | * 7.19 | ||
59 | * - add FUSE_FALLOCATE | ||
57 | */ | 60 | */ |
58 | 61 | ||
59 | #ifndef _LINUX_FUSE_H | 62 | #ifndef _LINUX_FUSE_H |
@@ -85,7 +88,7 @@ | |||
85 | #define FUSE_KERNEL_VERSION 7 | 88 | #define FUSE_KERNEL_VERSION 7 |
86 | 89 | ||
87 | /** Minor version number of this interface */ | 90 | /** Minor version number of this interface */ |
88 | #define FUSE_KERNEL_MINOR_VERSION 18 | 91 | #define FUSE_KERNEL_MINOR_VERSION 19 |
89 | 92 | ||
90 | /** The node ID of the root inode */ | 93 | /** The node ID of the root inode */ |
91 | #define FUSE_ROOT_ID 1 | 94 | #define FUSE_ROOT_ID 1 |
@@ -278,6 +281,7 @@ enum fuse_opcode { | |||
278 | FUSE_POLL = 40, | 281 | FUSE_POLL = 40, |
279 | FUSE_NOTIFY_REPLY = 41, | 282 | FUSE_NOTIFY_REPLY = 41, |
280 | FUSE_BATCH_FORGET = 42, | 283 | FUSE_BATCH_FORGET = 42, |
284 | FUSE_FALLOCATE = 43, | ||
281 | 285 | ||
282 | /* CUSE specific operations */ | 286 | /* CUSE specific operations */ |
283 | CUSE_INIT = 4096, | 287 | CUSE_INIT = 4096, |
@@ -571,6 +575,14 @@ struct fuse_notify_poll_wakeup_out { | |||
571 | __u64 kh; | 575 | __u64 kh; |
572 | }; | 576 | }; |
573 | 577 | ||
578 | struct fuse_fallocate_in { | ||
579 | __u64 fh; | ||
580 | __u64 offset; | ||
581 | __u64 length; | ||
582 | __u32 mode; | ||
583 | __u32 padding; | ||
584 | }; | ||
585 | |||
574 | struct fuse_in_header { | 586 | struct fuse_in_header { |
575 | __u32 len; | 587 | __u32 len; |
576 | __u32 opcode; | 588 | __u32 opcode; |
diff --git a/include/linux/gameport.h b/include/linux/gameport.h index b456b08d70ed..b986be513406 100644 --- a/include/linux/gameport.h +++ b/include/linux/gameport.h | |||
@@ -153,6 +153,19 @@ int __must_check __gameport_register_driver(struct gameport_driver *drv, | |||
153 | 153 | ||
154 | void gameport_unregister_driver(struct gameport_driver *drv); | 154 | void gameport_unregister_driver(struct gameport_driver *drv); |
155 | 155 | ||
156 | /** | ||
157 | * module_gameport_driver() - Helper macro for registering a gameport driver | ||
158 | * @__gameport_driver: gameport_driver struct | ||
159 | * | ||
160 | * Helper macro for gameport drivers which do not do anything special in | ||
161 | * module init/exit. This eliminates a lot of boilerplate. Each module may | ||
162 | * only use this macro once, and calling it replaces module_init() and | ||
163 | * module_exit(). | ||
164 | */ | ||
165 | #define module_gameport_driver(__gameport_driver) \ | ||
166 | module_driver(__gameport_driver, gameport_register_driver, \ | ||
167 | gameport_unregister_driver) | ||
168 | |||
156 | #endif /* __KERNEL__ */ | 169 | #endif /* __KERNEL__ */ |
157 | 170 | ||
158 | #define GAMEPORT_MODE_DISABLED 0 | 171 | #define GAMEPORT_MODE_DISABLED 0 |
diff --git a/include/linux/genetlink.h b/include/linux/genetlink.h index 73c28dea10ae..7a114016ac7d 100644 --- a/include/linux/genetlink.h +++ b/include/linux/genetlink.h | |||
@@ -110,6 +110,9 @@ extern int lockdep_genl_is_held(void); | |||
110 | #define genl_dereference(p) \ | 110 | #define genl_dereference(p) \ |
111 | rcu_dereference_protected(p, lockdep_genl_is_held()) | 111 | rcu_dereference_protected(p, lockdep_genl_is_held()) |
112 | 112 | ||
113 | #define MODULE_ALIAS_GENL_FAMILY(family)\ | ||
114 | MODULE_ALIAS_NET_PF_PROTO_NAME(PF_NETLINK, NETLINK_GENERIC, "-family-" family) | ||
115 | |||
113 | #endif /* __KERNEL__ */ | 116 | #endif /* __KERNEL__ */ |
114 | 117 | ||
115 | #endif /* __LINUX_GENERIC_NETLINK_H */ | 118 | #endif /* __LINUX_GENERIC_NETLINK_H */ |
diff --git a/include/linux/gfp.h b/include/linux/gfp.h index 581e74b7df95..1e49be49d324 100644 --- a/include/linux/gfp.h +++ b/include/linux/gfp.h | |||
@@ -391,4 +391,16 @@ static inline bool pm_suspended_storage(void) | |||
391 | } | 391 | } |
392 | #endif /* CONFIG_PM_SLEEP */ | 392 | #endif /* CONFIG_PM_SLEEP */ |
393 | 393 | ||
394 | #ifdef CONFIG_CMA | ||
395 | |||
396 | /* The below functions must be run on a range from a single zone. */ | ||
397 | extern int alloc_contig_range(unsigned long start, unsigned long end, | ||
398 | unsigned migratetype); | ||
399 | extern void free_contig_range(unsigned long pfn, unsigned nr_pages); | ||
400 | |||
401 | /* CMA stuff */ | ||
402 | extern void init_cma_reserved_pageblock(struct page *page); | ||
403 | |||
404 | #endif | ||
405 | |||
394 | #endif /* __LINUX_GFP_H */ | 406 | #endif /* __LINUX_GFP_H */ |
diff --git a/include/linux/gpio.h b/include/linux/gpio.h index 6155ecf192b0..f07fc2d08159 100644 --- a/include/linux/gpio.h +++ b/include/linux/gpio.h | |||
@@ -1,6 +1,8 @@ | |||
1 | #ifndef __LINUX_GPIO_H | 1 | #ifndef __LINUX_GPIO_H |
2 | #define __LINUX_GPIO_H | 2 | #define __LINUX_GPIO_H |
3 | 3 | ||
4 | #include <linux/errno.h> | ||
5 | |||
4 | /* see Documentation/gpio.txt */ | 6 | /* see Documentation/gpio.txt */ |
5 | 7 | ||
6 | /* make these flag values available regardless of GPIO kconfig options */ | 8 | /* make these flag values available regardless of GPIO kconfig options */ |
@@ -20,6 +22,11 @@ | |||
20 | /* Gpio pin is open source */ | 22 | /* Gpio pin is open source */ |
21 | #define GPIOF_OPEN_SOURCE (1 << 3) | 23 | #define GPIOF_OPEN_SOURCE (1 << 3) |
22 | 24 | ||
25 | #define GPIOF_EXPORT (1 << 2) | ||
26 | #define GPIOF_EXPORT_CHANGEABLE (1 << 3) | ||
27 | #define GPIOF_EXPORT_DIR_FIXED (GPIOF_EXPORT) | ||
28 | #define GPIOF_EXPORT_DIR_CHANGEABLE (GPIOF_EXPORT | GPIOF_EXPORT_CHANGEABLE) | ||
29 | |||
23 | /** | 30 | /** |
24 | * struct gpio - a structure describing a GPIO with configuration | 31 | * struct gpio - a structure describing a GPIO with configuration |
25 | * @gpio: the GPIO number | 32 | * @gpio: the GPIO number |
@@ -33,7 +40,39 @@ struct gpio { | |||
33 | }; | 40 | }; |
34 | 41 | ||
35 | #ifdef CONFIG_GENERIC_GPIO | 42 | #ifdef CONFIG_GENERIC_GPIO |
43 | |||
44 | #ifdef CONFIG_ARCH_HAVE_CUSTOM_GPIO_H | ||
36 | #include <asm/gpio.h> | 45 | #include <asm/gpio.h> |
46 | #else | ||
47 | |||
48 | #include <asm-generic/gpio.h> | ||
49 | |||
50 | static inline int gpio_get_value(unsigned int gpio) | ||
51 | { | ||
52 | return __gpio_get_value(gpio); | ||
53 | } | ||
54 | |||
55 | static inline void gpio_set_value(unsigned int gpio, int value) | ||
56 | { | ||
57 | __gpio_set_value(gpio, value); | ||
58 | } | ||
59 | |||
60 | static inline int gpio_cansleep(unsigned int gpio) | ||
61 | { | ||
62 | return __gpio_cansleep(gpio); | ||
63 | } | ||
64 | |||
65 | static inline int gpio_to_irq(unsigned int gpio) | ||
66 | { | ||
67 | return __gpio_to_irq(gpio); | ||
68 | } | ||
69 | |||
70 | static inline int irq_to_gpio(unsigned int irq) | ||
71 | { | ||
72 | return -EINVAL; | ||
73 | } | ||
74 | |||
75 | #endif | ||
37 | 76 | ||
38 | #else | 77 | #else |
39 | 78 | ||
@@ -55,12 +94,24 @@ static inline int gpio_request(unsigned gpio, const char *label) | |||
55 | return -ENOSYS; | 94 | return -ENOSYS; |
56 | } | 95 | } |
57 | 96 | ||
97 | static inline int devm_gpio_request(struct device *dev, unsigned gpio, | ||
98 | const char *label) | ||
99 | { | ||
100 | return -ENOSYS; | ||
101 | } | ||
102 | |||
58 | static inline int gpio_request_one(unsigned gpio, | 103 | static inline int gpio_request_one(unsigned gpio, |
59 | unsigned long flags, const char *label) | 104 | unsigned long flags, const char *label) |
60 | { | 105 | { |
61 | return -ENOSYS; | 106 | return -ENOSYS; |
62 | } | 107 | } |
63 | 108 | ||
109 | static inline int devm_gpio_request_one(struct device *dev, unsigned gpio, | ||
110 | unsigned long flags, const char *label) | ||
111 | { | ||
112 | return -ENOSYS; | ||
113 | } | ||
114 | |||
64 | static inline int gpio_request_array(const struct gpio *array, size_t num) | 115 | static inline int gpio_request_array(const struct gpio *array, size_t num) |
65 | { | 116 | { |
66 | return -ENOSYS; | 117 | return -ENOSYS; |
@@ -74,6 +125,14 @@ static inline void gpio_free(unsigned gpio) | |||
74 | WARN_ON(1); | 125 | WARN_ON(1); |
75 | } | 126 | } |
76 | 127 | ||
128 | static inline void devm_gpio_free(struct device *dev, unsigned gpio) | ||
129 | { | ||
130 | might_sleep(); | ||
131 | |||
132 | /* GPIO can never have been requested */ | ||
133 | WARN_ON(1); | ||
134 | } | ||
135 | |||
77 | static inline void gpio_free_array(const struct gpio *array, size_t num) | 136 | static inline void gpio_free_array(const struct gpio *array, size_t num) |
78 | { | 137 | { |
79 | might_sleep(); | 138 | might_sleep(); |
diff --git a/include/linux/huge_mm.h b/include/linux/huge_mm.h index c8af7a2efb52..4c59b1131187 100644 --- a/include/linux/huge_mm.h +++ b/include/linux/huge_mm.h | |||
@@ -59,6 +59,8 @@ extern pmd_t *page_check_address_pmd(struct page *page, | |||
59 | #define HPAGE_PMD_MASK HPAGE_MASK | 59 | #define HPAGE_PMD_MASK HPAGE_MASK |
60 | #define HPAGE_PMD_SIZE HPAGE_SIZE | 60 | #define HPAGE_PMD_SIZE HPAGE_SIZE |
61 | 61 | ||
62 | extern bool is_vma_temporary_stack(struct vm_area_struct *vma); | ||
63 | |||
62 | #define transparent_hugepage_enabled(__vma) \ | 64 | #define transparent_hugepage_enabled(__vma) \ |
63 | ((transparent_hugepage_flags & \ | 65 | ((transparent_hugepage_flags & \ |
64 | (1<<TRANSPARENT_HUGEPAGE_FLAG) || \ | 66 | (1<<TRANSPARENT_HUGEPAGE_FLAG) || \ |
diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h index 000837e126e6..d5d6bbe2259e 100644 --- a/include/linux/hugetlb.h +++ b/include/linux/hugetlb.h | |||
@@ -284,6 +284,14 @@ static inline unsigned int blocks_per_huge_page(struct hstate *h) | |||
284 | 284 | ||
285 | #include <asm/hugetlb.h> | 285 | #include <asm/hugetlb.h> |
286 | 286 | ||
287 | #ifndef arch_make_huge_pte | ||
288 | static inline pte_t arch_make_huge_pte(pte_t entry, struct vm_area_struct *vma, | ||
289 | struct page *page, int writable) | ||
290 | { | ||
291 | return entry; | ||
292 | } | ||
293 | #endif | ||
294 | |||
287 | static inline struct hstate *page_hstate(struct page *page) | 295 | static inline struct hstate *page_hstate(struct page *page) |
288 | { | 296 | { |
289 | return size_to_hstate(PAGE_SIZE << compound_order(page)); | 297 | return size_to_hstate(PAGE_SIZE << compound_order(page)); |
diff --git a/include/linux/gpio-i2cmux.h b/include/linux/i2c-mux-gpio.h index 4a333bb0bd0d..a36343a37ebc 100644 --- a/include/linux/gpio-i2cmux.h +++ b/include/linux/i2c-mux-gpio.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * gpio-i2cmux interface to platform code | 2 | * i2c-mux-gpio interface to platform code |
3 | * | 3 | * |
4 | * Peter Korsgaard <peter.korsgaard@barco.com> | 4 | * Peter Korsgaard <peter.korsgaard@barco.com> |
5 | * | 5 | * |
@@ -8,14 +8,14 @@ | |||
8 | * published by the Free Software Foundation. | 8 | * published by the Free Software Foundation. |
9 | */ | 9 | */ |
10 | 10 | ||
11 | #ifndef _LINUX_GPIO_I2CMUX_H | 11 | #ifndef _LINUX_I2C_MUX_GPIO_H |
12 | #define _LINUX_GPIO_I2CMUX_H | 12 | #define _LINUX_I2C_MUX_GPIO_H |
13 | 13 | ||
14 | /* MUX has no specific idle mode */ | 14 | /* MUX has no specific idle mode */ |
15 | #define GPIO_I2CMUX_NO_IDLE ((unsigned)-1) | 15 | #define I2C_MUX_GPIO_NO_IDLE ((unsigned)-1) |
16 | 16 | ||
17 | /** | 17 | /** |
18 | * struct gpio_i2cmux_platform_data - Platform-dependent data for gpio-i2cmux | 18 | * struct i2c_mux_gpio_platform_data - Platform-dependent data for i2c-mux-gpio |
19 | * @parent: Parent I2C bus adapter number | 19 | * @parent: Parent I2C bus adapter number |
20 | * @base_nr: Base I2C bus number to number adapters from or zero for dynamic | 20 | * @base_nr: Base I2C bus number to number adapters from or zero for dynamic |
21 | * @values: Array of bitmasks of GPIO settings (low/high) for each | 21 | * @values: Array of bitmasks of GPIO settings (low/high) for each |
@@ -25,7 +25,7 @@ | |||
25 | * @n_gpios: Number of GPIOs used to control MUX | 25 | * @n_gpios: Number of GPIOs used to control MUX |
26 | * @idle: Bitmask to write to MUX when idle or GPIO_I2CMUX_NO_IDLE if not used | 26 | * @idle: Bitmask to write to MUX when idle or GPIO_I2CMUX_NO_IDLE if not used |
27 | */ | 27 | */ |
28 | struct gpio_i2cmux_platform_data { | 28 | struct i2c_mux_gpio_platform_data { |
29 | int parent; | 29 | int parent; |
30 | int base_nr; | 30 | int base_nr; |
31 | const unsigned *values; | 31 | const unsigned *values; |
@@ -35,4 +35,4 @@ struct gpio_i2cmux_platform_data { | |||
35 | unsigned idle; | 35 | unsigned idle; |
36 | }; | 36 | }; |
37 | 37 | ||
38 | #endif /* _LINUX_GPIO_I2CMUX_H */ | 38 | #endif /* _LINUX_I2C_MUX_GPIO_H */ |
diff --git a/include/linux/i2c-mux-pinctrl.h b/include/linux/i2c-mux-pinctrl.h new file mode 100644 index 000000000000..a65c86429e84 --- /dev/null +++ b/include/linux/i2c-mux-pinctrl.h | |||
@@ -0,0 +1,41 @@ | |||
1 | /* | ||
2 | * i2c-mux-pinctrl platform data | ||
3 | * | ||
4 | * Copyright (c) 2012, NVIDIA CORPORATION. All rights reserved. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify it | ||
7 | * under the terms and conditions of the GNU General Public License, | ||
8 | * version 2, as published by the Free Software Foundation. | ||
9 | * | ||
10 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
11 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
12 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
13 | * more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
17 | */ | ||
18 | |||
19 | #ifndef _LINUX_I2C_MUX_PINCTRL_H | ||
20 | #define _LINUX_I2C_MUX_PINCTRL_H | ||
21 | |||
22 | /** | ||
23 | * struct i2c_mux_pinctrl_platform_data - Platform data for i2c-mux-pinctrl | ||
24 | * @parent_bus_num: Parent I2C bus number | ||
25 | * @base_bus_num: Base I2C bus number for the child busses. 0 for dynamic. | ||
26 | * @bus_count: Number of child busses. Also the number of elements in | ||
27 | * @pinctrl_states | ||
28 | * @pinctrl_states: The names of the pinctrl state to select for each child bus | ||
29 | * @pinctrl_state_idle: The pinctrl state to select when no child bus is being | ||
30 | * accessed. If NULL, the most recently used pinctrl state will be left | ||
31 | * selected. | ||
32 | */ | ||
33 | struct i2c_mux_pinctrl_platform_data { | ||
34 | int parent_bus_num; | ||
35 | int base_bus_num; | ||
36 | int bus_count; | ||
37 | const char **pinctrl_states; | ||
38 | const char *pinctrl_state_idle; | ||
39 | }; | ||
40 | |||
41 | #endif | ||
diff --git a/include/linux/i2c-mux.h b/include/linux/i2c-mux.h index 747f0cde4164..c79083830014 100644 --- a/include/linux/i2c-mux.h +++ b/include/linux/i2c-mux.h | |||
@@ -34,7 +34,8 @@ | |||
34 | * mux control. | 34 | * mux control. |
35 | */ | 35 | */ |
36 | struct i2c_adapter *i2c_add_mux_adapter(struct i2c_adapter *parent, | 36 | struct i2c_adapter *i2c_add_mux_adapter(struct i2c_adapter *parent, |
37 | void *mux_dev, u32 force_nr, u32 chan_id, | 37 | struct device *mux_dev, |
38 | void *mux_priv, u32 force_nr, u32 chan_id, | ||
38 | int (*select) (struct i2c_adapter *, | 39 | int (*select) (struct i2c_adapter *, |
39 | void *mux_dev, u32 chan_id), | 40 | void *mux_dev, u32 chan_id), |
40 | int (*deselect) (struct i2c_adapter *, | 41 | int (*deselect) (struct i2c_adapter *, |
diff --git a/include/linux/i2c.h b/include/linux/i2c.h index 195d8b3d9cfb..ddfa04108baf 100644 --- a/include/linux/i2c.h +++ b/include/linux/i2c.h | |||
@@ -232,6 +232,7 @@ struct i2c_client { | |||
232 | #define to_i2c_client(d) container_of(d, struct i2c_client, dev) | 232 | #define to_i2c_client(d) container_of(d, struct i2c_client, dev) |
233 | 233 | ||
234 | extern struct i2c_client *i2c_verify_client(struct device *dev); | 234 | extern struct i2c_client *i2c_verify_client(struct device *dev); |
235 | extern struct i2c_adapter *i2c_verify_adapter(struct device *dev); | ||
235 | 236 | ||
236 | static inline struct i2c_client *kobj_to_i2c_client(struct kobject *kobj) | 237 | static inline struct i2c_client *kobj_to_i2c_client(struct kobject *kobj) |
237 | { | 238 | { |
@@ -540,7 +541,7 @@ struct i2c_msg { | |||
540 | __u16 flags; | 541 | __u16 flags; |
541 | #define I2C_M_TEN 0x0010 /* this is a ten bit chip address */ | 542 | #define I2C_M_TEN 0x0010 /* this is a ten bit chip address */ |
542 | #define I2C_M_RD 0x0001 /* read data, from slave to master */ | 543 | #define I2C_M_RD 0x0001 /* read data, from slave to master */ |
543 | #define I2C_M_NOSTART 0x4000 /* if I2C_FUNC_PROTOCOL_MANGLING */ | 544 | #define I2C_M_NOSTART 0x4000 /* if I2C_FUNC_NOSTART */ |
544 | #define I2C_M_REV_DIR_ADDR 0x2000 /* if I2C_FUNC_PROTOCOL_MANGLING */ | 545 | #define I2C_M_REV_DIR_ADDR 0x2000 /* if I2C_FUNC_PROTOCOL_MANGLING */ |
545 | #define I2C_M_IGNORE_NAK 0x1000 /* if I2C_FUNC_PROTOCOL_MANGLING */ | 546 | #define I2C_M_IGNORE_NAK 0x1000 /* if I2C_FUNC_PROTOCOL_MANGLING */ |
546 | #define I2C_M_NO_RD_ACK 0x0800 /* if I2C_FUNC_PROTOCOL_MANGLING */ | 547 | #define I2C_M_NO_RD_ACK 0x0800 /* if I2C_FUNC_PROTOCOL_MANGLING */ |
@@ -553,8 +554,9 @@ struct i2c_msg { | |||
553 | 554 | ||
554 | #define I2C_FUNC_I2C 0x00000001 | 555 | #define I2C_FUNC_I2C 0x00000001 |
555 | #define I2C_FUNC_10BIT_ADDR 0x00000002 | 556 | #define I2C_FUNC_10BIT_ADDR 0x00000002 |
556 | #define I2C_FUNC_PROTOCOL_MANGLING 0x00000004 /* I2C_M_NOSTART etc. */ | 557 | #define I2C_FUNC_PROTOCOL_MANGLING 0x00000004 /* I2C_M_IGNORE_NAK etc. */ |
557 | #define I2C_FUNC_SMBUS_PEC 0x00000008 | 558 | #define I2C_FUNC_SMBUS_PEC 0x00000008 |
559 | #define I2C_FUNC_NOSTART 0x00000010 /* I2C_M_NOSTART */ | ||
558 | #define I2C_FUNC_SMBUS_BLOCK_PROC_CALL 0x00008000 /* SMBus 2.0 */ | 560 | #define I2C_FUNC_SMBUS_BLOCK_PROC_CALL 0x00008000 /* SMBus 2.0 */ |
559 | #define I2C_FUNC_SMBUS_QUICK 0x00010000 | 561 | #define I2C_FUNC_SMBUS_QUICK 0x00010000 |
560 | #define I2C_FUNC_SMBUS_READ_BYTE 0x00020000 | 562 | #define I2C_FUNC_SMBUS_READ_BYTE 0x00020000 |
diff --git a/include/linux/i2c/adp5588.h b/include/linux/i2c/adp5588.h index cec17cf6cac2..d8341cb47b60 100644 --- a/include/linux/i2c/adp5588.h +++ b/include/linux/i2c/adp5588.h | |||
@@ -157,6 +157,7 @@ struct i2c_client; /* forward declaration */ | |||
157 | 157 | ||
158 | struct adp5588_gpio_platform_data { | 158 | struct adp5588_gpio_platform_data { |
159 | int gpio_start; /* GPIO Chip base # */ | 159 | int gpio_start; /* GPIO Chip base # */ |
160 | const char *const *names; | ||
160 | unsigned irq_base; /* interrupt base # */ | 161 | unsigned irq_base; /* interrupt base # */ |
161 | unsigned pullup_dis_mask; /* Pull-Up Disable Mask */ | 162 | unsigned pullup_dis_mask; /* Pull-Up Disable Mask */ |
162 | int (*setup)(struct i2c_client *client, | 163 | int (*setup)(struct i2c_client *client, |
diff --git a/include/linux/if_arp.h b/include/linux/if_arp.h index 26cb3c2c5c71..f0e69c6e8208 100644 --- a/include/linux/if_arp.h +++ b/include/linux/if_arp.h | |||
@@ -82,7 +82,7 @@ | |||
82 | #define ARPHRD_FCPL 786 /* Fibrechannel public loop */ | 82 | #define ARPHRD_FCPL 786 /* Fibrechannel public loop */ |
83 | #define ARPHRD_FCFABRIC 787 /* Fibrechannel fabric */ | 83 | #define ARPHRD_FCFABRIC 787 /* Fibrechannel fabric */ |
84 | /* 787->799 reserved for fibrechannel media types */ | 84 | /* 787->799 reserved for fibrechannel media types */ |
85 | /* 800 used to be used for token ring */ | 85 | #define ARPHRD_IEEE802_TR 800 /* Magic type ident for TR */ |
86 | #define ARPHRD_IEEE80211 801 /* IEEE 802.11 */ | 86 | #define ARPHRD_IEEE80211 801 /* IEEE 802.11 */ |
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 */ |
diff --git a/include/linux/init_task.h b/include/linux/init_task.h index e4baff5f7ff4..9e65eff6af3b 100644 --- a/include/linux/init_task.h +++ b/include/linux/init_task.h | |||
@@ -149,6 +149,7 @@ extern struct cred init_cred; | |||
149 | .normal_prio = MAX_PRIO-20, \ | 149 | .normal_prio = MAX_PRIO-20, \ |
150 | .policy = SCHED_NORMAL, \ | 150 | .policy = SCHED_NORMAL, \ |
151 | .cpus_allowed = CPU_MASK_ALL, \ | 151 | .cpus_allowed = CPU_MASK_ALL, \ |
152 | .nr_cpus_allowed= NR_CPUS, \ | ||
152 | .mm = NULL, \ | 153 | .mm = NULL, \ |
153 | .active_mm = &init_mm, \ | 154 | .active_mm = &init_mm, \ |
154 | .se = { \ | 155 | .se = { \ |
@@ -157,7 +158,6 @@ extern struct cred init_cred; | |||
157 | .rt = { \ | 158 | .rt = { \ |
158 | .run_list = LIST_HEAD_INIT(tsk.rt.run_list), \ | 159 | .run_list = LIST_HEAD_INIT(tsk.rt.run_list), \ |
159 | .time_slice = RR_TIMESLICE, \ | 160 | .time_slice = RR_TIMESLICE, \ |
160 | .nr_cpus_allowed = NR_CPUS, \ | ||
161 | }, \ | 161 | }, \ |
162 | .tasks = LIST_HEAD_INIT(tsk.tasks), \ | 162 | .tasks = LIST_HEAD_INIT(tsk.tasks), \ |
163 | INIT_PUSHABLE_TASKS(tsk) \ | 163 | INIT_PUSHABLE_TASKS(tsk) \ |
diff --git a/include/linux/input/lm8333.h b/include/linux/input/lm8333.h new file mode 100644 index 000000000000..79f918c6e8c5 --- /dev/null +++ b/include/linux/input/lm8333.h | |||
@@ -0,0 +1,24 @@ | |||
1 | /* | ||
2 | * public include for LM8333 keypad driver - same license as driver | ||
3 | * Copyright (C) 2012 Wolfram Sang, Pengutronix <w.sang@pengutronix.de> | ||
4 | */ | ||
5 | |||
6 | #ifndef _LM8333_H | ||
7 | #define _LM8333_H | ||
8 | |||
9 | struct lm8333; | ||
10 | |||
11 | struct lm8333_platform_data { | ||
12 | /* Keymap data */ | ||
13 | const struct matrix_keymap_data *matrix_data; | ||
14 | /* Active timeout before enter HALT mode in microseconds */ | ||
15 | unsigned active_time; | ||
16 | /* Debounce interval in microseconds */ | ||
17 | unsigned debounce_time; | ||
18 | }; | ||
19 | |||
20 | extern int lm8333_read8(struct lm8333 *lm8333, u8 cmd); | ||
21 | extern int lm8333_write8(struct lm8333 *lm8333, u8 cmd, u8 val); | ||
22 | extern int lm8333_read_block(struct lm8333 *lm8333, u8 cmd, u8 len, u8 *buf); | ||
23 | |||
24 | #endif /* _LM8333_H */ | ||
diff --git a/include/linux/input/matrix_keypad.h b/include/linux/input/matrix_keypad.h index 6c07ced0af81..5f3aa6b11bfa 100644 --- a/include/linux/input/matrix_keypad.h +++ b/include/linux/input/matrix_keypad.h | |||
@@ -75,54 +75,10 @@ struct matrix_keypad_platform_data { | |||
75 | bool no_autorepeat; | 75 | bool no_autorepeat; |
76 | }; | 76 | }; |
77 | 77 | ||
78 | /** | 78 | int matrix_keypad_build_keymap(const struct matrix_keymap_data *keymap_data, |
79 | * matrix_keypad_build_keymap - convert platform keymap into matrix keymap | 79 | const char *keymap_name, |
80 | * @keymap_data: keymap supplied by the platform code | 80 | unsigned int rows, unsigned int cols, |
81 | * @row_shift: number of bits to shift row value by to advance to the next | 81 | unsigned short *keymap, |
82 | * line in the keymap | 82 | struct input_dev *input_dev); |
83 | * @keymap: expanded version of keymap that is suitable for use by | ||
84 | * matrix keyboad driver | ||
85 | * @keybit: pointer to bitmap of keys supported by input device | ||
86 | * | ||
87 | * This function converts platform keymap (encoded with KEY() macro) into | ||
88 | * an array of keycodes that is suitable for using in a standard matrix | ||
89 | * keyboard driver that uses row and col as indices. | ||
90 | */ | ||
91 | static inline void | ||
92 | matrix_keypad_build_keymap(const struct matrix_keymap_data *keymap_data, | ||
93 | unsigned int row_shift, | ||
94 | unsigned short *keymap, unsigned long *keybit) | ||
95 | { | ||
96 | int i; | ||
97 | |||
98 | for (i = 0; i < keymap_data->keymap_size; i++) { | ||
99 | unsigned int key = keymap_data->keymap[i]; | ||
100 | unsigned int row = KEY_ROW(key); | ||
101 | unsigned int col = KEY_COL(key); | ||
102 | unsigned short code = KEY_VAL(key); | ||
103 | |||
104 | keymap[MATRIX_SCAN_CODE(row, col, row_shift)] = code; | ||
105 | __set_bit(code, keybit); | ||
106 | } | ||
107 | __clear_bit(KEY_RESERVED, keybit); | ||
108 | } | ||
109 | |||
110 | #ifdef CONFIG_INPUT_OF_MATRIX_KEYMAP | ||
111 | struct matrix_keymap_data * | ||
112 | matrix_keyboard_of_fill_keymap(struct device_node *np, const char *propname); | ||
113 | |||
114 | void matrix_keyboard_of_free_keymap(const struct matrix_keymap_data *kd); | ||
115 | #else | ||
116 | static inline struct matrix_keymap_data * | ||
117 | matrix_keyboard_of_fill_keymap(struct device_node *np, const char *propname) | ||
118 | { | ||
119 | return NULL; | ||
120 | } | ||
121 | |||
122 | static inline void | ||
123 | matrix_keyboard_of_free_keymap(const struct matrix_keymap_data *kd) | ||
124 | { | ||
125 | } | ||
126 | #endif | ||
127 | 83 | ||
128 | #endif /* _MATRIX_KEYPAD_H */ | 84 | #endif /* _MATRIX_KEYPAD_H */ |
diff --git a/include/linux/input/navpoint.h b/include/linux/input/navpoint.h new file mode 100644 index 000000000000..45050eb34de3 --- /dev/null +++ b/include/linux/input/navpoint.h | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2012 Paul Parsons <lost.distance@yahoo.com> | ||
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 as | ||
6 | * published by the Free Software Foundation. | ||
7 | */ | ||
8 | |||
9 | struct navpoint_platform_data { | ||
10 | int port; /* PXA SSP port for pxa_ssp_request() */ | ||
11 | int gpio; /* GPIO for power on/off */ | ||
12 | }; | ||
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index c91171599cb6..e68a8e53bb59 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h | |||
@@ -142,8 +142,6 @@ request_any_context_irq(unsigned int irq, irq_handler_t handler, | |||
142 | extern int __must_check | 142 | extern int __must_check |
143 | request_percpu_irq(unsigned int irq, irq_handler_t handler, | 143 | request_percpu_irq(unsigned int irq, irq_handler_t handler, |
144 | const char *devname, void __percpu *percpu_dev_id); | 144 | const char *devname, void __percpu *percpu_dev_id); |
145 | |||
146 | extern void exit_irq_thread(void); | ||
147 | #else | 145 | #else |
148 | 146 | ||
149 | extern int __must_check | 147 | extern int __must_check |
@@ -177,8 +175,6 @@ request_percpu_irq(unsigned int irq, irq_handler_t handler, | |||
177 | { | 175 | { |
178 | return request_irq(irq, handler, 0, devname, percpu_dev_id); | 176 | return request_irq(irq, handler, 0, devname, percpu_dev_id); |
179 | } | 177 | } |
180 | |||
181 | static inline void exit_irq_thread(void) { } | ||
182 | #endif | 178 | #endif |
183 | 179 | ||
184 | extern void free_irq(unsigned int, void *); | 180 | extern void free_irq(unsigned int, void *); |
diff --git a/include/linux/iocontext.h b/include/linux/iocontext.h index 1a3018063034..df38db2ef45b 100644 --- a/include/linux/iocontext.h +++ b/include/linux/iocontext.h | |||
@@ -6,11 +6,7 @@ | |||
6 | #include <linux/workqueue.h> | 6 | #include <linux/workqueue.h> |
7 | 7 | ||
8 | enum { | 8 | enum { |
9 | ICQ_IOPRIO_CHANGED = 1 << 0, | ||
10 | ICQ_CGROUP_CHANGED = 1 << 1, | ||
11 | ICQ_EXITED = 1 << 2, | 9 | ICQ_EXITED = 1 << 2, |
12 | |||
13 | ICQ_CHANGED_MASK = ICQ_IOPRIO_CHANGED | ICQ_CGROUP_CHANGED, | ||
14 | }; | 10 | }; |
15 | 11 | ||
16 | /* | 12 | /* |
@@ -100,6 +96,7 @@ struct io_cq { | |||
100 | */ | 96 | */ |
101 | struct io_context { | 97 | struct io_context { |
102 | atomic_long_t refcount; | 98 | atomic_long_t refcount; |
99 | atomic_t active_ref; | ||
103 | atomic_t nr_tasks; | 100 | atomic_t nr_tasks; |
104 | 101 | ||
105 | /* all the fields below are protected by this lock */ | 102 | /* all the fields below are protected by this lock */ |
@@ -120,29 +117,37 @@ struct io_context { | |||
120 | struct work_struct release_work; | 117 | struct work_struct release_work; |
121 | }; | 118 | }; |
122 | 119 | ||
123 | static inline struct io_context *ioc_task_link(struct io_context *ioc) | 120 | /** |
121 | * get_io_context_active - get active reference on ioc | ||
122 | * @ioc: ioc of interest | ||
123 | * | ||
124 | * Only iocs with active reference can issue new IOs. This function | ||
125 | * acquires an active reference on @ioc. The caller must already have an | ||
126 | * active reference on @ioc. | ||
127 | */ | ||
128 | static inline void get_io_context_active(struct io_context *ioc) | ||
124 | { | 129 | { |
125 | /* | 130 | WARN_ON_ONCE(atomic_long_read(&ioc->refcount) <= 0); |
126 | * if ref count is zero, don't allow sharing (ioc is going away, it's | 131 | WARN_ON_ONCE(atomic_read(&ioc->active_ref) <= 0); |
127 | * a race). | 132 | atomic_long_inc(&ioc->refcount); |
128 | */ | 133 | atomic_inc(&ioc->active_ref); |
129 | if (ioc && atomic_long_inc_not_zero(&ioc->refcount)) { | 134 | } |
130 | atomic_inc(&ioc->nr_tasks); | 135 | |
131 | return ioc; | 136 | static inline void ioc_task_link(struct io_context *ioc) |
132 | } | 137 | { |
138 | get_io_context_active(ioc); | ||
133 | 139 | ||
134 | return NULL; | 140 | WARN_ON_ONCE(atomic_read(&ioc->nr_tasks) <= 0); |
141 | atomic_inc(&ioc->nr_tasks); | ||
135 | } | 142 | } |
136 | 143 | ||
137 | struct task_struct; | 144 | struct task_struct; |
138 | #ifdef CONFIG_BLOCK | 145 | #ifdef CONFIG_BLOCK |
139 | void put_io_context(struct io_context *ioc); | 146 | void put_io_context(struct io_context *ioc); |
147 | void put_io_context_active(struct io_context *ioc); | ||
140 | void exit_io_context(struct task_struct *task); | 148 | void exit_io_context(struct task_struct *task); |
141 | struct io_context *get_task_io_context(struct task_struct *task, | 149 | struct io_context *get_task_io_context(struct task_struct *task, |
142 | gfp_t gfp_flags, int node); | 150 | gfp_t gfp_flags, int node); |
143 | void ioc_ioprio_changed(struct io_context *ioc, int ioprio); | ||
144 | void ioc_cgroup_changed(struct io_context *ioc); | ||
145 | unsigned int icq_get_changed(struct io_cq *icq); | ||
146 | #else | 151 | #else |
147 | struct io_context; | 152 | struct io_context; |
148 | static inline void put_io_context(struct io_context *ioc) { } | 153 | static inline void put_io_context(struct io_context *ioc) { } |
diff --git a/include/linux/iommu.h b/include/linux/iommu.h index d937580417ba..450293f6d68b 100644 --- a/include/linux/iommu.h +++ b/include/linux/iommu.h | |||
@@ -35,12 +35,13 @@ struct iommu_domain; | |||
35 | #define IOMMU_FAULT_WRITE 0x1 | 35 | #define IOMMU_FAULT_WRITE 0x1 |
36 | 36 | ||
37 | typedef int (*iommu_fault_handler_t)(struct iommu_domain *, | 37 | typedef int (*iommu_fault_handler_t)(struct iommu_domain *, |
38 | struct device *, unsigned long, int); | 38 | struct device *, unsigned long, int, void *); |
39 | 39 | ||
40 | struct iommu_domain { | 40 | struct iommu_domain { |
41 | struct iommu_ops *ops; | 41 | struct iommu_ops *ops; |
42 | void *priv; | 42 | void *priv; |
43 | iommu_fault_handler_t handler; | 43 | iommu_fault_handler_t handler; |
44 | void *handler_token; | ||
44 | }; | 45 | }; |
45 | 46 | ||
46 | #define IOMMU_CAP_CACHE_COHERENCY 0x1 | 47 | #define IOMMU_CAP_CACHE_COHERENCY 0x1 |
@@ -95,7 +96,7 @@ extern phys_addr_t iommu_iova_to_phys(struct iommu_domain *domain, | |||
95 | extern int iommu_domain_has_cap(struct iommu_domain *domain, | 96 | extern int iommu_domain_has_cap(struct iommu_domain *domain, |
96 | unsigned long cap); | 97 | unsigned long cap); |
97 | extern void iommu_set_fault_handler(struct iommu_domain *domain, | 98 | extern void iommu_set_fault_handler(struct iommu_domain *domain, |
98 | iommu_fault_handler_t handler); | 99 | iommu_fault_handler_t handler, void *token); |
99 | extern int iommu_device_group(struct device *dev, unsigned int *groupid); | 100 | extern int iommu_device_group(struct device *dev, unsigned int *groupid); |
100 | 101 | ||
101 | /** | 102 | /** |
@@ -132,7 +133,8 @@ static inline int report_iommu_fault(struct iommu_domain *domain, | |||
132 | * invoke it. | 133 | * invoke it. |
133 | */ | 134 | */ |
134 | if (domain->handler) | 135 | if (domain->handler) |
135 | ret = domain->handler(domain, dev, iova, flags); | 136 | ret = domain->handler(domain, dev, iova, flags, |
137 | domain->handler_token); | ||
136 | 138 | ||
137 | return ret; | 139 | return ret; |
138 | } | 140 | } |
@@ -191,7 +193,7 @@ static inline int domain_has_cap(struct iommu_domain *domain, | |||
191 | } | 193 | } |
192 | 194 | ||
193 | static inline void iommu_set_fault_handler(struct iommu_domain *domain, | 195 | static inline void iommu_set_fault_handler(struct iommu_domain *domain, |
194 | iommu_fault_handler_t handler) | 196 | iommu_fault_handler_t handler, void *token) |
195 | { | 197 | { |
196 | } | 198 | } |
197 | 199 | ||
diff --git a/include/linux/ioprio.h b/include/linux/ioprio.h index 76dad4808847..beb9ce1c2c23 100644 --- a/include/linux/ioprio.h +++ b/include/linux/ioprio.h | |||
@@ -42,26 +42,14 @@ enum { | |||
42 | }; | 42 | }; |
43 | 43 | ||
44 | /* | 44 | /* |
45 | * if process has set io priority explicitly, use that. if not, convert | 45 | * Fallback BE priority |
46 | * the cpu scheduler nice value to an io priority | ||
47 | */ | 46 | */ |
48 | #define IOPRIO_NORM (4) | 47 | #define IOPRIO_NORM (4) |
49 | static inline int task_ioprio(struct io_context *ioc) | ||
50 | { | ||
51 | if (ioprio_valid(ioc->ioprio)) | ||
52 | return IOPRIO_PRIO_DATA(ioc->ioprio); | ||
53 | |||
54 | return IOPRIO_NORM; | ||
55 | } | ||
56 | |||
57 | static inline int task_ioprio_class(struct io_context *ioc) | ||
58 | { | ||
59 | if (ioprio_valid(ioc->ioprio)) | ||
60 | return IOPRIO_PRIO_CLASS(ioc->ioprio); | ||
61 | |||
62 | return IOPRIO_CLASS_BE; | ||
63 | } | ||
64 | 48 | ||
49 | /* | ||
50 | * if process has set io priority explicitly, use that. if not, convert | ||
51 | * the cpu scheduler nice value to an io priority | ||
52 | */ | ||
65 | static inline int task_nice_ioprio(struct task_struct *task) | 53 | static inline int task_nice_ioprio(struct task_struct *task) |
66 | { | 54 | { |
67 | return (task_nice(task) + 20) / 5; | 55 | return (task_nice(task) + 20) / 5; |
diff --git a/include/linux/ipc_namespace.h b/include/linux/ipc_namespace.h index 8a297a5e794c..5499c92a9153 100644 --- a/include/linux/ipc_namespace.h +++ b/include/linux/ipc_namespace.h | |||
@@ -62,6 +62,8 @@ struct ipc_namespace { | |||
62 | unsigned int mq_queues_max; /* initialized to DFLT_QUEUESMAX */ | 62 | unsigned int mq_queues_max; /* initialized to DFLT_QUEUESMAX */ |
63 | unsigned int mq_msg_max; /* initialized to DFLT_MSGMAX */ | 63 | unsigned int mq_msg_max; /* initialized to DFLT_MSGMAX */ |
64 | unsigned int mq_msgsize_max; /* initialized to DFLT_MSGSIZEMAX */ | 64 | unsigned int mq_msgsize_max; /* initialized to DFLT_MSGSIZEMAX */ |
65 | unsigned int mq_msg_default; | ||
66 | unsigned int mq_msgsize_default; | ||
65 | 67 | ||
66 | /* user_ns which owns the ipc ns */ | 68 | /* user_ns which owns the ipc ns */ |
67 | struct user_namespace *user_ns; | 69 | struct user_namespace *user_ns; |
@@ -90,11 +92,41 @@ static inline void shm_destroy_orphaned(struct ipc_namespace *ns) {} | |||
90 | 92 | ||
91 | #ifdef CONFIG_POSIX_MQUEUE | 93 | #ifdef CONFIG_POSIX_MQUEUE |
92 | extern int mq_init_ns(struct ipc_namespace *ns); | 94 | extern int mq_init_ns(struct ipc_namespace *ns); |
93 | /* default values */ | 95 | /* |
94 | #define DFLT_QUEUESMAX 256 /* max number of message queues */ | 96 | * POSIX Message Queue default values: |
95 | #define DFLT_MSGMAX 10 /* max number of messages in each queue */ | 97 | * |
96 | #define HARD_MSGMAX (32768*sizeof(void *)/4) | 98 | * MIN_*: Lowest value an admin can set the maximum unprivileged limit to |
97 | #define DFLT_MSGSIZEMAX 8192 /* max message size */ | 99 | * DFLT_*MAX: Default values for the maximum unprivileged limits |
100 | * DFLT_{MSG,MSGSIZE}: Default values used when the user doesn't supply | ||
101 | * an attribute to the open call and the queue must be created | ||
102 | * HARD_*: Highest value the maximums can be set to. These are enforced | ||
103 | * on CAP_SYS_RESOURCE apps as well making them inviolate (so make them | ||
104 | * suitably high) | ||
105 | * | ||
106 | * POSIX Requirements: | ||
107 | * Per app minimum openable message queues - 8. This does not map well | ||
108 | * to the fact that we limit the number of queues on a per namespace | ||
109 | * basis instead of a per app basis. So, make the default high enough | ||
110 | * that no given app should have a hard time opening 8 queues. | ||
111 | * Minimum maximum for HARD_MSGMAX - 32767. I bumped this to 65536. | ||
112 | * Minimum maximum for HARD_MSGSIZEMAX - POSIX is silent on this. However, | ||
113 | * we have run into a situation where running applications in the wild | ||
114 | * require this to be at least 5MB, and preferably 10MB, so I set the | ||
115 | * value to 16MB in hopes that this user is the worst of the bunch and | ||
116 | * the new maximum will handle anyone else. I may have to revisit this | ||
117 | * in the future. | ||
118 | */ | ||
119 | #define MIN_QUEUESMAX 1 | ||
120 | #define DFLT_QUEUESMAX 256 | ||
121 | #define HARD_QUEUESMAX 1024 | ||
122 | #define MIN_MSGMAX 1 | ||
123 | #define DFLT_MSG 10U | ||
124 | #define DFLT_MSGMAX 10 | ||
125 | #define HARD_MSGMAX 65536 | ||
126 | #define MIN_MSGSIZEMAX 128 | ||
127 | #define DFLT_MSGSIZE 8192U | ||
128 | #define DFLT_MSGSIZEMAX 8192 | ||
129 | #define HARD_MSGSIZEMAX (16*1024*1024) | ||
98 | #else | 130 | #else |
99 | static inline int mq_init_ns(struct ipc_namespace *ns) { return 0; } | 131 | static inline int mq_init_ns(struct ipc_namespace *ns) { return 0; } |
100 | #endif | 132 | #endif |
diff --git a/include/linux/ipx.h b/include/linux/ipx.h index 8f0243982eb6..3d48014cdd71 100644 --- a/include/linux/ipx.h +++ b/include/linux/ipx.h | |||
@@ -38,7 +38,7 @@ struct ipx_interface_definition { | |||
38 | #define IPX_FRAME_8022 2 | 38 | #define IPX_FRAME_8022 2 |
39 | #define IPX_FRAME_ETHERII 3 | 39 | #define IPX_FRAME_ETHERII 3 |
40 | #define IPX_FRAME_8023 4 | 40 | #define IPX_FRAME_8023 4 |
41 | /* obsolete token ring was 5 */ | 41 | #define IPX_FRAME_TR_8022 5 /* obsolete */ |
42 | unsigned char ipx_special; | 42 | unsigned char ipx_special; |
43 | #define IPX_SPECIAL_NONE 0 | 43 | #define IPX_SPECIAL_NONE 0 |
44 | #define IPX_PRIMARY 1 | 44 | #define IPX_PRIMARY 1 |
diff --git a/include/linux/irqdomain.h b/include/linux/irqdomain.h index c65740d76e66..5abb533eb8eb 100644 --- a/include/linux/irqdomain.h +++ b/include/linux/irqdomain.h | |||
@@ -141,9 +141,8 @@ static inline struct irq_domain *irq_domain_add_legacy_isa( | |||
141 | return irq_domain_add_legacy(of_node, NUM_ISA_INTERRUPTS, 0, 0, ops, | 141 | return irq_domain_add_legacy(of_node, NUM_ISA_INTERRUPTS, 0, 0, ops, |
142 | host_data); | 142 | host_data); |
143 | } | 143 | } |
144 | extern struct irq_domain *irq_find_host(struct device_node *node); | ||
145 | extern void irq_set_default_host(struct irq_domain *host); | ||
146 | 144 | ||
145 | extern void irq_domain_remove(struct irq_domain *host); | ||
147 | 146 | ||
148 | extern unsigned int irq_create_mapping(struct irq_domain *host, | 147 | extern unsigned int irq_create_mapping(struct irq_domain *host, |
149 | irq_hw_number_t hwirq); | 148 | irq_hw_number_t hwirq); |
diff --git a/include/linux/jbd.h b/include/linux/jbd.h index d211732b9e99..c8f32975f0e4 100644 --- a/include/linux/jbd.h +++ b/include/linux/jbd.h | |||
@@ -479,12 +479,6 @@ struct transaction_s | |||
479 | * How many handles used this transaction? [t_handle_lock] | 479 | * How many handles used this transaction? [t_handle_lock] |
480 | */ | 480 | */ |
481 | int t_handle_count; | 481 | int t_handle_count; |
482 | |||
483 | /* | ||
484 | * This transaction is being forced and some process is | ||
485 | * waiting for it to finish. | ||
486 | */ | ||
487 | unsigned int t_synchronous_commit:1; | ||
488 | }; | 482 | }; |
489 | 483 | ||
490 | /** | 484 | /** |
@@ -531,6 +525,8 @@ struct transaction_s | |||
531 | * transaction | 525 | * transaction |
532 | * @j_commit_request: Sequence number of the most recent transaction wanting | 526 | * @j_commit_request: Sequence number of the most recent transaction wanting |
533 | * commit | 527 | * commit |
528 | * @j_commit_waited: Sequence number of the most recent transaction someone | ||
529 | * is waiting for to commit. | ||
534 | * @j_uuid: Uuid of client object. | 530 | * @j_uuid: Uuid of client object. |
535 | * @j_task: Pointer to the current commit thread for this journal | 531 | * @j_task: Pointer to the current commit thread for this journal |
536 | * @j_max_transaction_buffers: Maximum number of metadata buffers to allow in a | 532 | * @j_max_transaction_buffers: Maximum number of metadata buffers to allow in a |
@@ -696,6 +692,13 @@ struct journal_s | |||
696 | tid_t j_commit_request; | 692 | tid_t j_commit_request; |
697 | 693 | ||
698 | /* | 694 | /* |
695 | * Sequence number of the most recent transaction someone is waiting | ||
696 | * for to commit. | ||
697 | * [j_state_lock] | ||
698 | */ | ||
699 | tid_t j_commit_waited; | ||
700 | |||
701 | /* | ||
699 | * Journal uuid: identifies the object (filesystem, LVM volume etc) | 702 | * Journal uuid: identifies the object (filesystem, LVM volume etc) |
700 | * backed by this journal. This will eventually be replaced by an array | 703 | * backed by this journal. This will eventually be replaced by an array |
701 | * of uuids, allowing us to index multiple devices within a single | 704 | * of uuids, allowing us to index multiple devices within a single |
@@ -861,7 +864,8 @@ extern int journal_destroy (journal_t *); | |||
861 | extern int journal_recover (journal_t *journal); | 864 | extern int journal_recover (journal_t *journal); |
862 | extern int journal_wipe (journal_t *, int); | 865 | extern int journal_wipe (journal_t *, int); |
863 | extern int journal_skip_recovery (journal_t *); | 866 | extern int journal_skip_recovery (journal_t *); |
864 | extern void journal_update_superblock (journal_t *, int); | 867 | extern void journal_update_sb_log_tail (journal_t *, tid_t, unsigned int, |
868 | int); | ||
865 | extern void journal_abort (journal_t *, int); | 869 | extern void journal_abort (journal_t *, int); |
866 | extern int journal_errno (journal_t *); | 870 | extern int journal_errno (journal_t *); |
867 | extern void journal_ack_err (journal_t *); | 871 | extern void journal_ack_err (journal_t *); |
diff --git a/include/linux/jbd2.h b/include/linux/jbd2.h index 912c30a8ddb1..f334c7fab967 100644 --- a/include/linux/jbd2.h +++ b/include/linux/jbd2.h | |||
@@ -31,6 +31,7 @@ | |||
31 | #include <linux/mutex.h> | 31 | #include <linux/mutex.h> |
32 | #include <linux/timer.h> | 32 | #include <linux/timer.h> |
33 | #include <linux/slab.h> | 33 | #include <linux/slab.h> |
34 | #include <crypto/hash.h> | ||
34 | #endif | 35 | #endif |
35 | 36 | ||
36 | #define journal_oom_retry 1 | 37 | #define journal_oom_retry 1 |
@@ -147,12 +148,24 @@ typedef struct journal_header_s | |||
147 | #define JBD2_CRC32_CHKSUM 1 | 148 | #define JBD2_CRC32_CHKSUM 1 |
148 | #define JBD2_MD5_CHKSUM 2 | 149 | #define JBD2_MD5_CHKSUM 2 |
149 | #define JBD2_SHA1_CHKSUM 3 | 150 | #define JBD2_SHA1_CHKSUM 3 |
151 | #define JBD2_CRC32C_CHKSUM 4 | ||
150 | 152 | ||
151 | #define JBD2_CRC32_CHKSUM_SIZE 4 | 153 | #define JBD2_CRC32_CHKSUM_SIZE 4 |
152 | 154 | ||
153 | #define JBD2_CHECKSUM_BYTES (32 / sizeof(u32)) | 155 | #define JBD2_CHECKSUM_BYTES (32 / sizeof(u32)) |
154 | /* | 156 | /* |
155 | * Commit block header for storing transactional checksums: | 157 | * Commit block header for storing transactional checksums: |
158 | * | ||
159 | * NOTE: If FEATURE_COMPAT_CHECKSUM (checksum v1) is set, the h_chksum* | ||
160 | * fields are used to store a checksum of the descriptor and data blocks. | ||
161 | * | ||
162 | * If FEATURE_INCOMPAT_CSUM_V2 (checksum v2) is set, then the h_chksum | ||
163 | * field is used to store crc32c(uuid+commit_block). Each journal metadata | ||
164 | * block gets its own checksum, and data block checksums are stored in | ||
165 | * journal_block_tag (in the descriptor). The other h_chksum* fields are | ||
166 | * not used. | ||
167 | * | ||
168 | * Checksum v1 and v2 are mutually exclusive features. | ||
156 | */ | 169 | */ |
157 | struct commit_header { | 170 | struct commit_header { |
158 | __be32 h_magic; | 171 | __be32 h_magic; |
@@ -175,13 +188,19 @@ struct commit_header { | |||
175 | typedef struct journal_block_tag_s | 188 | typedef struct journal_block_tag_s |
176 | { | 189 | { |
177 | __be32 t_blocknr; /* The on-disk block number */ | 190 | __be32 t_blocknr; /* The on-disk block number */ |
178 | __be32 t_flags; /* See below */ | 191 | __be16 t_checksum; /* truncated crc32c(uuid+seq+block) */ |
192 | __be16 t_flags; /* See below */ | ||
179 | __be32 t_blocknr_high; /* most-significant high 32bits. */ | 193 | __be32 t_blocknr_high; /* most-significant high 32bits. */ |
180 | } journal_block_tag_t; | 194 | } journal_block_tag_t; |
181 | 195 | ||
182 | #define JBD2_TAG_SIZE32 (offsetof(journal_block_tag_t, t_blocknr_high)) | 196 | #define JBD2_TAG_SIZE32 (offsetof(journal_block_tag_t, t_blocknr_high)) |
183 | #define JBD2_TAG_SIZE64 (sizeof(journal_block_tag_t)) | 197 | #define JBD2_TAG_SIZE64 (sizeof(journal_block_tag_t)) |
184 | 198 | ||
199 | /* Tail of descriptor block, for checksumming */ | ||
200 | struct jbd2_journal_block_tail { | ||
201 | __be32 t_checksum; /* crc32c(uuid+descr_block) */ | ||
202 | }; | ||
203 | |||
185 | /* | 204 | /* |
186 | * The revoke descriptor: used on disk to describe a series of blocks to | 205 | * The revoke descriptor: used on disk to describe a series of blocks to |
187 | * be revoked from the log | 206 | * be revoked from the log |
@@ -192,6 +211,10 @@ typedef struct jbd2_journal_revoke_header_s | |||
192 | __be32 r_count; /* Count of bytes used in the block */ | 211 | __be32 r_count; /* Count of bytes used in the block */ |
193 | } jbd2_journal_revoke_header_t; | 212 | } jbd2_journal_revoke_header_t; |
194 | 213 | ||
214 | /* Tail of revoke block, for checksumming */ | ||
215 | struct jbd2_journal_revoke_tail { | ||
216 | __be32 r_checksum; /* crc32c(uuid+revoke_block) */ | ||
217 | }; | ||
195 | 218 | ||
196 | /* Definitions for the journal tag flags word: */ | 219 | /* Definitions for the journal tag flags word: */ |
197 | #define JBD2_FLAG_ESCAPE 1 /* on-disk block is escaped */ | 220 | #define JBD2_FLAG_ESCAPE 1 /* on-disk block is escaped */ |
@@ -241,7 +264,10 @@ typedef struct journal_superblock_s | |||
241 | __be32 s_max_trans_data; /* Limit of data blocks per trans. */ | 264 | __be32 s_max_trans_data; /* Limit of data blocks per trans. */ |
242 | 265 | ||
243 | /* 0x0050 */ | 266 | /* 0x0050 */ |
244 | __u32 s_padding[44]; | 267 | __u8 s_checksum_type; /* checksum type */ |
268 | __u8 s_padding2[3]; | ||
269 | __u32 s_padding[42]; | ||
270 | __be32 s_checksum; /* crc32c(superblock) */ | ||
245 | 271 | ||
246 | /* 0x0100 */ | 272 | /* 0x0100 */ |
247 | __u8 s_users[16*48]; /* ids of all fs'es sharing the log */ | 273 | __u8 s_users[16*48]; /* ids of all fs'es sharing the log */ |
@@ -263,13 +289,15 @@ typedef struct journal_superblock_s | |||
263 | #define JBD2_FEATURE_INCOMPAT_REVOKE 0x00000001 | 289 | #define JBD2_FEATURE_INCOMPAT_REVOKE 0x00000001 |
264 | #define JBD2_FEATURE_INCOMPAT_64BIT 0x00000002 | 290 | #define JBD2_FEATURE_INCOMPAT_64BIT 0x00000002 |
265 | #define JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT 0x00000004 | 291 | #define JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT 0x00000004 |
292 | #define JBD2_FEATURE_INCOMPAT_CSUM_V2 0x00000008 | ||
266 | 293 | ||
267 | /* Features known to this kernel version: */ | 294 | /* Features known to this kernel version: */ |
268 | #define JBD2_KNOWN_COMPAT_FEATURES JBD2_FEATURE_COMPAT_CHECKSUM | 295 | #define JBD2_KNOWN_COMPAT_FEATURES JBD2_FEATURE_COMPAT_CHECKSUM |
269 | #define JBD2_KNOWN_ROCOMPAT_FEATURES 0 | 296 | #define JBD2_KNOWN_ROCOMPAT_FEATURES 0 |
270 | #define JBD2_KNOWN_INCOMPAT_FEATURES (JBD2_FEATURE_INCOMPAT_REVOKE | \ | 297 | #define JBD2_KNOWN_INCOMPAT_FEATURES (JBD2_FEATURE_INCOMPAT_REVOKE | \ |
271 | JBD2_FEATURE_INCOMPAT_64BIT | \ | 298 | JBD2_FEATURE_INCOMPAT_64BIT | \ |
272 | JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT) | 299 | JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT | \ |
300 | JBD2_FEATURE_INCOMPAT_CSUM_V2) | ||
273 | 301 | ||
274 | #ifdef __KERNEL__ | 302 | #ifdef __KERNEL__ |
275 | 303 | ||
@@ -939,6 +967,12 @@ struct journal_s | |||
939 | * superblock pointer here | 967 | * superblock pointer here |
940 | */ | 968 | */ |
941 | void *j_private; | 969 | void *j_private; |
970 | |||
971 | /* Reference to checksum algorithm driver via cryptoapi */ | ||
972 | struct crypto_shash *j_chksum_driver; | ||
973 | |||
974 | /* Precomputed journal UUID checksum for seeding other checksums */ | ||
975 | __u32 j_csum_seed; | ||
942 | }; | 976 | }; |
943 | 977 | ||
944 | /* | 978 | /* |
@@ -1268,6 +1302,25 @@ static inline int jbd_space_needed(journal_t *journal) | |||
1268 | 1302 | ||
1269 | extern int jbd_blocks_per_page(struct inode *inode); | 1303 | extern int jbd_blocks_per_page(struct inode *inode); |
1270 | 1304 | ||
1305 | static inline u32 jbd2_chksum(journal_t *journal, u32 crc, | ||
1306 | const void *address, unsigned int length) | ||
1307 | { | ||
1308 | struct { | ||
1309 | struct shash_desc shash; | ||
1310 | char ctx[crypto_shash_descsize(journal->j_chksum_driver)]; | ||
1311 | } desc; | ||
1312 | int err; | ||
1313 | |||
1314 | desc.shash.tfm = journal->j_chksum_driver; | ||
1315 | desc.shash.flags = 0; | ||
1316 | *(u32 *)desc.ctx = crc; | ||
1317 | |||
1318 | err = crypto_shash_update(&desc.shash, address, length); | ||
1319 | BUG_ON(err); | ||
1320 | |||
1321 | return *(u32 *)desc.ctx; | ||
1322 | } | ||
1323 | |||
1271 | #ifdef __KERNEL__ | 1324 | #ifdef __KERNEL__ |
1272 | 1325 | ||
1273 | #define buffer_trace_init(bh) do {} while (0) | 1326 | #define buffer_trace_init(bh) do {} while (0) |
diff --git a/include/linux/jbd_common.h b/include/linux/jbd_common.h index 6230f8556a4e..6133679bc4c0 100644 --- a/include/linux/jbd_common.h +++ b/include/linux/jbd_common.h | |||
@@ -12,6 +12,7 @@ enum jbd_state_bits { | |||
12 | BH_State, /* Pins most journal_head state */ | 12 | BH_State, /* Pins most journal_head state */ |
13 | BH_JournalHead, /* Pins bh->b_private and jh->b_bh */ | 13 | BH_JournalHead, /* Pins bh->b_private and jh->b_bh */ |
14 | BH_Unshadow, /* Dummy bit, for BJ_Shadow wakeup filtering */ | 14 | BH_Unshadow, /* Dummy bit, for BJ_Shadow wakeup filtering */ |
15 | BH_Verified, /* Metadata block has been verified ok */ | ||
15 | BH_JBDPrivateStart, /* First bit available for private use by FS */ | 16 | BH_JBDPrivateStart, /* First bit available for private use by FS */ |
16 | }; | 17 | }; |
17 | 18 | ||
@@ -24,6 +25,7 @@ TAS_BUFFER_FNS(Revoked, revoked) | |||
24 | BUFFER_FNS(RevokeValid, revokevalid) | 25 | BUFFER_FNS(RevokeValid, revokevalid) |
25 | TAS_BUFFER_FNS(RevokeValid, revokevalid) | 26 | TAS_BUFFER_FNS(RevokeValid, revokevalid) |
26 | BUFFER_FNS(Freed, freed) | 27 | BUFFER_FNS(Freed, freed) |
28 | BUFFER_FNS(Verified, verified) | ||
27 | 29 | ||
28 | static inline struct buffer_head *jh2bh(struct journal_head *jh) | 30 | static inline struct buffer_head *jh2bh(struct journal_head *jh) |
29 | { | 31 | { |
diff --git a/include/linux/kallsyms.h b/include/linux/kallsyms.h index 387571959dd9..6883e197acb9 100644 --- a/include/linux/kallsyms.h +++ b/include/linux/kallsyms.h | |||
@@ -36,6 +36,7 @@ const char *kallsyms_lookup(unsigned long addr, | |||
36 | 36 | ||
37 | /* Look up a kernel symbol and return it in a text buffer. */ | 37 | /* Look up a kernel symbol and return it in a text buffer. */ |
38 | extern int sprint_symbol(char *buffer, unsigned long address); | 38 | extern int sprint_symbol(char *buffer, unsigned long address); |
39 | extern int sprint_symbol_no_offset(char *buffer, unsigned long address); | ||
39 | extern int sprint_backtrace(char *buffer, unsigned long address); | 40 | extern int sprint_backtrace(char *buffer, unsigned long address); |
40 | 41 | ||
41 | /* Look up a kernel symbol and print it to the kernel messages. */ | 42 | /* Look up a kernel symbol and print it to the kernel messages. */ |
@@ -80,6 +81,12 @@ static inline int sprint_symbol(char *buffer, unsigned long addr) | |||
80 | return 0; | 81 | return 0; |
81 | } | 82 | } |
82 | 83 | ||
84 | static inline int sprint_symbol_no_offset(char *buffer, unsigned long addr) | ||
85 | { | ||
86 | *buffer = '\0'; | ||
87 | return 0; | ||
88 | } | ||
89 | |||
83 | static inline int sprint_backtrace(char *buffer, unsigned long addr) | 90 | static inline int sprint_backtrace(char *buffer, unsigned long addr) |
84 | { | 91 | { |
85 | *buffer = '\0'; | 92 | *buffer = '\0'; |
diff --git a/include/linux/kcmp.h b/include/linux/kcmp.h new file mode 100644 index 000000000000..2dcd1b3aafc8 --- /dev/null +++ b/include/linux/kcmp.h | |||
@@ -0,0 +1,17 @@ | |||
1 | #ifndef _LINUX_KCMP_H | ||
2 | #define _LINUX_KCMP_H | ||
3 | |||
4 | /* Comparison type */ | ||
5 | enum kcmp_type { | ||
6 | KCMP_FILE, | ||
7 | KCMP_VM, | ||
8 | KCMP_FILES, | ||
9 | KCMP_FS, | ||
10 | KCMP_SIGHAND, | ||
11 | KCMP_IO, | ||
12 | KCMP_SYSVSEM, | ||
13 | |||
14 | KCMP_TYPES, | ||
15 | }; | ||
16 | |||
17 | #endif /* _LINUX_KCMP_H */ | ||
diff --git a/include/linux/kernel-page-flags.h b/include/linux/kernel-page-flags.h index 26a65711676f..a1bdf6966357 100644 --- a/include/linux/kernel-page-flags.h +++ b/include/linux/kernel-page-flags.h | |||
@@ -32,6 +32,8 @@ | |||
32 | #define KPF_KSM 21 | 32 | #define KPF_KSM 21 |
33 | #define KPF_THP 22 | 33 | #define KPF_THP 22 |
34 | 34 | ||
35 | #ifdef __KERNEL__ | ||
36 | |||
35 | /* kernel hacking assistances | 37 | /* kernel hacking assistances |
36 | * WARNING: subject to change, never rely on them! | 38 | * WARNING: subject to change, never rely on them! |
37 | */ | 39 | */ |
@@ -44,4 +46,6 @@ | |||
44 | #define KPF_ARCH 38 | 46 | #define KPF_ARCH 38 |
45 | #define KPF_UNCACHED 39 | 47 | #define KPF_UNCACHED 39 |
46 | 48 | ||
49 | #endif /* __KERNEL__ */ | ||
50 | |||
47 | #endif /* LINUX_KERNEL_PAGE_FLAGS_H */ | 51 | #endif /* LINUX_KERNEL_PAGE_FLAGS_H */ |
diff --git a/include/linux/kernel.h b/include/linux/kernel.h index c0d34420a913..e07f5e0c5df4 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h | |||
@@ -35,9 +35,12 @@ | |||
35 | #define LLONG_MAX ((long long)(~0ULL>>1)) | 35 | #define LLONG_MAX ((long long)(~0ULL>>1)) |
36 | #define LLONG_MIN (-LLONG_MAX - 1) | 36 | #define LLONG_MIN (-LLONG_MAX - 1) |
37 | #define ULLONG_MAX (~0ULL) | 37 | #define ULLONG_MAX (~0ULL) |
38 | #define SIZE_MAX (~(size_t)0) | ||
38 | 39 | ||
39 | #define STACK_MAGIC 0xdeadbeef | 40 | #define STACK_MAGIC 0xdeadbeef |
40 | 41 | ||
42 | #define REPEAT_BYTE(x) ((~0ul / 0xff) * (x)) | ||
43 | |||
41 | #define ALIGN(x, a) __ALIGN_KERNEL((x), (a)) | 44 | #define ALIGN(x, a) __ALIGN_KERNEL((x), (a)) |
42 | #define __ALIGN_MASK(x, mask) __ALIGN_KERNEL_MASK((x), (mask)) | 45 | #define __ALIGN_MASK(x, mask) __ALIGN_KERNEL_MASK((x), (mask)) |
43 | #define PTR_ALIGN(p, a) ((typeof(p))ALIGN((unsigned long)(p), (a))) | 46 | #define PTR_ALIGN(p, a) ((typeof(p))ALIGN((unsigned long)(p), (a))) |
diff --git a/include/linux/kexec.h b/include/linux/kexec.h index 0d7d6a1b172f..37c5f7261142 100644 --- a/include/linux/kexec.h +++ b/include/linux/kexec.h | |||
@@ -1,8 +1,58 @@ | |||
1 | #ifndef LINUX_KEXEC_H | 1 | #ifndef LINUX_KEXEC_H |
2 | #define LINUX_KEXEC_H | 2 | #define LINUX_KEXEC_H |
3 | 3 | ||
4 | #ifdef CONFIG_KEXEC | 4 | /* kexec system call - It loads the new kernel to boot into. |
5 | * kexec does not sync, or unmount filesystems so if you need | ||
6 | * that to happen you need to do that yourself. | ||
7 | */ | ||
8 | |||
5 | #include <linux/types.h> | 9 | #include <linux/types.h> |
10 | |||
11 | /* kexec flags for different usage scenarios */ | ||
12 | #define KEXEC_ON_CRASH 0x00000001 | ||
13 | #define KEXEC_PRESERVE_CONTEXT 0x00000002 | ||
14 | #define KEXEC_ARCH_MASK 0xffff0000 | ||
15 | |||
16 | /* These values match the ELF architecture values. | ||
17 | * Unless there is a good reason that should continue to be the case. | ||
18 | */ | ||
19 | #define KEXEC_ARCH_DEFAULT ( 0 << 16) | ||
20 | #define KEXEC_ARCH_386 ( 3 << 16) | ||
21 | #define KEXEC_ARCH_X86_64 (62 << 16) | ||
22 | #define KEXEC_ARCH_PPC (20 << 16) | ||
23 | #define KEXEC_ARCH_PPC64 (21 << 16) | ||
24 | #define KEXEC_ARCH_IA_64 (50 << 16) | ||
25 | #define KEXEC_ARCH_ARM (40 << 16) | ||
26 | #define KEXEC_ARCH_S390 (22 << 16) | ||
27 | #define KEXEC_ARCH_SH (42 << 16) | ||
28 | #define KEXEC_ARCH_MIPS_LE (10 << 16) | ||
29 | #define KEXEC_ARCH_MIPS ( 8 << 16) | ||
30 | |||
31 | /* The artificial cap on the number of segments passed to kexec_load. */ | ||
32 | #define KEXEC_SEGMENT_MAX 16 | ||
33 | |||
34 | #ifndef __KERNEL__ | ||
35 | /* | ||
36 | * This structure is used to hold the arguments that are used when | ||
37 | * loading kernel binaries. | ||
38 | */ | ||
39 | struct kexec_segment { | ||
40 | const void *buf; | ||
41 | size_t bufsz; | ||
42 | const void *mem; | ||
43 | size_t memsz; | ||
44 | }; | ||
45 | |||
46 | /* Load a new kernel image as described by the kexec_segment array | ||
47 | * consisting of passed number of segments at the entry-point address. | ||
48 | * The flags allow different useage types. | ||
49 | */ | ||
50 | extern int kexec_load(void *, size_t, struct kexec_segment *, | ||
51 | unsigned long int); | ||
52 | #endif /* __KERNEL__ */ | ||
53 | |||
54 | #ifdef __KERNEL__ | ||
55 | #ifdef CONFIG_KEXEC | ||
6 | #include <linux/list.h> | 56 | #include <linux/list.h> |
7 | #include <linux/linkage.h> | 57 | #include <linux/linkage.h> |
8 | #include <linux/compat.h> | 58 | #include <linux/compat.h> |
@@ -67,11 +117,10 @@ typedef unsigned long kimage_entry_t; | |||
67 | #define IND_DONE 0x4 | 117 | #define IND_DONE 0x4 |
68 | #define IND_SOURCE 0x8 | 118 | #define IND_SOURCE 0x8 |
69 | 119 | ||
70 | #define KEXEC_SEGMENT_MAX 16 | ||
71 | struct kexec_segment { | 120 | struct kexec_segment { |
72 | void __user *buf; | 121 | void __user *buf; |
73 | size_t bufsz; | 122 | size_t bufsz; |
74 | unsigned long mem; /* User space sees this as a (void *) ... */ | 123 | unsigned long mem; |
75 | size_t memsz; | 124 | size_t memsz; |
76 | }; | 125 | }; |
77 | 126 | ||
@@ -175,25 +224,6 @@ extern struct kimage *kexec_crash_image; | |||
175 | #define kexec_flush_icache_page(page) | 224 | #define kexec_flush_icache_page(page) |
176 | #endif | 225 | #endif |
177 | 226 | ||
178 | #define KEXEC_ON_CRASH 0x00000001 | ||
179 | #define KEXEC_PRESERVE_CONTEXT 0x00000002 | ||
180 | #define KEXEC_ARCH_MASK 0xffff0000 | ||
181 | |||
182 | /* These values match the ELF architecture values. | ||
183 | * Unless there is a good reason that should continue to be the case. | ||
184 | */ | ||
185 | #define KEXEC_ARCH_DEFAULT ( 0 << 16) | ||
186 | #define KEXEC_ARCH_386 ( 3 << 16) | ||
187 | #define KEXEC_ARCH_X86_64 (62 << 16) | ||
188 | #define KEXEC_ARCH_PPC (20 << 16) | ||
189 | #define KEXEC_ARCH_PPC64 (21 << 16) | ||
190 | #define KEXEC_ARCH_IA_64 (50 << 16) | ||
191 | #define KEXEC_ARCH_ARM (40 << 16) | ||
192 | #define KEXEC_ARCH_S390 (22 << 16) | ||
193 | #define KEXEC_ARCH_SH (42 << 16) | ||
194 | #define KEXEC_ARCH_MIPS_LE (10 << 16) | ||
195 | #define KEXEC_ARCH_MIPS ( 8 << 16) | ||
196 | |||
197 | /* List of defined/legal kexec flags */ | 227 | /* List of defined/legal kexec flags */ |
198 | #ifndef CONFIG_KEXEC_JUMP | 228 | #ifndef CONFIG_KEXEC_JUMP |
199 | #define KEXEC_FLAGS KEXEC_ON_CRASH | 229 | #define KEXEC_FLAGS KEXEC_ON_CRASH |
@@ -228,4 +258,5 @@ struct task_struct; | |||
228 | static inline void crash_kexec(struct pt_regs *regs) { } | 258 | static inline void crash_kexec(struct pt_regs *regs) { } |
229 | static inline int kexec_should_crash(struct task_struct *p) { return 0; } | 259 | static inline int kexec_should_crash(struct task_struct *p) { return 0; } |
230 | #endif /* CONFIG_KEXEC */ | 260 | #endif /* CONFIG_KEXEC */ |
261 | #endif /* __KERNEL__ */ | ||
231 | #endif /* LINUX_KEXEC_H */ | 262 | #endif /* LINUX_KEXEC_H */ |
diff --git a/include/linux/key.h b/include/linux/key.h index 5231800770e1..4cd22ed627ef 100644 --- a/include/linux/key.h +++ b/include/linux/key.h | |||
@@ -308,9 +308,6 @@ static inline bool key_is_instantiated(const struct key *key) | |||
308 | #ifdef CONFIG_SYSCTL | 308 | #ifdef CONFIG_SYSCTL |
309 | extern ctl_table key_sysctls[]; | 309 | extern ctl_table key_sysctls[]; |
310 | #endif | 310 | #endif |
311 | |||
312 | extern void key_replace_session_keyring(void); | ||
313 | |||
314 | /* | 311 | /* |
315 | * the userspace interface | 312 | * the userspace interface |
316 | */ | 313 | */ |
@@ -334,7 +331,6 @@ extern void key_init(void); | |||
334 | #define key_fsuid_changed(t) do { } while(0) | 331 | #define key_fsuid_changed(t) do { } while(0) |
335 | #define key_fsgid_changed(t) do { } while(0) | 332 | #define key_fsgid_changed(t) do { } while(0) |
336 | #define key_init() do { } while(0) | 333 | #define key_init() do { } while(0) |
337 | #define key_replace_session_keyring() do { } while(0) | ||
338 | 334 | ||
339 | #endif /* CONFIG_KEYS */ | 335 | #endif /* CONFIG_KEYS */ |
340 | #endif /* __KERNEL__ */ | 336 | #endif /* __KERNEL__ */ |
diff --git a/include/linux/kmod.h b/include/linux/kmod.h index dd99c329e161..5398d5807075 100644 --- a/include/linux/kmod.h +++ b/include/linux/kmod.h | |||
@@ -66,40 +66,10 @@ struct subprocess_info { | |||
66 | void *data; | 66 | void *data; |
67 | }; | 67 | }; |
68 | 68 | ||
69 | /* Allocate a subprocess_info structure */ | 69 | extern int |
70 | struct subprocess_info *call_usermodehelper_setup(char *path, char **argv, | ||
71 | char **envp, gfp_t gfp_mask); | ||
72 | |||
73 | /* Set various pieces of state into the subprocess_info structure */ | ||
74 | void call_usermodehelper_setfns(struct subprocess_info *info, | ||
75 | int (*init)(struct subprocess_info *info, struct cred *new), | ||
76 | void (*cleanup)(struct subprocess_info *info), | ||
77 | void *data); | ||
78 | |||
79 | /* Actually execute the sub-process */ | ||
80 | int call_usermodehelper_exec(struct subprocess_info *info, int wait); | ||
81 | |||
82 | /* Free the subprocess_info. This is only needed if you're not going | ||
83 | to call call_usermodehelper_exec */ | ||
84 | void call_usermodehelper_freeinfo(struct subprocess_info *info); | ||
85 | |||
86 | static inline int | ||
87 | call_usermodehelper_fns(char *path, char **argv, char **envp, int wait, | 70 | call_usermodehelper_fns(char *path, char **argv, char **envp, int wait, |
88 | int (*init)(struct subprocess_info *info, struct cred *new), | 71 | int (*init)(struct subprocess_info *info, struct cred *new), |
89 | void (*cleanup)(struct subprocess_info *), void *data) | 72 | void (*cleanup)(struct subprocess_info *), void *data); |
90 | { | ||
91 | struct subprocess_info *info; | ||
92 | gfp_t gfp_mask = (wait == UMH_NO_WAIT) ? GFP_ATOMIC : GFP_KERNEL; | ||
93 | |||
94 | info = call_usermodehelper_setup(path, argv, envp, gfp_mask); | ||
95 | |||
96 | if (info == NULL) | ||
97 | return -ENOMEM; | ||
98 | |||
99 | call_usermodehelper_setfns(info, init, cleanup, data); | ||
100 | |||
101 | return call_usermodehelper_exec(info, wait); | ||
102 | } | ||
103 | 73 | ||
104 | static inline int | 74 | static inline int |
105 | call_usermodehelper(char *path, char **argv, char **envp, int wait) | 75 | call_usermodehelper(char *path, char **argv, char **envp, int wait) |
diff --git a/include/linux/kvm.h b/include/linux/kvm.h index 6c322a90b92f..09f2b3aa2da7 100644 --- a/include/linux/kvm.h +++ b/include/linux/kvm.h | |||
@@ -449,6 +449,30 @@ struct kvm_ppc_pvinfo { | |||
449 | __u8 pad[108]; | 449 | __u8 pad[108]; |
450 | }; | 450 | }; |
451 | 451 | ||
452 | /* for KVM_PPC_GET_SMMU_INFO */ | ||
453 | #define KVM_PPC_PAGE_SIZES_MAX_SZ 8 | ||
454 | |||
455 | struct kvm_ppc_one_page_size { | ||
456 | __u32 page_shift; /* Page shift (or 0) */ | ||
457 | __u32 pte_enc; /* Encoding in the HPTE (>>12) */ | ||
458 | }; | ||
459 | |||
460 | struct kvm_ppc_one_seg_page_size { | ||
461 | __u32 page_shift; /* Base page shift of segment (or 0) */ | ||
462 | __u32 slb_enc; /* SLB encoding for BookS */ | ||
463 | struct kvm_ppc_one_page_size enc[KVM_PPC_PAGE_SIZES_MAX_SZ]; | ||
464 | }; | ||
465 | |||
466 | #define KVM_PPC_PAGE_SIZES_REAL 0x00000001 | ||
467 | #define KVM_PPC_1T_SEGMENTS 0x00000002 | ||
468 | |||
469 | struct kvm_ppc_smmu_info { | ||
470 | __u64 flags; | ||
471 | __u32 slb_size; | ||
472 | __u32 pad; | ||
473 | struct kvm_ppc_one_seg_page_size sps[KVM_PPC_PAGE_SIZES_MAX_SZ]; | ||
474 | }; | ||
475 | |||
452 | #define KVMIO 0xAE | 476 | #define KVMIO 0xAE |
453 | 477 | ||
454 | /* machine type bits, to be used as argument to KVM_CREATE_VM */ | 478 | /* machine type bits, to be used as argument to KVM_CREATE_VM */ |
@@ -589,6 +613,10 @@ struct kvm_ppc_pvinfo { | |||
589 | #define KVM_CAP_S390_UCONTROL 73 | 613 | #define KVM_CAP_S390_UCONTROL 73 |
590 | #define KVM_CAP_SYNC_REGS 74 | 614 | #define KVM_CAP_SYNC_REGS 74 |
591 | #define KVM_CAP_PCI_2_3 75 | 615 | #define KVM_CAP_PCI_2_3 75 |
616 | #define KVM_CAP_KVMCLOCK_CTRL 76 | ||
617 | #define KVM_CAP_SIGNAL_MSI 77 | ||
618 | #define KVM_CAP_PPC_GET_SMMU_INFO 78 | ||
619 | #define KVM_CAP_S390_COW 79 | ||
592 | 620 | ||
593 | #ifdef KVM_CAP_IRQ_ROUTING | 621 | #ifdef KVM_CAP_IRQ_ROUTING |
594 | 622 | ||
@@ -714,6 +742,14 @@ struct kvm_one_reg { | |||
714 | __u64 addr; | 742 | __u64 addr; |
715 | }; | 743 | }; |
716 | 744 | ||
745 | struct kvm_msi { | ||
746 | __u32 address_lo; | ||
747 | __u32 address_hi; | ||
748 | __u32 data; | ||
749 | __u32 flags; | ||
750 | __u8 pad[16]; | ||
751 | }; | ||
752 | |||
717 | /* | 753 | /* |
718 | * ioctls for VM fds | 754 | * ioctls for VM fds |
719 | */ | 755 | */ |
@@ -788,6 +824,10 @@ struct kvm_s390_ucas_mapping { | |||
788 | /* Available with KVM_CAP_PCI_2_3 */ | 824 | /* Available with KVM_CAP_PCI_2_3 */ |
789 | #define KVM_ASSIGN_SET_INTX_MASK _IOW(KVMIO, 0xa4, \ | 825 | #define KVM_ASSIGN_SET_INTX_MASK _IOW(KVMIO, 0xa4, \ |
790 | struct kvm_assigned_pci_dev) | 826 | struct kvm_assigned_pci_dev) |
827 | /* Available with KVM_CAP_SIGNAL_MSI */ | ||
828 | #define KVM_SIGNAL_MSI _IOW(KVMIO, 0xa5, struct kvm_msi) | ||
829 | /* Available with KVM_CAP_PPC_GET_SMMU_INFO */ | ||
830 | #define KVM_PPC_GET_SMMU_INFO _IOR(KVMIO, 0xa6, struct kvm_ppc_smmu_info) | ||
791 | 831 | ||
792 | /* | 832 | /* |
793 | * ioctls for vcpu fds | 833 | * ioctls for vcpu fds |
@@ -859,6 +899,8 @@ struct kvm_s390_ucas_mapping { | |||
859 | /* Available with KVM_CAP_ONE_REG */ | 899 | /* Available with KVM_CAP_ONE_REG */ |
860 | #define KVM_GET_ONE_REG _IOW(KVMIO, 0xab, struct kvm_one_reg) | 900 | #define KVM_GET_ONE_REG _IOW(KVMIO, 0xab, struct kvm_one_reg) |
861 | #define KVM_SET_ONE_REG _IOW(KVMIO, 0xac, struct kvm_one_reg) | 901 | #define KVM_SET_ONE_REG _IOW(KVMIO, 0xac, struct kvm_one_reg) |
902 | /* VM is being stopped by host */ | ||
903 | #define KVM_KVMCLOCK_CTRL _IO(KVMIO, 0xad) | ||
862 | 904 | ||
863 | #define KVM_DEV_ASSIGN_ENABLE_IOMMU (1 << 0) | 905 | #define KVM_DEV_ASSIGN_ENABLE_IOMMU (1 << 0) |
864 | #define KVM_DEV_ASSIGN_PCI_2_3 (1 << 1) | 906 | #define KVM_DEV_ASSIGN_PCI_2_3 (1 << 1) |
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 72cbf08d45fb..c4464356b35b 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h | |||
@@ -35,6 +35,20 @@ | |||
35 | #endif | 35 | #endif |
36 | 36 | ||
37 | /* | 37 | /* |
38 | * If we support unaligned MMIO, at most one fragment will be split into two: | ||
39 | */ | ||
40 | #ifdef KVM_UNALIGNED_MMIO | ||
41 | # define KVM_EXTRA_MMIO_FRAGMENTS 1 | ||
42 | #else | ||
43 | # define KVM_EXTRA_MMIO_FRAGMENTS 0 | ||
44 | #endif | ||
45 | |||
46 | #define KVM_USER_MMIO_SIZE 8 | ||
47 | |||
48 | #define KVM_MAX_MMIO_FRAGMENTS \ | ||
49 | (KVM_MMIO_SIZE / KVM_USER_MMIO_SIZE + KVM_EXTRA_MMIO_FRAGMENTS) | ||
50 | |||
51 | /* | ||
38 | * vcpu->requests bit members | 52 | * vcpu->requests bit members |
39 | */ | 53 | */ |
40 | #define KVM_REQ_TLB_FLUSH 0 | 54 | #define KVM_REQ_TLB_FLUSH 0 |
@@ -68,10 +82,11 @@ struct kvm_io_range { | |||
68 | struct kvm_io_device *dev; | 82 | struct kvm_io_device *dev; |
69 | }; | 83 | }; |
70 | 84 | ||
85 | #define NR_IOBUS_DEVS 1000 | ||
86 | |||
71 | struct kvm_io_bus { | 87 | struct kvm_io_bus { |
72 | int dev_count; | 88 | int dev_count; |
73 | #define NR_IOBUS_DEVS 300 | 89 | struct kvm_io_range range[]; |
74 | struct kvm_io_range range[NR_IOBUS_DEVS]; | ||
75 | }; | 90 | }; |
76 | 91 | ||
77 | enum kvm_bus { | 92 | enum kvm_bus { |
@@ -113,7 +128,18 @@ int kvm_async_pf_wakeup_all(struct kvm_vcpu *vcpu); | |||
113 | enum { | 128 | enum { |
114 | OUTSIDE_GUEST_MODE, | 129 | OUTSIDE_GUEST_MODE, |
115 | IN_GUEST_MODE, | 130 | IN_GUEST_MODE, |
116 | EXITING_GUEST_MODE | 131 | EXITING_GUEST_MODE, |
132 | READING_SHADOW_PAGE_TABLES, | ||
133 | }; | ||
134 | |||
135 | /* | ||
136 | * Sometimes a large or cross-page mmio needs to be broken up into separate | ||
137 | * exits for userspace servicing. | ||
138 | */ | ||
139 | struct kvm_mmio_fragment { | ||
140 | gpa_t gpa; | ||
141 | void *data; | ||
142 | unsigned len; | ||
117 | }; | 143 | }; |
118 | 144 | ||
119 | struct kvm_vcpu { | 145 | struct kvm_vcpu { |
@@ -143,10 +169,9 @@ struct kvm_vcpu { | |||
143 | int mmio_needed; | 169 | int mmio_needed; |
144 | int mmio_read_completed; | 170 | int mmio_read_completed; |
145 | int mmio_is_write; | 171 | int mmio_is_write; |
146 | int mmio_size; | 172 | int mmio_cur_fragment; |
147 | int mmio_index; | 173 | int mmio_nr_fragments; |
148 | unsigned char mmio_data[KVM_MMIO_SIZE]; | 174 | struct kvm_mmio_fragment mmio_fragments[KVM_MAX_MMIO_FRAGMENTS]; |
149 | gpa_t mmio_phys_addr; | ||
150 | #endif | 175 | #endif |
151 | 176 | ||
152 | #ifdef CONFIG_KVM_ASYNC_PF | 177 | #ifdef CONFIG_KVM_ASYNC_PF |
@@ -178,8 +203,6 @@ struct kvm_memory_slot { | |||
178 | unsigned long flags; | 203 | unsigned long flags; |
179 | unsigned long *rmap; | 204 | unsigned long *rmap; |
180 | unsigned long *dirty_bitmap; | 205 | unsigned long *dirty_bitmap; |
181 | unsigned long *dirty_bitmap_head; | ||
182 | unsigned long nr_dirty_pages; | ||
183 | struct kvm_arch_memory_slot arch; | 206 | struct kvm_arch_memory_slot arch; |
184 | unsigned long userspace_addr; | 207 | unsigned long userspace_addr; |
185 | int user_alloc; | 208 | int user_alloc; |
@@ -438,6 +461,8 @@ void mark_page_dirty_in_slot(struct kvm *kvm, struct kvm_memory_slot *memslot, | |||
438 | gfn_t gfn); | 461 | gfn_t gfn); |
439 | 462 | ||
440 | void kvm_vcpu_block(struct kvm_vcpu *vcpu); | 463 | void kvm_vcpu_block(struct kvm_vcpu *vcpu); |
464 | void kvm_vcpu_kick(struct kvm_vcpu *vcpu); | ||
465 | bool kvm_vcpu_yield_to(struct kvm_vcpu *target); | ||
441 | void kvm_vcpu_on_spin(struct kvm_vcpu *vcpu); | 466 | void kvm_vcpu_on_spin(struct kvm_vcpu *vcpu); |
442 | void kvm_resched(struct kvm_vcpu *vcpu); | 467 | void kvm_resched(struct kvm_vcpu *vcpu); |
443 | void kvm_load_guest_fpu(struct kvm_vcpu *vcpu); | 468 | void kvm_load_guest_fpu(struct kvm_vcpu *vcpu); |
@@ -506,6 +531,7 @@ int kvm_arch_hardware_setup(void); | |||
506 | void kvm_arch_hardware_unsetup(void); | 531 | void kvm_arch_hardware_unsetup(void); |
507 | void kvm_arch_check_processor_compat(void *rtn); | 532 | void kvm_arch_check_processor_compat(void *rtn); |
508 | int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu); | 533 | int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu); |
534 | int kvm_arch_vcpu_should_kick(struct kvm_vcpu *vcpu); | ||
509 | 535 | ||
510 | void kvm_free_physmem(struct kvm *kvm); | 536 | void kvm_free_physmem(struct kvm *kvm); |
511 | 537 | ||
@@ -521,6 +547,15 @@ static inline void kvm_arch_free_vm(struct kvm *kvm) | |||
521 | } | 547 | } |
522 | #endif | 548 | #endif |
523 | 549 | ||
550 | static inline wait_queue_head_t *kvm_arch_vcpu_wq(struct kvm_vcpu *vcpu) | ||
551 | { | ||
552 | #ifdef __KVM_HAVE_ARCH_WQP | ||
553 | return vcpu->arch.wqp; | ||
554 | #else | ||
555 | return &vcpu->wq; | ||
556 | #endif | ||
557 | } | ||
558 | |||
524 | int kvm_arch_init_vm(struct kvm *kvm, unsigned long type); | 559 | int kvm_arch_init_vm(struct kvm *kvm, unsigned long type); |
525 | void kvm_arch_destroy_vm(struct kvm *kvm); | 560 | void kvm_arch_destroy_vm(struct kvm *kvm); |
526 | void kvm_free_all_assigned_devices(struct kvm *kvm); | 561 | void kvm_free_all_assigned_devices(struct kvm *kvm); |
@@ -769,6 +804,8 @@ int kvm_set_irq_routing(struct kvm *kvm, | |||
769 | unsigned flags); | 804 | unsigned flags); |
770 | void kvm_free_irq_routing(struct kvm *kvm); | 805 | void kvm_free_irq_routing(struct kvm *kvm); |
771 | 806 | ||
807 | int kvm_send_userspace_msi(struct kvm *kvm, struct kvm_msi *msi); | ||
808 | |||
772 | #else | 809 | #else |
773 | 810 | ||
774 | static inline void kvm_free_irq_routing(struct kvm *kvm) {} | 811 | static inline void kvm_free_irq_routing(struct kvm *kvm) {} |
diff --git a/include/linux/lcd.h b/include/linux/lcd.h index 8877123f2d6e..e00c3b0ebc6b 100644 --- a/include/linux/lcd.h +++ b/include/linux/lcd.h | |||
@@ -40,6 +40,16 @@ struct lcd_ops { | |||
40 | /* Get the LCD panel power status (0: full on, 1..3: controller | 40 | /* Get the LCD panel power status (0: full on, 1..3: controller |
41 | power on, flat panel power off, 4: full off), see FB_BLANK_XXX */ | 41 | power on, flat panel power off, 4: full off), see FB_BLANK_XXX */ |
42 | int (*get_power)(struct lcd_device *); | 42 | int (*get_power)(struct lcd_device *); |
43 | /* | ||
44 | * Enable or disable power to the LCD(0: on; 4: off, see FB_BLANK_XXX) | ||
45 | * and this callback would be called proir to fb driver's callback. | ||
46 | * | ||
47 | * P.S. note that if early_set_power is not NULL then early fb notifier | ||
48 | * would be registered. | ||
49 | */ | ||
50 | int (*early_set_power)(struct lcd_device *, int power); | ||
51 | /* revert the effects of the early blank event. */ | ||
52 | int (*r_early_set_power)(struct lcd_device *, int power); | ||
43 | /* Enable or disable power to the LCD (0: on; 4: off, see FB_BLANK_XXX) */ | 53 | /* Enable or disable power to the LCD (0: on; 4: off, see FB_BLANK_XXX) */ |
44 | int (*set_power)(struct lcd_device *, int power); | 54 | int (*set_power)(struct lcd_device *, int power); |
45 | /* Get the current contrast setting (0-max_contrast) */ | 55 | /* Get the current contrast setting (0-max_contrast) */ |
diff --git a/include/linux/led-lm3530.h b/include/linux/led-lm3530.h index eeae6e742471..4b133479d6ea 100644 --- a/include/linux/led-lm3530.h +++ b/include/linux/led-lm3530.h | |||
@@ -92,7 +92,7 @@ struct lm3530_pwm_data { | |||
92 | * @als2_resistor_sel: internal resistance from ALS2 input to ground | 92 | * @als2_resistor_sel: internal resistance from ALS2 input to ground |
93 | * @als_vmin: als input voltage calibrated for max brightness in mV | 93 | * @als_vmin: als input voltage calibrated for max brightness in mV |
94 | * @als_vmax: als input voltage calibrated for min brightness in mV | 94 | * @als_vmax: als input voltage calibrated for min brightness in mV |
95 | * @brt_val: brightness value (0-255) | 95 | * @brt_val: brightness value (0-127) |
96 | * @pwm_data: PWM control functions (only valid when the mode is PWM) | 96 | * @pwm_data: PWM control functions (only valid when the mode is PWM) |
97 | */ | 97 | */ |
98 | struct lm3530_platform_data { | 98 | struct lm3530_platform_data { |
diff --git a/include/linux/leds.h b/include/linux/leds.h index 5884def15a24..39eee41d8c6f 100644 --- a/include/linux/leds.h +++ b/include/linux/leds.h | |||
@@ -73,6 +73,8 @@ struct led_classdev { | |||
73 | struct led_trigger *trigger; | 73 | struct led_trigger *trigger; |
74 | struct list_head trig_list; | 74 | struct list_head trig_list; |
75 | void *trigger_data; | 75 | void *trigger_data; |
76 | /* true if activated - deactivate routine uses it to do cleanup */ | ||
77 | bool activated; | ||
76 | #endif | 78 | #endif |
77 | }; | 79 | }; |
78 | 80 | ||
diff --git a/include/linux/lglock.h b/include/linux/lglock.h index 87f402ccec55..f01e5f6d1f07 100644 --- a/include/linux/lglock.h +++ b/include/linux/lglock.h | |||
@@ -23,28 +23,17 @@ | |||
23 | #include <linux/lockdep.h> | 23 | #include <linux/lockdep.h> |
24 | #include <linux/percpu.h> | 24 | #include <linux/percpu.h> |
25 | #include <linux/cpu.h> | 25 | #include <linux/cpu.h> |
26 | #include <linux/notifier.h> | ||
26 | 27 | ||
27 | /* can make br locks by using local lock for read side, global lock for write */ | 28 | /* can make br locks by using local lock for read side, global lock for write */ |
28 | #define br_lock_init(name) name##_lock_init() | 29 | #define br_lock_init(name) lg_lock_init(name, #name) |
29 | #define br_read_lock(name) name##_local_lock() | 30 | #define br_read_lock(name) lg_local_lock(name) |
30 | #define br_read_unlock(name) name##_local_unlock() | 31 | #define br_read_unlock(name) lg_local_unlock(name) |
31 | #define br_write_lock(name) name##_global_lock_online() | 32 | #define br_write_lock(name) lg_global_lock(name) |
32 | #define br_write_unlock(name) name##_global_unlock_online() | 33 | #define br_write_unlock(name) lg_global_unlock(name) |
33 | 34 | ||
34 | #define DECLARE_BRLOCK(name) DECLARE_LGLOCK(name) | ||
35 | #define DEFINE_BRLOCK(name) DEFINE_LGLOCK(name) | 35 | #define DEFINE_BRLOCK(name) DEFINE_LGLOCK(name) |
36 | 36 | ||
37 | |||
38 | #define lg_lock_init(name) name##_lock_init() | ||
39 | #define lg_local_lock(name) name##_local_lock() | ||
40 | #define lg_local_unlock(name) name##_local_unlock() | ||
41 | #define lg_local_lock_cpu(name, cpu) name##_local_lock_cpu(cpu) | ||
42 | #define lg_local_unlock_cpu(name, cpu) name##_local_unlock_cpu(cpu) | ||
43 | #define lg_global_lock(name) name##_global_lock() | ||
44 | #define lg_global_unlock(name) name##_global_unlock() | ||
45 | #define lg_global_lock_online(name) name##_global_lock_online() | ||
46 | #define lg_global_unlock_online(name) name##_global_unlock_online() | ||
47 | |||
48 | #ifdef CONFIG_DEBUG_LOCK_ALLOC | 37 | #ifdef CONFIG_DEBUG_LOCK_ALLOC |
49 | #define LOCKDEP_INIT_MAP lockdep_init_map | 38 | #define LOCKDEP_INIT_MAP lockdep_init_map |
50 | 39 | ||
@@ -59,142 +48,26 @@ | |||
59 | #define DEFINE_LGLOCK_LOCKDEP(name) | 48 | #define DEFINE_LGLOCK_LOCKDEP(name) |
60 | #endif | 49 | #endif |
61 | 50 | ||
62 | 51 | struct lglock { | |
63 | #define DECLARE_LGLOCK(name) \ | 52 | arch_spinlock_t __percpu *lock; |
64 | extern void name##_lock_init(void); \ | 53 | #ifdef CONFIG_DEBUG_LOCK_ALLOC |
65 | extern void name##_local_lock(void); \ | 54 | struct lock_class_key lock_key; |
66 | extern void name##_local_unlock(void); \ | 55 | struct lockdep_map lock_dep_map; |
67 | extern void name##_local_lock_cpu(int cpu); \ | 56 | #endif |
68 | extern void name##_local_unlock_cpu(int cpu); \ | 57 | }; |
69 | extern void name##_global_lock(void); \ | ||
70 | extern void name##_global_unlock(void); \ | ||
71 | extern void name##_global_lock_online(void); \ | ||
72 | extern void name##_global_unlock_online(void); \ | ||
73 | 58 | ||
74 | #define DEFINE_LGLOCK(name) \ | 59 | #define DEFINE_LGLOCK(name) \ |
75 | \ | 60 | DEFINE_LGLOCK_LOCKDEP(name); \ |
76 | DEFINE_SPINLOCK(name##_cpu_lock); \ | 61 | DEFINE_PER_CPU(arch_spinlock_t, name ## _lock) \ |
77 | cpumask_t name##_cpus __read_mostly; \ | 62 | = __ARCH_SPIN_LOCK_UNLOCKED; \ |
78 | DEFINE_PER_CPU(arch_spinlock_t, name##_lock); \ | 63 | struct lglock name = { .lock = &name ## _lock } |
79 | DEFINE_LGLOCK_LOCKDEP(name); \ | 64 | |
80 | \ | 65 | void lg_lock_init(struct lglock *lg, char *name); |
81 | static int \ | 66 | void lg_local_lock(struct lglock *lg); |
82 | name##_lg_cpu_callback(struct notifier_block *nb, \ | 67 | void lg_local_unlock(struct lglock *lg); |
83 | unsigned long action, void *hcpu) \ | 68 | void lg_local_lock_cpu(struct lglock *lg, int cpu); |
84 | { \ | 69 | void lg_local_unlock_cpu(struct lglock *lg, int cpu); |
85 | switch (action & ~CPU_TASKS_FROZEN) { \ | 70 | void lg_global_lock(struct lglock *lg); |
86 | case CPU_UP_PREPARE: \ | 71 | void lg_global_unlock(struct lglock *lg); |
87 | spin_lock(&name##_cpu_lock); \ | 72 | |
88 | cpu_set((unsigned long)hcpu, name##_cpus); \ | ||
89 | spin_unlock(&name##_cpu_lock); \ | ||
90 | break; \ | ||
91 | case CPU_UP_CANCELED: case CPU_DEAD: \ | ||
92 | spin_lock(&name##_cpu_lock); \ | ||
93 | cpu_clear((unsigned long)hcpu, name##_cpus); \ | ||
94 | spin_unlock(&name##_cpu_lock); \ | ||
95 | } \ | ||
96 | return NOTIFY_OK; \ | ||
97 | } \ | ||
98 | static struct notifier_block name##_lg_cpu_notifier = { \ | ||
99 | .notifier_call = name##_lg_cpu_callback, \ | ||
100 | }; \ | ||
101 | void name##_lock_init(void) { \ | ||
102 | int i; \ | ||
103 | LOCKDEP_INIT_MAP(&name##_lock_dep_map, #name, &name##_lock_key, 0); \ | ||
104 | for_each_possible_cpu(i) { \ | ||
105 | arch_spinlock_t *lock; \ | ||
106 | lock = &per_cpu(name##_lock, i); \ | ||
107 | *lock = (arch_spinlock_t)__ARCH_SPIN_LOCK_UNLOCKED; \ | ||
108 | } \ | ||
109 | register_hotcpu_notifier(&name##_lg_cpu_notifier); \ | ||
110 | get_online_cpus(); \ | ||
111 | for_each_online_cpu(i) \ | ||
112 | cpu_set(i, name##_cpus); \ | ||
113 | put_online_cpus(); \ | ||
114 | } \ | ||
115 | EXPORT_SYMBOL(name##_lock_init); \ | ||
116 | \ | ||
117 | void name##_local_lock(void) { \ | ||
118 | arch_spinlock_t *lock; \ | ||
119 | preempt_disable(); \ | ||
120 | rwlock_acquire_read(&name##_lock_dep_map, 0, 0, _THIS_IP_); \ | ||
121 | lock = &__get_cpu_var(name##_lock); \ | ||
122 | arch_spin_lock(lock); \ | ||
123 | } \ | ||
124 | EXPORT_SYMBOL(name##_local_lock); \ | ||
125 | \ | ||
126 | void name##_local_unlock(void) { \ | ||
127 | arch_spinlock_t *lock; \ | ||
128 | rwlock_release(&name##_lock_dep_map, 1, _THIS_IP_); \ | ||
129 | lock = &__get_cpu_var(name##_lock); \ | ||
130 | arch_spin_unlock(lock); \ | ||
131 | preempt_enable(); \ | ||
132 | } \ | ||
133 | EXPORT_SYMBOL(name##_local_unlock); \ | ||
134 | \ | ||
135 | void name##_local_lock_cpu(int cpu) { \ | ||
136 | arch_spinlock_t *lock; \ | ||
137 | preempt_disable(); \ | ||
138 | rwlock_acquire_read(&name##_lock_dep_map, 0, 0, _THIS_IP_); \ | ||
139 | lock = &per_cpu(name##_lock, cpu); \ | ||
140 | arch_spin_lock(lock); \ | ||
141 | } \ | ||
142 | EXPORT_SYMBOL(name##_local_lock_cpu); \ | ||
143 | \ | ||
144 | void name##_local_unlock_cpu(int cpu) { \ | ||
145 | arch_spinlock_t *lock; \ | ||
146 | rwlock_release(&name##_lock_dep_map, 1, _THIS_IP_); \ | ||
147 | lock = &per_cpu(name##_lock, cpu); \ | ||
148 | arch_spin_unlock(lock); \ | ||
149 | preempt_enable(); \ | ||
150 | } \ | ||
151 | EXPORT_SYMBOL(name##_local_unlock_cpu); \ | ||
152 | \ | ||
153 | void name##_global_lock_online(void) { \ | ||
154 | int i; \ | ||
155 | spin_lock(&name##_cpu_lock); \ | ||
156 | rwlock_acquire(&name##_lock_dep_map, 0, 0, _RET_IP_); \ | ||
157 | for_each_cpu(i, &name##_cpus) { \ | ||
158 | arch_spinlock_t *lock; \ | ||
159 | lock = &per_cpu(name##_lock, i); \ | ||
160 | arch_spin_lock(lock); \ | ||
161 | } \ | ||
162 | } \ | ||
163 | EXPORT_SYMBOL(name##_global_lock_online); \ | ||
164 | \ | ||
165 | void name##_global_unlock_online(void) { \ | ||
166 | int i; \ | ||
167 | rwlock_release(&name##_lock_dep_map, 1, _RET_IP_); \ | ||
168 | for_each_cpu(i, &name##_cpus) { \ | ||
169 | arch_spinlock_t *lock; \ | ||
170 | lock = &per_cpu(name##_lock, i); \ | ||
171 | arch_spin_unlock(lock); \ | ||
172 | } \ | ||
173 | spin_unlock(&name##_cpu_lock); \ | ||
174 | } \ | ||
175 | EXPORT_SYMBOL(name##_global_unlock_online); \ | ||
176 | \ | ||
177 | void name##_global_lock(void) { \ | ||
178 | int i; \ | ||
179 | preempt_disable(); \ | ||
180 | rwlock_acquire(&name##_lock_dep_map, 0, 0, _RET_IP_); \ | ||
181 | for_each_possible_cpu(i) { \ | ||
182 | arch_spinlock_t *lock; \ | ||
183 | lock = &per_cpu(name##_lock, i); \ | ||
184 | arch_spin_lock(lock); \ | ||
185 | } \ | ||
186 | } \ | ||
187 | EXPORT_SYMBOL(name##_global_lock); \ | ||
188 | \ | ||
189 | void name##_global_unlock(void) { \ | ||
190 | int i; \ | ||
191 | rwlock_release(&name##_lock_dep_map, 1, _RET_IP_); \ | ||
192 | for_each_possible_cpu(i) { \ | ||
193 | arch_spinlock_t *lock; \ | ||
194 | lock = &per_cpu(name##_lock, i); \ | ||
195 | arch_spin_unlock(lock); \ | ||
196 | } \ | ||
197 | preempt_enable(); \ | ||
198 | } \ | ||
199 | EXPORT_SYMBOL(name##_global_unlock); | ||
200 | #endif | 73 | #endif |
diff --git a/include/linux/lockd/bind.h b/include/linux/lockd/bind.h index 11a966e5f829..4d24d64578c4 100644 --- a/include/linux/lockd/bind.h +++ b/include/linux/lockd/bind.h | |||
@@ -54,7 +54,7 @@ extern void nlmclnt_done(struct nlm_host *host); | |||
54 | 54 | ||
55 | extern int nlmclnt_proc(struct nlm_host *host, int cmd, | 55 | extern int nlmclnt_proc(struct nlm_host *host, int cmd, |
56 | struct file_lock *fl); | 56 | struct file_lock *fl); |
57 | extern int lockd_up(void); | 57 | extern int lockd_up(struct net *net); |
58 | extern void lockd_down(void); | 58 | extern void lockd_down(struct net *net); |
59 | 59 | ||
60 | #endif /* LINUX_LOCKD_BIND_H */ | 60 | #endif /* LINUX_LOCKD_BIND_H */ |
diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index f94efd2f6c27..83e7ba90d6e5 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h | |||
@@ -63,12 +63,7 @@ extern int mem_cgroup_cache_charge(struct page *page, struct mm_struct *mm, | |||
63 | gfp_t gfp_mask); | 63 | gfp_t gfp_mask); |
64 | 64 | ||
65 | struct lruvec *mem_cgroup_zone_lruvec(struct zone *, struct mem_cgroup *); | 65 | struct lruvec *mem_cgroup_zone_lruvec(struct zone *, struct mem_cgroup *); |
66 | struct lruvec *mem_cgroup_lru_add_list(struct zone *, struct page *, | 66 | struct lruvec *mem_cgroup_page_lruvec(struct page *, struct zone *); |
67 | enum lru_list); | ||
68 | void mem_cgroup_lru_del_list(struct page *, enum lru_list); | ||
69 | void mem_cgroup_lru_del(struct page *); | ||
70 | struct lruvec *mem_cgroup_lru_move_lists(struct zone *, struct page *, | ||
71 | enum lru_list, enum lru_list); | ||
72 | 67 | ||
73 | /* For coalescing uncharge for reducing memcg' overhead*/ | 68 | /* For coalescing uncharge for reducing memcg' overhead*/ |
74 | extern void mem_cgroup_uncharge_start(void); | 69 | extern void mem_cgroup_uncharge_start(void); |
@@ -79,6 +74,8 @@ extern void mem_cgroup_uncharge_cache_page(struct page *page); | |||
79 | 74 | ||
80 | extern void mem_cgroup_out_of_memory(struct mem_cgroup *memcg, gfp_t gfp_mask, | 75 | extern void mem_cgroup_out_of_memory(struct mem_cgroup *memcg, gfp_t gfp_mask, |
81 | int order); | 76 | int order); |
77 | bool __mem_cgroup_same_or_subtree(const struct mem_cgroup *root_memcg, | ||
78 | struct mem_cgroup *memcg); | ||
82 | int task_in_mem_cgroup(struct task_struct *task, const struct mem_cgroup *memcg); | 79 | int task_in_mem_cgroup(struct task_struct *task, const struct mem_cgroup *memcg); |
83 | 80 | ||
84 | extern struct mem_cgroup *try_get_mem_cgroup_from_page(struct page *page); | 81 | extern struct mem_cgroup *try_get_mem_cgroup_from_page(struct page *page); |
@@ -92,10 +89,13 @@ static inline | |||
92 | int mm_match_cgroup(const struct mm_struct *mm, const struct mem_cgroup *cgroup) | 89 | int mm_match_cgroup(const struct mm_struct *mm, const struct mem_cgroup *cgroup) |
93 | { | 90 | { |
94 | struct mem_cgroup *memcg; | 91 | struct mem_cgroup *memcg; |
92 | int match; | ||
93 | |||
95 | rcu_read_lock(); | 94 | rcu_read_lock(); |
96 | memcg = mem_cgroup_from_task(rcu_dereference((mm)->owner)); | 95 | memcg = mem_cgroup_from_task(rcu_dereference((mm)->owner)); |
96 | match = __mem_cgroup_same_or_subtree(cgroup, memcg); | ||
97 | rcu_read_unlock(); | 97 | rcu_read_unlock(); |
98 | return cgroup == memcg; | 98 | return match; |
99 | } | 99 | } |
100 | 100 | ||
101 | extern struct cgroup_subsys_state *mem_cgroup_css(struct mem_cgroup *memcg); | 101 | extern struct cgroup_subsys_state *mem_cgroup_css(struct mem_cgroup *memcg); |
@@ -114,17 +114,11 @@ void mem_cgroup_iter_break(struct mem_cgroup *, struct mem_cgroup *); | |||
114 | /* | 114 | /* |
115 | * For memory reclaim. | 115 | * For memory reclaim. |
116 | */ | 116 | */ |
117 | int mem_cgroup_inactive_anon_is_low(struct mem_cgroup *memcg, | 117 | int mem_cgroup_inactive_anon_is_low(struct lruvec *lruvec); |
118 | struct zone *zone); | 118 | int mem_cgroup_inactive_file_is_low(struct lruvec *lruvec); |
119 | int mem_cgroup_inactive_file_is_low(struct mem_cgroup *memcg, | ||
120 | struct zone *zone); | ||
121 | int mem_cgroup_select_victim_node(struct mem_cgroup *memcg); | 119 | int mem_cgroup_select_victim_node(struct mem_cgroup *memcg); |
122 | unsigned long mem_cgroup_zone_nr_lru_pages(struct mem_cgroup *memcg, | 120 | unsigned long mem_cgroup_get_lru_size(struct lruvec *lruvec, enum lru_list); |
123 | int nid, int zid, unsigned int lrumask); | 121 | void mem_cgroup_update_lru_size(struct lruvec *, enum lru_list, int); |
124 | struct zone_reclaim_stat *mem_cgroup_get_reclaim_stat(struct mem_cgroup *memcg, | ||
125 | struct zone *zone); | ||
126 | struct zone_reclaim_stat* | ||
127 | mem_cgroup_get_reclaim_stat_from_page(struct page *page); | ||
128 | extern void mem_cgroup_print_oom_info(struct mem_cgroup *memcg, | 122 | extern void mem_cgroup_print_oom_info(struct mem_cgroup *memcg, |
129 | struct task_struct *p); | 123 | struct task_struct *p); |
130 | extern void mem_cgroup_replace_page_cache(struct page *oldpage, | 124 | extern void mem_cgroup_replace_page_cache(struct page *oldpage, |
@@ -251,25 +245,8 @@ static inline struct lruvec *mem_cgroup_zone_lruvec(struct zone *zone, | |||
251 | return &zone->lruvec; | 245 | return &zone->lruvec; |
252 | } | 246 | } |
253 | 247 | ||
254 | static inline struct lruvec *mem_cgroup_lru_add_list(struct zone *zone, | 248 | static inline struct lruvec *mem_cgroup_page_lruvec(struct page *page, |
255 | struct page *page, | 249 | struct zone *zone) |
256 | enum lru_list lru) | ||
257 | { | ||
258 | return &zone->lruvec; | ||
259 | } | ||
260 | |||
261 | static inline void mem_cgroup_lru_del_list(struct page *page, enum lru_list lru) | ||
262 | { | ||
263 | } | ||
264 | |||
265 | static inline void mem_cgroup_lru_del(struct page *page) | ||
266 | { | ||
267 | } | ||
268 | |||
269 | static inline struct lruvec *mem_cgroup_lru_move_lists(struct zone *zone, | ||
270 | struct page *page, | ||
271 | enum lru_list from, | ||
272 | enum lru_list to) | ||
273 | { | 250 | { |
274 | return &zone->lruvec; | 251 | return &zone->lruvec; |
275 | } | 252 | } |
@@ -333,35 +310,27 @@ static inline bool mem_cgroup_disabled(void) | |||
333 | } | 310 | } |
334 | 311 | ||
335 | static inline int | 312 | static inline int |
336 | mem_cgroup_inactive_anon_is_low(struct mem_cgroup *memcg, struct zone *zone) | 313 | mem_cgroup_inactive_anon_is_low(struct lruvec *lruvec) |
337 | { | 314 | { |
338 | return 1; | 315 | return 1; |
339 | } | 316 | } |
340 | 317 | ||
341 | static inline int | 318 | static inline int |
342 | mem_cgroup_inactive_file_is_low(struct mem_cgroup *memcg, struct zone *zone) | 319 | mem_cgroup_inactive_file_is_low(struct lruvec *lruvec) |
343 | { | 320 | { |
344 | return 1; | 321 | return 1; |
345 | } | 322 | } |
346 | 323 | ||
347 | static inline unsigned long | 324 | static inline unsigned long |
348 | mem_cgroup_zone_nr_lru_pages(struct mem_cgroup *memcg, int nid, int zid, | 325 | mem_cgroup_get_lru_size(struct lruvec *lruvec, enum lru_list lru) |
349 | unsigned int lru_mask) | ||
350 | { | 326 | { |
351 | return 0; | 327 | return 0; |
352 | } | 328 | } |
353 | 329 | ||
354 | 330 | static inline void | |
355 | static inline struct zone_reclaim_stat* | 331 | mem_cgroup_update_lru_size(struct lruvec *lruvec, enum lru_list lru, |
356 | mem_cgroup_get_reclaim_stat(struct mem_cgroup *memcg, struct zone *zone) | 332 | int increment) |
357 | { | ||
358 | return NULL; | ||
359 | } | ||
360 | |||
361 | static inline struct zone_reclaim_stat* | ||
362 | mem_cgroup_get_reclaim_stat_from_page(struct page *page) | ||
363 | { | 333 | { |
364 | return NULL; | ||
365 | } | 334 | } |
366 | 335 | ||
367 | static inline void | 336 | static inline void |
diff --git a/include/linux/mempolicy.h b/include/linux/mempolicy.h index 7c727a90d70d..4aa42732e47f 100644 --- a/include/linux/mempolicy.h +++ b/include/linux/mempolicy.h | |||
@@ -225,8 +225,8 @@ static inline void check_highest_zone(enum zone_type k) | |||
225 | policy_zone = k; | 225 | policy_zone = k; |
226 | } | 226 | } |
227 | 227 | ||
228 | int do_migrate_pages(struct mm_struct *mm, | 228 | int do_migrate_pages(struct mm_struct *mm, const nodemask_t *from, |
229 | const nodemask_t *from_nodes, const nodemask_t *to_nodes, int flags); | 229 | const nodemask_t *to, int flags); |
230 | 230 | ||
231 | 231 | ||
232 | #ifdef CONFIG_TMPFS | 232 | #ifdef CONFIG_TMPFS |
@@ -354,9 +354,8 @@ static inline bool mempolicy_nodemask_intersects(struct task_struct *tsk, | |||
354 | return false; | 354 | return false; |
355 | } | 355 | } |
356 | 356 | ||
357 | static inline int do_migrate_pages(struct mm_struct *mm, | 357 | static inline int do_migrate_pages(struct mm_struct *mm, const nodemask_t *from, |
358 | const nodemask_t *from_nodes, | 358 | const nodemask_t *to, int flags) |
359 | const nodemask_t *to_nodes, int flags) | ||
360 | { | 359 | { |
361 | return 0; | 360 | return 0; |
362 | } | 361 | } |
diff --git a/include/linux/mfd/abx500/ab8500.h b/include/linux/mfd/abx500/ab8500.h index fccc3002f271..91dd3ef63e99 100644 --- a/include/linux/mfd/abx500/ab8500.h +++ b/include/linux/mfd/abx500/ab8500.h | |||
@@ -7,6 +7,7 @@ | |||
7 | #ifndef MFD_AB8500_H | 7 | #ifndef MFD_AB8500_H |
8 | #define MFD_AB8500_H | 8 | #define MFD_AB8500_H |
9 | 9 | ||
10 | #include <linux/atomic.h> | ||
10 | #include <linux/mutex.h> | 11 | #include <linux/mutex.h> |
11 | 12 | ||
12 | struct device; | 13 | struct device; |
@@ -194,6 +195,14 @@ enum ab8500_version { | |||
194 | #define AB9540_INT_GPIO52F 123 | 195 | #define AB9540_INT_GPIO52F 123 |
195 | #define AB9540_INT_GPIO53F 124 | 196 | #define AB9540_INT_GPIO53F 124 |
196 | #define AB9540_INT_GPIO54F 125 /* not 8505 */ | 197 | #define AB9540_INT_GPIO54F 125 /* not 8505 */ |
198 | /* ab8500_irq_regoffset[16] -> IT[Source|Latch|Mask]25 */ | ||
199 | #define AB8505_INT_KEYSTUCK 128 | ||
200 | #define AB8505_INT_IKR 129 | ||
201 | #define AB8505_INT_IKP 130 | ||
202 | #define AB8505_INT_KP 131 | ||
203 | #define AB8505_INT_KEYDEGLITCH 132 | ||
204 | #define AB8505_INT_MODPWRSTATUSF 134 | ||
205 | #define AB8505_INT_MODPWRSTATUSR 135 | ||
197 | 206 | ||
198 | /* | 207 | /* |
199 | * AB8500_AB9540_NR_IRQS is used when configuring the IRQ numbers for the | 208 | * AB8500_AB9540_NR_IRQS is used when configuring the IRQ numbers for the |
@@ -203,8 +212,8 @@ enum ab8500_version { | |||
203 | * which is larger. | 212 | * which is larger. |
204 | */ | 213 | */ |
205 | #define AB8500_NR_IRQS 112 | 214 | #define AB8500_NR_IRQS 112 |
206 | #define AB8505_NR_IRQS 128 | 215 | #define AB8505_NR_IRQS 136 |
207 | #define AB9540_NR_IRQS 128 | 216 | #define AB9540_NR_IRQS 136 |
208 | /* This is set to the roof of any AB8500 chip variant IRQ counts */ | 217 | /* This is set to the roof of any AB8500 chip variant IRQ counts */ |
209 | #define AB8500_MAX_NR_IRQS AB9540_NR_IRQS | 218 | #define AB8500_MAX_NR_IRQS AB9540_NR_IRQS |
210 | 219 | ||
@@ -216,6 +225,7 @@ enum ab8500_version { | |||
216 | * @dev: parent device | 225 | * @dev: parent device |
217 | * @lock: read/write operations lock | 226 | * @lock: read/write operations lock |
218 | * @irq_lock: genirq bus lock | 227 | * @irq_lock: genirq bus lock |
228 | * @transfer_ongoing: 0 if no transfer ongoing | ||
219 | * @irq: irq line | 229 | * @irq: irq line |
220 | * @version: chip version id (e.g. ab8500 or ab9540) | 230 | * @version: chip version id (e.g. ab8500 or ab9540) |
221 | * @chip_id: chip revision id | 231 | * @chip_id: chip revision id |
@@ -234,7 +244,7 @@ struct ab8500 { | |||
234 | struct device *dev; | 244 | struct device *dev; |
235 | struct mutex lock; | 245 | struct mutex lock; |
236 | struct mutex irq_lock; | 246 | struct mutex irq_lock; |
237 | 247 | atomic_t transfer_ongoing; | |
238 | int irq_base; | 248 | int irq_base; |
239 | int irq; | 249 | int irq; |
240 | enum ab8500_version version; | 250 | enum ab8500_version version; |
@@ -280,6 +290,8 @@ extern int __devinit ab8500_init(struct ab8500 *ab8500, | |||
280 | enum ab8500_version version); | 290 | enum ab8500_version version); |
281 | extern int __devexit ab8500_exit(struct ab8500 *ab8500); | 291 | extern int __devexit ab8500_exit(struct ab8500 *ab8500); |
282 | 292 | ||
293 | extern int ab8500_suspend(struct ab8500 *ab8500); | ||
294 | |||
283 | static inline int is_ab8500(struct ab8500 *ab) | 295 | static inline int is_ab8500(struct ab8500 *ab) |
284 | { | 296 | { |
285 | return ab->version == AB8500_VERSION_AB8500; | 297 | return ab->version == AB8500_VERSION_AB8500; |
diff --git a/include/linux/mfd/anatop.h b/include/linux/mfd/anatop.h index 22c1007d3ec5..7f92acf03d9e 100644 --- a/include/linux/mfd/anatop.h +++ b/include/linux/mfd/anatop.h | |||
@@ -34,7 +34,7 @@ struct anatop { | |||
34 | spinlock_t reglock; | 34 | spinlock_t reglock; |
35 | }; | 35 | }; |
36 | 36 | ||
37 | extern u32 anatop_get_bits(struct anatop *, u32, int, int); | 37 | extern u32 anatop_read_reg(struct anatop *, u32); |
38 | extern void anatop_set_bits(struct anatop *, u32, int, int, u32); | 38 | extern void anatop_write_reg(struct anatop *, u32, u32, u32); |
39 | 39 | ||
40 | #endif /* __LINUX_MFD_ANATOP_H */ | 40 | #endif /* __LINUX_MFD_ANATOP_H */ |
diff --git a/include/linux/mfd/asic3.h b/include/linux/mfd/asic3.h index ef6faa5cee46..e1148d037e7b 100644 --- a/include/linux/mfd/asic3.h +++ b/include/linux/mfd/asic3.h | |||
@@ -31,6 +31,8 @@ struct asic3_platform_data { | |||
31 | 31 | ||
32 | unsigned int gpio_base; | 32 | unsigned int gpio_base; |
33 | 33 | ||
34 | unsigned int clock_rate; | ||
35 | |||
34 | struct asic3_led *leds; | 36 | struct asic3_led *leds; |
35 | }; | 37 | }; |
36 | 38 | ||
diff --git a/include/linux/mfd/da9052/da9052.h b/include/linux/mfd/da9052/da9052.h index 8313cd9658e3..0507c4c21a7d 100644 --- a/include/linux/mfd/da9052/da9052.h +++ b/include/linux/mfd/da9052/da9052.h | |||
@@ -33,6 +33,18 @@ | |||
33 | 33 | ||
34 | #include <linux/mfd/da9052/reg.h> | 34 | #include <linux/mfd/da9052/reg.h> |
35 | 35 | ||
36 | /* Common - HWMON Channel Definations */ | ||
37 | #define DA9052_ADC_VDDOUT 0 | ||
38 | #define DA9052_ADC_ICH 1 | ||
39 | #define DA9052_ADC_TBAT 2 | ||
40 | #define DA9052_ADC_VBAT 3 | ||
41 | #define DA9052_ADC_IN4 4 | ||
42 | #define DA9052_ADC_IN5 5 | ||
43 | #define DA9052_ADC_IN6 6 | ||
44 | #define DA9052_ADC_TSI 7 | ||
45 | #define DA9052_ADC_TJUNC 8 | ||
46 | #define DA9052_ADC_VBBAT 9 | ||
47 | |||
36 | #define DA9052_IRQ_DCIN 0 | 48 | #define DA9052_IRQ_DCIN 0 |
37 | #define DA9052_IRQ_VBUS 1 | 49 | #define DA9052_IRQ_VBUS 1 |
38 | #define DA9052_IRQ_DCINREM 2 | 50 | #define DA9052_IRQ_DCINREM 2 |
@@ -79,6 +91,9 @@ struct da9052 { | |||
79 | struct device *dev; | 91 | struct device *dev; |
80 | struct regmap *regmap; | 92 | struct regmap *regmap; |
81 | 93 | ||
94 | struct mutex auxadc_lock; | ||
95 | struct completion done; | ||
96 | |||
82 | int irq_base; | 97 | int irq_base; |
83 | struct regmap_irq_chip_data *irq_data; | 98 | struct regmap_irq_chip_data *irq_data; |
84 | u8 chip_id; | 99 | u8 chip_id; |
@@ -86,6 +101,10 @@ struct da9052 { | |||
86 | int chip_irq; | 101 | int chip_irq; |
87 | }; | 102 | }; |
88 | 103 | ||
104 | /* ADC API */ | ||
105 | int da9052_adc_manual_read(struct da9052 *da9052, unsigned char channel); | ||
106 | int da9052_adc_read_temp(struct da9052 *da9052); | ||
107 | |||
89 | /* Device I/O API */ | 108 | /* Device I/O API */ |
90 | static inline int da9052_reg_read(struct da9052 *da9052, unsigned char reg) | 109 | static inline int da9052_reg_read(struct da9052 *da9052, unsigned char reg) |
91 | { | 110 | { |
diff --git a/include/linux/mfd/lm3533.h b/include/linux/mfd/lm3533.h new file mode 100644 index 000000000000..594bc591f256 --- /dev/null +++ b/include/linux/mfd/lm3533.h | |||
@@ -0,0 +1,104 @@ | |||
1 | /* | ||
2 | * lm3533.h -- LM3533 interface | ||
3 | * | ||
4 | * Copyright (C) 2011-2012 Texas Instruments | ||
5 | * | ||
6 | * Author: Johan Hovold <jhovold@gmail.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 | #ifndef __LINUX_MFD_LM3533_H | ||
15 | #define __LINUX_MFD_LM3533_H | ||
16 | |||
17 | #define LM3533_ATTR_RO(_name) \ | ||
18 | DEVICE_ATTR(_name, S_IRUGO, show_##_name, NULL) | ||
19 | #define LM3533_ATTR_RW(_name) \ | ||
20 | DEVICE_ATTR(_name, S_IRUGO | S_IWUSR , show_##_name, store_##_name) | ||
21 | |||
22 | struct device; | ||
23 | struct regmap; | ||
24 | |||
25 | struct lm3533 { | ||
26 | struct device *dev; | ||
27 | |||
28 | struct regmap *regmap; | ||
29 | |||
30 | int gpio_hwen; | ||
31 | int irq; | ||
32 | |||
33 | unsigned have_als:1; | ||
34 | unsigned have_backlights:1; | ||
35 | unsigned have_leds:1; | ||
36 | }; | ||
37 | |||
38 | struct lm3533_ctrlbank { | ||
39 | struct lm3533 *lm3533; | ||
40 | struct device *dev; | ||
41 | int id; | ||
42 | }; | ||
43 | |||
44 | struct lm3533_als_platform_data { | ||
45 | unsigned pwm_mode:1; /* PWM input mode (default analog) */ | ||
46 | u8 r_select; /* 1 - 127 (ignored in PWM-mode) */ | ||
47 | }; | ||
48 | |||
49 | struct lm3533_bl_platform_data { | ||
50 | char *name; | ||
51 | u16 max_current; /* 5000 - 29800 uA (800 uA step) */ | ||
52 | u8 default_brightness; /* 0 - 255 */ | ||
53 | u8 pwm; /* 0 - 0x3f */ | ||
54 | }; | ||
55 | |||
56 | struct lm3533_led_platform_data { | ||
57 | char *name; | ||
58 | const char *default_trigger; | ||
59 | u16 max_current; /* 5000 - 29800 uA (800 uA step) */ | ||
60 | u8 pwm; /* 0 - 0x3f */ | ||
61 | }; | ||
62 | |||
63 | enum lm3533_boost_freq { | ||
64 | LM3533_BOOST_FREQ_500KHZ, | ||
65 | LM3533_BOOST_FREQ_1000KHZ, | ||
66 | }; | ||
67 | |||
68 | enum lm3533_boost_ovp { | ||
69 | LM3533_BOOST_OVP_16V, | ||
70 | LM3533_BOOST_OVP_24V, | ||
71 | LM3533_BOOST_OVP_32V, | ||
72 | LM3533_BOOST_OVP_40V, | ||
73 | }; | ||
74 | |||
75 | struct lm3533_platform_data { | ||
76 | int gpio_hwen; | ||
77 | |||
78 | enum lm3533_boost_ovp boost_ovp; | ||
79 | enum lm3533_boost_freq boost_freq; | ||
80 | |||
81 | struct lm3533_als_platform_data *als; | ||
82 | |||
83 | struct lm3533_bl_platform_data *backlights; | ||
84 | int num_backlights; | ||
85 | |||
86 | struct lm3533_led_platform_data *leds; | ||
87 | int num_leds; | ||
88 | }; | ||
89 | |||
90 | extern int lm3533_ctrlbank_enable(struct lm3533_ctrlbank *cb); | ||
91 | extern int lm3533_ctrlbank_disable(struct lm3533_ctrlbank *cb); | ||
92 | |||
93 | extern int lm3533_ctrlbank_set_brightness(struct lm3533_ctrlbank *cb, u8 val); | ||
94 | extern int lm3533_ctrlbank_get_brightness(struct lm3533_ctrlbank *cb, u8 *val); | ||
95 | extern int lm3533_ctrlbank_set_max_current(struct lm3533_ctrlbank *cb, | ||
96 | u16 imax); | ||
97 | extern int lm3533_ctrlbank_set_pwm(struct lm3533_ctrlbank *cb, u8 val); | ||
98 | extern int lm3533_ctrlbank_get_pwm(struct lm3533_ctrlbank *cb, u8 *val); | ||
99 | |||
100 | extern int lm3533_read(struct lm3533 *lm3533, u8 reg, u8 *val); | ||
101 | extern int lm3533_write(struct lm3533 *lm3533, u8 reg, u8 val); | ||
102 | extern int lm3533_update(struct lm3533 *lm3533, u8 reg, u8 val, u8 mask); | ||
103 | |||
104 | #endif /* __LINUX_MFD_LM3533_H */ | ||
diff --git a/include/linux/mfd/lpc_ich.h b/include/linux/mfd/lpc_ich.h new file mode 100644 index 000000000000..fec5256c3f5d --- /dev/null +++ b/include/linux/mfd/lpc_ich.h | |||
@@ -0,0 +1,48 @@ | |||
1 | /* | ||
2 | * linux/drivers/mfd/lpc_ich.h | ||
3 | * | ||
4 | * Copyright (c) 2012 Extreme Engineering Solution, Inc. | ||
5 | * Author: Aaron Sierra <asierra@xes-inc.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 2 as published | ||
9 | * by the Free Software Foundation. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; see the file COPYING. If not, write to | ||
18 | * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. | ||
19 | */ | ||
20 | #ifndef LPC_ICH_H | ||
21 | #define LPC_ICH_H | ||
22 | |||
23 | /* Watchdog resources */ | ||
24 | #define ICH_RES_IO_TCO 0 | ||
25 | #define ICH_RES_IO_SMI 1 | ||
26 | #define ICH_RES_MEM_OFF 2 | ||
27 | #define ICH_RES_MEM_GCS 0 | ||
28 | |||
29 | /* GPIO resources */ | ||
30 | #define ICH_RES_GPIO 0 | ||
31 | #define ICH_RES_GPE0 1 | ||
32 | |||
33 | /* GPIO compatibility */ | ||
34 | #define ICH_I3100_GPIO 0x401 | ||
35 | #define ICH_V5_GPIO 0x501 | ||
36 | #define ICH_V6_GPIO 0x601 | ||
37 | #define ICH_V7_GPIO 0x701 | ||
38 | #define ICH_V9_GPIO 0x801 | ||
39 | #define ICH_V10CORP_GPIO 0xa01 | ||
40 | #define ICH_V10CONS_GPIO 0xa11 | ||
41 | |||
42 | struct lpc_ich_info { | ||
43 | char name[32]; | ||
44 | unsigned int iTCO_version; | ||
45 | unsigned int gpio_version; | ||
46 | }; | ||
47 | |||
48 | #endif | ||
diff --git a/include/linux/mfd/max77693-private.h b/include/linux/mfd/max77693-private.h new file mode 100644 index 000000000000..68263c5fa53c --- /dev/null +++ b/include/linux/mfd/max77693-private.h | |||
@@ -0,0 +1,227 @@ | |||
1 | /* | ||
2 | * max77693-private.h - Voltage regulator driver for the Maxim 77693 | ||
3 | * | ||
4 | * Copyright (C) 2012 Samsung Electrnoics | ||
5 | * SangYoung Son <hello.son@samsung.com> | ||
6 | * | ||
7 | * This program is not provided / owned by Maxim Integrated Products. | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License as published by | ||
11 | * the Free Software Foundation; either version 2 of the License, or | ||
12 | * (at your option) any later version. | ||
13 | * | ||
14 | * This program is distributed in the hope that it will be useful, | ||
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
17 | * GNU General Public License for more details. | ||
18 | * | ||
19 | * You should have received a copy of the GNU General Public License | ||
20 | * along with this program; if not, write to the Free Software | ||
21 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
22 | */ | ||
23 | |||
24 | #ifndef __LINUX_MFD_MAX77693_PRIV_H | ||
25 | #define __LINUX_MFD_MAX77693_PRIV_H | ||
26 | |||
27 | #include <linux/i2c.h> | ||
28 | |||
29 | #define MAX77693_NUM_IRQ_MUIC_REGS 3 | ||
30 | #define MAX77693_REG_INVALID (0xff) | ||
31 | |||
32 | /* Slave addr = 0xCC: PMIC, Charger, Flash LED */ | ||
33 | enum max77693_pmic_reg { | ||
34 | MAX77693_LED_REG_IFLASH1 = 0x00, | ||
35 | MAX77693_LED_REG_IFLASH2 = 0x01, | ||
36 | MAX77693_LED_REG_ITORCH = 0x02, | ||
37 | MAX77693_LED_REG_ITORCHTIMER = 0x03, | ||
38 | MAX77693_LED_REG_FLASH_TIMER = 0x04, | ||
39 | MAX77693_LED_REG_FLASH_EN = 0x05, | ||
40 | MAX77693_LED_REG_MAX_FLASH1 = 0x06, | ||
41 | MAX77693_LED_REG_MAX_FLASH2 = 0x07, | ||
42 | MAX77693_LED_REG_MAX_FLASH3 = 0x08, | ||
43 | MAX77693_LED_REG_MAX_FLASH4 = 0x09, | ||
44 | MAX77693_LED_REG_VOUT_CNTL = 0x0A, | ||
45 | MAX77693_LED_REG_VOUT_FLASH1 = 0x0B, | ||
46 | MAX77693_LED_REG_VOUT_FLASH2 = 0x0C, | ||
47 | MAX77693_LED_REG_FLASH_INT = 0x0E, | ||
48 | MAX77693_LED_REG_FLASH_INT_MASK = 0x0F, | ||
49 | MAX77693_LED_REG_FLASH_INT_STATUS = 0x10, | ||
50 | |||
51 | MAX77693_PMIC_REG_PMIC_ID1 = 0x20, | ||
52 | MAX77693_PMIC_REG_PMIC_ID2 = 0x21, | ||
53 | MAX77693_PMIC_REG_INTSRC = 0x22, | ||
54 | MAX77693_PMIC_REG_INTSRC_MASK = 0x23, | ||
55 | MAX77693_PMIC_REG_TOPSYS_INT = 0x24, | ||
56 | MAX77693_PMIC_REG_TOPSYS_INT_MASK = 0x26, | ||
57 | MAX77693_PMIC_REG_TOPSYS_STAT = 0x28, | ||
58 | MAX77693_PMIC_REG_MAINCTRL1 = 0x2A, | ||
59 | MAX77693_PMIC_REG_LSCNFG = 0x2B, | ||
60 | |||
61 | MAX77693_CHG_REG_CHG_INT = 0xB0, | ||
62 | MAX77693_CHG_REG_CHG_INT_MASK = 0xB1, | ||
63 | MAX77693_CHG_REG_CHG_INT_OK = 0xB2, | ||
64 | MAX77693_CHG_REG_CHG_DETAILS_00 = 0xB3, | ||
65 | MAX77693_CHG_REG_CHG_DETAILS_01 = 0xB4, | ||
66 | MAX77693_CHG_REG_CHG_DETAILS_02 = 0xB5, | ||
67 | MAX77693_CHG_REG_CHG_DETAILS_03 = 0xB6, | ||
68 | MAX77693_CHG_REG_CHG_CNFG_00 = 0xB7, | ||
69 | MAX77693_CHG_REG_CHG_CNFG_01 = 0xB8, | ||
70 | MAX77693_CHG_REG_CHG_CNFG_02 = 0xB9, | ||
71 | MAX77693_CHG_REG_CHG_CNFG_03 = 0xBA, | ||
72 | MAX77693_CHG_REG_CHG_CNFG_04 = 0xBB, | ||
73 | MAX77693_CHG_REG_CHG_CNFG_05 = 0xBC, | ||
74 | MAX77693_CHG_REG_CHG_CNFG_06 = 0xBD, | ||
75 | MAX77693_CHG_REG_CHG_CNFG_07 = 0xBE, | ||
76 | MAX77693_CHG_REG_CHG_CNFG_08 = 0xBF, | ||
77 | MAX77693_CHG_REG_CHG_CNFG_09 = 0xC0, | ||
78 | MAX77693_CHG_REG_CHG_CNFG_10 = 0xC1, | ||
79 | MAX77693_CHG_REG_CHG_CNFG_11 = 0xC2, | ||
80 | MAX77693_CHG_REG_CHG_CNFG_12 = 0xC3, | ||
81 | MAX77693_CHG_REG_CHG_CNFG_13 = 0xC4, | ||
82 | MAX77693_CHG_REG_CHG_CNFG_14 = 0xC5, | ||
83 | MAX77693_CHG_REG_SAFEOUT_CTRL = 0xC6, | ||
84 | |||
85 | MAX77693_PMIC_REG_END, | ||
86 | }; | ||
87 | |||
88 | /* Slave addr = 0x4A: MUIC */ | ||
89 | enum max77693_muic_reg { | ||
90 | MAX77693_MUIC_REG_ID = 0x00, | ||
91 | MAX77693_MUIC_REG_INT1 = 0x01, | ||
92 | MAX77693_MUIC_REG_INT2 = 0x02, | ||
93 | MAX77693_MUIC_REG_INT3 = 0x03, | ||
94 | MAX77693_MUIC_REG_STATUS1 = 0x04, | ||
95 | MAX77693_MUIC_REG_STATUS2 = 0x05, | ||
96 | MAX77693_MUIC_REG_STATUS3 = 0x06, | ||
97 | MAX77693_MUIC_REG_INTMASK1 = 0x07, | ||
98 | MAX77693_MUIC_REG_INTMASK2 = 0x08, | ||
99 | MAX77693_MUIC_REG_INTMASK3 = 0x09, | ||
100 | MAX77693_MUIC_REG_CDETCTRL1 = 0x0A, | ||
101 | MAX77693_MUIC_REG_CDETCTRL2 = 0x0B, | ||
102 | MAX77693_MUIC_REG_CTRL1 = 0x0C, | ||
103 | MAX77693_MUIC_REG_CTRL2 = 0x0D, | ||
104 | MAX77693_MUIC_REG_CTRL3 = 0x0E, | ||
105 | |||
106 | MAX77693_MUIC_REG_END, | ||
107 | }; | ||
108 | |||
109 | /* Slave addr = 0x90: Haptic */ | ||
110 | enum max77693_haptic_reg { | ||
111 | MAX77693_HAPTIC_REG_STATUS = 0x00, | ||
112 | MAX77693_HAPTIC_REG_CONFIG1 = 0x01, | ||
113 | MAX77693_HAPTIC_REG_CONFIG2 = 0x02, | ||
114 | MAX77693_HAPTIC_REG_CONFIG_CHNL = 0x03, | ||
115 | MAX77693_HAPTIC_REG_CONFG_CYC1 = 0x04, | ||
116 | MAX77693_HAPTIC_REG_CONFG_CYC2 = 0x05, | ||
117 | MAX77693_HAPTIC_REG_CONFIG_PER1 = 0x06, | ||
118 | MAX77693_HAPTIC_REG_CONFIG_PER2 = 0x07, | ||
119 | MAX77693_HAPTIC_REG_CONFIG_PER3 = 0x08, | ||
120 | MAX77693_HAPTIC_REG_CONFIG_PER4 = 0x09, | ||
121 | MAX77693_HAPTIC_REG_CONFIG_DUTY1 = 0x0A, | ||
122 | MAX77693_HAPTIC_REG_CONFIG_DUTY2 = 0x0B, | ||
123 | MAX77693_HAPTIC_REG_CONFIG_PWM1 = 0x0C, | ||
124 | MAX77693_HAPTIC_REG_CONFIG_PWM2 = 0x0D, | ||
125 | MAX77693_HAPTIC_REG_CONFIG_PWM3 = 0x0E, | ||
126 | MAX77693_HAPTIC_REG_CONFIG_PWM4 = 0x0F, | ||
127 | MAX77693_HAPTIC_REG_REV = 0x10, | ||
128 | |||
129 | MAX77693_HAPTIC_REG_END, | ||
130 | }; | ||
131 | |||
132 | enum max77693_irq_source { | ||
133 | LED_INT = 0, | ||
134 | TOPSYS_INT, | ||
135 | CHG_INT, | ||
136 | MUIC_INT1, | ||
137 | MUIC_INT2, | ||
138 | MUIC_INT3, | ||
139 | |||
140 | MAX77693_IRQ_GROUP_NR, | ||
141 | }; | ||
142 | |||
143 | enum max77693_irq { | ||
144 | /* PMIC - FLASH */ | ||
145 | MAX77693_LED_IRQ_FLED2_OPEN, | ||
146 | MAX77693_LED_IRQ_FLED2_SHORT, | ||
147 | MAX77693_LED_IRQ_FLED1_OPEN, | ||
148 | MAX77693_LED_IRQ_FLED1_SHORT, | ||
149 | MAX77693_LED_IRQ_MAX_FLASH, | ||
150 | |||
151 | /* PMIC - TOPSYS */ | ||
152 | MAX77693_TOPSYS_IRQ_T120C_INT, | ||
153 | MAX77693_TOPSYS_IRQ_T140C_INT, | ||
154 | MAX77693_TOPSYS_IRQ_LOWSYS_INT, | ||
155 | |||
156 | /* PMIC - Charger */ | ||
157 | MAX77693_CHG_IRQ_BYP_I, | ||
158 | MAX77693_CHG_IRQ_THM_I, | ||
159 | MAX77693_CHG_IRQ_BAT_I, | ||
160 | MAX77693_CHG_IRQ_CHG_I, | ||
161 | MAX77693_CHG_IRQ_CHGIN_I, | ||
162 | |||
163 | /* MUIC INT1 */ | ||
164 | MAX77693_MUIC_IRQ_INT1_ADC, | ||
165 | MAX77693_MUIC_IRQ_INT1_ADC_LOW, | ||
166 | MAX77693_MUIC_IRQ_INT1_ADC_ERR, | ||
167 | MAX77693_MUIC_IRQ_INT1_ADC1K, | ||
168 | |||
169 | /* MUIC INT2 */ | ||
170 | MAX77693_MUIC_IRQ_INT2_CHGTYP, | ||
171 | MAX77693_MUIC_IRQ_INT2_CHGDETREUN, | ||
172 | MAX77693_MUIC_IRQ_INT2_DCDTMR, | ||
173 | MAX77693_MUIC_IRQ_INT2_DXOVP, | ||
174 | MAX77693_MUIC_IRQ_INT2_VBVOLT, | ||
175 | MAX77693_MUIC_IRQ_INT2_VIDRM, | ||
176 | |||
177 | /* MUIC INT3 */ | ||
178 | MAX77693_MUIC_IRQ_INT3_EOC, | ||
179 | MAX77693_MUIC_IRQ_INT3_CGMBC, | ||
180 | MAX77693_MUIC_IRQ_INT3_OVP, | ||
181 | MAX77693_MUIC_IRQ_INT3_MBCCHG_ERR, | ||
182 | MAX77693_MUIC_IRQ_INT3_CHG_ENABLED, | ||
183 | MAX77693_MUIC_IRQ_INT3_BAT_DET, | ||
184 | |||
185 | MAX77693_IRQ_NR, | ||
186 | }; | ||
187 | |||
188 | struct max77693_dev { | ||
189 | struct device *dev; | ||
190 | struct i2c_client *i2c; /* 0xCC , PMIC, Charger, Flash LED */ | ||
191 | struct i2c_client *muic; /* 0x4A , MUIC */ | ||
192 | struct i2c_client *haptic; /* 0x90 , Haptic */ | ||
193 | struct mutex iolock; | ||
194 | |||
195 | int type; | ||
196 | |||
197 | struct regmap *regmap; | ||
198 | struct regmap *regmap_muic; | ||
199 | struct regmap *regmap_haptic; | ||
200 | |||
201 | struct irq_domain *irq_domain; | ||
202 | |||
203 | int irq; | ||
204 | int irq_gpio; | ||
205 | bool wakeup; | ||
206 | struct mutex irqlock; | ||
207 | int irq_masks_cur[MAX77693_IRQ_GROUP_NR]; | ||
208 | int irq_masks_cache[MAX77693_IRQ_GROUP_NR]; | ||
209 | }; | ||
210 | |||
211 | enum max77693_types { | ||
212 | TYPE_MAX77693, | ||
213 | }; | ||
214 | |||
215 | extern int max77693_read_reg(struct regmap *map, u8 reg, u8 *dest); | ||
216 | extern int max77693_bulk_read(struct regmap *map, u8 reg, int count, | ||
217 | u8 *buf); | ||
218 | extern int max77693_write_reg(struct regmap *map, u8 reg, u8 value); | ||
219 | extern int max77693_bulk_write(struct regmap *map, u8 reg, int count, | ||
220 | u8 *buf); | ||
221 | extern int max77693_update_reg(struct regmap *map, u8 reg, u8 val, u8 mask); | ||
222 | |||
223 | extern int max77693_irq_init(struct max77693_dev *max77686); | ||
224 | extern void max77693_irq_exit(struct max77693_dev *max77686); | ||
225 | extern int max77693_irq_resume(struct max77693_dev *max77686); | ||
226 | |||
227 | #endif /* __LINUX_MFD_MAX77693_PRIV_H */ | ||
diff --git a/include/linux/mfd/max77693.h b/include/linux/mfd/max77693.h new file mode 100644 index 000000000000..1d28ae90384e --- /dev/null +++ b/include/linux/mfd/max77693.h | |||
@@ -0,0 +1,36 @@ | |||
1 | /* | ||
2 | * max77693.h - Driver for the Maxim 77693 | ||
3 | * | ||
4 | * Copyright (C) 2012 Samsung Electrnoics | ||
5 | * SangYoung Son <hello.son@samsung.com> | ||
6 | * | ||
7 | * This program is not provided / owned by Maxim Integrated Products. | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License as published by | ||
11 | * the Free Software Foundation; either version 2 of the License, or | ||
12 | * (at your option) any later version. | ||
13 | * | ||
14 | * This program is distributed in the hope that it will be useful, | ||
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
17 | * GNU General Public License for more details. | ||
18 | * | ||
19 | * You should have received a copy of the GNU General Public License | ||
20 | * along with this program; if not, write to the Free Software | ||
21 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
22 | * | ||
23 | * This driver is based on max8997.h | ||
24 | * | ||
25 | * MAX77693 has PMIC, Charger, Flash LED, Haptic, MUIC devices. | ||
26 | * The devices share the same I2C bus and included in | ||
27 | * this mfd driver. | ||
28 | */ | ||
29 | |||
30 | #ifndef __LINUX_MFD_MAX77693_H | ||
31 | #define __LINUX_MFD_MAX77693_H | ||
32 | |||
33 | struct max77693_platform_data { | ||
34 | int wakeup; | ||
35 | }; | ||
36 | #endif /* __LINUX_MFD_MAX77693_H */ | ||
diff --git a/include/linux/mfd/rc5t583.h b/include/linux/mfd/rc5t583.h index c42fe92a727d..3661c59aa1e9 100644 --- a/include/linux/mfd/rc5t583.h +++ b/include/linux/mfd/rc5t583.h | |||
@@ -292,6 +292,7 @@ struct rc5t583 { | |||
292 | * rc5t583_platform_data: Platform data for ricoh rc5t583 pmu. | 292 | * rc5t583_platform_data: Platform data for ricoh rc5t583 pmu. |
293 | * The board specific data is provided through this structure. | 293 | * The board specific data is provided through this structure. |
294 | * @irq_base: Irq base number on which this device registers their interrupts. | 294 | * @irq_base: Irq base number on which this device registers their interrupts. |
295 | * @gpio_base: GPIO base from which gpio of this device will start. | ||
295 | * @enable_shutdown: Enable shutdown through the input pin "shutdown". | 296 | * @enable_shutdown: Enable shutdown through the input pin "shutdown". |
296 | * @regulator_deepsleep_slot: The slot number on which device goes to sleep | 297 | * @regulator_deepsleep_slot: The slot number on which device goes to sleep |
297 | * in device sleep mode. | 298 | * in device sleep mode. |
@@ -303,6 +304,7 @@ struct rc5t583 { | |||
303 | 304 | ||
304 | struct rc5t583_platform_data { | 305 | struct rc5t583_platform_data { |
305 | int irq_base; | 306 | int irq_base; |
307 | int gpio_base; | ||
306 | bool enable_shutdown; | 308 | bool enable_shutdown; |
307 | int regulator_deepsleep_slot[RC5T583_REGULATOR_MAX]; | 309 | int regulator_deepsleep_slot[RC5T583_REGULATOR_MAX]; |
308 | unsigned long regulator_ext_pwr_control[RC5T583_REGULATOR_MAX]; | 310 | unsigned long regulator_ext_pwr_control[RC5T583_REGULATOR_MAX]; |
diff --git a/include/linux/mfd/sta2x11-mfd.h b/include/linux/mfd/sta2x11-mfd.h new file mode 100644 index 000000000000..d179227e866f --- /dev/null +++ b/include/linux/mfd/sta2x11-mfd.h | |||
@@ -0,0 +1,324 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2009-2011 Wind River Systems, Inc. | ||
3 | * Copyright (c) 2011 ST Microelectronics (Alessandro Rubini) | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License version 2 as | ||
7 | * published by the Free Software Foundation. | ||
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. | ||
12 | * See the 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 | * The STMicroelectronics ConneXt (STA2X11) chip has several unrelated | ||
19 | * functions in one PCI endpoint functions. This driver simply | ||
20 | * registers the platform devices in this iomemregion and exports a few | ||
21 | * functions to access common registers | ||
22 | */ | ||
23 | |||
24 | #ifndef __STA2X11_MFD_H | ||
25 | #define __STA2X11_MFD_H | ||
26 | #include <linux/types.h> | ||
27 | #include <linux/pci.h> | ||
28 | |||
29 | /* | ||
30 | * The MFD PCI block includes the GPIO peripherals and other register blocks. | ||
31 | * For GPIO, we have 32*4 bits (I use "gsta" for "gpio sta2x11".) | ||
32 | */ | ||
33 | #define GSTA_GPIO_PER_BLOCK 32 | ||
34 | #define GSTA_NR_BLOCKS 4 | ||
35 | #define GSTA_NR_GPIO (GSTA_GPIO_PER_BLOCK * GSTA_NR_BLOCKS) | ||
36 | |||
37 | /* Pinconfig is set by the board definition: altfunc, pull-up, pull-down */ | ||
38 | struct sta2x11_gpio_pdata { | ||
39 | unsigned pinconfig[GSTA_NR_GPIO]; | ||
40 | }; | ||
41 | |||
42 | /* Macros below lifted from sh_pfc.h, with minor differences */ | ||
43 | #define PINMUX_TYPE_NONE 0 | ||
44 | #define PINMUX_TYPE_FUNCTION 1 | ||
45 | #define PINMUX_TYPE_OUTPUT_LOW 2 | ||
46 | #define PINMUX_TYPE_OUTPUT_HIGH 3 | ||
47 | #define PINMUX_TYPE_INPUT 4 | ||
48 | #define PINMUX_TYPE_INPUT_PULLUP 5 | ||
49 | #define PINMUX_TYPE_INPUT_PULLDOWN 6 | ||
50 | |||
51 | /* Give names to GPIO pins, like PXA does, taken from the manual */ | ||
52 | #define STA2X11_GPIO0 0 | ||
53 | #define STA2X11_GPIO1 1 | ||
54 | #define STA2X11_GPIO2 2 | ||
55 | #define STA2X11_GPIO3 3 | ||
56 | #define STA2X11_GPIO4 4 | ||
57 | #define STA2X11_GPIO5 5 | ||
58 | #define STA2X11_GPIO6 6 | ||
59 | #define STA2X11_GPIO7 7 | ||
60 | #define STA2X11_GPIO8_RGBOUT_RED7 8 | ||
61 | #define STA2X11_GPIO9_RGBOUT_RED6 9 | ||
62 | #define STA2X11_GPIO10_RGBOUT_RED5 10 | ||
63 | #define STA2X11_GPIO11_RGBOUT_RED4 11 | ||
64 | #define STA2X11_GPIO12_RGBOUT_RED3 12 | ||
65 | #define STA2X11_GPIO13_RGBOUT_RED2 13 | ||
66 | #define STA2X11_GPIO14_RGBOUT_RED1 14 | ||
67 | #define STA2X11_GPIO15_RGBOUT_RED0 15 | ||
68 | #define STA2X11_GPIO16_RGBOUT_GREEN7 16 | ||
69 | #define STA2X11_GPIO17_RGBOUT_GREEN6 17 | ||
70 | #define STA2X11_GPIO18_RGBOUT_GREEN5 18 | ||
71 | #define STA2X11_GPIO19_RGBOUT_GREEN4 19 | ||
72 | #define STA2X11_GPIO20_RGBOUT_GREEN3 20 | ||
73 | #define STA2X11_GPIO21_RGBOUT_GREEN2 21 | ||
74 | #define STA2X11_GPIO22_RGBOUT_GREEN1 22 | ||
75 | #define STA2X11_GPIO23_RGBOUT_GREEN0 23 | ||
76 | #define STA2X11_GPIO24_RGBOUT_BLUE7 24 | ||
77 | #define STA2X11_GPIO25_RGBOUT_BLUE6 25 | ||
78 | #define STA2X11_GPIO26_RGBOUT_BLUE5 26 | ||
79 | #define STA2X11_GPIO27_RGBOUT_BLUE4 27 | ||
80 | #define STA2X11_GPIO28_RGBOUT_BLUE3 28 | ||
81 | #define STA2X11_GPIO29_RGBOUT_BLUE2 29 | ||
82 | #define STA2X11_GPIO30_RGBOUT_BLUE1 30 | ||
83 | #define STA2X11_GPIO31_RGBOUT_BLUE0 31 | ||
84 | #define STA2X11_GPIO32_RGBOUT_VSYNCH 32 | ||
85 | #define STA2X11_GPIO33_RGBOUT_HSYNCH 33 | ||
86 | #define STA2X11_GPIO34_RGBOUT_DEN 34 | ||
87 | #define STA2X11_GPIO35_ETH_CRS_DV 35 | ||
88 | #define STA2X11_GPIO36_ETH_TXD1 36 | ||
89 | #define STA2X11_GPIO37_ETH_TXD0 37 | ||
90 | #define STA2X11_GPIO38_ETH_TX_EN 38 | ||
91 | #define STA2X11_GPIO39_MDIO 39 | ||
92 | #define STA2X11_GPIO40_ETH_REF_CLK 40 | ||
93 | #define STA2X11_GPIO41_ETH_RXD1 41 | ||
94 | #define STA2X11_GPIO42_ETH_RXD0 42 | ||
95 | #define STA2X11_GPIO43_MDC 43 | ||
96 | #define STA2X11_GPIO44_CAN_TX 44 | ||
97 | #define STA2X11_GPIO45_CAN_RX 45 | ||
98 | #define STA2X11_GPIO46_MLB_DAT 46 | ||
99 | #define STA2X11_GPIO47_MLB_SIG 47 | ||
100 | #define STA2X11_GPIO48_SPI0_CLK 48 | ||
101 | #define STA2X11_GPIO49_SPI0_TXD 49 | ||
102 | #define STA2X11_GPIO50_SPI0_RXD 50 | ||
103 | #define STA2X11_GPIO51_SPI0_FRM 51 | ||
104 | #define STA2X11_GPIO52_SPI1_CLK 52 | ||
105 | #define STA2X11_GPIO53_SPI1_TXD 53 | ||
106 | #define STA2X11_GPIO54_SPI1_RXD 54 | ||
107 | #define STA2X11_GPIO55_SPI1_FRM 55 | ||
108 | #define STA2X11_GPIO56_SPI2_CLK 56 | ||
109 | #define STA2X11_GPIO57_SPI2_TXD 57 | ||
110 | #define STA2X11_GPIO58_SPI2_RXD 58 | ||
111 | #define STA2X11_GPIO59_SPI2_FRM 59 | ||
112 | #define STA2X11_GPIO60_I2C0_SCL 60 | ||
113 | #define STA2X11_GPIO61_I2C0_SDA 61 | ||
114 | #define STA2X11_GPIO62_I2C1_SCL 62 | ||
115 | #define STA2X11_GPIO63_I2C1_SDA 63 | ||
116 | #define STA2X11_GPIO64_I2C2_SCL 64 | ||
117 | #define STA2X11_GPIO65_I2C2_SDA 65 | ||
118 | #define STA2X11_GPIO66_I2C3_SCL 66 | ||
119 | #define STA2X11_GPIO67_I2C3_SDA 67 | ||
120 | #define STA2X11_GPIO68_MSP0_RCK 68 | ||
121 | #define STA2X11_GPIO69_MSP0_RXD 69 | ||
122 | #define STA2X11_GPIO70_MSP0_RFS 70 | ||
123 | #define STA2X11_GPIO71_MSP0_TCK 71 | ||
124 | #define STA2X11_GPIO72_MSP0_TXD 72 | ||
125 | #define STA2X11_GPIO73_MSP0_TFS 73 | ||
126 | #define STA2X11_GPIO74_MSP0_SCK 74 | ||
127 | #define STA2X11_GPIO75_MSP1_CK 75 | ||
128 | #define STA2X11_GPIO76_MSP1_RXD 76 | ||
129 | #define STA2X11_GPIO77_MSP1_FS 77 | ||
130 | #define STA2X11_GPIO78_MSP1_TXD 78 | ||
131 | #define STA2X11_GPIO79_MSP2_CK 79 | ||
132 | #define STA2X11_GPIO80_MSP2_RXD 80 | ||
133 | #define STA2X11_GPIO81_MSP2_FS 81 | ||
134 | #define STA2X11_GPIO82_MSP2_TXD 82 | ||
135 | #define STA2X11_GPIO83_MSP3_CK 83 | ||
136 | #define STA2X11_GPIO84_MSP3_RXD 84 | ||
137 | #define STA2X11_GPIO85_MSP3_FS 85 | ||
138 | #define STA2X11_GPIO86_MSP3_TXD 86 | ||
139 | #define STA2X11_GPIO87_MSP4_CK 87 | ||
140 | #define STA2X11_GPIO88_MSP4_RXD 88 | ||
141 | #define STA2X11_GPIO89_MSP4_FS 89 | ||
142 | #define STA2X11_GPIO90_MSP4_TXD 90 | ||
143 | #define STA2X11_GPIO91_MSP5_CK 91 | ||
144 | #define STA2X11_GPIO92_MSP5_RXD 92 | ||
145 | #define STA2X11_GPIO93_MSP5_FS 93 | ||
146 | #define STA2X11_GPIO94_MSP5_TXD 94 | ||
147 | #define STA2X11_GPIO95_SDIO3_DAT3 95 | ||
148 | #define STA2X11_GPIO96_SDIO3_DAT2 96 | ||
149 | #define STA2X11_GPIO97_SDIO3_DAT1 97 | ||
150 | #define STA2X11_GPIO98_SDIO3_DAT0 98 | ||
151 | #define STA2X11_GPIO99_SDIO3_CLK 99 | ||
152 | #define STA2X11_GPIO100_SDIO3_CMD 100 | ||
153 | #define STA2X11_GPIO101 101 | ||
154 | #define STA2X11_GPIO102 102 | ||
155 | #define STA2X11_GPIO103 103 | ||
156 | #define STA2X11_GPIO104 104 | ||
157 | #define STA2X11_GPIO105_SDIO2_DAT3 105 | ||
158 | #define STA2X11_GPIO106_SDIO2_DAT2 106 | ||
159 | #define STA2X11_GPIO107_SDIO2_DAT1 107 | ||
160 | #define STA2X11_GPIO108_SDIO2_DAT0 108 | ||
161 | #define STA2X11_GPIO109_SDIO2_CLK 109 | ||
162 | #define STA2X11_GPIO110_SDIO2_CMD 110 | ||
163 | #define STA2X11_GPIO111 111 | ||
164 | #define STA2X11_GPIO112 112 | ||
165 | #define STA2X11_GPIO113 113 | ||
166 | #define STA2X11_GPIO114 114 | ||
167 | #define STA2X11_GPIO115_SDIO1_DAT3 115 | ||
168 | #define STA2X11_GPIO116_SDIO1_DAT2 116 | ||
169 | #define STA2X11_GPIO117_SDIO1_DAT1 117 | ||
170 | #define STA2X11_GPIO118_SDIO1_DAT0 118 | ||
171 | #define STA2X11_GPIO119_SDIO1_CLK 119 | ||
172 | #define STA2X11_GPIO120_SDIO1_CMD 120 | ||
173 | #define STA2X11_GPIO121 121 | ||
174 | #define STA2X11_GPIO122 122 | ||
175 | #define STA2X11_GPIO123 123 | ||
176 | #define STA2X11_GPIO124 124 | ||
177 | #define STA2X11_GPIO125_UART2_TXD 125 | ||
178 | #define STA2X11_GPIO126_UART2_RXD 126 | ||
179 | #define STA2X11_GPIO127_UART3_TXD 127 | ||
180 | |||
181 | /* | ||
182 | * The APB bridge has its own registers, needed by our users as well. | ||
183 | * They are accessed with the following read/mask/write function. | ||
184 | */ | ||
185 | u32 sta2x11_apbreg_mask(struct pci_dev *pdev, u32 reg, u32 mask, u32 val); | ||
186 | |||
187 | /* CAN and MLB */ | ||
188 | #define APBREG_BSR 0x00 /* Bridge Status Reg */ | ||
189 | #define APBREG_PAER 0x08 /* Peripherals Address Error Reg */ | ||
190 | #define APBREG_PWAC 0x20 /* Peripheral Write Access Control reg */ | ||
191 | #define APBREG_PRAC 0x40 /* Peripheral Read Access Control reg */ | ||
192 | #define APBREG_PCG 0x60 /* Peripheral Clock Gating Reg */ | ||
193 | #define APBREG_PUR 0x80 /* Peripheral Under Reset Reg */ | ||
194 | #define APBREG_EMU_PCG 0xA0 /* Emulator Peripheral Clock Gating Reg */ | ||
195 | |||
196 | #define APBREG_CAN (1 << 1) | ||
197 | #define APBREG_MLB (1 << 3) | ||
198 | |||
199 | /* SARAC */ | ||
200 | #define APBREG_BSR_SARAC 0x100 /* Bridge Status Reg */ | ||
201 | #define APBREG_PAER_SARAC 0x108 /* Peripherals Address Error Reg */ | ||
202 | #define APBREG_PWAC_SARAC 0x120 /* Peripheral Write Access Control reg */ | ||
203 | #define APBREG_PRAC_SARAC 0x140 /* Peripheral Read Access Control reg */ | ||
204 | #define APBREG_PCG_SARAC 0x160 /* Peripheral Clock Gating Reg */ | ||
205 | #define APBREG_PUR_SARAC 0x180 /* Peripheral Under Reset Reg */ | ||
206 | #define APBREG_EMU_PCG_SARAC 0x1A0 /* Emulator Peripheral Clock Gating Reg */ | ||
207 | |||
208 | #define APBREG_SARAC (1 << 2) | ||
209 | |||
210 | /* | ||
211 | * The system controller has its own registers. Some of these are accessed | ||
212 | * by out users as well, using the following read/mask/write/function | ||
213 | */ | ||
214 | u32 sta2x11_sctl_mask(struct pci_dev *pdev, u32 reg, u32 mask, u32 val); | ||
215 | |||
216 | #define SCTL_SCCTL 0x00 /* System controller control register */ | ||
217 | #define SCTL_ARMCFG 0x04 /* ARM configuration register */ | ||
218 | #define SCTL_SCPLLCTL 0x08 /* PLL control status register */ | ||
219 | #define SCTL_SCPLLFCTRL 0x0c /* PLL frequency control register */ | ||
220 | #define SCTL_SCRESFRACT 0x10 /* PLL fractional input register */ | ||
221 | #define SCTL_SCRESCTRL1 0x14 /* Peripheral reset control 1 */ | ||
222 | #define SCTL_SCRESXTRL2 0x18 /* Peripheral reset control 2 */ | ||
223 | #define SCTL_SCPEREN0 0x1c /* Peripheral clock enable register 0 */ | ||
224 | #define SCTL_SCPEREN1 0x20 /* Peripheral clock enable register 1 */ | ||
225 | #define SCTL_SCPEREN2 0x24 /* Peripheral clock enable register 2 */ | ||
226 | #define SCTL_SCGRST 0x28 /* Peripheral global reset */ | ||
227 | #define SCTL_SCPCIPMCR1 0x30 /* PCI power management control 1 */ | ||
228 | #define SCTL_SCPCIPMCR2 0x34 /* PCI power management control 2 */ | ||
229 | #define SCTL_SCPCIPMSR1 0x38 /* PCI power management status 1 */ | ||
230 | #define SCTL_SCPCIPMSR2 0x3c /* PCI power management status 2 */ | ||
231 | #define SCTL_SCPCIPMSR3 0x40 /* PCI power management status 3 */ | ||
232 | #define SCTL_SCINTREN 0x44 /* Interrupt enable */ | ||
233 | #define SCTL_SCRISR 0x48 /* RAW interrupt status */ | ||
234 | #define SCTL_SCCLKSTAT0 0x4c /* Peripheral clocks status 0 */ | ||
235 | #define SCTL_SCCLKSTAT1 0x50 /* Peripheral clocks status 1 */ | ||
236 | #define SCTL_SCCLKSTAT2 0x54 /* Peripheral clocks status 2 */ | ||
237 | #define SCTL_SCRSTSTA 0x58 /* Reset status register */ | ||
238 | |||
239 | #define SCTL_SCRESCTRL1_USB_PHY_POR (1 << 0) | ||
240 | #define SCTL_SCRESCTRL1_USB_OTG (1 << 1) | ||
241 | #define SCTL_SCRESCTRL1_USB_HRST (1 << 2) | ||
242 | #define SCTL_SCRESCTRL1_USB_PHY_HOST (1 << 3) | ||
243 | #define SCTL_SCRESCTRL1_SATAII (1 << 4) | ||
244 | #define SCTL_SCRESCTRL1_VIP (1 << 5) | ||
245 | #define SCTL_SCRESCTRL1_PER_MMC0 (1 << 6) | ||
246 | #define SCTL_SCRESCTRL1_PER_MMC1 (1 << 7) | ||
247 | #define SCTL_SCRESCTRL1_PER_GPIO0 (1 << 8) | ||
248 | #define SCTL_SCRESCTRL1_PER_GPIO1 (1 << 9) | ||
249 | #define SCTL_SCRESCTRL1_PER_GPIO2 (1 << 10) | ||
250 | #define SCTL_SCRESCTRL1_PER_GPIO3 (1 << 11) | ||
251 | #define SCTL_SCRESCTRL1_PER_MTU0 (1 << 12) | ||
252 | #define SCTL_SCRESCTRL1_KER_SPI0 (1 << 13) | ||
253 | #define SCTL_SCRESCTRL1_KER_SPI1 (1 << 14) | ||
254 | #define SCTL_SCRESCTRL1_KER_SPI2 (1 << 15) | ||
255 | #define SCTL_SCRESCTRL1_KER_MCI0 (1 << 16) | ||
256 | #define SCTL_SCRESCTRL1_KER_MCI1 (1 << 17) | ||
257 | #define SCTL_SCRESCTRL1_PRE_HSI2C0 (1 << 18) | ||
258 | #define SCTL_SCRESCTRL1_PER_HSI2C1 (1 << 19) | ||
259 | #define SCTL_SCRESCTRL1_PER_HSI2C2 (1 << 20) | ||
260 | #define SCTL_SCRESCTRL1_PER_HSI2C3 (1 << 21) | ||
261 | #define SCTL_SCRESCTRL1_PER_MSP0 (1 << 22) | ||
262 | #define SCTL_SCRESCTRL1_PER_MSP1 (1 << 23) | ||
263 | #define SCTL_SCRESCTRL1_PER_MSP2 (1 << 24) | ||
264 | #define SCTL_SCRESCTRL1_PER_MSP3 (1 << 25) | ||
265 | #define SCTL_SCRESCTRL1_PER_MSP4 (1 << 26) | ||
266 | #define SCTL_SCRESCTRL1_PER_MSP5 (1 << 27) | ||
267 | #define SCTL_SCRESCTRL1_PER_MMC (1 << 28) | ||
268 | #define SCTL_SCRESCTRL1_KER_MSP0 (1 << 29) | ||
269 | #define SCTL_SCRESCTRL1_KER_MSP1 (1 << 30) | ||
270 | #define SCTL_SCRESCTRL1_KER_MSP2 (1 << 31) | ||
271 | |||
272 | #define SCTL_SCPEREN0_UART0 (1 << 0) | ||
273 | #define SCTL_SCPEREN0_UART1 (1 << 1) | ||
274 | #define SCTL_SCPEREN0_UART2 (1 << 2) | ||
275 | #define SCTL_SCPEREN0_UART3 (1 << 3) | ||
276 | #define SCTL_SCPEREN0_MSP0 (1 << 4) | ||
277 | #define SCTL_SCPEREN0_MSP1 (1 << 5) | ||
278 | #define SCTL_SCPEREN0_MSP2 (1 << 6) | ||
279 | #define SCTL_SCPEREN0_MSP3 (1 << 7) | ||
280 | #define SCTL_SCPEREN0_MSP4 (1 << 8) | ||
281 | #define SCTL_SCPEREN0_MSP5 (1 << 9) | ||
282 | #define SCTL_SCPEREN0_SPI0 (1 << 10) | ||
283 | #define SCTL_SCPEREN0_SPI1 (1 << 11) | ||
284 | #define SCTL_SCPEREN0_SPI2 (1 << 12) | ||
285 | #define SCTL_SCPEREN0_I2C0 (1 << 13) | ||
286 | #define SCTL_SCPEREN0_I2C1 (1 << 14) | ||
287 | #define SCTL_SCPEREN0_I2C2 (1 << 15) | ||
288 | #define SCTL_SCPEREN0_I2C3 (1 << 16) | ||
289 | #define SCTL_SCPEREN0_SVDO_LVDS (1 << 17) | ||
290 | #define SCTL_SCPEREN0_USB_HOST (1 << 18) | ||
291 | #define SCTL_SCPEREN0_USB_OTG (1 << 19) | ||
292 | #define SCTL_SCPEREN0_MCI0 (1 << 20) | ||
293 | #define SCTL_SCPEREN0_MCI1 (1 << 21) | ||
294 | #define SCTL_SCPEREN0_MCI2 (1 << 22) | ||
295 | #define SCTL_SCPEREN0_MCI3 (1 << 23) | ||
296 | #define SCTL_SCPEREN0_SATA (1 << 24) | ||
297 | #define SCTL_SCPEREN0_ETHERNET (1 << 25) | ||
298 | #define SCTL_SCPEREN0_VIC (1 << 26) | ||
299 | #define SCTL_SCPEREN0_DMA_AUDIO (1 << 27) | ||
300 | #define SCTL_SCPEREN0_DMA_SOC (1 << 28) | ||
301 | #define SCTL_SCPEREN0_RAM (1 << 29) | ||
302 | #define SCTL_SCPEREN0_VIP (1 << 30) | ||
303 | #define SCTL_SCPEREN0_ARM (1 << 31) | ||
304 | |||
305 | #define SCTL_SCPEREN1_UART0 (1 << 0) | ||
306 | #define SCTL_SCPEREN1_UART1 (1 << 1) | ||
307 | #define SCTL_SCPEREN1_UART2 (1 << 2) | ||
308 | #define SCTL_SCPEREN1_UART3 (1 << 3) | ||
309 | #define SCTL_SCPEREN1_MSP0 (1 << 4) | ||
310 | #define SCTL_SCPEREN1_MSP1 (1 << 5) | ||
311 | #define SCTL_SCPEREN1_MSP2 (1 << 6) | ||
312 | #define SCTL_SCPEREN1_MSP3 (1 << 7) | ||
313 | #define SCTL_SCPEREN1_MSP4 (1 << 8) | ||
314 | #define SCTL_SCPEREN1_MSP5 (1 << 9) | ||
315 | #define SCTL_SCPEREN1_SPI0 (1 << 10) | ||
316 | #define SCTL_SCPEREN1_SPI1 (1 << 11) | ||
317 | #define SCTL_SCPEREN1_SPI2 (1 << 12) | ||
318 | #define SCTL_SCPEREN1_I2C0 (1 << 13) | ||
319 | #define SCTL_SCPEREN1_I2C1 (1 << 14) | ||
320 | #define SCTL_SCPEREN1_I2C2 (1 << 15) | ||
321 | #define SCTL_SCPEREN1_I2C3 (1 << 16) | ||
322 | #define SCTL_SCPEREN1_USB_PHY (1 << 17) | ||
323 | |||
324 | #endif /* __STA2X11_MFD_H */ | ||
diff --git a/include/linux/mfd/stmpe.h b/include/linux/mfd/stmpe.h index 8516fd1eaabc..f8d5b4d5843f 100644 --- a/include/linux/mfd/stmpe.h +++ b/include/linux/mfd/stmpe.h | |||
@@ -117,7 +117,7 @@ struct matrix_keymap_data; | |||
117 | * @no_autorepeat: disable key autorepeat | 117 | * @no_autorepeat: disable key autorepeat |
118 | */ | 118 | */ |
119 | struct stmpe_keypad_platform_data { | 119 | struct stmpe_keypad_platform_data { |
120 | struct matrix_keymap_data *keymap_data; | 120 | const struct matrix_keymap_data *keymap_data; |
121 | unsigned int debounce_ms; | 121 | unsigned int debounce_ms; |
122 | unsigned int scan_count; | 122 | unsigned int scan_count; |
123 | bool no_autorepeat; | 123 | bool no_autorepeat; |
diff --git a/include/linux/mfd/tps65910.h b/include/linux/mfd/tps65910.h index 1c6c2860d1a6..dd8dc0a6c462 100644 --- a/include/linux/mfd/tps65910.h +++ b/include/linux/mfd/tps65910.h | |||
@@ -18,6 +18,7 @@ | |||
18 | #define __LINUX_MFD_TPS65910_H | 18 | #define __LINUX_MFD_TPS65910_H |
19 | 19 | ||
20 | #include <linux/gpio.h> | 20 | #include <linux/gpio.h> |
21 | #include <linux/regmap.h> | ||
21 | 22 | ||
22 | /* TPS chip id list */ | 23 | /* TPS chip id list */ |
23 | #define TPS65910 0 | 24 | #define TPS65910 0 |
@@ -783,6 +784,18 @@ | |||
783 | #define TPS65910_SLEEP_CONTROL_EXT_INPUT_EN3 0x4 | 784 | #define TPS65910_SLEEP_CONTROL_EXT_INPUT_EN3 0x4 |
784 | #define TPS65911_SLEEP_CONTROL_EXT_INPUT_SLEEP 0x8 | 785 | #define TPS65911_SLEEP_CONTROL_EXT_INPUT_SLEEP 0x8 |
785 | 786 | ||
787 | /* | ||
788 | * Sleep keepon data: Maintains the state in sleep mode | ||
789 | * @therm_keepon: Keep on the thermal monitoring in sleep state. | ||
790 | * @clkout32k_keepon: Keep on the 32KHz clock output in sleep state. | ||
791 | * @i2chs_keepon: Keep on high speed internal clock in sleep state. | ||
792 | */ | ||
793 | struct tps65910_sleep_keepon_data { | ||
794 | unsigned therm_keepon:1; | ||
795 | unsigned clkout32k_keepon:1; | ||
796 | unsigned i2chs_keepon:1; | ||
797 | }; | ||
798 | |||
786 | /** | 799 | /** |
787 | * struct tps65910_board | 800 | * struct tps65910_board |
788 | * Board platform data may be used to initialize regulators. | 801 | * Board platform data may be used to initialize regulators. |
@@ -794,6 +807,8 @@ struct tps65910_board { | |||
794 | int irq_base; | 807 | int irq_base; |
795 | int vmbch_threshold; | 808 | int vmbch_threshold; |
796 | int vmbch2_threshold; | 809 | int vmbch2_threshold; |
810 | bool en_dev_slp; | ||
811 | struct tps65910_sleep_keepon_data *slp_keepon; | ||
797 | bool en_gpio_sleep[TPS6591X_MAX_NUM_GPIO]; | 812 | bool en_gpio_sleep[TPS6591X_MAX_NUM_GPIO]; |
798 | unsigned long regulator_ext_sleep_control[TPS65910_NUM_REGS]; | 813 | unsigned long regulator_ext_sleep_control[TPS65910_NUM_REGS]; |
799 | struct regulator_init_data *tps65910_pmic_init_data[TPS65910_NUM_REGS]; | 814 | struct regulator_init_data *tps65910_pmic_init_data[TPS65910_NUM_REGS]; |
@@ -809,16 +824,14 @@ struct tps65910 { | |||
809 | struct regmap *regmap; | 824 | struct regmap *regmap; |
810 | struct mutex io_mutex; | 825 | struct mutex io_mutex; |
811 | unsigned int id; | 826 | unsigned int id; |
812 | int (*read)(struct tps65910 *tps65910, u8 reg, int size, void *dest); | ||
813 | int (*write)(struct tps65910 *tps65910, u8 reg, int size, void *src); | ||
814 | 827 | ||
815 | /* Client devices */ | 828 | /* Client devices */ |
816 | struct tps65910_pmic *pmic; | 829 | struct tps65910_pmic *pmic; |
817 | struct tps65910_rtc *rtc; | 830 | struct tps65910_rtc *rtc; |
818 | struct tps65910_power *power; | 831 | struct tps65910_power *power; |
819 | 832 | ||
820 | /* GPIO Handling */ | 833 | /* Device node parsed board data */ |
821 | struct gpio_chip gpio; | 834 | struct tps65910_board *of_plat_data; |
822 | 835 | ||
823 | /* IRQ Handling */ | 836 | /* IRQ Handling */ |
824 | struct mutex irq_lock; | 837 | struct mutex irq_lock; |
@@ -826,6 +839,7 @@ struct tps65910 { | |||
826 | int irq_base; | 839 | int irq_base; |
827 | int irq_num; | 840 | int irq_num; |
828 | u32 irq_mask; | 841 | u32 irq_mask; |
842 | struct irq_domain *domain; | ||
829 | }; | 843 | }; |
830 | 844 | ||
831 | struct tps65910_platform_data { | 845 | struct tps65910_platform_data { |
@@ -833,9 +847,6 @@ struct tps65910_platform_data { | |||
833 | int irq_base; | 847 | int irq_base; |
834 | }; | 848 | }; |
835 | 849 | ||
836 | int tps65910_set_bits(struct tps65910 *tps65910, u8 reg, u8 mask); | ||
837 | int tps65910_clear_bits(struct tps65910 *tps65910, u8 reg, u8 mask); | ||
838 | void tps65910_gpio_init(struct tps65910 *tps65910, int gpio_base); | ||
839 | int tps65910_irq_init(struct tps65910 *tps65910, int irq, | 850 | int tps65910_irq_init(struct tps65910 *tps65910, int irq, |
840 | struct tps65910_platform_data *pdata); | 851 | struct tps65910_platform_data *pdata); |
841 | int tps65910_irq_exit(struct tps65910 *tps65910); | 852 | int tps65910_irq_exit(struct tps65910 *tps65910); |
@@ -845,4 +856,28 @@ static inline int tps65910_chip_id(struct tps65910 *tps65910) | |||
845 | return tps65910->id; | 856 | return tps65910->id; |
846 | } | 857 | } |
847 | 858 | ||
859 | static inline int tps65910_reg_read(struct tps65910 *tps65910, u8 reg, | ||
860 | unsigned int *val) | ||
861 | { | ||
862 | return regmap_read(tps65910->regmap, reg, val); | ||
863 | } | ||
864 | |||
865 | static inline int tps65910_reg_write(struct tps65910 *tps65910, u8 reg, | ||
866 | unsigned int val) | ||
867 | { | ||
868 | return regmap_write(tps65910->regmap, reg, val); | ||
869 | } | ||
870 | |||
871 | static inline int tps65910_reg_set_bits(struct tps65910 *tps65910, u8 reg, | ||
872 | u8 mask) | ||
873 | { | ||
874 | return regmap_update_bits(tps65910->regmap, reg, mask, mask); | ||
875 | } | ||
876 | |||
877 | static inline int tps65910_reg_clear_bits(struct tps65910 *tps65910, u8 reg, | ||
878 | u8 mask) | ||
879 | { | ||
880 | return regmap_update_bits(tps65910->regmap, reg, mask, 0); | ||
881 | } | ||
882 | |||
848 | #endif /* __LINUX_MFD_TPS65910_H */ | 883 | #endif /* __LINUX_MFD_TPS65910_H */ |
diff --git a/include/linux/mfd/twl6040.h b/include/linux/mfd/twl6040.h index b15b5f03f5c4..6659487c31e7 100644 --- a/include/linux/mfd/twl6040.h +++ b/include/linux/mfd/twl6040.h | |||
@@ -27,6 +27,7 @@ | |||
27 | 27 | ||
28 | #include <linux/interrupt.h> | 28 | #include <linux/interrupt.h> |
29 | #include <linux/mfd/core.h> | 29 | #include <linux/mfd/core.h> |
30 | #include <linux/regulator/consumer.h> | ||
30 | 31 | ||
31 | #define TWL6040_REG_ASICID 0x01 | 32 | #define TWL6040_REG_ASICID 0x01 |
32 | #define TWL6040_REG_ASICREV 0x02 | 33 | #define TWL6040_REG_ASICREV 0x02 |
@@ -203,6 +204,7 @@ struct regmap; | |||
203 | struct twl6040 { | 204 | struct twl6040 { |
204 | struct device *dev; | 205 | struct device *dev; |
205 | struct regmap *regmap; | 206 | struct regmap *regmap; |
207 | struct regulator_bulk_data supplies[2]; /* supplies for vio, v2v1 */ | ||
206 | struct mutex mutex; | 208 | struct mutex mutex; |
207 | struct mutex io_mutex; | 209 | struct mutex io_mutex; |
208 | struct mutex irq_mutex; | 210 | struct mutex irq_mutex; |
diff --git a/include/linux/mfd/wm831x/core.h b/include/linux/mfd/wm831x/core.h index 4b1211859f74..4a3b83a77614 100644 --- a/include/linux/mfd/wm831x/core.h +++ b/include/linux/mfd/wm831x/core.h | |||
@@ -17,6 +17,7 @@ | |||
17 | 17 | ||
18 | #include <linux/completion.h> | 18 | #include <linux/completion.h> |
19 | #include <linux/interrupt.h> | 19 | #include <linux/interrupt.h> |
20 | #include <linux/irqdomain.h> | ||
20 | #include <linux/list.h> | 21 | #include <linux/list.h> |
21 | #include <linux/regmap.h> | 22 | #include <linux/regmap.h> |
22 | 23 | ||
@@ -338,6 +339,7 @@ | |||
338 | #define WM831X_FLL_CLK_SRC_WIDTH 2 /* FLL_CLK_SRC - [1:0] */ | 339 | #define WM831X_FLL_CLK_SRC_WIDTH 2 /* FLL_CLK_SRC - [1:0] */ |
339 | 340 | ||
340 | struct regulator_dev; | 341 | struct regulator_dev; |
342 | struct irq_domain; | ||
341 | 343 | ||
342 | #define WM831X_NUM_IRQ_REGS 5 | 344 | #define WM831X_NUM_IRQ_REGS 5 |
343 | #define WM831X_NUM_GPIO_REGS 16 | 345 | #define WM831X_NUM_GPIO_REGS 16 |
@@ -367,7 +369,7 @@ struct wm831x { | |||
367 | 369 | ||
368 | int irq; /* Our chip IRQ */ | 370 | int irq; /* Our chip IRQ */ |
369 | struct mutex irq_lock; | 371 | struct mutex irq_lock; |
370 | int irq_base; | 372 | struct irq_domain *irq_domain; |
371 | int irq_masks_cur[WM831X_NUM_IRQ_REGS]; /* Currently active value */ | 373 | int irq_masks_cur[WM831X_NUM_IRQ_REGS]; /* Currently active value */ |
372 | int irq_masks_cache[WM831X_NUM_IRQ_REGS]; /* Cached hardware value */ | 374 | int irq_masks_cache[WM831X_NUM_IRQ_REGS]; /* Cached hardware value */ |
373 | 375 | ||
@@ -382,7 +384,8 @@ struct wm831x { | |||
382 | 384 | ||
383 | /* Used by the interrupt controller code to post writes */ | 385 | /* Used by the interrupt controller code to post writes */ |
384 | int gpio_update[WM831X_NUM_GPIO_REGS]; | 386 | int gpio_update[WM831X_NUM_GPIO_REGS]; |
385 | bool gpio_level[WM831X_NUM_GPIO_REGS]; | 387 | bool gpio_level_high[WM831X_NUM_GPIO_REGS]; |
388 | bool gpio_level_low[WM831X_NUM_GPIO_REGS]; | ||
386 | 389 | ||
387 | struct mutex auxadc_lock; | 390 | struct mutex auxadc_lock; |
388 | struct list_head auxadc_pending; | 391 | struct list_head auxadc_pending; |
@@ -417,6 +420,11 @@ int wm831x_irq_init(struct wm831x *wm831x, int irq); | |||
417 | void wm831x_irq_exit(struct wm831x *wm831x); | 420 | void wm831x_irq_exit(struct wm831x *wm831x); |
418 | void wm831x_auxadc_init(struct wm831x *wm831x); | 421 | void wm831x_auxadc_init(struct wm831x *wm831x); |
419 | 422 | ||
423 | static inline int wm831x_irq(struct wm831x *wm831x, int irq) | ||
424 | { | ||
425 | return irq_create_mapping(wm831x->irq_domain, irq); | ||
426 | } | ||
427 | |||
420 | extern struct regmap_config wm831x_regmap_config; | 428 | extern struct regmap_config wm831x_regmap_config; |
421 | 429 | ||
422 | #endif | 430 | #endif |
diff --git a/include/linux/mfd/wm8350/core.h b/include/linux/mfd/wm8350/core.h index 98fcc977e82b..9192b6404a73 100644 --- a/include/linux/mfd/wm8350/core.h +++ b/include/linux/mfd/wm8350/core.h | |||
@@ -602,6 +602,7 @@ extern const u16 wm8352_mode2_defaults[]; | |||
602 | extern const u16 wm8352_mode3_defaults[]; | 602 | extern const u16 wm8352_mode3_defaults[]; |
603 | 603 | ||
604 | struct wm8350; | 604 | struct wm8350; |
605 | struct regmap; | ||
605 | 606 | ||
606 | struct wm8350_hwmon { | 607 | struct wm8350_hwmon { |
607 | struct platform_device *pdev; | 608 | struct platform_device *pdev; |
@@ -612,13 +613,7 @@ struct wm8350 { | |||
612 | struct device *dev; | 613 | struct device *dev; |
613 | 614 | ||
614 | /* device IO */ | 615 | /* device IO */ |
615 | union { | 616 | struct regmap *regmap; |
616 | struct i2c_client *i2c_client; | ||
617 | struct spi_device *spi_device; | ||
618 | }; | ||
619 | int (*read_dev)(struct wm8350 *wm8350, char reg, int size, void *dest); | ||
620 | int (*write_dev)(struct wm8350 *wm8350, char reg, int size, | ||
621 | void *src); | ||
622 | u16 *reg_cache; | 617 | u16 *reg_cache; |
623 | 618 | ||
624 | struct mutex auxadc_mutex; | 619 | struct mutex auxadc_mutex; |
diff --git a/include/linux/mfd/wm8400-private.h b/include/linux/mfd/wm8400-private.h index 0147b6968510..2de565b94d0c 100644 --- a/include/linux/mfd/wm8400-private.h +++ b/include/linux/mfd/wm8400-private.h | |||
@@ -24,19 +24,14 @@ | |||
24 | #include <linux/mfd/wm8400.h> | 24 | #include <linux/mfd/wm8400.h> |
25 | #include <linux/mutex.h> | 25 | #include <linux/mutex.h> |
26 | #include <linux/platform_device.h> | 26 | #include <linux/platform_device.h> |
27 | 27 | #include <linux/regmap.h> | |
28 | struct regmap; | ||
29 | 28 | ||
30 | #define WM8400_REGISTER_COUNT 0x55 | 29 | #define WM8400_REGISTER_COUNT 0x55 |
31 | 30 | ||
32 | struct wm8400 { | 31 | struct wm8400 { |
33 | struct device *dev; | 32 | struct device *dev; |
34 | |||
35 | struct mutex io_lock; | ||
36 | struct regmap *regmap; | 33 | struct regmap *regmap; |
37 | 34 | ||
38 | u16 reg_cache[WM8400_REGISTER_COUNT]; | ||
39 | |||
40 | struct platform_device regulators[6]; | 35 | struct platform_device regulators[6]; |
41 | }; | 36 | }; |
42 | 37 | ||
@@ -930,6 +925,11 @@ struct wm8400 { | |||
930 | 925 | ||
931 | u16 wm8400_reg_read(struct wm8400 *wm8400, u8 reg); | 926 | u16 wm8400_reg_read(struct wm8400 *wm8400, u8 reg); |
932 | int wm8400_block_read(struct wm8400 *wm8400, u8 reg, int count, u16 *data); | 927 | int wm8400_block_read(struct wm8400 *wm8400, u8 reg, int count, u16 *data); |
933 | int wm8400_set_bits(struct wm8400 *wm8400, u8 reg, u16 mask, u16 val); | 928 | |
929 | static inline int wm8400_set_bits(struct wm8400 *wm8400, u8 reg, | ||
930 | u16 mask, u16 val) | ||
931 | { | ||
932 | return regmap_update_bits(wm8400->regmap, reg, mask, val); | ||
933 | } | ||
934 | 934 | ||
935 | #endif | 935 | #endif |
diff --git a/include/linux/mfd/wm8994/core.h b/include/linux/mfd/wm8994/core.h index 6695c3ec4518..1f173306bf05 100644 --- a/include/linux/mfd/wm8994/core.h +++ b/include/linux/mfd/wm8994/core.h | |||
@@ -57,6 +57,7 @@ struct wm8994 { | |||
57 | 57 | ||
58 | enum wm8994_type type; | 58 | enum wm8994_type type; |
59 | int revision; | 59 | int revision; |
60 | int cust_id; | ||
60 | 61 | ||
61 | struct device *dev; | 62 | struct device *dev; |
62 | struct regmap *regmap; | 63 | struct regmap *regmap; |
diff --git a/include/linux/mfd/wm8994/registers.h b/include/linux/mfd/wm8994/registers.h index 86e6a032a078..053548961c15 100644 --- a/include/linux/mfd/wm8994/registers.h +++ b/include/linux/mfd/wm8994/registers.h | |||
@@ -2212,6 +2212,9 @@ | |||
2212 | /* | 2212 | /* |
2213 | * R256 (0x100) - Chip Revision | 2213 | * R256 (0x100) - Chip Revision |
2214 | */ | 2214 | */ |
2215 | #define WM8994_CUST_ID_MASK 0xFF00 /* CUST_ID - [15:8] */ | ||
2216 | #define WM8994_CUST_ID_SHIFT 8 /* CUST_ID - [15:8] */ | ||
2217 | #define WM8994_CUST_ID_WIDTH 8 /* CUST_ID - [15:8] */ | ||
2215 | #define WM8994_CHIP_REV_MASK 0x000F /* CHIP_REV - [3:0] */ | 2218 | #define WM8994_CHIP_REV_MASK 0x000F /* CHIP_REV - [3:0] */ |
2216 | #define WM8994_CHIP_REV_SHIFT 0 /* CHIP_REV - [3:0] */ | 2219 | #define WM8994_CHIP_REV_SHIFT 0 /* CHIP_REV - [3:0] */ |
2217 | #define WM8994_CHIP_REV_WIDTH 4 /* CHIP_REV - [3:0] */ | 2220 | #define WM8994_CHIP_REV_WIDTH 4 /* CHIP_REV - [3:0] */ |
diff --git a/include/linux/micrel_phy.h b/include/linux/micrel_phy.h index dd8da342a991..61f0905bdc48 100644 --- a/include/linux/micrel_phy.h +++ b/include/linux/micrel_phy.h | |||
@@ -3,7 +3,7 @@ | |||
3 | 3 | ||
4 | #define MICREL_PHY_ID_MASK 0x00fffff0 | 4 | #define MICREL_PHY_ID_MASK 0x00fffff0 |
5 | 5 | ||
6 | #define PHY_ID_KSZ9021 0x00221611 | 6 | #define PHY_ID_KSZ9021 0x00221610 |
7 | #define PHY_ID_KS8737 0x00221720 | 7 | #define PHY_ID_KS8737 0x00221720 |
8 | #define PHY_ID_KS8041 0x00221510 | 8 | #define PHY_ID_KS8041 0x00221510 |
9 | #define PHY_ID_KS8051 0x00221550 | 9 | #define PHY_ID_KS8051 0x00221550 |
diff --git a/include/linux/mlx4/device.h b/include/linux/mlx4/device.h index 6e27fa99e8b9..6a8f002b8ed3 100644 --- a/include/linux/mlx4/device.h +++ b/include/linux/mlx4/device.h | |||
@@ -64,6 +64,7 @@ enum { | |||
64 | MLX4_MAX_NUM_PF = 16, | 64 | MLX4_MAX_NUM_PF = 16, |
65 | MLX4_MAX_NUM_VF = 64, | 65 | MLX4_MAX_NUM_VF = 64, |
66 | MLX4_MFUNC_MAX = 80, | 66 | MLX4_MFUNC_MAX = 80, |
67 | MLX4_MAX_EQ_NUM = 1024, | ||
67 | MLX4_MFUNC_EQ_NUM = 4, | 68 | MLX4_MFUNC_EQ_NUM = 4, |
68 | MLX4_MFUNC_MAX_EQES = 8, | 69 | MLX4_MFUNC_MAX_EQES = 8, |
69 | MLX4_MFUNC_EQE_MASK = (MLX4_MFUNC_MAX_EQES - 1) | 70 | MLX4_MFUNC_EQE_MASK = (MLX4_MFUNC_MAX_EQES - 1) |
@@ -239,6 +240,10 @@ static inline u64 mlx4_fw_ver(u64 major, u64 minor, u64 subminor) | |||
239 | return (major << 32) | (minor << 16) | subminor; | 240 | return (major << 32) | (minor << 16) | subminor; |
240 | } | 241 | } |
241 | 242 | ||
243 | struct mlx4_phys_caps { | ||
244 | u32 num_phys_eqs; | ||
245 | }; | ||
246 | |||
242 | struct mlx4_caps { | 247 | struct mlx4_caps { |
243 | u64 fw_ver; | 248 | u64 fw_ver; |
244 | u32 function; | 249 | u32 function; |
@@ -499,6 +504,7 @@ struct mlx4_dev { | |||
499 | unsigned long flags; | 504 | unsigned long flags; |
500 | unsigned long num_slaves; | 505 | unsigned long num_slaves; |
501 | struct mlx4_caps caps; | 506 | struct mlx4_caps caps; |
507 | struct mlx4_phys_caps phys_caps; | ||
502 | struct radix_tree_root qp_table_tree; | 508 | struct radix_tree_root qp_table_tree; |
503 | u8 rev_id; | 509 | u8 rev_id; |
504 | char board_id[MLX4_BOARD_ID_LEN]; | 510 | char board_id[MLX4_BOARD_ID_LEN]; |
diff --git a/include/linux/mm.h b/include/linux/mm.h index 7d5c37f24c63..b36d08ce5c57 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
@@ -321,6 +321,7 @@ static inline int is_vmalloc_or_module_addr(const void *x) | |||
321 | static inline void compound_lock(struct page *page) | 321 | static inline void compound_lock(struct page *page) |
322 | { | 322 | { |
323 | #ifdef CONFIG_TRANSPARENT_HUGEPAGE | 323 | #ifdef CONFIG_TRANSPARENT_HUGEPAGE |
324 | VM_BUG_ON(PageSlab(page)); | ||
324 | bit_spin_lock(PG_compound_lock, &page->flags); | 325 | bit_spin_lock(PG_compound_lock, &page->flags); |
325 | #endif | 326 | #endif |
326 | } | 327 | } |
@@ -328,6 +329,7 @@ static inline void compound_lock(struct page *page) | |||
328 | static inline void compound_unlock(struct page *page) | 329 | static inline void compound_unlock(struct page *page) |
329 | { | 330 | { |
330 | #ifdef CONFIG_TRANSPARENT_HUGEPAGE | 331 | #ifdef CONFIG_TRANSPARENT_HUGEPAGE |
332 | VM_BUG_ON(PageSlab(page)); | ||
331 | bit_spin_unlock(PG_compound_lock, &page->flags); | 333 | bit_spin_unlock(PG_compound_lock, &page->flags); |
332 | #endif | 334 | #endif |
333 | } | 335 | } |
@@ -871,8 +873,6 @@ extern void pagefault_out_of_memory(void); | |||
871 | extern void show_free_areas(unsigned int flags); | 873 | extern void show_free_areas(unsigned int flags); |
872 | extern bool skip_free_areas_node(unsigned int flags, int nid); | 874 | extern bool skip_free_areas_node(unsigned int flags, int nid); |
873 | 875 | ||
874 | int shmem_lock(struct file *file, int lock, struct user_struct *user); | ||
875 | struct file *shmem_file_setup(const char *name, loff_t size, unsigned long flags); | ||
876 | int shmem_zero_setup(struct vm_area_struct *); | 876 | int shmem_zero_setup(struct vm_area_struct *); |
877 | 877 | ||
878 | extern int can_do_mlock(void); | 878 | extern int can_do_mlock(void); |
@@ -951,11 +951,9 @@ static inline void unmap_shared_mapping_range(struct address_space *mapping, | |||
951 | extern void truncate_pagecache(struct inode *inode, loff_t old, loff_t new); | 951 | extern void truncate_pagecache(struct inode *inode, loff_t old, loff_t new); |
952 | extern void truncate_setsize(struct inode *inode, loff_t newsize); | 952 | extern void truncate_setsize(struct inode *inode, loff_t newsize); |
953 | extern int vmtruncate(struct inode *inode, loff_t offset); | 953 | extern int vmtruncate(struct inode *inode, loff_t offset); |
954 | extern int vmtruncate_range(struct inode *inode, loff_t offset, loff_t end); | ||
955 | void truncate_pagecache_range(struct inode *inode, loff_t offset, loff_t end); | 954 | void truncate_pagecache_range(struct inode *inode, loff_t offset, loff_t end); |
956 | int truncate_inode_page(struct address_space *mapping, struct page *page); | 955 | int truncate_inode_page(struct address_space *mapping, struct page *page); |
957 | int generic_error_remove_page(struct address_space *mapping, struct page *page); | 956 | int generic_error_remove_page(struct address_space *mapping, struct page *page); |
958 | |||
959 | int invalidate_inode_page(struct page *page); | 957 | int invalidate_inode_page(struct page *page); |
960 | 958 | ||
961 | #ifdef CONFIG_MMU | 959 | #ifdef CONFIG_MMU |
@@ -1394,7 +1392,7 @@ extern unsigned long get_unmapped_area(struct file *, unsigned long, unsigned lo | |||
1394 | extern unsigned long mmap_region(struct file *file, unsigned long addr, | 1392 | extern unsigned long mmap_region(struct file *file, unsigned long addr, |
1395 | unsigned long len, unsigned long flags, | 1393 | unsigned long len, unsigned long flags, |
1396 | vm_flags_t vm_flags, unsigned long pgoff); | 1394 | vm_flags_t vm_flags, unsigned long pgoff); |
1397 | extern unsigned long do_mmap(struct file *, unsigned long, | 1395 | extern unsigned long do_mmap_pgoff(struct file *, unsigned long, |
1398 | unsigned long, unsigned long, | 1396 | unsigned long, unsigned long, |
1399 | unsigned long, unsigned long); | 1397 | unsigned long, unsigned long); |
1400 | extern int do_munmap(struct mm_struct *, unsigned long, size_t); | 1398 | extern int do_munmap(struct mm_struct *, unsigned long, size_t); |
diff --git a/include/linux/mm_inline.h b/include/linux/mm_inline.h index 227fd3e9a9c9..1397ccf81e91 100644 --- a/include/linux/mm_inline.h +++ b/include/linux/mm_inline.h | |||
@@ -21,22 +21,22 @@ static inline int page_is_file_cache(struct page *page) | |||
21 | return !PageSwapBacked(page); | 21 | return !PageSwapBacked(page); |
22 | } | 22 | } |
23 | 23 | ||
24 | static inline void | 24 | static __always_inline void add_page_to_lru_list(struct page *page, |
25 | add_page_to_lru_list(struct zone *zone, struct page *page, enum lru_list lru) | 25 | struct lruvec *lruvec, enum lru_list lru) |
26 | { | 26 | { |
27 | struct lruvec *lruvec; | 27 | int nr_pages = hpage_nr_pages(page); |
28 | 28 | mem_cgroup_update_lru_size(lruvec, lru, nr_pages); | |
29 | lruvec = mem_cgroup_lru_add_list(zone, page, lru); | ||
30 | list_add(&page->lru, &lruvec->lists[lru]); | 29 | list_add(&page->lru, &lruvec->lists[lru]); |
31 | __mod_zone_page_state(zone, NR_LRU_BASE + lru, hpage_nr_pages(page)); | 30 | __mod_zone_page_state(lruvec_zone(lruvec), NR_LRU_BASE + lru, nr_pages); |
32 | } | 31 | } |
33 | 32 | ||
34 | static inline void | 33 | static __always_inline void del_page_from_lru_list(struct page *page, |
35 | del_page_from_lru_list(struct zone *zone, struct page *page, enum lru_list lru) | 34 | struct lruvec *lruvec, enum lru_list lru) |
36 | { | 35 | { |
37 | mem_cgroup_lru_del_list(page, lru); | 36 | int nr_pages = hpage_nr_pages(page); |
37 | mem_cgroup_update_lru_size(lruvec, lru, -nr_pages); | ||
38 | list_del(&page->lru); | 38 | list_del(&page->lru); |
39 | __mod_zone_page_state(zone, NR_LRU_BASE + lru, -hpage_nr_pages(page)); | 39 | __mod_zone_page_state(lruvec_zone(lruvec), NR_LRU_BASE + lru, -nr_pages); |
40 | } | 40 | } |
41 | 41 | ||
42 | /** | 42 | /** |
@@ -61,7 +61,7 @@ static inline enum lru_list page_lru_base_type(struct page *page) | |||
61 | * Returns the LRU list a page was on, as an index into the array of LRU | 61 | * Returns the LRU list a page was on, as an index into the array of LRU |
62 | * lists; and clears its Unevictable or Active flags, ready for freeing. | 62 | * lists; and clears its Unevictable or Active flags, ready for freeing. |
63 | */ | 63 | */ |
64 | static inline enum lru_list page_off_lru(struct page *page) | 64 | static __always_inline enum lru_list page_off_lru(struct page *page) |
65 | { | 65 | { |
66 | enum lru_list lru; | 66 | enum lru_list lru; |
67 | 67 | ||
@@ -85,7 +85,7 @@ static inline enum lru_list page_off_lru(struct page *page) | |||
85 | * Returns the LRU list a page should be on, as an index | 85 | * Returns the LRU list a page should be on, as an index |
86 | * into the array of LRU lists. | 86 | * into the array of LRU lists. |
87 | */ | 87 | */ |
88 | static inline enum lru_list page_lru(struct page *page) | 88 | static __always_inline enum lru_list page_lru(struct page *page) |
89 | { | 89 | { |
90 | enum lru_list lru; | 90 | enum lru_list lru; |
91 | 91 | ||
diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h index 3cc3062b3767..dad95bdd06d7 100644 --- a/include/linux/mm_types.h +++ b/include/linux/mm_types.h | |||
@@ -12,6 +12,7 @@ | |||
12 | #include <linux/completion.h> | 12 | #include <linux/completion.h> |
13 | #include <linux/cpumask.h> | 13 | #include <linux/cpumask.h> |
14 | #include <linux/page-debug-flags.h> | 14 | #include <linux/page-debug-flags.h> |
15 | #include <linux/uprobes.h> | ||
15 | #include <asm/page.h> | 16 | #include <asm/page.h> |
16 | #include <asm/mmu.h> | 17 | #include <asm/mmu.h> |
17 | 18 | ||
@@ -344,17 +345,6 @@ struct mm_struct { | |||
344 | /* Architecture-specific MM context */ | 345 | /* Architecture-specific MM context */ |
345 | mm_context_t context; | 346 | mm_context_t context; |
346 | 347 | ||
347 | /* Swap token stuff */ | ||
348 | /* | ||
349 | * Last value of global fault stamp as seen by this process. | ||
350 | * In other words, this value gives an indication of how long | ||
351 | * it has been since this task got the token. | ||
352 | * Look at mm/thrash.c | ||
353 | */ | ||
354 | unsigned int faultstamp; | ||
355 | unsigned int token_priority; | ||
356 | unsigned int last_interval; | ||
357 | |||
358 | unsigned long flags; /* Must use atomic bitops to access the bits */ | 348 | unsigned long flags; /* Must use atomic bitops to access the bits */ |
359 | 349 | ||
360 | struct core_state *core_state; /* coredumping support */ | 350 | struct core_state *core_state; /* coredumping support */ |
@@ -388,6 +378,7 @@ struct mm_struct { | |||
388 | #ifdef CONFIG_CPUMASK_OFFSTACK | 378 | #ifdef CONFIG_CPUMASK_OFFSTACK |
389 | struct cpumask cpumask_allocation; | 379 | struct cpumask cpumask_allocation; |
390 | #endif | 380 | #endif |
381 | struct uprobes_state uprobes_state; | ||
391 | }; | 382 | }; |
392 | 383 | ||
393 | static inline void mm_init_cpumask(struct mm_struct *mm) | 384 | static inline void mm_init_cpumask(struct mm_struct *mm) |
diff --git a/include/linux/mmc/card.h b/include/linux/mmc/card.h index 629b823f8836..d76513b5b263 100644 --- a/include/linux/mmc/card.h +++ b/include/linux/mmc/card.h | |||
@@ -58,6 +58,10 @@ struct mmc_ext_csd { | |||
58 | unsigned int generic_cmd6_time; /* Units: 10ms */ | 58 | unsigned int generic_cmd6_time; /* Units: 10ms */ |
59 | unsigned int power_off_longtime; /* Units: ms */ | 59 | unsigned int power_off_longtime; /* Units: ms */ |
60 | unsigned int hs_max_dtr; | 60 | unsigned int hs_max_dtr; |
61 | #define MMC_HIGH_26_MAX_DTR 26000000 | ||
62 | #define MMC_HIGH_52_MAX_DTR 52000000 | ||
63 | #define MMC_HIGH_DDR_MAX_DTR 52000000 | ||
64 | #define MMC_HS200_MAX_DTR 200000000 | ||
61 | unsigned int sectors; | 65 | unsigned int sectors; |
62 | unsigned int card_type; | 66 | unsigned int card_type; |
63 | unsigned int hc_erase_size; /* In sectors */ | 67 | unsigned int hc_erase_size; /* In sectors */ |
diff --git a/include/linux/mmc/dw_mmc.h b/include/linux/mmc/dw_mmc.h index 8f66e28f5a0f..7a7ebd367cfd 100644 --- a/include/linux/mmc/dw_mmc.h +++ b/include/linux/mmc/dw_mmc.h | |||
@@ -125,6 +125,7 @@ struct dw_mci { | |||
125 | struct mmc_request *mrq; | 125 | struct mmc_request *mrq; |
126 | struct mmc_command *cmd; | 126 | struct mmc_command *cmd; |
127 | struct mmc_data *data; | 127 | struct mmc_data *data; |
128 | struct workqueue_struct *card_workqueue; | ||
128 | 129 | ||
129 | /* DMA interface members*/ | 130 | /* DMA interface members*/ |
130 | int use_dma; | 131 | int use_dma; |
diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h index cbde4b7e675e..0707d228d7f1 100644 --- a/include/linux/mmc/host.h +++ b/include/linux/mmc/host.h | |||
@@ -297,6 +297,7 @@ struct mmc_host { | |||
297 | 297 | ||
298 | unsigned int sdio_irqs; | 298 | unsigned int sdio_irqs; |
299 | struct task_struct *sdio_irq_thread; | 299 | struct task_struct *sdio_irq_thread; |
300 | bool sdio_irq_pending; | ||
300 | atomic_t sdio_irq_thread_abort; | 301 | atomic_t sdio_irq_thread_abort; |
301 | 302 | ||
302 | mmc_pm_flag_t pm_flags; /* requested pm features */ | 303 | mmc_pm_flag_t pm_flags; /* requested pm features */ |
@@ -352,6 +353,7 @@ extern int mmc_cache_ctrl(struct mmc_host *, u8); | |||
352 | static inline void mmc_signal_sdio_irq(struct mmc_host *host) | 353 | static inline void mmc_signal_sdio_irq(struct mmc_host *host) |
353 | { | 354 | { |
354 | host->ops->enable_sdio_irq(host, 0); | 355 | host->ops->enable_sdio_irq(host, 0); |
356 | host->sdio_irq_pending = true; | ||
355 | wake_up_process(host->sdio_irq_thread); | 357 | wake_up_process(host->sdio_irq_thread); |
356 | } | 358 | } |
357 | 359 | ||
diff --git a/include/linux/mmc/mmc.h b/include/linux/mmc/mmc.h index b822a2cb6008..d425cab144d9 100644 --- a/include/linux/mmc/mmc.h +++ b/include/linux/mmc/mmc.h | |||
@@ -354,66 +354,6 @@ struct _mmc_csd { | |||
354 | #define EXT_CSD_CARD_TYPE_SDR_1_2V (1<<5) /* Card can run at 200MHz */ | 354 | #define EXT_CSD_CARD_TYPE_SDR_1_2V (1<<5) /* Card can run at 200MHz */ |
355 | /* SDR mode @1.2V I/O */ | 355 | /* SDR mode @1.2V I/O */ |
356 | 356 | ||
357 | #define EXT_CSD_CARD_TYPE_SDR_200 (EXT_CSD_CARD_TYPE_SDR_1_8V | \ | ||
358 | EXT_CSD_CARD_TYPE_SDR_1_2V) | ||
359 | |||
360 | #define EXT_CSD_CARD_TYPE_SDR_ALL (EXT_CSD_CARD_TYPE_SDR_200 | \ | ||
361 | EXT_CSD_CARD_TYPE_52 | \ | ||
362 | EXT_CSD_CARD_TYPE_26) | ||
363 | |||
364 | #define EXT_CSD_CARD_TYPE_SDR_1_2V_ALL (EXT_CSD_CARD_TYPE_SDR_1_2V | \ | ||
365 | EXT_CSD_CARD_TYPE_52 | \ | ||
366 | EXT_CSD_CARD_TYPE_26) | ||
367 | |||
368 | #define EXT_CSD_CARD_TYPE_SDR_1_8V_ALL (EXT_CSD_CARD_TYPE_SDR_1_8V | \ | ||
369 | EXT_CSD_CARD_TYPE_52 | \ | ||
370 | EXT_CSD_CARD_TYPE_26) | ||
371 | |||
372 | #define EXT_CSD_CARD_TYPE_SDR_1_2V_DDR_1_8V (EXT_CSD_CARD_TYPE_SDR_1_2V | \ | ||
373 | EXT_CSD_CARD_TYPE_DDR_1_8V | \ | ||
374 | EXT_CSD_CARD_TYPE_52 | \ | ||
375 | EXT_CSD_CARD_TYPE_26) | ||
376 | |||
377 | #define EXT_CSD_CARD_TYPE_SDR_1_8V_DDR_1_8V (EXT_CSD_CARD_TYPE_SDR_1_8V | \ | ||
378 | EXT_CSD_CARD_TYPE_DDR_1_8V | \ | ||
379 | EXT_CSD_CARD_TYPE_52 | \ | ||
380 | EXT_CSD_CARD_TYPE_26) | ||
381 | |||
382 | #define EXT_CSD_CARD_TYPE_SDR_1_2V_DDR_1_2V (EXT_CSD_CARD_TYPE_SDR_1_2V | \ | ||
383 | EXT_CSD_CARD_TYPE_DDR_1_2V | \ | ||
384 | EXT_CSD_CARD_TYPE_52 | \ | ||
385 | EXT_CSD_CARD_TYPE_26) | ||
386 | |||
387 | #define EXT_CSD_CARD_TYPE_SDR_1_8V_DDR_1_2V (EXT_CSD_CARD_TYPE_SDR_1_8V | \ | ||
388 | EXT_CSD_CARD_TYPE_DDR_1_2V | \ | ||
389 | EXT_CSD_CARD_TYPE_52 | \ | ||
390 | EXT_CSD_CARD_TYPE_26) | ||
391 | |||
392 | #define EXT_CSD_CARD_TYPE_SDR_1_2V_DDR_52 (EXT_CSD_CARD_TYPE_SDR_1_2V | \ | ||
393 | EXT_CSD_CARD_TYPE_DDR_52 | \ | ||
394 | EXT_CSD_CARD_TYPE_52 | \ | ||
395 | EXT_CSD_CARD_TYPE_26) | ||
396 | |||
397 | #define EXT_CSD_CARD_TYPE_SDR_1_8V_DDR_52 (EXT_CSD_CARD_TYPE_SDR_1_8V | \ | ||
398 | EXT_CSD_CARD_TYPE_DDR_52 | \ | ||
399 | EXT_CSD_CARD_TYPE_52 | \ | ||
400 | EXT_CSD_CARD_TYPE_26) | ||
401 | |||
402 | #define EXT_CSD_CARD_TYPE_SDR_ALL_DDR_1_8V (EXT_CSD_CARD_TYPE_SDR_200 | \ | ||
403 | EXT_CSD_CARD_TYPE_DDR_1_8V | \ | ||
404 | EXT_CSD_CARD_TYPE_52 | \ | ||
405 | EXT_CSD_CARD_TYPE_26) | ||
406 | |||
407 | #define EXT_CSD_CARD_TYPE_SDR_ALL_DDR_1_2V (EXT_CSD_CARD_TYPE_SDR_200 | \ | ||
408 | EXT_CSD_CARD_TYPE_DDR_1_2V | \ | ||
409 | EXT_CSD_CARD_TYPE_52 | \ | ||
410 | EXT_CSD_CARD_TYPE_26) | ||
411 | |||
412 | #define EXT_CSD_CARD_TYPE_SDR_ALL_DDR_52 (EXT_CSD_CARD_TYPE_SDR_200 | \ | ||
413 | EXT_CSD_CARD_TYPE_DDR_52 | \ | ||
414 | EXT_CSD_CARD_TYPE_52 | \ | ||
415 | EXT_CSD_CARD_TYPE_26) | ||
416 | |||
417 | #define EXT_CSD_BUS_WIDTH_1 0 /* Card is in 1 bit mode */ | 357 | #define EXT_CSD_BUS_WIDTH_1 0 /* Card is in 1 bit mode */ |
418 | #define EXT_CSD_BUS_WIDTH_4 1 /* Card is in 4 bit mode */ | 358 | #define EXT_CSD_BUS_WIDTH_4 1 /* Card is in 4 bit mode */ |
419 | #define EXT_CSD_BUS_WIDTH_8 2 /* Card is in 8 bit mode */ | 359 | #define EXT_CSD_BUS_WIDTH_8 2 /* Card is in 8 bit mode */ |
diff --git a/include/linux/mmc/mxs-mmc.h b/include/linux/mmc/mxs-mmc.h new file mode 100644 index 000000000000..7c2ad3a7f2f3 --- /dev/null +++ b/include/linux/mmc/mxs-mmc.h | |||
@@ -0,0 +1,19 @@ | |||
1 | /* | ||
2 | * Copyright 2011 Freescale Semiconductor, Inc. All Rights Reserved. | ||
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 as | ||
6 | * published by the Free Software Foundation. | ||
7 | */ | ||
8 | |||
9 | #ifndef __LINUX_MMC_MXS_MMC_H__ | ||
10 | #define __LINUX_MMC_MXS_MMC_H__ | ||
11 | |||
12 | struct mxs_mmc_platform_data { | ||
13 | int wp_gpio; /* write protect pin */ | ||
14 | unsigned int flags; | ||
15 | #define SLOTF_4_BIT_CAPABLE (1 << 0) | ||
16 | #define SLOTF_8_BIT_CAPABLE (1 << 1) | ||
17 | }; | ||
18 | |||
19 | #endif /* __LINUX_MMC_MXS_MMC_H__ */ | ||
diff --git a/include/linux/mmdebug.h b/include/linux/mmdebug.h index c04ecfe03f7f..580bd587d916 100644 --- a/include/linux/mmdebug.h +++ b/include/linux/mmdebug.h | |||
@@ -4,7 +4,7 @@ | |||
4 | #ifdef CONFIG_DEBUG_VM | 4 | #ifdef CONFIG_DEBUG_VM |
5 | #define VM_BUG_ON(cond) BUG_ON(cond) | 5 | #define VM_BUG_ON(cond) BUG_ON(cond) |
6 | #else | 6 | #else |
7 | #define VM_BUG_ON(cond) do { (void)(cond); } while (0) | 7 | #define VM_BUG_ON(cond) BUILD_BUG_ON_INVALID(cond) |
8 | #endif | 8 | #endif |
9 | 9 | ||
10 | #ifdef CONFIG_DEBUG_VIRTUAL | 10 | #ifdef CONFIG_DEBUG_VIRTUAL |
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index 41aa49b74821..2427706f78b4 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h | |||
@@ -35,13 +35,39 @@ | |||
35 | */ | 35 | */ |
36 | #define PAGE_ALLOC_COSTLY_ORDER 3 | 36 | #define PAGE_ALLOC_COSTLY_ORDER 3 |
37 | 37 | ||
38 | #define MIGRATE_UNMOVABLE 0 | 38 | enum { |
39 | #define MIGRATE_RECLAIMABLE 1 | 39 | MIGRATE_UNMOVABLE, |
40 | #define MIGRATE_MOVABLE 2 | 40 | MIGRATE_RECLAIMABLE, |
41 | #define MIGRATE_PCPTYPES 3 /* the number of types on the pcp lists */ | 41 | MIGRATE_MOVABLE, |
42 | #define MIGRATE_RESERVE 3 | 42 | MIGRATE_PCPTYPES, /* the number of types on the pcp lists */ |
43 | #define MIGRATE_ISOLATE 4 /* can't allocate from here */ | 43 | MIGRATE_RESERVE = MIGRATE_PCPTYPES, |
44 | #define MIGRATE_TYPES 5 | 44 | #ifdef CONFIG_CMA |
45 | /* | ||
46 | * MIGRATE_CMA migration type is designed to mimic the way | ||
47 | * ZONE_MOVABLE works. Only movable pages can be allocated | ||
48 | * from MIGRATE_CMA pageblocks and page allocator never | ||
49 | * implicitly change migration type of MIGRATE_CMA pageblock. | ||
50 | * | ||
51 | * The way to use it is to change migratetype of a range of | ||
52 | * pageblocks to MIGRATE_CMA which can be done by | ||
53 | * __free_pageblock_cma() function. What is important though | ||
54 | * is that a range of pageblocks must be aligned to | ||
55 | * MAX_ORDER_NR_PAGES should biggest page be bigger then | ||
56 | * a single pageblock. | ||
57 | */ | ||
58 | MIGRATE_CMA, | ||
59 | #endif | ||
60 | MIGRATE_ISOLATE, /* can't allocate from here */ | ||
61 | MIGRATE_TYPES | ||
62 | }; | ||
63 | |||
64 | #ifdef CONFIG_CMA | ||
65 | # define is_migrate_cma(migratetype) unlikely((migratetype) == MIGRATE_CMA) | ||
66 | # define cma_wmark_pages(zone) zone->min_cma_pages | ||
67 | #else | ||
68 | # define is_migrate_cma(migratetype) false | ||
69 | # define cma_wmark_pages(zone) 0 | ||
70 | #endif | ||
45 | 71 | ||
46 | #define for_each_migratetype_order(order, type) \ | 72 | #define for_each_migratetype_order(order, type) \ |
47 | for (order = 0; order < MAX_ORDER; order++) \ | 73 | for (order = 0; order < MAX_ORDER; order++) \ |
@@ -159,8 +185,25 @@ static inline int is_unevictable_lru(enum lru_list lru) | |||
159 | return (lru == LRU_UNEVICTABLE); | 185 | return (lru == LRU_UNEVICTABLE); |
160 | } | 186 | } |
161 | 187 | ||
188 | struct zone_reclaim_stat { | ||
189 | /* | ||
190 | * The pageout code in vmscan.c keeps track of how many of the | ||
191 | * mem/swap backed and file backed pages are refeferenced. | ||
192 | * The higher the rotated/scanned ratio, the more valuable | ||
193 | * that cache is. | ||
194 | * | ||
195 | * The anon LRU stats live in [0], file LRU stats in [1] | ||
196 | */ | ||
197 | unsigned long recent_rotated[2]; | ||
198 | unsigned long recent_scanned[2]; | ||
199 | }; | ||
200 | |||
162 | struct lruvec { | 201 | struct lruvec { |
163 | struct list_head lists[NR_LRU_LISTS]; | 202 | struct list_head lists[NR_LRU_LISTS]; |
203 | struct zone_reclaim_stat reclaim_stat; | ||
204 | #ifdef CONFIG_CGROUP_MEM_RES_CTLR | ||
205 | struct zone *zone; | ||
206 | #endif | ||
164 | }; | 207 | }; |
165 | 208 | ||
166 | /* Mask used at gathering information at once (see memcontrol.c) */ | 209 | /* Mask used at gathering information at once (see memcontrol.c) */ |
@@ -169,16 +212,12 @@ struct lruvec { | |||
169 | #define LRU_ALL_EVICTABLE (LRU_ALL_FILE | LRU_ALL_ANON) | 212 | #define LRU_ALL_EVICTABLE (LRU_ALL_FILE | LRU_ALL_ANON) |
170 | #define LRU_ALL ((1 << NR_LRU_LISTS) - 1) | 213 | #define LRU_ALL ((1 << NR_LRU_LISTS) - 1) |
171 | 214 | ||
172 | /* Isolate inactive pages */ | ||
173 | #define ISOLATE_INACTIVE ((__force isolate_mode_t)0x1) | ||
174 | /* Isolate active pages */ | ||
175 | #define ISOLATE_ACTIVE ((__force isolate_mode_t)0x2) | ||
176 | /* Isolate clean file */ | 215 | /* Isolate clean file */ |
177 | #define ISOLATE_CLEAN ((__force isolate_mode_t)0x4) | 216 | #define ISOLATE_CLEAN ((__force isolate_mode_t)0x1) |
178 | /* Isolate unmapped file */ | 217 | /* Isolate unmapped file */ |
179 | #define ISOLATE_UNMAPPED ((__force isolate_mode_t)0x8) | 218 | #define ISOLATE_UNMAPPED ((__force isolate_mode_t)0x2) |
180 | /* Isolate for asynchronous migration */ | 219 | /* Isolate for asynchronous migration */ |
181 | #define ISOLATE_ASYNC_MIGRATE ((__force isolate_mode_t)0x10) | 220 | #define ISOLATE_ASYNC_MIGRATE ((__force isolate_mode_t)0x4) |
182 | 221 | ||
183 | /* LRU Isolation modes. */ | 222 | /* LRU Isolation modes. */ |
184 | typedef unsigned __bitwise__ isolate_mode_t; | 223 | typedef unsigned __bitwise__ isolate_mode_t; |
@@ -287,19 +326,6 @@ enum zone_type { | |||
287 | #error ZONES_SHIFT -- too many zones configured adjust calculation | 326 | #error ZONES_SHIFT -- too many zones configured adjust calculation |
288 | #endif | 327 | #endif |
289 | 328 | ||
290 | struct zone_reclaim_stat { | ||
291 | /* | ||
292 | * The pageout code in vmscan.c keeps track of how many of the | ||
293 | * mem/swap backed and file backed pages are refeferenced. | ||
294 | * The higher the rotated/scanned ratio, the more valuable | ||
295 | * that cache is. | ||
296 | * | ||
297 | * The anon LRU stats live in [0], file LRU stats in [1] | ||
298 | */ | ||
299 | unsigned long recent_rotated[2]; | ||
300 | unsigned long recent_scanned[2]; | ||
301 | }; | ||
302 | |||
303 | struct zone { | 329 | struct zone { |
304 | /* Fields commonly accessed by the page allocator */ | 330 | /* Fields commonly accessed by the page allocator */ |
305 | 331 | ||
@@ -347,6 +373,13 @@ struct zone { | |||
347 | /* see spanned/present_pages for more description */ | 373 | /* see spanned/present_pages for more description */ |
348 | seqlock_t span_seqlock; | 374 | seqlock_t span_seqlock; |
349 | #endif | 375 | #endif |
376 | #ifdef CONFIG_CMA | ||
377 | /* | ||
378 | * CMA needs to increase watermark levels during the allocation | ||
379 | * process to make sure that the system is not starved. | ||
380 | */ | ||
381 | unsigned long min_cma_pages; | ||
382 | #endif | ||
350 | struct free_area free_area[MAX_ORDER]; | 383 | struct free_area free_area[MAX_ORDER]; |
351 | 384 | ||
352 | #ifndef CONFIG_SPARSEMEM | 385 | #ifndef CONFIG_SPARSEMEM |
@@ -374,8 +407,6 @@ struct zone { | |||
374 | spinlock_t lru_lock; | 407 | spinlock_t lru_lock; |
375 | struct lruvec lruvec; | 408 | struct lruvec lruvec; |
376 | 409 | ||
377 | struct zone_reclaim_stat reclaim_stat; | ||
378 | |||
379 | unsigned long pages_scanned; /* since last reclaim */ | 410 | unsigned long pages_scanned; /* since last reclaim */ |
380 | unsigned long flags; /* zone flags, see below */ | 411 | unsigned long flags; /* zone flags, see below */ |
381 | 412 | ||
@@ -701,6 +732,17 @@ extern int init_currently_empty_zone(struct zone *zone, unsigned long start_pfn, | |||
701 | unsigned long size, | 732 | unsigned long size, |
702 | enum memmap_context context); | 733 | enum memmap_context context); |
703 | 734 | ||
735 | extern void lruvec_init(struct lruvec *lruvec, struct zone *zone); | ||
736 | |||
737 | static inline struct zone *lruvec_zone(struct lruvec *lruvec) | ||
738 | { | ||
739 | #ifdef CONFIG_CGROUP_MEM_RES_CTLR | ||
740 | return lruvec->zone; | ||
741 | #else | ||
742 | return container_of(lruvec, struct zone, lruvec); | ||
743 | #endif | ||
744 | } | ||
745 | |||
704 | #ifdef CONFIG_HAVE_MEMORY_PRESENT | 746 | #ifdef CONFIG_HAVE_MEMORY_PRESENT |
705 | void memory_present(int nid, unsigned long start, unsigned long end); | 747 | void memory_present(int nid, unsigned long start, unsigned long end); |
706 | #else | 748 | #else |
diff --git a/include/linux/moduleparam.h b/include/linux/moduleparam.h index 1b14d25162cb..d6a58065c09c 100644 --- a/include/linux/moduleparam.h +++ b/include/linux/moduleparam.h | |||
@@ -128,7 +128,7 @@ struct kparam_array | |||
128 | * The ops can have NULL set or get functions. | 128 | * The ops can have NULL set or get functions. |
129 | */ | 129 | */ |
130 | #define module_param_cb(name, ops, arg, perm) \ | 130 | #define module_param_cb(name, ops, arg, perm) \ |
131 | __module_param_call(MODULE_PARAM_PREFIX, name, ops, arg, perm, 0) | 131 | __module_param_call(MODULE_PARAM_PREFIX, name, ops, arg, perm, -1) |
132 | 132 | ||
133 | /** | 133 | /** |
134 | * <level>_param_cb - general callback for a module/cmdline parameter | 134 | * <level>_param_cb - general callback for a module/cmdline parameter |
@@ -192,7 +192,7 @@ struct kparam_array | |||
192 | { (void *)set, (void *)get }; \ | 192 | { (void *)set, (void *)get }; \ |
193 | __module_param_call(MODULE_PARAM_PREFIX, \ | 193 | __module_param_call(MODULE_PARAM_PREFIX, \ |
194 | name, &__param_ops_##name, arg, \ | 194 | name, &__param_ops_##name, arg, \ |
195 | (perm) + sizeof(__check_old_set_param(set))*0, 0) | 195 | (perm) + sizeof(__check_old_set_param(set))*0, -1) |
196 | 196 | ||
197 | /* We don't get oldget: it's often a new-style param_get_uint, etc. */ | 197 | /* We don't get oldget: it's often a new-style param_get_uint, etc. */ |
198 | static inline int | 198 | static inline int |
@@ -272,7 +272,7 @@ static inline void __kernel_param_unlock(void) | |||
272 | */ | 272 | */ |
273 | #define core_param(name, var, type, perm) \ | 273 | #define core_param(name, var, type, perm) \ |
274 | param_check_##type(name, &(var)); \ | 274 | param_check_##type(name, &(var)); \ |
275 | __module_param_call("", name, ¶m_ops_##type, &var, perm, 0) | 275 | __module_param_call("", name, ¶m_ops_##type, &var, perm, -1) |
276 | #endif /* !MODULE */ | 276 | #endif /* !MODULE */ |
277 | 277 | ||
278 | /** | 278 | /** |
@@ -290,7 +290,7 @@ static inline void __kernel_param_unlock(void) | |||
290 | = { len, string }; \ | 290 | = { len, string }; \ |
291 | __module_param_call(MODULE_PARAM_PREFIX, name, \ | 291 | __module_param_call(MODULE_PARAM_PREFIX, name, \ |
292 | ¶m_ops_string, \ | 292 | ¶m_ops_string, \ |
293 | .str = &__param_string_##name, perm, 0); \ | 293 | .str = &__param_string_##name, perm, -1); \ |
294 | __MODULE_PARM_TYPE(name, "string") | 294 | __MODULE_PARM_TYPE(name, "string") |
295 | 295 | ||
296 | /** | 296 | /** |
@@ -432,7 +432,7 @@ extern int param_set_bint(const char *val, const struct kernel_param *kp); | |||
432 | __module_param_call(MODULE_PARAM_PREFIX, name, \ | 432 | __module_param_call(MODULE_PARAM_PREFIX, name, \ |
433 | ¶m_array_ops, \ | 433 | ¶m_array_ops, \ |
434 | .arr = &__param_arr_##name, \ | 434 | .arr = &__param_arr_##name, \ |
435 | perm, 0); \ | 435 | perm, -1); \ |
436 | __MODULE_PARM_TYPE(name, "array of " #type) | 436 | __MODULE_PARM_TYPE(name, "array of " #type) |
437 | 437 | ||
438 | extern struct kernel_param_ops param_array_ops; | 438 | extern struct kernel_param_ops param_array_ops; |
diff --git a/include/linux/msdos_fs.h b/include/linux/msdos_fs.h index 34066e65fdeb..11cc2ac67e75 100644 --- a/include/linux/msdos_fs.h +++ b/include/linux/msdos_fs.h | |||
@@ -21,8 +21,9 @@ | |||
21 | #define CT_LE_W(v) cpu_to_le16(v) | 21 | #define CT_LE_W(v) cpu_to_le16(v) |
22 | #define CT_LE_L(v) cpu_to_le32(v) | 22 | #define CT_LE_L(v) cpu_to_le32(v) |
23 | 23 | ||
24 | #define MSDOS_ROOT_INO 1 /* The root inode number */ | ||
25 | #define MSDOS_FSINFO_INO 2 /* Used for managing the FSINFO block */ | ||
24 | 26 | ||
25 | #define MSDOS_ROOT_INO 1 /* == MINIX_ROOT_INO */ | ||
26 | #define MSDOS_DIR_BITS 5 /* log2(sizeof(struct msdos_dir_entry)) */ | 27 | #define MSDOS_DIR_BITS 5 /* log2(sizeof(struct msdos_dir_entry)) */ |
27 | 28 | ||
28 | /* directory limit */ | 29 | /* directory limit */ |
diff --git a/include/linux/mtd/gpmi-nand.h b/include/linux/mtd/gpmi-nand.h index 69b6dbf46b5e..ed3c4e09f3d1 100644 --- a/include/linux/mtd/gpmi-nand.h +++ b/include/linux/mtd/gpmi-nand.h | |||
@@ -23,12 +23,12 @@ | |||
23 | #define GPMI_NAND_RES_SIZE 6 | 23 | #define GPMI_NAND_RES_SIZE 6 |
24 | 24 | ||
25 | /* Resource names for the GPMI NAND driver. */ | 25 | /* Resource names for the GPMI NAND driver. */ |
26 | #define GPMI_NAND_GPMI_REGS_ADDR_RES_NAME "GPMI NAND GPMI Registers" | 26 | #define GPMI_NAND_GPMI_REGS_ADDR_RES_NAME "gpmi-nand" |
27 | #define GPMI_NAND_GPMI_INTERRUPT_RES_NAME "GPMI NAND GPMI Interrupt" | 27 | #define GPMI_NAND_GPMI_INTERRUPT_RES_NAME "GPMI NAND GPMI Interrupt" |
28 | #define GPMI_NAND_BCH_REGS_ADDR_RES_NAME "GPMI NAND BCH Registers" | 28 | #define GPMI_NAND_BCH_REGS_ADDR_RES_NAME "bch" |
29 | #define GPMI_NAND_BCH_INTERRUPT_RES_NAME "GPMI NAND BCH Interrupt" | 29 | #define GPMI_NAND_BCH_INTERRUPT_RES_NAME "bch" |
30 | #define GPMI_NAND_DMA_CHANNELS_RES_NAME "GPMI NAND DMA Channels" | 30 | #define GPMI_NAND_DMA_CHANNELS_RES_NAME "GPMI NAND DMA Channels" |
31 | #define GPMI_NAND_DMA_INTERRUPT_RES_NAME "GPMI NAND DMA Interrupt" | 31 | #define GPMI_NAND_DMA_INTERRUPT_RES_NAME "gpmi-dma" |
32 | 32 | ||
33 | /** | 33 | /** |
34 | * struct gpmi_nand_platform_data - GPMI NAND driver platform data. | 34 | * struct gpmi_nand_platform_data - GPMI NAND driver platform data. |
diff --git a/include/linux/mtd/mtd.h b/include/linux/mtd/mtd.h index cf5ea8cdcf8e..63dadc0dfb62 100644 --- a/include/linux/mtd/mtd.h +++ b/include/linux/mtd/mtd.h | |||
@@ -157,6 +157,15 @@ struct mtd_info { | |||
157 | unsigned int erasesize_mask; | 157 | unsigned int erasesize_mask; |
158 | unsigned int writesize_mask; | 158 | unsigned int writesize_mask; |
159 | 159 | ||
160 | /* | ||
161 | * read ops return -EUCLEAN if max number of bitflips corrected on any | ||
162 | * one region comprising an ecc step equals or exceeds this value. | ||
163 | * Settable by driver, else defaults to ecc_strength. User can override | ||
164 | * in sysfs. N.B. The meaning of the -EUCLEAN return code has changed; | ||
165 | * see Documentation/ABI/testing/sysfs-class-mtd for more detail. | ||
166 | */ | ||
167 | unsigned int bitflip_threshold; | ||
168 | |||
160 | // Kernel-only stuff starts here. | 169 | // Kernel-only stuff starts here. |
161 | const char *name; | 170 | const char *name; |
162 | int index; | 171 | int index; |
@@ -164,7 +173,7 @@ struct mtd_info { | |||
164 | /* ECC layout structure pointer - read only! */ | 173 | /* ECC layout structure pointer - read only! */ |
165 | struct nand_ecclayout *ecclayout; | 174 | struct nand_ecclayout *ecclayout; |
166 | 175 | ||
167 | /* max number of correctible bit errors per writesize */ | 176 | /* max number of correctible bit errors per ecc step */ |
168 | unsigned int ecc_strength; | 177 | unsigned int ecc_strength; |
169 | 178 | ||
170 | /* Data for variable erase regions. If numeraseregions is zero, | 179 | /* Data for variable erase regions. If numeraseregions is zero, |
diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h index 1482340d3d9f..57977c640529 100644 --- a/include/linux/mtd/nand.h +++ b/include/linux/mtd/nand.h | |||
@@ -161,8 +161,6 @@ typedef enum { | |||
161 | * Option constants for bizarre disfunctionality and real | 161 | * Option constants for bizarre disfunctionality and real |
162 | * features. | 162 | * features. |
163 | */ | 163 | */ |
164 | /* Chip can not auto increment pages */ | ||
165 | #define NAND_NO_AUTOINCR 0x00000001 | ||
166 | /* Buswidth is 16 bit */ | 164 | /* Buswidth is 16 bit */ |
167 | #define NAND_BUSWIDTH_16 0x00000002 | 165 | #define NAND_BUSWIDTH_16 0x00000002 |
168 | /* Device supports partial programming without padding */ | 166 | /* Device supports partial programming without padding */ |
@@ -207,7 +205,6 @@ typedef enum { | |||
207 | (NAND_NO_PADDING | NAND_CACHEPRG | NAND_COPYBACK) | 205 | (NAND_NO_PADDING | NAND_CACHEPRG | NAND_COPYBACK) |
208 | 206 | ||
209 | /* Macros to identify the above */ | 207 | /* Macros to identify the above */ |
210 | #define NAND_CANAUTOINCR(chip) (!(chip->options & NAND_NO_AUTOINCR)) | ||
211 | #define NAND_MUST_PAD(chip) (!(chip->options & NAND_NO_PADDING)) | 208 | #define NAND_MUST_PAD(chip) (!(chip->options & NAND_NO_PADDING)) |
212 | #define NAND_HAS_CACHEPROG(chip) ((chip->options & NAND_CACHEPRG)) | 209 | #define NAND_HAS_CACHEPROG(chip) ((chip->options & NAND_CACHEPRG)) |
213 | #define NAND_HAS_COPYBACK(chip) ((chip->options & NAND_COPYBACK)) | 210 | #define NAND_HAS_COPYBACK(chip) ((chip->options & NAND_COPYBACK)) |
@@ -216,7 +213,7 @@ typedef enum { | |||
216 | && (chip->page_shift > 9)) | 213 | && (chip->page_shift > 9)) |
217 | 214 | ||
218 | /* Mask to zero out the chip options, which come from the id table */ | 215 | /* Mask to zero out the chip options, which come from the id table */ |
219 | #define NAND_CHIPOPTIONS_MSK (0x0000ffff & ~NAND_NO_AUTOINCR) | 216 | #define NAND_CHIPOPTIONS_MSK 0x0000ffff |
220 | 217 | ||
221 | /* Non chip related options */ | 218 | /* Non chip related options */ |
222 | /* This option skips the bbt scan during initialization. */ | 219 | /* This option skips the bbt scan during initialization. */ |
@@ -363,21 +360,20 @@ struct nand_ecc_ctrl { | |||
363 | int (*correct)(struct mtd_info *mtd, uint8_t *dat, uint8_t *read_ecc, | 360 | int (*correct)(struct mtd_info *mtd, uint8_t *dat, uint8_t *read_ecc, |
364 | uint8_t *calc_ecc); | 361 | uint8_t *calc_ecc); |
365 | int (*read_page_raw)(struct mtd_info *mtd, struct nand_chip *chip, | 362 | int (*read_page_raw)(struct mtd_info *mtd, struct nand_chip *chip, |
366 | uint8_t *buf, int page); | 363 | uint8_t *buf, int oob_required, int page); |
367 | void (*write_page_raw)(struct mtd_info *mtd, struct nand_chip *chip, | 364 | void (*write_page_raw)(struct mtd_info *mtd, struct nand_chip *chip, |
368 | const uint8_t *buf); | 365 | const uint8_t *buf, int oob_required); |
369 | int (*read_page)(struct mtd_info *mtd, struct nand_chip *chip, | 366 | int (*read_page)(struct mtd_info *mtd, struct nand_chip *chip, |
370 | uint8_t *buf, int page); | 367 | uint8_t *buf, int oob_required, int page); |
371 | int (*read_subpage)(struct mtd_info *mtd, struct nand_chip *chip, | 368 | int (*read_subpage)(struct mtd_info *mtd, struct nand_chip *chip, |
372 | uint32_t offs, uint32_t len, uint8_t *buf); | 369 | uint32_t offs, uint32_t len, uint8_t *buf); |
373 | void (*write_page)(struct mtd_info *mtd, struct nand_chip *chip, | 370 | void (*write_page)(struct mtd_info *mtd, struct nand_chip *chip, |
374 | const uint8_t *buf); | 371 | const uint8_t *buf, int oob_required); |
375 | int (*write_oob_raw)(struct mtd_info *mtd, struct nand_chip *chip, | 372 | int (*write_oob_raw)(struct mtd_info *mtd, struct nand_chip *chip, |
376 | int page); | 373 | int page); |
377 | int (*read_oob_raw)(struct mtd_info *mtd, struct nand_chip *chip, | 374 | int (*read_oob_raw)(struct mtd_info *mtd, struct nand_chip *chip, |
378 | int page, int sndcmd); | 375 | int page); |
379 | int (*read_oob)(struct mtd_info *mtd, struct nand_chip *chip, int page, | 376 | int (*read_oob)(struct mtd_info *mtd, struct nand_chip *chip, int page); |
380 | int sndcmd); | ||
381 | int (*write_oob)(struct mtd_info *mtd, struct nand_chip *chip, | 377 | int (*write_oob)(struct mtd_info *mtd, struct nand_chip *chip, |
382 | int page); | 378 | int page); |
383 | }; | 379 | }; |
@@ -459,6 +455,8 @@ struct nand_buffers { | |||
459 | * @pagemask: [INTERN] page number mask = number of (pages / chip) - 1 | 455 | * @pagemask: [INTERN] page number mask = number of (pages / chip) - 1 |
460 | * @pagebuf: [INTERN] holds the pagenumber which is currently in | 456 | * @pagebuf: [INTERN] holds the pagenumber which is currently in |
461 | * data_buf. | 457 | * data_buf. |
458 | * @pagebuf_bitflips: [INTERN] holds the bitflip count for the page which is | ||
459 | * currently in data_buf. | ||
462 | * @subpagesize: [INTERN] holds the subpagesize | 460 | * @subpagesize: [INTERN] holds the subpagesize |
463 | * @onfi_version: [INTERN] holds the chip ONFI version (BCD encoded), | 461 | * @onfi_version: [INTERN] holds the chip ONFI version (BCD encoded), |
464 | * non 0 if ONFI supported. | 462 | * non 0 if ONFI supported. |
@@ -505,7 +503,8 @@ struct nand_chip { | |||
505 | int (*errstat)(struct mtd_info *mtd, struct nand_chip *this, int state, | 503 | int (*errstat)(struct mtd_info *mtd, struct nand_chip *this, int state, |
506 | int status, int page); | 504 | int status, int page); |
507 | int (*write_page)(struct mtd_info *mtd, struct nand_chip *chip, | 505 | int (*write_page)(struct mtd_info *mtd, struct nand_chip *chip, |
508 | const uint8_t *buf, int page, int cached, int raw); | 506 | const uint8_t *buf, int oob_required, int page, |
507 | int cached, int raw); | ||
509 | 508 | ||
510 | int chip_delay; | 509 | int chip_delay; |
511 | unsigned int options; | 510 | unsigned int options; |
@@ -519,6 +518,7 @@ struct nand_chip { | |||
519 | uint64_t chipsize; | 518 | uint64_t chipsize; |
520 | int pagemask; | 519 | int pagemask; |
521 | int pagebuf; | 520 | int pagebuf; |
521 | unsigned int pagebuf_bitflips; | ||
522 | int subpagesize; | 522 | int subpagesize; |
523 | uint8_t cellinfo; | 523 | uint8_t cellinfo; |
524 | int badblockpos; | 524 | int badblockpos; |
@@ -654,6 +654,7 @@ struct platform_nand_ctrl { | |||
654 | void (*cmd_ctrl)(struct mtd_info *mtd, int dat, unsigned int ctrl); | 654 | void (*cmd_ctrl)(struct mtd_info *mtd, int dat, unsigned int ctrl); |
655 | void (*write_buf)(struct mtd_info *mtd, const uint8_t *buf, int len); | 655 | void (*write_buf)(struct mtd_info *mtd, const uint8_t *buf, int len); |
656 | void (*read_buf)(struct mtd_info *mtd, uint8_t *buf, int len); | 656 | void (*read_buf)(struct mtd_info *mtd, uint8_t *buf, int len); |
657 | unsigned char (*read_byte)(struct mtd_info *mtd); | ||
657 | void *priv; | 658 | void *priv; |
658 | }; | 659 | }; |
659 | 660 | ||
diff --git a/include/linux/mv643xx_eth.h b/include/linux/mv643xx_eth.h index 30b0c4e78f91..51bf8ada6dc0 100644 --- a/include/linux/mv643xx_eth.h +++ b/include/linux/mv643xx_eth.h | |||
@@ -18,7 +18,6 @@ | |||
18 | struct mv643xx_eth_shared_platform_data { | 18 | struct mv643xx_eth_shared_platform_data { |
19 | struct mbus_dram_target_info *dram; | 19 | struct mbus_dram_target_info *dram; |
20 | struct platform_device *shared_smi; | 20 | struct platform_device *shared_smi; |
21 | unsigned int t_clk; | ||
22 | /* | 21 | /* |
23 | * Max packet size for Tx IP/Layer 4 checksum, when set to 0, default | 22 | * Max packet size for Tx IP/Layer 4 checksum, when set to 0, default |
24 | * limit of 9KiB will be used. | 23 | * limit of 9KiB will be used. |
diff --git a/include/linux/net.h b/include/linux/net.h index 2d7510f38934..e9ac2df079ba 100644 --- a/include/linux/net.h +++ b/include/linux/net.h | |||
@@ -313,5 +313,8 @@ extern int kernel_sock_shutdown(struct socket *sock, | |||
313 | MODULE_ALIAS("net-pf-" __stringify(pf) "-proto-" __stringify(proto) \ | 313 | MODULE_ALIAS("net-pf-" __stringify(pf) "-proto-" __stringify(proto) \ |
314 | "-type-" __stringify(type)) | 314 | "-type-" __stringify(type)) |
315 | 315 | ||
316 | #define MODULE_ALIAS_NET_PF_PROTO_NAME(pf, proto, name) \ | ||
317 | MODULE_ALIAS("net-pf-" __stringify(pf) "-proto-" __stringify(proto) \ | ||
318 | name) | ||
316 | #endif /* __KERNEL__ */ | 319 | #endif /* __KERNEL__ */ |
317 | #endif /* _LINUX_NET_H */ | 320 | #endif /* _LINUX_NET_H */ |
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index e7fd468f7126..d94cb1431519 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
@@ -2795,15 +2795,15 @@ do { \ | |||
2795 | #define netif_info(priv, type, dev, fmt, args...) \ | 2795 | #define netif_info(priv, type, dev, fmt, args...) \ |
2796 | netif_level(info, priv, type, dev, fmt, ##args) | 2796 | netif_level(info, priv, type, dev, fmt, ##args) |
2797 | 2797 | ||
2798 | #if defined(DEBUG) | 2798 | #if defined(CONFIG_DYNAMIC_DEBUG) |
2799 | #define netif_dbg(priv, type, dev, format, args...) \ | ||
2800 | netif_printk(priv, type, KERN_DEBUG, dev, format, ##args) | ||
2801 | #elif defined(CONFIG_DYNAMIC_DEBUG) | ||
2802 | #define netif_dbg(priv, type, netdev, format, args...) \ | 2799 | #define netif_dbg(priv, type, netdev, format, args...) \ |
2803 | do { \ | 2800 | do { \ |
2804 | if (netif_msg_##type(priv)) \ | 2801 | if (netif_msg_##type(priv)) \ |
2805 | dynamic_netdev_dbg(netdev, format, ##args); \ | 2802 | dynamic_netdev_dbg(netdev, format, ##args); \ |
2806 | } while (0) | 2803 | } while (0) |
2804 | #elif defined(DEBUG) | ||
2805 | #define netif_dbg(priv, type, dev, format, args...) \ | ||
2806 | netif_printk(priv, type, KERN_DEBUG, dev, format, ##args) | ||
2807 | #else | 2807 | #else |
2808 | #define netif_dbg(priv, type, dev, format, args...) \ | 2808 | #define netif_dbg(priv, type, dev, format, args...) \ |
2809 | ({ \ | 2809 | ({ \ |
diff --git a/include/linux/nfc/pn544.h b/include/linux/nfc/pn544.h index 7ab8521f2347..9890bbaf4328 100644 --- a/include/linux/nfc/pn544.h +++ b/include/linux/nfc/pn544.h | |||
@@ -84,6 +84,12 @@ struct pn544_fw_packet { | |||
84 | }; | 84 | }; |
85 | 85 | ||
86 | #ifdef __KERNEL__ | 86 | #ifdef __KERNEL__ |
87 | enum { | ||
88 | NFC_GPIO_ENABLE, | ||
89 | NFC_GPIO_FW_RESET, | ||
90 | NFC_GPIO_IRQ | ||
91 | }; | ||
92 | |||
87 | /* board config */ | 93 | /* board config */ |
88 | struct pn544_nfc_platform_data { | 94 | struct pn544_nfc_platform_data { |
89 | int (*request_resources) (struct i2c_client *client); | 95 | int (*request_resources) (struct i2c_client *client); |
@@ -91,6 +97,7 @@ struct pn544_nfc_platform_data { | |||
91 | void (*enable) (int fw); | 97 | void (*enable) (int fw); |
92 | int (*test) (void); | 98 | int (*test) (void); |
93 | void (*disable) (void); | 99 | void (*disable) (void); |
100 | int (*get_gpio)(int type); | ||
94 | }; | 101 | }; |
95 | #endif /* __KERNEL__ */ | 102 | #endif /* __KERNEL__ */ |
96 | 103 | ||
diff --git a/include/linux/nfs4.h b/include/linux/nfs4.h index 0987146b0637..af2d2fa30eee 100644 --- a/include/linux/nfs4.h +++ b/include/linux/nfs4.h | |||
@@ -69,6 +69,10 @@ | |||
69 | #define NFS4_CDFC4_FORE_OR_BOTH 0x3 | 69 | #define NFS4_CDFC4_FORE_OR_BOTH 0x3 |
70 | #define NFS4_CDFC4_BACK_OR_BOTH 0x7 | 70 | #define NFS4_CDFC4_BACK_OR_BOTH 0x7 |
71 | 71 | ||
72 | #define NFS4_CDFS4_FORE 0x1 | ||
73 | #define NFS4_CDFS4_BACK 0x2 | ||
74 | #define NFS4_CDFS4_BOTH 0x3 | ||
75 | |||
72 | #define NFS4_SET_TO_SERVER_TIME 0 | 76 | #define NFS4_SET_TO_SERVER_TIME 0 |
73 | #define NFS4_SET_TO_CLIENT_TIME 1 | 77 | #define NFS4_SET_TO_CLIENT_TIME 1 |
74 | 78 | ||
@@ -526,6 +530,13 @@ enum lock_type4 { | |||
526 | #define FATTR4_WORD1_MOUNTED_ON_FILEID (1UL << 23) | 530 | #define FATTR4_WORD1_MOUNTED_ON_FILEID (1UL << 23) |
527 | #define FATTR4_WORD1_FS_LAYOUT_TYPES (1UL << 30) | 531 | #define FATTR4_WORD1_FS_LAYOUT_TYPES (1UL << 30) |
528 | #define FATTR4_WORD2_LAYOUT_BLKSIZE (1UL << 1) | 532 | #define FATTR4_WORD2_LAYOUT_BLKSIZE (1UL << 1) |
533 | #define FATTR4_WORD2_MDSTHRESHOLD (1UL << 4) | ||
534 | |||
535 | /* MDS threshold bitmap bits */ | ||
536 | #define THRESHOLD_RD (1UL << 0) | ||
537 | #define THRESHOLD_WR (1UL << 1) | ||
538 | #define THRESHOLD_RD_IO (1UL << 2) | ||
539 | #define THRESHOLD_WR_IO (1UL << 3) | ||
529 | 540 | ||
530 | #define NFSPROC4_NULL 0 | 541 | #define NFSPROC4_NULL 0 |
531 | #define NFSPROC4_COMPOUND 1 | 542 | #define NFSPROC4_COMPOUND 1 |
@@ -596,6 +607,8 @@ enum { | |||
596 | NFSPROC4_CLNT_TEST_STATEID, | 607 | NFSPROC4_CLNT_TEST_STATEID, |
597 | NFSPROC4_CLNT_FREE_STATEID, | 608 | NFSPROC4_CLNT_FREE_STATEID, |
598 | NFSPROC4_CLNT_GETDEVICELIST, | 609 | NFSPROC4_CLNT_GETDEVICELIST, |
610 | NFSPROC4_CLNT_BIND_CONN_TO_SESSION, | ||
611 | NFSPROC4_CLNT_DESTROY_CLIENTID, | ||
599 | }; | 612 | }; |
600 | 613 | ||
601 | /* nfs41 types */ | 614 | /* nfs41 types */ |
diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h index 52a1bdb4ee2b..b23cfc120edb 100644 --- a/include/linux/nfs_fs.h +++ b/include/linux/nfs_fs.h | |||
@@ -102,6 +102,7 @@ struct nfs_open_context { | |||
102 | int error; | 102 | int error; |
103 | 103 | ||
104 | struct list_head list; | 104 | struct list_head list; |
105 | struct nfs4_threshold *mdsthreshold; | ||
105 | }; | 106 | }; |
106 | 107 | ||
107 | struct nfs_open_dir_context { | 108 | struct nfs_open_dir_context { |
@@ -179,8 +180,7 @@ struct nfs_inode { | |||
179 | __be32 cookieverf[2]; | 180 | __be32 cookieverf[2]; |
180 | 181 | ||
181 | unsigned long npages; | 182 | unsigned long npages; |
182 | unsigned long ncommit; | 183 | struct nfs_mds_commit_info commit_info; |
183 | struct list_head commit_list; | ||
184 | 184 | ||
185 | /* Open contexts for shared mmap writes */ | 185 | /* Open contexts for shared mmap writes */ |
186 | struct list_head open_files; | 186 | struct list_head open_files; |
@@ -201,8 +201,10 @@ struct nfs_inode { | |||
201 | 201 | ||
202 | /* pNFS layout information */ | 202 | /* pNFS layout information */ |
203 | struct pnfs_layout_hdr *layout; | 203 | struct pnfs_layout_hdr *layout; |
204 | atomic_t commits_outstanding; | ||
205 | #endif /* CONFIG_NFS_V4*/ | 204 | #endif /* CONFIG_NFS_V4*/ |
205 | /* how many bytes have been written/read and how many bytes queued up */ | ||
206 | __u64 write_io; | ||
207 | __u64 read_io; | ||
206 | #ifdef CONFIG_NFS_FSCACHE | 208 | #ifdef CONFIG_NFS_FSCACHE |
207 | struct fscache_cookie *fscache; | 209 | struct fscache_cookie *fscache; |
208 | #endif | 210 | #endif |
@@ -230,7 +232,6 @@ struct nfs_inode { | |||
230 | #define NFS_INO_FSCACHE (5) /* inode can be cached by FS-Cache */ | 232 | #define NFS_INO_FSCACHE (5) /* inode can be cached by FS-Cache */ |
231 | #define NFS_INO_FSCACHE_LOCK (6) /* FS-Cache cookie management lock */ | 233 | #define NFS_INO_FSCACHE_LOCK (6) /* FS-Cache cookie management lock */ |
232 | #define NFS_INO_COMMIT (7) /* inode is committing unstable writes */ | 234 | #define NFS_INO_COMMIT (7) /* inode is committing unstable writes */ |
233 | #define NFS_INO_PNFS_COMMIT (8) /* use pnfs code for commit */ | ||
234 | #define NFS_INO_LAYOUTCOMMIT (9) /* layoutcommit required */ | 235 | #define NFS_INO_LAYOUTCOMMIT (9) /* layoutcommit required */ |
235 | #define NFS_INO_LAYOUTCOMMITTING (10) /* layoutcommit inflight */ | 236 | #define NFS_INO_LAYOUTCOMMITTING (10) /* layoutcommit inflight */ |
236 | 237 | ||
@@ -317,11 +318,6 @@ static inline int nfs_server_capable(struct inode *inode, int cap) | |||
317 | return NFS_SERVER(inode)->caps & cap; | 318 | return NFS_SERVER(inode)->caps & cap; |
318 | } | 319 | } |
319 | 320 | ||
320 | static inline int NFS_USE_READDIRPLUS(struct inode *inode) | ||
321 | { | ||
322 | return test_bit(NFS_INO_ADVISE_RDPLUS, &NFS_I(inode)->flags); | ||
323 | } | ||
324 | |||
325 | static inline void nfs_set_verifier(struct dentry * dentry, unsigned long verf) | 321 | static inline void nfs_set_verifier(struct dentry * dentry, unsigned long verf) |
326 | { | 322 | { |
327 | dentry->d_time = verf; | 323 | dentry->d_time = verf; |
@@ -552,8 +548,8 @@ extern int nfs_wb_page(struct inode *inode, struct page* page); | |||
552 | extern int nfs_wb_page_cancel(struct inode *inode, struct page* page); | 548 | extern int nfs_wb_page_cancel(struct inode *inode, struct page* page); |
553 | #if defined(CONFIG_NFS_V3) || defined(CONFIG_NFS_V4) | 549 | #if defined(CONFIG_NFS_V3) || defined(CONFIG_NFS_V4) |
554 | extern int nfs_commit_inode(struct inode *, int); | 550 | extern int nfs_commit_inode(struct inode *, int); |
555 | extern struct nfs_write_data *nfs_commitdata_alloc(void); | 551 | extern struct nfs_commit_data *nfs_commitdata_alloc(void); |
556 | extern void nfs_commit_free(struct nfs_write_data *wdata); | 552 | extern void nfs_commit_free(struct nfs_commit_data *data); |
557 | #else | 553 | #else |
558 | static inline int | 554 | static inline int |
559 | nfs_commit_inode(struct inode *inode, int how) | 555 | nfs_commit_inode(struct inode *inode, int how) |
@@ -569,12 +565,6 @@ nfs_have_writebacks(struct inode *inode) | |||
569 | } | 565 | } |
570 | 566 | ||
571 | /* | 567 | /* |
572 | * Allocate nfs_write_data structures | ||
573 | */ | ||
574 | extern struct nfs_write_data *nfs_writedata_alloc(unsigned int npages); | ||
575 | extern void nfs_writedata_free(struct nfs_write_data *); | ||
576 | |||
577 | /* | ||
578 | * linux/fs/nfs/read.c | 568 | * linux/fs/nfs/read.c |
579 | */ | 569 | */ |
580 | extern int nfs_readpage(struct file *, struct page *); | 570 | extern int nfs_readpage(struct file *, struct page *); |
@@ -585,12 +575,6 @@ extern int nfs_readpage_async(struct nfs_open_context *, struct inode *, | |||
585 | struct page *); | 575 | struct page *); |
586 | 576 | ||
587 | /* | 577 | /* |
588 | * Allocate nfs_read_data structures | ||
589 | */ | ||
590 | extern struct nfs_read_data *nfs_readdata_alloc(unsigned int npages); | ||
591 | extern void nfs_readdata_free(struct nfs_read_data *); | ||
592 | |||
593 | /* | ||
594 | * linux/fs/nfs3proc.c | 578 | * linux/fs/nfs3proc.c |
595 | */ | 579 | */ |
596 | #ifdef CONFIG_NFS_V3_ACL | 580 | #ifdef CONFIG_NFS_V3_ACL |
@@ -654,6 +638,7 @@ nfs_fileid_to_ino_t(u64 fileid) | |||
654 | #define NFSDBG_FSCACHE 0x0800 | 638 | #define NFSDBG_FSCACHE 0x0800 |
655 | #define NFSDBG_PNFS 0x1000 | 639 | #define NFSDBG_PNFS 0x1000 |
656 | #define NFSDBG_PNFS_LD 0x2000 | 640 | #define NFSDBG_PNFS_LD 0x2000 |
641 | #define NFSDBG_STATE 0x4000 | ||
657 | #define NFSDBG_ALL 0xFFFF | 642 | #define NFSDBG_ALL 0xFFFF |
658 | 643 | ||
659 | #ifdef __KERNEL__ | 644 | #ifdef __KERNEL__ |
diff --git a/include/linux/nfs_fs_sb.h b/include/linux/nfs_fs_sb.h index 7073fc74481c..fbb78fb09bd2 100644 --- a/include/linux/nfs_fs_sb.h +++ b/include/linux/nfs_fs_sb.h | |||
@@ -17,7 +17,7 @@ struct nfs4_sequence_args; | |||
17 | struct nfs4_sequence_res; | 17 | struct nfs4_sequence_res; |
18 | struct nfs_server; | 18 | struct nfs_server; |
19 | struct nfs4_minor_version_ops; | 19 | struct nfs4_minor_version_ops; |
20 | struct server_scope; | 20 | struct nfs41_server_scope; |
21 | struct nfs41_impl_id; | 21 | struct nfs41_impl_id; |
22 | 22 | ||
23 | /* | 23 | /* |
@@ -35,6 +35,9 @@ struct nfs_client { | |||
35 | #define NFS_CS_RENEWD 3 /* - renewd started */ | 35 | #define NFS_CS_RENEWD 3 /* - renewd started */ |
36 | #define NFS_CS_STOP_RENEW 4 /* no more state to renew */ | 36 | #define NFS_CS_STOP_RENEW 4 /* no more state to renew */ |
37 | #define NFS_CS_CHECK_LEASE_TIME 5 /* need to check lease time */ | 37 | #define NFS_CS_CHECK_LEASE_TIME 5 /* need to check lease time */ |
38 | unsigned long cl_flags; /* behavior switches */ | ||
39 | #define NFS_CS_NORESVPORT 0 /* - use ephemeral src port */ | ||
40 | #define NFS_CS_DISCRTRY 1 /* - disconnect on RPC retry */ | ||
38 | struct sockaddr_storage cl_addr; /* server identifier */ | 41 | struct sockaddr_storage cl_addr; /* server identifier */ |
39 | size_t cl_addrlen; | 42 | size_t cl_addrlen; |
40 | char * cl_hostname; /* hostname of server */ | 43 | char * cl_hostname; /* hostname of server */ |
@@ -61,9 +64,6 @@ struct nfs_client { | |||
61 | 64 | ||
62 | struct rpc_wait_queue cl_rpcwaitq; | 65 | struct rpc_wait_queue cl_rpcwaitq; |
63 | 66 | ||
64 | /* used for the setclientid verifier */ | ||
65 | struct timespec cl_boot_time; | ||
66 | |||
67 | /* idmapper */ | 67 | /* idmapper */ |
68 | struct idmap * cl_idmap; | 68 | struct idmap * cl_idmap; |
69 | 69 | ||
@@ -79,16 +79,17 @@ struct nfs_client { | |||
79 | u32 cl_seqid; | 79 | u32 cl_seqid; |
80 | /* The flags used for obtaining the clientid during EXCHANGE_ID */ | 80 | /* The flags used for obtaining the clientid during EXCHANGE_ID */ |
81 | u32 cl_exchange_flags; | 81 | u32 cl_exchange_flags; |
82 | struct nfs4_session *cl_session; /* sharred session */ | 82 | struct nfs4_session *cl_session; /* shared session */ |
83 | struct nfs41_server_owner *cl_serverowner; | ||
84 | struct nfs41_server_scope *cl_serverscope; | ||
85 | struct nfs41_impl_id *cl_implid; | ||
83 | #endif /* CONFIG_NFS_V4 */ | 86 | #endif /* CONFIG_NFS_V4 */ |
84 | 87 | ||
85 | #ifdef CONFIG_NFS_FSCACHE | 88 | #ifdef CONFIG_NFS_FSCACHE |
86 | struct fscache_cookie *fscache; /* client index cache cookie */ | 89 | struct fscache_cookie *fscache; /* client index cache cookie */ |
87 | #endif | 90 | #endif |
88 | 91 | ||
89 | struct server_scope *server_scope; /* from exchange_id */ | 92 | struct net *cl_net; |
90 | struct nfs41_impl_id *impl_id; /* from exchange_id */ | ||
91 | struct net *net; | ||
92 | }; | 93 | }; |
93 | 94 | ||
94 | /* | 95 | /* |
diff --git a/include/linux/nfs_page.h b/include/linux/nfs_page.h index eac30d6bec17..88d166b555e8 100644 --- a/include/linux/nfs_page.h +++ b/include/linux/nfs_page.h | |||
@@ -27,7 +27,6 @@ enum { | |||
27 | PG_CLEAN, | 27 | PG_CLEAN, |
28 | PG_NEED_COMMIT, | 28 | PG_NEED_COMMIT, |
29 | PG_NEED_RESCHED, | 29 | PG_NEED_RESCHED, |
30 | PG_PARTIAL_READ_FAILED, | ||
31 | PG_COMMIT_TO_DS, | 30 | PG_COMMIT_TO_DS, |
32 | }; | 31 | }; |
33 | 32 | ||
@@ -37,7 +36,6 @@ struct nfs_page { | |||
37 | struct page *wb_page; /* page to read in/write out */ | 36 | struct page *wb_page; /* page to read in/write out */ |
38 | struct nfs_open_context *wb_context; /* File state context info */ | 37 | struct nfs_open_context *wb_context; /* File state context info */ |
39 | struct nfs_lock_context *wb_lock_context; /* lock context info */ | 38 | struct nfs_lock_context *wb_lock_context; /* lock context info */ |
40 | atomic_t wb_complete; /* i/os we're waiting for */ | ||
41 | pgoff_t wb_index; /* Offset >> PAGE_CACHE_SHIFT */ | 39 | pgoff_t wb_index; /* Offset >> PAGE_CACHE_SHIFT */ |
42 | unsigned int wb_offset, /* Offset & ~PAGE_CACHE_MASK */ | 40 | unsigned int wb_offset, /* Offset & ~PAGE_CACHE_MASK */ |
43 | wb_pgbase, /* Start of page data */ | 41 | wb_pgbase, /* Start of page data */ |
@@ -68,7 +66,9 @@ struct nfs_pageio_descriptor { | |||
68 | int pg_ioflags; | 66 | int pg_ioflags; |
69 | int pg_error; | 67 | int pg_error; |
70 | const struct rpc_call_ops *pg_rpc_callops; | 68 | const struct rpc_call_ops *pg_rpc_callops; |
69 | const struct nfs_pgio_completion_ops *pg_completion_ops; | ||
71 | struct pnfs_layout_segment *pg_lseg; | 70 | struct pnfs_layout_segment *pg_lseg; |
71 | struct nfs_direct_req *pg_dreq; | ||
72 | }; | 72 | }; |
73 | 73 | ||
74 | #define NFS_WBACK_BUSY(req) (test_bit(PG_BUSY,&(req)->wb_flags)) | 74 | #define NFS_WBACK_BUSY(req) (test_bit(PG_BUSY,&(req)->wb_flags)) |
@@ -84,6 +84,7 @@ extern void nfs_release_request(struct nfs_page *req); | |||
84 | extern void nfs_pageio_init(struct nfs_pageio_descriptor *desc, | 84 | extern void nfs_pageio_init(struct nfs_pageio_descriptor *desc, |
85 | struct inode *inode, | 85 | struct inode *inode, |
86 | const struct nfs_pageio_ops *pg_ops, | 86 | const struct nfs_pageio_ops *pg_ops, |
87 | const struct nfs_pgio_completion_ops *compl_ops, | ||
87 | size_t bsize, | 88 | size_t bsize, |
88 | int how); | 89 | int how); |
89 | extern int nfs_pageio_add_request(struct nfs_pageio_descriptor *, | 90 | extern int nfs_pageio_add_request(struct nfs_pageio_descriptor *, |
@@ -95,26 +96,17 @@ extern bool nfs_generic_pg_test(struct nfs_pageio_descriptor *desc, | |||
95 | struct nfs_page *req); | 96 | struct nfs_page *req); |
96 | extern int nfs_wait_on_request(struct nfs_page *); | 97 | extern int nfs_wait_on_request(struct nfs_page *); |
97 | extern void nfs_unlock_request(struct nfs_page *req); | 98 | extern void nfs_unlock_request(struct nfs_page *req); |
99 | extern void nfs_unlock_and_release_request(struct nfs_page *req); | ||
98 | 100 | ||
99 | /* | 101 | /* |
100 | * Lock the page of an asynchronous request without getting a new reference | 102 | * Lock the page of an asynchronous request |
101 | */ | 103 | */ |
102 | static inline int | 104 | static inline int |
103 | nfs_lock_request_dontget(struct nfs_page *req) | ||
104 | { | ||
105 | return !test_and_set_bit(PG_BUSY, &req->wb_flags); | ||
106 | } | ||
107 | |||
108 | static inline int | ||
109 | nfs_lock_request(struct nfs_page *req) | 105 | nfs_lock_request(struct nfs_page *req) |
110 | { | 106 | { |
111 | if (test_and_set_bit(PG_BUSY, &req->wb_flags)) | 107 | return !test_and_set_bit(PG_BUSY, &req->wb_flags); |
112 | return 0; | ||
113 | kref_get(&req->wb_kref); | ||
114 | return 1; | ||
115 | } | 108 | } |
116 | 109 | ||
117 | |||
118 | /** | 110 | /** |
119 | * nfs_list_add_request - Insert a request into a list | 111 | * nfs_list_add_request - Insert a request into a list |
120 | * @req: request | 112 | * @req: request |
diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h index 7ba3551a0414..d1a7bf51c326 100644 --- a/include/linux/nfs_xdr.h +++ b/include/linux/nfs_xdr.h | |||
@@ -35,6 +35,15 @@ static inline int nfs_fsid_equal(const struct nfs_fsid *a, const struct nfs_fsid | |||
35 | return a->major == b->major && a->minor == b->minor; | 35 | return a->major == b->major && a->minor == b->minor; |
36 | } | 36 | } |
37 | 37 | ||
38 | struct nfs4_threshold { | ||
39 | __u32 bm; | ||
40 | __u32 l_type; | ||
41 | __u64 rd_sz; | ||
42 | __u64 wr_sz; | ||
43 | __u64 rd_io_sz; | ||
44 | __u64 wr_io_sz; | ||
45 | }; | ||
46 | |||
38 | struct nfs_fattr { | 47 | struct nfs_fattr { |
39 | unsigned int valid; /* which fields are valid */ | 48 | unsigned int valid; /* which fields are valid */ |
40 | umode_t mode; | 49 | umode_t mode; |
@@ -67,6 +76,7 @@ struct nfs_fattr { | |||
67 | unsigned long gencount; | 76 | unsigned long gencount; |
68 | struct nfs4_string *owner_name; | 77 | struct nfs4_string *owner_name; |
69 | struct nfs4_string *group_name; | 78 | struct nfs4_string *group_name; |
79 | struct nfs4_threshold *mdsthreshold; /* pNFS threshold hints */ | ||
70 | }; | 80 | }; |
71 | 81 | ||
72 | #define NFS_ATTR_FATTR_TYPE (1U << 0) | 82 | #define NFS_ATTR_FATTR_TYPE (1U << 0) |
@@ -106,14 +116,14 @@ struct nfs_fattr { | |||
106 | | NFS_ATTR_FATTR_FILEID \ | 116 | | NFS_ATTR_FATTR_FILEID \ |
107 | | NFS_ATTR_FATTR_ATIME \ | 117 | | NFS_ATTR_FATTR_ATIME \ |
108 | | NFS_ATTR_FATTR_MTIME \ | 118 | | NFS_ATTR_FATTR_MTIME \ |
109 | | NFS_ATTR_FATTR_CTIME) | 119 | | NFS_ATTR_FATTR_CTIME \ |
120 | | NFS_ATTR_FATTR_CHANGE) | ||
110 | #define NFS_ATTR_FATTR_V2 (NFS_ATTR_FATTR \ | 121 | #define NFS_ATTR_FATTR_V2 (NFS_ATTR_FATTR \ |
111 | | NFS_ATTR_FATTR_BLOCKS_USED) | 122 | | NFS_ATTR_FATTR_BLOCKS_USED) |
112 | #define NFS_ATTR_FATTR_V3 (NFS_ATTR_FATTR \ | 123 | #define NFS_ATTR_FATTR_V3 (NFS_ATTR_FATTR \ |
113 | | NFS_ATTR_FATTR_SPACE_USED) | 124 | | NFS_ATTR_FATTR_SPACE_USED) |
114 | #define NFS_ATTR_FATTR_V4 (NFS_ATTR_FATTR \ | 125 | #define NFS_ATTR_FATTR_V4 (NFS_ATTR_FATTR \ |
115 | | NFS_ATTR_FATTR_SPACE_USED \ | 126 | | NFS_ATTR_FATTR_SPACE_USED) |
116 | | NFS_ATTR_FATTR_CHANGE) | ||
117 | 127 | ||
118 | /* | 128 | /* |
119 | * Info on the file system | 129 | * Info on the file system |
@@ -338,7 +348,6 @@ struct nfs_openargs { | |||
338 | const struct qstr * name; | 348 | const struct qstr * name; |
339 | const struct nfs_server *server; /* Needed for ID mapping */ | 349 | const struct nfs_server *server; /* Needed for ID mapping */ |
340 | const u32 * bitmask; | 350 | const u32 * bitmask; |
341 | const u32 * dir_bitmask; | ||
342 | __u32 claim; | 351 | __u32 claim; |
343 | struct nfs4_sequence_args seq_args; | 352 | struct nfs4_sequence_args seq_args; |
344 | }; | 353 | }; |
@@ -349,7 +358,6 @@ struct nfs_openres { | |||
349 | struct nfs4_change_info cinfo; | 358 | struct nfs4_change_info cinfo; |
350 | __u32 rflags; | 359 | __u32 rflags; |
351 | struct nfs_fattr * f_attr; | 360 | struct nfs_fattr * f_attr; |
352 | struct nfs_fattr * dir_attr; | ||
353 | struct nfs_seqid * seqid; | 361 | struct nfs_seqid * seqid; |
354 | const struct nfs_server *server; | 362 | const struct nfs_server *server; |
355 | fmode_t delegation_type; | 363 | fmode_t delegation_type; |
@@ -519,12 +527,29 @@ struct nfs_writeres { | |||
519 | }; | 527 | }; |
520 | 528 | ||
521 | /* | 529 | /* |
530 | * Arguments to the commit call. | ||
531 | */ | ||
532 | struct nfs_commitargs { | ||
533 | struct nfs_fh *fh; | ||
534 | __u64 offset; | ||
535 | __u32 count; | ||
536 | const u32 *bitmask; | ||
537 | struct nfs4_sequence_args seq_args; | ||
538 | }; | ||
539 | |||
540 | struct nfs_commitres { | ||
541 | struct nfs_fattr *fattr; | ||
542 | struct nfs_writeverf *verf; | ||
543 | const struct nfs_server *server; | ||
544 | struct nfs4_sequence_res seq_res; | ||
545 | }; | ||
546 | |||
547 | /* | ||
522 | * Common arguments to the unlink call | 548 | * Common arguments to the unlink call |
523 | */ | 549 | */ |
524 | struct nfs_removeargs { | 550 | struct nfs_removeargs { |
525 | const struct nfs_fh *fh; | 551 | const struct nfs_fh *fh; |
526 | struct qstr name; | 552 | struct qstr name; |
527 | const u32 * bitmask; | ||
528 | struct nfs4_sequence_args seq_args; | 553 | struct nfs4_sequence_args seq_args; |
529 | }; | 554 | }; |
530 | 555 | ||
@@ -543,7 +568,6 @@ struct nfs_renameargs { | |||
543 | const struct nfs_fh *new_dir; | 568 | const struct nfs_fh *new_dir; |
544 | const struct qstr *old_name; | 569 | const struct qstr *old_name; |
545 | const struct qstr *new_name; | 570 | const struct qstr *new_name; |
546 | const u32 *bitmask; | ||
547 | struct nfs4_sequence_args seq_args; | 571 | struct nfs4_sequence_args seq_args; |
548 | }; | 572 | }; |
549 | 573 | ||
@@ -839,7 +863,6 @@ struct nfs4_create_res { | |||
839 | struct nfs_fh * fh; | 863 | struct nfs_fh * fh; |
840 | struct nfs_fattr * fattr; | 864 | struct nfs_fattr * fattr; |
841 | struct nfs4_change_info dir_cinfo; | 865 | struct nfs4_change_info dir_cinfo; |
842 | struct nfs_fattr * dir_fattr; | ||
843 | struct nfs4_sequence_res seq_res; | 866 | struct nfs4_sequence_res seq_res; |
844 | }; | 867 | }; |
845 | 868 | ||
@@ -1061,6 +1084,21 @@ struct nfstime4 { | |||
1061 | }; | 1084 | }; |
1062 | 1085 | ||
1063 | #ifdef CONFIG_NFS_V4_1 | 1086 | #ifdef CONFIG_NFS_V4_1 |
1087 | |||
1088 | struct pnfs_commit_bucket { | ||
1089 | struct list_head written; | ||
1090 | struct list_head committing; | ||
1091 | struct pnfs_layout_segment *wlseg; | ||
1092 | struct pnfs_layout_segment *clseg; | ||
1093 | }; | ||
1094 | |||
1095 | struct pnfs_ds_commit_info { | ||
1096 | int nwritten; | ||
1097 | int ncommitting; | ||
1098 | int nbuckets; | ||
1099 | struct pnfs_commit_bucket *buckets; | ||
1100 | }; | ||
1101 | |||
1064 | #define NFS4_EXCHANGE_ID_LEN (48) | 1102 | #define NFS4_EXCHANGE_ID_LEN (48) |
1065 | struct nfs41_exchange_id_args { | 1103 | struct nfs41_exchange_id_args { |
1066 | struct nfs_client *client; | 1104 | struct nfs_client *client; |
@@ -1070,13 +1108,13 @@ struct nfs41_exchange_id_args { | |||
1070 | u32 flags; | 1108 | u32 flags; |
1071 | }; | 1109 | }; |
1072 | 1110 | ||
1073 | struct server_owner { | 1111 | struct nfs41_server_owner { |
1074 | uint64_t minor_id; | 1112 | uint64_t minor_id; |
1075 | uint32_t major_id_sz; | 1113 | uint32_t major_id_sz; |
1076 | char major_id[NFS4_OPAQUE_LIMIT]; | 1114 | char major_id[NFS4_OPAQUE_LIMIT]; |
1077 | }; | 1115 | }; |
1078 | 1116 | ||
1079 | struct server_scope { | 1117 | struct nfs41_server_scope { |
1080 | uint32_t server_scope_sz; | 1118 | uint32_t server_scope_sz; |
1081 | char server_scope[NFS4_OPAQUE_LIMIT]; | 1119 | char server_scope[NFS4_OPAQUE_LIMIT]; |
1082 | }; | 1120 | }; |
@@ -1087,10 +1125,18 @@ struct nfs41_impl_id { | |||
1087 | struct nfstime4 date; | 1125 | struct nfstime4 date; |
1088 | }; | 1126 | }; |
1089 | 1127 | ||
1128 | struct nfs41_bind_conn_to_session_res { | ||
1129 | struct nfs4_session *session; | ||
1130 | u32 dir; | ||
1131 | bool use_conn_in_rdma_mode; | ||
1132 | }; | ||
1133 | |||
1090 | struct nfs41_exchange_id_res { | 1134 | struct nfs41_exchange_id_res { |
1091 | struct nfs_client *client; | 1135 | u64 clientid; |
1136 | u32 seqid; | ||
1092 | u32 flags; | 1137 | u32 flags; |
1093 | struct server_scope *server_scope; | 1138 | struct nfs41_server_owner *server_owner; |
1139 | struct nfs41_server_scope *server_scope; | ||
1094 | struct nfs41_impl_id *impl_id; | 1140 | struct nfs41_impl_id *impl_id; |
1095 | }; | 1141 | }; |
1096 | 1142 | ||
@@ -1143,35 +1189,114 @@ struct nfs41_free_stateid_res { | |||
1143 | struct nfs4_sequence_res seq_res; | 1189 | struct nfs4_sequence_res seq_res; |
1144 | }; | 1190 | }; |
1145 | 1191 | ||
1192 | #else | ||
1193 | |||
1194 | struct pnfs_ds_commit_info { | ||
1195 | }; | ||
1196 | |||
1146 | #endif /* CONFIG_NFS_V4_1 */ | 1197 | #endif /* CONFIG_NFS_V4_1 */ |
1147 | 1198 | ||
1148 | struct nfs_page; | 1199 | struct nfs_page; |
1149 | 1200 | ||
1150 | #define NFS_PAGEVEC_SIZE (8U) | 1201 | #define NFS_PAGEVEC_SIZE (8U) |
1151 | 1202 | ||
1203 | struct nfs_page_array { | ||
1204 | struct page **pagevec; | ||
1205 | unsigned int npages; /* Max length of pagevec */ | ||
1206 | struct page *page_array[NFS_PAGEVEC_SIZE]; | ||
1207 | }; | ||
1208 | |||
1152 | struct nfs_read_data { | 1209 | struct nfs_read_data { |
1210 | struct nfs_pgio_header *header; | ||
1211 | struct list_head list; | ||
1153 | struct rpc_task task; | 1212 | struct rpc_task task; |
1154 | struct inode *inode; | ||
1155 | struct rpc_cred *cred; | ||
1156 | struct nfs_fattr fattr; /* fattr storage */ | 1213 | struct nfs_fattr fattr; /* fattr storage */ |
1157 | struct list_head pages; /* Coalesced read requests */ | ||
1158 | struct list_head list; /* lists of struct nfs_read_data */ | ||
1159 | struct nfs_page *req; /* multi ops per nfs_page */ | ||
1160 | struct page **pagevec; | ||
1161 | unsigned int npages; /* Max length of pagevec */ | ||
1162 | struct nfs_readargs args; | 1214 | struct nfs_readargs args; |
1163 | struct nfs_readres res; | 1215 | struct nfs_readres res; |
1164 | unsigned long timestamp; /* For lease renewal */ | 1216 | unsigned long timestamp; /* For lease renewal */ |
1165 | struct pnfs_layout_segment *lseg; | ||
1166 | struct nfs_client *ds_clp; /* pNFS data server */ | ||
1167 | const struct rpc_call_ops *mds_ops; | ||
1168 | int (*read_done_cb) (struct rpc_task *task, struct nfs_read_data *data); | 1217 | int (*read_done_cb) (struct rpc_task *task, struct nfs_read_data *data); |
1169 | __u64 mds_offset; | 1218 | __u64 mds_offset; |
1219 | struct nfs_page_array pages; | ||
1220 | struct nfs_client *ds_clp; /* pNFS data server */ | ||
1221 | }; | ||
1222 | |||
1223 | /* used as flag bits in nfs_pgio_header */ | ||
1224 | enum { | ||
1225 | NFS_IOHDR_ERROR = 0, | ||
1226 | NFS_IOHDR_EOF, | ||
1227 | NFS_IOHDR_REDO, | ||
1228 | NFS_IOHDR_NEED_COMMIT, | ||
1229 | NFS_IOHDR_NEED_RESCHED, | ||
1230 | }; | ||
1231 | |||
1232 | struct nfs_pgio_header { | ||
1233 | struct inode *inode; | ||
1234 | struct rpc_cred *cred; | ||
1235 | struct list_head pages; | ||
1236 | struct list_head rpc_list; | ||
1237 | atomic_t refcnt; | ||
1238 | struct nfs_page *req; | ||
1239 | struct pnfs_layout_segment *lseg; | ||
1240 | loff_t io_start; | ||
1241 | const struct rpc_call_ops *mds_ops; | ||
1242 | void (*release) (struct nfs_pgio_header *hdr); | ||
1243 | const struct nfs_pgio_completion_ops *completion_ops; | ||
1244 | struct nfs_direct_req *dreq; | ||
1245 | spinlock_t lock; | ||
1246 | /* fields protected by lock */ | ||
1170 | int pnfs_error; | 1247 | int pnfs_error; |
1171 | struct page *page_array[NFS_PAGEVEC_SIZE]; | 1248 | int error; /* merge with pnfs_error */ |
1249 | unsigned long good_bytes; /* boundary of good data */ | ||
1250 | unsigned long flags; | ||
1251 | }; | ||
1252 | |||
1253 | struct nfs_read_header { | ||
1254 | struct nfs_pgio_header header; | ||
1255 | struct nfs_read_data rpc_data; | ||
1172 | }; | 1256 | }; |
1173 | 1257 | ||
1174 | struct nfs_write_data { | 1258 | struct nfs_write_data { |
1259 | struct nfs_pgio_header *header; | ||
1260 | struct list_head list; | ||
1261 | struct rpc_task task; | ||
1262 | struct nfs_fattr fattr; | ||
1263 | struct nfs_writeverf verf; | ||
1264 | struct nfs_writeargs args; /* argument struct */ | ||
1265 | struct nfs_writeres res; /* result struct */ | ||
1266 | unsigned long timestamp; /* For lease renewal */ | ||
1267 | int (*write_done_cb) (struct rpc_task *task, struct nfs_write_data *data); | ||
1268 | __u64 mds_offset; /* Filelayout dense stripe */ | ||
1269 | struct nfs_page_array pages; | ||
1270 | struct nfs_client *ds_clp; /* pNFS data server */ | ||
1271 | }; | ||
1272 | |||
1273 | struct nfs_write_header { | ||
1274 | struct nfs_pgio_header header; | ||
1275 | struct nfs_write_data rpc_data; | ||
1276 | }; | ||
1277 | |||
1278 | struct nfs_mds_commit_info { | ||
1279 | atomic_t rpcs_out; | ||
1280 | unsigned long ncommit; | ||
1281 | struct list_head list; | ||
1282 | }; | ||
1283 | |||
1284 | struct nfs_commit_data; | ||
1285 | struct nfs_inode; | ||
1286 | struct nfs_commit_completion_ops { | ||
1287 | void (*error_cleanup) (struct nfs_inode *nfsi); | ||
1288 | void (*completion) (struct nfs_commit_data *data); | ||
1289 | }; | ||
1290 | |||
1291 | struct nfs_commit_info { | ||
1292 | spinlock_t *lock; | ||
1293 | struct nfs_mds_commit_info *mds; | ||
1294 | struct pnfs_ds_commit_info *ds; | ||
1295 | struct nfs_direct_req *dreq; /* O_DIRECT request */ | ||
1296 | const struct nfs_commit_completion_ops *completion_ops; | ||
1297 | }; | ||
1298 | |||
1299 | struct nfs_commit_data { | ||
1175 | struct rpc_task task; | 1300 | struct rpc_task task; |
1176 | struct inode *inode; | 1301 | struct inode *inode; |
1177 | struct rpc_cred *cred; | 1302 | struct rpc_cred *cred; |
@@ -1179,22 +1304,22 @@ struct nfs_write_data { | |||
1179 | struct nfs_writeverf verf; | 1304 | struct nfs_writeverf verf; |
1180 | struct list_head pages; /* Coalesced requests we wish to flush */ | 1305 | struct list_head pages; /* Coalesced requests we wish to flush */ |
1181 | struct list_head list; /* lists of struct nfs_write_data */ | 1306 | struct list_head list; /* lists of struct nfs_write_data */ |
1182 | struct nfs_page *req; /* multi ops per nfs_page */ | 1307 | struct nfs_direct_req *dreq; /* O_DIRECT request */ |
1183 | struct page **pagevec; | 1308 | struct nfs_commitargs args; /* argument struct */ |
1184 | unsigned int npages; /* Max length of pagevec */ | 1309 | struct nfs_commitres res; /* result struct */ |
1185 | struct nfs_writeargs args; /* argument struct */ | 1310 | struct nfs_open_context *context; |
1186 | struct nfs_writeres res; /* result struct */ | ||
1187 | struct pnfs_layout_segment *lseg; | 1311 | struct pnfs_layout_segment *lseg; |
1188 | struct nfs_client *ds_clp; /* pNFS data server */ | 1312 | struct nfs_client *ds_clp; /* pNFS data server */ |
1189 | int ds_commit_index; | 1313 | int ds_commit_index; |
1190 | const struct rpc_call_ops *mds_ops; | 1314 | const struct rpc_call_ops *mds_ops; |
1191 | int (*write_done_cb) (struct rpc_task *task, struct nfs_write_data *data); | 1315 | const struct nfs_commit_completion_ops *completion_ops; |
1192 | #ifdef CONFIG_NFS_V4 | 1316 | int (*commit_done_cb) (struct rpc_task *task, struct nfs_commit_data *data); |
1193 | unsigned long timestamp; /* For lease renewal */ | 1317 | }; |
1194 | #endif | 1318 | |
1195 | __u64 mds_offset; /* Filelayout dense stripe */ | 1319 | struct nfs_pgio_completion_ops { |
1196 | int pnfs_error; | 1320 | void (*error_cleanup)(struct list_head *head); |
1197 | struct page *page_array[NFS_PAGEVEC_SIZE]; | 1321 | void (*init_hdr)(struct nfs_pgio_header *hdr); |
1322 | void (*completion)(struct nfs_pgio_header *hdr); | ||
1198 | }; | 1323 | }; |
1199 | 1324 | ||
1200 | struct nfs_unlinkdata { | 1325 | struct nfs_unlinkdata { |
@@ -1234,11 +1359,13 @@ struct nfs_rpc_ops { | |||
1234 | 1359 | ||
1235 | int (*getroot) (struct nfs_server *, struct nfs_fh *, | 1360 | int (*getroot) (struct nfs_server *, struct nfs_fh *, |
1236 | struct nfs_fsinfo *); | 1361 | struct nfs_fsinfo *); |
1362 | struct vfsmount *(*submount) (struct nfs_server *, struct dentry *, | ||
1363 | struct nfs_fh *, struct nfs_fattr *); | ||
1237 | int (*getattr) (struct nfs_server *, struct nfs_fh *, | 1364 | int (*getattr) (struct nfs_server *, struct nfs_fh *, |
1238 | struct nfs_fattr *); | 1365 | struct nfs_fattr *); |
1239 | int (*setattr) (struct dentry *, struct nfs_fattr *, | 1366 | int (*setattr) (struct dentry *, struct nfs_fattr *, |
1240 | struct iattr *); | 1367 | struct iattr *); |
1241 | int (*lookup) (struct rpc_clnt *clnt, struct inode *, struct qstr *, | 1368 | int (*lookup) (struct inode *, struct qstr *, |
1242 | struct nfs_fh *, struct nfs_fattr *); | 1369 | struct nfs_fh *, struct nfs_fattr *); |
1243 | int (*access) (struct inode *, struct nfs_access_entry *); | 1370 | int (*access) (struct inode *, struct nfs_access_entry *); |
1244 | int (*readlink)(struct inode *, struct page *, unsigned int, | 1371 | int (*readlink)(struct inode *, struct page *, unsigned int, |
@@ -1277,8 +1404,9 @@ struct nfs_rpc_ops { | |||
1277 | void (*write_setup) (struct nfs_write_data *, struct rpc_message *); | 1404 | void (*write_setup) (struct nfs_write_data *, struct rpc_message *); |
1278 | void (*write_rpc_prepare)(struct rpc_task *, struct nfs_write_data *); | 1405 | void (*write_rpc_prepare)(struct rpc_task *, struct nfs_write_data *); |
1279 | int (*write_done) (struct rpc_task *, struct nfs_write_data *); | 1406 | int (*write_done) (struct rpc_task *, struct nfs_write_data *); |
1280 | void (*commit_setup) (struct nfs_write_data *, struct rpc_message *); | 1407 | void (*commit_setup) (struct nfs_commit_data *, struct rpc_message *); |
1281 | int (*commit_done) (struct rpc_task *, struct nfs_write_data *); | 1408 | void (*commit_rpc_prepare)(struct rpc_task *, struct nfs_commit_data *); |
1409 | int (*commit_done) (struct rpc_task *, struct nfs_commit_data *); | ||
1282 | int (*lock)(struct file *, int, struct file_lock *); | 1410 | int (*lock)(struct file *, int, struct file_lock *); |
1283 | int (*lock_check_bounds)(const struct file_lock *); | 1411 | int (*lock_check_bounds)(const struct file_lock *); |
1284 | void (*clear_acl_cache)(struct inode *); | 1412 | void (*clear_acl_cache)(struct inode *); |
@@ -1287,9 +1415,9 @@ struct nfs_rpc_ops { | |||
1287 | struct nfs_open_context *ctx, | 1415 | struct nfs_open_context *ctx, |
1288 | int open_flags, | 1416 | int open_flags, |
1289 | struct iattr *iattr); | 1417 | struct iattr *iattr); |
1290 | int (*init_client) (struct nfs_client *, const struct rpc_timeout *, | 1418 | struct nfs_client * |
1291 | const char *, rpc_authflavor_t, int); | 1419 | (*init_client) (struct nfs_client *, const struct rpc_timeout *, |
1292 | int (*secinfo)(struct inode *, const struct qstr *, struct nfs4_secinfo_flavors *); | 1420 | const char *, rpc_authflavor_t); |
1293 | }; | 1421 | }; |
1294 | 1422 | ||
1295 | /* | 1423 | /* |
diff --git a/include/linux/nfsd/export.h b/include/linux/nfsd/export.h index f85308e688fd..e33f747b173c 100644 --- a/include/linux/nfsd/export.h +++ b/include/linux/nfsd/export.h | |||
@@ -103,6 +103,7 @@ struct svc_export { | |||
103 | struct nfsd4_fs_locations ex_fslocs; | 103 | struct nfsd4_fs_locations ex_fslocs; |
104 | int ex_nflavors; | 104 | int ex_nflavors; |
105 | struct exp_flavor_info ex_flavors[MAX_SECINFO_LIST]; | 105 | struct exp_flavor_info ex_flavors[MAX_SECINFO_LIST]; |
106 | struct cache_detail *cd; | ||
106 | }; | 107 | }; |
107 | 108 | ||
108 | /* an "export key" (expkey) maps a filehandlefragement to an | 109 | /* an "export key" (expkey) maps a filehandlefragement to an |
@@ -129,24 +130,22 @@ __be32 check_nfsd_access(struct svc_export *exp, struct svc_rqst *rqstp); | |||
129 | /* | 130 | /* |
130 | * Function declarations | 131 | * Function declarations |
131 | */ | 132 | */ |
132 | int nfsd_export_init(void); | 133 | int nfsd_export_init(struct net *); |
133 | void nfsd_export_shutdown(void); | 134 | void nfsd_export_shutdown(struct net *); |
134 | void nfsd_export_flush(void); | 135 | void nfsd_export_flush(struct net *); |
135 | struct svc_export * rqst_exp_get_by_name(struct svc_rqst *, | 136 | struct svc_export * rqst_exp_get_by_name(struct svc_rqst *, |
136 | struct path *); | 137 | struct path *); |
137 | struct svc_export * rqst_exp_parent(struct svc_rqst *, | 138 | struct svc_export * rqst_exp_parent(struct svc_rqst *, |
138 | struct path *); | 139 | struct path *); |
139 | struct svc_export * rqst_find_fsidzero_export(struct svc_rqst *); | 140 | struct svc_export * rqst_find_fsidzero_export(struct svc_rqst *); |
140 | int exp_rootfh(struct auth_domain *, | 141 | int exp_rootfh(struct net *, struct auth_domain *, |
141 | char *path, struct knfsd_fh *, int maxsize); | 142 | char *path, struct knfsd_fh *, int maxsize); |
142 | __be32 exp_pseudoroot(struct svc_rqst *, struct svc_fh *); | 143 | __be32 exp_pseudoroot(struct svc_rqst *, struct svc_fh *); |
143 | __be32 nfserrno(int errno); | 144 | __be32 nfserrno(int errno); |
144 | 145 | ||
145 | extern struct cache_detail svc_export_cache; | ||
146 | |||
147 | static inline void exp_put(struct svc_export *exp) | 146 | static inline void exp_put(struct svc_export *exp) |
148 | { | 147 | { |
149 | cache_put(&exp->h, &svc_export_cache); | 148 | cache_put(&exp->h, exp->cd); |
150 | } | 149 | } |
151 | 150 | ||
152 | static inline void exp_get(struct svc_export *exp) | 151 | static inline void exp_get(struct svc_export *exp) |
diff --git a/include/linux/nl80211.h b/include/linux/nl80211.h index 2540e86d99ab..a6959f72745e 100644 --- a/include/linux/nl80211.h +++ b/include/linux/nl80211.h | |||
@@ -1594,6 +1594,8 @@ enum nl80211_sta_flags { | |||
1594 | NL80211_STA_FLAG_MAX = __NL80211_STA_FLAG_AFTER_LAST - 1 | 1594 | NL80211_STA_FLAG_MAX = __NL80211_STA_FLAG_AFTER_LAST - 1 |
1595 | }; | 1595 | }; |
1596 | 1596 | ||
1597 | #define NL80211_STA_FLAG_MAX_OLD_API NL80211_STA_FLAG_TDLS_PEER | ||
1598 | |||
1597 | /** | 1599 | /** |
1598 | * struct nl80211_sta_flag_update - station flags mask/set | 1600 | * struct nl80211_sta_flag_update - station flags mask/set |
1599 | * @mask: mask of station flags to set | 1601 | * @mask: mask of station flags to set |
@@ -1994,9 +1996,9 @@ enum nl80211_reg_rule_flags { | |||
1994 | * enum nl80211_dfs_regions - regulatory DFS regions | 1996 | * enum nl80211_dfs_regions - regulatory DFS regions |
1995 | * | 1997 | * |
1996 | * @NL80211_DFS_UNSET: Country has no DFS master region specified | 1998 | * @NL80211_DFS_UNSET: Country has no DFS master region specified |
1997 | * @NL80211_DFS_FCC_: Country follows DFS master rules from FCC | 1999 | * @NL80211_DFS_FCC: Country follows DFS master rules from FCC |
1998 | * @NL80211_DFS_FCC_: Country follows DFS master rules from ETSI | 2000 | * @NL80211_DFS_ETSI: Country follows DFS master rules from ETSI |
1999 | * @NL80211_DFS_JP_: Country follows DFS master rules from JP/MKK/Telec | 2001 | * @NL80211_DFS_JP: Country follows DFS master rules from JP/MKK/Telec |
2000 | */ | 2002 | */ |
2001 | enum nl80211_dfs_regions { | 2003 | enum nl80211_dfs_regions { |
2002 | NL80211_DFS_UNSET = 0, | 2004 | NL80211_DFS_UNSET = 0, |
diff --git a/include/linux/of_gpio.h b/include/linux/of_gpio.h index 81733d12cbea..c454f5796747 100644 --- a/include/linux/of_gpio.h +++ b/include/linux/of_gpio.h | |||
@@ -58,7 +58,6 @@ extern int of_mm_gpiochip_add(struct device_node *np, | |||
58 | 58 | ||
59 | extern void of_gpiochip_add(struct gpio_chip *gc); | 59 | extern void of_gpiochip_add(struct gpio_chip *gc); |
60 | extern void of_gpiochip_remove(struct gpio_chip *gc); | 60 | extern void of_gpiochip_remove(struct gpio_chip *gc); |
61 | extern struct gpio_chip *of_node_to_gpiochip(struct device_node *np); | ||
62 | extern int of_gpio_simple_xlate(struct gpio_chip *gc, | 61 | extern int of_gpio_simple_xlate(struct gpio_chip *gc, |
63 | const struct of_phandle_args *gpiospec, | 62 | const struct of_phandle_args *gpiospec, |
64 | u32 *flags); | 63 | u32 *flags); |
diff --git a/include/linux/of_i2c.h b/include/linux/of_i2c.h index 0efe8d465f55..1cb775f8e663 100644 --- a/include/linux/of_i2c.h +++ b/include/linux/of_i2c.h | |||
@@ -20,6 +20,10 @@ extern void of_i2c_register_devices(struct i2c_adapter *adap); | |||
20 | /* must call put_device() when done with returned i2c_client device */ | 20 | /* must call put_device() when done with returned i2c_client device */ |
21 | extern struct i2c_client *of_find_i2c_device_by_node(struct device_node *node); | 21 | extern struct i2c_client *of_find_i2c_device_by_node(struct device_node *node); |
22 | 22 | ||
23 | /* must call put_device() when done with returned i2c_adapter device */ | ||
24 | extern struct i2c_adapter *of_find_i2c_adapter_by_node( | ||
25 | struct device_node *node); | ||
26 | |||
23 | #else | 27 | #else |
24 | static inline void of_i2c_register_devices(struct i2c_adapter *adap) | 28 | static inline void of_i2c_register_devices(struct i2c_adapter *adap) |
25 | { | 29 | { |
diff --git a/include/linux/of_irq.h b/include/linux/of_irq.h index d229ad3edee0..1717cd935e1c 100644 --- a/include/linux/of_irq.h +++ b/include/linux/of_irq.h | |||
@@ -11,7 +11,7 @@ struct of_irq; | |||
11 | #include <linux/of.h> | 11 | #include <linux/of.h> |
12 | 12 | ||
13 | /* | 13 | /* |
14 | * irq_of_parse_and_map() is used ba all OF enabled platforms; but SPARC | 14 | * irq_of_parse_and_map() is used by all OF enabled platforms; but SPARC |
15 | * implements it differently. However, the prototype is the same for all, | 15 | * implements it differently. However, the prototype is the same for all, |
16 | * so declare it here regardless of the CONFIG_OF_IRQ setting. | 16 | * so declare it here regardless of the CONFIG_OF_IRQ setting. |
17 | */ | 17 | */ |
@@ -76,5 +76,13 @@ extern struct device_node *of_irq_find_parent(struct device_node *child); | |||
76 | extern void of_irq_init(const struct of_device_id *matches); | 76 | extern void of_irq_init(const struct of_device_id *matches); |
77 | 77 | ||
78 | #endif /* CONFIG_OF_IRQ */ | 78 | #endif /* CONFIG_OF_IRQ */ |
79 | #endif /* CONFIG_OF */ | 79 | |
80 | #else /* !CONFIG_OF */ | ||
81 | static inline unsigned int irq_of_parse_and_map(struct device_node *dev, | ||
82 | int index) | ||
83 | { | ||
84 | return 0; | ||
85 | } | ||
86 | #endif /* !CONFIG_OF */ | ||
87 | |||
80 | #endif /* __OF_IRQ_H */ | 88 | #endif /* __OF_IRQ_H */ |
diff --git a/include/linux/of_pci.h b/include/linux/of_pci.h index f93e21700d3e..bb115deb7612 100644 --- a/include/linux/of_pci.h +++ b/include/linux/of_pci.h | |||
@@ -5,7 +5,7 @@ | |||
5 | 5 | ||
6 | struct pci_dev; | 6 | struct pci_dev; |
7 | struct of_irq; | 7 | struct of_irq; |
8 | int of_irq_map_pci(struct pci_dev *pdev, struct of_irq *out_irq); | 8 | int of_irq_map_pci(const struct pci_dev *pdev, struct of_irq *out_irq); |
9 | 9 | ||
10 | struct device_node; | 10 | struct device_node; |
11 | struct device_node *of_pci_find_child_device(struct device_node *parent, | 11 | struct device_node *of_pci_find_child_device(struct device_node *parent, |
diff --git a/include/linux/of_spi.h b/include/linux/of_spi.h deleted file mode 100644 index 9e3e70f78ae6..000000000000 --- a/include/linux/of_spi.h +++ /dev/null | |||
@@ -1,23 +0,0 @@ | |||
1 | /* | ||
2 | * OpenFirmware SPI support routines | ||
3 | * Copyright (C) 2008 Secret Lab Technologies Ltd. | ||
4 | * | ||
5 | * Support routines for deriving SPI device attachments from the device | ||
6 | * tree. | ||
7 | */ | ||
8 | |||
9 | #ifndef __LINUX_OF_SPI_H | ||
10 | #define __LINUX_OF_SPI_H | ||
11 | |||
12 | #include <linux/spi/spi.h> | ||
13 | |||
14 | #if defined(CONFIG_OF_SPI) || defined(CONFIG_OF_SPI_MODULE) | ||
15 | extern void of_register_spi_devices(struct spi_master *master); | ||
16 | #else | ||
17 | static inline void of_register_spi_devices(struct spi_master *master) | ||
18 | { | ||
19 | return; | ||
20 | } | ||
21 | #endif /* CONFIG_OF_SPI */ | ||
22 | |||
23 | #endif /* __LINUX_OF_SPI */ | ||
diff --git a/include/linux/oom.h b/include/linux/oom.h index 3d7647536b03..e4c29bc72e70 100644 --- a/include/linux/oom.h +++ b/include/linux/oom.h | |||
@@ -43,8 +43,9 @@ enum oom_constraint { | |||
43 | extern void compare_swap_oom_score_adj(int old_val, int new_val); | 43 | extern void compare_swap_oom_score_adj(int old_val, int new_val); |
44 | extern int test_set_oom_score_adj(int new_val); | 44 | extern int test_set_oom_score_adj(int new_val); |
45 | 45 | ||
46 | extern unsigned int oom_badness(struct task_struct *p, struct mem_cgroup *memcg, | 46 | extern unsigned long oom_badness(struct task_struct *p, |
47 | const nodemask_t *nodemask, unsigned long totalpages); | 47 | struct mem_cgroup *memcg, const nodemask_t *nodemask, |
48 | unsigned long totalpages); | ||
48 | extern int try_set_zonelist_oom(struct zonelist *zonelist, gfp_t gfp_flags); | 49 | extern int try_set_zonelist_oom(struct zonelist *zonelist, gfp_t gfp_flags); |
49 | extern void clear_zonelist_oom(struct zonelist *zonelist, gfp_t gfp_flags); | 50 | extern void clear_zonelist_oom(struct zonelist *zonelist, gfp_t gfp_flags); |
50 | 51 | ||
diff --git a/include/linux/page-isolation.h b/include/linux/page-isolation.h index 051c1b1ede4e..3bdcab30ca41 100644 --- a/include/linux/page-isolation.h +++ b/include/linux/page-isolation.h | |||
@@ -3,7 +3,7 @@ | |||
3 | 3 | ||
4 | /* | 4 | /* |
5 | * Changes migrate type in [start_pfn, end_pfn) to be MIGRATE_ISOLATE. | 5 | * Changes migrate type in [start_pfn, end_pfn) to be MIGRATE_ISOLATE. |
6 | * If specified range includes migrate types other than MOVABLE, | 6 | * If specified range includes migrate types other than MOVABLE or CMA, |
7 | * this will fail with -EBUSY. | 7 | * this will fail with -EBUSY. |
8 | * | 8 | * |
9 | * For isolating all pages in the range finally, the caller have to | 9 | * For isolating all pages in the range finally, the caller have to |
@@ -11,27 +11,27 @@ | |||
11 | * test it. | 11 | * test it. |
12 | */ | 12 | */ |
13 | extern int | 13 | extern int |
14 | start_isolate_page_range(unsigned long start_pfn, unsigned long end_pfn); | 14 | start_isolate_page_range(unsigned long start_pfn, unsigned long end_pfn, |
15 | unsigned migratetype); | ||
15 | 16 | ||
16 | /* | 17 | /* |
17 | * Changes MIGRATE_ISOLATE to MIGRATE_MOVABLE. | 18 | * Changes MIGRATE_ISOLATE to MIGRATE_MOVABLE. |
18 | * target range is [start_pfn, end_pfn) | 19 | * target range is [start_pfn, end_pfn) |
19 | */ | 20 | */ |
20 | extern int | 21 | extern int |
21 | undo_isolate_page_range(unsigned long start_pfn, unsigned long end_pfn); | 22 | undo_isolate_page_range(unsigned long start_pfn, unsigned long end_pfn, |
23 | unsigned migratetype); | ||
22 | 24 | ||
23 | /* | 25 | /* |
24 | * test all pages in [start_pfn, end_pfn)are isolated or not. | 26 | * Test all pages in [start_pfn, end_pfn) are isolated or not. |
25 | */ | 27 | */ |
26 | extern int | 28 | int test_pages_isolated(unsigned long start_pfn, unsigned long end_pfn); |
27 | test_pages_isolated(unsigned long start_pfn, unsigned long end_pfn); | ||
28 | 29 | ||
29 | /* | 30 | /* |
30 | * Internal funcs.Changes pageblock's migrate type. | 31 | * Internal functions. Changes pageblock's migrate type. |
31 | * Please use make_pagetype_isolated()/make_pagetype_movable(). | ||
32 | */ | 32 | */ |
33 | extern int set_migratetype_isolate(struct page *page); | 33 | extern int set_migratetype_isolate(struct page *page); |
34 | extern void unset_migratetype_isolate(struct page *page); | 34 | extern void unset_migratetype_isolate(struct page *page, unsigned migratetype); |
35 | 35 | ||
36 | 36 | ||
37 | #endif | 37 | #endif |
diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h index cfaaa6949b8b..7cfad3bbb0cc 100644 --- a/include/linux/pagemap.h +++ b/include/linux/pagemap.h | |||
@@ -426,7 +426,7 @@ static inline int fault_in_pages_writeable(char __user *uaddr, int size) | |||
426 | */ | 426 | */ |
427 | if (((unsigned long)uaddr & PAGE_MASK) != | 427 | if (((unsigned long)uaddr & PAGE_MASK) != |
428 | ((unsigned long)end & PAGE_MASK)) | 428 | ((unsigned long)end & PAGE_MASK)) |
429 | ret = __put_user(0, end); | 429 | ret = __put_user(0, end); |
430 | } | 430 | } |
431 | return ret; | 431 | return ret; |
432 | } | 432 | } |
@@ -445,13 +445,73 @@ static inline int fault_in_pages_readable(const char __user *uaddr, int size) | |||
445 | 445 | ||
446 | if (((unsigned long)uaddr & PAGE_MASK) != | 446 | if (((unsigned long)uaddr & PAGE_MASK) != |
447 | ((unsigned long)end & PAGE_MASK)) { | 447 | ((unsigned long)end & PAGE_MASK)) { |
448 | ret = __get_user(c, end); | 448 | ret = __get_user(c, end); |
449 | (void)c; | 449 | (void)c; |
450 | } | 450 | } |
451 | } | 451 | } |
452 | return ret; | 452 | return ret; |
453 | } | 453 | } |
454 | 454 | ||
455 | /* | ||
456 | * Multipage variants of the above prefault helpers, useful if more than | ||
457 | * PAGE_SIZE of data needs to be prefaulted. These are separate from the above | ||
458 | * functions (which only handle up to PAGE_SIZE) to avoid clobbering the | ||
459 | * filemap.c hotpaths. | ||
460 | */ | ||
461 | static inline int fault_in_multipages_writeable(char __user *uaddr, int size) | ||
462 | { | ||
463 | int ret = 0; | ||
464 | char __user *end = uaddr + size - 1; | ||
465 | |||
466 | if (unlikely(size == 0)) | ||
467 | return ret; | ||
468 | |||
469 | /* | ||
470 | * Writing zeroes into userspace here is OK, because we know that if | ||
471 | * the zero gets there, we'll be overwriting it. | ||
472 | */ | ||
473 | while (uaddr <= end) { | ||
474 | ret = __put_user(0, uaddr); | ||
475 | if (ret != 0) | ||
476 | return ret; | ||
477 | uaddr += PAGE_SIZE; | ||
478 | } | ||
479 | |||
480 | /* Check whether the range spilled into the next page. */ | ||
481 | if (((unsigned long)uaddr & PAGE_MASK) == | ||
482 | ((unsigned long)end & PAGE_MASK)) | ||
483 | ret = __put_user(0, end); | ||
484 | |||
485 | return ret; | ||
486 | } | ||
487 | |||
488 | static inline int fault_in_multipages_readable(const char __user *uaddr, | ||
489 | int size) | ||
490 | { | ||
491 | volatile char c; | ||
492 | int ret = 0; | ||
493 | const char __user *end = uaddr + size - 1; | ||
494 | |||
495 | if (unlikely(size == 0)) | ||
496 | return ret; | ||
497 | |||
498 | while (uaddr <= end) { | ||
499 | ret = __get_user(c, uaddr); | ||
500 | if (ret != 0) | ||
501 | return ret; | ||
502 | uaddr += PAGE_SIZE; | ||
503 | } | ||
504 | |||
505 | /* Check whether the range spilled into the next page. */ | ||
506 | if (((unsigned long)uaddr & PAGE_MASK) == | ||
507 | ((unsigned long)end & PAGE_MASK)) { | ||
508 | ret = __get_user(c, end); | ||
509 | (void)c; | ||
510 | } | ||
511 | |||
512 | return ret; | ||
513 | } | ||
514 | |||
455 | int add_to_page_cache_locked(struct page *page, struct address_space *mapping, | 515 | int add_to_page_cache_locked(struct page *page, struct address_space *mapping, |
456 | pgoff_t index, gfp_t gfp_mask); | 516 | pgoff_t index, gfp_t gfp_mask); |
457 | int add_to_page_cache_lru(struct page *page, struct address_space *mapping, | 517 | int add_to_page_cache_lru(struct page *page, struct address_space *mapping, |
diff --git a/include/linux/pci.h b/include/linux/pci.h index 17b7b5b01b4a..d8c379dba6ad 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h | |||
@@ -687,7 +687,7 @@ int __must_check pci_bus_add_device(struct pci_dev *dev); | |||
687 | void pci_read_bridge_bases(struct pci_bus *child); | 687 | void pci_read_bridge_bases(struct pci_bus *child); |
688 | struct resource *pci_find_parent_resource(const struct pci_dev *dev, | 688 | struct resource *pci_find_parent_resource(const struct pci_dev *dev, |
689 | struct resource *res); | 689 | struct resource *res); |
690 | u8 pci_swizzle_interrupt_pin(struct pci_dev *dev, u8 pin); | 690 | u8 pci_swizzle_interrupt_pin(const struct pci_dev *dev, u8 pin); |
691 | int pci_get_interrupt_pin(struct pci_dev *dev, struct pci_dev **bridge); | 691 | int pci_get_interrupt_pin(struct pci_dev *dev, struct pci_dev **bridge); |
692 | u8 pci_common_swizzle(struct pci_dev *dev, u8 *pinp); | 692 | u8 pci_common_swizzle(struct pci_dev *dev, u8 *pinp); |
693 | extern struct pci_dev *pci_dev_get(struct pci_dev *dev); | 693 | extern struct pci_dev *pci_dev_get(struct pci_dev *dev); |
@@ -1692,7 +1692,8 @@ extern void pci_release_bus_of_node(struct pci_bus *bus); | |||
1692 | /* Arch may override this (weak) */ | 1692 | /* Arch may override this (weak) */ |
1693 | extern struct device_node * __weak pcibios_get_phb_of_node(struct pci_bus *bus); | 1693 | extern struct device_node * __weak pcibios_get_phb_of_node(struct pci_bus *bus); |
1694 | 1694 | ||
1695 | static inline struct device_node *pci_device_to_OF_node(struct pci_dev *pdev) | 1695 | static inline struct device_node * |
1696 | pci_device_to_OF_node(const struct pci_dev *pdev) | ||
1696 | { | 1697 | { |
1697 | return pdev ? pdev->dev.of_node : NULL; | 1698 | return pdev ? pdev->dev.of_node : NULL; |
1698 | } | 1699 | } |
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index 3329965ed63f..ab741b0d0074 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
@@ -2506,6 +2506,7 @@ | |||
2506 | #define PCI_DEVICE_ID_INTEL_MRST_SD2 0x084F | 2506 | #define PCI_DEVICE_ID_INTEL_MRST_SD2 0x084F |
2507 | #define PCI_DEVICE_ID_INTEL_I960 0x0960 | 2507 | #define PCI_DEVICE_ID_INTEL_I960 0x0960 |
2508 | #define PCI_DEVICE_ID_INTEL_I960RM 0x0962 | 2508 | #define PCI_DEVICE_ID_INTEL_I960RM 0x0962 |
2509 | #define PCI_DEVICE_ID_INTEL_CENTERTON_ILB 0x0c60 | ||
2509 | #define PCI_DEVICE_ID_INTEL_8257X_SOL 0x1062 | 2510 | #define PCI_DEVICE_ID_INTEL_8257X_SOL 0x1062 |
2510 | #define PCI_DEVICE_ID_INTEL_82573E_SOL 0x1085 | 2511 | #define PCI_DEVICE_ID_INTEL_82573E_SOL 0x1085 |
2511 | #define PCI_DEVICE_ID_INTEL_82573L_SOL 0x108F | 2512 | #define PCI_DEVICE_ID_INTEL_82573L_SOL 0x108F |
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h index f32578634d9d..45db49f64bb4 100644 --- a/include/linux/perf_event.h +++ b/include/linux/perf_event.h | |||
@@ -555,6 +555,8 @@ enum perf_event_type { | |||
555 | PERF_RECORD_MAX, /* non-ABI */ | 555 | PERF_RECORD_MAX, /* non-ABI */ |
556 | }; | 556 | }; |
557 | 557 | ||
558 | #define PERF_MAX_STACK_DEPTH 127 | ||
559 | |||
558 | enum perf_callchain_context { | 560 | enum perf_callchain_context { |
559 | PERF_CONTEXT_HV = (__u64)-32, | 561 | PERF_CONTEXT_HV = (__u64)-32, |
560 | PERF_CONTEXT_KERNEL = (__u64)-128, | 562 | PERF_CONTEXT_KERNEL = (__u64)-128, |
@@ -609,8 +611,6 @@ struct perf_guest_info_callbacks { | |||
609 | #include <linux/sysfs.h> | 611 | #include <linux/sysfs.h> |
610 | #include <asm/local.h> | 612 | #include <asm/local.h> |
611 | 613 | ||
612 | #define PERF_MAX_STACK_DEPTH 255 | ||
613 | |||
614 | struct perf_callchain_entry { | 614 | struct perf_callchain_entry { |
615 | __u64 nr; | 615 | __u64 nr; |
616 | __u64 ip[PERF_MAX_STACK_DEPTH]; | 616 | __u64 ip[PERF_MAX_STACK_DEPTH]; |
diff --git a/include/linux/power/charger-manager.h b/include/linux/power/charger-manager.h index 4f75e531c112..241065c9ce51 100644 --- a/include/linux/power/charger-manager.h +++ b/include/linux/power/charger-manager.h | |||
@@ -18,6 +18,8 @@ | |||
18 | #include <linux/power_supply.h> | 18 | #include <linux/power_supply.h> |
19 | 19 | ||
20 | enum data_source { | 20 | enum data_source { |
21 | CM_BATTERY_PRESENT, | ||
22 | CM_NO_BATTERY, | ||
21 | CM_FUEL_GAUGE, | 23 | CM_FUEL_GAUGE, |
22 | CM_CHARGER_STAT, | 24 | CM_CHARGER_STAT, |
23 | }; | 25 | }; |
@@ -29,6 +31,16 @@ enum polling_modes { | |||
29 | CM_POLL_CHARGING_ONLY, | 31 | CM_POLL_CHARGING_ONLY, |
30 | }; | 32 | }; |
31 | 33 | ||
34 | enum cm_event_types { | ||
35 | CM_EVENT_UNKNOWN = 0, | ||
36 | CM_EVENT_BATT_FULL, | ||
37 | CM_EVENT_BATT_IN, | ||
38 | CM_EVENT_BATT_OUT, | ||
39 | CM_EVENT_EXT_PWR_IN_OUT, | ||
40 | CM_EVENT_CHG_START_STOP, | ||
41 | CM_EVENT_OTHERS, | ||
42 | }; | ||
43 | |||
32 | /** | 44 | /** |
33 | * struct charger_global_desc | 45 | * struct charger_global_desc |
34 | * @rtc_name: the name of RTC used to wake up the system from suspend. | 46 | * @rtc_name: the name of RTC used to wake up the system from suspend. |
@@ -38,11 +50,18 @@ enum polling_modes { | |||
38 | * rtc_only_wakeup() returning false. | 50 | * rtc_only_wakeup() returning false. |
39 | * If the RTC given to CM is the only wakeup reason, | 51 | * If the RTC given to CM is the only wakeup reason, |
40 | * rtc_only_wakeup should return true. | 52 | * rtc_only_wakeup should return true. |
53 | * @assume_timer_stops_in_suspend: | ||
54 | * Assume that the jiffy timer stops in suspend-to-RAM. | ||
55 | * When enabled, CM does not rely on jiffies value in | ||
56 | * suspend_again and assumes that jiffies value does not | ||
57 | * change during suspend. | ||
41 | */ | 58 | */ |
42 | struct charger_global_desc { | 59 | struct charger_global_desc { |
43 | char *rtc_name; | 60 | char *rtc_name; |
44 | 61 | ||
45 | bool (*rtc_only_wakeup)(void); | 62 | bool (*rtc_only_wakeup)(void); |
63 | |||
64 | bool assume_timer_stops_in_suspend; | ||
46 | }; | 65 | }; |
47 | 66 | ||
48 | /** | 67 | /** |
@@ -50,6 +69,11 @@ struct charger_global_desc { | |||
50 | * @psy_name: the name of power-supply-class for charger manager | 69 | * @psy_name: the name of power-supply-class for charger manager |
51 | * @polling_mode: | 70 | * @polling_mode: |
52 | * Determine which polling mode will be used | 71 | * Determine which polling mode will be used |
72 | * @fullbatt_vchkdrop_ms: | ||
73 | * @fullbatt_vchkdrop_uV: | ||
74 | * Check voltage drop after the battery is fully charged. | ||
75 | * If it has dropped more than fullbatt_vchkdrop_uV after | ||
76 | * fullbatt_vchkdrop_ms, CM will restart charging. | ||
53 | * @fullbatt_uV: voltage in microvolt | 77 | * @fullbatt_uV: voltage in microvolt |
54 | * If it is not being charged and VBATT >= fullbatt_uV, | 78 | * If it is not being charged and VBATT >= fullbatt_uV, |
55 | * it is assumed to be full. | 79 | * it is assumed to be full. |
@@ -76,6 +100,8 @@ struct charger_desc { | |||
76 | enum polling_modes polling_mode; | 100 | enum polling_modes polling_mode; |
77 | unsigned int polling_interval_ms; | 101 | unsigned int polling_interval_ms; |
78 | 102 | ||
103 | unsigned int fullbatt_vchkdrop_ms; | ||
104 | unsigned int fullbatt_vchkdrop_uV; | ||
79 | unsigned int fullbatt_uV; | 105 | unsigned int fullbatt_uV; |
80 | 106 | ||
81 | enum data_source battery_present; | 107 | enum data_source battery_present; |
@@ -101,6 +127,11 @@ struct charger_desc { | |||
101 | * @fuel_gauge: power_supply for fuel gauge | 127 | * @fuel_gauge: power_supply for fuel gauge |
102 | * @charger_stat: array of power_supply for chargers | 128 | * @charger_stat: array of power_supply for chargers |
103 | * @charger_enabled: the state of charger | 129 | * @charger_enabled: the state of charger |
130 | * @fullbatt_vchk_jiffies_at: | ||
131 | * jiffies at the time full battery check will occur. | ||
132 | * @fullbatt_vchk_uV: voltage in microvolt | ||
133 | * criteria for full battery | ||
134 | * @fullbatt_vchk_work: work queue for full battery check | ||
104 | * @emergency_stop: | 135 | * @emergency_stop: |
105 | * When setting true, stop charging | 136 | * When setting true, stop charging |
106 | * @last_temp_mC: the measured temperature in milli-Celsius | 137 | * @last_temp_mC: the measured temperature in milli-Celsius |
@@ -121,6 +152,10 @@ struct charger_manager { | |||
121 | 152 | ||
122 | bool charger_enabled; | 153 | bool charger_enabled; |
123 | 154 | ||
155 | unsigned long fullbatt_vchk_jiffies_at; | ||
156 | unsigned int fullbatt_vchk_uV; | ||
157 | struct delayed_work fullbatt_vchk_work; | ||
158 | |||
124 | int emergency_stop; | 159 | int emergency_stop; |
125 | int last_temp_mC; | 160 | int last_temp_mC; |
126 | 161 | ||
@@ -134,14 +169,13 @@ struct charger_manager { | |||
134 | #ifdef CONFIG_CHARGER_MANAGER | 169 | #ifdef CONFIG_CHARGER_MANAGER |
135 | extern int setup_charger_manager(struct charger_global_desc *gd); | 170 | extern int setup_charger_manager(struct charger_global_desc *gd); |
136 | extern bool cm_suspend_again(void); | 171 | extern bool cm_suspend_again(void); |
172 | extern void cm_notify_event(struct power_supply *psy, | ||
173 | enum cm_event_types type, char *msg); | ||
137 | #else | 174 | #else |
138 | static void __maybe_unused setup_charger_manager(struct charger_global_desc *gd) | 175 | static inline int setup_charger_manager(struct charger_global_desc *gd) |
139 | { } | 176 | { return 0; } |
140 | 177 | static inline bool cm_suspend_again(void) { return false; } | |
141 | static bool __maybe_unused cm_suspend_again(void) | 178 | static inline void cm_notify_event(struct power_supply *psy, |
142 | { | 179 | enum cm_event_types type, char *msg) { } |
143 | return false; | ||
144 | } | ||
145 | #endif | 180 | #endif |
146 | |||
147 | #endif /* _CHARGER_MANAGER_H */ | 181 | #endif /* _CHARGER_MANAGER_H */ |
diff --git a/include/linux/power/max17042_battery.h b/include/linux/power/max17042_battery.h index e01b167e66f0..89dd84f47c6e 100644 --- a/include/linux/power/max17042_battery.h +++ b/include/linux/power/max17042_battery.h | |||
@@ -116,6 +116,18 @@ enum max17042_register { | |||
116 | MAX17042_VFSOC = 0xFF, | 116 | MAX17042_VFSOC = 0xFF, |
117 | }; | 117 | }; |
118 | 118 | ||
119 | /* Registers specific to max17047/50 */ | ||
120 | enum max17047_register { | ||
121 | MAX17047_QRTbl00 = 0x12, | ||
122 | MAX17047_FullSOCThr = 0x13, | ||
123 | MAX17047_QRTbl10 = 0x22, | ||
124 | MAX17047_QRTbl20 = 0x32, | ||
125 | MAX17047_V_empty = 0x3A, | ||
126 | MAX17047_QRTbl30 = 0x42, | ||
127 | }; | ||
128 | |||
129 | enum max170xx_chip_type {MAX17042, MAX17047}; | ||
130 | |||
119 | /* | 131 | /* |
120 | * used for setting a register to a desired value | 132 | * used for setting a register to a desired value |
121 | * addr : address for a register | 133 | * addr : address for a register |
@@ -144,6 +156,7 @@ struct max17042_config_data { | |||
144 | u16 shdntimer; /* 0x03F */ | 156 | u16 shdntimer; /* 0x03F */ |
145 | 157 | ||
146 | /* App data */ | 158 | /* App data */ |
159 | u16 full_soc_thresh; /* 0x13 */ | ||
147 | u16 design_cap; /* 0x18 */ | 160 | u16 design_cap; /* 0x18 */ |
148 | u16 ichgt_term; /* 0x1E */ | 161 | u16 ichgt_term; /* 0x1E */ |
149 | 162 | ||
@@ -162,6 +175,10 @@ struct max17042_config_data { | |||
162 | u16 lavg_empty; /* 0x36 */ | 175 | u16 lavg_empty; /* 0x36 */ |
163 | u16 dqacc; /* 0x45 */ | 176 | u16 dqacc; /* 0x45 */ |
164 | u16 dpacc; /* 0x46 */ | 177 | u16 dpacc; /* 0x46 */ |
178 | u16 qrtbl00; /* 0x12 */ | ||
179 | u16 qrtbl10; /* 0x22 */ | ||
180 | u16 qrtbl20; /* 0x32 */ | ||
181 | u16 qrtbl30; /* 0x42 */ | ||
165 | 182 | ||
166 | /* Cell technology from power_supply.h */ | 183 | /* Cell technology from power_supply.h */ |
167 | u16 cell_technology; | 184 | u16 cell_technology; |
diff --git a/include/linux/power_supply.h b/include/linux/power_supply.h index c38c13db8832..3b912bee28d1 100644 --- a/include/linux/power_supply.h +++ b/include/linux/power_supply.h | |||
@@ -96,6 +96,7 @@ enum power_supply_property { | |||
96 | POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN, | 96 | POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN, |
97 | POWER_SUPPLY_PROP_VOLTAGE_NOW, | 97 | POWER_SUPPLY_PROP_VOLTAGE_NOW, |
98 | POWER_SUPPLY_PROP_VOLTAGE_AVG, | 98 | POWER_SUPPLY_PROP_VOLTAGE_AVG, |
99 | POWER_SUPPLY_PROP_VOLTAGE_OCV, | ||
99 | POWER_SUPPLY_PROP_CURRENT_MAX, | 100 | POWER_SUPPLY_PROP_CURRENT_MAX, |
100 | POWER_SUPPLY_PROP_CURRENT_NOW, | 101 | POWER_SUPPLY_PROP_CURRENT_NOW, |
101 | POWER_SUPPLY_PROP_CURRENT_AVG, | 102 | POWER_SUPPLY_PROP_CURRENT_AVG, |
@@ -211,7 +212,7 @@ extern void power_supply_changed(struct power_supply *psy); | |||
211 | extern int power_supply_am_i_supplied(struct power_supply *psy); | 212 | extern int power_supply_am_i_supplied(struct power_supply *psy); |
212 | extern int power_supply_set_battery_charged(struct power_supply *psy); | 213 | extern int power_supply_set_battery_charged(struct power_supply *psy); |
213 | 214 | ||
214 | #if defined(CONFIG_POWER_SUPPLY) || defined(CONFIG_POWER_SUPPLY_MODULE) | 215 | #ifdef CONFIG_POWER_SUPPLY |
215 | extern int power_supply_is_system_supplied(void); | 216 | extern int power_supply_is_system_supplied(void); |
216 | #else | 217 | #else |
217 | static inline int power_supply_is_system_supplied(void) { return -ENOSYS; } | 218 | static inline int power_supply_is_system_supplied(void) { return -ENOSYS; } |
@@ -261,6 +262,7 @@ static inline bool power_supply_is_watt_property(enum power_supply_property psp) | |||
261 | case POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN: | 262 | case POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN: |
262 | case POWER_SUPPLY_PROP_VOLTAGE_NOW: | 263 | case POWER_SUPPLY_PROP_VOLTAGE_NOW: |
263 | case POWER_SUPPLY_PROP_VOLTAGE_AVG: | 264 | case POWER_SUPPLY_PROP_VOLTAGE_AVG: |
265 | case POWER_SUPPLY_PROP_VOLTAGE_OCV: | ||
264 | case POWER_SUPPLY_PROP_POWER_NOW: | 266 | case POWER_SUPPLY_PROP_POWER_NOW: |
265 | return 1; | 267 | return 1; |
266 | default: | 268 | default: |
diff --git a/include/linux/prctl.h b/include/linux/prctl.h index 78b76e24cc7e..3988012255dc 100644 --- a/include/linux/prctl.h +++ b/include/linux/prctl.h | |||
@@ -113,6 +113,12 @@ | |||
113 | # define PR_SET_MM_START_STACK 5 | 113 | # define PR_SET_MM_START_STACK 5 |
114 | # define PR_SET_MM_START_BRK 6 | 114 | # define PR_SET_MM_START_BRK 6 |
115 | # define PR_SET_MM_BRK 7 | 115 | # define PR_SET_MM_BRK 7 |
116 | # define PR_SET_MM_ARG_START 8 | ||
117 | # define PR_SET_MM_ARG_END 9 | ||
118 | # define PR_SET_MM_ENV_START 10 | ||
119 | # define PR_SET_MM_ENV_END 11 | ||
120 | # define PR_SET_MM_AUXV 12 | ||
121 | # define PR_SET_MM_EXE_FILE 13 | ||
116 | 122 | ||
117 | /* | 123 | /* |
118 | * Set specific pid that is allowed to ptrace the current task. | 124 | * Set specific pid that is allowed to ptrace the current task. |
@@ -121,8 +127,8 @@ | |||
121 | #define PR_SET_PTRACER 0x59616d61 | 127 | #define PR_SET_PTRACER 0x59616d61 |
122 | # define PR_SET_PTRACER_ANY ((unsigned long)-1) | 128 | # define PR_SET_PTRACER_ANY ((unsigned long)-1) |
123 | 129 | ||
124 | #define PR_SET_CHILD_SUBREAPER 36 | 130 | #define PR_SET_CHILD_SUBREAPER 36 |
125 | #define PR_GET_CHILD_SUBREAPER 37 | 131 | #define PR_GET_CHILD_SUBREAPER 37 |
126 | 132 | ||
127 | /* | 133 | /* |
128 | * If no_new_privs is set, then operations that grant new privileges (i.e. | 134 | * If no_new_privs is set, then operations that grant new privileges (i.e. |
@@ -136,7 +142,9 @@ | |||
136 | * asking selinux for a specific new context (e.g. with runcon) will result | 142 | * asking selinux for a specific new context (e.g. with runcon) will result |
137 | * in execve returning -EPERM. | 143 | * in execve returning -EPERM. |
138 | */ | 144 | */ |
139 | #define PR_SET_NO_NEW_PRIVS 38 | 145 | #define PR_SET_NO_NEW_PRIVS 38 |
140 | #define PR_GET_NO_NEW_PRIVS 39 | 146 | #define PR_GET_NO_NEW_PRIVS 39 |
147 | |||
148 | #define PR_GET_TID_ADDRESS 40 | ||
141 | 149 | ||
142 | #endif /* _LINUX_PRCTL_H */ | 150 | #endif /* _LINUX_PRCTL_H */ |
diff --git a/include/linux/radix-tree.h b/include/linux/radix-tree.h index 0d04cd69ab9b..ffc444c38b0a 100644 --- a/include/linux/radix-tree.h +++ b/include/linux/radix-tree.h | |||
@@ -368,8 +368,11 @@ radix_tree_next_slot(void **slot, struct radix_tree_iter *iter, unsigned flags) | |||
368 | iter->index++; | 368 | iter->index++; |
369 | if (likely(*slot)) | 369 | if (likely(*slot)) |
370 | return slot; | 370 | return slot; |
371 | if (flags & RADIX_TREE_ITER_CONTIG) | 371 | if (flags & RADIX_TREE_ITER_CONTIG) { |
372 | /* forbid switching to the next chunk */ | ||
373 | iter->next_index = 0; | ||
372 | break; | 374 | break; |
375 | } | ||
373 | } | 376 | } |
374 | } | 377 | } |
375 | return NULL; | 378 | return NULL; |
diff --git a/include/linux/res_counter.h b/include/linux/res_counter.h index fb201896a8b0..7d7fbe2ef782 100644 --- a/include/linux/res_counter.h +++ b/include/linux/res_counter.h | |||
@@ -119,7 +119,7 @@ int __must_check res_counter_charge_locked(struct res_counter *counter, | |||
119 | unsigned long val, bool force); | 119 | unsigned long val, bool force); |
120 | int __must_check res_counter_charge(struct res_counter *counter, | 120 | int __must_check res_counter_charge(struct res_counter *counter, |
121 | unsigned long val, struct res_counter **limit_fail_at); | 121 | unsigned long val, struct res_counter **limit_fail_at); |
122 | int __must_check res_counter_charge_nofail(struct res_counter *counter, | 122 | int res_counter_charge_nofail(struct res_counter *counter, |
123 | unsigned long val, struct res_counter **limit_fail_at); | 123 | unsigned long val, struct res_counter **limit_fail_at); |
124 | 124 | ||
125 | /* | 125 | /* |
@@ -135,6 +135,9 @@ int __must_check res_counter_charge_nofail(struct res_counter *counter, | |||
135 | void res_counter_uncharge_locked(struct res_counter *counter, unsigned long val); | 135 | void res_counter_uncharge_locked(struct res_counter *counter, unsigned long val); |
136 | void res_counter_uncharge(struct res_counter *counter, unsigned long val); | 136 | void res_counter_uncharge(struct res_counter *counter, unsigned long val); |
137 | 137 | ||
138 | void res_counter_uncharge_until(struct res_counter *counter, | ||
139 | struct res_counter *top, | ||
140 | unsigned long val); | ||
138 | /** | 141 | /** |
139 | * res_counter_margin - calculate chargeable space of a counter | 142 | * res_counter_margin - calculate chargeable space of a counter |
140 | * @cnt: the counter | 143 | * @cnt: the counter |
diff --git a/include/linux/rio.h b/include/linux/rio.h index 4d50611112ba..a90ebadd9da0 100644 --- a/include/linux/rio.h +++ b/include/linux/rio.h | |||
@@ -20,6 +20,9 @@ | |||
20 | #include <linux/errno.h> | 20 | #include <linux/errno.h> |
21 | #include <linux/device.h> | 21 | #include <linux/device.h> |
22 | #include <linux/rio_regs.h> | 22 | #include <linux/rio_regs.h> |
23 | #ifdef CONFIG_RAPIDIO_DMA_ENGINE | ||
24 | #include <linux/dmaengine.h> | ||
25 | #endif | ||
23 | 26 | ||
24 | #define RIO_NO_HOPCOUNT -1 | 27 | #define RIO_NO_HOPCOUNT -1 |
25 | #define RIO_INVALID_DESTID 0xffff | 28 | #define RIO_INVALID_DESTID 0xffff |
@@ -254,6 +257,9 @@ struct rio_mport { | |||
254 | u32 phys_efptr; | 257 | u32 phys_efptr; |
255 | unsigned char name[40]; | 258 | unsigned char name[40]; |
256 | void *priv; /* Master port private data */ | 259 | void *priv; /* Master port private data */ |
260 | #ifdef CONFIG_RAPIDIO_DMA_ENGINE | ||
261 | struct dma_device dma; | ||
262 | #endif | ||
257 | }; | 263 | }; |
258 | 264 | ||
259 | /** | 265 | /** |
@@ -395,6 +401,47 @@ union rio_pw_msg { | |||
395 | u32 raw[RIO_PW_MSG_SIZE/sizeof(u32)]; | 401 | u32 raw[RIO_PW_MSG_SIZE/sizeof(u32)]; |
396 | }; | 402 | }; |
397 | 403 | ||
404 | #ifdef CONFIG_RAPIDIO_DMA_ENGINE | ||
405 | |||
406 | /** | ||
407 | * enum rio_write_type - RIO write transaction types used in DMA transfers | ||
408 | * | ||
409 | * Note: RapidIO specification defines write (NWRITE) and | ||
410 | * write-with-response (NWRITE_R) data transfer operations. | ||
411 | * Existing DMA controllers that service RapidIO may use one of these operations | ||
412 | * for entire data transfer or their combination with only the last data packet | ||
413 | * requires response. | ||
414 | */ | ||
415 | enum rio_write_type { | ||
416 | RDW_DEFAULT, /* default method used by DMA driver */ | ||
417 | RDW_ALL_NWRITE, /* all packets use NWRITE */ | ||
418 | RDW_ALL_NWRITE_R, /* all packets use NWRITE_R */ | ||
419 | RDW_LAST_NWRITE_R, /* last packet uses NWRITE_R, others - NWRITE */ | ||
420 | }; | ||
421 | |||
422 | struct rio_dma_ext { | ||
423 | u16 destid; | ||
424 | u64 rio_addr; /* low 64-bits of 66-bit RapidIO address */ | ||
425 | u8 rio_addr_u; /* upper 2-bits of 66-bit RapidIO address */ | ||
426 | enum rio_write_type wr_type; /* preferred RIO write operation type */ | ||
427 | }; | ||
428 | |||
429 | struct rio_dma_data { | ||
430 | /* Local data (as scatterlist) */ | ||
431 | struct scatterlist *sg; /* I/O scatter list */ | ||
432 | unsigned int sg_len; /* size of scatter list */ | ||
433 | /* Remote device address (flat buffer) */ | ||
434 | u64 rio_addr; /* low 64-bits of 66-bit RapidIO address */ | ||
435 | u8 rio_addr_u; /* upper 2-bits of 66-bit RapidIO address */ | ||
436 | enum rio_write_type wr_type; /* preferred RIO write operation type */ | ||
437 | }; | ||
438 | |||
439 | static inline struct rio_mport *dma_to_mport(struct dma_device *ddev) | ||
440 | { | ||
441 | return container_of(ddev, struct rio_mport, dma); | ||
442 | } | ||
443 | #endif /* CONFIG_RAPIDIO_DMA_ENGINE */ | ||
444 | |||
398 | /* Architecture and hardware-specific functions */ | 445 | /* Architecture and hardware-specific functions */ |
399 | extern int rio_register_mport(struct rio_mport *); | 446 | extern int rio_register_mport(struct rio_mport *); |
400 | extern int rio_open_inb_mbox(struct rio_mport *, void *, int, int); | 447 | extern int rio_open_inb_mbox(struct rio_mport *, void *, int, int); |
diff --git a/include/linux/rio_drv.h b/include/linux/rio_drv.h index 7f07470e1ed9..31ad146be316 100644 --- a/include/linux/rio_drv.h +++ b/include/linux/rio_drv.h | |||
@@ -377,6 +377,15 @@ void rio_unregister_driver(struct rio_driver *); | |||
377 | struct rio_dev *rio_dev_get(struct rio_dev *); | 377 | struct rio_dev *rio_dev_get(struct rio_dev *); |
378 | void rio_dev_put(struct rio_dev *); | 378 | void rio_dev_put(struct rio_dev *); |
379 | 379 | ||
380 | #ifdef CONFIG_RAPIDIO_DMA_ENGINE | ||
381 | extern struct dma_chan *rio_request_dma(struct rio_dev *rdev); | ||
382 | extern void rio_release_dma(struct dma_chan *dchan); | ||
383 | extern struct dma_async_tx_descriptor *rio_dma_prep_slave_sg( | ||
384 | struct rio_dev *rdev, struct dma_chan *dchan, | ||
385 | struct rio_dma_data *data, | ||
386 | enum dma_transfer_direction direction, unsigned long flags); | ||
387 | #endif | ||
388 | |||
380 | /** | 389 | /** |
381 | * rio_name - Get the unique RIO device identifier | 390 | * rio_name - Get the unique RIO device identifier |
382 | * @rdev: RIO device | 391 | * @rdev: RIO device |
diff --git a/include/linux/rmap.h b/include/linux/rmap.h index fd07c4542cee..3fce545df394 100644 --- a/include/linux/rmap.h +++ b/include/linux/rmap.h | |||
@@ -173,8 +173,6 @@ enum ttu_flags { | |||
173 | }; | 173 | }; |
174 | #define TTU_ACTION(x) ((x) & TTU_ACTION_MASK) | 174 | #define TTU_ACTION(x) ((x) & TTU_ACTION_MASK) |
175 | 175 | ||
176 | bool is_vma_temporary_stack(struct vm_area_struct *vma); | ||
177 | |||
178 | int try_to_unmap(struct page *, enum ttu_flags flags); | 176 | int try_to_unmap(struct page *, enum ttu_flags flags); |
179 | int try_to_unmap_one(struct page *, struct vm_area_struct *, | 177 | int try_to_unmap_one(struct page *, struct vm_area_struct *, |
180 | unsigned long address, enum ttu_flags flags); | 178 | unsigned long address, enum ttu_flags flags); |
diff --git a/include/linux/rtc.h b/include/linux/rtc.h index fcabfb4873c8..f071b3922c67 100644 --- a/include/linux/rtc.h +++ b/include/linux/rtc.h | |||
@@ -91,6 +91,9 @@ struct rtc_pll_info { | |||
91 | #define RTC_PLL_GET _IOR('p', 0x11, struct rtc_pll_info) /* Get PLL correction */ | 91 | #define RTC_PLL_GET _IOR('p', 0x11, struct rtc_pll_info) /* Get PLL correction */ |
92 | #define RTC_PLL_SET _IOW('p', 0x12, struct rtc_pll_info) /* Set PLL correction */ | 92 | #define RTC_PLL_SET _IOW('p', 0x12, struct rtc_pll_info) /* Set PLL correction */ |
93 | 93 | ||
94 | #define RTC_VL_READ _IOR('p', 0x13, int) /* Voltage low detector */ | ||
95 | #define RTC_VL_CLR _IO('p', 0x14) /* Clear voltage low information */ | ||
96 | |||
94 | /* interrupt flags */ | 97 | /* interrupt flags */ |
95 | #define RTC_IRQF 0x80 /* Any of the following is active */ | 98 | #define RTC_IRQF 0x80 /* Any of the following is active */ |
96 | #define RTC_PF 0x40 /* Periodic interrupt */ | 99 | #define RTC_PF 0x40 /* Periodic interrupt */ |
diff --git a/include/linux/rtc/ds1307.h b/include/linux/rtc/ds1307.h new file mode 100644 index 000000000000..291b1c490367 --- /dev/null +++ b/include/linux/rtc/ds1307.h | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | * ds1307.h - platform_data for the ds1307 (and variants) rtc driver | ||
3 | * (C) Copyright 2012 by Wolfram Sang, Pengutronix e.K. | ||
4 | * same license as the driver | ||
5 | */ | ||
6 | |||
7 | #ifndef _LINUX_DS1307_H | ||
8 | #define _LINUX_DS1307_H | ||
9 | |||
10 | #include <linux/types.h> | ||
11 | |||
12 | #define DS1307_TRICKLE_CHARGER_250_OHM 0x01 | ||
13 | #define DS1307_TRICKLE_CHARGER_2K_OHM 0x02 | ||
14 | #define DS1307_TRICKLE_CHARGER_4K_OHM 0x03 | ||
15 | #define DS1307_TRICKLE_CHARGER_NO_DIODE 0x04 | ||
16 | #define DS1307_TRICKLE_CHARGER_DIODE 0x08 | ||
17 | |||
18 | struct ds1307_platform_data { | ||
19 | u8 trickle_charger_setup; | ||
20 | }; | ||
21 | |||
22 | #endif /* _LINUX_DS1307_H */ | ||
diff --git a/include/linux/sched.h b/include/linux/sched.h index 5ea8baea9387..4059c0f33f07 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
@@ -145,6 +145,7 @@ extern unsigned long this_cpu_load(void); | |||
145 | 145 | ||
146 | 146 | ||
147 | extern void calc_global_load(unsigned long ticks); | 147 | extern void calc_global_load(unsigned long ticks); |
148 | extern void update_cpu_load_nohz(void); | ||
148 | 149 | ||
149 | extern unsigned long get_parent_ip(unsigned long addr); | 150 | extern unsigned long get_parent_ip(unsigned long addr); |
150 | 151 | ||
@@ -438,6 +439,7 @@ extern int get_dumpable(struct mm_struct *mm); | |||
438 | /* leave room for more dump flags */ | 439 | /* leave room for more dump flags */ |
439 | #define MMF_VM_MERGEABLE 16 /* KSM may merge identical pages */ | 440 | #define MMF_VM_MERGEABLE 16 /* KSM may merge identical pages */ |
440 | #define MMF_VM_HUGEPAGE 17 /* set when VM_HUGEPAGE is set on vma */ | 441 | #define MMF_VM_HUGEPAGE 17 /* set when VM_HUGEPAGE is set on vma */ |
442 | #define MMF_EXE_FILE_CHANGED 18 /* see prctl_set_mm_exe_file() */ | ||
441 | 443 | ||
442 | #define MMF_INIT_MASK (MMF_DUMPABLE_MASK | MMF_DUMP_FILTER_MASK) | 444 | #define MMF_INIT_MASK (MMF_DUMPABLE_MASK | MMF_DUMP_FILTER_MASK) |
443 | 445 | ||
@@ -875,6 +877,8 @@ struct sched_group_power { | |||
875 | * Number of busy cpus in this group. | 877 | * Number of busy cpus in this group. |
876 | */ | 878 | */ |
877 | atomic_t nr_busy_cpus; | 879 | atomic_t nr_busy_cpus; |
880 | |||
881 | unsigned long cpumask[0]; /* iteration mask */ | ||
878 | }; | 882 | }; |
879 | 883 | ||
880 | struct sched_group { | 884 | struct sched_group { |
@@ -899,6 +903,15 @@ static inline struct cpumask *sched_group_cpus(struct sched_group *sg) | |||
899 | return to_cpumask(sg->cpumask); | 903 | return to_cpumask(sg->cpumask); |
900 | } | 904 | } |
901 | 905 | ||
906 | /* | ||
907 | * cpumask masking which cpus in the group are allowed to iterate up the domain | ||
908 | * tree. | ||
909 | */ | ||
910 | static inline struct cpumask *sched_group_mask(struct sched_group *sg) | ||
911 | { | ||
912 | return to_cpumask(sg->sgp->cpumask); | ||
913 | } | ||
914 | |||
902 | /** | 915 | /** |
903 | * group_first_cpu - Returns the first cpu in the cpumask of a sched_group. | 916 | * group_first_cpu - Returns the first cpu in the cpumask of a sched_group. |
904 | * @group: The group whose first cpu is to be returned. | 917 | * @group: The group whose first cpu is to be returned. |
@@ -1187,7 +1200,6 @@ struct sched_rt_entity { | |||
1187 | struct list_head run_list; | 1200 | struct list_head run_list; |
1188 | unsigned long timeout; | 1201 | unsigned long timeout; |
1189 | unsigned int time_slice; | 1202 | unsigned int time_slice; |
1190 | int nr_cpus_allowed; | ||
1191 | 1203 | ||
1192 | struct sched_rt_entity *back; | 1204 | struct sched_rt_entity *back; |
1193 | #ifdef CONFIG_RT_GROUP_SCHED | 1205 | #ifdef CONFIG_RT_GROUP_SCHED |
@@ -1252,6 +1264,7 @@ struct task_struct { | |||
1252 | #endif | 1264 | #endif |
1253 | 1265 | ||
1254 | unsigned int policy; | 1266 | unsigned int policy; |
1267 | int nr_cpus_allowed; | ||
1255 | cpumask_t cpus_allowed; | 1268 | cpumask_t cpus_allowed; |
1256 | 1269 | ||
1257 | #ifdef CONFIG_PREEMPT_RCU | 1270 | #ifdef CONFIG_PREEMPT_RCU |
@@ -1301,11 +1314,6 @@ struct task_struct { | |||
1301 | unsigned sched_reset_on_fork:1; | 1314 | unsigned sched_reset_on_fork:1; |
1302 | unsigned sched_contributes_to_load:1; | 1315 | unsigned sched_contributes_to_load:1; |
1303 | 1316 | ||
1304 | #ifdef CONFIG_GENERIC_HARDIRQS | ||
1305 | /* IRQ handler threads */ | ||
1306 | unsigned irq_thread:1; | ||
1307 | #endif | ||
1308 | |||
1309 | pid_t pid; | 1317 | pid_t pid; |
1310 | pid_t tgid; | 1318 | pid_t tgid; |
1311 | 1319 | ||
@@ -1313,10 +1321,9 @@ struct task_struct { | |||
1313 | /* Canary value for the -fstack-protector gcc feature */ | 1321 | /* Canary value for the -fstack-protector gcc feature */ |
1314 | unsigned long stack_canary; | 1322 | unsigned long stack_canary; |
1315 | #endif | 1323 | #endif |
1316 | 1324 | /* | |
1317 | /* | ||
1318 | * pointers to (original) parent process, youngest child, younger sibling, | 1325 | * pointers to (original) parent process, youngest child, younger sibling, |
1319 | * older sibling, respectively. (p->father can be replaced with | 1326 | * older sibling, respectively. (p->father can be replaced with |
1320 | * p->real_parent->pid) | 1327 | * p->real_parent->pid) |
1321 | */ | 1328 | */ |
1322 | struct task_struct __rcu *real_parent; /* real parent process */ | 1329 | struct task_struct __rcu *real_parent; /* real parent process */ |
@@ -1363,8 +1370,6 @@ struct task_struct { | |||
1363 | * credentials (COW) */ | 1370 | * credentials (COW) */ |
1364 | const struct cred __rcu *cred; /* effective (overridable) subjective task | 1371 | const struct cred __rcu *cred; /* effective (overridable) subjective task |
1365 | * credentials (COW) */ | 1372 | * credentials (COW) */ |
1366 | struct cred *replacement_session_keyring; /* for KEYCTL_SESSION_TO_PARENT */ | ||
1367 | |||
1368 | char comm[TASK_COMM_LEN]; /* executable name excluding path | 1373 | char comm[TASK_COMM_LEN]; /* executable name excluding path |
1369 | - access with [gs]et_task_comm (which lock | 1374 | - access with [gs]et_task_comm (which lock |
1370 | it with task_lock()) | 1375 | it with task_lock()) |
@@ -1400,6 +1405,8 @@ struct task_struct { | |||
1400 | int (*notifier)(void *priv); | 1405 | int (*notifier)(void *priv); |
1401 | void *notifier_data; | 1406 | void *notifier_data; |
1402 | sigset_t *notifier_mask; | 1407 | sigset_t *notifier_mask; |
1408 | struct hlist_head task_works; | ||
1409 | |||
1403 | struct audit_context *audit_context; | 1410 | struct audit_context *audit_context; |
1404 | #ifdef CONFIG_AUDITSYSCALL | 1411 | #ifdef CONFIG_AUDITSYSCALL |
1405 | uid_t loginuid; | 1412 | uid_t loginuid; |
@@ -1572,6 +1579,10 @@ struct task_struct { | |||
1572 | #ifdef CONFIG_HAVE_HW_BREAKPOINT | 1579 | #ifdef CONFIG_HAVE_HW_BREAKPOINT |
1573 | atomic_t ptrace_bp_refcnt; | 1580 | atomic_t ptrace_bp_refcnt; |
1574 | #endif | 1581 | #endif |
1582 | #ifdef CONFIG_UPROBES | ||
1583 | struct uprobe_task *utask; | ||
1584 | int uprobe_srcu_id; | ||
1585 | #endif | ||
1575 | }; | 1586 | }; |
1576 | 1587 | ||
1577 | /* Future-safe accessor for struct task_struct's cpus_allowed. */ | 1588 | /* Future-safe accessor for struct task_struct's cpus_allowed. */ |
@@ -2209,6 +2220,20 @@ extern int send_sigqueue(struct sigqueue *, struct task_struct *, int group); | |||
2209 | extern int do_sigaction(int, struct k_sigaction *, struct k_sigaction *); | 2220 | extern int do_sigaction(int, struct k_sigaction *, struct k_sigaction *); |
2210 | extern int do_sigaltstack(const stack_t __user *, stack_t __user *, unsigned long); | 2221 | extern int do_sigaltstack(const stack_t __user *, stack_t __user *, unsigned long); |
2211 | 2222 | ||
2223 | static inline void restore_saved_sigmask(void) | ||
2224 | { | ||
2225 | if (test_and_clear_restore_sigmask()) | ||
2226 | __set_current_blocked(¤t->saved_sigmask); | ||
2227 | } | ||
2228 | |||
2229 | static inline sigset_t *sigmask_to_save(void) | ||
2230 | { | ||
2231 | sigset_t *res = ¤t->blocked; | ||
2232 | if (unlikely(test_restore_sigmask())) | ||
2233 | res = ¤t->saved_sigmask; | ||
2234 | return res; | ||
2235 | } | ||
2236 | |||
2212 | static inline int kill_cad_pid(int sig, int priv) | 2237 | static inline int kill_cad_pid(int sig, int priv) |
2213 | { | 2238 | { |
2214 | return kill_pid(cad_pid, sig, priv); | 2239 | return kill_pid(cad_pid, sig, priv); |
diff --git a/include/linux/security.h b/include/linux/security.h index ab0e091ce5fa..4e5a73cdbbef 100644 --- a/include/linux/security.h +++ b/include/linux/security.h | |||
@@ -86,9 +86,9 @@ extern int cap_inode_setxattr(struct dentry *dentry, const char *name, | |||
86 | extern int cap_inode_removexattr(struct dentry *dentry, const char *name); | 86 | extern int cap_inode_removexattr(struct dentry *dentry, const char *name); |
87 | extern int cap_inode_need_killpriv(struct dentry *dentry); | 87 | extern int cap_inode_need_killpriv(struct dentry *dentry); |
88 | extern int cap_inode_killpriv(struct dentry *dentry); | 88 | extern int cap_inode_killpriv(struct dentry *dentry); |
89 | extern int cap_file_mmap(struct file *file, unsigned long reqprot, | 89 | extern int cap_mmap_addr(unsigned long addr); |
90 | unsigned long prot, unsigned long flags, | 90 | extern int cap_mmap_file(struct file *file, unsigned long reqprot, |
91 | unsigned long addr, unsigned long addr_only); | 91 | unsigned long prot, unsigned long flags); |
92 | extern int cap_task_fix_setuid(struct cred *new, const struct cred *old, int flags); | 92 | extern int cap_task_fix_setuid(struct cred *new, const struct cred *old, int flags); |
93 | extern int cap_task_prctl(int option, unsigned long arg2, unsigned long arg3, | 93 | extern int cap_task_prctl(int option, unsigned long arg2, unsigned long arg3, |
94 | unsigned long arg4, unsigned long arg5); | 94 | unsigned long arg4, unsigned long arg5); |
@@ -586,15 +586,17 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
586 | * simple integer value. When @arg represents a user space pointer, it | 586 | * simple integer value. When @arg represents a user space pointer, it |
587 | * should never be used by the security module. | 587 | * should never be used by the security module. |
588 | * Return 0 if permission is granted. | 588 | * Return 0 if permission is granted. |
589 | * @file_mmap : | 589 | * @mmap_addr : |
590 | * Check permissions for a mmap operation at @addr. | ||
591 | * @addr contains virtual address that will be used for the operation. | ||
592 | * Return 0 if permission is granted. | ||
593 | * @mmap_file : | ||
590 | * Check permissions for a mmap operation. The @file may be NULL, e.g. | 594 | * Check permissions for a mmap operation. The @file may be NULL, e.g. |
591 | * if mapping anonymous memory. | 595 | * if mapping anonymous memory. |
592 | * @file contains the file structure for file to map (may be NULL). | 596 | * @file contains the file structure for file to map (may be NULL). |
593 | * @reqprot contains the protection requested by the application. | 597 | * @reqprot contains the protection requested by the application. |
594 | * @prot contains the protection that will be applied by the kernel. | 598 | * @prot contains the protection that will be applied by the kernel. |
595 | * @flags contains the operational flags. | 599 | * @flags contains the operational flags. |
596 | * @addr contains virtual address that will be used for the operation. | ||
597 | * @addr_only contains a boolean: 0 if file-backed VMA, otherwise 1. | ||
598 | * Return 0 if permission is granted. | 600 | * Return 0 if permission is granted. |
599 | * @file_mprotect: | 601 | * @file_mprotect: |
600 | * Check permissions before changing memory access permissions. | 602 | * Check permissions before changing memory access permissions. |
@@ -1481,10 +1483,10 @@ struct security_operations { | |||
1481 | void (*file_free_security) (struct file *file); | 1483 | void (*file_free_security) (struct file *file); |
1482 | int (*file_ioctl) (struct file *file, unsigned int cmd, | 1484 | int (*file_ioctl) (struct file *file, unsigned int cmd, |
1483 | unsigned long arg); | 1485 | unsigned long arg); |
1484 | int (*file_mmap) (struct file *file, | 1486 | int (*mmap_addr) (unsigned long addr); |
1487 | int (*mmap_file) (struct file *file, | ||
1485 | unsigned long reqprot, unsigned long prot, | 1488 | unsigned long reqprot, unsigned long prot, |
1486 | unsigned long flags, unsigned long addr, | 1489 | unsigned long flags); |
1487 | unsigned long addr_only); | ||
1488 | int (*file_mprotect) (struct vm_area_struct *vma, | 1490 | int (*file_mprotect) (struct vm_area_struct *vma, |
1489 | unsigned long reqprot, | 1491 | unsigned long reqprot, |
1490 | unsigned long prot); | 1492 | unsigned long prot); |
@@ -1743,9 +1745,9 @@ int security_file_permission(struct file *file, int mask); | |||
1743 | int security_file_alloc(struct file *file); | 1745 | int security_file_alloc(struct file *file); |
1744 | void security_file_free(struct file *file); | 1746 | void security_file_free(struct file *file); |
1745 | int security_file_ioctl(struct file *file, unsigned int cmd, unsigned long arg); | 1747 | int security_file_ioctl(struct file *file, unsigned int cmd, unsigned long arg); |
1746 | int security_file_mmap(struct file *file, unsigned long reqprot, | 1748 | int security_mmap_file(struct file *file, unsigned long prot, |
1747 | unsigned long prot, unsigned long flags, | 1749 | unsigned long flags); |
1748 | unsigned long addr, unsigned long addr_only); | 1750 | int security_mmap_addr(unsigned long addr); |
1749 | int security_file_mprotect(struct vm_area_struct *vma, unsigned long reqprot, | 1751 | int security_file_mprotect(struct vm_area_struct *vma, unsigned long reqprot, |
1750 | unsigned long prot); | 1752 | unsigned long prot); |
1751 | int security_file_lock(struct file *file, unsigned int cmd); | 1753 | int security_file_lock(struct file *file, unsigned int cmd); |
@@ -2181,13 +2183,15 @@ static inline int security_file_ioctl(struct file *file, unsigned int cmd, | |||
2181 | return 0; | 2183 | return 0; |
2182 | } | 2184 | } |
2183 | 2185 | ||
2184 | static inline int security_file_mmap(struct file *file, unsigned long reqprot, | 2186 | static inline int security_mmap_file(struct file *file, unsigned long prot, |
2185 | unsigned long prot, | 2187 | unsigned long flags) |
2186 | unsigned long flags, | 2188 | { |
2187 | unsigned long addr, | 2189 | return 0; |
2188 | unsigned long addr_only) | 2190 | } |
2191 | |||
2192 | static inline int security_mmap_addr(unsigned long addr) | ||
2189 | { | 2193 | { |
2190 | return cap_file_mmap(file, reqprot, prot, flags, addr, addr_only); | 2194 | return cap_mmap_addr(addr); |
2191 | } | 2195 | } |
2192 | 2196 | ||
2193 | static inline int security_file_mprotect(struct vm_area_struct *vma, | 2197 | static inline int security_file_mprotect(struct vm_area_struct *vma, |
diff --git a/include/linux/serio.h b/include/linux/serio.h index ca82861b0e46..6d6cfd3e94a3 100644 --- a/include/linux/serio.h +++ b/include/linux/serio.h | |||
@@ -96,6 +96,19 @@ int __must_check __serio_register_driver(struct serio_driver *drv, | |||
96 | 96 | ||
97 | void serio_unregister_driver(struct serio_driver *drv); | 97 | void serio_unregister_driver(struct serio_driver *drv); |
98 | 98 | ||
99 | /** | ||
100 | * module_serio_driver() - Helper macro for registering a serio driver | ||
101 | * @__serio_driver: serio_driver struct | ||
102 | * | ||
103 | * Helper macro for serio drivers which do not do anything special in | ||
104 | * module init/exit. This eliminates a lot of boilerplate. Each module | ||
105 | * may only use this macro once, and calling it replaces module_init() | ||
106 | * and module_exit(). | ||
107 | */ | ||
108 | #define module_serio_driver(__serio_driver) \ | ||
109 | module_driver(__serio_driver, serio_register_driver, \ | ||
110 | serio_unregister_driver) | ||
111 | |||
99 | static inline int serio_write(struct serio *serio, unsigned char data) | 112 | static inline int serio_write(struct serio *serio, unsigned char data) |
100 | { | 113 | { |
101 | if (serio->write) | 114 | if (serio->write) |
diff --git a/include/linux/signal.h b/include/linux/signal.h index 17046cc484bc..26b424adc842 100644 --- a/include/linux/signal.h +++ b/include/linux/signal.h | |||
@@ -250,12 +250,13 @@ extern long do_sigpending(void __user *, unsigned long); | |||
250 | extern int do_sigtimedwait(const sigset_t *, siginfo_t *, | 250 | extern int do_sigtimedwait(const sigset_t *, siginfo_t *, |
251 | const struct timespec *); | 251 | const struct timespec *); |
252 | extern int sigprocmask(int, sigset_t *, sigset_t *); | 252 | extern int sigprocmask(int, sigset_t *, sigset_t *); |
253 | extern void set_current_blocked(const sigset_t *); | 253 | extern void set_current_blocked(sigset_t *); |
254 | extern void __set_current_blocked(const sigset_t *); | ||
254 | extern int show_unhandled_signals; | 255 | extern int show_unhandled_signals; |
255 | extern int sigsuspend(sigset_t *); | 256 | extern int sigsuspend(sigset_t *); |
256 | 257 | ||
257 | extern int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka, struct pt_regs *regs, void *cookie); | 258 | extern int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka, struct pt_regs *regs, void *cookie); |
258 | extern void block_sigmask(struct k_sigaction *ka, int signr); | 259 | extern void signal_delivered(int sig, siginfo_t *info, struct k_sigaction *ka, struct pt_regs *regs, int stepping); |
259 | extern void exit_signals(struct task_struct *tsk); | 260 | extern void exit_signals(struct task_struct *tsk); |
260 | 261 | ||
261 | extern struct kmem_cache *sighand_cachep; | 262 | extern struct kmem_cache *sighand_cachep; |
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 0e501714d47f..b534a1be540a 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
@@ -1896,8 +1896,6 @@ static inline int __skb_cow(struct sk_buff *skb, unsigned int headroom, | |||
1896 | { | 1896 | { |
1897 | int delta = 0; | 1897 | int delta = 0; |
1898 | 1898 | ||
1899 | if (headroom < NET_SKB_PAD) | ||
1900 | headroom = NET_SKB_PAD; | ||
1901 | if (headroom > skb_headroom(skb)) | 1899 | if (headroom > skb_headroom(skb)) |
1902 | delta = headroom - skb_headroom(skb); | 1900 | delta = headroom - skb_headroom(skb); |
1903 | 1901 | ||
diff --git a/include/linux/slab.h b/include/linux/slab.h index a595dce6b0c7..67d5d94b783a 100644 --- a/include/linux/slab.h +++ b/include/linux/slab.h | |||
@@ -242,7 +242,7 @@ size_t ksize(const void *); | |||
242 | */ | 242 | */ |
243 | static inline void *kmalloc_array(size_t n, size_t size, gfp_t flags) | 243 | static inline void *kmalloc_array(size_t n, size_t size, gfp_t flags) |
244 | { | 244 | { |
245 | if (size != 0 && n > ULONG_MAX / size) | 245 | if (size != 0 && n > SIZE_MAX / size) |
246 | return NULL; | 246 | return NULL; |
247 | return __kmalloc(n * size, flags); | 247 | return __kmalloc(n * size, flags); |
248 | } | 248 | } |
diff --git a/include/linux/spi/orion_spi.h b/include/linux/spi/orion_spi.h deleted file mode 100644 index b4d9fa6f797c..000000000000 --- a/include/linux/spi/orion_spi.h +++ /dev/null | |||
@@ -1,17 +0,0 @@ | |||
1 | /* | ||
2 | * orion_spi.h | ||
3 | * | ||
4 | * This file is licensed under the terms of the GNU General Public | ||
5 | * License version 2. This program is licensed "as is" without any | ||
6 | * warranty of any kind, whether express or implied. | ||
7 | */ | ||
8 | |||
9 | #ifndef __LINUX_SPI_ORION_SPI_H | ||
10 | #define __LINUX_SPI_ORION_SPI_H | ||
11 | |||
12 | struct orion_spi_info { | ||
13 | u32 tclk; /* no <linux/clk.h> support yet */ | ||
14 | }; | ||
15 | |||
16 | |||
17 | #endif | ||
diff --git a/include/linux/spi/rspi.h b/include/linux/spi/rspi.h new file mode 100644 index 000000000000..900f0e328235 --- /dev/null +++ b/include/linux/spi/rspi.h | |||
@@ -0,0 +1,31 @@ | |||
1 | /* | ||
2 | * Renesas SPI driver | ||
3 | * | ||
4 | * Copyright (C) 2012 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_SPI_RENESAS_SPI_H__ | ||
22 | #define __LINUX_SPI_RENESAS_SPI_H__ | ||
23 | |||
24 | struct rspi_plat_data { | ||
25 | unsigned int dma_tx_id; | ||
26 | unsigned int dma_rx_id; | ||
27 | |||
28 | unsigned dma_width_16bit:1; /* DMAC read/write width = 16-bit */ | ||
29 | }; | ||
30 | |||
31 | #endif | ||
diff --git a/include/linux/ssb/ssb.h b/include/linux/ssb/ssb.h index d27683180025..bc14bd738ade 100644 --- a/include/linux/ssb/ssb.h +++ b/include/linux/ssb/ssb.h | |||
@@ -188,7 +188,6 @@ struct ssb_sprom { | |||
188 | struct ssb_boardinfo { | 188 | struct ssb_boardinfo { |
189 | u16 vendor; | 189 | u16 vendor; |
190 | u16 type; | 190 | u16 type; |
191 | u8 rev; | ||
192 | }; | 191 | }; |
193 | 192 | ||
194 | 193 | ||
diff --git a/include/linux/ssb/ssb_regs.h b/include/linux/ssb/ssb_regs.h index 40b1ef8595ee..a0525019e1d1 100644 --- a/include/linux/ssb/ssb_regs.h +++ b/include/linux/ssb/ssb_regs.h | |||
@@ -228,6 +228,7 @@ | |||
228 | #define SSB_SPROM1_AGAIN_BG_SHIFT 0 | 228 | #define SSB_SPROM1_AGAIN_BG_SHIFT 0 |
229 | #define SSB_SPROM1_AGAIN_A 0xFF00 /* A-PHY */ | 229 | #define SSB_SPROM1_AGAIN_A 0xFF00 /* A-PHY */ |
230 | #define SSB_SPROM1_AGAIN_A_SHIFT 8 | 230 | #define SSB_SPROM1_AGAIN_A_SHIFT 8 |
231 | #define SSB_SPROM1_CCODE 0x0076 | ||
231 | 232 | ||
232 | /* SPROM Revision 2 (inherits from rev 1) */ | 233 | /* SPROM Revision 2 (inherits from rev 1) */ |
233 | #define SSB_SPROM2_BFLHI 0x0038 /* Boardflags (high 16 bits) */ | 234 | #define SSB_SPROM2_BFLHI 0x0038 /* Boardflags (high 16 bits) */ |
@@ -267,6 +268,7 @@ | |||
267 | #define SSB_SPROM3_OFDMGPO 0x107A /* G-PHY OFDM Power Offset (4 bytes, BigEndian) */ | 268 | #define SSB_SPROM3_OFDMGPO 0x107A /* G-PHY OFDM Power Offset (4 bytes, BigEndian) */ |
268 | 269 | ||
269 | /* SPROM Revision 4 */ | 270 | /* SPROM Revision 4 */ |
271 | #define SSB_SPROM4_BOARDREV 0x0042 /* Board revision */ | ||
270 | #define SSB_SPROM4_BFLLO 0x0044 /* Boardflags (low 16 bits) */ | 272 | #define SSB_SPROM4_BFLLO 0x0044 /* Boardflags (low 16 bits) */ |
271 | #define SSB_SPROM4_BFLHI 0x0046 /* Board Flags Hi */ | 273 | #define SSB_SPROM4_BFLHI 0x0046 /* Board Flags Hi */ |
272 | #define SSB_SPROM4_BFL2LO 0x0048 /* Board flags 2 (low 16 bits) */ | 274 | #define SSB_SPROM4_BFL2LO 0x0048 /* Board flags 2 (low 16 bits) */ |
@@ -389,6 +391,11 @@ | |||
389 | #define SSB_SPROM8_GPIOB_P2 0x00FF /* Pin 2 */ | 391 | #define SSB_SPROM8_GPIOB_P2 0x00FF /* Pin 2 */ |
390 | #define SSB_SPROM8_GPIOB_P3 0xFF00 /* Pin 3 */ | 392 | #define SSB_SPROM8_GPIOB_P3 0xFF00 /* Pin 3 */ |
391 | #define SSB_SPROM8_GPIOB_P3_SHIFT 8 | 393 | #define SSB_SPROM8_GPIOB_P3_SHIFT 8 |
394 | #define SSB_SPROM8_LEDDC 0x009A | ||
395 | #define SSB_SPROM8_LEDDC_ON 0xFF00 /* oncount */ | ||
396 | #define SSB_SPROM8_LEDDC_ON_SHIFT 8 | ||
397 | #define SSB_SPROM8_LEDDC_OFF 0x00FF /* offcount */ | ||
398 | #define SSB_SPROM8_LEDDC_OFF_SHIFT 0 | ||
392 | #define SSB_SPROM8_ANTAVAIL 0x009C /* Antenna available bitfields*/ | 399 | #define SSB_SPROM8_ANTAVAIL 0x009C /* Antenna available bitfields*/ |
393 | #define SSB_SPROM8_ANTAVAIL_A 0xFF00 /* A-PHY bitfield */ | 400 | #define SSB_SPROM8_ANTAVAIL_A 0xFF00 /* A-PHY bitfield */ |
394 | #define SSB_SPROM8_ANTAVAIL_A_SHIFT 8 | 401 | #define SSB_SPROM8_ANTAVAIL_A_SHIFT 8 |
@@ -404,6 +411,13 @@ | |||
404 | #define SSB_SPROM8_AGAIN2_SHIFT 0 | 411 | #define SSB_SPROM8_AGAIN2_SHIFT 0 |
405 | #define SSB_SPROM8_AGAIN3 0xFF00 /* Antenna 3 */ | 412 | #define SSB_SPROM8_AGAIN3 0xFF00 /* Antenna 3 */ |
406 | #define SSB_SPROM8_AGAIN3_SHIFT 8 | 413 | #define SSB_SPROM8_AGAIN3_SHIFT 8 |
414 | #define SSB_SPROM8_TXRXC 0x00A2 | ||
415 | #define SSB_SPROM8_TXRXC_TXCHAIN 0x000f | ||
416 | #define SSB_SPROM8_TXRXC_TXCHAIN_SHIFT 0 | ||
417 | #define SSB_SPROM8_TXRXC_RXCHAIN 0x00f0 | ||
418 | #define SSB_SPROM8_TXRXC_RXCHAIN_SHIFT 4 | ||
419 | #define SSB_SPROM8_TXRXC_SWITCH 0xff00 | ||
420 | #define SSB_SPROM8_TXRXC_SWITCH_SHIFT 8 | ||
407 | #define SSB_SPROM8_RSSIPARM2G 0x00A4 /* RSSI params for 2GHz */ | 421 | #define SSB_SPROM8_RSSIPARM2G 0x00A4 /* RSSI params for 2GHz */ |
408 | #define SSB_SPROM8_RSSISMF2G 0x000F | 422 | #define SSB_SPROM8_RSSISMF2G 0x000F |
409 | #define SSB_SPROM8_RSSISMC2G 0x00F0 | 423 | #define SSB_SPROM8_RSSISMC2G 0x00F0 |
@@ -430,6 +444,7 @@ | |||
430 | #define SSB_SPROM8_TRI5GH_SHIFT 8 | 444 | #define SSB_SPROM8_TRI5GH_SHIFT 8 |
431 | #define SSB_SPROM8_RXPO 0x00AC /* RX power offsets */ | 445 | #define SSB_SPROM8_RXPO 0x00AC /* RX power offsets */ |
432 | #define SSB_SPROM8_RXPO2G 0x00FF /* 2GHz RX power offset */ | 446 | #define SSB_SPROM8_RXPO2G 0x00FF /* 2GHz RX power offset */ |
447 | #define SSB_SPROM8_RXPO2G_SHIFT 0 | ||
433 | #define SSB_SPROM8_RXPO5G 0xFF00 /* 5GHz RX power offset */ | 448 | #define SSB_SPROM8_RXPO5G 0xFF00 /* 5GHz RX power offset */ |
434 | #define SSB_SPROM8_RXPO5G_SHIFT 8 | 449 | #define SSB_SPROM8_RXPO5G_SHIFT 8 |
435 | #define SSB_SPROM8_FEM2G 0x00AE | 450 | #define SSB_SPROM8_FEM2G 0x00AE |
@@ -445,10 +460,38 @@ | |||
445 | #define SSB_SROM8_FEM_ANTSWLUT 0xF800 | 460 | #define SSB_SROM8_FEM_ANTSWLUT 0xF800 |
446 | #define SSB_SROM8_FEM_ANTSWLUT_SHIFT 11 | 461 | #define SSB_SROM8_FEM_ANTSWLUT_SHIFT 11 |
447 | #define SSB_SPROM8_THERMAL 0x00B2 | 462 | #define SSB_SPROM8_THERMAL 0x00B2 |
448 | #define SSB_SPROM8_MPWR_RAWTS 0x00B4 | 463 | #define SSB_SPROM8_THERMAL_OFFSET 0x00ff |
449 | #define SSB_SPROM8_TS_SLP_OPT_CORRX 0x00B6 | 464 | #define SSB_SPROM8_THERMAL_OFFSET_SHIFT 0 |
450 | #define SSB_SPROM8_FOC_HWIQ_IQSWP 0x00B8 | 465 | #define SSB_SPROM8_THERMAL_TRESH 0xff00 |
451 | #define SSB_SPROM8_PHYCAL_TEMPDELTA 0x00BA | 466 | #define SSB_SPROM8_THERMAL_TRESH_SHIFT 8 |
467 | /* Temp sense related entries */ | ||
468 | #define SSB_SPROM8_RAWTS 0x00B4 | ||
469 | #define SSB_SPROM8_RAWTS_RAWTEMP 0x01ff | ||
470 | #define SSB_SPROM8_RAWTS_RAWTEMP_SHIFT 0 | ||
471 | #define SSB_SPROM8_RAWTS_MEASPOWER 0xfe00 | ||
472 | #define SSB_SPROM8_RAWTS_MEASPOWER_SHIFT 9 | ||
473 | #define SSB_SPROM8_OPT_CORRX 0x00B6 | ||
474 | #define SSB_SPROM8_OPT_CORRX_TEMP_SLOPE 0x00ff | ||
475 | #define SSB_SPROM8_OPT_CORRX_TEMP_SLOPE_SHIFT 0 | ||
476 | #define SSB_SPROM8_OPT_CORRX_TEMPCORRX 0xfc00 | ||
477 | #define SSB_SPROM8_OPT_CORRX_TEMPCORRX_SHIFT 10 | ||
478 | #define SSB_SPROM8_OPT_CORRX_TEMP_OPTION 0x0300 | ||
479 | #define SSB_SPROM8_OPT_CORRX_TEMP_OPTION_SHIFT 8 | ||
480 | /* FOC: freiquency offset correction, HWIQ: H/W IOCAL enable, IQSWP: IQ CAL swap disable */ | ||
481 | #define SSB_SPROM8_HWIQ_IQSWP 0x00B8 | ||
482 | #define SSB_SPROM8_HWIQ_IQSWP_FREQ_CORR 0x000f | ||
483 | #define SSB_SPROM8_HWIQ_IQSWP_FREQ_CORR_SHIFT 0 | ||
484 | #define SSB_SPROM8_HWIQ_IQSWP_IQCAL_SWP 0x0010 | ||
485 | #define SSB_SPROM8_HWIQ_IQSWP_IQCAL_SWP_SHIFT 4 | ||
486 | #define SSB_SPROM8_HWIQ_IQSWP_HW_IQCAL 0x0020 | ||
487 | #define SSB_SPROM8_HWIQ_IQSWP_HW_IQCAL_SHIFT 5 | ||
488 | #define SSB_SPROM8_TEMPDELTA 0x00BA | ||
489 | #define SSB_SPROM8_TEMPDELTA_PHYCAL 0x00ff | ||
490 | #define SSB_SPROM8_TEMPDELTA_PHYCAL_SHIFT 0 | ||
491 | #define SSB_SPROM8_TEMPDELTA_PERIOD 0x0f00 | ||
492 | #define SSB_SPROM8_TEMPDELTA_PERIOD_SHIFT 8 | ||
493 | #define SSB_SPROM8_TEMPDELTA_HYSTERESIS 0xf000 | ||
494 | #define SSB_SPROM8_TEMPDELTA_HYSTERESIS_SHIFT 12 | ||
452 | 495 | ||
453 | /* There are 4 blocks with power info sharing the same layout */ | 496 | /* There are 4 blocks with power info sharing the same layout */ |
454 | #define SSB_SROM8_PWR_INFO_CORE0 0x00C0 | 497 | #define SSB_SROM8_PWR_INFO_CORE0 0x00C0 |
@@ -513,6 +556,16 @@ | |||
513 | #define SSB_SPROM8_OFDM5GLPO 0x014A /* 5.2GHz OFDM power offset */ | 556 | #define SSB_SPROM8_OFDM5GLPO 0x014A /* 5.2GHz OFDM power offset */ |
514 | #define SSB_SPROM8_OFDM5GHPO 0x014E /* 5.8GHz OFDM power offset */ | 557 | #define SSB_SPROM8_OFDM5GHPO 0x014E /* 5.8GHz OFDM power offset */ |
515 | 558 | ||
559 | #define SSB_SPROM8_2G_MCSPO 0x0152 | ||
560 | #define SSB_SPROM8_5G_MCSPO 0x0162 | ||
561 | #define SSB_SPROM8_5GL_MCSPO 0x0172 | ||
562 | #define SSB_SPROM8_5GH_MCSPO 0x0182 | ||
563 | |||
564 | #define SSB_SPROM8_CDDPO 0x0192 | ||
565 | #define SSB_SPROM8_STBCPO 0x0194 | ||
566 | #define SSB_SPROM8_BW40PO 0x0196 | ||
567 | #define SSB_SPROM8_BWDUPPO 0x0198 | ||
568 | |||
516 | /* Values for boardflags_lo read from SPROM */ | 569 | /* Values for boardflags_lo read from SPROM */ |
517 | #define SSB_BFL_BTCOEXIST 0x0001 /* implements Bluetooth coexistance */ | 570 | #define SSB_BFL_BTCOEXIST 0x0001 /* implements Bluetooth coexistance */ |
518 | #define SSB_BFL_PACTRL 0x0002 /* GPIO 9 controlling the PA */ | 571 | #define SSB_BFL_PACTRL 0x0002 /* GPIO 9 controlling the PA */ |
diff --git a/include/linux/stmp_device.h b/include/linux/stmp_device.h new file mode 100644 index 000000000000..6cf7ec9547cf --- /dev/null +++ b/include/linux/stmp_device.h | |||
@@ -0,0 +1,20 @@ | |||
1 | /* | ||
2 | * basic functions for devices following the "stmp" style register layout | ||
3 | * | ||
4 | * Copyright (C) 2011 Wolfram Sang, Pengutronix e.K. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | */ | ||
11 | |||
12 | #ifndef __STMP_DEVICE_H__ | ||
13 | #define __STMP_DEVICE_H__ | ||
14 | |||
15 | #define STMP_OFFSET_REG_SET 0x4 | ||
16 | #define STMP_OFFSET_REG_CLR 0x8 | ||
17 | #define STMP_OFFSET_REG_TOG 0xc | ||
18 | |||
19 | extern int stmp_reset_block(void __iomem *); | ||
20 | #endif /* __STMP_DEVICE_H__ */ | ||
diff --git a/include/linux/sunrpc/svc.h b/include/linux/sunrpc/svc.h index 51b29ac45a8e..40e0a273faea 100644 --- a/include/linux/sunrpc/svc.h +++ b/include/linux/sunrpc/svc.h | |||
@@ -232,7 +232,6 @@ struct svc_rqst { | |||
232 | struct svc_pool * rq_pool; /* thread pool */ | 232 | struct svc_pool * rq_pool; /* thread pool */ |
233 | struct svc_procedure * rq_procinfo; /* procedure info */ | 233 | struct svc_procedure * rq_procinfo; /* procedure info */ |
234 | struct auth_ops * rq_authop; /* authentication flavour */ | 234 | struct auth_ops * rq_authop; /* authentication flavour */ |
235 | u32 rq_flavor; /* pseudoflavor */ | ||
236 | struct svc_cred rq_cred; /* auth info */ | 235 | struct svc_cred rq_cred; /* auth info */ |
237 | void * rq_xprt_ctxt; /* transport specific context ptr */ | 236 | void * rq_xprt_ctxt; /* transport specific context ptr */ |
238 | struct svc_deferred_req*rq_deferred; /* deferred request we are replaying */ | 237 | struct svc_deferred_req*rq_deferred; /* deferred request we are replaying */ |
@@ -416,6 +415,7 @@ struct svc_procedure { | |||
416 | */ | 415 | */ |
417 | int svc_rpcb_setup(struct svc_serv *serv, struct net *net); | 416 | int svc_rpcb_setup(struct svc_serv *serv, struct net *net); |
418 | void svc_rpcb_cleanup(struct svc_serv *serv, struct net *net); | 417 | void svc_rpcb_cleanup(struct svc_serv *serv, struct net *net); |
418 | int svc_bind(struct svc_serv *serv, struct net *net); | ||
419 | struct svc_serv *svc_create(struct svc_program *, unsigned int, | 419 | struct svc_serv *svc_create(struct svc_program *, unsigned int, |
420 | void (*shutdown)(struct svc_serv *, struct net *net)); | 420 | void (*shutdown)(struct svc_serv *, struct net *net)); |
421 | struct svc_rqst *svc_prepare_thread(struct svc_serv *serv, | 421 | struct svc_rqst *svc_prepare_thread(struct svc_serv *serv, |
diff --git a/include/linux/sunrpc/svcauth.h b/include/linux/sunrpc/svcauth.h index 548790e9113b..dd74084a9799 100644 --- a/include/linux/sunrpc/svcauth.h +++ b/include/linux/sunrpc/svcauth.h | |||
@@ -15,14 +15,23 @@ | |||
15 | #include <linux/sunrpc/msg_prot.h> | 15 | #include <linux/sunrpc/msg_prot.h> |
16 | #include <linux/sunrpc/cache.h> | 16 | #include <linux/sunrpc/cache.h> |
17 | #include <linux/hash.h> | 17 | #include <linux/hash.h> |
18 | #include <linux/cred.h> | ||
18 | 19 | ||
19 | #define SVC_CRED_NGROUPS 32 | ||
20 | struct svc_cred { | 20 | struct svc_cred { |
21 | uid_t cr_uid; | 21 | uid_t cr_uid; |
22 | gid_t cr_gid; | 22 | gid_t cr_gid; |
23 | struct group_info *cr_group_info; | 23 | struct group_info *cr_group_info; |
24 | u32 cr_flavor; /* pseudoflavor */ | ||
25 | char *cr_principal; /* for gss */ | ||
24 | }; | 26 | }; |
25 | 27 | ||
28 | static inline void free_svc_cred(struct svc_cred *cred) | ||
29 | { | ||
30 | if (cred->cr_group_info) | ||
31 | put_group_info(cred->cr_group_info); | ||
32 | kfree(cred->cr_principal); | ||
33 | } | ||
34 | |||
26 | struct svc_rqst; /* forward decl */ | 35 | struct svc_rqst; /* forward decl */ |
27 | struct in6_addr; | 36 | struct in6_addr; |
28 | 37 | ||
@@ -131,7 +140,7 @@ extern struct auth_domain *auth_domain_lookup(char *name, struct auth_domain *ne | |||
131 | extern struct auth_domain *auth_domain_find(char *name); | 140 | extern struct auth_domain *auth_domain_find(char *name); |
132 | extern struct auth_domain *auth_unix_lookup(struct net *net, struct in6_addr *addr); | 141 | extern struct auth_domain *auth_unix_lookup(struct net *net, struct in6_addr *addr); |
133 | extern int auth_unix_forget_old(struct auth_domain *dom); | 142 | extern int auth_unix_forget_old(struct auth_domain *dom); |
134 | extern void svcauth_unix_purge(void); | 143 | extern void svcauth_unix_purge(struct net *net); |
135 | extern void svcauth_unix_info_release(struct svc_xprt *xpt); | 144 | extern void svcauth_unix_info_release(struct svc_xprt *xpt); |
136 | extern int svcauth_unix_set_client(struct svc_rqst *rqstp); | 145 | extern int svcauth_unix_set_client(struct svc_rqst *rqstp); |
137 | 146 | ||
diff --git a/include/linux/sunrpc/svcauth_gss.h b/include/linux/sunrpc/svcauth_gss.h index 7c32daa025eb..726aff1a5201 100644 --- a/include/linux/sunrpc/svcauth_gss.h +++ b/include/linux/sunrpc/svcauth_gss.h | |||
@@ -22,7 +22,6 @@ int gss_svc_init_net(struct net *net); | |||
22 | void gss_svc_shutdown_net(struct net *net); | 22 | void gss_svc_shutdown_net(struct net *net); |
23 | int svcauth_gss_register_pseudoflavor(u32 pseudoflavor, char * name); | 23 | int svcauth_gss_register_pseudoflavor(u32 pseudoflavor, char * name); |
24 | u32 svcauth_gss_flavor(struct auth_domain *dom); | 24 | u32 svcauth_gss_flavor(struct auth_domain *dom); |
25 | char *svc_gss_principal(struct svc_rqst *); | ||
26 | 25 | ||
27 | #endif /* __KERNEL__ */ | 26 | #endif /* __KERNEL__ */ |
28 | #endif /* _LINUX_SUNRPC_SVCAUTH_GSS_H */ | 27 | #endif /* _LINUX_SUNRPC_SVCAUTH_GSS_H */ |
diff --git a/include/linux/swap.h b/include/linux/swap.h index b1fd5c7925fe..c84ec68eaec9 100644 --- a/include/linux/swap.h +++ b/include/linux/swap.h | |||
@@ -197,6 +197,10 @@ struct swap_info_struct { | |||
197 | struct block_device *bdev; /* swap device or bdev of swap file */ | 197 | struct block_device *bdev; /* swap device or bdev of swap file */ |
198 | struct file *swap_file; /* seldom referenced */ | 198 | struct file *swap_file; /* seldom referenced */ |
199 | unsigned int old_block_size; /* seldom referenced */ | 199 | unsigned int old_block_size; /* seldom referenced */ |
200 | #ifdef CONFIG_FRONTSWAP | ||
201 | unsigned long *frontswap_map; /* frontswap in-use, one bit per page */ | ||
202 | atomic_t frontswap_pages; /* frontswap pages in-use counter */ | ||
203 | #endif | ||
200 | }; | 204 | }; |
201 | 205 | ||
202 | struct swap_list_t { | 206 | struct swap_list_t { |
@@ -221,8 +225,8 @@ extern unsigned int nr_free_pagecache_pages(void); | |||
221 | /* linux/mm/swap.c */ | 225 | /* linux/mm/swap.c */ |
222 | extern void __lru_cache_add(struct page *, enum lru_list lru); | 226 | extern void __lru_cache_add(struct page *, enum lru_list lru); |
223 | extern void lru_cache_add_lru(struct page *, enum lru_list lru); | 227 | extern void lru_cache_add_lru(struct page *, enum lru_list lru); |
224 | extern void lru_add_page_tail(struct zone* zone, | 228 | extern void lru_add_page_tail(struct page *page, struct page *page_tail, |
225 | struct page *page, struct page *page_tail); | 229 | struct lruvec *lruvec); |
226 | extern void activate_page(struct page *); | 230 | extern void activate_page(struct page *); |
227 | extern void mark_page_accessed(struct page *); | 231 | extern void mark_page_accessed(struct page *); |
228 | extern void lru_add_drain(void); | 232 | extern void lru_add_drain(void); |
@@ -251,7 +255,7 @@ static inline void lru_cache_add_file(struct page *page) | |||
251 | /* linux/mm/vmscan.c */ | 255 | /* linux/mm/vmscan.c */ |
252 | extern unsigned long try_to_free_pages(struct zonelist *zonelist, int order, | 256 | extern unsigned long try_to_free_pages(struct zonelist *zonelist, int order, |
253 | gfp_t gfp_mask, nodemask_t *mask); | 257 | gfp_t gfp_mask, nodemask_t *mask); |
254 | extern int __isolate_lru_page(struct page *page, isolate_mode_t mode, int file); | 258 | extern int __isolate_lru_page(struct page *page, isolate_mode_t mode); |
255 | extern unsigned long try_to_free_mem_cgroup_pages(struct mem_cgroup *mem, | 259 | extern unsigned long try_to_free_mem_cgroup_pages(struct mem_cgroup *mem, |
256 | gfp_t gfp_mask, bool noswap); | 260 | gfp_t gfp_mask, bool noswap); |
257 | extern unsigned long mem_cgroup_shrink_node_zone(struct mem_cgroup *mem, | 261 | extern unsigned long mem_cgroup_shrink_node_zone(struct mem_cgroup *mem, |
@@ -351,31 +355,14 @@ extern int swap_type_of(dev_t, sector_t, struct block_device **); | |||
351 | extern unsigned int count_swap_pages(int, int); | 355 | extern unsigned int count_swap_pages(int, int); |
352 | extern sector_t map_swap_page(struct page *, struct block_device **); | 356 | extern sector_t map_swap_page(struct page *, struct block_device **); |
353 | extern sector_t swapdev_block(int, pgoff_t); | 357 | extern sector_t swapdev_block(int, pgoff_t); |
358 | extern int page_swapcount(struct page *); | ||
354 | extern int reuse_swap_page(struct page *); | 359 | extern int reuse_swap_page(struct page *); |
355 | extern int try_to_free_swap(struct page *); | 360 | extern int try_to_free_swap(struct page *); |
356 | struct backing_dev_info; | 361 | struct backing_dev_info; |
357 | 362 | ||
358 | /* linux/mm/thrash.c */ | ||
359 | extern struct mm_struct *swap_token_mm; | ||
360 | extern void grab_swap_token(struct mm_struct *); | ||
361 | extern void __put_swap_token(struct mm_struct *); | ||
362 | extern void disable_swap_token(struct mem_cgroup *memcg); | ||
363 | |||
364 | static inline int has_swap_token(struct mm_struct *mm) | ||
365 | { | ||
366 | return (mm == swap_token_mm); | ||
367 | } | ||
368 | |||
369 | static inline void put_swap_token(struct mm_struct *mm) | ||
370 | { | ||
371 | if (has_swap_token(mm)) | ||
372 | __put_swap_token(mm); | ||
373 | } | ||
374 | |||
375 | #ifdef CONFIG_CGROUP_MEM_RES_CTLR | 363 | #ifdef CONFIG_CGROUP_MEM_RES_CTLR |
376 | extern void | 364 | extern void |
377 | mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent, bool swapout); | 365 | mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent, bool swapout); |
378 | extern int mem_cgroup_count_swap_user(swp_entry_t ent, struct page **pagep); | ||
379 | #else | 366 | #else |
380 | static inline void | 367 | static inline void |
381 | mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent, bool swapout) | 368 | mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent, bool swapout) |
@@ -462,6 +449,11 @@ static inline void delete_from_swap_cache(struct page *page) | |||
462 | { | 449 | { |
463 | } | 450 | } |
464 | 451 | ||
452 | static inline int page_swapcount(struct page *page) | ||
453 | { | ||
454 | return 0; | ||
455 | } | ||
456 | |||
465 | #define reuse_swap_page(page) (page_mapcount(page) == 1) | 457 | #define reuse_swap_page(page) (page_mapcount(page) == 1) |
466 | 458 | ||
467 | static inline int try_to_free_swap(struct page *page) | 459 | static inline int try_to_free_swap(struct page *page) |
@@ -476,37 +468,11 @@ static inline swp_entry_t get_swap_page(void) | |||
476 | return entry; | 468 | return entry; |
477 | } | 469 | } |
478 | 470 | ||
479 | /* linux/mm/thrash.c */ | ||
480 | static inline void put_swap_token(struct mm_struct *mm) | ||
481 | { | ||
482 | } | ||
483 | |||
484 | static inline void grab_swap_token(struct mm_struct *mm) | ||
485 | { | ||
486 | } | ||
487 | |||
488 | static inline int has_swap_token(struct mm_struct *mm) | ||
489 | { | ||
490 | return 0; | ||
491 | } | ||
492 | |||
493 | static inline void disable_swap_token(struct mem_cgroup *memcg) | ||
494 | { | ||
495 | } | ||
496 | |||
497 | static inline void | 471 | static inline void |
498 | mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent) | 472 | mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent) |
499 | { | 473 | { |
500 | } | 474 | } |
501 | 475 | ||
502 | #ifdef CONFIG_CGROUP_MEM_RES_CTLR | ||
503 | static inline int | ||
504 | mem_cgroup_count_swap_user(swp_entry_t ent, struct page **pagep) | ||
505 | { | ||
506 | return 0; | ||
507 | } | ||
508 | #endif | ||
509 | |||
510 | #endif /* CONFIG_SWAP */ | 476 | #endif /* CONFIG_SWAP */ |
511 | #endif /* __KERNEL__*/ | 477 | #endif /* __KERNEL__*/ |
512 | #endif /* _LINUX_SWAP_H */ | 478 | #endif /* _LINUX_SWAP_H */ |
diff --git a/include/linux/swapfile.h b/include/linux/swapfile.h new file mode 100644 index 000000000000..e282624e8c10 --- /dev/null +++ b/include/linux/swapfile.h | |||
@@ -0,0 +1,13 @@ | |||
1 | #ifndef _LINUX_SWAPFILE_H | ||
2 | #define _LINUX_SWAPFILE_H | ||
3 | |||
4 | /* | ||
5 | * these were static in swapfile.c but frontswap.c needs them and we don't | ||
6 | * want to expose them to the dozens of source files that include swap.h | ||
7 | */ | ||
8 | extern spinlock_t swap_lock; | ||
9 | extern struct swap_list_t swap_list; | ||
10 | extern struct swap_info_struct *swap_info[]; | ||
11 | extern int try_to_unuse(unsigned int, bool, unsigned long); | ||
12 | |||
13 | #endif /* _LINUX_SWAPFILE_H */ | ||
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index 3de3acb84a95..19439c75c5b2 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h | |||
@@ -858,4 +858,6 @@ asmlinkage long sys_process_vm_writev(pid_t pid, | |||
858 | unsigned long riovcnt, | 858 | unsigned long riovcnt, |
859 | unsigned long flags); | 859 | unsigned long flags); |
860 | 860 | ||
861 | asmlinkage long sys_kcmp(pid_t pid1, pid_t pid2, int type, | ||
862 | unsigned long idx1, unsigned long idx2); | ||
861 | #endif | 863 | #endif |
diff --git a/include/linux/task_work.h b/include/linux/task_work.h new file mode 100644 index 000000000000..294d5d5e90b1 --- /dev/null +++ b/include/linux/task_work.h | |||
@@ -0,0 +1,33 @@ | |||
1 | #ifndef _LINUX_TASK_WORK_H | ||
2 | #define _LINUX_TASK_WORK_H | ||
3 | |||
4 | #include <linux/list.h> | ||
5 | #include <linux/sched.h> | ||
6 | |||
7 | struct task_work; | ||
8 | typedef void (*task_work_func_t)(struct task_work *); | ||
9 | |||
10 | struct task_work { | ||
11 | struct hlist_node hlist; | ||
12 | task_work_func_t func; | ||
13 | void *data; | ||
14 | }; | ||
15 | |||
16 | static inline void | ||
17 | init_task_work(struct task_work *twork, task_work_func_t func, void *data) | ||
18 | { | ||
19 | twork->func = func; | ||
20 | twork->data = data; | ||
21 | } | ||
22 | |||
23 | int task_work_add(struct task_struct *task, struct task_work *twork, bool); | ||
24 | struct task_work *task_work_cancel(struct task_struct *, task_work_func_t); | ||
25 | void task_work_run(void); | ||
26 | |||
27 | static inline void exit_task_work(struct task_struct *task) | ||
28 | { | ||
29 | if (unlikely(!hlist_empty(&task->task_works))) | ||
30 | task_work_run(); | ||
31 | } | ||
32 | |||
33 | #endif /* _LINUX_TASK_WORK_H */ | ||
diff --git a/include/linux/thread_info.h b/include/linux/thread_info.h index db78775eff3b..ccc1899bd62e 100644 --- a/include/linux/thread_info.h +++ b/include/linux/thread_info.h | |||
@@ -8,6 +8,7 @@ | |||
8 | #define _LINUX_THREAD_INFO_H | 8 | #define _LINUX_THREAD_INFO_H |
9 | 9 | ||
10 | #include <linux/types.h> | 10 | #include <linux/types.h> |
11 | #include <linux/bug.h> | ||
11 | 12 | ||
12 | struct timespec; | 13 | struct timespec; |
13 | struct compat_timespec; | 14 | struct compat_timespec; |
@@ -125,10 +126,26 @@ static inline int test_ti_thread_flag(struct thread_info *ti, int flag) | |||
125 | static inline void set_restore_sigmask(void) | 126 | static inline void set_restore_sigmask(void) |
126 | { | 127 | { |
127 | set_thread_flag(TIF_RESTORE_SIGMASK); | 128 | set_thread_flag(TIF_RESTORE_SIGMASK); |
128 | set_thread_flag(TIF_SIGPENDING); | 129 | WARN_ON(!test_thread_flag(TIF_SIGPENDING)); |
130 | } | ||
131 | static inline void clear_restore_sigmask(void) | ||
132 | { | ||
133 | clear_thread_flag(TIF_RESTORE_SIGMASK); | ||
134 | } | ||
135 | static inline bool test_restore_sigmask(void) | ||
136 | { | ||
137 | return test_thread_flag(TIF_RESTORE_SIGMASK); | ||
138 | } | ||
139 | static inline bool test_and_clear_restore_sigmask(void) | ||
140 | { | ||
141 | return test_and_clear_thread_flag(TIF_RESTORE_SIGMASK); | ||
129 | } | 142 | } |
130 | #endif /* TIF_RESTORE_SIGMASK && !HAVE_SET_RESTORE_SIGMASK */ | 143 | #endif /* TIF_RESTORE_SIGMASK && !HAVE_SET_RESTORE_SIGMASK */ |
131 | 144 | ||
145 | #ifndef HAVE_SET_RESTORE_SIGMASK | ||
146 | #error "no set_restore_sigmask() provided and default one won't work" | ||
147 | #endif | ||
148 | |||
132 | #endif /* __KERNEL__ */ | 149 | #endif /* __KERNEL__ */ |
133 | 150 | ||
134 | #endif /* _LINUX_THREAD_INFO_H */ | 151 | #endif /* _LINUX_THREAD_INFO_H */ |
diff --git a/include/linux/time.h b/include/linux/time.h index 33a92ead4d88..179f4d6755fc 100644 --- a/include/linux/time.h +++ b/include/linux/time.h | |||
@@ -167,7 +167,6 @@ extern void get_monotonic_boottime(struct timespec *ts); | |||
167 | extern struct timespec timespec_trunc(struct timespec t, unsigned gran); | 167 | extern struct timespec timespec_trunc(struct timespec t, unsigned gran); |
168 | extern int timekeeping_valid_for_hres(void); | 168 | extern int timekeeping_valid_for_hres(void); |
169 | extern u64 timekeeping_max_deferment(void); | 169 | extern u64 timekeeping_max_deferment(void); |
170 | extern void timekeeping_leap_insert(int leapsecond); | ||
171 | extern int timekeeping_inject_offset(struct timespec *ts); | 170 | extern int timekeeping_inject_offset(struct timespec *ts); |
172 | 171 | ||
173 | struct tms; | 172 | struct tms; |
diff --git a/include/linux/tracehook.h b/include/linux/tracehook.h index 51bd91d911c3..6a4d82bedb03 100644 --- a/include/linux/tracehook.h +++ b/include/linux/tracehook.h | |||
@@ -49,6 +49,7 @@ | |||
49 | #include <linux/sched.h> | 49 | #include <linux/sched.h> |
50 | #include <linux/ptrace.h> | 50 | #include <linux/ptrace.h> |
51 | #include <linux/security.h> | 51 | #include <linux/security.h> |
52 | #include <linux/task_work.h> | ||
52 | struct linux_binprm; | 53 | struct linux_binprm; |
53 | 54 | ||
54 | /* | 55 | /* |
@@ -153,7 +154,6 @@ static inline void tracehook_signal_handler(int sig, siginfo_t *info, | |||
153 | ptrace_notify(SIGTRAP); | 154 | ptrace_notify(SIGTRAP); |
154 | } | 155 | } |
155 | 156 | ||
156 | #ifdef TIF_NOTIFY_RESUME | ||
157 | /** | 157 | /** |
158 | * set_notify_resume - cause tracehook_notify_resume() to be called | 158 | * set_notify_resume - cause tracehook_notify_resume() to be called |
159 | * @task: task that will call tracehook_notify_resume() | 159 | * @task: task that will call tracehook_notify_resume() |
@@ -165,8 +165,10 @@ static inline void tracehook_signal_handler(int sig, siginfo_t *info, | |||
165 | */ | 165 | */ |
166 | static inline void set_notify_resume(struct task_struct *task) | 166 | static inline void set_notify_resume(struct task_struct *task) |
167 | { | 167 | { |
168 | #ifdef TIF_NOTIFY_RESUME | ||
168 | if (!test_and_set_tsk_thread_flag(task, TIF_NOTIFY_RESUME)) | 169 | if (!test_and_set_tsk_thread_flag(task, TIF_NOTIFY_RESUME)) |
169 | kick_process(task); | 170 | kick_process(task); |
171 | #endif | ||
170 | } | 172 | } |
171 | 173 | ||
172 | /** | 174 | /** |
@@ -184,7 +186,14 @@ static inline void set_notify_resume(struct task_struct *task) | |||
184 | */ | 186 | */ |
185 | static inline void tracehook_notify_resume(struct pt_regs *regs) | 187 | static inline void tracehook_notify_resume(struct pt_regs *regs) |
186 | { | 188 | { |
189 | /* | ||
190 | * The caller just cleared TIF_NOTIFY_RESUME. This barrier | ||
191 | * pairs with task_work_add()->set_notify_resume() after | ||
192 | * hlist_add_head(task->task_works); | ||
193 | */ | ||
194 | smp_mb__after_clear_bit(); | ||
195 | if (unlikely(!hlist_empty(¤t->task_works))) | ||
196 | task_work_run(); | ||
187 | } | 197 | } |
188 | #endif /* TIF_NOTIFY_RESUME */ | ||
189 | 198 | ||
190 | #endif /* <linux/tracehook.h> */ | 199 | #endif /* <linux/tracehook.h> */ |
diff --git a/include/linux/tty.h b/include/linux/tty.h index 4990ef2b1fb7..9f47ab540f65 100644 --- a/include/linux/tty.h +++ b/include/linux/tty.h | |||
@@ -268,7 +268,6 @@ struct tty_struct { | |||
268 | struct mutex ldisc_mutex; | 268 | struct mutex ldisc_mutex; |
269 | struct tty_ldisc *ldisc; | 269 | struct tty_ldisc *ldisc; |
270 | 270 | ||
271 | struct mutex legacy_mutex; | ||
272 | struct mutex termios_mutex; | 271 | struct mutex termios_mutex; |
273 | spinlock_t ctrl_lock; | 272 | spinlock_t ctrl_lock; |
274 | /* Termios values are protected by the termios mutex */ | 273 | /* Termios values are protected by the termios mutex */ |
@@ -606,12 +605,8 @@ extern long vt_compat_ioctl(struct tty_struct *tty, | |||
606 | 605 | ||
607 | /* tty_mutex.c */ | 606 | /* tty_mutex.c */ |
608 | /* functions for preparation of BKL removal */ | 607 | /* functions for preparation of BKL removal */ |
609 | extern void __lockfunc tty_lock(struct tty_struct *tty); | 608 | extern void __lockfunc tty_lock(void) __acquires(tty_lock); |
610 | extern void __lockfunc tty_unlock(struct tty_struct *tty); | 609 | extern void __lockfunc tty_unlock(void) __releases(tty_lock); |
611 | extern void __lockfunc tty_lock_pair(struct tty_struct *tty, | ||
612 | struct tty_struct *tty2); | ||
613 | extern void __lockfunc tty_unlock_pair(struct tty_struct *tty, | ||
614 | struct tty_struct *tty2); | ||
615 | 610 | ||
616 | /* | 611 | /* |
617 | * this shall be called only from where BTM is held (like close) | 612 | * this shall be called only from where BTM is held (like close) |
@@ -626,9 +621,9 @@ extern void __lockfunc tty_unlock_pair(struct tty_struct *tty, | |||
626 | static inline void tty_wait_until_sent_from_close(struct tty_struct *tty, | 621 | static inline void tty_wait_until_sent_from_close(struct tty_struct *tty, |
627 | long timeout) | 622 | long timeout) |
628 | { | 623 | { |
629 | tty_unlock(tty); /* tty->ops->close holds the BTM, drop it while waiting */ | 624 | tty_unlock(); /* tty->ops->close holds the BTM, drop it while waiting */ |
630 | tty_wait_until_sent(tty, timeout); | 625 | tty_wait_until_sent(tty, timeout); |
631 | tty_lock(tty); | 626 | tty_lock(); |
632 | } | 627 | } |
633 | 628 | ||
634 | /* | 629 | /* |
@@ -643,16 +638,16 @@ static inline void tty_wait_until_sent_from_close(struct tty_struct *tty, | |||
643 | * | 638 | * |
644 | * Do not use in new code. | 639 | * Do not use in new code. |
645 | */ | 640 | */ |
646 | #define wait_event_interruptible_tty(tty, wq, condition) \ | 641 | #define wait_event_interruptible_tty(wq, condition) \ |
647 | ({ \ | 642 | ({ \ |
648 | int __ret = 0; \ | 643 | int __ret = 0; \ |
649 | if (!(condition)) { \ | 644 | if (!(condition)) { \ |
650 | __wait_event_interruptible_tty(tty, wq, condition, __ret); \ | 645 | __wait_event_interruptible_tty(wq, condition, __ret); \ |
651 | } \ | 646 | } \ |
652 | __ret; \ | 647 | __ret; \ |
653 | }) | 648 | }) |
654 | 649 | ||
655 | #define __wait_event_interruptible_tty(tty, wq, condition, ret) \ | 650 | #define __wait_event_interruptible_tty(wq, condition, ret) \ |
656 | do { \ | 651 | do { \ |
657 | DEFINE_WAIT(__wait); \ | 652 | DEFINE_WAIT(__wait); \ |
658 | \ | 653 | \ |
@@ -661,9 +656,9 @@ do { \ | |||
661 | if (condition) \ | 656 | if (condition) \ |
662 | break; \ | 657 | break; \ |
663 | if (!signal_pending(current)) { \ | 658 | if (!signal_pending(current)) { \ |
664 | tty_unlock(tty); \ | 659 | tty_unlock(); \ |
665 | schedule(); \ | 660 | schedule(); \ |
666 | tty_lock(tty); \ | 661 | tty_lock(); \ |
667 | continue; \ | 662 | continue; \ |
668 | } \ | 663 | } \ |
669 | ret = -ERESTARTSYS; \ | 664 | ret = -ERESTARTSYS; \ |
diff --git a/include/linux/types.h b/include/linux/types.h index 7f480db60231..9c1bd539ea70 100644 --- a/include/linux/types.h +++ b/include/linux/types.h | |||
@@ -25,7 +25,7 @@ typedef __kernel_dev_t dev_t; | |||
25 | typedef __kernel_ino_t ino_t; | 25 | typedef __kernel_ino_t ino_t; |
26 | typedef __kernel_mode_t mode_t; | 26 | typedef __kernel_mode_t mode_t; |
27 | typedef unsigned short umode_t; | 27 | typedef unsigned short umode_t; |
28 | typedef __kernel_nlink_t nlink_t; | 28 | typedef __u32 nlink_t; |
29 | typedef __kernel_off_t off_t; | 29 | typedef __kernel_off_t off_t; |
30 | typedef __kernel_pid_t pid_t; | 30 | typedef __kernel_pid_t pid_t; |
31 | typedef __kernel_daddr_t daddr_t; | 31 | typedef __kernel_daddr_t daddr_t; |
diff --git a/include/linux/uprobes.h b/include/linux/uprobes.h new file mode 100644 index 000000000000..efe4b3308c74 --- /dev/null +++ b/include/linux/uprobes.h | |||
@@ -0,0 +1,165 @@ | |||
1 | #ifndef _LINUX_UPROBES_H | ||
2 | #define _LINUX_UPROBES_H | ||
3 | /* | ||
4 | * User-space Probes (UProbes) | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
19 | * | ||
20 | * Copyright (C) IBM Corporation, 2008-2012 | ||
21 | * Authors: | ||
22 | * Srikar Dronamraju | ||
23 | * Jim Keniston | ||
24 | * Copyright (C) 2011-2012 Red Hat, Inc., Peter Zijlstra <pzijlstr@redhat.com> | ||
25 | */ | ||
26 | |||
27 | #include <linux/errno.h> | ||
28 | #include <linux/rbtree.h> | ||
29 | |||
30 | struct vm_area_struct; | ||
31 | struct mm_struct; | ||
32 | struct inode; | ||
33 | |||
34 | #ifdef CONFIG_ARCH_SUPPORTS_UPROBES | ||
35 | # include <asm/uprobes.h> | ||
36 | #endif | ||
37 | |||
38 | /* flags that denote/change uprobes behaviour */ | ||
39 | |||
40 | /* Have a copy of original instruction */ | ||
41 | #define UPROBE_COPY_INSN 0x1 | ||
42 | |||
43 | /* Dont run handlers when first register/ last unregister in progress*/ | ||
44 | #define UPROBE_RUN_HANDLER 0x2 | ||
45 | /* Can skip singlestep */ | ||
46 | #define UPROBE_SKIP_SSTEP 0x4 | ||
47 | |||
48 | struct uprobe_consumer { | ||
49 | int (*handler)(struct uprobe_consumer *self, struct pt_regs *regs); | ||
50 | /* | ||
51 | * filter is optional; If a filter exists, handler is run | ||
52 | * if and only if filter returns true. | ||
53 | */ | ||
54 | bool (*filter)(struct uprobe_consumer *self, struct task_struct *task); | ||
55 | |||
56 | struct uprobe_consumer *next; | ||
57 | }; | ||
58 | |||
59 | #ifdef CONFIG_UPROBES | ||
60 | enum uprobe_task_state { | ||
61 | UTASK_RUNNING, | ||
62 | UTASK_BP_HIT, | ||
63 | UTASK_SSTEP, | ||
64 | UTASK_SSTEP_ACK, | ||
65 | UTASK_SSTEP_TRAPPED, | ||
66 | }; | ||
67 | |||
68 | /* | ||
69 | * uprobe_task: Metadata of a task while it singlesteps. | ||
70 | */ | ||
71 | struct uprobe_task { | ||
72 | enum uprobe_task_state state; | ||
73 | struct arch_uprobe_task autask; | ||
74 | |||
75 | struct uprobe *active_uprobe; | ||
76 | |||
77 | unsigned long xol_vaddr; | ||
78 | unsigned long vaddr; | ||
79 | }; | ||
80 | |||
81 | /* | ||
82 | * On a breakpoint hit, thread contests for a slot. It frees the | ||
83 | * slot after singlestep. Currently a fixed number of slots are | ||
84 | * allocated. | ||
85 | */ | ||
86 | struct xol_area { | ||
87 | wait_queue_head_t wq; /* if all slots are busy */ | ||
88 | atomic_t slot_count; /* number of in-use slots */ | ||
89 | unsigned long *bitmap; /* 0 = free slot */ | ||
90 | struct page *page; | ||
91 | |||
92 | /* | ||
93 | * We keep the vma's vm_start rather than a pointer to the vma | ||
94 | * itself. The probed process or a naughty kernel module could make | ||
95 | * the vma go away, and we must handle that reasonably gracefully. | ||
96 | */ | ||
97 | unsigned long vaddr; /* Page(s) of instruction slots */ | ||
98 | }; | ||
99 | |||
100 | struct uprobes_state { | ||
101 | struct xol_area *xol_area; | ||
102 | atomic_t count; | ||
103 | }; | ||
104 | extern int __weak set_swbp(struct arch_uprobe *aup, struct mm_struct *mm, unsigned long vaddr); | ||
105 | extern int __weak set_orig_insn(struct arch_uprobe *aup, struct mm_struct *mm, unsigned long vaddr, bool verify); | ||
106 | extern bool __weak is_swbp_insn(uprobe_opcode_t *insn); | ||
107 | extern int uprobe_register(struct inode *inode, loff_t offset, struct uprobe_consumer *uc); | ||
108 | extern void uprobe_unregister(struct inode *inode, loff_t offset, struct uprobe_consumer *uc); | ||
109 | extern int uprobe_mmap(struct vm_area_struct *vma); | ||
110 | extern void uprobe_munmap(struct vm_area_struct *vma, unsigned long start, unsigned long end); | ||
111 | extern void uprobe_free_utask(struct task_struct *t); | ||
112 | extern void uprobe_copy_process(struct task_struct *t); | ||
113 | extern unsigned long __weak uprobe_get_swbp_addr(struct pt_regs *regs); | ||
114 | extern int uprobe_post_sstep_notifier(struct pt_regs *regs); | ||
115 | extern int uprobe_pre_sstep_notifier(struct pt_regs *regs); | ||
116 | extern void uprobe_notify_resume(struct pt_regs *regs); | ||
117 | extern bool uprobe_deny_signal(void); | ||
118 | extern bool __weak arch_uprobe_skip_sstep(struct arch_uprobe *aup, struct pt_regs *regs); | ||
119 | extern void uprobe_clear_state(struct mm_struct *mm); | ||
120 | extern void uprobe_reset_state(struct mm_struct *mm); | ||
121 | #else /* !CONFIG_UPROBES */ | ||
122 | struct uprobes_state { | ||
123 | }; | ||
124 | static inline int | ||
125 | uprobe_register(struct inode *inode, loff_t offset, struct uprobe_consumer *uc) | ||
126 | { | ||
127 | return -ENOSYS; | ||
128 | } | ||
129 | static inline void | ||
130 | uprobe_unregister(struct inode *inode, loff_t offset, struct uprobe_consumer *uc) | ||
131 | { | ||
132 | } | ||
133 | static inline int uprobe_mmap(struct vm_area_struct *vma) | ||
134 | { | ||
135 | return 0; | ||
136 | } | ||
137 | static inline void | ||
138 | uprobe_munmap(struct vm_area_struct *vma, unsigned long start, unsigned long end) | ||
139 | { | ||
140 | } | ||
141 | static inline void uprobe_notify_resume(struct pt_regs *regs) | ||
142 | { | ||
143 | } | ||
144 | static inline bool uprobe_deny_signal(void) | ||
145 | { | ||
146 | return false; | ||
147 | } | ||
148 | static inline unsigned long uprobe_get_swbp_addr(struct pt_regs *regs) | ||
149 | { | ||
150 | return 0; | ||
151 | } | ||
152 | static inline void uprobe_free_utask(struct task_struct *t) | ||
153 | { | ||
154 | } | ||
155 | static inline void uprobe_copy_process(struct task_struct *t) | ||
156 | { | ||
157 | } | ||
158 | static inline void uprobe_clear_state(struct mm_struct *mm) | ||
159 | { | ||
160 | } | ||
161 | static inline void uprobe_reset_state(struct mm_struct *mm) | ||
162 | { | ||
163 | } | ||
164 | #endif /* !CONFIG_UPROBES */ | ||
165 | #endif /* _LINUX_UPROBES_H */ | ||
diff --git a/include/linux/v4l2-dv-timings.h b/include/linux/v4l2-dv-timings.h new file mode 100644 index 000000000000..9ef8172e5ed0 --- /dev/null +++ b/include/linux/v4l2-dv-timings.h | |||
@@ -0,0 +1,816 @@ | |||
1 | /* | ||
2 | * V4L2 DV timings header. | ||
3 | * | ||
4 | * Copyright (C) 2012 Hans Verkuil <hans.verkuil@cisco.com> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or | ||
7 | * modify it under the terms of the GNU General Public License | ||
8 | * version 2 as published by the Free Software Foundation. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, but | ||
11 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | * 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 | ||
18 | * 02110-1301 USA | ||
19 | */ | ||
20 | |||
21 | #ifndef _V4L2_DV_TIMINGS_H | ||
22 | #define _V4L2_DV_TIMINGS_H | ||
23 | |||
24 | #if __GNUC__ < 4 || (__GNUC__ == 4 && (__GNUC_MINOR__ < 6)) | ||
25 | /* Sadly gcc versions older than 4.6 have a bug in how they initialize | ||
26 | anonymous unions where they require additional curly brackets. | ||
27 | This violates the C1x standard. This workaround adds the curly brackets | ||
28 | if needed. */ | ||
29 | #define V4L2_INIT_BT_TIMINGS(_width, args...) \ | ||
30 | { .bt = { _width , ## args } } | ||
31 | #else | ||
32 | #define V4L2_INIT_BT_TIMINGS(_width, args...) \ | ||
33 | .bt = { _width , ## args } | ||
34 | #endif | ||
35 | |||
36 | /* CEA-861-E timings (i.e. standard HDTV timings) */ | ||
37 | |||
38 | #define V4L2_DV_BT_CEA_640X480P59_94 { \ | ||
39 | .type = V4L2_DV_BT_656_1120, \ | ||
40 | V4L2_INIT_BT_TIMINGS(640, 480, 0, 0, \ | ||
41 | 25175000, 16, 96, 48, 10, 2, 33, 0, 0, 0, \ | ||
42 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CEA861, 0) \ | ||
43 | } | ||
44 | |||
45 | #define V4L2_DV_BT_CEA_720X480P59_94 { \ | ||
46 | .type = V4L2_DV_BT_656_1120, \ | ||
47 | V4L2_INIT_BT_TIMINGS(720, 480, 0, 0, \ | ||
48 | 27000000, 16, 62, 60, 9, 6, 30, 0, 0, 0, \ | ||
49 | V4L2_DV_BT_STD_CEA861, 0) \ | ||
50 | } | ||
51 | |||
52 | #define V4L2_DV_BT_CEA_720X576P50 { \ | ||
53 | .type = V4L2_DV_BT_656_1120, \ | ||
54 | V4L2_INIT_BT_TIMINGS(720, 576, 0, 0, \ | ||
55 | 27000000, 12, 64, 68, 5, 5, 39, 0, 0, 0, \ | ||
56 | V4L2_DV_BT_STD_CEA861, 0) \ | ||
57 | } | ||
58 | |||
59 | #define V4L2_DV_BT_CEA_1280X720P24 { \ | ||
60 | .type = V4L2_DV_BT_656_1120, \ | ||
61 | V4L2_INIT_BT_TIMINGS(1280, 720, 0, \ | ||
62 | V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ | ||
63 | 59400000, 1760, 40, 220, 5, 5, 20, 0, 0, 0, \ | ||
64 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CEA861, \ | ||
65 | V4L2_DV_FL_CAN_REDUCE_FPS) \ | ||
66 | } | ||
67 | |||
68 | #define V4L2_DV_BT_CEA_1280X720P25 { \ | ||
69 | .type = V4L2_DV_BT_656_1120, \ | ||
70 | V4L2_INIT_BT_TIMINGS(1280, 720, 0, \ | ||
71 | V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ | ||
72 | 74250000, 2420, 40, 220, 5, 5, 20, 0, 0, 0, \ | ||
73 | V4L2_DV_BT_STD_CEA861, 0) \ | ||
74 | } | ||
75 | |||
76 | #define V4L2_DV_BT_CEA_1280X720P30 { \ | ||
77 | .type = V4L2_DV_BT_656_1120, \ | ||
78 | V4L2_INIT_BT_TIMINGS(1280, 720, 0, \ | ||
79 | V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ | ||
80 | 74250000, 1760, 40, 220, 5, 5, 20, 0, 0, 0, \ | ||
81 | V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_CAN_REDUCE_FPS) \ | ||
82 | } | ||
83 | |||
84 | #define V4L2_DV_BT_CEA_1280X720P50 { \ | ||
85 | .type = V4L2_DV_BT_656_1120, \ | ||
86 | V4L2_INIT_BT_TIMINGS(1280, 720, 0, \ | ||
87 | V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ | ||
88 | 74250000, 440, 40, 220, 5, 5, 20, 0, 0, 0, \ | ||
89 | V4L2_DV_BT_STD_CEA861, 0) \ | ||
90 | } | ||
91 | |||
92 | #define V4L2_DV_BT_CEA_1280X720P60 { \ | ||
93 | .type = V4L2_DV_BT_656_1120, \ | ||
94 | V4L2_INIT_BT_TIMINGS(1280, 720, 0, \ | ||
95 | V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ | ||
96 | 74250000, 110, 40, 220, 5, 5, 20, 0, 0, 0, \ | ||
97 | V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_CAN_REDUCE_FPS) \ | ||
98 | } | ||
99 | |||
100 | #define V4L2_DV_BT_CEA_1920X1080P24 { \ | ||
101 | .type = V4L2_DV_BT_656_1120, \ | ||
102 | V4L2_INIT_BT_TIMINGS(1920, 1080, 0, \ | ||
103 | V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ | ||
104 | 74250000, 638, 44, 148, 4, 5, 36, 0, 0, 0, \ | ||
105 | V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_CAN_REDUCE_FPS) \ | ||
106 | } | ||
107 | |||
108 | #define V4L2_DV_BT_CEA_1920X1080P25 { \ | ||
109 | .type = V4L2_DV_BT_656_1120, \ | ||
110 | V4L2_INIT_BT_TIMINGS(1920, 1080, 0, \ | ||
111 | V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ | ||
112 | 74250000, 528, 44, 148, 4, 5, 36, 0, 0, 0, \ | ||
113 | V4L2_DV_BT_STD_CEA861, 0) \ | ||
114 | } | ||
115 | |||
116 | #define V4L2_DV_BT_CEA_1920X1080P30 { \ | ||
117 | .type = V4L2_DV_BT_656_1120, \ | ||
118 | V4L2_INIT_BT_TIMINGS(1920, 1080, 0, \ | ||
119 | V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ | ||
120 | 74250000, 88, 44, 148, 4, 5, 36, 0, 0, 0, \ | ||
121 | V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_CAN_REDUCE_FPS) \ | ||
122 | } | ||
123 | |||
124 | #define V4L2_DV_BT_CEA_1920X1080I50 { \ | ||
125 | .type = V4L2_DV_BT_656_1120, \ | ||
126 | V4L2_INIT_BT_TIMINGS(1920, 1080, 1, \ | ||
127 | V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ | ||
128 | 74250000, 528, 44, 148, 2, 5, 15, 2, 5, 16, \ | ||
129 | V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_HALF_LINE) \ | ||
130 | } | ||
131 | |||
132 | #define V4L2_DV_BT_CEA_1920X1080P50 { \ | ||
133 | .type = V4L2_DV_BT_656_1120, \ | ||
134 | V4L2_INIT_BT_TIMINGS(1920, 1080, 0, \ | ||
135 | V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ | ||
136 | 148500000, 528, 44, 148, 4, 5, 36, 0, 0, 0, \ | ||
137 | V4L2_DV_BT_STD_CEA861, 0) \ | ||
138 | } | ||
139 | |||
140 | #define V4L2_DV_BT_CEA_1920X1080I60 { \ | ||
141 | .type = V4L2_DV_BT_656_1120, \ | ||
142 | V4L2_INIT_BT_TIMINGS(1920, 1080, 1, \ | ||
143 | V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ | ||
144 | 74250000, 88, 44, 148, 2, 5, 15, 2, 5, 16, \ | ||
145 | V4L2_DV_BT_STD_CEA861, \ | ||
146 | V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_HALF_LINE) \ | ||
147 | } | ||
148 | |||
149 | #define V4L2_DV_BT_CEA_1920X1080P60 { \ | ||
150 | .type = V4L2_DV_BT_656_1120, \ | ||
151 | V4L2_INIT_BT_TIMINGS(1920, 1080, 0, \ | ||
152 | V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ | ||
153 | 148500000, 88, 44, 148, 4, 5, 36, 0, 0, 0, \ | ||
154 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CEA861, \ | ||
155 | V4L2_DV_FL_CAN_REDUCE_FPS) \ | ||
156 | } | ||
157 | |||
158 | |||
159 | /* VESA Discrete Monitor Timings as per version 1.0, revision 12 */ | ||
160 | |||
161 | #define V4L2_DV_BT_DMT_640X350P85 { \ | ||
162 | .type = V4L2_DV_BT_656_1120, \ | ||
163 | V4L2_INIT_BT_TIMINGS(640, 350, 0, V4L2_DV_HSYNC_POS_POL, \ | ||
164 | 31500000, 32, 64, 96, 32, 3, 60, 0, 0, 0, \ | ||
165 | V4L2_DV_BT_STD_DMT, 0) \ | ||
166 | } | ||
167 | |||
168 | #define V4L2_DV_BT_DMT_640X400P85 { \ | ||
169 | .type = V4L2_DV_BT_656_1120, \ | ||
170 | V4L2_INIT_BT_TIMINGS(640, 400, 0, V4L2_DV_VSYNC_POS_POL, \ | ||
171 | 31500000, 32, 64, 96, 1, 3, 41, 0, 0, 0, \ | ||
172 | V4L2_DV_BT_STD_DMT, 0) \ | ||
173 | } | ||
174 | |||
175 | #define V4L2_DV_BT_DMT_720X400P85 { \ | ||
176 | .type = V4L2_DV_BT_656_1120, \ | ||
177 | V4L2_INIT_BT_TIMINGS(720, 400, 0, V4L2_DV_VSYNC_POS_POL, \ | ||
178 | 35500000, 36, 72, 108, 1, 3, 42, 0, 0, 0, \ | ||
179 | V4L2_DV_BT_STD_DMT, 0) \ | ||
180 | } | ||
181 | |||
182 | /* VGA resolutions */ | ||
183 | #define V4L2_DV_BT_DMT_640X480P60 V4L2_DV_BT_CEA_640X480P59_94 | ||
184 | |||
185 | #define V4L2_DV_BT_DMT_640X480P72 { \ | ||
186 | .type = V4L2_DV_BT_656_1120, \ | ||
187 | V4L2_INIT_BT_TIMINGS(640, 480, 0, 0, \ | ||
188 | 31500000, 24, 40, 128, 9, 3, 28, 0, 0, 0, \ | ||
189 | V4L2_DV_BT_STD_DMT, 0) \ | ||
190 | } | ||
191 | |||
192 | #define V4L2_DV_BT_DMT_640X480P75 { \ | ||
193 | .type = V4L2_DV_BT_656_1120, \ | ||
194 | V4L2_INIT_BT_TIMINGS(640, 480, 0, 0, \ | ||
195 | 31500000, 16, 64, 120, 1, 3, 16, 0, 0, 0, \ | ||
196 | V4L2_DV_BT_STD_DMT, 0) \ | ||
197 | } | ||
198 | |||
199 | #define V4L2_DV_BT_DMT_640X480P85 { \ | ||
200 | .type = V4L2_DV_BT_656_1120, \ | ||
201 | V4L2_INIT_BT_TIMINGS(640, 480, 0, 0, \ | ||
202 | 36000000, 56, 56, 80, 1, 3, 25, 0, 0, 0, \ | ||
203 | V4L2_DV_BT_STD_DMT, 0) \ | ||
204 | } | ||
205 | |||
206 | /* SVGA resolutions */ | ||
207 | #define V4L2_DV_BT_DMT_800X600P56 { \ | ||
208 | .type = V4L2_DV_BT_656_1120, \ | ||
209 | V4L2_INIT_BT_TIMINGS(800, 600, 0, \ | ||
210 | V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ | ||
211 | 36000000, 24, 72, 128, 1, 2, 22, 0, 0, 0, \ | ||
212 | V4L2_DV_BT_STD_DMT, 0) \ | ||
213 | } | ||
214 | |||
215 | #define V4L2_DV_BT_DMT_800X600P60 { \ | ||
216 | .type = V4L2_DV_BT_656_1120, \ | ||
217 | V4L2_INIT_BT_TIMINGS(800, 600, 0, \ | ||
218 | V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ | ||
219 | 40000000, 40, 128, 88, 1, 4, 23, 0, 0, 0, \ | ||
220 | V4L2_DV_BT_STD_DMT, 0) \ | ||
221 | } | ||
222 | |||
223 | #define V4L2_DV_BT_DMT_800X600P72 { \ | ||
224 | .type = V4L2_DV_BT_656_1120, \ | ||
225 | V4L2_INIT_BT_TIMINGS(800, 600, 0, \ | ||
226 | V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ | ||
227 | 50000000, 56, 120, 64, 37, 6, 23, 0, 0, 0, \ | ||
228 | V4L2_DV_BT_STD_DMT, 0) \ | ||
229 | } | ||
230 | |||
231 | #define V4L2_DV_BT_DMT_800X600P75 { \ | ||
232 | .type = V4L2_DV_BT_656_1120, \ | ||
233 | V4L2_INIT_BT_TIMINGS(800, 600, 0, \ | ||
234 | V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ | ||
235 | 49500000, 16, 80, 160, 1, 3, 21, 0, 0, 0, \ | ||
236 | V4L2_DV_BT_STD_DMT, 0) \ | ||
237 | } | ||
238 | |||
239 | #define V4L2_DV_BT_DMT_800X600P85 { \ | ||
240 | .type = V4L2_DV_BT_656_1120, \ | ||
241 | V4L2_INIT_BT_TIMINGS(800, 600, 0, \ | ||
242 | V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ | ||
243 | 56250000, 32, 64, 152, 1, 3, 27, 0, 0, 0, \ | ||
244 | V4L2_DV_BT_STD_DMT, 0) \ | ||
245 | } | ||
246 | |||
247 | #define V4L2_DV_BT_DMT_800X600P120_RB { \ | ||
248 | .type = V4L2_DV_BT_656_1120, \ | ||
249 | V4L2_INIT_BT_TIMINGS(800, 600, 0, V4L2_DV_HSYNC_POS_POL, \ | ||
250 | 73250000, 48, 32, 80, 3, 4, 29, 0, 0, 0, \ | ||
251 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ | ||
252 | V4L2_DV_FL_REDUCED_BLANKING) \ | ||
253 | } | ||
254 | |||
255 | #define V4L2_DV_BT_DMT_848X480P60 { \ | ||
256 | .type = V4L2_DV_BT_656_1120, \ | ||
257 | V4L2_INIT_BT_TIMINGS(848, 480, 0, \ | ||
258 | V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ | ||
259 | 33750000, 16, 112, 112, 6, 8, 23, 0, 0, 0, \ | ||
260 | V4L2_DV_BT_STD_DMT, 0) \ | ||
261 | } | ||
262 | |||
263 | #define V4L2_DV_BT_DMT_1024X768I43 { \ | ||
264 | .type = V4L2_DV_BT_656_1120, \ | ||
265 | V4L2_INIT_BT_TIMINGS(1024, 768, 1, \ | ||
266 | V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ | ||
267 | 44900000, 8, 176, 56, 0, 4, 20, 0, 4, 21, \ | ||
268 | V4L2_DV_BT_STD_DMT, 0) \ | ||
269 | } | ||
270 | |||
271 | /* XGA resolutions */ | ||
272 | #define V4L2_DV_BT_DMT_1024X768P60 { \ | ||
273 | .type = V4L2_DV_BT_656_1120, \ | ||
274 | V4L2_INIT_BT_TIMINGS(1024, 768, 0, 0, \ | ||
275 | 65000000, 24, 136, 160, 3, 6, 29, 0, 0, 0, \ | ||
276 | V4L2_DV_BT_STD_DMT, 0) \ | ||
277 | } | ||
278 | |||
279 | #define V4L2_DV_BT_DMT_1024X768P70 { \ | ||
280 | .type = V4L2_DV_BT_656_1120, \ | ||
281 | V4L2_INIT_BT_TIMINGS(1024, 768, 0, 0, \ | ||
282 | 75000000, 24, 136, 144, 3, 6, 29, 0, 0, 0, \ | ||
283 | V4L2_DV_BT_STD_DMT, 0) \ | ||
284 | } | ||
285 | |||
286 | #define V4L2_DV_BT_DMT_1024X768P75 { \ | ||
287 | .type = V4L2_DV_BT_656_1120, \ | ||
288 | V4L2_INIT_BT_TIMINGS(1024, 768, 0, \ | ||
289 | V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ | ||
290 | 78750000, 16, 96, 176, 1, 3, 28, 0, 0, 0, \ | ||
291 | V4L2_DV_BT_STD_DMT, 0) \ | ||
292 | } | ||
293 | |||
294 | #define V4L2_DV_BT_DMT_1024X768P85 { \ | ||
295 | .type = V4L2_DV_BT_656_1120, \ | ||
296 | V4L2_INIT_BT_TIMINGS(1024, 768, 0, \ | ||
297 | V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ | ||
298 | 94500000, 48, 96, 208, 1, 3, 36, 0, 0, 0, \ | ||
299 | V4L2_DV_BT_STD_DMT, 0) \ | ||
300 | } | ||
301 | |||
302 | #define V4L2_DV_BT_DMT_1024X768P120_RB { \ | ||
303 | .type = V4L2_DV_BT_656_1120, \ | ||
304 | V4L2_INIT_BT_TIMINGS(1024, 768, 0, V4L2_DV_HSYNC_POS_POL, \ | ||
305 | 115500000, 48, 32, 80, 3, 4, 38, 0, 0, 0, \ | ||
306 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ | ||
307 | V4L2_DV_FL_REDUCED_BLANKING) \ | ||
308 | } | ||
309 | |||
310 | /* XGA+ resolution */ | ||
311 | #define V4L2_DV_BT_DMT_1152X864P75 { \ | ||
312 | .type = V4L2_DV_BT_656_1120, \ | ||
313 | V4L2_INIT_BT_TIMINGS(1152, 864, 0, \ | ||
314 | V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ | ||
315 | 108000000, 64, 128, 256, 1, 3, 32, 0, 0, 0, \ | ||
316 | V4L2_DV_BT_STD_DMT, 0) \ | ||
317 | } | ||
318 | |||
319 | #define V4L2_DV_BT_DMT_1280X720P60 V4L2_DV_BT_CEA_1280X720P60 | ||
320 | |||
321 | /* WXGA resolutions */ | ||
322 | #define V4L2_DV_BT_DMT_1280X768P60_RB { \ | ||
323 | .type = V4L2_DV_BT_656_1120, \ | ||
324 | V4L2_INIT_BT_TIMINGS(1280, 768, 0, V4L2_DV_HSYNC_POS_POL, \ | ||
325 | 68250000, 48, 32, 80, 3, 7, 12, 0, 0, 0, \ | ||
326 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ | ||
327 | V4L2_DV_FL_REDUCED_BLANKING) \ | ||
328 | } | ||
329 | |||
330 | #define V4L2_DV_BT_DMT_1280X768P60 { \ | ||
331 | .type = V4L2_DV_BT_656_1120, \ | ||
332 | V4L2_INIT_BT_TIMINGS(1280, 768, 0, V4L2_DV_VSYNC_POS_POL, \ | ||
333 | 79500000, 64, 128, 192, 3, 7, 20, 0, 0, 0, \ | ||
334 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \ | ||
335 | } | ||
336 | |||
337 | #define V4L2_DV_BT_DMT_1280X768P75 { \ | ||
338 | .type = V4L2_DV_BT_656_1120, \ | ||
339 | V4L2_INIT_BT_TIMINGS(1280, 768, 0, V4L2_DV_VSYNC_POS_POL, \ | ||
340 | 102250000, 80, 128, 208, 3, 7, 27, 0, 0, 0, \ | ||
341 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \ | ||
342 | } | ||
343 | |||
344 | #define V4L2_DV_BT_DMT_1280X768P85 { \ | ||
345 | .type = V4L2_DV_BT_656_1120, \ | ||
346 | V4L2_INIT_BT_TIMINGS(1280, 768, 0, V4L2_DV_VSYNC_POS_POL, \ | ||
347 | 117500000, 80, 136, 216, 3, 7, 31, 0, 0, 0, \ | ||
348 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \ | ||
349 | } | ||
350 | |||
351 | #define V4L2_DV_BT_DMT_1280X768P120_RB { \ | ||
352 | .type = V4L2_DV_BT_656_1120, \ | ||
353 | V4L2_INIT_BT_TIMINGS(1280, 768, 0, V4L2_DV_HSYNC_POS_POL, \ | ||
354 | 140250000, 48, 32, 80, 3, 7, 35, 0, 0, 0, \ | ||
355 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ | ||
356 | V4L2_DV_FL_REDUCED_BLANKING) \ | ||
357 | } | ||
358 | |||
359 | #define V4L2_DV_BT_DMT_1280X800P60_RB { \ | ||
360 | .type = V4L2_DV_BT_656_1120, \ | ||
361 | V4L2_INIT_BT_TIMINGS(1280, 800, 0, V4L2_DV_HSYNC_POS_POL, \ | ||
362 | 71000000, 48, 32, 80, 3, 6, 14, 0, 0, 0, \ | ||
363 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ | ||
364 | V4L2_DV_FL_REDUCED_BLANKING) \ | ||
365 | } | ||
366 | |||
367 | #define V4L2_DV_BT_DMT_1280X800P60 { \ | ||
368 | .type = V4L2_DV_BT_656_1120, \ | ||
369 | V4L2_INIT_BT_TIMINGS(1280, 800, 0, V4L2_DV_VSYNC_POS_POL, \ | ||
370 | 83500000, 72, 128, 200, 3, 6, 22, 0, 0, 0, \ | ||
371 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \ | ||
372 | } | ||
373 | |||
374 | #define V4L2_DV_BT_DMT_1280X800P75 { \ | ||
375 | .type = V4L2_DV_BT_656_1120, \ | ||
376 | V4L2_INIT_BT_TIMINGS(1280, 800, 0, V4L2_DV_VSYNC_POS_POL, \ | ||
377 | 106500000, 80, 128, 208, 3, 6, 29, 0, 0, 0, \ | ||
378 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \ | ||
379 | } | ||
380 | |||
381 | #define V4L2_DV_BT_DMT_1280X800P85 { \ | ||
382 | .type = V4L2_DV_BT_656_1120, \ | ||
383 | V4L2_INIT_BT_TIMINGS(1280, 800, 0, V4L2_DV_VSYNC_POS_POL, \ | ||
384 | 122500000, 80, 136, 216, 3, 6, 34, 0, 0, 0, \ | ||
385 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \ | ||
386 | } | ||
387 | |||
388 | #define V4L2_DV_BT_DMT_1280X800P120_RB { \ | ||
389 | .type = V4L2_DV_BT_656_1120, \ | ||
390 | V4L2_INIT_BT_TIMINGS(1280, 800, 0, V4L2_DV_HSYNC_POS_POL, \ | ||
391 | 146250000, 48, 32, 80, 3, 6, 38, 0, 0, 0, \ | ||
392 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ | ||
393 | V4L2_DV_FL_REDUCED_BLANKING) \ | ||
394 | } | ||
395 | |||
396 | #define V4L2_DV_BT_DMT_1280X960P60 { \ | ||
397 | .type = V4L2_DV_BT_656_1120, \ | ||
398 | V4L2_INIT_BT_TIMINGS(1280, 960, 0, \ | ||
399 | V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ | ||
400 | 108000000, 96, 112, 312, 1, 3, 36, 0, 0, 0, \ | ||
401 | V4L2_DV_BT_STD_DMT, 0) \ | ||
402 | } | ||
403 | |||
404 | #define V4L2_DV_BT_DMT_1280X960P85 { \ | ||
405 | .type = V4L2_DV_BT_656_1120, \ | ||
406 | V4L2_INIT_BT_TIMINGS(1280, 960, 0, \ | ||
407 | V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ | ||
408 | 148500000, 64, 160, 224, 1, 3, 47, 0, 0, 0, \ | ||
409 | V4L2_DV_BT_STD_DMT, 0) \ | ||
410 | } | ||
411 | |||
412 | #define V4L2_DV_BT_DMT_1280X960P120_RB { \ | ||
413 | .type = V4L2_DV_BT_656_1120, \ | ||
414 | V4L2_INIT_BT_TIMINGS(1280, 960, 0, V4L2_DV_HSYNC_POS_POL, \ | ||
415 | 175500000, 48, 32, 80, 3, 4, 50, 0, 0, 0, \ | ||
416 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ | ||
417 | V4L2_DV_FL_REDUCED_BLANKING) \ | ||
418 | } | ||
419 | |||
420 | /* SXGA resolutions */ | ||
421 | #define V4L2_DV_BT_DMT_1280X1024P60 { \ | ||
422 | .type = V4L2_DV_BT_656_1120, \ | ||
423 | V4L2_INIT_BT_TIMINGS(1280, 1024, 0, \ | ||
424 | V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ | ||
425 | 108000000, 48, 112, 248, 1, 3, 38, 0, 0, 0, \ | ||
426 | V4L2_DV_BT_STD_DMT, 0) \ | ||
427 | } | ||
428 | |||
429 | #define V4L2_DV_BT_DMT_1280X1024P75 { \ | ||
430 | .type = V4L2_DV_BT_656_1120, \ | ||
431 | V4L2_INIT_BT_TIMINGS(1280, 1024, 0, \ | ||
432 | V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ | ||
433 | 135000000, 16, 144, 248, 1, 3, 38, 0, 0, 0, \ | ||
434 | V4L2_DV_BT_STD_DMT, 0) \ | ||
435 | } | ||
436 | |||
437 | #define V4L2_DV_BT_DMT_1280X1024P85 { \ | ||
438 | .type = V4L2_DV_BT_656_1120, \ | ||
439 | V4L2_INIT_BT_TIMINGS(1280, 1024, 0, \ | ||
440 | V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ | ||
441 | 157500000, 64, 160, 224, 1, 3, 44, 0, 0, 0, \ | ||
442 | V4L2_DV_BT_STD_DMT, 0) \ | ||
443 | } | ||
444 | |||
445 | #define V4L2_DV_BT_DMT_1280X1024P120_RB { \ | ||
446 | .type = V4L2_DV_BT_656_1120, \ | ||
447 | V4L2_INIT_BT_TIMINGS(1280, 1024, 0, V4L2_DV_HSYNC_POS_POL, \ | ||
448 | 187250000, 48, 32, 80, 3, 7, 50, 0, 0, 0, \ | ||
449 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ | ||
450 | V4L2_DV_FL_REDUCED_BLANKING) \ | ||
451 | } | ||
452 | |||
453 | #define V4L2_DV_BT_DMT_1360X768P60 { \ | ||
454 | .type = V4L2_DV_BT_656_1120, \ | ||
455 | V4L2_INIT_BT_TIMINGS(1360, 768, 0, \ | ||
456 | V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ | ||
457 | 85500000, 64, 112, 256, 3, 6, 18, 0, 0, 0, \ | ||
458 | V4L2_DV_BT_STD_DMT, 0) \ | ||
459 | } | ||
460 | |||
461 | #define V4L2_DV_BT_DMT_1360X768P120_RB { \ | ||
462 | .type = V4L2_DV_BT_656_1120, \ | ||
463 | V4L2_INIT_BT_TIMINGS(1360, 768, 0, V4L2_DV_HSYNC_POS_POL, \ | ||
464 | 148250000, 48, 32, 80, 3, 5, 37, 0, 0, 0, \ | ||
465 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ | ||
466 | V4L2_DV_FL_REDUCED_BLANKING) \ | ||
467 | } | ||
468 | |||
469 | #define V4L2_DV_BT_DMT_1366X768P60 { \ | ||
470 | .type = V4L2_DV_BT_656_1120, \ | ||
471 | V4L2_INIT_BT_TIMINGS(1366, 768, 0, \ | ||
472 | V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ | ||
473 | 85500000, 70, 143, 213, 3, 3, 24, 0, 0, 0, \ | ||
474 | V4L2_DV_BT_STD_DMT, 0) \ | ||
475 | } | ||
476 | |||
477 | #define V4L2_DV_BT_DMT_1366X768P60_RB { \ | ||
478 | .type = V4L2_DV_BT_656_1120, \ | ||
479 | V4L2_INIT_BT_TIMINGS(1366, 768, 0, \ | ||
480 | V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ | ||
481 | 72000000, 14, 56, 64, 1, 3, 28, 0, 0, 0, \ | ||
482 | V4L2_DV_BT_STD_DMT, V4L2_DV_FL_REDUCED_BLANKING) \ | ||
483 | } | ||
484 | |||
485 | /* SXGA+ resolutions */ | ||
486 | #define V4L2_DV_BT_DMT_1400X1050P60_RB { \ | ||
487 | .type = V4L2_DV_BT_656_1120, \ | ||
488 | V4L2_INIT_BT_TIMINGS(1400, 1050, 0, V4L2_DV_HSYNC_POS_POL, \ | ||
489 | 101000000, 48, 32, 80, 3, 4, 23, 0, 0, 0, \ | ||
490 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ | ||
491 | V4L2_DV_FL_REDUCED_BLANKING) \ | ||
492 | } | ||
493 | |||
494 | #define V4L2_DV_BT_DMT_1400X1050P60 { \ | ||
495 | .type = V4L2_DV_BT_656_1120, \ | ||
496 | V4L2_INIT_BT_TIMINGS(1400, 1050, 0, V4L2_DV_VSYNC_POS_POL, \ | ||
497 | 121750000, 88, 144, 232, 3, 4, 32, 0, 0, 0, \ | ||
498 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \ | ||
499 | } | ||
500 | |||
501 | #define V4L2_DV_BT_DMT_1400X1050P75 { \ | ||
502 | .type = V4L2_DV_BT_656_1120, \ | ||
503 | V4L2_INIT_BT_TIMINGS(1400, 1050, 0, V4L2_DV_VSYNC_POS_POL, \ | ||
504 | 156000000, 104, 144, 248, 3, 4, 42, 0, 0, 0, \ | ||
505 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \ | ||
506 | } | ||
507 | |||
508 | #define V4L2_DV_BT_DMT_1400X1050P85 { \ | ||
509 | .type = V4L2_DV_BT_656_1120, \ | ||
510 | V4L2_INIT_BT_TIMINGS(1400, 1050, 0, V4L2_DV_VSYNC_POS_POL, \ | ||
511 | 179500000, 104, 152, 256, 3, 4, 48, 0, 0, 0, \ | ||
512 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \ | ||
513 | } | ||
514 | |||
515 | #define V4L2_DV_BT_DMT_1400X1050P120_RB { \ | ||
516 | .type = V4L2_DV_BT_656_1120, \ | ||
517 | V4L2_INIT_BT_TIMINGS(1400, 1050, 0, V4L2_DV_HSYNC_POS_POL, \ | ||
518 | 208000000, 48, 32, 80, 3, 4, 55, 0, 0, 0, \ | ||
519 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ | ||
520 | V4L2_DV_FL_REDUCED_BLANKING) \ | ||
521 | } | ||
522 | |||
523 | /* WXGA+ resolutions */ | ||
524 | #define V4L2_DV_BT_DMT_1440X900P60_RB { \ | ||
525 | .type = V4L2_DV_BT_656_1120, \ | ||
526 | V4L2_INIT_BT_TIMINGS(1440, 900, 0, V4L2_DV_HSYNC_POS_POL, \ | ||
527 | 88750000, 48, 32, 80, 3, 6, 17, 0, 0, 0, \ | ||
528 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ | ||
529 | V4L2_DV_FL_REDUCED_BLANKING) \ | ||
530 | } | ||
531 | |||
532 | #define V4L2_DV_BT_DMT_1440X900P60 { \ | ||
533 | .type = V4L2_DV_BT_656_1120, \ | ||
534 | V4L2_INIT_BT_TIMINGS(1440, 900, 0, V4L2_DV_VSYNC_POS_POL, \ | ||
535 | 106500000, 80, 152, 232, 3, 6, 25, 0, 0, 0, \ | ||
536 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \ | ||
537 | } | ||
538 | |||
539 | #define V4L2_DV_BT_DMT_1440X900P75 { \ | ||
540 | .type = V4L2_DV_BT_656_1120, \ | ||
541 | V4L2_INIT_BT_TIMINGS(1440, 900, 0, V4L2_DV_VSYNC_POS_POL, \ | ||
542 | 136750000, 96, 152, 248, 3, 6, 33, 0, 0, 0, \ | ||
543 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \ | ||
544 | } | ||
545 | |||
546 | #define V4L2_DV_BT_DMT_1440X900P85 { \ | ||
547 | .type = V4L2_DV_BT_656_1120, \ | ||
548 | V4L2_INIT_BT_TIMINGS(1440, 900, 0, V4L2_DV_VSYNC_POS_POL, \ | ||
549 | 157000000, 104, 152, 256, 3, 6, 39, 0, 0, 0, \ | ||
550 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \ | ||
551 | } | ||
552 | |||
553 | #define V4L2_DV_BT_DMT_1440X900P120_RB { \ | ||
554 | .type = V4L2_DV_BT_656_1120, \ | ||
555 | V4L2_INIT_BT_TIMINGS(1440, 900, 0, V4L2_DV_HSYNC_POS_POL, \ | ||
556 | 182750000, 48, 32, 80, 3, 6, 44, 0, 0, 0, \ | ||
557 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ | ||
558 | V4L2_DV_FL_REDUCED_BLANKING) \ | ||
559 | } | ||
560 | |||
561 | #define V4L2_DV_BT_DMT_1600X900P60_RB { \ | ||
562 | .type = V4L2_DV_BT_656_1120, \ | ||
563 | V4L2_INIT_BT_TIMINGS(1600, 900, 0, \ | ||
564 | V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ | ||
565 | 108000000, 24, 80, 96, 1, 3, 96, 0, 0, 0, \ | ||
566 | V4L2_DV_BT_STD_DMT, V4L2_DV_FL_REDUCED_BLANKING) \ | ||
567 | } | ||
568 | |||
569 | /* UXGA resolutions */ | ||
570 | #define V4L2_DV_BT_DMT_1600X1200P60 { \ | ||
571 | .type = V4L2_DV_BT_656_1120, \ | ||
572 | V4L2_INIT_BT_TIMINGS(1600, 1200, 0, \ | ||
573 | V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ | ||
574 | 162000000, 64, 192, 304, 1, 3, 46, 0, 0, 0, \ | ||
575 | V4L2_DV_BT_STD_DMT, 0) \ | ||
576 | } | ||
577 | |||
578 | #define V4L2_DV_BT_DMT_1600X1200P65 { \ | ||
579 | .type = V4L2_DV_BT_656_1120, \ | ||
580 | V4L2_INIT_BT_TIMINGS(1600, 1200, 0, \ | ||
581 | V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ | ||
582 | 175500000, 64, 192, 304, 1, 3, 46, 0, 0, 0, \ | ||
583 | V4L2_DV_BT_STD_DMT, 0) \ | ||
584 | } | ||
585 | |||
586 | #define V4L2_DV_BT_DMT_1600X1200P70 { \ | ||
587 | .type = V4L2_DV_BT_656_1120, \ | ||
588 | V4L2_INIT_BT_TIMINGS(1600, 1200, 0, \ | ||
589 | V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ | ||
590 | 189000000, 64, 192, 304, 1, 3, 46, 0, 0, 0, \ | ||
591 | V4L2_DV_BT_STD_DMT, 0) \ | ||
592 | } | ||
593 | |||
594 | #define V4L2_DV_BT_DMT_1600X1200P75 { \ | ||
595 | .type = V4L2_DV_BT_656_1120, \ | ||
596 | V4L2_INIT_BT_TIMINGS(1600, 1200, 0, \ | ||
597 | V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ | ||
598 | 202500000, 64, 192, 304, 1, 3, 46, 0, 0, 0, \ | ||
599 | V4L2_DV_BT_STD_DMT, 0) \ | ||
600 | } | ||
601 | |||
602 | #define V4L2_DV_BT_DMT_1600X1200P85 { \ | ||
603 | .type = V4L2_DV_BT_656_1120, \ | ||
604 | V4L2_INIT_BT_TIMINGS(1600, 1200, 0, \ | ||
605 | V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ | ||
606 | 229500000, 64, 192, 304, 1, 3, 46, 0, 0, 0, \ | ||
607 | V4L2_DV_BT_STD_DMT, 0) \ | ||
608 | } | ||
609 | |||
610 | #define V4L2_DV_BT_DMT_1600X1200P120_RB { \ | ||
611 | .type = V4L2_DV_BT_656_1120, \ | ||
612 | V4L2_INIT_BT_TIMINGS(1600, 1200, 0, V4L2_DV_HSYNC_POS_POL, \ | ||
613 | 268250000, 48, 32, 80, 3, 4, 64, 0, 0, 0, \ | ||
614 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ | ||
615 | V4L2_DV_FL_REDUCED_BLANKING) \ | ||
616 | } | ||
617 | |||
618 | /* WSXGA+ resolutions */ | ||
619 | #define V4L2_DV_BT_DMT_1680X1050P60_RB { \ | ||
620 | .type = V4L2_DV_BT_656_1120, \ | ||
621 | V4L2_INIT_BT_TIMINGS(1680, 1050, 0, V4L2_DV_HSYNC_POS_POL, \ | ||
622 | 119000000, 48, 32, 80, 3, 6, 21, 0, 0, 0, \ | ||
623 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ | ||
624 | V4L2_DV_FL_REDUCED_BLANKING) \ | ||
625 | } | ||
626 | |||
627 | #define V4L2_DV_BT_DMT_1680X1050P60 { \ | ||
628 | .type = V4L2_DV_BT_656_1120, \ | ||
629 | V4L2_INIT_BT_TIMINGS(1680, 1050, 0, V4L2_DV_VSYNC_POS_POL, \ | ||
630 | 146250000, 104, 176, 280, 3, 6, 30, 0, 0, 0, \ | ||
631 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \ | ||
632 | } | ||
633 | |||
634 | #define V4L2_DV_BT_DMT_1680X1050P75 { \ | ||
635 | .type = V4L2_DV_BT_656_1120, \ | ||
636 | V4L2_INIT_BT_TIMINGS(1680, 1050, 0, V4L2_DV_VSYNC_POS_POL, \ | ||
637 | 187000000, 120, 176, 296, 3, 6, 40, 0, 0, 0, \ | ||
638 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \ | ||
639 | } | ||
640 | |||
641 | #define V4L2_DV_BT_DMT_1680X1050P85 { \ | ||
642 | .type = V4L2_DV_BT_656_1120, \ | ||
643 | V4L2_INIT_BT_TIMINGS(1680, 1050, 0, V4L2_DV_VSYNC_POS_POL, \ | ||
644 | 214750000, 128, 176, 304, 3, 6, 46, 0, 0, 0, \ | ||
645 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \ | ||
646 | } | ||
647 | |||
648 | #define V4L2_DV_BT_DMT_1680X1050P120_RB { \ | ||
649 | .type = V4L2_DV_BT_656_1120, \ | ||
650 | V4L2_INIT_BT_TIMINGS(1680, 1050, 0, V4L2_DV_HSYNC_POS_POL, \ | ||
651 | 245500000, 48, 32, 80, 3, 6, 53, 0, 0, 0, \ | ||
652 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ | ||
653 | V4L2_DV_FL_REDUCED_BLANKING) \ | ||
654 | } | ||
655 | |||
656 | #define V4L2_DV_BT_DMT_1792X1344P60 { \ | ||
657 | .type = V4L2_DV_BT_656_1120, \ | ||
658 | V4L2_INIT_BT_TIMINGS(1792, 1344, 0, V4L2_DV_VSYNC_POS_POL, \ | ||
659 | 204750000, 128, 200, 328, 1, 3, 46, 0, 0, 0, \ | ||
660 | V4L2_DV_BT_STD_DMT, 0) \ | ||
661 | } | ||
662 | |||
663 | #define V4L2_DV_BT_DMT_1792X1344P75 { \ | ||
664 | .type = V4L2_DV_BT_656_1120, \ | ||
665 | V4L2_INIT_BT_TIMINGS(1792, 1344, 0, V4L2_DV_VSYNC_POS_POL, \ | ||
666 | 261000000, 96, 216, 352, 1, 3, 69, 0, 0, 0, \ | ||
667 | V4L2_DV_BT_STD_DMT, 0) \ | ||
668 | } | ||
669 | |||
670 | #define V4L2_DV_BT_DMT_1792X1344P120_RB { \ | ||
671 | .type = V4L2_DV_BT_656_1120, \ | ||
672 | V4L2_INIT_BT_TIMINGS(1792, 1344, 0, V4L2_DV_HSYNC_POS_POL, \ | ||
673 | 333250000, 48, 32, 80, 3, 4, 72, 0, 0, 0, \ | ||
674 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ | ||
675 | V4L2_DV_FL_REDUCED_BLANKING) \ | ||
676 | } | ||
677 | |||
678 | #define V4L2_DV_BT_DMT_1856X1392P60 { \ | ||
679 | .type = V4L2_DV_BT_656_1120, \ | ||
680 | V4L2_INIT_BT_TIMINGS(1856, 1392, 0, V4L2_DV_VSYNC_POS_POL, \ | ||
681 | 218250000, 96, 224, 352, 1, 3, 43, 0, 0, 0, \ | ||
682 | V4L2_DV_BT_STD_DMT, 0) \ | ||
683 | } | ||
684 | |||
685 | #define V4L2_DV_BT_DMT_1856X1392P75 { \ | ||
686 | .type = V4L2_DV_BT_656_1120, \ | ||
687 | V4L2_INIT_BT_TIMINGS(1856, 1392, 0, V4L2_DV_VSYNC_POS_POL, \ | ||
688 | 288000000, 128, 224, 352, 1, 3, 104, 0, 0, 0, \ | ||
689 | V4L2_DV_BT_STD_DMT, 0) \ | ||
690 | } | ||
691 | |||
692 | #define V4L2_DV_BT_DMT_1856X1392P120_RB { \ | ||
693 | .type = V4L2_DV_BT_656_1120, \ | ||
694 | V4L2_INIT_BT_TIMINGS(1856, 1392, 0, V4L2_DV_HSYNC_POS_POL, \ | ||
695 | 356500000, 48, 32, 80, 3, 4, 75, 0, 0, 0, \ | ||
696 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ | ||
697 | V4L2_DV_FL_REDUCED_BLANKING) \ | ||
698 | } | ||
699 | |||
700 | #define V4L2_DV_BT_DMT_1920X1080P60 V4L2_DV_BT_CEA_1920X1080P60 | ||
701 | |||
702 | /* WUXGA resolutions */ | ||
703 | #define V4L2_DV_BT_DMT_1920X1200P60_RB { \ | ||
704 | .type = V4L2_DV_BT_656_1120, \ | ||
705 | V4L2_INIT_BT_TIMINGS(1920, 1200, 0, V4L2_DV_HSYNC_POS_POL, \ | ||
706 | 154000000, 48, 32, 80, 3, 6, 26, 0, 0, 0, \ | ||
707 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ | ||
708 | V4L2_DV_FL_REDUCED_BLANKING) \ | ||
709 | } | ||
710 | |||
711 | #define V4L2_DV_BT_DMT_1920X1200P60 { \ | ||
712 | .type = V4L2_DV_BT_656_1120, \ | ||
713 | V4L2_INIT_BT_TIMINGS(1920, 1200, 0, V4L2_DV_VSYNC_POS_POL, \ | ||
714 | 193250000, 136, 200, 336, 3, 6, 36, 0, 0, 0, \ | ||
715 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \ | ||
716 | } | ||
717 | |||
718 | #define V4L2_DV_BT_DMT_1920X1200P75 { \ | ||
719 | .type = V4L2_DV_BT_656_1120, \ | ||
720 | V4L2_INIT_BT_TIMINGS(1920, 1200, 0, V4L2_DV_VSYNC_POS_POL, \ | ||
721 | 245250000, 136, 208, 344, 3, 6, 46, 0, 0, 0, \ | ||
722 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \ | ||
723 | } | ||
724 | |||
725 | #define V4L2_DV_BT_DMT_1920X1200P85 { \ | ||
726 | .type = V4L2_DV_BT_656_1120, \ | ||
727 | V4L2_INIT_BT_TIMINGS(1920, 1200, 0, V4L2_DV_VSYNC_POS_POL, \ | ||
728 | 281250000, 144, 208, 352, 3, 6, 53, 0, 0, 0, \ | ||
729 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \ | ||
730 | } | ||
731 | |||
732 | #define V4L2_DV_BT_DMT_1920X1200P120_RB { \ | ||
733 | .type = V4L2_DV_BT_656_1120, \ | ||
734 | V4L2_INIT_BT_TIMINGS(1920, 1200, 0, V4L2_DV_HSYNC_POS_POL, \ | ||
735 | 317000000, 48, 32, 80, 3, 6, 62, 0, 0, 0, \ | ||
736 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ | ||
737 | V4L2_DV_FL_REDUCED_BLANKING) \ | ||
738 | } | ||
739 | |||
740 | #define V4L2_DV_BT_DMT_1920X1440P60 { \ | ||
741 | .type = V4L2_DV_BT_656_1120, \ | ||
742 | V4L2_INIT_BT_TIMINGS(1920, 1440, 0, V4L2_DV_VSYNC_POS_POL, \ | ||
743 | 234000000, 128, 208, 344, 1, 3, 56, 0, 0, 0, \ | ||
744 | V4L2_DV_BT_STD_DMT, 0) \ | ||
745 | } | ||
746 | |||
747 | #define V4L2_DV_BT_DMT_1920X1440P75 { \ | ||
748 | .type = V4L2_DV_BT_656_1120, \ | ||
749 | V4L2_INIT_BT_TIMINGS(1920, 1440, 0, V4L2_DV_VSYNC_POS_POL, \ | ||
750 | 297000000, 144, 224, 352, 1, 3, 56, 0, 0, 0, \ | ||
751 | V4L2_DV_BT_STD_DMT, 0) \ | ||
752 | } | ||
753 | |||
754 | #define V4L2_DV_BT_DMT_1920X1440P120_RB { \ | ||
755 | .type = V4L2_DV_BT_656_1120, \ | ||
756 | V4L2_INIT_BT_TIMINGS(1920, 1440, 0, V4L2_DV_HSYNC_POS_POL, \ | ||
757 | 380500000, 48, 32, 80, 3, 4, 78, 0, 0, 0, \ | ||
758 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ | ||
759 | V4L2_DV_FL_REDUCED_BLANKING) \ | ||
760 | } | ||
761 | |||
762 | #define V4L2_DV_BT_DMT_2048X1152P60_RB { \ | ||
763 | .type = V4L2_DV_BT_656_1120, \ | ||
764 | V4L2_INIT_BT_TIMINGS(2048, 1152, 0, \ | ||
765 | V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ | ||
766 | 162000000, 26, 80, 96, 1, 3, 44, 0, 0, 0, \ | ||
767 | V4L2_DV_BT_STD_DMT, V4L2_DV_FL_REDUCED_BLANKING) \ | ||
768 | } | ||
769 | |||
770 | /* WQXGA resolutions */ | ||
771 | #define V4L2_DV_BT_DMT_2560X1600P60_RB { \ | ||
772 | .type = V4L2_DV_BT_656_1120, \ | ||
773 | V4L2_INIT_BT_TIMINGS(2560, 1600, 0, V4L2_DV_HSYNC_POS_POL, \ | ||
774 | 268500000, 48, 32, 80, 3, 6, 37, 0, 0, 0, \ | ||
775 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ | ||
776 | V4L2_DV_FL_REDUCED_BLANKING) \ | ||
777 | } | ||
778 | |||
779 | #define V4L2_DV_BT_DMT_2560X1600P60 { \ | ||
780 | .type = V4L2_DV_BT_656_1120, \ | ||
781 | V4L2_INIT_BT_TIMINGS(2560, 1600, 0, V4L2_DV_VSYNC_POS_POL, \ | ||
782 | 348500000, 192, 280, 472, 3, 6, 49, 0, 0, 0, \ | ||
783 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \ | ||
784 | } | ||
785 | |||
786 | #define V4L2_DV_BT_DMT_2560X1600P75 { \ | ||
787 | .type = V4L2_DV_BT_656_1120, \ | ||
788 | V4L2_INIT_BT_TIMINGS(2560, 1600, 0, V4L2_DV_VSYNC_POS_POL, \ | ||
789 | 443250000, 208, 280, 488, 3, 6, 63, 0, 0, 0, \ | ||
790 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \ | ||
791 | } | ||
792 | |||
793 | #define V4L2_DV_BT_DMT_2560X1600P85 { \ | ||
794 | .type = V4L2_DV_BT_656_1120, \ | ||
795 | V4L2_INIT_BT_TIMINGS(2560, 1600, 0, V4L2_DV_VSYNC_POS_POL, \ | ||
796 | 505250000, 208, 280, 488, 3, 6, 73, 0, 0, 0, \ | ||
797 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \ | ||
798 | } | ||
799 | |||
800 | #define V4L2_DV_BT_DMT_2560X1600P120_RB { \ | ||
801 | .type = V4L2_DV_BT_656_1120, \ | ||
802 | V4L2_INIT_BT_TIMINGS(2560, 1600, 0, V4L2_DV_HSYNC_POS_POL, \ | ||
803 | 552750000, 48, 32, 80, 3, 6, 85, 0, 0, 0, \ | ||
804 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ | ||
805 | V4L2_DV_FL_REDUCED_BLANKING) \ | ||
806 | } | ||
807 | |||
808 | #define V4L2_DV_BT_DMT_1366X768P60 { \ | ||
809 | .type = V4L2_DV_BT_656_1120, \ | ||
810 | V4L2_INIT_BT_TIMINGS(1366, 768, 0, \ | ||
811 | V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ | ||
812 | 85500000, 70, 143, 213, 3, 3, 24, 0, 0, 0, \ | ||
813 | V4L2_DV_BT_STD_DMT, 0) \ | ||
814 | } | ||
815 | |||
816 | #endif | ||
diff --git a/include/linux/v4l2-subdev.h b/include/linux/v4l2-subdev.h index ed29cbbebfef..812019ee1e06 100644 --- a/include/linux/v4l2-subdev.h +++ b/include/linux/v4l2-subdev.h | |||
@@ -123,6 +123,43 @@ struct v4l2_subdev_frame_interval_enum { | |||
123 | __u32 reserved[9]; | 123 | __u32 reserved[9]; |
124 | }; | 124 | }; |
125 | 125 | ||
126 | #define V4L2_SUBDEV_SEL_FLAG_SIZE_GE (1 << 0) | ||
127 | #define V4L2_SUBDEV_SEL_FLAG_SIZE_LE (1 << 1) | ||
128 | #define V4L2_SUBDEV_SEL_FLAG_KEEP_CONFIG (1 << 2) | ||
129 | |||
130 | /* active cropping area */ | ||
131 | #define V4L2_SUBDEV_SEL_TGT_CROP_ACTUAL 0x0000 | ||
132 | /* cropping bounds */ | ||
133 | #define V4L2_SUBDEV_SEL_TGT_CROP_BOUNDS 0x0002 | ||
134 | /* current composing area */ | ||
135 | #define V4L2_SUBDEV_SEL_TGT_COMPOSE_ACTUAL 0x0100 | ||
136 | /* composing bounds */ | ||
137 | #define V4L2_SUBDEV_SEL_TGT_COMPOSE_BOUNDS 0x0102 | ||
138 | |||
139 | |||
140 | /** | ||
141 | * struct v4l2_subdev_selection - selection info | ||
142 | * | ||
143 | * @which: either V4L2_SUBDEV_FORMAT_ACTIVE or V4L2_SUBDEV_FORMAT_TRY | ||
144 | * @pad: pad number, as reported by the media API | ||
145 | * @target: selection target, used to choose one of possible rectangles | ||
146 | * @flags: constraint flags | ||
147 | * @r: coordinates of the selection window | ||
148 | * @reserved: for future use, set to zero for now | ||
149 | * | ||
150 | * Hardware may use multiple helper windows to process a video stream. | ||
151 | * The structure is used to exchange this selection areas between | ||
152 | * an application and a driver. | ||
153 | */ | ||
154 | struct v4l2_subdev_selection { | ||
155 | __u32 which; | ||
156 | __u32 pad; | ||
157 | __u32 target; | ||
158 | __u32 flags; | ||
159 | struct v4l2_rect r; | ||
160 | __u32 reserved[8]; | ||
161 | }; | ||
162 | |||
126 | #define VIDIOC_SUBDEV_G_FMT _IOWR('V', 4, struct v4l2_subdev_format) | 163 | #define VIDIOC_SUBDEV_G_FMT _IOWR('V', 4, struct v4l2_subdev_format) |
127 | #define VIDIOC_SUBDEV_S_FMT _IOWR('V', 5, struct v4l2_subdev_format) | 164 | #define VIDIOC_SUBDEV_S_FMT _IOWR('V', 5, struct v4l2_subdev_format) |
128 | #define VIDIOC_SUBDEV_G_FRAME_INTERVAL \ | 165 | #define VIDIOC_SUBDEV_G_FRAME_INTERVAL \ |
@@ -137,5 +174,9 @@ struct v4l2_subdev_frame_interval_enum { | |||
137 | _IOWR('V', 75, struct v4l2_subdev_frame_interval_enum) | 174 | _IOWR('V', 75, struct v4l2_subdev_frame_interval_enum) |
138 | #define VIDIOC_SUBDEV_G_CROP _IOWR('V', 59, struct v4l2_subdev_crop) | 175 | #define VIDIOC_SUBDEV_G_CROP _IOWR('V', 59, struct v4l2_subdev_crop) |
139 | #define VIDIOC_SUBDEV_S_CROP _IOWR('V', 60, struct v4l2_subdev_crop) | 176 | #define VIDIOC_SUBDEV_S_CROP _IOWR('V', 60, struct v4l2_subdev_crop) |
177 | #define VIDIOC_SUBDEV_G_SELECTION \ | ||
178 | _IOWR('V', 61, struct v4l2_subdev_selection) | ||
179 | #define VIDIOC_SUBDEV_S_SELECTION \ | ||
180 | _IOWR('V', 62, struct v4l2_subdev_selection) | ||
140 | 181 | ||
141 | #endif | 182 | #endif |
diff --git a/include/linux/vga_switcheroo.h b/include/linux/vga_switcheroo.h index 4b9a7f596f92..b455c7c212eb 100644 --- a/include/linux/vga_switcheroo.h +++ b/include/linux/vga_switcheroo.h | |||
@@ -28,13 +28,19 @@ struct vga_switcheroo_handler { | |||
28 | int (*get_client_id)(struct pci_dev *pdev); | 28 | int (*get_client_id)(struct pci_dev *pdev); |
29 | }; | 29 | }; |
30 | 30 | ||
31 | struct vga_switcheroo_client_ops { | ||
32 | void (*set_gpu_state)(struct pci_dev *dev, enum vga_switcheroo_state); | ||
33 | void (*reprobe)(struct pci_dev *dev); | ||
34 | bool (*can_switch)(struct pci_dev *dev); | ||
35 | }; | ||
31 | 36 | ||
32 | #if defined(CONFIG_VGA_SWITCHEROO) | 37 | #if defined(CONFIG_VGA_SWITCHEROO) |
33 | void vga_switcheroo_unregister_client(struct pci_dev *dev); | 38 | void vga_switcheroo_unregister_client(struct pci_dev *dev); |
34 | int vga_switcheroo_register_client(struct pci_dev *dev, | 39 | int vga_switcheroo_register_client(struct pci_dev *dev, |
35 | void (*set_gpu_state)(struct pci_dev *dev, enum vga_switcheroo_state), | 40 | const struct vga_switcheroo_client_ops *ops); |
36 | void (*reprobe)(struct pci_dev *dev), | 41 | int vga_switcheroo_register_audio_client(struct pci_dev *pdev, |
37 | bool (*can_switch)(struct pci_dev *dev)); | 42 | const struct vga_switcheroo_client_ops *ops, |
43 | int id, bool active); | ||
38 | 44 | ||
39 | void vga_switcheroo_client_fb_set(struct pci_dev *dev, | 45 | void vga_switcheroo_client_fb_set(struct pci_dev *dev, |
40 | struct fb_info *info); | 46 | struct fb_info *info); |
@@ -48,11 +54,12 @@ int vga_switcheroo_process_delayed_switch(void); | |||
48 | 54 | ||
49 | static inline void vga_switcheroo_unregister_client(struct pci_dev *dev) {} | 55 | static inline void vga_switcheroo_unregister_client(struct pci_dev *dev) {} |
50 | static inline int vga_switcheroo_register_client(struct pci_dev *dev, | 56 | static inline int vga_switcheroo_register_client(struct pci_dev *dev, |
51 | void (*set_gpu_state)(struct pci_dev *dev, enum vga_switcheroo_state), | 57 | const struct vga_switcheroo_client_ops *ops) { return 0; } |
52 | void (*reprobe)(struct pci_dev *dev), | ||
53 | bool (*can_switch)(struct pci_dev *dev)) { return 0; } | ||
54 | static inline void vga_switcheroo_client_fb_set(struct pci_dev *dev, struct fb_info *info) {} | 58 | static inline void vga_switcheroo_client_fb_set(struct pci_dev *dev, struct fb_info *info) {} |
55 | static inline int vga_switcheroo_register_handler(struct vga_switcheroo_handler *handler) { return 0; } | 59 | static inline int vga_switcheroo_register_handler(struct vga_switcheroo_handler *handler) { return 0; } |
60 | static inline int vga_switcheroo_register_audio_client(struct pci_dev *pdev, | ||
61 | const struct vga_switcheroo_client_ops *ops, | ||
62 | int id, bool active) { return 0; } | ||
56 | static inline void vga_switcheroo_unregister_handler(void) {} | 63 | static inline void vga_switcheroo_unregister_handler(void) {} |
57 | static inline int vga_switcheroo_process_delayed_switch(void) { return 0; } | 64 | static inline int vga_switcheroo_process_delayed_switch(void) { return 0; } |
58 | 65 | ||
diff --git a/include/linux/vgaarb.h b/include/linux/vgaarb.h index b572f80bdfd5..0ee42d9acdc0 100644 --- a/include/linux/vgaarb.h +++ b/include/linux/vgaarb.h | |||
@@ -31,6 +31,7 @@ | |||
31 | #ifndef LINUX_VGA_H | 31 | #ifndef LINUX_VGA_H |
32 | #define LINUX_VGA_H | 32 | #define LINUX_VGA_H |
33 | 33 | ||
34 | #include <video/vga.h> | ||
34 | 35 | ||
35 | /* Legacy VGA regions */ | 36 | /* Legacy VGA regions */ |
36 | #define VGA_RSRC_NONE 0x00 | 37 | #define VGA_RSRC_NONE 0x00 |
@@ -182,7 +183,13 @@ extern void vga_put(struct pci_dev *pdev, unsigned int rsrc); | |||
182 | */ | 183 | */ |
183 | 184 | ||
184 | #ifndef __ARCH_HAS_VGA_DEFAULT_DEVICE | 185 | #ifndef __ARCH_HAS_VGA_DEFAULT_DEVICE |
186 | #ifdef CONFIG_VGA_ARB | ||
185 | extern struct pci_dev *vga_default_device(void); | 187 | extern struct pci_dev *vga_default_device(void); |
188 | extern void vga_set_default_device(struct pci_dev *pdev); | ||
189 | #else | ||
190 | static inline struct pci_dev *vga_default_device(void) { return NULL; }; | ||
191 | static inline void vga_set_default_device(struct pci_dev *pdev) { }; | ||
192 | #endif | ||
186 | #endif | 193 | #endif |
187 | 194 | ||
188 | /** | 195 | /** |
diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h index c9c9a4680cc5..370d11106c11 100644 --- a/include/linux/videodev2.h +++ b/include/linux/videodev2.h | |||
@@ -292,10 +292,10 @@ struct v4l2_pix_format { | |||
292 | __u32 width; | 292 | __u32 width; |
293 | __u32 height; | 293 | __u32 height; |
294 | __u32 pixelformat; | 294 | __u32 pixelformat; |
295 | enum v4l2_field field; | 295 | __u32 field; /* enum v4l2_field */ |
296 | __u32 bytesperline; /* for padding, zero if unused */ | 296 | __u32 bytesperline; /* for padding, zero if unused */ |
297 | __u32 sizeimage; | 297 | __u32 sizeimage; |
298 | enum v4l2_colorspace colorspace; | 298 | __u32 colorspace; /* enum v4l2_colorspace */ |
299 | __u32 priv; /* private data, depends on pixelformat */ | 299 | __u32 priv; /* private data, depends on pixelformat */ |
300 | }; | 300 | }; |
301 | 301 | ||
@@ -378,7 +378,10 @@ struct v4l2_pix_format { | |||
378 | #define V4L2_PIX_FMT_SGRBG12 v4l2_fourcc('B', 'A', '1', '2') /* 12 GRGR.. BGBG.. */ | 378 | #define V4L2_PIX_FMT_SGRBG12 v4l2_fourcc('B', 'A', '1', '2') /* 12 GRGR.. BGBG.. */ |
379 | #define V4L2_PIX_FMT_SRGGB12 v4l2_fourcc('R', 'G', '1', '2') /* 12 RGRG.. GBGB.. */ | 379 | #define V4L2_PIX_FMT_SRGGB12 v4l2_fourcc('R', 'G', '1', '2') /* 12 RGRG.. GBGB.. */ |
380 | /* 10bit raw bayer DPCM compressed to 8 bits */ | 380 | /* 10bit raw bayer DPCM compressed to 8 bits */ |
381 | #define V4L2_PIX_FMT_SBGGR10DPCM8 v4l2_fourcc('b', 'B', 'A', '8') | ||
382 | #define V4L2_PIX_FMT_SGBRG10DPCM8 v4l2_fourcc('b', 'G', 'A', '8') | ||
381 | #define V4L2_PIX_FMT_SGRBG10DPCM8 v4l2_fourcc('B', 'D', '1', '0') | 383 | #define V4L2_PIX_FMT_SGRBG10DPCM8 v4l2_fourcc('B', 'D', '1', '0') |
384 | #define V4L2_PIX_FMT_SRGGB10DPCM8 v4l2_fourcc('b', 'R', 'A', '8') | ||
382 | /* | 385 | /* |
383 | * 10bit raw bayer, expanded to 16 bits | 386 | * 10bit raw bayer, expanded to 16 bits |
384 | * xxxxrrrrrrrrrrxxxxgggggggggg xxxxggggggggggxxxxbbbbbbbbbb... | 387 | * xxxxrrrrrrrrrrxxxxgggggggggg xxxxggggggggggxxxxbbbbbbbbbb... |
@@ -432,7 +435,7 @@ struct v4l2_pix_format { | |||
432 | */ | 435 | */ |
433 | struct v4l2_fmtdesc { | 436 | struct v4l2_fmtdesc { |
434 | __u32 index; /* Format number */ | 437 | __u32 index; /* Format number */ |
435 | enum v4l2_buf_type type; /* buffer type */ | 438 | __u32 type; /* enum v4l2_buf_type */ |
436 | __u32 flags; | 439 | __u32 flags; |
437 | __u8 description[32]; /* Description string */ | 440 | __u8 description[32]; /* Description string */ |
438 | __u32 pixelformat; /* Format fourcc */ | 441 | __u32 pixelformat; /* Format fourcc */ |
@@ -573,8 +576,8 @@ struct v4l2_jpegcompression { | |||
573 | */ | 576 | */ |
574 | struct v4l2_requestbuffers { | 577 | struct v4l2_requestbuffers { |
575 | __u32 count; | 578 | __u32 count; |
576 | enum v4l2_buf_type type; | 579 | __u32 type; /* enum v4l2_buf_type */ |
577 | enum v4l2_memory memory; | 580 | __u32 memory; /* enum v4l2_memory */ |
578 | __u32 reserved[2]; | 581 | __u32 reserved[2]; |
579 | }; | 582 | }; |
580 | 583 | ||
@@ -610,15 +613,17 @@ struct v4l2_plane { | |||
610 | /** | 613 | /** |
611 | * struct v4l2_buffer - video buffer info | 614 | * struct v4l2_buffer - video buffer info |
612 | * @index: id number of the buffer | 615 | * @index: id number of the buffer |
613 | * @type: buffer type (type == *_MPLANE for multiplanar buffers) | 616 | * @type: enum v4l2_buf_type; buffer type (type == *_MPLANE for |
617 | * multiplanar buffers); | ||
614 | * @bytesused: number of bytes occupied by data in the buffer (payload); | 618 | * @bytesused: number of bytes occupied by data in the buffer (payload); |
615 | * unused (set to 0) for multiplanar buffers | 619 | * unused (set to 0) for multiplanar buffers |
616 | * @flags: buffer informational flags | 620 | * @flags: buffer informational flags |
617 | * @field: field order of the image in the buffer | 621 | * @field: enum v4l2_field; field order of the image in the buffer |
618 | * @timestamp: frame timestamp | 622 | * @timestamp: frame timestamp |
619 | * @timecode: frame timecode | 623 | * @timecode: frame timecode |
620 | * @sequence: sequence count of this frame | 624 | * @sequence: sequence count of this frame |
621 | * @memory: the method, in which the actual video data is passed | 625 | * @memory: enum v4l2_memory; the method, in which the actual video data is |
626 | * passed | ||
622 | * @offset: for non-multiplanar buffers with memory == V4L2_MEMORY_MMAP; | 627 | * @offset: for non-multiplanar buffers with memory == V4L2_MEMORY_MMAP; |
623 | * offset from the start of the device memory for this plane, | 628 | * offset from the start of the device memory for this plane, |
624 | * (or a "cookie" that should be passed to mmap() as offset) | 629 | * (or a "cookie" that should be passed to mmap() as offset) |
@@ -636,16 +641,16 @@ struct v4l2_plane { | |||
636 | */ | 641 | */ |
637 | struct v4l2_buffer { | 642 | struct v4l2_buffer { |
638 | __u32 index; | 643 | __u32 index; |
639 | enum v4l2_buf_type type; | 644 | __u32 type; |
640 | __u32 bytesused; | 645 | __u32 bytesused; |
641 | __u32 flags; | 646 | __u32 flags; |
642 | enum v4l2_field field; | 647 | __u32 field; |
643 | struct timeval timestamp; | 648 | struct timeval timestamp; |
644 | struct v4l2_timecode timecode; | 649 | struct v4l2_timecode timecode; |
645 | __u32 sequence; | 650 | __u32 sequence; |
646 | 651 | ||
647 | /* memory location */ | 652 | /* memory location */ |
648 | enum v4l2_memory memory; | 653 | __u32 memory; |
649 | union { | 654 | union { |
650 | __u32 offset; | 655 | __u32 offset; |
651 | unsigned long userptr; | 656 | unsigned long userptr; |
@@ -708,7 +713,7 @@ struct v4l2_clip { | |||
708 | 713 | ||
709 | struct v4l2_window { | 714 | struct v4l2_window { |
710 | struct v4l2_rect w; | 715 | struct v4l2_rect w; |
711 | enum v4l2_field field; | 716 | __u32 field; /* enum v4l2_field */ |
712 | __u32 chromakey; | 717 | __u32 chromakey; |
713 | struct v4l2_clip __user *clips; | 718 | struct v4l2_clip __user *clips; |
714 | __u32 clipcount; | 719 | __u32 clipcount; |
@@ -745,14 +750,14 @@ struct v4l2_outputparm { | |||
745 | * I N P U T I M A G E C R O P P I N G | 750 | * I N P U T I M A G E C R O P P I N G |
746 | */ | 751 | */ |
747 | struct v4l2_cropcap { | 752 | struct v4l2_cropcap { |
748 | enum v4l2_buf_type type; | 753 | __u32 type; /* enum v4l2_buf_type */ |
749 | struct v4l2_rect bounds; | 754 | struct v4l2_rect bounds; |
750 | struct v4l2_rect defrect; | 755 | struct v4l2_rect defrect; |
751 | struct v4l2_fract pixelaspect; | 756 | struct v4l2_fract pixelaspect; |
752 | }; | 757 | }; |
753 | 758 | ||
754 | struct v4l2_crop { | 759 | struct v4l2_crop { |
755 | enum v4l2_buf_type type; | 760 | __u32 type; /* enum v4l2_buf_type */ |
756 | struct v4l2_rect c; | 761 | struct v4l2_rect c; |
757 | }; | 762 | }; |
758 | 763 | ||
@@ -939,6 +944,9 @@ struct v4l2_standard { | |||
939 | __u32 reserved[4]; | 944 | __u32 reserved[4]; |
940 | }; | 945 | }; |
941 | 946 | ||
947 | /* The DV Preset API is deprecated in favor of the DV Timings API. | ||
948 | New drivers shouldn't use this anymore! */ | ||
949 | |||
942 | /* | 950 | /* |
943 | * V I D E O T I M I N G S D V P R E S E T | 951 | * V I D E O T I M I N G S D V P R E S E T |
944 | */ | 952 | */ |
@@ -986,29 +994,56 @@ struct v4l2_dv_enum_preset { | |||
986 | * D V B T T I M I N G S | 994 | * D V B T T I M I N G S |
987 | */ | 995 | */ |
988 | 996 | ||
989 | /* BT.656/BT.1120 timing data */ | 997 | /** struct v4l2_bt_timings - BT.656/BT.1120 timing data |
998 | * @width: total width of the active video in pixels | ||
999 | * @height: total height of the active video in lines | ||
1000 | * @interlaced: Interlaced or progressive | ||
1001 | * @polarities: Positive or negative polarities | ||
1002 | * @pixelclock: Pixel clock in HZ. Ex. 74.25MHz->74250000 | ||
1003 | * @hfrontporch:Horizontal front porch in pixels | ||
1004 | * @hsync: Horizontal Sync length in pixels | ||
1005 | * @hbackporch: Horizontal back porch in pixels | ||
1006 | * @vfrontporch:Vertical front porch in lines | ||
1007 | * @vsync: Vertical Sync length in lines | ||
1008 | * @vbackporch: Vertical back porch in lines | ||
1009 | * @il_vfrontporch:Vertical front porch for the even field | ||
1010 | * (aka field 2) of interlaced field formats | ||
1011 | * @il_vsync: Vertical Sync length for the even field | ||
1012 | * (aka field 2) of interlaced field formats | ||
1013 | * @il_vbackporch:Vertical back porch for the even field | ||
1014 | * (aka field 2) of interlaced field formats | ||
1015 | * @standards: Standards the timing belongs to | ||
1016 | * @flags: Flags | ||
1017 | * @reserved: Reserved fields, must be zeroed. | ||
1018 | * | ||
1019 | * A note regarding vertical interlaced timings: height refers to the total | ||
1020 | * height of the active video frame (= two fields). The blanking timings refer | ||
1021 | * to the blanking of each field. So the height of the total frame is | ||
1022 | * calculated as follows: | ||
1023 | * | ||
1024 | * tot_height = height + vfrontporch + vsync + vbackporch + | ||
1025 | * il_vfrontporch + il_vsync + il_vbackporch | ||
1026 | * | ||
1027 | * The active height of each field is height / 2. | ||
1028 | */ | ||
990 | struct v4l2_bt_timings { | 1029 | struct v4l2_bt_timings { |
991 | __u32 width; /* width in pixels */ | 1030 | __u32 width; |
992 | __u32 height; /* height in lines */ | 1031 | __u32 height; |
993 | __u32 interlaced; /* Interlaced or progressive */ | 1032 | __u32 interlaced; |
994 | __u32 polarities; /* Positive or negative polarity */ | 1033 | __u32 polarities; |
995 | __u64 pixelclock; /* Pixel clock in HZ. Ex. 74.25MHz->74250000 */ | 1034 | __u64 pixelclock; |
996 | __u32 hfrontporch; /* Horizpontal front porch in pixels */ | 1035 | __u32 hfrontporch; |
997 | __u32 hsync; /* Horizontal Sync length in pixels */ | 1036 | __u32 hsync; |
998 | __u32 hbackporch; /* Horizontal back porch in pixels */ | 1037 | __u32 hbackporch; |
999 | __u32 vfrontporch; /* Vertical front porch in pixels */ | 1038 | __u32 vfrontporch; |
1000 | __u32 vsync; /* Vertical Sync length in lines */ | 1039 | __u32 vsync; |
1001 | __u32 vbackporch; /* Vertical back porch in lines */ | 1040 | __u32 vbackporch; |
1002 | __u32 il_vfrontporch; /* Vertical front porch for bottom field of | 1041 | __u32 il_vfrontporch; |
1003 | * interlaced field formats | 1042 | __u32 il_vsync; |
1004 | */ | 1043 | __u32 il_vbackporch; |
1005 | __u32 il_vsync; /* Vertical sync length for bottom field of | 1044 | __u32 standards; |
1006 | * interlaced field formats | 1045 | __u32 flags; |
1007 | */ | 1046 | __u32 reserved[14]; |
1008 | __u32 il_vbackporch; /* Vertical back porch for bottom field of | ||
1009 | * interlaced field formats | ||
1010 | */ | ||
1011 | __u32 reserved[16]; | ||
1012 | } __attribute__ ((packed)); | 1047 | } __attribute__ ((packed)); |
1013 | 1048 | ||
1014 | /* Interlaced or progressive format */ | 1049 | /* Interlaced or progressive format */ |
@@ -1019,8 +1054,42 @@ struct v4l2_bt_timings { | |||
1019 | #define V4L2_DV_VSYNC_POS_POL 0x00000001 | 1054 | #define V4L2_DV_VSYNC_POS_POL 0x00000001 |
1020 | #define V4L2_DV_HSYNC_POS_POL 0x00000002 | 1055 | #define V4L2_DV_HSYNC_POS_POL 0x00000002 |
1021 | 1056 | ||
1022 | 1057 | /* Timings standards */ | |
1023 | /* DV timings */ | 1058 | #define V4L2_DV_BT_STD_CEA861 (1 << 0) /* CEA-861 Digital TV Profile */ |
1059 | #define V4L2_DV_BT_STD_DMT (1 << 1) /* VESA Discrete Monitor Timings */ | ||
1060 | #define V4L2_DV_BT_STD_CVT (1 << 2) /* VESA Coordinated Video Timings */ | ||
1061 | #define V4L2_DV_BT_STD_GTF (1 << 3) /* VESA Generalized Timings Formula */ | ||
1062 | |||
1063 | /* Flags */ | ||
1064 | |||
1065 | /* CVT/GTF specific: timing uses reduced blanking (CVT) or the 'Secondary | ||
1066 | GTF' curve (GTF). In both cases the horizontal and/or vertical blanking | ||
1067 | intervals are reduced, allowing a higher resolution over the same | ||
1068 | bandwidth. This is a read-only flag. */ | ||
1069 | #define V4L2_DV_FL_REDUCED_BLANKING (1 << 0) | ||
1070 | /* CEA-861 specific: set for CEA-861 formats with a framerate of a multiple | ||
1071 | of six. These formats can be optionally played at 1 / 1.001 speed. | ||
1072 | This is a read-only flag. */ | ||
1073 | #define V4L2_DV_FL_CAN_REDUCE_FPS (1 << 1) | ||
1074 | /* CEA-861 specific: only valid for video transmitters, the flag is cleared | ||
1075 | by receivers. | ||
1076 | If the framerate of the format is a multiple of six, then the pixelclock | ||
1077 | used to set up the transmitter is divided by 1.001 to make it compatible | ||
1078 | with 60 Hz based standards such as NTSC and PAL-M that use a framerate of | ||
1079 | 29.97 Hz. Otherwise this flag is cleared. If the transmitter can't generate | ||
1080 | such frequencies, then the flag will also be cleared. */ | ||
1081 | #define V4L2_DV_FL_REDUCED_FPS (1 << 2) | ||
1082 | /* Specific to interlaced formats: if set, then field 1 is really one half-line | ||
1083 | longer and field 2 is really one half-line shorter, so each field has | ||
1084 | exactly the same number of half-lines. Whether half-lines can be detected | ||
1085 | or used depends on the hardware. */ | ||
1086 | #define V4L2_DV_FL_HALF_LINE (1 << 0) | ||
1087 | |||
1088 | |||
1089 | /** struct v4l2_dv_timings - DV timings | ||
1090 | * @type: the type of the timings | ||
1091 | * @bt: BT656/1120 timings | ||
1092 | */ | ||
1024 | struct v4l2_dv_timings { | 1093 | struct v4l2_dv_timings { |
1025 | __u32 type; | 1094 | __u32 type; |
1026 | union { | 1095 | union { |
@@ -1032,6 +1101,64 @@ struct v4l2_dv_timings { | |||
1032 | /* Values for the type field */ | 1101 | /* Values for the type field */ |
1033 | #define V4L2_DV_BT_656_1120 0 /* BT.656/1120 timing type */ | 1102 | #define V4L2_DV_BT_656_1120 0 /* BT.656/1120 timing type */ |
1034 | 1103 | ||
1104 | |||
1105 | /** struct v4l2_enum_dv_timings - DV timings enumeration | ||
1106 | * @index: enumeration index | ||
1107 | * @reserved: must be zeroed | ||
1108 | * @timings: the timings for the given index | ||
1109 | */ | ||
1110 | struct v4l2_enum_dv_timings { | ||
1111 | __u32 index; | ||
1112 | __u32 reserved[3]; | ||
1113 | struct v4l2_dv_timings timings; | ||
1114 | }; | ||
1115 | |||
1116 | /** struct v4l2_bt_timings_cap - BT.656/BT.1120 timing capabilities | ||
1117 | * @min_width: width in pixels | ||
1118 | * @max_width: width in pixels | ||
1119 | * @min_height: height in lines | ||
1120 | * @max_height: height in lines | ||
1121 | * @min_pixelclock: Pixel clock in HZ. Ex. 74.25MHz->74250000 | ||
1122 | * @max_pixelclock: Pixel clock in HZ. Ex. 74.25MHz->74250000 | ||
1123 | * @standards: Supported standards | ||
1124 | * @capabilities: Supported capabilities | ||
1125 | * @reserved: Must be zeroed | ||
1126 | */ | ||
1127 | struct v4l2_bt_timings_cap { | ||
1128 | __u32 min_width; | ||
1129 | __u32 max_width; | ||
1130 | __u32 min_height; | ||
1131 | __u32 max_height; | ||
1132 | __u64 min_pixelclock; | ||
1133 | __u64 max_pixelclock; | ||
1134 | __u32 standards; | ||
1135 | __u32 capabilities; | ||
1136 | __u32 reserved[16]; | ||
1137 | } __attribute__ ((packed)); | ||
1138 | |||
1139 | /* Supports interlaced formats */ | ||
1140 | #define V4L2_DV_BT_CAP_INTERLACED (1 << 0) | ||
1141 | /* Supports progressive formats */ | ||
1142 | #define V4L2_DV_BT_CAP_PROGRESSIVE (1 << 1) | ||
1143 | /* Supports CVT/GTF reduced blanking */ | ||
1144 | #define V4L2_DV_BT_CAP_REDUCED_BLANKING (1 << 2) | ||
1145 | /* Supports custom formats */ | ||
1146 | #define V4L2_DV_BT_CAP_CUSTOM (1 << 3) | ||
1147 | |||
1148 | /** struct v4l2_dv_timings_cap - DV timings capabilities | ||
1149 | * @type: the type of the timings (same as in struct v4l2_dv_timings) | ||
1150 | * @bt: the BT656/1120 timings capabilities | ||
1151 | */ | ||
1152 | struct v4l2_dv_timings_cap { | ||
1153 | __u32 type; | ||
1154 | __u32 reserved[3]; | ||
1155 | union { | ||
1156 | struct v4l2_bt_timings_cap bt; | ||
1157 | __u32 raw_data[32]; | ||
1158 | }; | ||
1159 | }; | ||
1160 | |||
1161 | |||
1035 | /* | 1162 | /* |
1036 | * V I D E O I N P U T S | 1163 | * V I D E O I N P U T S |
1037 | */ | 1164 | */ |
@@ -1040,7 +1167,7 @@ struct v4l2_input { | |||
1040 | __u8 name[32]; /* Label */ | 1167 | __u8 name[32]; /* Label */ |
1041 | __u32 type; /* Type of input */ | 1168 | __u32 type; /* Type of input */ |
1042 | __u32 audioset; /* Associated audios (bitfield) */ | 1169 | __u32 audioset; /* Associated audios (bitfield) */ |
1043 | __u32 tuner; /* Associated tuner */ | 1170 | __u32 tuner; /* enum v4l2_tuner_type */ |
1044 | v4l2_std_id std; | 1171 | v4l2_std_id std; |
1045 | __u32 status; | 1172 | __u32 status; |
1046 | __u32 capabilities; | 1173 | __u32 capabilities; |
@@ -1137,6 +1264,8 @@ struct v4l2_ext_controls { | |||
1137 | #define V4L2_CTRL_CLASS_FM_TX 0x009b0000 /* FM Modulator control class */ | 1264 | #define V4L2_CTRL_CLASS_FM_TX 0x009b0000 /* FM Modulator control class */ |
1138 | #define V4L2_CTRL_CLASS_FLASH 0x009c0000 /* Camera flash controls */ | 1265 | #define V4L2_CTRL_CLASS_FLASH 0x009c0000 /* Camera flash controls */ |
1139 | #define V4L2_CTRL_CLASS_JPEG 0x009d0000 /* JPEG-compression controls */ | 1266 | #define V4L2_CTRL_CLASS_JPEG 0x009d0000 /* JPEG-compression controls */ |
1267 | #define V4L2_CTRL_CLASS_IMAGE_SOURCE 0x009e0000 /* Image source controls */ | ||
1268 | #define V4L2_CTRL_CLASS_IMAGE_PROC 0x009f0000 /* Image processing controls */ | ||
1140 | 1269 | ||
1141 | #define V4L2_CTRL_ID_MASK (0x0fffffff) | 1270 | #define V4L2_CTRL_ID_MASK (0x0fffffff) |
1142 | #define V4L2_CTRL_ID2CLASS(id) ((id) & 0x0fff0000UL) | 1271 | #define V4L2_CTRL_ID2CLASS(id) ((id) & 0x0fff0000UL) |
@@ -1151,12 +1280,13 @@ enum v4l2_ctrl_type { | |||
1151 | V4L2_CTRL_TYPE_CTRL_CLASS = 6, | 1280 | V4L2_CTRL_TYPE_CTRL_CLASS = 6, |
1152 | V4L2_CTRL_TYPE_STRING = 7, | 1281 | V4L2_CTRL_TYPE_STRING = 7, |
1153 | V4L2_CTRL_TYPE_BITMASK = 8, | 1282 | V4L2_CTRL_TYPE_BITMASK = 8, |
1283 | V4L2_CTRL_TYPE_INTEGER_MENU = 9, | ||
1154 | }; | 1284 | }; |
1155 | 1285 | ||
1156 | /* Used in the VIDIOC_QUERYCTRL ioctl for querying controls */ | 1286 | /* Used in the VIDIOC_QUERYCTRL ioctl for querying controls */ |
1157 | struct v4l2_queryctrl { | 1287 | struct v4l2_queryctrl { |
1158 | __u32 id; | 1288 | __u32 id; |
1159 | enum v4l2_ctrl_type type; | 1289 | __u32 type; /* enum v4l2_ctrl_type */ |
1160 | __u8 name[32]; /* Whatever */ | 1290 | __u8 name[32]; /* Whatever */ |
1161 | __s32 minimum; /* Note signedness */ | 1291 | __s32 minimum; /* Note signedness */ |
1162 | __s32 maximum; | 1292 | __s32 maximum; |
@@ -1170,9 +1300,12 @@ struct v4l2_queryctrl { | |||
1170 | struct v4l2_querymenu { | 1300 | struct v4l2_querymenu { |
1171 | __u32 id; | 1301 | __u32 id; |
1172 | __u32 index; | 1302 | __u32 index; |
1173 | __u8 name[32]; /* Whatever */ | 1303 | union { |
1304 | __u8 name[32]; /* Whatever */ | ||
1305 | __s64 value; | ||
1306 | }; | ||
1174 | __u32 reserved; | 1307 | __u32 reserved; |
1175 | }; | 1308 | } __attribute__ ((packed)); |
1176 | 1309 | ||
1177 | /* Control flags */ | 1310 | /* Control flags */ |
1178 | #define V4L2_CTRL_FLAG_DISABLED 0x0001 | 1311 | #define V4L2_CTRL_FLAG_DISABLED 0x0001 |
@@ -1237,16 +1370,22 @@ enum v4l2_power_line_frequency { | |||
1237 | #define V4L2_CID_COLOR_KILLER (V4L2_CID_BASE+30) | 1370 | #define V4L2_CID_COLOR_KILLER (V4L2_CID_BASE+30) |
1238 | #define V4L2_CID_COLORFX (V4L2_CID_BASE+31) | 1371 | #define V4L2_CID_COLORFX (V4L2_CID_BASE+31) |
1239 | enum v4l2_colorfx { | 1372 | enum v4l2_colorfx { |
1240 | V4L2_COLORFX_NONE = 0, | 1373 | V4L2_COLORFX_NONE = 0, |
1241 | V4L2_COLORFX_BW = 1, | 1374 | V4L2_COLORFX_BW = 1, |
1242 | V4L2_COLORFX_SEPIA = 2, | 1375 | V4L2_COLORFX_SEPIA = 2, |
1243 | V4L2_COLORFX_NEGATIVE = 3, | 1376 | V4L2_COLORFX_NEGATIVE = 3, |
1244 | V4L2_COLORFX_EMBOSS = 4, | 1377 | V4L2_COLORFX_EMBOSS = 4, |
1245 | V4L2_COLORFX_SKETCH = 5, | 1378 | V4L2_COLORFX_SKETCH = 5, |
1246 | V4L2_COLORFX_SKY_BLUE = 6, | 1379 | V4L2_COLORFX_SKY_BLUE = 6, |
1247 | V4L2_COLORFX_GRASS_GREEN = 7, | 1380 | V4L2_COLORFX_GRASS_GREEN = 7, |
1248 | V4L2_COLORFX_SKIN_WHITEN = 8, | 1381 | V4L2_COLORFX_SKIN_WHITEN = 8, |
1249 | V4L2_COLORFX_VIVID = 9, | 1382 | V4L2_COLORFX_VIVID = 9, |
1383 | V4L2_COLORFX_AQUA = 10, | ||
1384 | V4L2_COLORFX_ART_FREEZE = 11, | ||
1385 | V4L2_COLORFX_SILHOUETTE = 12, | ||
1386 | V4L2_COLORFX_SOLARIZATION = 13, | ||
1387 | V4L2_COLORFX_ANTIQUE = 14, | ||
1388 | V4L2_COLORFX_SET_CBCR = 15, | ||
1250 | }; | 1389 | }; |
1251 | #define V4L2_CID_AUTOBRIGHTNESS (V4L2_CID_BASE+32) | 1390 | #define V4L2_CID_AUTOBRIGHTNESS (V4L2_CID_BASE+32) |
1252 | #define V4L2_CID_BAND_STOP_FILTER (V4L2_CID_BASE+33) | 1391 | #define V4L2_CID_BAND_STOP_FILTER (V4L2_CID_BASE+33) |
@@ -1263,9 +1402,10 @@ enum v4l2_colorfx { | |||
1263 | #define V4L2_CID_MIN_BUFFERS_FOR_OUTPUT (V4L2_CID_BASE+40) | 1402 | #define V4L2_CID_MIN_BUFFERS_FOR_OUTPUT (V4L2_CID_BASE+40) |
1264 | 1403 | ||
1265 | #define V4L2_CID_ALPHA_COMPONENT (V4L2_CID_BASE+41) | 1404 | #define V4L2_CID_ALPHA_COMPONENT (V4L2_CID_BASE+41) |
1405 | #define V4L2_CID_COLORFX_CBCR (V4L2_CID_BASE+42) | ||
1266 | 1406 | ||
1267 | /* last CID + 1 */ | 1407 | /* last CID + 1 */ |
1268 | #define V4L2_CID_LASTP1 (V4L2_CID_BASE+42) | 1408 | #define V4L2_CID_LASTP1 (V4L2_CID_BASE+43) |
1269 | 1409 | ||
1270 | /* MPEG-class control IDs defined by V4L2 */ | 1410 | /* MPEG-class control IDs defined by V4L2 */ |
1271 | #define V4L2_CID_MPEG_BASE (V4L2_CTRL_CLASS_MPEG | 0x900) | 1411 | #define V4L2_CID_MPEG_BASE (V4L2_CTRL_CLASS_MPEG | 0x900) |
@@ -1689,6 +1829,78 @@ enum v4l2_exposure_auto_type { | |||
1689 | #define V4L2_CID_IRIS_ABSOLUTE (V4L2_CID_CAMERA_CLASS_BASE+17) | 1829 | #define V4L2_CID_IRIS_ABSOLUTE (V4L2_CID_CAMERA_CLASS_BASE+17) |
1690 | #define V4L2_CID_IRIS_RELATIVE (V4L2_CID_CAMERA_CLASS_BASE+18) | 1830 | #define V4L2_CID_IRIS_RELATIVE (V4L2_CID_CAMERA_CLASS_BASE+18) |
1691 | 1831 | ||
1832 | #define V4L2_CID_AUTO_EXPOSURE_BIAS (V4L2_CID_CAMERA_CLASS_BASE+19) | ||
1833 | |||
1834 | #define V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE (V4L2_CID_CAMERA_CLASS_BASE+20) | ||
1835 | enum v4l2_auto_n_preset_white_balance { | ||
1836 | V4L2_WHITE_BALANCE_MANUAL = 0, | ||
1837 | V4L2_WHITE_BALANCE_AUTO = 1, | ||
1838 | V4L2_WHITE_BALANCE_INCANDESCENT = 2, | ||
1839 | V4L2_WHITE_BALANCE_FLUORESCENT = 3, | ||
1840 | V4L2_WHITE_BALANCE_FLUORESCENT_H = 4, | ||
1841 | V4L2_WHITE_BALANCE_HORIZON = 5, | ||
1842 | V4L2_WHITE_BALANCE_DAYLIGHT = 6, | ||
1843 | V4L2_WHITE_BALANCE_FLASH = 7, | ||
1844 | V4L2_WHITE_BALANCE_CLOUDY = 8, | ||
1845 | V4L2_WHITE_BALANCE_SHADE = 9, | ||
1846 | }; | ||
1847 | |||
1848 | #define V4L2_CID_WIDE_DYNAMIC_RANGE (V4L2_CID_CAMERA_CLASS_BASE+21) | ||
1849 | #define V4L2_CID_IMAGE_STABILIZATION (V4L2_CID_CAMERA_CLASS_BASE+22) | ||
1850 | |||
1851 | #define V4L2_CID_ISO_SENSITIVITY (V4L2_CID_CAMERA_CLASS_BASE+23) | ||
1852 | #define V4L2_CID_ISO_SENSITIVITY_AUTO (V4L2_CID_CAMERA_CLASS_BASE+24) | ||
1853 | enum v4l2_iso_sensitivity_auto_type { | ||
1854 | V4L2_ISO_SENSITIVITY_MANUAL = 0, | ||
1855 | V4L2_ISO_SENSITIVITY_AUTO = 1, | ||
1856 | }; | ||
1857 | |||
1858 | #define V4L2_CID_EXPOSURE_METERING (V4L2_CID_CAMERA_CLASS_BASE+25) | ||
1859 | enum v4l2_exposure_metering { | ||
1860 | V4L2_EXPOSURE_METERING_AVERAGE = 0, | ||
1861 | V4L2_EXPOSURE_METERING_CENTER_WEIGHTED = 1, | ||
1862 | V4L2_EXPOSURE_METERING_SPOT = 2, | ||
1863 | }; | ||
1864 | |||
1865 | #define V4L2_CID_SCENE_MODE (V4L2_CID_CAMERA_CLASS_BASE+26) | ||
1866 | enum v4l2_scene_mode { | ||
1867 | V4L2_SCENE_MODE_NONE = 0, | ||
1868 | V4L2_SCENE_MODE_BACKLIGHT = 1, | ||
1869 | V4L2_SCENE_MODE_BEACH_SNOW = 2, | ||
1870 | V4L2_SCENE_MODE_CANDLE_LIGHT = 3, | ||
1871 | V4L2_SCENE_MODE_DAWN_DUSK = 4, | ||
1872 | V4L2_SCENE_MODE_FALL_COLORS = 5, | ||
1873 | V4L2_SCENE_MODE_FIREWORKS = 6, | ||
1874 | V4L2_SCENE_MODE_LANDSCAPE = 7, | ||
1875 | V4L2_SCENE_MODE_NIGHT = 8, | ||
1876 | V4L2_SCENE_MODE_PARTY_INDOOR = 9, | ||
1877 | V4L2_SCENE_MODE_PORTRAIT = 10, | ||
1878 | V4L2_SCENE_MODE_SPORTS = 11, | ||
1879 | V4L2_SCENE_MODE_SUNSET = 12, | ||
1880 | V4L2_SCENE_MODE_TEXT = 13, | ||
1881 | }; | ||
1882 | |||
1883 | #define V4L2_CID_3A_LOCK (V4L2_CID_CAMERA_CLASS_BASE+27) | ||
1884 | #define V4L2_LOCK_EXPOSURE (1 << 0) | ||
1885 | #define V4L2_LOCK_WHITE_BALANCE (1 << 1) | ||
1886 | #define V4L2_LOCK_FOCUS (1 << 2) | ||
1887 | |||
1888 | #define V4L2_CID_AUTO_FOCUS_START (V4L2_CID_CAMERA_CLASS_BASE+28) | ||
1889 | #define V4L2_CID_AUTO_FOCUS_STOP (V4L2_CID_CAMERA_CLASS_BASE+29) | ||
1890 | #define V4L2_CID_AUTO_FOCUS_STATUS (V4L2_CID_CAMERA_CLASS_BASE+30) | ||
1891 | #define V4L2_AUTO_FOCUS_STATUS_IDLE (0 << 0) | ||
1892 | #define V4L2_AUTO_FOCUS_STATUS_BUSY (1 << 0) | ||
1893 | #define V4L2_AUTO_FOCUS_STATUS_REACHED (1 << 1) | ||
1894 | #define V4L2_AUTO_FOCUS_STATUS_FAILED (1 << 2) | ||
1895 | |||
1896 | #define V4L2_CID_AUTO_FOCUS_RANGE (V4L2_CID_CAMERA_CLASS_BASE+31) | ||
1897 | enum v4l2_auto_focus_range { | ||
1898 | V4L2_AUTO_FOCUS_RANGE_AUTO = 0, | ||
1899 | V4L2_AUTO_FOCUS_RANGE_NORMAL = 1, | ||
1900 | V4L2_AUTO_FOCUS_RANGE_MACRO = 2, | ||
1901 | V4L2_AUTO_FOCUS_RANGE_INFINITY = 3, | ||
1902 | }; | ||
1903 | |||
1692 | /* FM Modulator class control IDs */ | 1904 | /* FM Modulator class control IDs */ |
1693 | #define V4L2_CID_FM_TX_CLASS_BASE (V4L2_CTRL_CLASS_FM_TX | 0x900) | 1905 | #define V4L2_CID_FM_TX_CLASS_BASE (V4L2_CTRL_CLASS_FM_TX | 0x900) |
1694 | #define V4L2_CID_FM_TX_CLASS (V4L2_CTRL_CLASS_FM_TX | 1) | 1906 | #define V4L2_CID_FM_TX_CLASS (V4L2_CTRL_CLASS_FM_TX | 1) |
@@ -1782,13 +1994,28 @@ enum v4l2_jpeg_chroma_subsampling { | |||
1782 | #define V4L2_JPEG_ACTIVE_MARKER_DQT (1 << 17) | 1994 | #define V4L2_JPEG_ACTIVE_MARKER_DQT (1 << 17) |
1783 | #define V4L2_JPEG_ACTIVE_MARKER_DHT (1 << 18) | 1995 | #define V4L2_JPEG_ACTIVE_MARKER_DHT (1 << 18) |
1784 | 1996 | ||
1997 | /* Image source controls */ | ||
1998 | #define V4L2_CID_IMAGE_SOURCE_CLASS_BASE (V4L2_CTRL_CLASS_IMAGE_SOURCE | 0x900) | ||
1999 | #define V4L2_CID_IMAGE_SOURCE_CLASS (V4L2_CTRL_CLASS_IMAGE_SOURCE | 1) | ||
2000 | |||
2001 | #define V4L2_CID_VBLANK (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 1) | ||
2002 | #define V4L2_CID_HBLANK (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 2) | ||
2003 | #define V4L2_CID_ANALOGUE_GAIN (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 3) | ||
2004 | |||
2005 | /* Image processing controls */ | ||
2006 | #define V4L2_CID_IMAGE_PROC_CLASS_BASE (V4L2_CTRL_CLASS_IMAGE_PROC | 0x900) | ||
2007 | #define V4L2_CID_IMAGE_PROC_CLASS (V4L2_CTRL_CLASS_IMAGE_PROC | 1) | ||
2008 | |||
2009 | #define V4L2_CID_LINK_FREQ (V4L2_CID_IMAGE_PROC_CLASS_BASE + 1) | ||
2010 | #define V4L2_CID_PIXEL_RATE (V4L2_CID_IMAGE_PROC_CLASS_BASE + 2) | ||
2011 | |||
1785 | /* | 2012 | /* |
1786 | * T U N I N G | 2013 | * T U N I N G |
1787 | */ | 2014 | */ |
1788 | struct v4l2_tuner { | 2015 | struct v4l2_tuner { |
1789 | __u32 index; | 2016 | __u32 index; |
1790 | __u8 name[32]; | 2017 | __u8 name[32]; |
1791 | enum v4l2_tuner_type type; | 2018 | __u32 type; /* enum v4l2_tuner_type */ |
1792 | __u32 capability; | 2019 | __u32 capability; |
1793 | __u32 rangelow; | 2020 | __u32 rangelow; |
1794 | __u32 rangehigh; | 2021 | __u32 rangehigh; |
@@ -1838,14 +2065,14 @@ struct v4l2_modulator { | |||
1838 | 2065 | ||
1839 | struct v4l2_frequency { | 2066 | struct v4l2_frequency { |
1840 | __u32 tuner; | 2067 | __u32 tuner; |
1841 | enum v4l2_tuner_type type; | 2068 | __u32 type; /* enum v4l2_tuner_type */ |
1842 | __u32 frequency; | 2069 | __u32 frequency; |
1843 | __u32 reserved[8]; | 2070 | __u32 reserved[8]; |
1844 | }; | 2071 | }; |
1845 | 2072 | ||
1846 | struct v4l2_hw_freq_seek { | 2073 | struct v4l2_hw_freq_seek { |
1847 | __u32 tuner; | 2074 | __u32 tuner; |
1848 | enum v4l2_tuner_type type; | 2075 | __u32 type; /* enum v4l2_tuner_type */ |
1849 | __u32 seek_upward; | 2076 | __u32 seek_upward; |
1850 | __u32 wrap_around; | 2077 | __u32 wrap_around; |
1851 | __u32 spacing; | 2078 | __u32 spacing; |
@@ -2056,7 +2283,7 @@ struct v4l2_sliced_vbi_cap { | |||
2056 | (equals frame lines 313-336 for 625 line video | 2283 | (equals frame lines 313-336 for 625 line video |
2057 | standards, 263-286 for 525 line standards) */ | 2284 | standards, 263-286 for 525 line standards) */ |
2058 | __u16 service_lines[2][24]; | 2285 | __u16 service_lines[2][24]; |
2059 | enum v4l2_buf_type type; | 2286 | __u32 type; /* enum v4l2_buf_type */ |
2060 | __u32 reserved[3]; /* must be 0 */ | 2287 | __u32 reserved[3]; /* must be 0 */ |
2061 | }; | 2288 | }; |
2062 | 2289 | ||
@@ -2137,8 +2364,8 @@ struct v4l2_plane_pix_format { | |||
2137 | * @width: image width in pixels | 2364 | * @width: image width in pixels |
2138 | * @height: image height in pixels | 2365 | * @height: image height in pixels |
2139 | * @pixelformat: little endian four character code (fourcc) | 2366 | * @pixelformat: little endian four character code (fourcc) |
2140 | * @field: field order (for interlaced video) | 2367 | * @field: enum v4l2_field; field order (for interlaced video) |
2141 | * @colorspace: supplemental to pixelformat | 2368 | * @colorspace: enum v4l2_colorspace; supplemental to pixelformat |
2142 | * @plane_fmt: per-plane information | 2369 | * @plane_fmt: per-plane information |
2143 | * @num_planes: number of planes for this format | 2370 | * @num_planes: number of planes for this format |
2144 | */ | 2371 | */ |
@@ -2146,8 +2373,8 @@ struct v4l2_pix_format_mplane { | |||
2146 | __u32 width; | 2373 | __u32 width; |
2147 | __u32 height; | 2374 | __u32 height; |
2148 | __u32 pixelformat; | 2375 | __u32 pixelformat; |
2149 | enum v4l2_field field; | 2376 | __u32 field; |
2150 | enum v4l2_colorspace colorspace; | 2377 | __u32 colorspace; |
2151 | 2378 | ||
2152 | struct v4l2_plane_pix_format plane_fmt[VIDEO_MAX_PLANES]; | 2379 | struct v4l2_plane_pix_format plane_fmt[VIDEO_MAX_PLANES]; |
2153 | __u8 num_planes; | 2380 | __u8 num_planes; |
@@ -2156,7 +2383,7 @@ struct v4l2_pix_format_mplane { | |||
2156 | 2383 | ||
2157 | /** | 2384 | /** |
2158 | * struct v4l2_format - stream data format | 2385 | * struct v4l2_format - stream data format |
2159 | * @type: type of the data stream | 2386 | * @type: enum v4l2_buf_type; type of the data stream |
2160 | * @pix: definition of an image format | 2387 | * @pix: definition of an image format |
2161 | * @pix_mp: definition of a multiplanar image format | 2388 | * @pix_mp: definition of a multiplanar image format |
2162 | * @win: definition of an overlaid image | 2389 | * @win: definition of an overlaid image |
@@ -2165,7 +2392,7 @@ struct v4l2_pix_format_mplane { | |||
2165 | * @raw_data: placeholder for future extensions and custom formats | 2392 | * @raw_data: placeholder for future extensions and custom formats |
2166 | */ | 2393 | */ |
2167 | struct v4l2_format { | 2394 | struct v4l2_format { |
2168 | enum v4l2_buf_type type; | 2395 | __u32 type; |
2169 | union { | 2396 | union { |
2170 | struct v4l2_pix_format pix; /* V4L2_BUF_TYPE_VIDEO_CAPTURE */ | 2397 | struct v4l2_pix_format pix; /* V4L2_BUF_TYPE_VIDEO_CAPTURE */ |
2171 | struct v4l2_pix_format_mplane pix_mp; /* V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE */ | 2398 | struct v4l2_pix_format_mplane pix_mp; /* V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE */ |
@@ -2179,7 +2406,7 @@ struct v4l2_format { | |||
2179 | /* Stream type-dependent parameters | 2406 | /* Stream type-dependent parameters |
2180 | */ | 2407 | */ |
2181 | struct v4l2_streamparm { | 2408 | struct v4l2_streamparm { |
2182 | enum v4l2_buf_type type; | 2409 | __u32 type; /* enum v4l2_buf_type */ |
2183 | union { | 2410 | union { |
2184 | struct v4l2_captureparm capture; | 2411 | struct v4l2_captureparm capture; |
2185 | struct v4l2_outputparm output; | 2412 | struct v4l2_outputparm output; |
@@ -2292,14 +2519,14 @@ struct v4l2_dbg_chip_ident { | |||
2292 | * @index: on return, index of the first created buffer | 2519 | * @index: on return, index of the first created buffer |
2293 | * @count: entry: number of requested buffers, | 2520 | * @count: entry: number of requested buffers, |
2294 | * return: number of created buffers | 2521 | * return: number of created buffers |
2295 | * @memory: buffer memory type | 2522 | * @memory: enum v4l2_memory; buffer memory type |
2296 | * @format: frame format, for which buffers are requested | 2523 | * @format: frame format, for which buffers are requested |
2297 | * @reserved: future extensions | 2524 | * @reserved: future extensions |
2298 | */ | 2525 | */ |
2299 | struct v4l2_create_buffers { | 2526 | struct v4l2_create_buffers { |
2300 | __u32 index; | 2527 | __u32 index; |
2301 | __u32 count; | 2528 | __u32 count; |
2302 | enum v4l2_memory memory; | 2529 | __u32 memory; |
2303 | struct v4l2_format format; | 2530 | struct v4l2_format format; |
2304 | __u32 reserved[8]; | 2531 | __u32 reserved[8]; |
2305 | }; | 2532 | }; |
@@ -2356,8 +2583,8 @@ struct v4l2_create_buffers { | |||
2356 | #define VIDIOC_TRY_FMT _IOWR('V', 64, struct v4l2_format) | 2583 | #define VIDIOC_TRY_FMT _IOWR('V', 64, struct v4l2_format) |
2357 | #define VIDIOC_ENUMAUDIO _IOWR('V', 65, struct v4l2_audio) | 2584 | #define VIDIOC_ENUMAUDIO _IOWR('V', 65, struct v4l2_audio) |
2358 | #define VIDIOC_ENUMAUDOUT _IOWR('V', 66, struct v4l2_audioout) | 2585 | #define VIDIOC_ENUMAUDOUT _IOWR('V', 66, struct v4l2_audioout) |
2359 | #define VIDIOC_G_PRIORITY _IOR('V', 67, enum v4l2_priority) | 2586 | #define VIDIOC_G_PRIORITY _IOR('V', 67, __u32) /* enum v4l2_priority */ |
2360 | #define VIDIOC_S_PRIORITY _IOW('V', 68, enum v4l2_priority) | 2587 | #define VIDIOC_S_PRIORITY _IOW('V', 68, __u32) /* enum v4l2_priority */ |
2361 | #define VIDIOC_G_SLICED_VBI_CAP _IOWR('V', 69, struct v4l2_sliced_vbi_cap) | 2588 | #define VIDIOC_G_SLICED_VBI_CAP _IOWR('V', 69, struct v4l2_sliced_vbi_cap) |
2362 | #define VIDIOC_LOG_STATUS _IO('V', 70) | 2589 | #define VIDIOC_LOG_STATUS _IO('V', 70) |
2363 | #define VIDIOC_G_EXT_CTRLS _IOWR('V', 71, struct v4l2_ext_controls) | 2590 | #define VIDIOC_G_EXT_CTRLS _IOWR('V', 71, struct v4l2_ext_controls) |
@@ -2384,6 +2611,9 @@ struct v4l2_create_buffers { | |||
2384 | #endif | 2611 | #endif |
2385 | 2612 | ||
2386 | #define VIDIOC_S_HW_FREQ_SEEK _IOW('V', 82, struct v4l2_hw_freq_seek) | 2613 | #define VIDIOC_S_HW_FREQ_SEEK _IOW('V', 82, struct v4l2_hw_freq_seek) |
2614 | |||
2615 | /* These four DV Preset ioctls are deprecated in favor of the DV Timings | ||
2616 | ioctls. */ | ||
2387 | #define VIDIOC_ENUM_DV_PRESETS _IOWR('V', 83, struct v4l2_dv_enum_preset) | 2617 | #define VIDIOC_ENUM_DV_PRESETS _IOWR('V', 83, struct v4l2_dv_enum_preset) |
2388 | #define VIDIOC_S_DV_PRESET _IOWR('V', 84, struct v4l2_dv_preset) | 2618 | #define VIDIOC_S_DV_PRESET _IOWR('V', 84, struct v4l2_dv_preset) |
2389 | #define VIDIOC_G_DV_PRESET _IOWR('V', 85, struct v4l2_dv_preset) | 2619 | #define VIDIOC_G_DV_PRESET _IOWR('V', 85, struct v4l2_dv_preset) |
@@ -2408,6 +2638,12 @@ struct v4l2_create_buffers { | |||
2408 | #define VIDIOC_DECODER_CMD _IOWR('V', 96, struct v4l2_decoder_cmd) | 2638 | #define VIDIOC_DECODER_CMD _IOWR('V', 96, struct v4l2_decoder_cmd) |
2409 | #define VIDIOC_TRY_DECODER_CMD _IOWR('V', 97, struct v4l2_decoder_cmd) | 2639 | #define VIDIOC_TRY_DECODER_CMD _IOWR('V', 97, struct v4l2_decoder_cmd) |
2410 | 2640 | ||
2641 | /* Experimental, these three ioctls may change over the next couple of kernel | ||
2642 | versions. */ | ||
2643 | #define VIDIOC_ENUM_DV_TIMINGS _IOWR('V', 96, struct v4l2_enum_dv_timings) | ||
2644 | #define VIDIOC_QUERY_DV_TIMINGS _IOR('V', 97, struct v4l2_dv_timings) | ||
2645 | #define VIDIOC_DV_TIMINGS_CAP _IOWR('V', 98, struct v4l2_dv_timings_cap) | ||
2646 | |||
2411 | /* Reminder: when adding new ioctls please add support for them to | 2647 | /* Reminder: when adding new ioctls please add support for them to |
2412 | drivers/media/video/v4l2-compat-ioctl32.c as well! */ | 2648 | drivers/media/video/v4l2-compat-ioctl32.c as well! */ |
2413 | 2649 | ||
diff --git a/include/linux/watchdog.h b/include/linux/watchdog.h index ac40716b44e9..da70f0facd2b 100644 --- a/include/linux/watchdog.h +++ b/include/linux/watchdog.h | |||
@@ -45,6 +45,8 @@ struct watchdog_info { | |||
45 | #define WDIOF_SETTIMEOUT 0x0080 /* Set timeout (in seconds) */ | 45 | #define WDIOF_SETTIMEOUT 0x0080 /* Set timeout (in seconds) */ |
46 | #define WDIOF_MAGICCLOSE 0x0100 /* Supports magic close char */ | 46 | #define WDIOF_MAGICCLOSE 0x0100 /* Supports magic close char */ |
47 | #define WDIOF_PRETIMEOUT 0x0200 /* Pretimeout (in seconds), get/set */ | 47 | #define WDIOF_PRETIMEOUT 0x0200 /* Pretimeout (in seconds), get/set */ |
48 | #define WDIOF_ALARMONLY 0x0400 /* Watchdog triggers a management or | ||
49 | other external alarm not a reboot */ | ||
48 | #define WDIOF_KEEPALIVEPING 0x8000 /* Keep alive ping reply */ | 50 | #define WDIOF_KEEPALIVEPING 0x8000 /* Keep alive ping reply */ |
49 | 51 | ||
50 | #define WDIOS_DISABLECARD 0x0001 /* Turn off the watchdog timer */ | 52 | #define WDIOS_DISABLECARD 0x0001 /* Turn off the watchdog timer */ |
@@ -54,6 +56,8 @@ struct watchdog_info { | |||
54 | #ifdef __KERNEL__ | 56 | #ifdef __KERNEL__ |
55 | 57 | ||
56 | #include <linux/bitops.h> | 58 | #include <linux/bitops.h> |
59 | #include <linux/device.h> | ||
60 | #include <linux/cdev.h> | ||
57 | 61 | ||
58 | struct watchdog_ops; | 62 | struct watchdog_ops; |
59 | struct watchdog_device; | 63 | struct watchdog_device; |
@@ -67,6 +71,8 @@ struct watchdog_device; | |||
67 | * @status: The routine that shows the status of the watchdog device. | 71 | * @status: The routine that shows the status of the watchdog device. |
68 | * @set_timeout:The routine for setting the watchdog devices timeout value. | 72 | * @set_timeout:The routine for setting the watchdog devices timeout value. |
69 | * @get_timeleft:The routine that get's the time that's left before a reset. | 73 | * @get_timeleft:The routine that get's the time that's left before a reset. |
74 | * @ref: The ref operation for dyn. allocated watchdog_device structs | ||
75 | * @unref: The unref operation for dyn. allocated watchdog_device structs | ||
70 | * @ioctl: The routines that handles extra ioctl calls. | 76 | * @ioctl: The routines that handles extra ioctl calls. |
71 | * | 77 | * |
72 | * The watchdog_ops structure contains a list of low-level operations | 78 | * The watchdog_ops structure contains a list of low-level operations |
@@ -84,11 +90,17 @@ struct watchdog_ops { | |||
84 | unsigned int (*status)(struct watchdog_device *); | 90 | unsigned int (*status)(struct watchdog_device *); |
85 | int (*set_timeout)(struct watchdog_device *, unsigned int); | 91 | int (*set_timeout)(struct watchdog_device *, unsigned int); |
86 | unsigned int (*get_timeleft)(struct watchdog_device *); | 92 | unsigned int (*get_timeleft)(struct watchdog_device *); |
93 | void (*ref)(struct watchdog_device *); | ||
94 | void (*unref)(struct watchdog_device *); | ||
87 | long (*ioctl)(struct watchdog_device *, unsigned int, unsigned long); | 95 | long (*ioctl)(struct watchdog_device *, unsigned int, unsigned long); |
88 | }; | 96 | }; |
89 | 97 | ||
90 | /** struct watchdog_device - The structure that defines a watchdog device | 98 | /** struct watchdog_device - The structure that defines a watchdog device |
91 | * | 99 | * |
100 | * @id: The watchdog's ID. (Allocated by watchdog_register_device) | ||
101 | * @cdev: The watchdog's Character device. | ||
102 | * @dev: The device for our watchdog | ||
103 | * @parent: The parent bus device | ||
92 | * @info: Pointer to a watchdog_info structure. | 104 | * @info: Pointer to a watchdog_info structure. |
93 | * @ops: Pointer to the list of watchdog operations. | 105 | * @ops: Pointer to the list of watchdog operations. |
94 | * @bootstatus: Status of the watchdog device at boot. | 106 | * @bootstatus: Status of the watchdog device at boot. |
@@ -96,6 +108,7 @@ struct watchdog_ops { | |||
96 | * @min_timeout:The watchdog devices minimum timeout value. | 108 | * @min_timeout:The watchdog devices minimum timeout value. |
97 | * @max_timeout:The watchdog devices maximum timeout value. | 109 | * @max_timeout:The watchdog devices maximum timeout value. |
98 | * @driver-data:Pointer to the drivers private data. | 110 | * @driver-data:Pointer to the drivers private data. |
111 | * @lock: Lock for watchdog core internal use only. | ||
99 | * @status: Field that contains the devices internal status bits. | 112 | * @status: Field that contains the devices internal status bits. |
100 | * | 113 | * |
101 | * The watchdog_device structure contains all information about a | 114 | * The watchdog_device structure contains all information about a |
@@ -103,8 +116,15 @@ struct watchdog_ops { | |||
103 | * | 116 | * |
104 | * The driver-data field may not be accessed directly. It must be accessed | 117 | * The driver-data field may not be accessed directly. It must be accessed |
105 | * via the watchdog_set_drvdata and watchdog_get_drvdata helpers. | 118 | * via the watchdog_set_drvdata and watchdog_get_drvdata helpers. |
119 | * | ||
120 | * The lock field is for watchdog core internal use only and should not be | ||
121 | * touched. | ||
106 | */ | 122 | */ |
107 | struct watchdog_device { | 123 | struct watchdog_device { |
124 | int id; | ||
125 | struct cdev cdev; | ||
126 | struct device *dev; | ||
127 | struct device *parent; | ||
108 | const struct watchdog_info *info; | 128 | const struct watchdog_info *info; |
109 | const struct watchdog_ops *ops; | 129 | const struct watchdog_ops *ops; |
110 | unsigned int bootstatus; | 130 | unsigned int bootstatus; |
@@ -112,12 +132,14 @@ struct watchdog_device { | |||
112 | unsigned int min_timeout; | 132 | unsigned int min_timeout; |
113 | unsigned int max_timeout; | 133 | unsigned int max_timeout; |
114 | void *driver_data; | 134 | void *driver_data; |
135 | struct mutex lock; | ||
115 | unsigned long status; | 136 | unsigned long status; |
116 | /* Bit numbers for status flags */ | 137 | /* Bit numbers for status flags */ |
117 | #define WDOG_ACTIVE 0 /* Is the watchdog running/active */ | 138 | #define WDOG_ACTIVE 0 /* Is the watchdog running/active */ |
118 | #define WDOG_DEV_OPEN 1 /* Opened via /dev/watchdog ? */ | 139 | #define WDOG_DEV_OPEN 1 /* Opened via /dev/watchdog ? */ |
119 | #define WDOG_ALLOW_RELEASE 2 /* Did we receive the magic char ? */ | 140 | #define WDOG_ALLOW_RELEASE 2 /* Did we receive the magic char ? */ |
120 | #define WDOG_NO_WAY_OUT 3 /* Is 'nowayout' feature set ? */ | 141 | #define WDOG_NO_WAY_OUT 3 /* Is 'nowayout' feature set ? */ |
142 | #define WDOG_UNREGISTERED 4 /* Has the device been unregistered */ | ||
121 | }; | 143 | }; |
122 | 144 | ||
123 | #ifdef CONFIG_WATCHDOG_NOWAYOUT | 145 | #ifdef CONFIG_WATCHDOG_NOWAYOUT |
@@ -128,6 +150,12 @@ struct watchdog_device { | |||
128 | #define WATCHDOG_NOWAYOUT_INIT_STATUS 0 | 150 | #define WATCHDOG_NOWAYOUT_INIT_STATUS 0 |
129 | #endif | 151 | #endif |
130 | 152 | ||
153 | /* Use the following function to check wether or not the watchdog is active */ | ||
154 | static inline bool watchdog_active(struct watchdog_device *wdd) | ||
155 | { | ||
156 | return test_bit(WDOG_ACTIVE, &wdd->status); | ||
157 | } | ||
158 | |||
131 | /* Use the following function to set the nowayout feature */ | 159 | /* Use the following function to set the nowayout feature */ |
132 | static inline void watchdog_set_nowayout(struct watchdog_device *wdd, bool nowayout) | 160 | static inline void watchdog_set_nowayout(struct watchdog_device *wdd, bool nowayout) |
133 | { | 161 | { |
diff --git a/include/linux/writeback.h b/include/linux/writeback.h index a2b84f598e2b..6d0a0fcd80e7 100644 --- a/include/linux/writeback.h +++ b/include/linux/writeback.h | |||
@@ -58,7 +58,6 @@ extern const char *wb_reason_name[]; | |||
58 | * in a manner such that unspecified fields are set to zero. | 58 | * in a manner such that unspecified fields are set to zero. |
59 | */ | 59 | */ |
60 | struct writeback_control { | 60 | struct writeback_control { |
61 | enum writeback_sync_modes sync_mode; | ||
62 | long nr_to_write; /* Write this many pages, and decrement | 61 | long nr_to_write; /* Write this many pages, and decrement |
63 | this for each page written */ | 62 | this for each page written */ |
64 | long pages_skipped; /* Pages which were not written */ | 63 | long pages_skipped; /* Pages which were not written */ |
@@ -71,6 +70,8 @@ struct writeback_control { | |||
71 | loff_t range_start; | 70 | loff_t range_start; |
72 | loff_t range_end; | 71 | loff_t range_end; |
73 | 72 | ||
73 | enum writeback_sync_modes sync_mode; | ||
74 | |||
74 | unsigned for_kupdate:1; /* A kupdate writeback */ | 75 | unsigned for_kupdate:1; /* A kupdate writeback */ |
75 | unsigned for_background:1; /* A background writeback */ | 76 | unsigned for_background:1; /* A background writeback */ |
76 | unsigned tagged_writepages:1; /* tag-and-write to avoid livelock */ | 77 | unsigned tagged_writepages:1; /* tag-and-write to avoid livelock */ |
@@ -94,6 +95,7 @@ long writeback_inodes_wb(struct bdi_writeback *wb, long nr_pages, | |||
94 | enum wb_reason reason); | 95 | enum wb_reason reason); |
95 | long wb_do_writeback(struct bdi_writeback *wb, int force_wait); | 96 | long wb_do_writeback(struct bdi_writeback *wb, int force_wait); |
96 | void wakeup_flusher_threads(long nr_pages, enum wb_reason reason); | 97 | void wakeup_flusher_threads(long nr_pages, enum wb_reason reason); |
98 | void inode_wait_for_writeback(struct inode *inode); | ||
97 | 99 | ||
98 | /* writeback.h requires fs.h; it, too, is not included from here. */ | 100 | /* writeback.h requires fs.h; it, too, is not included from here. */ |
99 | static inline void wait_on_inode(struct inode *inode) | 101 | static inline void wait_on_inode(struct inode *inode) |
@@ -101,12 +103,6 @@ static inline void wait_on_inode(struct inode *inode) | |||
101 | might_sleep(); | 103 | might_sleep(); |
102 | wait_on_bit(&inode->i_state, __I_NEW, inode_wait, TASK_UNINTERRUPTIBLE); | 104 | wait_on_bit(&inode->i_state, __I_NEW, inode_wait, TASK_UNINTERRUPTIBLE); |
103 | } | 105 | } |
104 | static inline void inode_sync_wait(struct inode *inode) | ||
105 | { | ||
106 | might_sleep(); | ||
107 | wait_on_bit(&inode->i_state, __I_SYNC, inode_wait, | ||
108 | TASK_UNINTERRUPTIBLE); | ||
109 | } | ||
110 | 106 | ||
111 | 107 | ||
112 | /* | 108 | /* |
diff --git a/include/media/media-entity.h b/include/media/media-entity.h index 29e7bba78ffe..0c16f518ee09 100644 --- a/include/media/media-entity.h +++ b/include/media/media-entity.h | |||
@@ -46,6 +46,7 @@ struct media_entity_operations { | |||
46 | int (*link_setup)(struct media_entity *entity, | 46 | int (*link_setup)(struct media_entity *entity, |
47 | const struct media_pad *local, | 47 | const struct media_pad *local, |
48 | const struct media_pad *remote, u32 flags); | 48 | const struct media_pad *remote, u32 flags); |
49 | int (*link_validate)(struct media_link *link); | ||
49 | }; | 50 | }; |
50 | 51 | ||
51 | struct media_entity { | 52 | struct media_entity { |
@@ -140,8 +141,8 @@ void media_entity_graph_walk_start(struct media_entity_graph *graph, | |||
140 | struct media_entity *entity); | 141 | struct media_entity *entity); |
141 | struct media_entity * | 142 | struct media_entity * |
142 | media_entity_graph_walk_next(struct media_entity_graph *graph); | 143 | media_entity_graph_walk_next(struct media_entity_graph *graph); |
143 | void media_entity_pipeline_start(struct media_entity *entity, | 144 | __must_check int media_entity_pipeline_start(struct media_entity *entity, |
144 | struct media_pipeline *pipe); | 145 | struct media_pipeline *pipe); |
145 | void media_entity_pipeline_stop(struct media_entity *entity); | 146 | void media_entity_pipeline_stop(struct media_entity *entity); |
146 | 147 | ||
147 | #define media_entity_call(entity, operation, args...) \ | 148 | #define media_entity_call(entity, operation, args...) \ |
diff --git a/include/media/mt9p031.h b/include/media/mt9p031.h index 96448c7a318b..0c97b19af293 100644 --- a/include/media/mt9p031.h +++ b/include/media/mt9p031.h | |||
@@ -3,17 +3,18 @@ | |||
3 | 3 | ||
4 | struct v4l2_subdev; | 4 | struct v4l2_subdev; |
5 | 5 | ||
6 | enum { | 6 | /* |
7 | MT9P031_COLOR_VERSION, | 7 | * struct mt9p031_platform_data - MT9P031 platform data |
8 | MT9P031_MONOCHROME_VERSION, | 8 | * @set_xclk: Clock frequency set callback |
9 | }; | 9 | * @reset: Chip reset GPIO (set to -1 if not used) |
10 | 10 | * @ext_freq: Input clock frequency | |
11 | * @target_freq: Pixel clock frequency | ||
12 | */ | ||
11 | struct mt9p031_platform_data { | 13 | struct mt9p031_platform_data { |
12 | int (*set_xclk)(struct v4l2_subdev *subdev, int hz); | 14 | int (*set_xclk)(struct v4l2_subdev *subdev, int hz); |
13 | int (*reset)(struct v4l2_subdev *subdev, int active); | 15 | int reset; |
14 | int ext_freq; /* input frequency to the mt9p031 for PLL dividers */ | 16 | int ext_freq; |
15 | int target_freq; /* frequency target for the PLL */ | 17 | int target_freq; |
16 | int version; /* MT9P031_COLOR_VERSION or MT9P031_MONOCHROME_VERSION */ | ||
17 | }; | 18 | }; |
18 | 19 | ||
19 | #endif | 20 | #endif |
diff --git a/include/media/omap3isp.h b/include/media/omap3isp.h index 042849a34640..4d94be5226af 100644 --- a/include/media/omap3isp.h +++ b/include/media/omap3isp.h | |||
@@ -29,6 +29,10 @@ | |||
29 | struct i2c_board_info; | 29 | struct i2c_board_info; |
30 | struct isp_device; | 30 | struct isp_device; |
31 | 31 | ||
32 | #define ISP_XCLK_NONE 0 | ||
33 | #define ISP_XCLK_A 1 | ||
34 | #define ISP_XCLK_B 2 | ||
35 | |||
32 | enum isp_interface_type { | 36 | enum isp_interface_type { |
33 | ISP_INTERFACE_PARALLEL, | 37 | ISP_INTERFACE_PARALLEL, |
34 | ISP_INTERFACE_CSI2A_PHY2, | 38 | ISP_INTERFACE_CSI2A_PHY2, |
@@ -87,6 +91,29 @@ enum { | |||
87 | }; | 91 | }; |
88 | 92 | ||
89 | /** | 93 | /** |
94 | * struct isp_csiphy_lane: CCP2/CSI2 lane position and polarity | ||
95 | * @pos: position of the lane | ||
96 | * @pol: polarity of the lane | ||
97 | */ | ||
98 | struct isp_csiphy_lane { | ||
99 | u8 pos; | ||
100 | u8 pol; | ||
101 | }; | ||
102 | |||
103 | #define ISP_CSIPHY1_NUM_DATA_LANES 1 | ||
104 | #define ISP_CSIPHY2_NUM_DATA_LANES 2 | ||
105 | |||
106 | /** | ||
107 | * struct isp_csiphy_lanes_cfg - CCP2/CSI2 lane configuration | ||
108 | * @data: Configuration of one or two data lanes | ||
109 | * @clk: Clock lane configuration | ||
110 | */ | ||
111 | struct isp_csiphy_lanes_cfg { | ||
112 | struct isp_csiphy_lane data[ISP_CSIPHY2_NUM_DATA_LANES]; | ||
113 | struct isp_csiphy_lane clk; | ||
114 | }; | ||
115 | |||
116 | /** | ||
90 | * struct isp_ccp2_platform_data - CCP2 interface platform data | 117 | * struct isp_ccp2_platform_data - CCP2 interface platform data |
91 | * @strobe_clk_pol: Strobe/clock polarity | 118 | * @strobe_clk_pol: Strobe/clock polarity |
92 | * 0 - Non Inverted, 1 - Inverted | 119 | * 0 - Non Inverted, 1 - Inverted |
@@ -105,6 +132,7 @@ struct isp_ccp2_platform_data { | |||
105 | unsigned int ccp2_mode:1; | 132 | unsigned int ccp2_mode:1; |
106 | unsigned int phy_layer:1; | 133 | unsigned int phy_layer:1; |
107 | unsigned int vpclk_div:2; | 134 | unsigned int vpclk_div:2; |
135 | struct isp_csiphy_lanes_cfg lanecfg; | ||
108 | }; | 136 | }; |
109 | 137 | ||
110 | /** | 138 | /** |
@@ -115,6 +143,7 @@ struct isp_ccp2_platform_data { | |||
115 | struct isp_csi2_platform_data { | 143 | struct isp_csi2_platform_data { |
116 | unsigned crc:1; | 144 | unsigned crc:1; |
117 | unsigned vpclk_div:2; | 145 | unsigned vpclk_div:2; |
146 | struct isp_csiphy_lanes_cfg lanecfg; | ||
118 | }; | 147 | }; |
119 | 148 | ||
120 | struct isp_subdev_i2c_board_info { | 149 | struct isp_subdev_i2c_board_info { |
diff --git a/include/media/rc-map.h b/include/media/rc-map.h index 8db6741c1256..cfd5163ff7f3 100644 --- a/include/media/rc-map.h +++ b/include/media/rc-map.h | |||
@@ -62,6 +62,7 @@ void rc_map_init(void); | |||
62 | #define RC_MAP_ANYSEE "rc-anysee" | 62 | #define RC_MAP_ANYSEE "rc-anysee" |
63 | #define RC_MAP_APAC_VIEWCOMP "rc-apac-viewcomp" | 63 | #define RC_MAP_APAC_VIEWCOMP "rc-apac-viewcomp" |
64 | #define RC_MAP_ASUS_PC39 "rc-asus-pc39" | 64 | #define RC_MAP_ASUS_PC39 "rc-asus-pc39" |
65 | #define RC_MAP_ASUS_PS3_100 "rc-asus-ps3-100" | ||
65 | #define RC_MAP_ATI_TV_WONDER_HD_600 "rc-ati-tv-wonder-hd-600" | 66 | #define RC_MAP_ATI_TV_WONDER_HD_600 "rc-ati-tv-wonder-hd-600" |
66 | #define RC_MAP_ATI_X10 "rc-ati-x10" | 67 | #define RC_MAP_ATI_X10 "rc-ati-x10" |
67 | #define RC_MAP_AVERMEDIA_A16D "rc-avermedia-a16d" | 68 | #define RC_MAP_AVERMEDIA_A16D "rc-avermedia-a16d" |
@@ -113,6 +114,8 @@ void rc_map_init(void); | |||
113 | #define RC_MAP_LME2510 "rc-lme2510" | 114 | #define RC_MAP_LME2510 "rc-lme2510" |
114 | #define RC_MAP_MANLI "rc-manli" | 115 | #define RC_MAP_MANLI "rc-manli" |
115 | #define RC_MAP_MEDION_X10 "rc-medion-x10" | 116 | #define RC_MAP_MEDION_X10 "rc-medion-x10" |
117 | #define RC_MAP_MEDION_X10_DIGITAINER "rc-medion-x10-digitainer" | ||
118 | #define RC_MAP_MEDION_X10_OR2X "rc-medion-x10-or2x" | ||
116 | #define RC_MAP_MSI_DIGIVOX_II "rc-msi-digivox-ii" | 119 | #define RC_MAP_MSI_DIGIVOX_II "rc-msi-digivox-ii" |
117 | #define RC_MAP_MSI_DIGIVOX_III "rc-msi-digivox-iii" | 120 | #define RC_MAP_MSI_DIGIVOX_III "rc-msi-digivox-iii" |
118 | #define RC_MAP_MSI_TVANYWHERE_PLUS "rc-msi-tvanywhere-plus" | 121 | #define RC_MAP_MSI_TVANYWHERE_PLUS "rc-msi-tvanywhere-plus" |
diff --git a/include/media/s5p_fimc.h b/include/media/s5p_fimc.h index 688fb3f1dc35..8587aaf73646 100644 --- a/include/media/s5p_fimc.h +++ b/include/media/s5p_fimc.h | |||
@@ -64,4 +64,20 @@ struct s5p_platform_fimc { | |||
64 | */ | 64 | */ |
65 | #define S5P_FIMC_TX_END_NOTIFY _IO('e', 0) | 65 | #define S5P_FIMC_TX_END_NOTIFY _IO('e', 0) |
66 | 66 | ||
67 | enum fimc_subdev_index { | ||
68 | IDX_SENSOR, | ||
69 | IDX_CSIS, | ||
70 | IDX_FLITE, | ||
71 | IDX_FIMC, | ||
72 | IDX_MAX, | ||
73 | }; | ||
74 | |||
75 | struct media_pipeline; | ||
76 | struct v4l2_subdev; | ||
77 | |||
78 | struct fimc_pipeline { | ||
79 | struct v4l2_subdev *subdevs[IDX_MAX]; | ||
80 | struct media_pipeline *m_pipeline; | ||
81 | }; | ||
82 | |||
67 | #endif /* S5P_FIMC_H_ */ | 83 | #endif /* S5P_FIMC_H_ */ |
diff --git a/include/media/saa7146.h b/include/media/saa7146.h index 0f037e8edf9a..773e527deabe 100644 --- a/include/media/saa7146.h +++ b/include/media/saa7146.h | |||
@@ -13,12 +13,11 @@ | |||
13 | #include <linux/mutex.h> | 13 | #include <linux/mutex.h> |
14 | #include <linux/scatterlist.h> | 14 | #include <linux/scatterlist.h> |
15 | #include <media/v4l2-device.h> | 15 | #include <media/v4l2-device.h> |
16 | #include <media/v4l2-ctrls.h> | ||
16 | 17 | ||
17 | #include <linux/vmalloc.h> /* for vmalloc() */ | 18 | #include <linux/vmalloc.h> /* for vmalloc() */ |
18 | #include <linux/mm.h> /* for vmalloc_to_page() */ | 19 | #include <linux/mm.h> /* for vmalloc_to_page() */ |
19 | 20 | ||
20 | #define SAA7146_VERSION_CODE 0x000600 /* 0.6.0 */ | ||
21 | |||
22 | #define saa7146_write(sxy,adr,dat) writel((dat),(sxy->mem+(adr))) | 21 | #define saa7146_write(sxy,adr,dat) writel((dat),(sxy->mem+(adr))) |
23 | #define saa7146_read(sxy,adr) readl(sxy->mem+(adr)) | 22 | #define saa7146_read(sxy,adr) readl(sxy->mem+(adr)) |
24 | 23 | ||
@@ -121,6 +120,7 @@ struct saa7146_dev | |||
121 | struct list_head item; | 120 | struct list_head item; |
122 | 121 | ||
123 | struct v4l2_device v4l2_dev; | 122 | struct v4l2_device v4l2_dev; |
123 | struct v4l2_ctrl_handler ctrl_handler; | ||
124 | 124 | ||
125 | /* different device locks */ | 125 | /* different device locks */ |
126 | spinlock_t slock; | 126 | spinlock_t slock; |
diff --git a/include/media/saa7146_vv.h b/include/media/saa7146_vv.h index 4aeff96ff7d8..944ecdf3530f 100644 --- a/include/media/saa7146_vv.h +++ b/include/media/saa7146_vv.h | |||
@@ -3,6 +3,7 @@ | |||
3 | 3 | ||
4 | #include <media/v4l2-common.h> | 4 | #include <media/v4l2-common.h> |
5 | #include <media/v4l2-ioctl.h> | 5 | #include <media/v4l2-ioctl.h> |
6 | #include <media/v4l2-fh.h> | ||
6 | #include <media/saa7146.h> | 7 | #include <media/saa7146.h> |
7 | #include <media/videobuf-dma-sg.h> | 8 | #include <media/videobuf-dma-sg.h> |
8 | 9 | ||
@@ -84,21 +85,15 @@ struct saa7146_overlay { | |||
84 | 85 | ||
85 | /* per open data */ | 86 | /* per open data */ |
86 | struct saa7146_fh { | 87 | struct saa7146_fh { |
88 | /* Must be the first field! */ | ||
89 | struct v4l2_fh fh; | ||
87 | struct saa7146_dev *dev; | 90 | struct saa7146_dev *dev; |
88 | /* if this is a vbi or capture open */ | ||
89 | enum v4l2_buf_type type; | ||
90 | |||
91 | /* video overlay */ | ||
92 | struct saa7146_overlay ov; | ||
93 | 91 | ||
94 | /* video capture */ | 92 | /* video capture */ |
95 | struct videobuf_queue video_q; | 93 | struct videobuf_queue video_q; |
96 | struct v4l2_pix_format video_fmt; | ||
97 | 94 | ||
98 | /* vbi capture */ | 95 | /* vbi capture */ |
99 | struct videobuf_queue vbi_q; | 96 | struct videobuf_queue vbi_q; |
100 | struct v4l2_vbi_format vbi_fmt; | ||
101 | struct timer_list vbi_read_timeout; | ||
102 | 97 | ||
103 | unsigned int resources; /* resource management for device open */ | 98 | unsigned int resources; /* resource management for device open */ |
104 | }; | 99 | }; |
@@ -109,7 +104,9 @@ struct saa7146_fh { | |||
109 | struct saa7146_vv | 104 | struct saa7146_vv |
110 | { | 105 | { |
111 | /* vbi capture */ | 106 | /* vbi capture */ |
112 | struct saa7146_dmaqueue vbi_q; | 107 | struct saa7146_dmaqueue vbi_dmaq; |
108 | struct v4l2_vbi_format vbi_fmt; | ||
109 | struct timer_list vbi_read_timeout; | ||
113 | /* vbi workaround interrupt queue */ | 110 | /* vbi workaround interrupt queue */ |
114 | wait_queue_head_t vbi_wq; | 111 | wait_queue_head_t vbi_wq; |
115 | int vbi_fieldcount; | 112 | int vbi_fieldcount; |
@@ -119,13 +116,14 @@ struct saa7146_vv | |||
119 | struct saa7146_fh *video_fh; | 116 | struct saa7146_fh *video_fh; |
120 | 117 | ||
121 | /* video overlay */ | 118 | /* video overlay */ |
119 | struct saa7146_overlay ov; | ||
122 | struct v4l2_framebuffer ov_fb; | 120 | struct v4l2_framebuffer ov_fb; |
123 | struct saa7146_format *ov_fmt; | 121 | struct saa7146_format *ov_fmt; |
124 | struct saa7146_overlay *ov_data; | ||
125 | struct saa7146_fh *ov_suspend; | 122 | struct saa7146_fh *ov_suspend; |
126 | 123 | ||
127 | /* video capture */ | 124 | /* video capture */ |
128 | struct saa7146_dmaqueue video_q; | 125 | struct saa7146_dmaqueue video_dmaq; |
126 | struct v4l2_pix_format video_fmt; | ||
129 | enum v4l2_field last_field; | 127 | enum v4l2_field last_field; |
130 | 128 | ||
131 | /* common: fixme? shouldn't this be in saa7146_fh? | 129 | /* common: fixme? shouldn't this be in saa7146_fh? |
@@ -163,7 +161,8 @@ struct saa7146_ext_vv | |||
163 | int (*std_callback)(struct saa7146_dev*, struct saa7146_standard *); | 161 | int (*std_callback)(struct saa7146_dev*, struct saa7146_standard *); |
164 | 162 | ||
165 | /* the extension can override this */ | 163 | /* the extension can override this */ |
166 | struct v4l2_ioctl_ops ops; | 164 | struct v4l2_ioctl_ops vid_ops; |
165 | struct v4l2_ioctl_ops vbi_ops; | ||
167 | /* pointer to the saa7146 core ops */ | 166 | /* pointer to the saa7146 core ops */ |
168 | const struct v4l2_ioctl_ops *core_ops; | 167 | const struct v4l2_ioctl_ops *core_ops; |
169 | 168 | ||
@@ -202,10 +201,12 @@ void saa7146_set_gpio(struct saa7146_dev *saa, u8 pin, u8 data); | |||
202 | 201 | ||
203 | /* from saa7146_video.c */ | 202 | /* from saa7146_video.c */ |
204 | extern const struct v4l2_ioctl_ops saa7146_video_ioctl_ops; | 203 | extern const struct v4l2_ioctl_ops saa7146_video_ioctl_ops; |
204 | extern const struct v4l2_ioctl_ops saa7146_vbi_ioctl_ops; | ||
205 | extern struct saa7146_use_ops saa7146_video_uops; | 205 | extern struct saa7146_use_ops saa7146_video_uops; |
206 | int saa7146_start_preview(struct saa7146_fh *fh); | 206 | int saa7146_start_preview(struct saa7146_fh *fh); |
207 | int saa7146_stop_preview(struct saa7146_fh *fh); | 207 | int saa7146_stop_preview(struct saa7146_fh *fh); |
208 | long saa7146_video_do_ioctl(struct file *file, unsigned int cmd, void *arg); | 208 | long saa7146_video_do_ioctl(struct file *file, unsigned int cmd, void *arg); |
209 | int saa7146_s_ctrl(struct v4l2_ctrl *ctrl); | ||
209 | 210 | ||
210 | /* from saa7146_vbi.c */ | 211 | /* from saa7146_vbi.c */ |
211 | extern struct saa7146_use_ops saa7146_vbi_uops; | 212 | extern struct saa7146_use_ops saa7146_vbi_uops; |
diff --git a/include/media/sh_mobile_ceu.h b/include/media/sh_mobile_ceu.h index a90a765f18da..6fdb6adf6b2b 100644 --- a/include/media/sh_mobile_ceu.h +++ b/include/media/sh_mobile_ceu.h | |||
@@ -5,6 +5,7 @@ | |||
5 | #define SH_CEU_FLAG_USE_16BIT_BUS (1 << 1) /* use 16bit bus width */ | 5 | #define SH_CEU_FLAG_USE_16BIT_BUS (1 << 1) /* use 16bit bus width */ |
6 | #define SH_CEU_FLAG_HSYNC_LOW (1 << 2) /* default High if possible */ | 6 | #define SH_CEU_FLAG_HSYNC_LOW (1 << 2) /* default High if possible */ |
7 | #define SH_CEU_FLAG_VSYNC_LOW (1 << 3) /* default High if possible */ | 7 | #define SH_CEU_FLAG_VSYNC_LOW (1 << 3) /* default High if possible */ |
8 | #define SH_CEU_FLAG_LOWER_8BIT (1 << 4) /* default upper 8bit */ | ||
8 | 9 | ||
9 | struct device; | 10 | struct device; |
10 | struct resource; | 11 | struct resource; |
diff --git a/include/media/smiapp.h b/include/media/smiapp.h new file mode 100644 index 000000000000..9ab07fd45d5c --- /dev/null +++ b/include/media/smiapp.h | |||
@@ -0,0 +1,84 @@ | |||
1 | /* | ||
2 | * include/media/smiapp.h | ||
3 | * | ||
4 | * Generic driver for SMIA/SMIA++ compliant camera modules | ||
5 | * | ||
6 | * Copyright (C) 2011--2012 Nokia Corporation | ||
7 | * Contact: Sakari Ailus <sakari.ailus@maxwell.research.nokia.com> | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or | ||
10 | * modify it under the terms of the GNU General Public License | ||
11 | * version 2 as published by the Free Software Foundation. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, but | ||
14 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
16 | * General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License | ||
19 | * along with this program; if not, write to the Free Software | ||
20 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA | ||
21 | * 02110-1301 USA | ||
22 | * | ||
23 | */ | ||
24 | |||
25 | #ifndef __SMIAPP_H_ | ||
26 | #define __SMIAPP_H_ | ||
27 | |||
28 | #include <media/v4l2-subdev.h> | ||
29 | |||
30 | #define SMIAPP_NAME "smiapp" | ||
31 | |||
32 | #define SMIAPP_DFL_I2C_ADDR (0x20 >> 1) /* Default I2C Address */ | ||
33 | #define SMIAPP_ALT_I2C_ADDR (0x6e >> 1) /* Alternate I2C Address */ | ||
34 | |||
35 | #define SMIAPP_CSI_SIGNALLING_MODE_CCP2_DATA_CLOCK 0 | ||
36 | #define SMIAPP_CSI_SIGNALLING_MODE_CCP2_DATA_STROBE 1 | ||
37 | #define SMIAPP_CSI_SIGNALLING_MODE_CSI2 2 | ||
38 | |||
39 | #define SMIAPP_NO_XSHUTDOWN -1 | ||
40 | |||
41 | /* | ||
42 | * Sometimes due to board layout considerations the camera module can be | ||
43 | * mounted rotated. The typical rotation used is 180 degrees which can be | ||
44 | * corrected by giving a default H-FLIP and V-FLIP in the sensor readout. | ||
45 | * FIXME: rotation also changes the bayer pattern. | ||
46 | */ | ||
47 | enum smiapp_module_board_orient { | ||
48 | SMIAPP_MODULE_BOARD_ORIENT_0 = 0, | ||
49 | SMIAPP_MODULE_BOARD_ORIENT_180, | ||
50 | }; | ||
51 | |||
52 | struct smiapp_flash_strobe_parms { | ||
53 | u8 mode; | ||
54 | u32 strobe_width_high_us; | ||
55 | u16 strobe_delay; | ||
56 | u16 stobe_start_point; | ||
57 | u8 trigger; | ||
58 | }; | ||
59 | |||
60 | struct smiapp_platform_data { | ||
61 | /* | ||
62 | * Change the cci address if i2c_addr_alt is set. | ||
63 | * Both default and alternate cci addr need to be present | ||
64 | */ | ||
65 | unsigned short i2c_addr_dfl; /* Default i2c addr */ | ||
66 | unsigned short i2c_addr_alt; /* Alternate i2c addr */ | ||
67 | |||
68 | unsigned int nvm_size; /* bytes */ | ||
69 | unsigned int ext_clk; /* sensor external clk */ | ||
70 | |||
71 | unsigned int lanes; /* Number of CSI-2 lanes */ | ||
72 | u8 csi_signalling_mode; /* SMIAPP_CSI_SIGNALLING_MODE_* */ | ||
73 | const s64 *op_sys_clock; | ||
74 | |||
75 | enum smiapp_module_board_orient module_board_orient; | ||
76 | |||
77 | struct smiapp_flash_strobe_parms *strobe_setup; | ||
78 | |||
79 | int (*set_xclk)(struct v4l2_subdev *sd, int hz); | ||
80 | char *ext_clk_name; | ||
81 | int xshutdown; /* gpio or SMIAPP_NO_XSHUTDOWN */ | ||
82 | }; | ||
83 | |||
84 | #endif /* __SMIAPP_H_ */ | ||
diff --git a/include/media/soc_camera.h b/include/media/soc_camera.h index cad374bdcf4b..d865dcf9879f 100644 --- a/include/media/soc_camera.h +++ b/include/media/soc_camera.h | |||
@@ -56,11 +56,15 @@ struct soc_camera_device { | |||
56 | }; | 56 | }; |
57 | }; | 57 | }; |
58 | 58 | ||
59 | /* Host supports programmable stride */ | ||
60 | #define SOCAM_HOST_CAP_STRIDE (1 << 0) | ||
61 | |||
59 | struct soc_camera_host { | 62 | struct soc_camera_host { |
60 | struct v4l2_device v4l2_dev; | 63 | struct v4l2_device v4l2_dev; |
61 | struct list_head list; | 64 | struct list_head list; |
62 | struct mutex host_lock; /* Protect during probing */ | 65 | struct mutex host_lock; /* Protect during probing */ |
63 | unsigned char nr; /* Host number */ | 66 | unsigned char nr; /* Host number */ |
67 | u32 capabilities; | ||
64 | void *priv; | 68 | void *priv; |
65 | const char *drv_name; | 69 | const char *drv_name; |
66 | struct soc_camera_host_ops *ops; | 70 | struct soc_camera_host_ops *ops; |
@@ -98,7 +102,7 @@ struct soc_camera_host_ops { | |||
98 | int (*set_bus_param)(struct soc_camera_device *); | 102 | int (*set_bus_param)(struct soc_camera_device *); |
99 | int (*get_parm)(struct soc_camera_device *, struct v4l2_streamparm *); | 103 | int (*get_parm)(struct soc_camera_device *, struct v4l2_streamparm *); |
100 | int (*set_parm)(struct soc_camera_device *, struct v4l2_streamparm *); | 104 | int (*set_parm)(struct soc_camera_device *, struct v4l2_streamparm *); |
101 | int (*enum_fsizes)(struct soc_camera_device *, struct v4l2_frmsizeenum *); | 105 | int (*enum_framesizes)(struct soc_camera_device *, struct v4l2_frmsizeenum *); |
102 | unsigned int (*poll)(struct file *, poll_table *); | 106 | unsigned int (*poll)(struct file *, poll_table *); |
103 | }; | 107 | }; |
104 | 108 | ||
diff --git a/include/media/soc_mediabus.h b/include/media/soc_mediabus.h index 73f1e7eb60f3..0dc6f4625b92 100644 --- a/include/media/soc_mediabus.h +++ b/include/media/soc_mediabus.h | |||
@@ -47,6 +47,24 @@ enum soc_mbus_order { | |||
47 | }; | 47 | }; |
48 | 48 | ||
49 | /** | 49 | /** |
50 | * enum soc_mbus_layout - planes layout in memory | ||
51 | * @SOC_MBUS_LAYOUT_PACKED: color components packed | ||
52 | * @SOC_MBUS_LAYOUT_PLANAR_2Y_U_V: YUV components stored in 3 planes (4:2:2) | ||
53 | * @SOC_MBUS_LAYOUT_PLANAR_2Y_C: YUV components stored in a luma and a | ||
54 | * chroma plane (C plane is half the size | ||
55 | * of Y plane) | ||
56 | * @SOC_MBUS_LAYOUT_PLANAR_Y_C: YUV components stored in a luma and a | ||
57 | * chroma plane (C plane is the same size | ||
58 | * as Y plane) | ||
59 | */ | ||
60 | enum soc_mbus_layout { | ||
61 | SOC_MBUS_LAYOUT_PACKED = 0, | ||
62 | SOC_MBUS_LAYOUT_PLANAR_2Y_U_V, | ||
63 | SOC_MBUS_LAYOUT_PLANAR_2Y_C, | ||
64 | SOC_MBUS_LAYOUT_PLANAR_Y_C, | ||
65 | }; | ||
66 | |||
67 | /** | ||
50 | * struct soc_mbus_pixelfmt - Data format on the media bus | 68 | * struct soc_mbus_pixelfmt - Data format on the media bus |
51 | * @name: Name of the format | 69 | * @name: Name of the format |
52 | * @fourcc: Fourcc code, that will be obtained if the data is | 70 | * @fourcc: Fourcc code, that will be obtained if the data is |
@@ -60,6 +78,7 @@ struct soc_mbus_pixelfmt { | |||
60 | u32 fourcc; | 78 | u32 fourcc; |
61 | enum soc_mbus_packing packing; | 79 | enum soc_mbus_packing packing; |
62 | enum soc_mbus_order order; | 80 | enum soc_mbus_order order; |
81 | enum soc_mbus_layout layout; | ||
63 | u8 bits_per_sample; | 82 | u8 bits_per_sample; |
64 | }; | 83 | }; |
65 | 84 | ||
@@ -80,6 +99,8 @@ const struct soc_mbus_pixelfmt *soc_mbus_find_fmtdesc( | |||
80 | const struct soc_mbus_pixelfmt *soc_mbus_get_fmtdesc( | 99 | const struct soc_mbus_pixelfmt *soc_mbus_get_fmtdesc( |
81 | enum v4l2_mbus_pixelcode code); | 100 | enum v4l2_mbus_pixelcode code); |
82 | s32 soc_mbus_bytes_per_line(u32 width, const struct soc_mbus_pixelfmt *mf); | 101 | s32 soc_mbus_bytes_per_line(u32 width, const struct soc_mbus_pixelfmt *mf); |
102 | s32 soc_mbus_image_size(const struct soc_mbus_pixelfmt *mf, | ||
103 | u32 bytes_per_line, u32 height); | ||
83 | int soc_mbus_samples_per_pixel(const struct soc_mbus_pixelfmt *mf, | 104 | int soc_mbus_samples_per_pixel(const struct soc_mbus_pixelfmt *mf, |
84 | unsigned int *numerator, unsigned int *denominator); | 105 | unsigned int *numerator, unsigned int *denominator); |
85 | unsigned int soc_mbus_config_compatible(const struct v4l2_mbus_config *cfg, | 106 | unsigned int soc_mbus_config_compatible(const struct v4l2_mbus_config *cfg, |
diff --git a/include/media/v4l2-ctrls.h b/include/media/v4l2-ctrls.h index 11e67562b3ac..776605f1cbe2 100644 --- a/include/media/v4l2-ctrls.h +++ b/include/media/v4l2-ctrls.h | |||
@@ -25,6 +25,7 @@ | |||
25 | #include <linux/videodev2.h> | 25 | #include <linux/videodev2.h> |
26 | 26 | ||
27 | /* forward references */ | 27 | /* forward references */ |
28 | struct file; | ||
28 | struct v4l2_ctrl_handler; | 29 | struct v4l2_ctrl_handler; |
29 | struct v4l2_ctrl_helper; | 30 | struct v4l2_ctrl_helper; |
30 | struct v4l2_ctrl; | 31 | struct v4l2_ctrl; |
@@ -129,7 +130,10 @@ struct v4l2_ctrl { | |||
129 | u32 step; | 130 | u32 step; |
130 | u32 menu_skip_mask; | 131 | u32 menu_skip_mask; |
131 | }; | 132 | }; |
132 | const char * const *qmenu; | 133 | union { |
134 | const char * const *qmenu; | ||
135 | const s64 *qmenu_int; | ||
136 | }; | ||
133 | unsigned long flags; | 137 | unsigned long flags; |
134 | union { | 138 | union { |
135 | s32 val; | 139 | s32 val; |
@@ -164,7 +168,9 @@ struct v4l2_ctrl_ref { | |||
164 | /** struct v4l2_ctrl_handler - The control handler keeps track of all the | 168 | /** struct v4l2_ctrl_handler - The control handler keeps track of all the |
165 | * controls: both the controls owned by the handler and those inherited | 169 | * controls: both the controls owned by the handler and those inherited |
166 | * from other handlers. | 170 | * from other handlers. |
171 | * @_lock: Default for "lock". | ||
167 | * @lock: Lock to control access to this handler and its controls. | 172 | * @lock: Lock to control access to this handler and its controls. |
173 | * May be replaced by the user right after init. | ||
168 | * @ctrls: The list of controls owned by this handler. | 174 | * @ctrls: The list of controls owned by this handler. |
169 | * @ctrl_refs: The list of control references. | 175 | * @ctrl_refs: The list of control references. |
170 | * @cached: The last found control reference. It is common that the same | 176 | * @cached: The last found control reference. It is common that the same |
@@ -175,7 +181,8 @@ struct v4l2_ctrl_ref { | |||
175 | * @error: The error code of the first failed control addition. | 181 | * @error: The error code of the first failed control addition. |
176 | */ | 182 | */ |
177 | struct v4l2_ctrl_handler { | 183 | struct v4l2_ctrl_handler { |
178 | struct mutex lock; | 184 | struct mutex _lock; |
185 | struct mutex *lock; | ||
179 | struct list_head ctrls; | 186 | struct list_head ctrls; |
180 | struct list_head ctrl_refs; | 187 | struct list_head ctrl_refs; |
181 | struct v4l2_ctrl_ref *cached; | 188 | struct v4l2_ctrl_ref *cached; |
@@ -219,6 +226,7 @@ struct v4l2_ctrl_config { | |||
219 | u32 flags; | 226 | u32 flags; |
220 | u32 menu_skip_mask; | 227 | u32 menu_skip_mask; |
221 | const char * const *qmenu; | 228 | const char * const *qmenu; |
229 | const s64 *qmenu_int; | ||
222 | unsigned int is_private:1; | 230 | unsigned int is_private:1; |
223 | }; | 231 | }; |
224 | 232 | ||
@@ -343,6 +351,23 @@ struct v4l2_ctrl *v4l2_ctrl_new_std_menu(struct v4l2_ctrl_handler *hdl, | |||
343 | const struct v4l2_ctrl_ops *ops, | 351 | const struct v4l2_ctrl_ops *ops, |
344 | u32 id, s32 max, s32 mask, s32 def); | 352 | u32 id, s32 max, s32 mask, s32 def); |
345 | 353 | ||
354 | /** v4l2_ctrl_new_int_menu() - Create a new standard V4L2 integer menu control. | ||
355 | * @hdl: The control handler. | ||
356 | * @ops: The control ops. | ||
357 | * @id: The control ID. | ||
358 | * @max: The control's maximum value. | ||
359 | * @def: The control's default value. | ||
360 | * @qmenu_int: The control's menu entries. | ||
361 | * | ||
362 | * Same as v4l2_ctrl_new_std_menu(), but @mask is set to 0 and it additionaly | ||
363 | * takes as an argument an array of integers determining the menu items. | ||
364 | * | ||
365 | * If @id refers to a non-integer-menu control, then this function will return NULL. | ||
366 | */ | ||
367 | struct v4l2_ctrl *v4l2_ctrl_new_int_menu(struct v4l2_ctrl_handler *hdl, | ||
368 | const struct v4l2_ctrl_ops *ops, | ||
369 | u32 id, s32 max, s32 def, const s64 *qmenu_int); | ||
370 | |||
346 | /** v4l2_ctrl_add_ctrl() - Add a control from another handler to this handler. | 371 | /** v4l2_ctrl_add_ctrl() - Add a control from another handler to this handler. |
347 | * @hdl: The control handler. | 372 | * @hdl: The control handler. |
348 | * @ctrl: The control to add. | 373 | * @ctrl: The control to add. |
@@ -451,7 +476,7 @@ void v4l2_ctrl_grab(struct v4l2_ctrl *ctrl, bool grabbed); | |||
451 | */ | 476 | */ |
452 | static inline void v4l2_ctrl_lock(struct v4l2_ctrl *ctrl) | 477 | static inline void v4l2_ctrl_lock(struct v4l2_ctrl *ctrl) |
453 | { | 478 | { |
454 | mutex_lock(&ctrl->handler->lock); | 479 | mutex_lock(ctrl->handler->lock); |
455 | } | 480 | } |
456 | 481 | ||
457 | /** v4l2_ctrl_lock() - Helper function to unlock the handler | 482 | /** v4l2_ctrl_lock() - Helper function to unlock the handler |
@@ -460,7 +485,7 @@ static inline void v4l2_ctrl_lock(struct v4l2_ctrl *ctrl) | |||
460 | */ | 485 | */ |
461 | static inline void v4l2_ctrl_unlock(struct v4l2_ctrl *ctrl) | 486 | static inline void v4l2_ctrl_unlock(struct v4l2_ctrl *ctrl) |
462 | { | 487 | { |
463 | mutex_unlock(&ctrl->handler->lock); | 488 | mutex_unlock(ctrl->handler->lock); |
464 | } | 489 | } |
465 | 490 | ||
466 | /** v4l2_ctrl_g_ctrl() - Helper function to get the control's value from within a driver. | 491 | /** v4l2_ctrl_g_ctrl() - Helper function to get the control's value from within a driver. |
@@ -487,10 +512,9 @@ s32 v4l2_ctrl_g_ctrl(struct v4l2_ctrl *ctrl); | |||
487 | int v4l2_ctrl_s_ctrl(struct v4l2_ctrl *ctrl, s32 val); | 512 | int v4l2_ctrl_s_ctrl(struct v4l2_ctrl *ctrl, s32 val); |
488 | 513 | ||
489 | /* Internal helper functions that deal with control events. */ | 514 | /* Internal helper functions that deal with control events. */ |
490 | void v4l2_ctrl_add_event(struct v4l2_ctrl *ctrl, | 515 | extern const struct v4l2_subscribed_event_ops v4l2_ctrl_sub_ev_ops; |
491 | struct v4l2_subscribed_event *sev); | 516 | void v4l2_ctrl_replace(struct v4l2_event *old, const struct v4l2_event *new); |
492 | void v4l2_ctrl_del_event(struct v4l2_ctrl *ctrl, | 517 | void v4l2_ctrl_merge(const struct v4l2_event *old, struct v4l2_event *new); |
493 | struct v4l2_subscribed_event *sev); | ||
494 | 518 | ||
495 | /* Can be used as a vidioc_log_status function that just dumps all controls | 519 | /* Can be used as a vidioc_log_status function that just dumps all controls |
496 | associated with the filehandle. */ | 520 | associated with the filehandle. */ |
diff --git a/include/media/v4l2-dev.h b/include/media/v4l2-dev.h index 96d22215cc88..a056e6ee1b68 100644 --- a/include/media/v4l2-dev.h +++ b/include/media/v4l2-dev.h | |||
@@ -39,6 +39,9 @@ struct v4l2_ctrl_handler; | |||
39 | #define V4L2_FL_USES_V4L2_FH (1) | 39 | #define V4L2_FL_USES_V4L2_FH (1) |
40 | /* Use the prio field of v4l2_fh for core priority checking */ | 40 | /* Use the prio field of v4l2_fh for core priority checking */ |
41 | #define V4L2_FL_USE_FH_PRIO (2) | 41 | #define V4L2_FL_USE_FH_PRIO (2) |
42 | /* If ioctl core locking is in use, then apply that also to all | ||
43 | file operations. Don't use this flag in new drivers! */ | ||
44 | #define V4L2_FL_LOCK_ALL_FOPS (3) | ||
42 | 45 | ||
43 | /* Priority helper functions */ | 46 | /* Priority helper functions */ |
44 | 47 | ||
@@ -126,8 +129,10 @@ struct video_device | |||
126 | 129 | ||
127 | /* ioctl callbacks */ | 130 | /* ioctl callbacks */ |
128 | const struct v4l2_ioctl_ops *ioctl_ops; | 131 | const struct v4l2_ioctl_ops *ioctl_ops; |
132 | DECLARE_BITMAP(valid_ioctls, BASE_VIDIOC_PRIVATE); | ||
129 | 133 | ||
130 | /* serialization lock */ | 134 | /* serialization lock */ |
135 | DECLARE_BITMAP(disable_locking, BASE_VIDIOC_PRIVATE); | ||
131 | struct mutex *lock; | 136 | struct mutex *lock; |
132 | }; | 137 | }; |
133 | 138 | ||
@@ -173,6 +178,26 @@ void video_device_release(struct video_device *vdev); | |||
173 | a dubious construction at best. */ | 178 | a dubious construction at best. */ |
174 | void video_device_release_empty(struct video_device *vdev); | 179 | void video_device_release_empty(struct video_device *vdev); |
175 | 180 | ||
181 | /* returns true if cmd is a known V4L2 ioctl */ | ||
182 | bool v4l2_is_known_ioctl(unsigned int cmd); | ||
183 | |||
184 | /* mark that this command shouldn't use core locking */ | ||
185 | static inline void v4l2_disable_ioctl_locking(struct video_device *vdev, unsigned int cmd) | ||
186 | { | ||
187 | if (_IOC_NR(cmd) < BASE_VIDIOC_PRIVATE) | ||
188 | set_bit(_IOC_NR(cmd), vdev->disable_locking); | ||
189 | } | ||
190 | |||
191 | /* Mark that this command isn't implemented. This must be called before | ||
192 | video_device_register. See also the comments in determine_valid_ioctls(). | ||
193 | This function allows drivers to provide just one v4l2_ioctl_ops struct, but | ||
194 | disable ioctls based on the specific card that is actually found. */ | ||
195 | static inline void v4l2_disable_ioctl(struct video_device *vdev, unsigned int cmd) | ||
196 | { | ||
197 | if (_IOC_NR(cmd) < BASE_VIDIOC_PRIVATE) | ||
198 | set_bit(_IOC_NR(cmd), vdev->valid_ioctls); | ||
199 | } | ||
200 | |||
176 | /* helper functions to access driver private data. */ | 201 | /* helper functions to access driver private data. */ |
177 | static inline void *video_get_drvdata(struct video_device *vdev) | 202 | static inline void *video_get_drvdata(struct video_device *vdev) |
178 | { | 203 | { |
diff --git a/include/media/v4l2-event.h b/include/media/v4l2-event.h index 5f14e8895ce2..2885a810a128 100644 --- a/include/media/v4l2-event.h +++ b/include/media/v4l2-event.h | |||
@@ -78,6 +78,19 @@ struct v4l2_kevent { | |||
78 | struct v4l2_event event; | 78 | struct v4l2_event event; |
79 | }; | 79 | }; |
80 | 80 | ||
81 | /** struct v4l2_subscribed_event_ops - Subscribed event operations. | ||
82 | * @add: Optional callback, called when a new listener is added | ||
83 | * @del: Optional callback, called when a listener stops listening | ||
84 | * @replace: Optional callback that can replace event 'old' with event 'new'. | ||
85 | * @merge: Optional callback that can merge event 'old' into event 'new'. | ||
86 | */ | ||
87 | struct v4l2_subscribed_event_ops { | ||
88 | int (*add)(struct v4l2_subscribed_event *sev, unsigned elems); | ||
89 | void (*del)(struct v4l2_subscribed_event *sev); | ||
90 | void (*replace)(struct v4l2_event *old, const struct v4l2_event *new); | ||
91 | void (*merge)(const struct v4l2_event *old, struct v4l2_event *new); | ||
92 | }; | ||
93 | |||
81 | /** struct v4l2_subscribed_event - Internal struct representing a subscribed event. | 94 | /** struct v4l2_subscribed_event - Internal struct representing a subscribed event. |
82 | * @list: List node for the v4l2_fh->subscribed list. | 95 | * @list: List node for the v4l2_fh->subscribed list. |
83 | * @type: Event type. | 96 | * @type: Event type. |
@@ -85,8 +98,7 @@ struct v4l2_kevent { | |||
85 | * @flags: Copy of v4l2_event_subscription->flags. | 98 | * @flags: Copy of v4l2_event_subscription->flags. |
86 | * @fh: Filehandle that subscribed to this event. | 99 | * @fh: Filehandle that subscribed to this event. |
87 | * @node: List node that hooks into the object's event list (if there is one). | 100 | * @node: List node that hooks into the object's event list (if there is one). |
88 | * @replace: Optional callback that can replace event 'old' with event 'new'. | 101 | * @ops: v4l2_subscribed_event_ops |
89 | * @merge: Optional callback that can merge event 'old' into event 'new'. | ||
90 | * @elems: The number of elements in the events array. | 102 | * @elems: The number of elements in the events array. |
91 | * @first: The index of the events containing the oldest available event. | 103 | * @first: The index of the events containing the oldest available event. |
92 | * @in_use: The number of queued events. | 104 | * @in_use: The number of queued events. |
@@ -99,10 +111,7 @@ struct v4l2_subscribed_event { | |||
99 | u32 flags; | 111 | u32 flags; |
100 | struct v4l2_fh *fh; | 112 | struct v4l2_fh *fh; |
101 | struct list_head node; | 113 | struct list_head node; |
102 | void (*replace)(struct v4l2_event *old, | 114 | const struct v4l2_subscribed_event_ops *ops; |
103 | const struct v4l2_event *new); | ||
104 | void (*merge)(const struct v4l2_event *old, | ||
105 | struct v4l2_event *new); | ||
106 | unsigned elems; | 115 | unsigned elems; |
107 | unsigned first; | 116 | unsigned first; |
108 | unsigned in_use; | 117 | unsigned in_use; |
@@ -115,7 +124,8 @@ void v4l2_event_queue(struct video_device *vdev, const struct v4l2_event *ev); | |||
115 | void v4l2_event_queue_fh(struct v4l2_fh *fh, const struct v4l2_event *ev); | 124 | void v4l2_event_queue_fh(struct v4l2_fh *fh, const struct v4l2_event *ev); |
116 | int v4l2_event_pending(struct v4l2_fh *fh); | 125 | int v4l2_event_pending(struct v4l2_fh *fh); |
117 | int v4l2_event_subscribe(struct v4l2_fh *fh, | 126 | int v4l2_event_subscribe(struct v4l2_fh *fh, |
118 | struct v4l2_event_subscription *sub, unsigned elems); | 127 | struct v4l2_event_subscription *sub, unsigned elems, |
128 | const struct v4l2_subscribed_event_ops *ops); | ||
119 | int v4l2_event_unsubscribe(struct v4l2_fh *fh, | 129 | int v4l2_event_unsubscribe(struct v4l2_fh *fh, |
120 | struct v4l2_event_subscription *sub); | 130 | struct v4l2_event_subscription *sub); |
121 | void v4l2_event_unsubscribe_all(struct v4l2_fh *fh); | 131 | void v4l2_event_unsubscribe_all(struct v4l2_fh *fh); |
diff --git a/include/media/v4l2-ioctl.h b/include/media/v4l2-ioctl.h index 3cb939cd03f9..d8b76f7392f8 100644 --- a/include/media/v4l2-ioctl.h +++ b/include/media/v4l2-ioctl.h | |||
@@ -271,6 +271,12 @@ struct v4l2_ioctl_ops { | |||
271 | struct v4l2_dv_timings *timings); | 271 | struct v4l2_dv_timings *timings); |
272 | int (*vidioc_g_dv_timings) (struct file *file, void *fh, | 272 | int (*vidioc_g_dv_timings) (struct file *file, void *fh, |
273 | struct v4l2_dv_timings *timings); | 273 | struct v4l2_dv_timings *timings); |
274 | int (*vidioc_query_dv_timings) (struct file *file, void *fh, | ||
275 | struct v4l2_dv_timings *timings); | ||
276 | int (*vidioc_enum_dv_timings) (struct file *file, void *fh, | ||
277 | struct v4l2_enum_dv_timings *timings); | ||
278 | int (*vidioc_dv_timings_cap) (struct file *file, void *fh, | ||
279 | struct v4l2_dv_timings_cap *cap); | ||
274 | 280 | ||
275 | int (*vidioc_subscribe_event) (struct v4l2_fh *fh, | 281 | int (*vidioc_subscribe_event) (struct v4l2_fh *fh, |
276 | struct v4l2_event_subscription *sub); | 282 | struct v4l2_event_subscription *sub); |
diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h index f0f3358d1b1b..c35a3545e273 100644 --- a/include/media/v4l2-subdev.h +++ b/include/media/v4l2-subdev.h | |||
@@ -307,6 +307,12 @@ struct v4l2_subdev_video_ops { | |||
307 | struct v4l2_dv_timings *timings); | 307 | struct v4l2_dv_timings *timings); |
308 | int (*g_dv_timings)(struct v4l2_subdev *sd, | 308 | int (*g_dv_timings)(struct v4l2_subdev *sd, |
309 | struct v4l2_dv_timings *timings); | 309 | struct v4l2_dv_timings *timings); |
310 | int (*enum_dv_timings)(struct v4l2_subdev *sd, | ||
311 | struct v4l2_enum_dv_timings *timings); | ||
312 | int (*query_dv_timings)(struct v4l2_subdev *sd, | ||
313 | struct v4l2_dv_timings *timings); | ||
314 | int (*dv_timings_cap)(struct v4l2_subdev *sd, | ||
315 | struct v4l2_dv_timings_cap *cap); | ||
310 | int (*enum_mbus_fmt)(struct v4l2_subdev *sd, unsigned int index, | 316 | int (*enum_mbus_fmt)(struct v4l2_subdev *sd, unsigned int index, |
311 | enum v4l2_mbus_pixelcode *code); | 317 | enum v4l2_mbus_pixelcode *code); |
312 | int (*enum_mbus_fsizes)(struct v4l2_subdev *sd, | 318 | int (*enum_mbus_fsizes)(struct v4l2_subdev *sd, |
@@ -466,6 +472,15 @@ struct v4l2_subdev_pad_ops { | |||
466 | struct v4l2_subdev_crop *crop); | 472 | struct v4l2_subdev_crop *crop); |
467 | int (*get_crop)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh, | 473 | int (*get_crop)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh, |
468 | struct v4l2_subdev_crop *crop); | 474 | struct v4l2_subdev_crop *crop); |
475 | int (*get_selection)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh, | ||
476 | struct v4l2_subdev_selection *sel); | ||
477 | int (*set_selection)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh, | ||
478 | struct v4l2_subdev_selection *sel); | ||
479 | #ifdef CONFIG_MEDIA_CONTROLLER | ||
480 | int (*link_validate)(struct v4l2_subdev *sd, struct media_link *link, | ||
481 | struct v4l2_subdev_format *source_fmt, | ||
482 | struct v4l2_subdev_format *sink_fmt); | ||
483 | #endif /* CONFIG_MEDIA_CONTROLLER */ | ||
469 | }; | 484 | }; |
470 | 485 | ||
471 | struct v4l2_subdev_ops { | 486 | struct v4l2_subdev_ops { |
@@ -541,7 +556,7 @@ struct v4l2_subdev { | |||
541 | #define media_entity_to_v4l2_subdev(ent) \ | 556 | #define media_entity_to_v4l2_subdev(ent) \ |
542 | container_of(ent, struct v4l2_subdev, entity) | 557 | container_of(ent, struct v4l2_subdev, entity) |
543 | #define vdev_to_v4l2_subdev(vdev) \ | 558 | #define vdev_to_v4l2_subdev(vdev) \ |
544 | video_get_drvdata(vdev) | 559 | ((struct v4l2_subdev *)video_get_drvdata(vdev)) |
545 | 560 | ||
546 | /* | 561 | /* |
547 | * Used for storing subdev information per file handle | 562 | * Used for storing subdev information per file handle |
@@ -549,8 +564,11 @@ struct v4l2_subdev { | |||
549 | struct v4l2_subdev_fh { | 564 | struct v4l2_subdev_fh { |
550 | struct v4l2_fh vfh; | 565 | struct v4l2_fh vfh; |
551 | #if defined(CONFIG_VIDEO_V4L2_SUBDEV_API) | 566 | #if defined(CONFIG_VIDEO_V4L2_SUBDEV_API) |
552 | struct v4l2_mbus_framefmt *try_fmt; | 567 | struct { |
553 | struct v4l2_rect *try_crop; | 568 | struct v4l2_mbus_framefmt try_fmt; |
569 | struct v4l2_rect try_crop; | ||
570 | struct v4l2_rect try_compose; | ||
571 | } *pad; | ||
554 | #endif | 572 | #endif |
555 | }; | 573 | }; |
556 | 574 | ||
@@ -558,17 +576,19 @@ struct v4l2_subdev_fh { | |||
558 | container_of(fh, struct v4l2_subdev_fh, vfh) | 576 | container_of(fh, struct v4l2_subdev_fh, vfh) |
559 | 577 | ||
560 | #if defined(CONFIG_VIDEO_V4L2_SUBDEV_API) | 578 | #if defined(CONFIG_VIDEO_V4L2_SUBDEV_API) |
561 | static inline struct v4l2_mbus_framefmt * | 579 | #define __V4L2_SUBDEV_MK_GET_TRY(rtype, fun_name, field_name) \ |
562 | v4l2_subdev_get_try_format(struct v4l2_subdev_fh *fh, unsigned int pad) | 580 | static inline struct rtype * \ |
563 | { | 581 | v4l2_subdev_get_try_##fun_name(struct v4l2_subdev_fh *fh, \ |
564 | return &fh->try_fmt[pad]; | 582 | unsigned int pad) \ |
565 | } | 583 | { \ |
566 | 584 | BUG_ON(unlikely(pad >= vdev_to_v4l2_subdev( \ | |
567 | static inline struct v4l2_rect * | 585 | fh->vfh.vdev)->entity.num_pads)); \ |
568 | v4l2_subdev_get_try_crop(struct v4l2_subdev_fh *fh, unsigned int pad) | 586 | return &fh->pad[pad].field_name; \ |
569 | { | 587 | } |
570 | return &fh->try_crop[pad]; | 588 | |
571 | } | 589 | __V4L2_SUBDEV_MK_GET_TRY(v4l2_mbus_framefmt, format, try_fmt) |
590 | __V4L2_SUBDEV_MK_GET_TRY(v4l2_rect, crop, try_compose) | ||
591 | __V4L2_SUBDEV_MK_GET_TRY(v4l2_rect, compose, try_compose) | ||
572 | #endif | 592 | #endif |
573 | 593 | ||
574 | extern const struct v4l2_file_operations v4l2_subdev_fops; | 594 | extern const struct v4l2_file_operations v4l2_subdev_fops; |
@@ -593,6 +613,13 @@ static inline void *v4l2_get_subdev_hostdata(const struct v4l2_subdev *sd) | |||
593 | return sd->host_priv; | 613 | return sd->host_priv; |
594 | } | 614 | } |
595 | 615 | ||
616 | #ifdef CONFIG_MEDIA_CONTROLLER | ||
617 | int v4l2_subdev_link_validate_default(struct v4l2_subdev *sd, | ||
618 | struct media_link *link, | ||
619 | struct v4l2_subdev_format *source_fmt, | ||
620 | struct v4l2_subdev_format *sink_fmt); | ||
621 | int v4l2_subdev_link_validate(struct media_link *link); | ||
622 | #endif /* CONFIG_MEDIA_CONTROLLER */ | ||
596 | void v4l2_subdev_init(struct v4l2_subdev *sd, | 623 | void v4l2_subdev_init(struct v4l2_subdev *sd, |
597 | const struct v4l2_subdev_ops *ops); | 624 | const struct v4l2_subdev_ops *ops); |
598 | 625 | ||
diff --git a/include/media/videobuf-dma-contig.h b/include/media/videobuf-dma-contig.h index f0ed82543d9f..f473aeb86d3f 100644 --- a/include/media/videobuf-dma-contig.h +++ b/include/media/videobuf-dma-contig.h | |||
@@ -26,6 +26,16 @@ void videobuf_queue_dma_contig_init(struct videobuf_queue *q, | |||
26 | void *priv, | 26 | void *priv, |
27 | struct mutex *ext_lock); | 27 | struct mutex *ext_lock); |
28 | 28 | ||
29 | void videobuf_queue_dma_contig_init_cached(struct videobuf_queue *q, | ||
30 | const struct videobuf_queue_ops *ops, | ||
31 | struct device *dev, | ||
32 | spinlock_t *irqlock, | ||
33 | enum v4l2_buf_type type, | ||
34 | enum v4l2_field field, | ||
35 | unsigned int msize, | ||
36 | void *priv, | ||
37 | struct mutex *ext_lock); | ||
38 | |||
29 | dma_addr_t videobuf_to_dma_contig(struct videobuf_buffer *buf); | 39 | dma_addr_t videobuf_to_dma_contig(struct videobuf_buffer *buf); |
30 | void videobuf_dma_contig_free(struct videobuf_queue *q, | 40 | void videobuf_dma_contig_free(struct videobuf_queue *q, |
31 | struct videobuf_buffer *buf); | 41 | struct videobuf_buffer *buf); |
diff --git a/include/net/bluetooth/bluetooth.h b/include/net/bluetooth/bluetooth.h index a65910bda381..961669b648fd 100644 --- a/include/net/bluetooth/bluetooth.h +++ b/include/net/bluetooth/bluetooth.h | |||
@@ -163,6 +163,11 @@ typedef struct { | |||
163 | __u8 b[6]; | 163 | __u8 b[6]; |
164 | } __packed bdaddr_t; | 164 | } __packed bdaddr_t; |
165 | 165 | ||
166 | /* BD Address type */ | ||
167 | #define BDADDR_BREDR 0x00 | ||
168 | #define BDADDR_LE_PUBLIC 0x01 | ||
169 | #define BDADDR_LE_RANDOM 0x02 | ||
170 | |||
166 | #define BDADDR_ANY (&(bdaddr_t) {{0, 0, 0, 0, 0, 0}}) | 171 | #define BDADDR_ANY (&(bdaddr_t) {{0, 0, 0, 0, 0, 0}}) |
167 | #define BDADDR_LOCAL (&(bdaddr_t) {{0, 0, 0, 0xff, 0xff, 0xff}}) | 172 | #define BDADDR_LOCAL (&(bdaddr_t) {{0, 0, 0, 0xff, 0xff, 0xff}}) |
168 | 173 | ||
@@ -178,7 +183,6 @@ static inline void bacpy(bdaddr_t *dst, bdaddr_t *src) | |||
178 | 183 | ||
179 | void baswap(bdaddr_t *dst, bdaddr_t *src); | 184 | void baswap(bdaddr_t *dst, bdaddr_t *src); |
180 | char *batostr(bdaddr_t *ba); | 185 | char *batostr(bdaddr_t *ba); |
181 | bdaddr_t *strtoba(char *str); | ||
182 | 186 | ||
183 | /* Common socket structures and functions */ | 187 | /* Common socket structures and functions */ |
184 | 188 | ||
@@ -190,8 +194,12 @@ struct bt_sock { | |||
190 | bdaddr_t dst; | 194 | bdaddr_t dst; |
191 | struct list_head accept_q; | 195 | struct list_head accept_q; |
192 | struct sock *parent; | 196 | struct sock *parent; |
193 | u32 defer_setup; | 197 | unsigned long flags; |
194 | bool suspended; | 198 | }; |
199 | |||
200 | enum { | ||
201 | BT_SK_DEFER_SETUP, | ||
202 | BT_SK_SUSPEND, | ||
195 | }; | 203 | }; |
196 | 204 | ||
197 | struct bt_sock_list { | 205 | struct bt_sock_list { |
@@ -216,14 +224,24 @@ void bt_accept_unlink(struct sock *sk); | |||
216 | struct sock *bt_accept_dequeue(struct sock *parent, struct socket *newsock); | 224 | struct sock *bt_accept_dequeue(struct sock *parent, struct socket *newsock); |
217 | 225 | ||
218 | /* Skb helpers */ | 226 | /* Skb helpers */ |
227 | struct l2cap_ctrl { | ||
228 | unsigned int sframe : 1, | ||
229 | poll : 1, | ||
230 | final : 1, | ||
231 | fcs : 1, | ||
232 | sar : 2, | ||
233 | super : 2; | ||
234 | __u16 reqseq; | ||
235 | __u16 txseq; | ||
236 | __u8 retries; | ||
237 | }; | ||
238 | |||
219 | struct bt_skb_cb { | 239 | struct bt_skb_cb { |
220 | __u8 pkt_type; | 240 | __u8 pkt_type; |
221 | __u8 incoming; | 241 | __u8 incoming; |
222 | __u16 expect; | 242 | __u16 expect; |
223 | __u16 tx_seq; | ||
224 | __u8 retries; | ||
225 | __u8 sar; | ||
226 | __u8 force_active; | 243 | __u8 force_active; |
244 | struct l2cap_ctrl control; | ||
227 | }; | 245 | }; |
228 | #define bt_cb(skb) ((struct bt_skb_cb *)((skb)->cb)) | 246 | #define bt_cb(skb) ((struct bt_skb_cb *)((skb)->cb)) |
229 | 247 | ||
@@ -243,12 +261,10 @@ static inline struct sk_buff *bt_skb_send_alloc(struct sock *sk, | |||
243 | { | 261 | { |
244 | struct sk_buff *skb; | 262 | struct sk_buff *skb; |
245 | 263 | ||
246 | release_sock(sk); | ||
247 | if ((skb = sock_alloc_send_skb(sk, len + BT_SKB_RESERVE, nb, err))) { | 264 | if ((skb = sock_alloc_send_skb(sk, len + BT_SKB_RESERVE, nb, err))) { |
248 | skb_reserve(skb, BT_SKB_RESERVE); | 265 | skb_reserve(skb, BT_SKB_RESERVE); |
249 | bt_cb(skb)->incoming = 0; | 266 | bt_cb(skb)->incoming = 0; |
250 | } | 267 | } |
251 | lock_sock(sk); | ||
252 | 268 | ||
253 | if (!skb && *err) | 269 | if (!skb && *err) |
254 | return NULL; | 270 | return NULL; |
diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h index d47e523c9d83..66a7b579e31c 100644 --- a/include/net/bluetooth/hci.h +++ b/include/net/bluetooth/hci.h | |||
@@ -102,6 +102,7 @@ enum { | |||
102 | HCI_DISCOVERABLE, | 102 | HCI_DISCOVERABLE, |
103 | HCI_LINK_SECURITY, | 103 | HCI_LINK_SECURITY, |
104 | HCI_PENDING_CLASS, | 104 | HCI_PENDING_CLASS, |
105 | HCI_PERIODIC_INQ, | ||
105 | }; | 106 | }; |
106 | 107 | ||
107 | /* HCI ioctl defines */ | 108 | /* HCI ioctl defines */ |
@@ -324,6 +325,8 @@ struct hci_cp_inquiry { | |||
324 | 325 | ||
325 | #define HCI_OP_INQUIRY_CANCEL 0x0402 | 326 | #define HCI_OP_INQUIRY_CANCEL 0x0402 |
326 | 327 | ||
328 | #define HCI_OP_PERIODIC_INQ 0x0403 | ||
329 | |||
327 | #define HCI_OP_EXIT_PERIODIC_INQ 0x0404 | 330 | #define HCI_OP_EXIT_PERIODIC_INQ 0x0404 |
328 | 331 | ||
329 | #define HCI_OP_CREATE_CONN 0x0405 | 332 | #define HCI_OP_CREATE_CONN 0x0405 |
@@ -717,6 +720,10 @@ struct hci_rp_read_local_oob_data { | |||
717 | } __packed; | 720 | } __packed; |
718 | 721 | ||
719 | #define HCI_OP_READ_INQ_RSP_TX_POWER 0x0c58 | 722 | #define HCI_OP_READ_INQ_RSP_TX_POWER 0x0c58 |
723 | struct hci_rp_read_inq_rsp_tx_power { | ||
724 | __u8 status; | ||
725 | __s8 tx_power; | ||
726 | } __packed; | ||
720 | 727 | ||
721 | #define HCI_OP_READ_FLOW_CONTROL_MODE 0x0c66 | 728 | #define HCI_OP_READ_FLOW_CONTROL_MODE 0x0c66 |
722 | struct hci_rp_read_flow_control_mode { | 729 | struct hci_rp_read_flow_control_mode { |
@@ -1431,6 +1438,5 @@ struct hci_inquiry_req { | |||
1431 | #define IREQ_CACHE_FLUSH 0x0001 | 1438 | #define IREQ_CACHE_FLUSH 0x0001 |
1432 | 1439 | ||
1433 | extern bool enable_hs; | 1440 | extern bool enable_hs; |
1434 | extern bool enable_le; | ||
1435 | 1441 | ||
1436 | #endif /* __HCI_H */ | 1442 | #endif /* __HCI_H */ |
diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h index db1c5df45224..9fc7728f94e4 100644 --- a/include/net/bluetooth/hci_core.h +++ b/include/net/bluetooth/hci_core.h | |||
@@ -155,9 +155,14 @@ struct hci_dev { | |||
155 | __u16 hci_rev; | 155 | __u16 hci_rev; |
156 | __u8 lmp_ver; | 156 | __u8 lmp_ver; |
157 | __u16 manufacturer; | 157 | __u16 manufacturer; |
158 | __le16 lmp_subver; | 158 | __u16 lmp_subver; |
159 | __u16 voice_setting; | 159 | __u16 voice_setting; |
160 | __u8 io_capability; | 160 | __u8 io_capability; |
161 | __s8 inq_tx_power; | ||
162 | __u16 devid_source; | ||
163 | __u16 devid_vendor; | ||
164 | __u16 devid_product; | ||
165 | __u16 devid_version; | ||
161 | 166 | ||
162 | __u16 pkt_type; | 167 | __u16 pkt_type; |
163 | __u16 esco_type; | 168 | __u16 esco_type; |
@@ -250,9 +255,6 @@ struct hci_dev { | |||
250 | 255 | ||
251 | struct list_head remote_oob_data; | 256 | struct list_head remote_oob_data; |
252 | 257 | ||
253 | struct list_head adv_entries; | ||
254 | struct delayed_work adv_work; | ||
255 | |||
256 | struct hci_dev_stats stat; | 258 | struct hci_dev_stats stat; |
257 | 259 | ||
258 | struct sk_buff_head driver_init; | 260 | struct sk_buff_head driver_init; |
@@ -263,7 +265,6 @@ struct hci_dev { | |||
263 | 265 | ||
264 | struct dentry *debugfs; | 266 | struct dentry *debugfs; |
265 | 267 | ||
266 | struct device *parent; | ||
267 | struct device dev; | 268 | struct device dev; |
268 | 269 | ||
269 | struct rfkill *rfkill; | 270 | struct rfkill *rfkill; |
@@ -571,7 +572,7 @@ int hci_chan_del(struct hci_chan *chan); | |||
571 | void hci_chan_list_flush(struct hci_conn *conn); | 572 | void hci_chan_list_flush(struct hci_conn *conn); |
572 | 573 | ||
573 | struct hci_conn *hci_connect(struct hci_dev *hdev, int type, bdaddr_t *dst, | 574 | struct hci_conn *hci_connect(struct hci_dev *hdev, int type, bdaddr_t *dst, |
574 | __u8 sec_level, __u8 auth_type); | 575 | __u8 dst_type, __u8 sec_level, __u8 auth_type); |
575 | int hci_conn_check_link_mode(struct hci_conn *conn); | 576 | int hci_conn_check_link_mode(struct hci_conn *conn); |
576 | int hci_conn_check_secure(struct hci_conn *conn, __u8 sec_level); | 577 | int hci_conn_check_secure(struct hci_conn *conn, __u8 sec_level); |
577 | int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type); | 578 | int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type); |
@@ -673,8 +674,8 @@ int hci_add_link_key(struct hci_dev *hdev, struct hci_conn *conn, int new_key, | |||
673 | bdaddr_t *bdaddr, u8 *val, u8 type, u8 pin_len); | 674 | bdaddr_t *bdaddr, u8 *val, u8 type, u8 pin_len); |
674 | struct smp_ltk *hci_find_ltk(struct hci_dev *hdev, __le16 ediv, u8 rand[8]); | 675 | struct smp_ltk *hci_find_ltk(struct hci_dev *hdev, __le16 ediv, u8 rand[8]); |
675 | int hci_add_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 addr_type, u8 type, | 676 | int hci_add_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 addr_type, u8 type, |
676 | int new_key, u8 authenticated, u8 tk[16], u8 enc_size, u16 ediv, | 677 | int new_key, u8 authenticated, u8 tk[16], u8 enc_size, |
677 | u8 rand[8]); | 678 | __le16 ediv, u8 rand[8]); |
678 | struct smp_ltk *hci_find_ltk_by_addr(struct hci_dev *hdev, bdaddr_t *bdaddr, | 679 | struct smp_ltk *hci_find_ltk_by_addr(struct hci_dev *hdev, bdaddr_t *bdaddr, |
679 | u8 addr_type); | 680 | u8 addr_type); |
680 | int hci_remove_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr); | 681 | int hci_remove_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr); |
@@ -688,14 +689,6 @@ int hci_add_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 *hash, | |||
688 | u8 *randomizer); | 689 | u8 *randomizer); |
689 | int hci_remove_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr); | 690 | int hci_remove_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr); |
690 | 691 | ||
691 | #define ADV_CLEAR_TIMEOUT (3*60*HZ) /* Three minutes */ | ||
692 | int hci_adv_entries_clear(struct hci_dev *hdev); | ||
693 | struct adv_entry *hci_find_adv_entry(struct hci_dev *hdev, bdaddr_t *bdaddr); | ||
694 | int hci_add_adv_entry(struct hci_dev *hdev, | ||
695 | struct hci_ev_le_advertising_info *ev); | ||
696 | |||
697 | void hci_del_off_timer(struct hci_dev *hdev); | ||
698 | |||
699 | void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb); | 692 | void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb); |
700 | 693 | ||
701 | int hci_recv_frame(struct sk_buff *skb); | 694 | int hci_recv_frame(struct sk_buff *skb); |
@@ -709,7 +702,7 @@ void hci_conn_init_sysfs(struct hci_conn *conn); | |||
709 | void hci_conn_add_sysfs(struct hci_conn *conn); | 702 | void hci_conn_add_sysfs(struct hci_conn *conn); |
710 | void hci_conn_del_sysfs(struct hci_conn *conn); | 703 | void hci_conn_del_sysfs(struct hci_conn *conn); |
711 | 704 | ||
712 | #define SET_HCIDEV_DEV(hdev, pdev) ((hdev)->parent = (pdev)) | 705 | #define SET_HCIDEV_DEV(hdev, pdev) ((hdev)->dev.parent = (pdev)) |
713 | 706 | ||
714 | /* ----- LMP capabilities ----- */ | 707 | /* ----- LMP capabilities ----- */ |
715 | #define lmp_rswitch_capable(dev) ((dev)->features[0] & LMP_RSWITCH) | 708 | #define lmp_rswitch_capable(dev) ((dev)->features[0] & LMP_RSWITCH) |
@@ -933,6 +926,23 @@ static inline bool eir_has_data_type(u8 *data, size_t data_len, u8 type) | |||
933 | return false; | 926 | return false; |
934 | } | 927 | } |
935 | 928 | ||
929 | static inline size_t eir_get_length(u8 *eir, size_t eir_len) | ||
930 | { | ||
931 | size_t parsed = 0; | ||
932 | |||
933 | while (parsed < eir_len) { | ||
934 | u8 field_len = eir[0]; | ||
935 | |||
936 | if (field_len == 0) | ||
937 | return parsed; | ||
938 | |||
939 | parsed += field_len + 1; | ||
940 | eir += field_len + 1; | ||
941 | } | ||
942 | |||
943 | return eir_len; | ||
944 | } | ||
945 | |||
936 | static inline u16 eir_append_data(u8 *eir, u16 eir_len, u8 type, u8 *data, | 946 | static inline u16 eir_append_data(u8 *eir, u16 eir_len, u8 type, u8 *data, |
937 | u8 data_len) | 947 | u8 data_len) |
938 | { | 948 | { |
@@ -961,17 +971,12 @@ void hci_send_to_monitor(struct hci_dev *hdev, struct sk_buff *skb); | |||
961 | void hci_sock_dev_event(struct hci_dev *hdev, int event); | 971 | void hci_sock_dev_event(struct hci_dev *hdev, int event); |
962 | 972 | ||
963 | /* Management interface */ | 973 | /* Management interface */ |
964 | #define MGMT_ADDR_BREDR 0x00 | 974 | #define DISCOV_TYPE_BREDR (BIT(BDADDR_BREDR)) |
965 | #define MGMT_ADDR_LE_PUBLIC 0x01 | 975 | #define DISCOV_TYPE_LE (BIT(BDADDR_LE_PUBLIC) | \ |
966 | #define MGMT_ADDR_LE_RANDOM 0x02 | 976 | BIT(BDADDR_LE_RANDOM)) |
967 | #define MGMT_ADDR_INVALID 0xff | 977 | #define DISCOV_TYPE_INTERLEAVED (BIT(BDADDR_BREDR) | \ |
968 | 978 | BIT(BDADDR_LE_PUBLIC) | \ | |
969 | #define DISCOV_TYPE_BREDR (BIT(MGMT_ADDR_BREDR)) | 979 | BIT(BDADDR_LE_RANDOM)) |
970 | #define DISCOV_TYPE_LE (BIT(MGMT_ADDR_LE_PUBLIC) | \ | ||
971 | BIT(MGMT_ADDR_LE_RANDOM)) | ||
972 | #define DISCOV_TYPE_INTERLEAVED (BIT(MGMT_ADDR_BREDR) | \ | ||
973 | BIT(MGMT_ADDR_LE_PUBLIC) | \ | ||
974 | BIT(MGMT_ADDR_LE_RANDOM)) | ||
975 | 980 | ||
976 | int mgmt_control(struct sock *sk, struct msghdr *msg, size_t len); | 981 | int mgmt_control(struct sock *sk, struct msghdr *msg, size_t len); |
977 | int mgmt_index_added(struct hci_dev *hdev); | 982 | int mgmt_index_added(struct hci_dev *hdev); |
@@ -1067,12 +1072,12 @@ void hci_le_conn_update(struct hci_conn *conn, u16 min, u16 max, | |||
1067 | u16 latency, u16 to_multiplier); | 1072 | u16 latency, u16 to_multiplier); |
1068 | void hci_le_start_enc(struct hci_conn *conn, __le16 ediv, __u8 rand[8], | 1073 | void hci_le_start_enc(struct hci_conn *conn, __le16 ediv, __u8 rand[8], |
1069 | __u8 ltk[16]); | 1074 | __u8 ltk[16]); |
1070 | void hci_le_ltk_reply(struct hci_conn *conn, u8 ltk[16]); | ||
1071 | void hci_le_ltk_neg_reply(struct hci_conn *conn); | ||
1072 | |||
1073 | int hci_do_inquiry(struct hci_dev *hdev, u8 length); | 1075 | int hci_do_inquiry(struct hci_dev *hdev, u8 length); |
1074 | int hci_cancel_inquiry(struct hci_dev *hdev); | 1076 | int hci_cancel_inquiry(struct hci_dev *hdev); |
1075 | int hci_le_scan(struct hci_dev *hdev, u8 type, u16 interval, u16 window, | 1077 | int hci_le_scan(struct hci_dev *hdev, u8 type, u16 interval, u16 window, |
1076 | int timeout); | 1078 | int timeout); |
1079 | int hci_cancel_le_scan(struct hci_dev *hdev); | ||
1080 | |||
1081 | u8 bdaddr_to_le(u8 bdaddr_type); | ||
1077 | 1082 | ||
1078 | #endif /* __HCI_CORE_H */ | 1083 | #endif /* __HCI_CORE_H */ |
diff --git a/include/net/bluetooth/l2cap.h b/include/net/bluetooth/l2cap.h index 9b242c6bf55b..1c7d1cd5e679 100644 --- a/include/net/bluetooth/l2cap.h +++ b/include/net/bluetooth/l2cap.h | |||
@@ -44,6 +44,7 @@ | |||
44 | #define L2CAP_DEFAULT_MAX_SDU_SIZE 0xFFFF | 44 | #define L2CAP_DEFAULT_MAX_SDU_SIZE 0xFFFF |
45 | #define L2CAP_DEFAULT_SDU_ITIME 0xFFFFFFFF | 45 | #define L2CAP_DEFAULT_SDU_ITIME 0xFFFFFFFF |
46 | #define L2CAP_DEFAULT_ACC_LAT 0xFFFFFFFF | 46 | #define L2CAP_DEFAULT_ACC_LAT 0xFFFFFFFF |
47 | #define L2CAP_BREDR_MAX_PAYLOAD 1019 /* 3-DH5 packet */ | ||
47 | 48 | ||
48 | #define L2CAP_DISC_TIMEOUT msecs_to_jiffies(100) | 49 | #define L2CAP_DISC_TIMEOUT msecs_to_jiffies(100) |
49 | #define L2CAP_DISC_REJ_TIMEOUT msecs_to_jiffies(5000) | 50 | #define L2CAP_DISC_REJ_TIMEOUT msecs_to_jiffies(5000) |
@@ -57,6 +58,7 @@ struct sockaddr_l2 { | |||
57 | __le16 l2_psm; | 58 | __le16 l2_psm; |
58 | bdaddr_t l2_bdaddr; | 59 | bdaddr_t l2_bdaddr; |
59 | __le16 l2_cid; | 60 | __le16 l2_cid; |
61 | __u8 l2_bdaddr_type; | ||
60 | }; | 62 | }; |
61 | 63 | ||
62 | /* L2CAP socket options */ | 64 | /* L2CAP socket options */ |
@@ -139,6 +141,8 @@ struct l2cap_conninfo { | |||
139 | 141 | ||
140 | #define L2CAP_CTRL_TXSEQ_SHIFT 1 | 142 | #define L2CAP_CTRL_TXSEQ_SHIFT 1 |
141 | #define L2CAP_CTRL_SUPER_SHIFT 2 | 143 | #define L2CAP_CTRL_SUPER_SHIFT 2 |
144 | #define L2CAP_CTRL_POLL_SHIFT 4 | ||
145 | #define L2CAP_CTRL_FINAL_SHIFT 7 | ||
142 | #define L2CAP_CTRL_REQSEQ_SHIFT 8 | 146 | #define L2CAP_CTRL_REQSEQ_SHIFT 8 |
143 | #define L2CAP_CTRL_SAR_SHIFT 14 | 147 | #define L2CAP_CTRL_SAR_SHIFT 14 |
144 | 148 | ||
@@ -152,9 +156,11 @@ struct l2cap_conninfo { | |||
152 | #define L2CAP_EXT_CTRL_FINAL 0x00000002 | 156 | #define L2CAP_EXT_CTRL_FINAL 0x00000002 |
153 | #define L2CAP_EXT_CTRL_FRAME_TYPE 0x00000001 /* I- or S-Frame */ | 157 | #define L2CAP_EXT_CTRL_FRAME_TYPE 0x00000001 /* I- or S-Frame */ |
154 | 158 | ||
159 | #define L2CAP_EXT_CTRL_FINAL_SHIFT 1 | ||
155 | #define L2CAP_EXT_CTRL_REQSEQ_SHIFT 2 | 160 | #define L2CAP_EXT_CTRL_REQSEQ_SHIFT 2 |
156 | #define L2CAP_EXT_CTRL_SAR_SHIFT 16 | 161 | #define L2CAP_EXT_CTRL_SAR_SHIFT 16 |
157 | #define L2CAP_EXT_CTRL_SUPER_SHIFT 16 | 162 | #define L2CAP_EXT_CTRL_SUPER_SHIFT 16 |
163 | #define L2CAP_EXT_CTRL_POLL_SHIFT 18 | ||
158 | #define L2CAP_EXT_CTRL_TXSEQ_SHIFT 18 | 164 | #define L2CAP_EXT_CTRL_TXSEQ_SHIFT 18 |
159 | 165 | ||
160 | /* L2CAP Supervisory Function */ | 166 | /* L2CAP Supervisory Function */ |
@@ -186,6 +192,8 @@ struct l2cap_hdr { | |||
186 | #define L2CAP_FCS_SIZE 2 | 192 | #define L2CAP_FCS_SIZE 2 |
187 | #define L2CAP_SDULEN_SIZE 2 | 193 | #define L2CAP_SDULEN_SIZE 2 |
188 | #define L2CAP_PSMLEN_SIZE 2 | 194 | #define L2CAP_PSMLEN_SIZE 2 |
195 | #define L2CAP_ENH_CTRL_SIZE 2 | ||
196 | #define L2CAP_EXT_CTRL_SIZE 4 | ||
189 | 197 | ||
190 | struct l2cap_cmd_hdr { | 198 | struct l2cap_cmd_hdr { |
191 | __u8 code; | 199 | __u8 code; |
@@ -401,6 +409,16 @@ struct l2cap_conn_param_update_rsp { | |||
401 | #define L2CAP_CONN_PARAM_REJECTED 0x0001 | 409 | #define L2CAP_CONN_PARAM_REJECTED 0x0001 |
402 | 410 | ||
403 | /* ----- L2CAP channels and connections ----- */ | 411 | /* ----- L2CAP channels and connections ----- */ |
412 | struct l2cap_seq_list { | ||
413 | __u16 head; | ||
414 | __u16 tail; | ||
415 | __u16 mask; | ||
416 | __u16 *list; | ||
417 | }; | ||
418 | |||
419 | #define L2CAP_SEQ_LIST_CLEAR 0xFFFF | ||
420 | #define L2CAP_SEQ_LIST_TAIL 0x8000 | ||
421 | |||
404 | struct srej_list { | 422 | struct srej_list { |
405 | __u16 tx_seq; | 423 | __u16 tx_seq; |
406 | struct list_head list; | 424 | struct list_head list; |
@@ -446,6 +464,9 @@ struct l2cap_chan { | |||
446 | __u16 monitor_timeout; | 464 | __u16 monitor_timeout; |
447 | __u16 mps; | 465 | __u16 mps; |
448 | 466 | ||
467 | __u8 tx_state; | ||
468 | __u8 rx_state; | ||
469 | |||
449 | unsigned long conf_state; | 470 | unsigned long conf_state; |
450 | unsigned long conn_state; | 471 | unsigned long conn_state; |
451 | unsigned long flags; | 472 | unsigned long flags; |
@@ -456,9 +477,11 @@ struct l2cap_chan { | |||
456 | __u16 buffer_seq; | 477 | __u16 buffer_seq; |
457 | __u16 buffer_seq_srej; | 478 | __u16 buffer_seq_srej; |
458 | __u16 srej_save_reqseq; | 479 | __u16 srej_save_reqseq; |
480 | __u16 last_acked_seq; | ||
459 | __u16 frames_sent; | 481 | __u16 frames_sent; |
460 | __u16 unacked_frames; | 482 | __u16 unacked_frames; |
461 | __u8 retry_count; | 483 | __u8 retry_count; |
484 | __u16 srej_queue_next; | ||
462 | __u8 num_acked; | 485 | __u8 num_acked; |
463 | __u16 sdu_len; | 486 | __u16 sdu_len; |
464 | struct sk_buff *sdu; | 487 | struct sk_buff *sdu; |
@@ -490,6 +513,8 @@ struct l2cap_chan { | |||
490 | struct sk_buff *tx_send_head; | 513 | struct sk_buff *tx_send_head; |
491 | struct sk_buff_head tx_q; | 514 | struct sk_buff_head tx_q; |
492 | struct sk_buff_head srej_q; | 515 | struct sk_buff_head srej_q; |
516 | struct l2cap_seq_list srej_list; | ||
517 | struct l2cap_seq_list retrans_list; | ||
493 | struct list_head srej_l; | 518 | struct list_head srej_l; |
494 | 519 | ||
495 | struct list_head list; | 520 | struct list_head list; |
@@ -508,8 +533,7 @@ struct l2cap_ops { | |||
508 | void (*close) (void *data); | 533 | void (*close) (void *data); |
509 | void (*state_change) (void *data, int state); | 534 | void (*state_change) (void *data, int state); |
510 | struct sk_buff *(*alloc_skb) (struct l2cap_chan *chan, | 535 | struct sk_buff *(*alloc_skb) (struct l2cap_chan *chan, |
511 | unsigned long len, int nb, int *err); | 536 | unsigned long len, int nb); |
512 | |||
513 | }; | 537 | }; |
514 | 538 | ||
515 | struct l2cap_conn { | 539 | struct l2cap_conn { |
@@ -600,6 +624,44 @@ enum { | |||
600 | FLAG_EFS_ENABLE, | 624 | FLAG_EFS_ENABLE, |
601 | }; | 625 | }; |
602 | 626 | ||
627 | enum { | ||
628 | L2CAP_TX_STATE_XMIT, | ||
629 | L2CAP_TX_STATE_WAIT_F, | ||
630 | }; | ||
631 | |||
632 | enum { | ||
633 | L2CAP_RX_STATE_RECV, | ||
634 | L2CAP_RX_STATE_SREJ_SENT, | ||
635 | }; | ||
636 | |||
637 | enum { | ||
638 | L2CAP_TXSEQ_EXPECTED, | ||
639 | L2CAP_TXSEQ_EXPECTED_SREJ, | ||
640 | L2CAP_TXSEQ_UNEXPECTED, | ||
641 | L2CAP_TXSEQ_UNEXPECTED_SREJ, | ||
642 | L2CAP_TXSEQ_DUPLICATE, | ||
643 | L2CAP_TXSEQ_DUPLICATE_SREJ, | ||
644 | L2CAP_TXSEQ_INVALID, | ||
645 | L2CAP_TXSEQ_INVALID_IGNORE, | ||
646 | }; | ||
647 | |||
648 | enum { | ||
649 | L2CAP_EV_DATA_REQUEST, | ||
650 | L2CAP_EV_LOCAL_BUSY_DETECTED, | ||
651 | L2CAP_EV_LOCAL_BUSY_CLEAR, | ||
652 | L2CAP_EV_RECV_REQSEQ_AND_FBIT, | ||
653 | L2CAP_EV_RECV_FBIT, | ||
654 | L2CAP_EV_RETRANS_TO, | ||
655 | L2CAP_EV_MONITOR_TO, | ||
656 | L2CAP_EV_EXPLICIT_POLL, | ||
657 | L2CAP_EV_RECV_IFRAME, | ||
658 | L2CAP_EV_RECV_RR, | ||
659 | L2CAP_EV_RECV_REJ, | ||
660 | L2CAP_EV_RECV_RNR, | ||
661 | L2CAP_EV_RECV_SREJ, | ||
662 | L2CAP_EV_RECV_FRAME, | ||
663 | }; | ||
664 | |||
603 | static inline void l2cap_chan_hold(struct l2cap_chan *c) | 665 | static inline void l2cap_chan_hold(struct l2cap_chan *c) |
604 | { | 666 | { |
605 | atomic_inc(&c->refcnt); | 667 | atomic_inc(&c->refcnt); |
@@ -622,21 +684,26 @@ static inline void l2cap_chan_unlock(struct l2cap_chan *chan) | |||
622 | } | 684 | } |
623 | 685 | ||
624 | static inline void l2cap_set_timer(struct l2cap_chan *chan, | 686 | static inline void l2cap_set_timer(struct l2cap_chan *chan, |
625 | struct delayed_work *work, long timeout) | 687 | struct delayed_work *work, long timeout) |
626 | { | 688 | { |
627 | BT_DBG("chan %p state %s timeout %ld", chan, | 689 | BT_DBG("chan %p state %s timeout %ld", chan, |
628 | state_to_string(chan->state), timeout); | 690 | state_to_string(chan->state), timeout); |
629 | 691 | ||
692 | /* If delayed work cancelled do not hold(chan) | ||
693 | since it is already done with previous set_timer */ | ||
630 | if (!cancel_delayed_work(work)) | 694 | if (!cancel_delayed_work(work)) |
631 | l2cap_chan_hold(chan); | 695 | l2cap_chan_hold(chan); |
696 | |||
632 | schedule_delayed_work(work, timeout); | 697 | schedule_delayed_work(work, timeout); |
633 | } | 698 | } |
634 | 699 | ||
635 | static inline bool l2cap_clear_timer(struct l2cap_chan *chan, | 700 | static inline bool l2cap_clear_timer(struct l2cap_chan *chan, |
636 | struct delayed_work *work) | 701 | struct delayed_work *work) |
637 | { | 702 | { |
638 | bool ret; | 703 | bool ret; |
639 | 704 | ||
705 | /* put(chan) if delayed work cancelled otherwise it | ||
706 | is done in delayed work function */ | ||
640 | ret = cancel_delayed_work(work); | 707 | ret = cancel_delayed_work(work); |
641 | if (ret) | 708 | if (ret) |
642 | l2cap_chan_put(chan); | 709 | l2cap_chan_put(chan); |
@@ -658,13 +725,10 @@ static inline bool l2cap_clear_timer(struct l2cap_chan *chan, | |||
658 | 725 | ||
659 | static inline int __seq_offset(struct l2cap_chan *chan, __u16 seq1, __u16 seq2) | 726 | static inline int __seq_offset(struct l2cap_chan *chan, __u16 seq1, __u16 seq2) |
660 | { | 727 | { |
661 | int offset; | 728 | if (seq1 >= seq2) |
662 | 729 | return seq1 - seq2; | |
663 | offset = (seq1 - seq2) % (chan->tx_win_max + 1); | 730 | else |
664 | if (offset < 0) | 731 | return chan->tx_win_max + 1 - seq2 + seq1; |
665 | offset += (chan->tx_win_max + 1); | ||
666 | |||
667 | return offset; | ||
668 | } | 732 | } |
669 | 733 | ||
670 | static inline __u16 __next_seq(struct l2cap_chan *chan, __u16 seq) | 734 | static inline __u16 __next_seq(struct l2cap_chan *chan, __u16 seq) |
@@ -852,14 +916,15 @@ int __l2cap_wait_ack(struct sock *sk); | |||
852 | int l2cap_add_psm(struct l2cap_chan *chan, bdaddr_t *src, __le16 psm); | 916 | int l2cap_add_psm(struct l2cap_chan *chan, bdaddr_t *src, __le16 psm); |
853 | int l2cap_add_scid(struct l2cap_chan *chan, __u16 scid); | 917 | int l2cap_add_scid(struct l2cap_chan *chan, __u16 scid); |
854 | 918 | ||
855 | struct l2cap_chan *l2cap_chan_create(struct sock *sk); | 919 | struct l2cap_chan *l2cap_chan_create(void); |
856 | void l2cap_chan_close(struct l2cap_chan *chan, int reason); | 920 | void l2cap_chan_close(struct l2cap_chan *chan, int reason); |
857 | void l2cap_chan_destroy(struct l2cap_chan *chan); | 921 | void l2cap_chan_destroy(struct l2cap_chan *chan); |
858 | int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid, | 922 | int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid, |
859 | bdaddr_t *dst); | 923 | bdaddr_t *dst, u8 dst_type); |
860 | int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len, | 924 | int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len, |
861 | u32 priority); | 925 | u32 priority); |
862 | void l2cap_chan_busy(struct l2cap_chan *chan, int busy); | 926 | void l2cap_chan_busy(struct l2cap_chan *chan, int busy); |
863 | int l2cap_chan_check_security(struct l2cap_chan *chan); | 927 | int l2cap_chan_check_security(struct l2cap_chan *chan); |
928 | void l2cap_chan_set_defaults(struct l2cap_chan *chan); | ||
864 | 929 | ||
865 | #endif /* __L2CAP_H */ | 930 | #endif /* __L2CAP_H */ |
diff --git a/include/net/bluetooth/mgmt.h b/include/net/bluetooth/mgmt.h index ebfd91fc20f8..23fd0546fccb 100644 --- a/include/net/bluetooth/mgmt.h +++ b/include/net/bluetooth/mgmt.h | |||
@@ -341,6 +341,15 @@ struct mgmt_cp_unblock_device { | |||
341 | } __packed; | 341 | } __packed; |
342 | #define MGMT_UNBLOCK_DEVICE_SIZE MGMT_ADDR_INFO_SIZE | 342 | #define MGMT_UNBLOCK_DEVICE_SIZE MGMT_ADDR_INFO_SIZE |
343 | 343 | ||
344 | #define MGMT_OP_SET_DEVICE_ID 0x0028 | ||
345 | struct mgmt_cp_set_device_id { | ||
346 | __le16 source; | ||
347 | __le16 vendor; | ||
348 | __le16 product; | ||
349 | __le16 version; | ||
350 | } __packed; | ||
351 | #define MGMT_SET_DEVICE_ID_SIZE 8 | ||
352 | |||
344 | #define MGMT_EV_CMD_COMPLETE 0x0001 | 353 | #define MGMT_EV_CMD_COMPLETE 0x0001 |
345 | struct mgmt_ev_cmd_complete { | 354 | struct mgmt_ev_cmd_complete { |
346 | __le16 opcode; | 355 | __le16 opcode; |
diff --git a/include/net/bluetooth/smp.h b/include/net/bluetooth/smp.h index 7b3acdd29134..ca356a734920 100644 --- a/include/net/bluetooth/smp.h +++ b/include/net/bluetooth/smp.h | |||
@@ -77,7 +77,7 @@ struct smp_cmd_encrypt_info { | |||
77 | 77 | ||
78 | #define SMP_CMD_MASTER_IDENT 0x07 | 78 | #define SMP_CMD_MASTER_IDENT 0x07 |
79 | struct smp_cmd_master_ident { | 79 | struct smp_cmd_master_ident { |
80 | __u16 ediv; | 80 | __le16 ediv; |
81 | __u8 rand[8]; | 81 | __u8 rand[8]; |
82 | } __packed; | 82 | } __packed; |
83 | 83 | ||
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h index adb2320bccdf..0289d4ce7070 100644 --- a/include/net/cfg80211.h +++ b/include/net/cfg80211.h | |||
@@ -3365,9 +3365,9 @@ void cfg80211_report_obss_beacon(struct wiphy *wiphy, | |||
3365 | * @chan: main channel | 3365 | * @chan: main channel |
3366 | * @channel_type: HT mode | 3366 | * @channel_type: HT mode |
3367 | */ | 3367 | */ |
3368 | int cfg80211_can_beacon_sec_chan(struct wiphy *wiphy, | 3368 | bool cfg80211_can_beacon_sec_chan(struct wiphy *wiphy, |
3369 | struct ieee80211_channel *chan, | 3369 | struct ieee80211_channel *chan, |
3370 | enum nl80211_channel_type channel_type); | 3370 | enum nl80211_channel_type channel_type); |
3371 | 3371 | ||
3372 | /* | 3372 | /* |
3373 | * cfg80211_ch_switch_notify - update wdev channel and notify userspace | 3373 | * cfg80211_ch_switch_notify - update wdev channel and notify userspace |
diff --git a/include/net/cipso_ipv4.h b/include/net/cipso_ipv4.h index 9808877c2ab9..a7a683e30b64 100644 --- a/include/net/cipso_ipv4.h +++ b/include/net/cipso_ipv4.h | |||
@@ -42,6 +42,7 @@ | |||
42 | #include <net/netlabel.h> | 42 | #include <net/netlabel.h> |
43 | #include <net/request_sock.h> | 43 | #include <net/request_sock.h> |
44 | #include <linux/atomic.h> | 44 | #include <linux/atomic.h> |
45 | #include <asm/unaligned.h> | ||
45 | 46 | ||
46 | /* known doi values */ | 47 | /* known doi values */ |
47 | #define CIPSO_V4_DOI_UNKNOWN 0x00000000 | 48 | #define CIPSO_V4_DOI_UNKNOWN 0x00000000 |
@@ -285,7 +286,33 @@ static inline int cipso_v4_skbuff_getattr(const struct sk_buff *skb, | |||
285 | static inline int cipso_v4_validate(const struct sk_buff *skb, | 286 | static inline int cipso_v4_validate(const struct sk_buff *skb, |
286 | unsigned char **option) | 287 | unsigned char **option) |
287 | { | 288 | { |
288 | return -ENOSYS; | 289 | unsigned char *opt = *option; |
290 | unsigned char err_offset = 0; | ||
291 | u8 opt_len = opt[1]; | ||
292 | u8 opt_iter; | ||
293 | |||
294 | if (opt_len < 8) { | ||
295 | err_offset = 1; | ||
296 | goto out; | ||
297 | } | ||
298 | |||
299 | if (get_unaligned_be32(&opt[2]) == 0) { | ||
300 | err_offset = 2; | ||
301 | goto out; | ||
302 | } | ||
303 | |||
304 | for (opt_iter = 6; opt_iter < opt_len;) { | ||
305 | if (opt[opt_iter + 1] > (opt_len - opt_iter)) { | ||
306 | err_offset = opt_iter + 1; | ||
307 | goto out; | ||
308 | } | ||
309 | opt_iter += opt[opt_iter + 1]; | ||
310 | } | ||
311 | |||
312 | out: | ||
313 | *option = opt + err_offset; | ||
314 | return err_offset; | ||
315 | |||
289 | } | 316 | } |
290 | #endif /* CONFIG_NETLABEL */ | 317 | #endif /* CONFIG_NETLABEL */ |
291 | 318 | ||
diff --git a/include/net/dst.h b/include/net/dst.h index bed833d9796a..8197eadca819 100644 --- a/include/net/dst.h +++ b/include/net/dst.h | |||
@@ -60,6 +60,7 @@ struct dst_entry { | |||
60 | #define DST_NOCOUNT 0x0020 | 60 | #define DST_NOCOUNT 0x0020 |
61 | #define DST_NOPEER 0x0040 | 61 | #define DST_NOPEER 0x0040 |
62 | #define DST_FAKE_RTABLE 0x0080 | 62 | #define DST_FAKE_RTABLE 0x0080 |
63 | #define DST_XFRM_TUNNEL 0x0100 | ||
63 | 64 | ||
64 | short error; | 65 | short error; |
65 | short obsolete; | 66 | short obsolete; |
diff --git a/include/net/mac80211.h b/include/net/mac80211.h index 4d6e6c6818d0..1937c7d98304 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h | |||
@@ -667,6 +667,9 @@ ieee80211_tx_info_clear_status(struct ieee80211_tx_info *info) | |||
667 | * @RX_FLAG_SHORT_GI: Short guard interval was used | 667 | * @RX_FLAG_SHORT_GI: Short guard interval was used |
668 | * @RX_FLAG_NO_SIGNAL_VAL: The signal strength value is not present. | 668 | * @RX_FLAG_NO_SIGNAL_VAL: The signal strength value is not present. |
669 | * Valid only for data frames (mainly A-MPDU) | 669 | * Valid only for data frames (mainly A-MPDU) |
670 | * @RX_FLAG_HT_GF: This frame was received in a HT-greenfield transmission, if | ||
671 | * the driver fills this value it should add %IEEE80211_RADIOTAP_MCS_HAVE_FMT | ||
672 | * to hw.radiotap_mcs_details to advertise that fact | ||
670 | */ | 673 | */ |
671 | enum mac80211_rx_flags { | 674 | enum mac80211_rx_flags { |
672 | RX_FLAG_MMIC_ERROR = 1<<0, | 675 | RX_FLAG_MMIC_ERROR = 1<<0, |
@@ -681,6 +684,7 @@ enum mac80211_rx_flags { | |||
681 | RX_FLAG_40MHZ = 1<<10, | 684 | RX_FLAG_40MHZ = 1<<10, |
682 | RX_FLAG_SHORT_GI = 1<<11, | 685 | RX_FLAG_SHORT_GI = 1<<11, |
683 | RX_FLAG_NO_SIGNAL_VAL = 1<<12, | 686 | RX_FLAG_NO_SIGNAL_VAL = 1<<12, |
687 | RX_FLAG_HT_GF = 1<<13, | ||
684 | }; | 688 | }; |
685 | 689 | ||
686 | /** | 690 | /** |
@@ -939,7 +943,7 @@ static inline bool ieee80211_vif_is_mesh(struct ieee80211_vif *vif) | |||
939 | * CCMP key if it requires CCMP encryption of management frames (MFP) to | 943 | * CCMP key if it requires CCMP encryption of management frames (MFP) to |
940 | * be done in software. | 944 | * be done in software. |
941 | * @IEEE80211_KEY_FLAG_PUT_IV_SPACE: This flag should be set by the driver | 945 | * @IEEE80211_KEY_FLAG_PUT_IV_SPACE: This flag should be set by the driver |
942 | * for a CCMP key if space should be prepared for the IV, but the IV | 946 | * if space should be prepared for the IV, but the IV |
943 | * itself should not be generated. Do not set together with | 947 | * itself should not be generated. Do not set together with |
944 | * @IEEE80211_KEY_FLAG_GENERATE_IV on the same key. | 948 | * @IEEE80211_KEY_FLAG_GENERATE_IV on the same key. |
945 | */ | 949 | */ |
@@ -1288,6 +1292,11 @@ enum ieee80211_hw_flags { | |||
1288 | * | 1292 | * |
1289 | * @offchannel_tx_hw_queue: HW queue ID to use for offchannel TX | 1293 | * @offchannel_tx_hw_queue: HW queue ID to use for offchannel TX |
1290 | * (if %IEEE80211_HW_QUEUE_CONTROL is set) | 1294 | * (if %IEEE80211_HW_QUEUE_CONTROL is set) |
1295 | * | ||
1296 | * @radiotap_mcs_details: lists which MCS information can the HW | ||
1297 | * reports, by default it is set to _MCS, _GI and _BW but doesn't | ||
1298 | * include _FMT. Use %IEEE80211_RADIOTAP_MCS_HAVE_* values, only | ||
1299 | * adding _BW is supported today. | ||
1291 | */ | 1300 | */ |
1292 | struct ieee80211_hw { | 1301 | struct ieee80211_hw { |
1293 | struct ieee80211_conf conf; | 1302 | struct ieee80211_conf conf; |
@@ -1309,6 +1318,7 @@ struct ieee80211_hw { | |||
1309 | u8 max_rx_aggregation_subframes; | 1318 | u8 max_rx_aggregation_subframes; |
1310 | u8 max_tx_aggregation_subframes; | 1319 | u8 max_tx_aggregation_subframes; |
1311 | u8 offchannel_tx_hw_queue; | 1320 | u8 offchannel_tx_hw_queue; |
1321 | u8 radiotap_mcs_details; | ||
1312 | }; | 1322 | }; |
1313 | 1323 | ||
1314 | /** | 1324 | /** |
diff --git a/include/net/nfc/hci.h b/include/net/nfc/hci.h index aca65a5a9d0d..4467c9460857 100644 --- a/include/net/nfc/hci.h +++ b/include/net/nfc/hci.h | |||
@@ -39,6 +39,8 @@ struct nfc_hci_ops { | |||
39 | int (*data_exchange) (struct nfc_hci_dev *hdev, | 39 | int (*data_exchange) (struct nfc_hci_dev *hdev, |
40 | struct nfc_target *target, | 40 | struct nfc_target *target, |
41 | struct sk_buff *skb, struct sk_buff **res_skb); | 41 | struct sk_buff *skb, struct sk_buff **res_skb); |
42 | int (*check_presence)(struct nfc_hci_dev *hdev, | ||
43 | struct nfc_target *target); | ||
42 | }; | 44 | }; |
43 | 45 | ||
44 | #define NFC_HCI_MAX_CUSTOM_GATES 15 | 46 | #define NFC_HCI_MAX_CUSTOM_GATES 15 |
@@ -82,10 +84,6 @@ struct nfc_hci_dev { | |||
82 | 84 | ||
83 | u8 gate2pipe[NFC_HCI_MAX_GATES]; | 85 | u8 gate2pipe[NFC_HCI_MAX_GATES]; |
84 | 86 | ||
85 | bool poll_started; | ||
86 | struct nfc_target *targets; | ||
87 | int target_count; | ||
88 | |||
89 | u8 sw_romlib; | 87 | u8 sw_romlib; |
90 | u8 sw_patch; | 88 | u8 sw_patch; |
91 | u8 sw_flashlib_major; | 89 | u8 sw_flashlib_major; |
diff --git a/include/net/nfc/nfc.h b/include/net/nfc/nfc.h index 9a2505a5b8de..b7ca4a2a1d72 100644 --- a/include/net/nfc/nfc.h +++ b/include/net/nfc/nfc.h | |||
@@ -48,26 +48,28 @@ struct nfc_dev; | |||
48 | typedef void (*data_exchange_cb_t)(void *context, struct sk_buff *skb, | 48 | typedef void (*data_exchange_cb_t)(void *context, struct sk_buff *skb, |
49 | int err); | 49 | int err); |
50 | 50 | ||
51 | struct nfc_target; | ||
52 | |||
51 | struct nfc_ops { | 53 | struct nfc_ops { |
52 | int (*dev_up)(struct nfc_dev *dev); | 54 | int (*dev_up)(struct nfc_dev *dev); |
53 | int (*dev_down)(struct nfc_dev *dev); | 55 | int (*dev_down)(struct nfc_dev *dev); |
54 | int (*start_poll)(struct nfc_dev *dev, u32 protocols); | 56 | int (*start_poll)(struct nfc_dev *dev, u32 protocols); |
55 | void (*stop_poll)(struct nfc_dev *dev); | 57 | void (*stop_poll)(struct nfc_dev *dev); |
56 | int (*dep_link_up)(struct nfc_dev *dev, int target_idx, u8 comm_mode, | 58 | int (*dep_link_up)(struct nfc_dev *dev, struct nfc_target *target, |
57 | u8 *gb, size_t gb_len); | 59 | u8 comm_mode, u8 *gb, size_t gb_len); |
58 | int (*dep_link_down)(struct nfc_dev *dev); | 60 | int (*dep_link_down)(struct nfc_dev *dev); |
59 | int (*activate_target)(struct nfc_dev *dev, u32 target_idx, | 61 | int (*activate_target)(struct nfc_dev *dev, struct nfc_target *target, |
60 | u32 protocol); | 62 | u32 protocol); |
61 | void (*deactivate_target)(struct nfc_dev *dev, u32 target_idx); | 63 | void (*deactivate_target)(struct nfc_dev *dev, |
62 | int (*data_exchange)(struct nfc_dev *dev, u32 target_idx, | 64 | struct nfc_target *target); |
65 | int (*data_exchange)(struct nfc_dev *dev, struct nfc_target *target, | ||
63 | struct sk_buff *skb, data_exchange_cb_t cb, | 66 | struct sk_buff *skb, data_exchange_cb_t cb, |
64 | void *cb_context); | 67 | void *cb_context); |
65 | int (*check_presence)(struct nfc_dev *dev, u32 target_idx); | 68 | int (*check_presence)(struct nfc_dev *dev, struct nfc_target *target); |
66 | }; | 69 | }; |
67 | 70 | ||
68 | #define NFC_TARGET_IDX_ANY -1 | 71 | #define NFC_TARGET_IDX_ANY -1 |
69 | #define NFC_MAX_GT_LEN 48 | 72 | #define NFC_MAX_GT_LEN 48 |
70 | #define NFC_TARGET_IDX_NONE 0xffffffff | ||
71 | 73 | ||
72 | struct nfc_target { | 74 | struct nfc_target { |
73 | u32 idx; | 75 | u32 idx; |
@@ -95,11 +97,10 @@ struct nfc_dev { | |||
95 | struct nfc_target *targets; | 97 | struct nfc_target *targets; |
96 | int n_targets; | 98 | int n_targets; |
97 | int targets_generation; | 99 | int targets_generation; |
98 | spinlock_t targets_lock; | ||
99 | struct device dev; | 100 | struct device dev; |
100 | bool dev_up; | 101 | bool dev_up; |
101 | bool polling; | 102 | bool polling; |
102 | u32 activated_target_idx; | 103 | struct nfc_target *active_target; |
103 | bool dep_link_up; | 104 | bool dep_link_up; |
104 | u32 dep_rf_mode; | 105 | u32 dep_rf_mode; |
105 | struct nfc_genl_data genl_data; | 106 | struct nfc_genl_data genl_data; |
diff --git a/include/net/nfc/shdlc.h b/include/net/nfc/shdlc.h index 1071987d0408..ab06afd462da 100644 --- a/include/net/nfc/shdlc.h +++ b/include/net/nfc/shdlc.h | |||
@@ -35,6 +35,8 @@ struct nfc_shdlc_ops { | |||
35 | int (*data_exchange) (struct nfc_shdlc *shdlc, | 35 | int (*data_exchange) (struct nfc_shdlc *shdlc, |
36 | struct nfc_target *target, | 36 | struct nfc_target *target, |
37 | struct sk_buff *skb, struct sk_buff **res_skb); | 37 | struct sk_buff *skb, struct sk_buff **res_skb); |
38 | int (*check_presence)(struct nfc_shdlc *shdlc, | ||
39 | struct nfc_target *target); | ||
38 | }; | 40 | }; |
39 | 41 | ||
40 | enum shdlc_state { | 42 | enum shdlc_state { |
diff --git a/include/net/sock.h b/include/net/sock.h index d89f0582b6b6..4a4521699563 100644 --- a/include/net/sock.h +++ b/include/net/sock.h | |||
@@ -46,6 +46,7 @@ | |||
46 | #include <linux/list_nulls.h> | 46 | #include <linux/list_nulls.h> |
47 | #include <linux/timer.h> | 47 | #include <linux/timer.h> |
48 | #include <linux/cache.h> | 48 | #include <linux/cache.h> |
49 | #include <linux/bitops.h> | ||
49 | #include <linux/lockdep.h> | 50 | #include <linux/lockdep.h> |
50 | #include <linux/netdevice.h> | 51 | #include <linux/netdevice.h> |
51 | #include <linux/skbuff.h> /* struct sk_buff */ | 52 | #include <linux/skbuff.h> /* struct sk_buff */ |
@@ -921,12 +922,23 @@ struct proto { | |||
921 | #endif | 922 | #endif |
922 | }; | 923 | }; |
923 | 924 | ||
925 | /* | ||
926 | * Bits in struct cg_proto.flags | ||
927 | */ | ||
928 | enum cg_proto_flags { | ||
929 | /* Currently active and new sockets should be assigned to cgroups */ | ||
930 | MEMCG_SOCK_ACTIVE, | ||
931 | /* It was ever activated; we must disarm static keys on destruction */ | ||
932 | MEMCG_SOCK_ACTIVATED, | ||
933 | }; | ||
934 | |||
924 | struct cg_proto { | 935 | struct cg_proto { |
925 | void (*enter_memory_pressure)(struct sock *sk); | 936 | void (*enter_memory_pressure)(struct sock *sk); |
926 | struct res_counter *memory_allocated; /* Current allocated memory. */ | 937 | struct res_counter *memory_allocated; /* Current allocated memory. */ |
927 | struct percpu_counter *sockets_allocated; /* Current number of sockets. */ | 938 | struct percpu_counter *sockets_allocated; /* Current number of sockets. */ |
928 | int *memory_pressure; | 939 | int *memory_pressure; |
929 | long *sysctl_mem; | 940 | long *sysctl_mem; |
941 | unsigned long flags; | ||
930 | /* | 942 | /* |
931 | * memcg field is used to find which memcg we belong directly | 943 | * memcg field is used to find which memcg we belong directly |
932 | * Each memcg struct can hold more than one cg_proto, so container_of | 944 | * Each memcg struct can hold more than one cg_proto, so container_of |
@@ -942,6 +954,16 @@ struct cg_proto { | |||
942 | extern int proto_register(struct proto *prot, int alloc_slab); | 954 | extern int proto_register(struct proto *prot, int alloc_slab); |
943 | extern void proto_unregister(struct proto *prot); | 955 | extern void proto_unregister(struct proto *prot); |
944 | 956 | ||
957 | static inline bool memcg_proto_active(struct cg_proto *cg_proto) | ||
958 | { | ||
959 | return test_bit(MEMCG_SOCK_ACTIVE, &cg_proto->flags); | ||
960 | } | ||
961 | |||
962 | static inline bool memcg_proto_activated(struct cg_proto *cg_proto) | ||
963 | { | ||
964 | return test_bit(MEMCG_SOCK_ACTIVATED, &cg_proto->flags); | ||
965 | } | ||
966 | |||
945 | #ifdef SOCK_REFCNT_DEBUG | 967 | #ifdef SOCK_REFCNT_DEBUG |
946 | static inline void sk_refcnt_debug_inc(struct sock *sk) | 968 | static inline void sk_refcnt_debug_inc(struct sock *sk) |
947 | { | 969 | { |
diff --git a/include/scsi/fcoe_sysfs.h b/include/scsi/fcoe_sysfs.h new file mode 100644 index 000000000000..604cb9bb3e76 --- /dev/null +++ b/include/scsi/fcoe_sysfs.h | |||
@@ -0,0 +1,124 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2011-2012 Intel Corporation. All rights reserved. | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify it | ||
5 | * under the terms and conditions of the GNU General Public License, | ||
6 | * version 2, as published by the Free Software Foundation. | ||
7 | * | ||
8 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
9 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
10 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
11 | * more details. | ||
12 | * | ||
13 | * You should have received a copy of the GNU General Public License along with | ||
14 | * this program; if not, write to the Free Software Foundation, Inc., | ||
15 | * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
16 | * | ||
17 | * Maintained at www.Open-FCoE.org | ||
18 | */ | ||
19 | |||
20 | #ifndef FCOE_SYSFS | ||
21 | #define FCOE_SYSFS | ||
22 | |||
23 | #include <linux/if_ether.h> | ||
24 | #include <linux/device.h> | ||
25 | #include <scsi/fc/fc_fcoe.h> | ||
26 | |||
27 | struct fcoe_ctlr_device; | ||
28 | struct fcoe_fcf_device; | ||
29 | |||
30 | struct fcoe_sysfs_function_template { | ||
31 | void (*get_fcoe_ctlr_link_fail)(struct fcoe_ctlr_device *); | ||
32 | void (*get_fcoe_ctlr_vlink_fail)(struct fcoe_ctlr_device *); | ||
33 | void (*get_fcoe_ctlr_miss_fka)(struct fcoe_ctlr_device *); | ||
34 | void (*get_fcoe_ctlr_symb_err)(struct fcoe_ctlr_device *); | ||
35 | void (*get_fcoe_ctlr_err_block)(struct fcoe_ctlr_device *); | ||
36 | void (*get_fcoe_ctlr_fcs_error)(struct fcoe_ctlr_device *); | ||
37 | void (*get_fcoe_ctlr_mode)(struct fcoe_ctlr_device *); | ||
38 | void (*get_fcoe_fcf_selected)(struct fcoe_fcf_device *); | ||
39 | void (*get_fcoe_fcf_vlan_id)(struct fcoe_fcf_device *); | ||
40 | }; | ||
41 | |||
42 | #define dev_to_ctlr(d) \ | ||
43 | container_of((d), struct fcoe_ctlr_device, dev) | ||
44 | |||
45 | enum fip_conn_type { | ||
46 | FIP_CONN_TYPE_UNKNOWN, | ||
47 | FIP_CONN_TYPE_FABRIC, | ||
48 | FIP_CONN_TYPE_VN2VN, | ||
49 | }; | ||
50 | |||
51 | struct fcoe_ctlr_device { | ||
52 | u32 id; | ||
53 | |||
54 | struct device dev; | ||
55 | struct fcoe_sysfs_function_template *f; | ||
56 | |||
57 | struct list_head fcfs; | ||
58 | char work_q_name[20]; | ||
59 | struct workqueue_struct *work_q; | ||
60 | char devloss_work_q_name[20]; | ||
61 | struct workqueue_struct *devloss_work_q; | ||
62 | struct mutex lock; | ||
63 | |||
64 | int fcf_dev_loss_tmo; | ||
65 | enum fip_conn_type mode; | ||
66 | |||
67 | /* expected in host order for displaying */ | ||
68 | struct fcoe_fc_els_lesb lesb; | ||
69 | }; | ||
70 | |||
71 | static inline void *fcoe_ctlr_device_priv(const struct fcoe_ctlr_device *ctlr) | ||
72 | { | ||
73 | return (void *)(ctlr + 1); | ||
74 | } | ||
75 | |||
76 | /* fcf states */ | ||
77 | enum fcf_state { | ||
78 | FCOE_FCF_STATE_UNKNOWN, | ||
79 | FCOE_FCF_STATE_DISCONNECTED, | ||
80 | FCOE_FCF_STATE_CONNECTED, | ||
81 | FCOE_FCF_STATE_DELETED, | ||
82 | }; | ||
83 | |||
84 | struct fcoe_fcf_device { | ||
85 | u32 id; | ||
86 | struct device dev; | ||
87 | struct list_head peers; | ||
88 | struct work_struct delete_work; | ||
89 | struct delayed_work dev_loss_work; | ||
90 | u32 dev_loss_tmo; | ||
91 | void *priv; | ||
92 | enum fcf_state state; | ||
93 | |||
94 | u64 fabric_name; | ||
95 | u64 switch_name; | ||
96 | u32 fc_map; | ||
97 | u16 vfid; | ||
98 | u8 mac[ETH_ALEN]; | ||
99 | u8 priority; | ||
100 | u32 fka_period; | ||
101 | u8 selected; | ||
102 | u16 vlan_id; | ||
103 | }; | ||
104 | |||
105 | #define dev_to_fcf(d) \ | ||
106 | container_of((d), struct fcoe_fcf_device, dev) | ||
107 | /* parentage should never be missing */ | ||
108 | #define fcoe_fcf_dev_to_ctlr_dev(x) \ | ||
109 | dev_to_ctlr((x)->dev.parent) | ||
110 | #define fcoe_fcf_device_priv(x) \ | ||
111 | ((x)->priv) | ||
112 | |||
113 | struct fcoe_ctlr_device *fcoe_ctlr_device_add(struct device *parent, | ||
114 | struct fcoe_sysfs_function_template *f, | ||
115 | int priv_size); | ||
116 | void fcoe_ctlr_device_delete(struct fcoe_ctlr_device *); | ||
117 | struct fcoe_fcf_device *fcoe_fcf_device_add(struct fcoe_ctlr_device *, | ||
118 | struct fcoe_fcf_device *); | ||
119 | void fcoe_fcf_device_delete(struct fcoe_fcf_device *); | ||
120 | |||
121 | int __init fcoe_sysfs_setup(void); | ||
122 | void __exit fcoe_sysfs_teardown(void); | ||
123 | |||
124 | #endif /* FCOE_SYSFS */ | ||
diff --git a/include/scsi/libfcoe.h b/include/scsi/libfcoe.h index cfdb55f0937e..22b07cc99808 100644 --- a/include/scsi/libfcoe.h +++ b/include/scsi/libfcoe.h | |||
@@ -29,6 +29,7 @@ | |||
29 | #include <linux/random.h> | 29 | #include <linux/random.h> |
30 | #include <scsi/fc/fc_fcoe.h> | 30 | #include <scsi/fc/fc_fcoe.h> |
31 | #include <scsi/libfc.h> | 31 | #include <scsi/libfc.h> |
32 | #include <scsi/fcoe_sysfs.h> | ||
32 | 33 | ||
33 | #define FCOE_MAX_CMD_LEN 16 /* Supported CDB length */ | 34 | #define FCOE_MAX_CMD_LEN 16 /* Supported CDB length */ |
34 | 35 | ||
@@ -159,8 +160,24 @@ struct fcoe_ctlr { | |||
159 | }; | 160 | }; |
160 | 161 | ||
161 | /** | 162 | /** |
163 | * fcoe_ctlr_priv() - Return the private data from a fcoe_ctlr | ||
164 | * @cltr: The fcoe_ctlr whose private data will be returned | ||
165 | */ | ||
166 | static inline void *fcoe_ctlr_priv(const struct fcoe_ctlr *ctlr) | ||
167 | { | ||
168 | return (void *)(ctlr + 1); | ||
169 | } | ||
170 | |||
171 | #define fcoe_ctlr_to_ctlr_dev(x) \ | ||
172 | (struct fcoe_ctlr_device *)(((struct fcoe_ctlr_device *)(x)) - 1) | ||
173 | |||
174 | /** | ||
162 | * struct fcoe_fcf - Fibre-Channel Forwarder | 175 | * struct fcoe_fcf - Fibre-Channel Forwarder |
163 | * @list: list linkage | 176 | * @list: list linkage |
177 | * @event_work: Work for FC Transport actions queue | ||
178 | * @event: The event to be processed | ||
179 | * @fip: The controller that the FCF was discovered on | ||
180 | * @fcf_dev: The associated fcoe_fcf_device instance | ||
164 | * @time: system time (jiffies) when an advertisement was last received | 181 | * @time: system time (jiffies) when an advertisement was last received |
165 | * @switch_name: WWN of switch from advertisement | 182 | * @switch_name: WWN of switch from advertisement |
166 | * @fabric_name: WWN of fabric from advertisement | 183 | * @fabric_name: WWN of fabric from advertisement |
@@ -182,6 +199,9 @@ struct fcoe_ctlr { | |||
182 | */ | 199 | */ |
183 | struct fcoe_fcf { | 200 | struct fcoe_fcf { |
184 | struct list_head list; | 201 | struct list_head list; |
202 | struct work_struct event_work; | ||
203 | struct fcoe_ctlr *fip; | ||
204 | struct fcoe_fcf_device *fcf_dev; | ||
185 | unsigned long time; | 205 | unsigned long time; |
186 | 206 | ||
187 | u64 switch_name; | 207 | u64 switch_name; |
@@ -198,6 +218,9 @@ struct fcoe_fcf { | |||
198 | u8 fd_flags:1; | 218 | u8 fd_flags:1; |
199 | }; | 219 | }; |
200 | 220 | ||
221 | #define fcoe_fcf_to_fcf_dev(x) \ | ||
222 | ((x)->fcf_dev) | ||
223 | |||
201 | /** | 224 | /** |
202 | * struct fcoe_rport - VN2VN remote port | 225 | * struct fcoe_rport - VN2VN remote port |
203 | * @time: time of create or last beacon packet received from node | 226 | * @time: time of create or last beacon packet received from node |
@@ -333,6 +356,10 @@ void fcoe_queue_timer(ulong lport); | |||
333 | int fcoe_get_paged_crc_eof(struct sk_buff *skb, int tlen, | 356 | int fcoe_get_paged_crc_eof(struct sk_buff *skb, int tlen, |
334 | struct fcoe_percpu_s *fps); | 357 | struct fcoe_percpu_s *fps); |
335 | 358 | ||
359 | /* FCoE Sysfs helpers */ | ||
360 | void fcoe_fcf_get_selected(struct fcoe_fcf_device *); | ||
361 | void fcoe_ctlr_get_fip_mode(struct fcoe_ctlr_device *); | ||
362 | |||
336 | /** | 363 | /** |
337 | * struct netdev_list | 364 | * struct netdev_list |
338 | * A mapping from netdevice to fcoe_transport | 365 | * A mapping from netdevice to fcoe_transport |
diff --git a/include/trace/events/jbd.h b/include/trace/events/jbd.h index aff64d82d713..da6f2591c25e 100644 --- a/include/trace/events/jbd.h +++ b/include/trace/events/jbd.h | |||
@@ -36,19 +36,17 @@ DECLARE_EVENT_CLASS(jbd_commit, | |||
36 | 36 | ||
37 | TP_STRUCT__entry( | 37 | TP_STRUCT__entry( |
38 | __field( dev_t, dev ) | 38 | __field( dev_t, dev ) |
39 | __field( char, sync_commit ) | ||
40 | __field( int, transaction ) | 39 | __field( int, transaction ) |
41 | ), | 40 | ), |
42 | 41 | ||
43 | TP_fast_assign( | 42 | TP_fast_assign( |
44 | __entry->dev = journal->j_fs_dev->bd_dev; | 43 | __entry->dev = journal->j_fs_dev->bd_dev; |
45 | __entry->sync_commit = commit_transaction->t_synchronous_commit; | ||
46 | __entry->transaction = commit_transaction->t_tid; | 44 | __entry->transaction = commit_transaction->t_tid; |
47 | ), | 45 | ), |
48 | 46 | ||
49 | TP_printk("dev %d,%d transaction %d sync %d", | 47 | TP_printk("dev %d,%d transaction %d", |
50 | MAJOR(__entry->dev), MINOR(__entry->dev), | 48 | MAJOR(__entry->dev), MINOR(__entry->dev), |
51 | __entry->transaction, __entry->sync_commit) | 49 | __entry->transaction) |
52 | ); | 50 | ); |
53 | 51 | ||
54 | DEFINE_EVENT(jbd_commit, jbd_start_commit, | 52 | DEFINE_EVENT(jbd_commit, jbd_start_commit, |
@@ -87,19 +85,17 @@ TRACE_EVENT(jbd_drop_transaction, | |||
87 | 85 | ||
88 | TP_STRUCT__entry( | 86 | TP_STRUCT__entry( |
89 | __field( dev_t, dev ) | 87 | __field( dev_t, dev ) |
90 | __field( char, sync_commit ) | ||
91 | __field( int, transaction ) | 88 | __field( int, transaction ) |
92 | ), | 89 | ), |
93 | 90 | ||
94 | TP_fast_assign( | 91 | TP_fast_assign( |
95 | __entry->dev = journal->j_fs_dev->bd_dev; | 92 | __entry->dev = journal->j_fs_dev->bd_dev; |
96 | __entry->sync_commit = commit_transaction->t_synchronous_commit; | ||
97 | __entry->transaction = commit_transaction->t_tid; | 93 | __entry->transaction = commit_transaction->t_tid; |
98 | ), | 94 | ), |
99 | 95 | ||
100 | TP_printk("dev %d,%d transaction %d sync %d", | 96 | TP_printk("dev %d,%d transaction %d", |
101 | MAJOR(__entry->dev), MINOR(__entry->dev), | 97 | MAJOR(__entry->dev), MINOR(__entry->dev), |
102 | __entry->transaction, __entry->sync_commit) | 98 | __entry->transaction) |
103 | ); | 99 | ); |
104 | 100 | ||
105 | TRACE_EVENT(jbd_end_commit, | 101 | TRACE_EVENT(jbd_end_commit, |
@@ -109,21 +105,19 @@ TRACE_EVENT(jbd_end_commit, | |||
109 | 105 | ||
110 | TP_STRUCT__entry( | 106 | TP_STRUCT__entry( |
111 | __field( dev_t, dev ) | 107 | __field( dev_t, dev ) |
112 | __field( char, sync_commit ) | ||
113 | __field( int, transaction ) | 108 | __field( int, transaction ) |
114 | __field( int, head ) | 109 | __field( int, head ) |
115 | ), | 110 | ), |
116 | 111 | ||
117 | TP_fast_assign( | 112 | TP_fast_assign( |
118 | __entry->dev = journal->j_fs_dev->bd_dev; | 113 | __entry->dev = journal->j_fs_dev->bd_dev; |
119 | __entry->sync_commit = commit_transaction->t_synchronous_commit; | ||
120 | __entry->transaction = commit_transaction->t_tid; | 114 | __entry->transaction = commit_transaction->t_tid; |
121 | __entry->head = journal->j_tail_sequence; | 115 | __entry->head = journal->j_tail_sequence; |
122 | ), | 116 | ), |
123 | 117 | ||
124 | TP_printk("dev %d,%d transaction %d sync %d head %d", | 118 | TP_printk("dev %d,%d transaction %d head %d", |
125 | MAJOR(__entry->dev), MINOR(__entry->dev), | 119 | MAJOR(__entry->dev), MINOR(__entry->dev), |
126 | __entry->transaction, __entry->sync_commit, __entry->head) | 120 | __entry->transaction, __entry->head) |
127 | ); | 121 | ); |
128 | 122 | ||
129 | TRACE_EVENT(jbd_do_submit_data, | 123 | TRACE_EVENT(jbd_do_submit_data, |
@@ -133,19 +127,17 @@ TRACE_EVENT(jbd_do_submit_data, | |||
133 | 127 | ||
134 | TP_STRUCT__entry( | 128 | TP_STRUCT__entry( |
135 | __field( dev_t, dev ) | 129 | __field( dev_t, dev ) |
136 | __field( char, sync_commit ) | ||
137 | __field( int, transaction ) | 130 | __field( int, transaction ) |
138 | ), | 131 | ), |
139 | 132 | ||
140 | TP_fast_assign( | 133 | TP_fast_assign( |
141 | __entry->dev = journal->j_fs_dev->bd_dev; | 134 | __entry->dev = journal->j_fs_dev->bd_dev; |
142 | __entry->sync_commit = commit_transaction->t_synchronous_commit; | ||
143 | __entry->transaction = commit_transaction->t_tid; | 135 | __entry->transaction = commit_transaction->t_tid; |
144 | ), | 136 | ), |
145 | 137 | ||
146 | TP_printk("dev %d,%d transaction %d sync %d", | 138 | TP_printk("dev %d,%d transaction %d", |
147 | MAJOR(__entry->dev), MINOR(__entry->dev), | 139 | MAJOR(__entry->dev), MINOR(__entry->dev), |
148 | __entry->transaction, __entry->sync_commit) | 140 | __entry->transaction) |
149 | ); | 141 | ); |
150 | 142 | ||
151 | TRACE_EVENT(jbd_cleanup_journal_tail, | 143 | TRACE_EVENT(jbd_cleanup_journal_tail, |
@@ -177,24 +169,23 @@ TRACE_EVENT(jbd_cleanup_journal_tail, | |||
177 | __entry->block_nr, __entry->freed) | 169 | __entry->block_nr, __entry->freed) |
178 | ); | 170 | ); |
179 | 171 | ||
180 | TRACE_EVENT(jbd_update_superblock_end, | 172 | TRACE_EVENT(journal_write_superblock, |
181 | TP_PROTO(journal_t *journal, int wait), | 173 | TP_PROTO(journal_t *journal, int write_op), |
182 | 174 | ||
183 | TP_ARGS(journal, wait), | 175 | TP_ARGS(journal, write_op), |
184 | 176 | ||
185 | TP_STRUCT__entry( | 177 | TP_STRUCT__entry( |
186 | __field( dev_t, dev ) | 178 | __field( dev_t, dev ) |
187 | __field( int, wait ) | 179 | __field( int, write_op ) |
188 | ), | 180 | ), |
189 | 181 | ||
190 | TP_fast_assign( | 182 | TP_fast_assign( |
191 | __entry->dev = journal->j_fs_dev->bd_dev; | 183 | __entry->dev = journal->j_fs_dev->bd_dev; |
192 | __entry->wait = wait; | 184 | __entry->write_op = write_op; |
193 | ), | 185 | ), |
194 | 186 | ||
195 | TP_printk("dev %d,%d wait %d", | 187 | TP_printk("dev %d,%d write_op %x", MAJOR(__entry->dev), |
196 | MAJOR(__entry->dev), MINOR(__entry->dev), | 188 | MINOR(__entry->dev), __entry->write_op) |
197 | __entry->wait) | ||
198 | ); | 189 | ); |
199 | 190 | ||
200 | #endif /* _TRACE_JBD_H */ | 191 | #endif /* _TRACE_JBD_H */ |
diff --git a/include/trace/events/vmscan.h b/include/trace/events/vmscan.h index f64560e204bc..bab3b87e4064 100644 --- a/include/trace/events/vmscan.h +++ b/include/trace/events/vmscan.h | |||
@@ -13,7 +13,7 @@ | |||
13 | #define RECLAIM_WB_ANON 0x0001u | 13 | #define RECLAIM_WB_ANON 0x0001u |
14 | #define RECLAIM_WB_FILE 0x0002u | 14 | #define RECLAIM_WB_FILE 0x0002u |
15 | #define RECLAIM_WB_MIXED 0x0010u | 15 | #define RECLAIM_WB_MIXED 0x0010u |
16 | #define RECLAIM_WB_SYNC 0x0004u | 16 | #define RECLAIM_WB_SYNC 0x0004u /* Unused, all reclaim async */ |
17 | #define RECLAIM_WB_ASYNC 0x0008u | 17 | #define RECLAIM_WB_ASYNC 0x0008u |
18 | 18 | ||
19 | #define show_reclaim_flags(flags) \ | 19 | #define show_reclaim_flags(flags) \ |
@@ -25,15 +25,15 @@ | |||
25 | {RECLAIM_WB_ASYNC, "RECLAIM_WB_ASYNC"} \ | 25 | {RECLAIM_WB_ASYNC, "RECLAIM_WB_ASYNC"} \ |
26 | ) : "RECLAIM_WB_NONE" | 26 | ) : "RECLAIM_WB_NONE" |
27 | 27 | ||
28 | #define trace_reclaim_flags(page, sync) ( \ | 28 | #define trace_reclaim_flags(page) ( \ |
29 | (page_is_file_cache(page) ? RECLAIM_WB_FILE : RECLAIM_WB_ANON) | \ | 29 | (page_is_file_cache(page) ? RECLAIM_WB_FILE : RECLAIM_WB_ANON) | \ |
30 | (sync & RECLAIM_MODE_SYNC ? RECLAIM_WB_SYNC : RECLAIM_WB_ASYNC) \ | 30 | (RECLAIM_WB_ASYNC) \ |
31 | ) | 31 | ) |
32 | 32 | ||
33 | #define trace_shrink_flags(file, sync) ( \ | 33 | #define trace_shrink_flags(file) \ |
34 | (sync & RECLAIM_MODE_SYNC ? RECLAIM_WB_MIXED : \ | 34 | ( \ |
35 | (file ? RECLAIM_WB_FILE : RECLAIM_WB_ANON)) | \ | 35 | (file ? RECLAIM_WB_FILE : RECLAIM_WB_ANON) | \ |
36 | (sync & RECLAIM_MODE_SYNC ? RECLAIM_WB_SYNC : RECLAIM_WB_ASYNC) \ | 36 | (RECLAIM_WB_ASYNC) \ |
37 | ) | 37 | ) |
38 | 38 | ||
39 | TRACE_EVENT(mm_vmscan_kswapd_sleep, | 39 | TRACE_EVENT(mm_vmscan_kswapd_sleep, |
@@ -263,22 +263,16 @@ DECLARE_EVENT_CLASS(mm_vmscan_lru_isolate_template, | |||
263 | unsigned long nr_requested, | 263 | unsigned long nr_requested, |
264 | unsigned long nr_scanned, | 264 | unsigned long nr_scanned, |
265 | unsigned long nr_taken, | 265 | unsigned long nr_taken, |
266 | unsigned long nr_lumpy_taken, | ||
267 | unsigned long nr_lumpy_dirty, | ||
268 | unsigned long nr_lumpy_failed, | ||
269 | isolate_mode_t isolate_mode, | 266 | isolate_mode_t isolate_mode, |
270 | int file), | 267 | int file), |
271 | 268 | ||
272 | TP_ARGS(order, nr_requested, nr_scanned, nr_taken, nr_lumpy_taken, nr_lumpy_dirty, nr_lumpy_failed, isolate_mode, file), | 269 | TP_ARGS(order, nr_requested, nr_scanned, nr_taken, isolate_mode, file), |
273 | 270 | ||
274 | TP_STRUCT__entry( | 271 | TP_STRUCT__entry( |
275 | __field(int, order) | 272 | __field(int, order) |
276 | __field(unsigned long, nr_requested) | 273 | __field(unsigned long, nr_requested) |
277 | __field(unsigned long, nr_scanned) | 274 | __field(unsigned long, nr_scanned) |
278 | __field(unsigned long, nr_taken) | 275 | __field(unsigned long, nr_taken) |
279 | __field(unsigned long, nr_lumpy_taken) | ||
280 | __field(unsigned long, nr_lumpy_dirty) | ||
281 | __field(unsigned long, nr_lumpy_failed) | ||
282 | __field(isolate_mode_t, isolate_mode) | 276 | __field(isolate_mode_t, isolate_mode) |
283 | __field(int, file) | 277 | __field(int, file) |
284 | ), | 278 | ), |
@@ -288,22 +282,16 @@ DECLARE_EVENT_CLASS(mm_vmscan_lru_isolate_template, | |||
288 | __entry->nr_requested = nr_requested; | 282 | __entry->nr_requested = nr_requested; |
289 | __entry->nr_scanned = nr_scanned; | 283 | __entry->nr_scanned = nr_scanned; |
290 | __entry->nr_taken = nr_taken; | 284 | __entry->nr_taken = nr_taken; |
291 | __entry->nr_lumpy_taken = nr_lumpy_taken; | ||
292 | __entry->nr_lumpy_dirty = nr_lumpy_dirty; | ||
293 | __entry->nr_lumpy_failed = nr_lumpy_failed; | ||
294 | __entry->isolate_mode = isolate_mode; | 285 | __entry->isolate_mode = isolate_mode; |
295 | __entry->file = file; | 286 | __entry->file = file; |
296 | ), | 287 | ), |
297 | 288 | ||
298 | TP_printk("isolate_mode=%d order=%d nr_requested=%lu nr_scanned=%lu nr_taken=%lu contig_taken=%lu contig_dirty=%lu contig_failed=%lu file=%d", | 289 | TP_printk("isolate_mode=%d order=%d nr_requested=%lu nr_scanned=%lu nr_taken=%lu file=%d", |
299 | __entry->isolate_mode, | 290 | __entry->isolate_mode, |
300 | __entry->order, | 291 | __entry->order, |
301 | __entry->nr_requested, | 292 | __entry->nr_requested, |
302 | __entry->nr_scanned, | 293 | __entry->nr_scanned, |
303 | __entry->nr_taken, | 294 | __entry->nr_taken, |
304 | __entry->nr_lumpy_taken, | ||
305 | __entry->nr_lumpy_dirty, | ||
306 | __entry->nr_lumpy_failed, | ||
307 | __entry->file) | 295 | __entry->file) |
308 | ); | 296 | ); |
309 | 297 | ||
@@ -313,13 +301,10 @@ DEFINE_EVENT(mm_vmscan_lru_isolate_template, mm_vmscan_lru_isolate, | |||
313 | unsigned long nr_requested, | 301 | unsigned long nr_requested, |
314 | unsigned long nr_scanned, | 302 | unsigned long nr_scanned, |
315 | unsigned long nr_taken, | 303 | unsigned long nr_taken, |
316 | unsigned long nr_lumpy_taken, | ||
317 | unsigned long nr_lumpy_dirty, | ||
318 | unsigned long nr_lumpy_failed, | ||
319 | isolate_mode_t isolate_mode, | 304 | isolate_mode_t isolate_mode, |
320 | int file), | 305 | int file), |
321 | 306 | ||
322 | TP_ARGS(order, nr_requested, nr_scanned, nr_taken, nr_lumpy_taken, nr_lumpy_dirty, nr_lumpy_failed, isolate_mode, file) | 307 | TP_ARGS(order, nr_requested, nr_scanned, nr_taken, isolate_mode, file) |
323 | 308 | ||
324 | ); | 309 | ); |
325 | 310 | ||
@@ -329,13 +314,10 @@ DEFINE_EVENT(mm_vmscan_lru_isolate_template, mm_vmscan_memcg_isolate, | |||
329 | unsigned long nr_requested, | 314 | unsigned long nr_requested, |
330 | unsigned long nr_scanned, | 315 | unsigned long nr_scanned, |
331 | unsigned long nr_taken, | 316 | unsigned long nr_taken, |
332 | unsigned long nr_lumpy_taken, | ||
333 | unsigned long nr_lumpy_dirty, | ||
334 | unsigned long nr_lumpy_failed, | ||
335 | isolate_mode_t isolate_mode, | 317 | isolate_mode_t isolate_mode, |
336 | int file), | 318 | int file), |
337 | 319 | ||
338 | TP_ARGS(order, nr_requested, nr_scanned, nr_taken, nr_lumpy_taken, nr_lumpy_dirty, nr_lumpy_failed, isolate_mode, file) | 320 | TP_ARGS(order, nr_requested, nr_scanned, nr_taken, isolate_mode, file) |
339 | 321 | ||
340 | ); | 322 | ); |
341 | 323 | ||
@@ -395,88 +377,6 @@ TRACE_EVENT(mm_vmscan_lru_shrink_inactive, | |||
395 | show_reclaim_flags(__entry->reclaim_flags)) | 377 | show_reclaim_flags(__entry->reclaim_flags)) |
396 | ); | 378 | ); |
397 | 379 | ||
398 | TRACE_EVENT(replace_swap_token, | ||
399 | TP_PROTO(struct mm_struct *old_mm, | ||
400 | struct mm_struct *new_mm), | ||
401 | |||
402 | TP_ARGS(old_mm, new_mm), | ||
403 | |||
404 | TP_STRUCT__entry( | ||
405 | __field(struct mm_struct*, old_mm) | ||
406 | __field(unsigned int, old_prio) | ||
407 | __field(struct mm_struct*, new_mm) | ||
408 | __field(unsigned int, new_prio) | ||
409 | ), | ||
410 | |||
411 | TP_fast_assign( | ||
412 | __entry->old_mm = old_mm; | ||
413 | __entry->old_prio = old_mm ? old_mm->token_priority : 0; | ||
414 | __entry->new_mm = new_mm; | ||
415 | __entry->new_prio = new_mm->token_priority; | ||
416 | ), | ||
417 | |||
418 | TP_printk("old_token_mm=%p old_prio=%u new_token_mm=%p new_prio=%u", | ||
419 | __entry->old_mm, __entry->old_prio, | ||
420 | __entry->new_mm, __entry->new_prio) | ||
421 | ); | ||
422 | |||
423 | DECLARE_EVENT_CLASS(put_swap_token_template, | ||
424 | TP_PROTO(struct mm_struct *swap_token_mm), | ||
425 | |||
426 | TP_ARGS(swap_token_mm), | ||
427 | |||
428 | TP_STRUCT__entry( | ||
429 | __field(struct mm_struct*, swap_token_mm) | ||
430 | ), | ||
431 | |||
432 | TP_fast_assign( | ||
433 | __entry->swap_token_mm = swap_token_mm; | ||
434 | ), | ||
435 | |||
436 | TP_printk("token_mm=%p", __entry->swap_token_mm) | ||
437 | ); | ||
438 | |||
439 | DEFINE_EVENT(put_swap_token_template, put_swap_token, | ||
440 | TP_PROTO(struct mm_struct *swap_token_mm), | ||
441 | TP_ARGS(swap_token_mm) | ||
442 | ); | ||
443 | |||
444 | DEFINE_EVENT_CONDITION(put_swap_token_template, disable_swap_token, | ||
445 | TP_PROTO(struct mm_struct *swap_token_mm), | ||
446 | TP_ARGS(swap_token_mm), | ||
447 | TP_CONDITION(swap_token_mm != NULL) | ||
448 | ); | ||
449 | |||
450 | TRACE_EVENT_CONDITION(update_swap_token_priority, | ||
451 | TP_PROTO(struct mm_struct *mm, | ||
452 | unsigned int old_prio, | ||
453 | struct mm_struct *swap_token_mm), | ||
454 | |||
455 | TP_ARGS(mm, old_prio, swap_token_mm), | ||
456 | |||
457 | TP_CONDITION(mm->token_priority != old_prio), | ||
458 | |||
459 | TP_STRUCT__entry( | ||
460 | __field(struct mm_struct*, mm) | ||
461 | __field(unsigned int, old_prio) | ||
462 | __field(unsigned int, new_prio) | ||
463 | __field(struct mm_struct*, swap_token_mm) | ||
464 | __field(unsigned int, swap_token_prio) | ||
465 | ), | ||
466 | |||
467 | TP_fast_assign( | ||
468 | __entry->mm = mm; | ||
469 | __entry->old_prio = old_prio; | ||
470 | __entry->new_prio = mm->token_priority; | ||
471 | __entry->swap_token_mm = swap_token_mm; | ||
472 | __entry->swap_token_prio = swap_token_mm ? swap_token_mm->token_priority : 0; | ||
473 | ), | ||
474 | |||
475 | TP_printk("mm=%p old_prio=%u new_prio=%u swap_token_mm=%p token_prio=%u", | ||
476 | __entry->mm, __entry->old_prio, __entry->new_prio, | ||
477 | __entry->swap_token_mm, __entry->swap_token_prio) | ||
478 | ); | ||
479 | |||
480 | #endif /* _TRACE_VMSCAN_H */ | 380 | #endif /* _TRACE_VMSCAN_H */ |
481 | 381 | ||
482 | /* This part must be outside protection */ | 382 | /* This part must be outside protection */ |
diff --git a/include/trace/events/writeback.h b/include/trace/events/writeback.h index 7b81887b023f..b453d92c2253 100644 --- a/include/trace/events/writeback.h +++ b/include/trace/events/writeback.h | |||
@@ -372,6 +372,35 @@ TRACE_EVENT(balance_dirty_pages, | |||
372 | ) | 372 | ) |
373 | ); | 373 | ); |
374 | 374 | ||
375 | TRACE_EVENT(writeback_sb_inodes_requeue, | ||
376 | |||
377 | TP_PROTO(struct inode *inode), | ||
378 | TP_ARGS(inode), | ||
379 | |||
380 | TP_STRUCT__entry( | ||
381 | __array(char, name, 32) | ||
382 | __field(unsigned long, ino) | ||
383 | __field(unsigned long, state) | ||
384 | __field(unsigned long, dirtied_when) | ||
385 | ), | ||
386 | |||
387 | TP_fast_assign( | ||
388 | strncpy(__entry->name, | ||
389 | dev_name(inode_to_bdi(inode)->dev), 32); | ||
390 | __entry->ino = inode->i_ino; | ||
391 | __entry->state = inode->i_state; | ||
392 | __entry->dirtied_when = inode->dirtied_when; | ||
393 | ), | ||
394 | |||
395 | TP_printk("bdi %s: ino=%lu state=%s dirtied_when=%lu age=%lu", | ||
396 | __entry->name, | ||
397 | __entry->ino, | ||
398 | show_inode_state(__entry->state), | ||
399 | __entry->dirtied_when, | ||
400 | (jiffies - __entry->dirtied_when) / HZ | ||
401 | ) | ||
402 | ); | ||
403 | |||
375 | DECLARE_EVENT_CLASS(writeback_congest_waited_template, | 404 | DECLARE_EVENT_CLASS(writeback_congest_waited_template, |
376 | 405 | ||
377 | TP_PROTO(unsigned int usec_timeout, unsigned int usec_delayed), | 406 | TP_PROTO(unsigned int usec_timeout, unsigned int usec_delayed), |
@@ -450,13 +479,6 @@ DECLARE_EVENT_CLASS(writeback_single_inode_template, | |||
450 | ) | 479 | ) |
451 | ); | 480 | ); |
452 | 481 | ||
453 | DEFINE_EVENT(writeback_single_inode_template, writeback_single_inode_requeue, | ||
454 | TP_PROTO(struct inode *inode, | ||
455 | struct writeback_control *wbc, | ||
456 | unsigned long nr_to_write), | ||
457 | TP_ARGS(inode, wbc, nr_to_write) | ||
458 | ); | ||
459 | |||
460 | DEFINE_EVENT(writeback_single_inode_template, writeback_single_inode, | 482 | DEFINE_EVENT(writeback_single_inode_template, writeback_single_inode, |
461 | TP_PROTO(struct inode *inode, | 483 | TP_PROTO(struct inode *inode, |
462 | struct writeback_control *wbc, | 484 | struct writeback_control *wbc, |
diff --git a/include/video/auo_k190xfb.h b/include/video/auo_k190xfb.h new file mode 100644 index 000000000000..609efe8c686e --- /dev/null +++ b/include/video/auo_k190xfb.h | |||
@@ -0,0 +1,106 @@ | |||
1 | /* | ||
2 | * Definitions for AUO-K190X framebuffer drivers | ||
3 | * | ||
4 | * Copyright (C) 2012 Heiko Stuebner <heiko@sntech.de> | ||
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_VIDEO_AUO_K190XFB_H_ | ||
12 | #define _LINUX_VIDEO_AUO_K190XFB_H_ | ||
13 | |||
14 | /* Controller standby command needs a param */ | ||
15 | #define AUOK190X_QUIRK_STANDBYPARAM (1 << 0) | ||
16 | |||
17 | /* Controller standby is completely broken */ | ||
18 | #define AUOK190X_QUIRK_STANDBYBROKEN (1 << 1) | ||
19 | |||
20 | /* | ||
21 | * Resolutions for the displays | ||
22 | */ | ||
23 | #define AUOK190X_RESOLUTION_800_600 0 | ||
24 | #define AUOK190X_RESOLUTION_1024_768 1 | ||
25 | |||
26 | /* | ||
27 | * struct used by auok190x. board specific stuff comes from *board | ||
28 | */ | ||
29 | struct auok190xfb_par { | ||
30 | struct fb_info *info; | ||
31 | struct auok190x_board *board; | ||
32 | |||
33 | struct regulator *regulator; | ||
34 | |||
35 | struct mutex io_lock; | ||
36 | struct delayed_work work; | ||
37 | wait_queue_head_t waitq; | ||
38 | int resolution; | ||
39 | int rotation; | ||
40 | int consecutive_threshold; | ||
41 | int update_cnt; | ||
42 | |||
43 | /* panel and controller informations */ | ||
44 | int epd_type; | ||
45 | int panel_size_int; | ||
46 | int panel_size_float; | ||
47 | int panel_model; | ||
48 | int tcon_version; | ||
49 | int lut_version; | ||
50 | |||
51 | /* individual controller callbacks */ | ||
52 | void (*update_partial)(struct auok190xfb_par *par, u16 y1, u16 y2); | ||
53 | void (*update_all)(struct auok190xfb_par *par); | ||
54 | bool (*need_refresh)(struct auok190xfb_par *par); | ||
55 | void (*init)(struct auok190xfb_par *par); | ||
56 | void (*recover)(struct auok190xfb_par *par); | ||
57 | |||
58 | int update_mode; /* mode to use for updates */ | ||
59 | int last_mode; /* update mode last used */ | ||
60 | int flash; | ||
61 | |||
62 | /* power management */ | ||
63 | int autosuspend_delay; | ||
64 | bool standby; | ||
65 | bool manual_standby; | ||
66 | }; | ||
67 | |||
68 | /** | ||
69 | * Board specific platform-data | ||
70 | * @init: initialize the controller interface | ||
71 | * @cleanup: cleanup the controller interface | ||
72 | * @wait_for_rdy: wait until the controller is not busy anymore | ||
73 | * @set_ctl: change an interface control | ||
74 | * @set_hdb: write a value to the data register | ||
75 | * @get_hdb: read a value from the data register | ||
76 | * @setup_irq: method to setup the irq handling on the busy gpio | ||
77 | * @gpio_nsleep: sleep gpio | ||
78 | * @gpio_nrst: reset gpio | ||
79 | * @gpio_nbusy: busy gpio | ||
80 | * @resolution: one of the AUOK190X_RESOLUTION constants | ||
81 | * @rotation: rotation of the framebuffer | ||
82 | * @quirks: controller quirks to honor | ||
83 | * @fps: frames per second for defio | ||
84 | */ | ||
85 | struct auok190x_board { | ||
86 | int (*init)(struct auok190xfb_par *); | ||
87 | void (*cleanup)(struct auok190xfb_par *); | ||
88 | int (*wait_for_rdy)(struct auok190xfb_par *); | ||
89 | |||
90 | void (*set_ctl)(struct auok190xfb_par *, unsigned char, u8); | ||
91 | void (*set_hdb)(struct auok190xfb_par *, u16); | ||
92 | u16 (*get_hdb)(struct auok190xfb_par *); | ||
93 | |||
94 | int (*setup_irq)(struct fb_info *); | ||
95 | |||
96 | int gpio_nsleep; | ||
97 | int gpio_nrst; | ||
98 | int gpio_nbusy; | ||
99 | |||
100 | int resolution; | ||
101 | int rotation; | ||
102 | int quirks; | ||
103 | int fps; | ||
104 | }; | ||
105 | |||
106 | #endif | ||
diff --git a/include/video/exynos_dp.h b/include/video/exynos_dp.h index 8847a9d6dd42..bd8cabd344db 100644 --- a/include/video/exynos_dp.h +++ b/include/video/exynos_dp.h | |||
@@ -14,7 +14,7 @@ | |||
14 | 14 | ||
15 | #define DP_TIMEOUT_LOOP_COUNT 100 | 15 | #define DP_TIMEOUT_LOOP_COUNT 100 |
16 | #define MAX_CR_LOOP 5 | 16 | #define MAX_CR_LOOP 5 |
17 | #define MAX_EQ_LOOP 4 | 17 | #define MAX_EQ_LOOP 5 |
18 | 18 | ||
19 | enum link_rate_type { | 19 | enum link_rate_type { |
20 | LINK_RATE_1_62GBPS = 0x06, | 20 | LINK_RATE_1_62GBPS = 0x06, |
diff --git a/include/video/exynos_mipi_dsim.h b/include/video/exynos_mipi_dsim.h index 772c770535f1..83ce5e667d47 100644 --- a/include/video/exynos_mipi_dsim.h +++ b/include/video/exynos_mipi_dsim.h | |||
@@ -315,6 +315,7 @@ struct mipi_dsim_lcd_device { | |||
315 | int id; | 315 | int id; |
316 | int bus_id; | 316 | int bus_id; |
317 | int irq; | 317 | int irq; |
318 | int panel_reverse; | ||
318 | 319 | ||
319 | struct mipi_dsim_device *master; | 320 | struct mipi_dsim_device *master; |
320 | void *platform_data; | 321 | void *platform_data; |
diff --git a/include/video/omapdss.h b/include/video/omapdss.h index 1c46a14341dd..c8e59b4a3364 100644 --- a/include/video/omapdss.h +++ b/include/video/omapdss.h | |||
@@ -51,6 +51,8 @@ | |||
51 | 51 | ||
52 | struct omap_dss_device; | 52 | struct omap_dss_device; |
53 | struct omap_overlay_manager; | 53 | struct omap_overlay_manager; |
54 | struct snd_aes_iec958; | ||
55 | struct snd_cea_861_aud_if; | ||
54 | 56 | ||
55 | enum omap_display_type { | 57 | enum omap_display_type { |
56 | OMAP_DISPLAY_TYPE_NONE = 0, | 58 | OMAP_DISPLAY_TYPE_NONE = 0, |
@@ -158,6 +160,13 @@ enum omap_dss_display_state { | |||
158 | OMAP_DSS_DISPLAY_SUSPENDED, | 160 | OMAP_DSS_DISPLAY_SUSPENDED, |
159 | }; | 161 | }; |
160 | 162 | ||
163 | enum omap_dss_audio_state { | ||
164 | OMAP_DSS_AUDIO_DISABLED = 0, | ||
165 | OMAP_DSS_AUDIO_ENABLED, | ||
166 | OMAP_DSS_AUDIO_CONFIGURED, | ||
167 | OMAP_DSS_AUDIO_PLAYING, | ||
168 | }; | ||
169 | |||
161 | /* XXX perhaps this should be removed */ | 170 | /* XXX perhaps this should be removed */ |
162 | enum omap_dss_overlay_managers { | 171 | enum omap_dss_overlay_managers { |
163 | OMAP_DSS_OVL_MGR_LCD, | 172 | OMAP_DSS_OVL_MGR_LCD, |
@@ -166,8 +175,9 @@ enum omap_dss_overlay_managers { | |||
166 | }; | 175 | }; |
167 | 176 | ||
168 | enum omap_dss_rotation_type { | 177 | enum omap_dss_rotation_type { |
169 | OMAP_DSS_ROT_DMA = 0, | 178 | OMAP_DSS_ROT_DMA = 1 << 0, |
170 | OMAP_DSS_ROT_VRFB = 1, | 179 | OMAP_DSS_ROT_VRFB = 1 << 1, |
180 | OMAP_DSS_ROT_TILER = 1 << 2, | ||
171 | }; | 181 | }; |
172 | 182 | ||
173 | /* clockwise rotation angle */ | 183 | /* clockwise rotation angle */ |
@@ -309,6 +319,7 @@ struct omap_dss_board_info { | |||
309 | struct omap_dss_device *default_device; | 319 | struct omap_dss_device *default_device; |
310 | int (*dsi_enable_pads)(int dsi_id, unsigned lane_mask); | 320 | int (*dsi_enable_pads)(int dsi_id, unsigned lane_mask); |
311 | void (*dsi_disable_pads)(int dsi_id, unsigned lane_mask); | 321 | void (*dsi_disable_pads)(int dsi_id, unsigned lane_mask); |
322 | int (*set_min_bus_tput)(struct device *dev, unsigned long r); | ||
312 | }; | 323 | }; |
313 | 324 | ||
314 | /* Init with the board info */ | 325 | /* Init with the board info */ |
@@ -316,11 +327,6 @@ extern int omap_display_init(struct omap_dss_board_info *board_data); | |||
316 | /* HDMI mux init*/ | 327 | /* HDMI mux init*/ |
317 | extern int omap_hdmi_init(enum omap_hdmi_flags flags); | 328 | extern int omap_hdmi_init(enum omap_hdmi_flags flags); |
318 | 329 | ||
319 | struct omap_display_platform_data { | ||
320 | struct omap_dss_board_info *board_data; | ||
321 | /* TODO: Additional members to be added when PM is considered */ | ||
322 | }; | ||
323 | |||
324 | struct omap_video_timings { | 330 | struct omap_video_timings { |
325 | /* Unit: pixels */ | 331 | /* Unit: pixels */ |
326 | u16 x_res; | 332 | u16 x_res; |
@@ -587,6 +593,8 @@ struct omap_dss_device { | |||
587 | 593 | ||
588 | enum omap_dss_display_state state; | 594 | enum omap_dss_display_state state; |
589 | 595 | ||
596 | enum omap_dss_audio_state audio_state; | ||
597 | |||
590 | /* platform specific */ | 598 | /* platform specific */ |
591 | int (*platform_enable)(struct omap_dss_device *dssdev); | 599 | int (*platform_enable)(struct omap_dss_device *dssdev); |
592 | void (*platform_disable)(struct omap_dss_device *dssdev); | 600 | void (*platform_disable)(struct omap_dss_device *dssdev); |
@@ -599,6 +607,11 @@ struct omap_dss_hdmi_data | |||
599 | int hpd_gpio; | 607 | int hpd_gpio; |
600 | }; | 608 | }; |
601 | 609 | ||
610 | struct omap_dss_audio { | ||
611 | struct snd_aes_iec958 *iec; | ||
612 | struct snd_cea_861_aud_if *cea; | ||
613 | }; | ||
614 | |||
602 | struct omap_dss_driver { | 615 | struct omap_dss_driver { |
603 | struct device_driver driver; | 616 | struct device_driver driver; |
604 | 617 | ||
@@ -646,6 +659,24 @@ struct omap_dss_driver { | |||
646 | 659 | ||
647 | int (*read_edid)(struct omap_dss_device *dssdev, u8 *buf, int len); | 660 | int (*read_edid)(struct omap_dss_device *dssdev, u8 *buf, int len); |
648 | bool (*detect)(struct omap_dss_device *dssdev); | 661 | bool (*detect)(struct omap_dss_device *dssdev); |
662 | |||
663 | /* | ||
664 | * For display drivers that support audio. This encompasses | ||
665 | * HDMI and DisplayPort at the moment. | ||
666 | */ | ||
667 | /* | ||
668 | * Note: These functions might sleep. Do not call while | ||
669 | * holding a spinlock/readlock. | ||
670 | */ | ||
671 | int (*audio_enable)(struct omap_dss_device *dssdev); | ||
672 | void (*audio_disable)(struct omap_dss_device *dssdev); | ||
673 | bool (*audio_supported)(struct omap_dss_device *dssdev); | ||
674 | int (*audio_config)(struct omap_dss_device *dssdev, | ||
675 | struct omap_dss_audio *audio); | ||
676 | /* Note: These functions may not sleep */ | ||
677 | int (*audio_start)(struct omap_dss_device *dssdev); | ||
678 | void (*audio_stop)(struct omap_dss_device *dssdev); | ||
679 | |||
649 | }; | 680 | }; |
650 | 681 | ||
651 | int omap_dss_register_driver(struct omap_dss_driver *); | 682 | int omap_dss_register_driver(struct omap_dss_driver *); |
@@ -670,6 +701,8 @@ struct omap_overlay *omap_dss_get_overlay(int num); | |||
670 | void omapdss_default_get_resolution(struct omap_dss_device *dssdev, | 701 | void omapdss_default_get_resolution(struct omap_dss_device *dssdev, |
671 | u16 *xres, u16 *yres); | 702 | u16 *xres, u16 *yres); |
672 | int omapdss_default_get_recommended_bpp(struct omap_dss_device *dssdev); | 703 | int omapdss_default_get_recommended_bpp(struct omap_dss_device *dssdev); |
704 | void omapdss_default_get_timings(struct omap_dss_device *dssdev, | ||
705 | struct omap_video_timings *timings); | ||
673 | 706 | ||
674 | typedef void (*omap_dispc_isr_t) (void *arg, u32 mask); | 707 | typedef void (*omap_dispc_isr_t) (void *arg, u32 mask); |
675 | int omap_dispc_register_isr(omap_dispc_isr_t isr, void *arg, u32 mask); | 708 | int omap_dispc_register_isr(omap_dispc_isr_t isr, void *arg, u32 mask); |
diff --git a/include/video/sh_mobile_hdmi.h b/include/video/sh_mobile_hdmi.h index 728f9de9c258..63d20efa254a 100644 --- a/include/video/sh_mobile_hdmi.h +++ b/include/video/sh_mobile_hdmi.h | |||
@@ -18,9 +18,11 @@ struct clk; | |||
18 | /* | 18 | /* |
19 | * flags format | 19 | * flags format |
20 | * | 20 | * |
21 | * 0x0000000A | 21 | * 0x00000CBA |
22 | * | 22 | * |
23 | * A: Audio source select | 23 | * A: Audio source select |
24 | * B: Int output option | ||
25 | * C: Chip specific option | ||
24 | */ | 26 | */ |
25 | 27 | ||
26 | /* Audio source select */ | 28 | /* Audio source select */ |
@@ -30,6 +32,14 @@ struct clk; | |||
30 | #define HDMI_SND_SRC_DSD (2 << 0) | 32 | #define HDMI_SND_SRC_DSD (2 << 0) |
31 | #define HDMI_SND_SRC_HBR (3 << 0) | 33 | #define HDMI_SND_SRC_HBR (3 << 0) |
32 | 34 | ||
35 | /* Int output option */ | ||
36 | #define HDMI_OUTPUT_PUSH_PULL (1 << 4) /* System control : output mode */ | ||
37 | #define HDMI_OUTPUT_POLARITY_HI (1 << 5) /* System control : output polarity */ | ||
38 | |||
39 | /* Chip specific option */ | ||
40 | #define HDMI_32BIT_REG (1 << 8) | ||
41 | #define HDMI_HAS_HTOP1 (1 << 9) | ||
42 | |||
33 | struct sh_mobile_hdmi_info { | 43 | struct sh_mobile_hdmi_info { |
34 | unsigned int flags; | 44 | unsigned int flags; |
35 | long (*clk_optimize_parent)(unsigned long target, unsigned long *best_freq, | 45 | long (*clk_optimize_parent)(unsigned long target, unsigned long *best_freq, |
diff --git a/include/xen/acpi.h b/include/xen/acpi.h new file mode 100644 index 000000000000..48a9c0171b65 --- /dev/null +++ b/include/xen/acpi.h | |||
@@ -0,0 +1,58 @@ | |||
1 | /****************************************************************************** | ||
2 | * acpi.h | ||
3 | * acpi file for domain 0 kernel | ||
4 | * | ||
5 | * Copyright (c) 2011 Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> | ||
6 | * Copyright (c) 2011 Yu Ke <ke.yu@intel.com> | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or | ||
9 | * modify it under the terms of the GNU General Public License version 2 | ||
10 | * as published by the Free Software Foundation; or, when distributed | ||
11 | * separately from the Linux kernel or incorporated into other | ||
12 | * software packages, subject to the following license: | ||
13 | * | ||
14 | * Permission is hereby granted, free of charge, to any person obtaining a copy | ||
15 | * of this source file (the "Software"), to deal in the Software without | ||
16 | * restriction, including without limitation the rights to use, copy, modify, | ||
17 | * merge, publish, distribute, sublicense, and/or sell copies of the Software, | ||
18 | * and to permit persons to whom the Software is furnished to do so, subject to | ||
19 | * the following conditions: | ||
20 | * | ||
21 | * The above copyright notice and this permission notice shall be included in | ||
22 | * all copies or substantial portions of the Software. | ||
23 | * | ||
24 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
25 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
26 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
27 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
28 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | ||
29 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS | ||
30 | * IN THE SOFTWARE. | ||
31 | */ | ||
32 | |||
33 | #ifndef _XEN_ACPI_H | ||
34 | #define _XEN_ACPI_H | ||
35 | |||
36 | #include <linux/types.h> | ||
37 | |||
38 | #ifdef CONFIG_XEN_DOM0 | ||
39 | #include <asm/xen/hypervisor.h> | ||
40 | #include <xen/xen.h> | ||
41 | #include <linux/acpi.h> | ||
42 | |||
43 | int xen_acpi_notify_hypervisor_state(u8 sleep_state, | ||
44 | u32 pm1a_cnt, u32 pm1b_cnd); | ||
45 | |||
46 | static inline void xen_acpi_sleep_register(void) | ||
47 | { | ||
48 | if (xen_initial_domain()) | ||
49 | acpi_os_set_prepare_sleep( | ||
50 | &xen_acpi_notify_hypervisor_state); | ||
51 | } | ||
52 | #else | ||
53 | static inline void xen_acpi_sleep_register(void) | ||
54 | { | ||
55 | } | ||
56 | #endif | ||
57 | |||
58 | #endif /* _XEN_ACPI_H */ | ||
diff --git a/include/xen/events.h b/include/xen/events.h index 0f773708e02c..04399b28e821 100644 --- a/include/xen/events.h +++ b/include/xen/events.h | |||
@@ -103,6 +103,9 @@ int xen_irq_from_pirq(unsigned pirq); | |||
103 | /* Return the pirq allocated to the irq. */ | 103 | /* Return the pirq allocated to the irq. */ |
104 | int xen_pirq_from_irq(unsigned irq); | 104 | int xen_pirq_from_irq(unsigned irq); |
105 | 105 | ||
106 | /* Return the irq allocated to the gsi */ | ||
107 | int xen_irq_from_gsi(unsigned gsi); | ||
108 | |||
106 | /* Determine whether to ignore this IRQ if it is passed to a guest. */ | 109 | /* Determine whether to ignore this IRQ if it is passed to a guest. */ |
107 | int xen_test_irq_shared(int irq); | 110 | int xen_test_irq_shared(int irq); |
108 | 111 | ||
diff --git a/include/xen/grant_table.h b/include/xen/grant_table.h index 15f8a00ff003..11e27c3af3cb 100644 --- a/include/xen/grant_table.h +++ b/include/xen/grant_table.h | |||
@@ -46,6 +46,8 @@ | |||
46 | 46 | ||
47 | #include <xen/features.h> | 47 | #include <xen/features.h> |
48 | 48 | ||
49 | #define GNTTAB_RESERVED_XENSTORE 1 | ||
50 | |||
49 | /* NR_GRANT_FRAMES must be less than or equal to that configured in Xen */ | 51 | /* NR_GRANT_FRAMES must be less than or equal to that configured in Xen */ |
50 | #define NR_GRANT_FRAMES 4 | 52 | #define NR_GRANT_FRAMES 4 |
51 | 53 | ||
diff --git a/include/xen/xenbus_dev.h b/include/xen/xenbus_dev.h index ac5f0fe47ed9..bbee8c6a349d 100644 --- a/include/xen/xenbus_dev.h +++ b/include/xen/xenbus_dev.h | |||
@@ -38,4 +38,7 @@ | |||
38 | #define IOCTL_XENBUS_BACKEND_EVTCHN \ | 38 | #define IOCTL_XENBUS_BACKEND_EVTCHN \ |
39 | _IOC(_IOC_NONE, 'B', 0, 0) | 39 | _IOC(_IOC_NONE, 'B', 0, 0) |
40 | 40 | ||
41 | #define IOCTL_XENBUS_BACKEND_SETUP \ | ||
42 | _IOC(_IOC_NONE, 'B', 1, 0) | ||
43 | |||
41 | #endif /* __LINUX_XEN_XENBUS_DEV_H__ */ | 44 | #endif /* __LINUX_XEN_XENBUS_DEV_H__ */ |